/** * @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 JGe=Object.create;var RR=Object.defineProperty;var jGe=Object.getOwnPropertyDescriptor;var QGe=Object.getOwnPropertyNames;var qGe=Object.getPrototypeOf,$Ge=Object.prototype.hasOwnProperty;var eLe=(e,t,n)=>t in e?RR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var eU=(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 rm=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tLe=(e,t)=>{for(var n in t)RR(e,n,{get:t[n],enumerable:!0})},Nie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of QGe(t))!$Ge.call(e,o)&&o!==n&&RR(e,o,{get:()=>t[o],enumerable:!(i=jGe(t,o))||i.enumerable});return e};var x=(e,t,n)=>(n=e!=null?JGe(qGe(e)):{},Nie(t||!e||!e.__esModule?RR(n,"default",{value:e,enumerable:!0}):n,e)),nLe=e=>Nie(RR({},"__esModule",{value:!0}),e);var Hn=(e,t,n)=>eLe(e,typeof t!="symbol"?t+"":t,n);var T=rm(()=>{"use strict";globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIG1TPU9iamVjdC5jcmVhdGU7dmFyIFd1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgYlM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgcFM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIGdTPU9iamVjdC5nZXRQcm90b3R5cGVPZixfUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBiYT0oZT0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkoZSx7Z2V0Oih0LG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dClbbl19KTplKShmdW5jdGlvbihlKXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxjMT1lPT50PT57dmFyIG49ZVt0XTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIit0KX07dmFyIFg9KGUsdCk9PigpPT4oZSYmKHQ9ZShlPTApKSx0KTt2YXIgZW89KGUsdCk9PigpPT4odHx8ZSgodD17ZXhwb3J0czp7fX0pLmV4cG9ydHMsdCksdC5leHBvcnRzKSxydD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KVd1KGUsbix7Z2V0OnRbbl0sZW51bWVyYWJsZTohMH0pfSxzMT0oZSx0LG4sbyk9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgYSBvZiBwUyh0KSkhX1MuY2FsbChlLGEpJiZhIT09biYmV3UoZSxhLHtnZXQ6KCk9PnRbYV0sZW51bWVyYWJsZTohKG89YlModCxhKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgY2E9KGUsdCxuKT0+KG49ZSE9bnVsbD9tUyhnUyhlKSk6e30sczEodHx8IWV8fCFlLl9fZXNNb2R1bGU/V3UobiwiZGVmYXVsdCIse3ZhbHVlOmUsZW51bWVyYWJsZTohMH0pOm4sZSkpLHlTPWU9PnMxKFd1KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTtmdW5jdGlvbiBBUyhlKXtyZXR1cm4gZSE9bnVsbH12YXIgZyxzZT1YKCgpPT57Zz1BU30pO2Z1bmN0aW9uIFlpKGUpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT1lO2xldCB0O3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7dD1uLnN0YWNrfXRoaXMuc3RhY2s9dH12YXIgV3QsSmk9WCgoKT0+e3NlKCk7ZyhPYmplY3QuY3JlYXRlKSYmKFlpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksWWkucHJvdG90eXBlLmNvbnN0cnVjdG9yPVlpKTtZaS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtsZXQgZT1gJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX1gO3JldHVybiBnKHRoaXMuc3RhY2spJiYoZSs9YAoke3RoaXMuc3RhY2sudG9TdHJpbmcoKX1gKSxlfTtZaS50aHJvd0luc3RhbnRpYXRpb25FcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBZaSgiVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGFuIGludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIil9O1d0PVlpfSk7ZnVuY3Rpb24gd1MoZSl7cmV0dXJuYCR7ZX0gaXMgcmVxdWlyZWQsIGFjdHVhbCB2YWx1ZSB3YXMgdW5kZWZpbmVkYH1mdW5jdGlvbiBxYyhlLHQsbil7cmV0dXJuYEV4cGVjdGVkICR7bn0gdG8gYmUgdHlwZW9mICR7dH0sIGFjdHVhbCB0eXBlb2Ygd2FzICR7ZX1gfXZhciB0byxNbixVbT1YKCgpPT57c2UoKTtKaSgpO3RvPXt9O3RvLnR5cGVPZj17fTt0by5kZWZpbmVkPWZ1bmN0aW9uKGUsdCl7aWYoIWcodCkpdGhyb3cgbmV3IFd0KHdTKGUpKX07dG8udHlwZU9mLmZ1bmM9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgV3QocWModHlwZW9mIHQsImZ1bmN0aW9uIixlKSl9O3RvLnR5cGVPZi5zdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFd0KHFjKHR5cGVvZiB0LCJzdHJpbmciLGUpKX07dG8udHlwZU9mLm51bWJlcj1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgV3QocWModHlwZW9mIHQsIm51bWJlciIsZSkpfTt0by50eXBlT2YubnVtYmVyLmxlc3NUaGFuPWZ1bmN0aW9uKGUsdCxuKXtpZih0by50eXBlT2YubnVtYmVyKGUsdCksdD49bil0aHJvdyBuZXcgV3QoYEV4cGVjdGVkICR7ZX0gdG8gYmUgbGVzcyB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHt0fWApfTt0by50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHRvLnR5cGVPZi5udW1iZXIoZSx0KSx0Pm4pdGhyb3cgbmV3IFd0KGBFeHBlY3RlZCAke2V9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7dH1gKX07dG8udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbihlLHQsbil7aWYodG8udHlwZU9mLm51bWJlcihlLHQpLHQ8PW4pdGhyb3cgbmV3IFd0KGBFeHBlY3RlZCAke2V9IHRvIGJlIGdyZWF0ZXIgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7dH1gKX07dG8udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCxuKXtpZih0by50eXBlT2YubnVtYmVyKGUsdCksdDxuKXRocm93IG5ldyBXdChgRXhwZWN0ZWQgJHtlfSB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtufSwgYWN0dWFsIHZhbHVlIHdhcyAke3R9YCl9O3RvLnR5cGVPZi5vYmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgbmV3IFd0KHFjKHR5cGVvZiB0LCJvYmplY3QiLGUpKX07dG8udHlwZU9mLmJvb2w9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9ImJvb2xlYW4iKXRocm93IG5ldyBXdChxYyh0eXBlb2YgdCwiYm9vbGVhbiIsZSkpfTt0by50eXBlT2YuYmlnaW50PWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQhPSJiaWdpbnQiKXRocm93IG5ldyBXdChxYyh0eXBlb2YgdCwiYmlnaW50IixlKSl9O3RvLnR5cGVPZi5udW1iZXIuZXF1YWxzPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKHRvLnR5cGVPZi5udW1iZXIoZSxuKSx0by50eXBlT2YubnVtYmVyKHQsbyksbiE9PW8pdGhyb3cgbmV3IFd0KGAke2V9IG11c3QgYmUgZXF1YWwgdG8gJHt0fSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07TW49dG99KTt2YXIgZDE9ZW8oKHdHLGYxKT0+e3ZhciBQcj1mdW5jdGlvbihlKXtlPT1udWxsJiYoZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSksdGhpcy5OPTYyNCx0aGlzLk09Mzk3LHRoaXMuTUFUUklYX0E9MjU2NzQ4MzYxNSx0aGlzLlVQUEVSX01BU0s9MjE0NzQ4MzY0OCx0aGlzLkxPV0VSX01BU0s9MjE0NzQ4MzY0Nyx0aGlzLm10PW5ldyBBcnJheSh0aGlzLk4pLHRoaXMubXRpPXRoaXMuTisxLGUuY29uc3RydWN0b3I9PUFycmF5P3RoaXMuaW5pdF9ieV9hcnJheShlLGUubGVuZ3RoKTp0aGlzLmluaXRfc2VlZChlKX07UHIucHJvdG90eXBlLmluaXRfc2VlZD1mdW5jdGlvbihlKXtmb3IodGhpcy5tdFswXT1lPj4+MCx0aGlzLm10aT0xO3RoaXMubXRpPHRoaXMuTjt0aGlzLm10aSsrKXt2YXIgZT10aGlzLm10W3RoaXMubXRpLTFdXnRoaXMubXRbdGhpcy5tdGktMV0+Pj4zMDt0aGlzLm10W3RoaXMubXRpXT0oKChlJjQyOTQ5MDE3NjApPj4+MTYpKjE4MTI0MzMyNTM8PDE2KSsoZSY2NTUzNSkqMTgxMjQzMzI1Myt0aGlzLm10aSx0aGlzLm10W3RoaXMubXRpXT4+Pj0wfX07UHIucHJvdG90eXBlLmluaXRfYnlfYXJyYXk9ZnVuY3Rpb24oZSx0KXt2YXIgbixvLGE7Zm9yKHRoaXMuaW5pdF9zZWVkKDE5NjUwMjE4KSxuPTEsbz0wLGE9dGhpcy5OPnQ/dGhpcy5OOnQ7YTthLS0pe3ZhciByPXRoaXMubXRbbi0xXV50aGlzLm10W24tMV0+Pj4zMDt0aGlzLm10W25dPSh0aGlzLm10W25dXigoKHImNDI5NDkwMTc2MCk+Pj4xNikqMTY2NDUyNTw8MTYpKyhyJjY1NTM1KSoxNjY0NTI1KStlW29dK28sdGhpcy5tdFtuXT4+Pj0wLG4rKyxvKyssbj49dGhpcy5OJiYodGhpcy5tdFswXT10aGlzLm10W3RoaXMuTi0xXSxuPTEpLG8+PXQmJihvPTApfWZvcihhPXRoaXMuTi0xO2E7YS0tKXt2YXIgcj10aGlzLm10W24tMV1edGhpcy5tdFtuLTFdPj4+MzA7dGhpcy5tdFtuXT0odGhpcy5tdFtuXV4oKChyJjQyOTQ5MDE3NjApPj4+MTYpKjE1NjYwODM5NDE8PDE2KSsociY2NTUzNSkqMTU2NjA4Mzk0MSktbix0aGlzLm10W25dPj4+PTAsbisrLG4+PXRoaXMuTiYmKHRoaXMubXRbMF09dGhpcy5tdFt0aGlzLk4tMV0sbj0xKX10aGlzLm10WzBdPTIxNDc0ODM2NDh9O1ByLnByb3RvdHlwZS5yYW5kb21faW50PWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgQXJyYXkoMCx0aGlzLk1BVFJJWF9BKTtpZih0aGlzLm10aT49dGhpcy5OKXt2YXIgbjtmb3IodGhpcy5tdGk9PXRoaXMuTisxJiZ0aGlzLmluaXRfc2VlZCg1NDg5KSxuPTA7bjx0aGlzLk4tdGhpcy5NO24rKyllPXRoaXMubXRbbl0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbbisxXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFtuXT10aGlzLm10W24rdGhpcy5NXV5lPj4+MV50W2UmMV07Zm9yKDtuPHRoaXMuTi0xO24rKyllPXRoaXMubXRbbl0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbbisxXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFtuXT10aGlzLm10W24rKHRoaXMuTS10aGlzLk4pXV5lPj4+MV50W2UmMV07ZT10aGlzLm10W3RoaXMuTi0xXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFswXSZ0aGlzLkxPV0VSX01BU0ssdGhpcy5tdFt0aGlzLk4tMV09dGhpcy5tdFt0aGlzLk0tMV1eZT4+PjFedFtlJjFdLHRoaXMubXRpPTB9cmV0dXJuIGU9dGhpcy5tdFt0aGlzLm10aSsrXSxlXj1lPj4+MTEsZV49ZTw8NyYyNjM2OTI4NjQwLGVePWU8PDE1JjQwMjI3MzA3NTIsZV49ZT4+PjE4LGU+Pj4wfTtQci5wcm90b3R5cGUucmFuZG9tX2ludDMxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpPj4+MX07UHIucHJvdG90eXBlLnJhbmRvbV9pbmNsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLzQyOTQ5NjcyOTUpfTtQci5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLzQyOTQ5NjcyOTYpfTtQci5wcm90b3R5cGUucmFuZG9tX2V4Y2w9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yYW5kb21faW50KCkrLjUpKigxLzQyOTQ5NjcyOTYpfTtQci5wcm90b3R5cGUucmFuZG9tX2xvbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhbmRvbV9pbnQoKT4+PjUsdD10aGlzLnJhbmRvbV9pbnQoKT4+PjY7cmV0dXJuKGUqNjcxMDg4NjQrdCkqKDEvOTAwNzE5OTI1NDc0MDk5Mil9O2YxLmV4cG9ydHM9UHJ9KTt2YXIgTG0sT2UsWHUsdTEsayxHZT1YKCgpPT57TG09Y2EoZDEoKSwxKSxPZT17fTtPZS5FUFNJTE9OMT0uMTtPZS5FUFNJTE9OMj0uMDE7T2UuRVBTSUxPTjM9LjAwMTtPZS5FUFNJTE9OND0xZS00O09lLkVQU0lMT041PTFlLTU7T2UuRVBTSUxPTjY9MWUtNjtPZS5FUFNJTE9ONz0xZS03O09lLkVQU0lMT044PTFlLTg7T2UuRVBTSUxPTjk9MWUtOTtPZS5FUFNJTE9OMTA9MWUtMTA7T2UuRVBTSUxPTjExPTFlLTExO09lLkVQU0lMT04xMj0xZS0xMjtPZS5FUFNJTE9OMTM9MWUtMTM7T2UuRVBTSUxPTjE0PTFlLTE0O09lLkVQU0lMT04xNT0xZS0xNTtPZS5FUFNJTE9OMTY9MWUtMTY7T2UuRVBTSUxPTjE3PTFlLTE3O09lLkVQU0lMT04xOD0xZS0xODtPZS5FUFNJTE9OMTk9MWUtMTk7T2UuRVBTSUxPTjIwPTFlLTIwO09lLkVQU0lMT04yMT0xZS0yMTtPZS5HUkFWSVRBVElPTkFMUEFSQU1FVEVSPTM5ODYwMDQ0MThlNTtPZS5TT0xBUl9SQURJVVM9Njk1NWU1O09lLkxVTkFSX1JBRElVUz0xNzM3NDAwO09lLlNJWFRZX0ZPVVJfS0lMT0JZVEVTPTY0KjEwMjQ7T2UuRk9VUl9HSUdBQllURVM9NCoxMDI0KjEwMjQqMTAyNDtPZS5zaWduPU1hdGguc2lnbj8/ZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsdD09PTB8fHQhPT10P3Q6dD4wPzE6LTF9O09lLnNpZ25Ob3RaZXJvPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LTE6MX07T2UudG9TTm9ybT1mdW5jdGlvbihlLHQpe3JldHVybiB0PXQ/PzI1NSxNYXRoLnJvdW5kKChPZS5jbGFtcChlLC0xLDEpKi41Ky41KSp0KX07T2UuZnJvbVNOb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dD8/MjU1LE9lLmNsYW1wKGUsMCx0KS90KjItMX07T2Uubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1NYXRoLm1heChuLXQsMCksbj09PTA/MDpPZS5jbGFtcCgoZS10KS9uLDAsMSl9O09lLnNpbmg9TWF0aC5zaW5oPz9mdW5jdGlvbih0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfTtPZS5jb3NoPU1hdGguY29zaD8/ZnVuY3Rpb24odCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn07T2UubGVycD1mdW5jdGlvbihlLHQsbil7cmV0dXJuKDEtbikqZStuKnR9O09lLlBJPU1hdGguUEk7T2UuT05FX09WRVJfUEk9MS9NYXRoLlBJO09lLlBJX09WRVJfVFdPPU1hdGguUEkvMjtPZS5QSV9PVkVSX1RIUkVFPU1hdGguUEkvMztPZS5QSV9PVkVSX0ZPVVI9TWF0aC5QSS80O09lLlBJX09WRVJfU0lYPU1hdGguUEkvNjtPZS5USFJFRV9QSV9PVkVSX1RXTz0zKk1hdGguUEkvMjtPZS5UV09fUEk9MipNYXRoLlBJO09lLk9ORV9PVkVSX1RXT19QST0xLygyKk1hdGguUEkpO09lLlJBRElBTlNfUEVSX0RFR1JFRT1NYXRoLlBJLzE4MDtPZS5ERUdSRUVTX1BFUl9SQURJQU49MTgwL01hdGguUEk7T2UuUkFESUFOU19QRVJfQVJDU0VDT05EPU9lLlJBRElBTlNfUEVSX0RFR1JFRS8zNjAwO09lLnRvUmFkaWFucz1mdW5jdGlvbihlKXtyZXR1cm4gZSpPZS5SQURJQU5TX1BFUl9ERUdSRUV9O09lLnRvRGVncmVlcz1mdW5jdGlvbihlKXtyZXR1cm4gZSpPZS5ERUdSRUVTX1BFUl9SQURJQU59O09lLmNvbnZlcnRMb25naXR1ZGVSYW5nZT1mdW5jdGlvbihlKXtsZXQgdD1PZS5UV09fUEksbj1lLU1hdGguZmxvb3IoZS90KSp0O3JldHVybiBuPC1NYXRoLlBJP24rdDpuPj1NYXRoLlBJP24tdDpufTtPZS5jbGFtcFRvTGF0aXR1ZGVSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gT2UuY2xhbXAoZSwtMSpPZS5QSV9PVkVSX1RXTyxPZS5QSV9PVkVSX1RXTyl9O09lLm5lZ2F0aXZlUGlUb1BpPWZ1bmN0aW9uKGUpe3JldHVybiBlPj0tT2UuUEkmJmU8PU9lLlBJP2U6T2UuemVyb1RvVHdvUGkoZStPZS5QSSktT2UuUEl9O09lLnplcm9Ub1R3b1BpPWZ1bmN0aW9uKGUpe2lmKGU+PTAmJmU8PU9lLlRXT19QSSlyZXR1cm4gZTtsZXQgdD1PZS5tb2QoZSxPZS5UV09fUEkpO3JldHVybiBNYXRoLmFicyh0KTxPZS5FUFNJTE9OMTQmJk1hdGguYWJzKGUpPk9lLkVQU0lMT04xND9PZS5UV09fUEk6dH07T2UubW9kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9lLnNpZ24oZSk9PT1PZS5zaWduKHQpJiZNYXRoLmFicyhlKTxNYXRoLmFicyh0KT9lOihlJXQrdCkldH07T2UuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbixvKXtuPW4/PzAsbz1vPz9uO2xldCBhPU1hdGguYWJzKGUtdCk7cmV0dXJuIGE8PW98fGE8PW4qTWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpfTtPZS5sZXNzVGhhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdDwtbn07T2UubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdDxufTtPZS5ncmVhdGVyVGhhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUtdD5ufTtPZS5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS10Pi1ufTtYdT1bMV07T2UuZmFjdG9yaWFsPWZ1bmN0aW9uKGUpe2xldCB0PVh1Lmxlbmd0aDtpZihlPj10KXtsZXQgbj1YdVt0LTFdO2ZvcihsZXQgbz10O288PWU7bysrKXtsZXQgYT1uKm87WHUucHVzaChhKSxuPWF9fXJldHVybiBYdVtlXX07T2UuaW5jcmVtZW50V3JhcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCwrK2UsZT50JiYoZT1uKSxlfTtPZS5pc1Bvd2VyT2ZUd289ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT0wJiYoZSZlLTEpPT09MH07T2UubmV4dFBvd2VyT2ZUd289ZnVuY3Rpb24oZSl7cmV0dXJuLS1lLGV8PWU+PjEsZXw9ZT4+MixlfD1lPj40LGV8PWU+PjgsZXw9ZT4+MTYsKytlLGV9O09lLnByZXZpb3VzUG93ZXJPZlR3bz1mdW5jdGlvbihlKXtyZXR1cm4gZXw9ZT4+MSxlfD1lPj4yLGV8PWU+PjQsZXw9ZT4+OCxlfD1lPj4xNixlfD1lPj4zMixlPShlPj4+MCktKGU+Pj4xKSxlfTtPZS5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8dD90OmU+bj9uOmV9O3UxPW5ldyBMbS5kZWZhdWx0O09lLnNldFJhbmRvbU51bWJlclNlZWQ9ZnVuY3Rpb24oZSl7dTE9bmV3IExtLmRlZmF1bHQoZSl9O09lLm5leHRSYW5kb21OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdTEucmFuZG9tKCl9O09lLnJhbmRvbUJldHdlZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2UubmV4dFJhbmRvbU51bWJlcigpKih0LWUpK2V9O09lLmFjb3NDbGFtcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFjb3MoT2UuY2xhbXAoZSwtMSwxKSl9O09lLmFzaW5DbGFtcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFzaW4oT2UuY2xhbXAoZSwtMSwxKSl9O09lLmNob3JkTGVuZ3RoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqdCpNYXRoLnNpbihlKi41KX07T2UubG9nQmFzZT1mdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLmxvZyh0KX07T2UuY2JydD1NYXRoLmNicnQ/P2Z1bmN0aW9uKHQpe2xldCBuPU1hdGgucG93KE1hdGguYWJzKHQpLC4zMzMzMzMzMzMzMzMzMzMzKTtyZXR1cm4gdDwwPy1uOm59O09lLmxvZzI9TWF0aC5sb2cyPz9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkqTWF0aC5MT0cyRX07T2UuZm9nPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZSp0O3JldHVybiAxLU1hdGguZXhwKC0obipuKSl9O09lLmZhc3RBcHByb3hpbWF0ZUF0YW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUqKC0uMTc4NCpNYXRoLmFicyhlKS0uMDY2MyplKmUrMS4wMzAxKX07T2UuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24oZSx0KXtsZXQgbixvPU1hdGguYWJzKGUpO249TWF0aC5hYnModCk7bGV0IGE9TWF0aC5tYXgobyxuKTtuPU1hdGgubWluKG8sbik7bGV0IHI9bi9hO3JldHVybiBvPU9lLmZhc3RBcHByb3hpbWF0ZUF0YW4ociksbz1NYXRoLmFicyh0KT5NYXRoLmFicyhlKT9PZS5QSV9PVkVSX1RXTy1vOm8sbz1lPDA/T2UuUEktbzpvLG89dDwwPy1vOm8sb307az1PZX0pO3ZhciBtbixZdSxsMSxKdSxqbSxFUyxwYSxXYyxzLEllPVgoKCk9PntzZSgpO0dlKCk7bW49Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0LG4sbyl7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzAsdGhpcy56PW8/PzB9c3RhdGljIGZyb21TcGhlcmljYWwodCxuKXtnKG4pfHwobj1uZXcgZSk7bGV0IG89dC5jbG9jayxhPXQuY29uZSxyPXQubWFnbml0dWRlPz8xLGk9cipNYXRoLnNpbihhKTtyZXR1cm4gbi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyksbi56PXIqTWF0aC5jb3MoYSksbn1zdGF0aWMgZnJvbUVsZW1lbnRzKHQsbixvLGEpe3JldHVybiBnKGEpPyhhLng9dCxhLnk9bixhLno9byxhKTpuZXcgZSh0LG4sbyl9c3RhdGljIGNsb25lKHQsbil7aWYoZyh0KSlyZXR1cm4gZyhuKT8obi54PXQueCxuLnk9dC55LG4uej10Lnosbik6bmV3IGUodC54LHQueSx0LnopfXN0YXRpYyBwYWNrKHQsbixvKXtyZXR1cm4gbz1vPz8wLG5bbysrXT10LngsbltvKytdPXQueSxuW29dPXQueixufXN0YXRpYyB1bnBhY2sodCxuLG8pe3JldHVybiBuPW4/PzAsZyhvKXx8KG89bmV3IGUpLG8ueD10W24rK10sby55PXRbbisrXSxvLno9dFtuXSxvfXN0YXRpYyBwYWNrQXJyYXkodCxuKXtsZXQgbz10Lmxlbmd0aCxhPW8qMztnKG4pPyFBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aCE9PWF8fG4ubGVuZ3RoIT09YSYmKG4ubGVuZ3RoPWEpOm49bmV3IEFycmF5KGEpO2ZvcihsZXQgcj0wO3I8bzsrK3IpZS5wYWNrKHRbcl0sbixyKjMpO3JldHVybiBufXN0YXRpYyB1bnBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoO2cobik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCBhPTA7YTxvO2ErPTMpe2xldCByPWEvMztuW3JdPWUudW5wYWNrKHQsYSxuW3JdKX1yZXR1cm4gbn1zdGF0aWMgbWF4aW11bUNvbXBvbmVudCh0KXtyZXR1cm4gTWF0aC5tYXgodC54LHQueSx0LnopfXN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1pbih0LngsdC55LHQueil9c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1pbih0Lngsbi54KSxvLnk9TWF0aC5taW4odC55LG4ueSksby56PU1hdGgubWluKHQueixuLnopLG99c3RhdGljIG1heGltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1heCh0Lngsbi54KSxvLnk9TWF0aC5tYXgodC55LG4ueSksby56PU1hdGgubWF4KHQueixuLnopLG99c3RhdGljIGNsYW1wKHQsbixvLGEpe2xldCByPWsuY2xhbXAodC54LG4ueCxvLngpLGk9ay5jbGFtcCh0Lnksbi55LG8ueSksZj1rLmNsYW1wKHQueixuLnosby56KTtyZXR1cm4gYS54PXIsYS55PWksYS56PWYsYX1zdGF0aWMgbWFnbml0dWRlU3F1YXJlZCh0KXtyZXR1cm4gdC54KnQueCt0LnkqdC55K3Queip0Lnp9c3RhdGljIG1hZ25pdHVkZSh0KXtyZXR1cm4gTWF0aC5zcXJ0KGUubWFnbml0dWRlU3F1YXJlZCh0KSl9c3RhdGljIGRpc3RhbmNlKHQsbil7cmV0dXJuIGUuc3VidHJhY3QodCxuLFl1KSxlLm1hZ25pdHVkZShZdSl9c3RhdGljIGRpc3RhbmNlU3F1YXJlZCh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbixZdSksZS5tYWduaXR1ZGVTcXVhcmVkKFl1KX1zdGF0aWMgbm9ybWFsaXplKHQsbil7bGV0IG89ZS5tYWduaXR1ZGUodCk7cmV0dXJuIG4ueD10LngvbyxuLnk9dC55L28sbi56PXQuei9vLG59c3RhdGljIGRvdCh0LG4pe3JldHVybiB0Lngqbi54K3QueSpuLnkrdC56Km4uen1zdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKHQsbixvKXtyZXR1cm4gby54PXQueCpuLngsby55PXQueSpuLnksby56PXQueipuLnosb31zdGF0aWMgZGl2aWRlQ29tcG9uZW50cyh0LG4sbyl7cmV0dXJuIG8ueD10Lngvbi54LG8ueT10Lnkvbi55LG8uej10Lnovbi56LG99c3RhdGljIGFkZCh0LG4sbyl7cmV0dXJuIG8ueD10Lngrbi54LG8ueT10Lnkrbi55LG8uej10Lnorbi56LG99c3RhdGljIHN1YnRyYWN0KHQsbixvKXtyZXR1cm4gby54PXQueC1uLngsby55PXQueS1uLnksby56PXQuei1uLnosb31zdGF0aWMgbXVsdGlwbHlCeVNjYWxhcih0LG4sbyl7cmV0dXJuIG8ueD10LngqbixvLnk9dC55Km4sby56PXQueipuLG99c3RhdGljIGRpdmlkZUJ5U2NhbGFyKHQsbixvKXtyZXR1cm4gby54PXQueC9uLG8ueT10LnkvbixvLno9dC56L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG4uej0tdC56LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxuLno9TWF0aC5hYnModC56KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLGwxKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChsMSxhLGEpfXN0YXRpYyBhbmdsZUJldHdlZW4odCxuKXtlLm5vcm1hbGl6ZSh0LEp1KSxlLm5vcm1hbGl6ZShuLGptKTtsZXQgbz1lLmRvdChKdSxqbSksYT1lLm1hZ25pdHVkZShlLmNyb3NzKEp1LGptLEp1KSk7cmV0dXJuIE1hdGguYXRhbjIoYSxvKX1zdGF0aWMgbW9zdE9ydGhvZ29uYWxBeGlzKHQsbil7bGV0IG89ZS5ub3JtYWxpemUodCxFUyk7cmV0dXJuIGUuYWJzKG8sbyksby54PD1vLnk/by54PD1vLno/bj1lLmNsb25lKGUuVU5JVF9YLG4pOm49ZS5jbG9uZShlLlVOSVRfWixuKTpvLnk8PW8uej9uPWUuY2xvbmUoZS5VTklUX1ksbik6bj1lLmNsb25lKGUuVU5JVF9aLG4pLG59c3RhdGljIHByb2plY3RWZWN0b3IodCxuLG8pe2xldCBhPWUuZG90KHQsbikvZS5kb3QobixuKTtyZXR1cm4gZS5tdWx0aXBseUJ5U2NhbGFyKG4sYSxvKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQ9PT1ufHxnKHQpJiZnKG4pJiZ0Lng9PT1uLngmJnQueT09PW4ueSYmdC56PT09bi56fXN0YXRpYyBlcXVhbHNBcnJheSh0LG4sbyl7cmV0dXJuIHQueD09PW5bb10mJnQueT09PW5bbysxXSYmdC56PT09bltvKzJdfXN0YXRpYyBlcXVhbHNFcHNpbG9uKHQsbixvLGEpe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmay5lcXVhbHNFcHNpbG9uKHQueCxuLngsbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueSxuLnksbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueixuLnosbyxhKX1zdGF0aWMgY3Jvc3ModCxuLG8pe2xldCBhPXQueCxyPXQueSxpPXQueixmPW4ueCxkPW4ueSxjPW4ueix1PXIqYy1pKmQsbD1pKmYtYSpjLGg9YSpkLXIqZjtyZXR1cm4gby54PXUsby55PWwsby56PWgsb31zdGF0aWMgbWlkcG9pbnQodCxuLG8pe3JldHVybiBvLng9KHQueCtuLngpKi41LG8ueT0odC55K24ueSkqLjUsby56PSh0Lnorbi56KSouNSxvfXN0YXRpYyBmcm9tRGVncmVlcyh0LG4sbyxhLHIpe3JldHVybiB0PWsudG9SYWRpYW5zKHQpLG49ay50b1JhZGlhbnMobiksZS5mcm9tUmFkaWFucyh0LG4sbyxhLHIpfXN0YXRpYyBmcm9tUmFkaWFucyh0LG4sbyxhLHIpe289bz8/MDtsZXQgaT1nKGEpP2EucmFkaWlTcXVhcmVkOmUuX2VsbGlwc29pZFJhZGlpU3F1YXJlZCxmPU1hdGguY29zKG4pO3BhLng9ZipNYXRoLmNvcyh0KSxwYS55PWYqTWF0aC5zaW4odCkscGEuej1NYXRoLnNpbihuKSxwYT1lLm5vcm1hbGl6ZShwYSxwYSksZS5tdWx0aXBseUNvbXBvbmVudHMoaSxwYSxXYyk7bGV0IGQ9TWF0aC5zcXJ0KGUuZG90KHBhLFdjKSk7cmV0dXJuIFdjPWUuZGl2aWRlQnlTY2FsYXIoV2MsZCxXYykscGE9ZS5tdWx0aXBseUJ5U2NhbGFyKHBhLG8scGEpLGcocil8fChyPW5ldyBlKSxlLmFkZChXYyxwYSxyKX1zdGF0aWMgZnJvbURlZ3JlZXNBcnJheSh0LG4sbyl7bGV0IGE9dC5sZW5ndGg7ZyhvKT9vLmxlbmd0aD1hLzI6bz1uZXcgQXJyYXkoYS8yKTtmb3IobGV0IHI9MDtyPGE7cis9Mil7bGV0IGk9dFtyXSxmPXRbcisxXSxkPXIvMjtvW2RdPWUuZnJvbURlZ3JlZXMoaSxmLDAsbixvW2RdKX1yZXR1cm4gb31zdGF0aWMgZnJvbVJhZGlhbnNBcnJheSh0LG4sbyl7bGV0IGE9dC5sZW5ndGg7ZyhvKT9vLmxlbmd0aD1hLzI6bz1uZXcgQXJyYXkoYS8yKTtmb3IobGV0IHI9MDtyPGE7cis9Mil7bGV0IGk9dFtyXSxmPXRbcisxXSxkPXIvMjtvW2RdPWUuZnJvbVJhZGlhbnMoaSxmLDAsbixvW2RdKX1yZXR1cm4gb31zdGF0aWMgZnJvbURlZ3JlZXNBcnJheUhlaWdodHModCxuLG8pe2xldCBhPXQubGVuZ3RoO2cobyk/by5sZW5ndGg9YS8zOm89bmV3IEFycmF5KGEvMyk7Zm9yKGxldCByPTA7cjxhO3IrPTMpe2xldCBpPXRbcl0sZj10W3IrMV0sZD10W3IrMl0sYz1yLzM7b1tjXT1lLmZyb21EZWdyZWVzKGksZixkLG4sb1tjXSl9cmV0dXJuIG99c3RhdGljIGZyb21SYWRpYW5zQXJyYXlIZWlnaHRzKHQsbixvKXtsZXQgYT10Lmxlbmd0aDtnKG8pP28ubGVuZ3RoPWEvMzpvPW5ldyBBcnJheShhLzMpO2ZvcihsZXQgcj0wO3I8YTtyKz0zKXtsZXQgaT10W3JdLGY9dFtyKzFdLGQ9dFtyKzJdLGM9ci8zO29bY109ZS5mcm9tUmFkaWFucyhpLGYsZCxuLG9bY10pfXJldHVybiBvfWNsb25lKHQpe3JldHVybiBlLmNsb25lKHRoaXMsdCl9ZXF1YWxzKHQpe3JldHVybiBlLmVxdWFscyh0aGlzLHQpfWVxdWFsc0Vwc2lsb24odCxuLG8pe3JldHVybiBlLmVxdWFsc0Vwc2lsb24odGhpcyx0LG4sbyl9dG9TdHJpbmcoKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH19O21uLmZyb21DYXJ0ZXNpYW40PW1uLmNsb25lO21uLnBhY2tlZExlbmd0aD0zO21uLmZyb21BcnJheT1tbi51bnBhY2s7WXU9bmV3IG1uLGwxPW5ldyBtbixKdT1uZXcgbW4sam09bmV3IG1uLEVTPW5ldyBtbixwYT1uZXcgbW4sV2M9bmV3IG1uO21uLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9bmV3IG1uKDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTttbi5aRVJPPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMCwwKSk7bW4uT05FPU9iamVjdC5mcmVlemUobmV3IG1uKDEsMSwxKSk7bW4uVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IG1uKDEsMCwwKSk7bW4uVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMSwwKSk7bW4uVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IG1uKDAsMCwxKSk7cz1tbn0pO2Z1bmN0aW9uIHhTKGUsdCxuLG8sYSl7bGV0IHI9ZS54LGk9ZS55LGY9ZS56LGQ9dC54LGM9dC55LHU9dC56LGw9cipyKmQqZCxoPWkqaSpjKmMsbT1mKmYqdSp1LGI9bCtoK20scD1NYXRoLnNxcnQoMS9iKSx5PXMubXVsdGlwbHlCeVNjYWxhcihlLHAsVFMpO2lmKGI8bylyZXR1cm4gaXNGaW5pdGUocCk/cy5jbG9uZSh5LGEpOnZvaWQgMDtsZXQgRT1uLngsXz1uLnksVD1uLnosdz1SUzt3Lng9eS54KkUqMix3Lnk9eS55Kl8qMix3Lno9eS56KlQqMjtsZXQgUj0oMS1wKSpzLm1hZ25pdHVkZShlKS8oLjUqcy5tYWduaXR1ZGUodykpLFM9MCxDLEksTixQLHYsQSx4LE0sRixVLHo7ZG97Ui09UyxOPTEvKDErUipFKSxQPTEvKDErUipfKSx2PTEvKDErUipUKSxBPU4qTix4PVAqUCxNPXYqdixGPUEqTixVPXgqUCx6PU0qdixDPWwqQStoKngrbSpNLTEsST1sKkYqRStoKlUqXyttKnoqVDtsZXQgRD0tMipJO1M9Qy9EfXdoaWxlKE1hdGguYWJzKEMpPmsuRVBTSUxPTjEyKTtyZXR1cm4gZyhhKT8oYS54PXIqTixhLnk9aSpQLGEuej1mKnYsYSk6bmV3IHMocipOLGkqUCxmKnYpfXZhciBUUyxSUyxadSx6bT1YKCgpPT57SWUoKTtzZSgpO0dlKCk7VFM9bmV3IHMsUlM9bmV3IHM7WnU9eFN9KTtmdW5jdGlvbiBibihlLHQsbil7dGhpcy5sb25naXR1ZGU9ZT8/MCx0aGlzLmxhdGl0dWRlPXQ/PzAsdGhpcy5oZWlnaHQ9bj8/MH12YXIgT1MsU1MsQ1MscmUsRXQ9WCgoKT0+e0llKCk7c2UoKTtHZSgpO3ptKCk7Ym4uZnJvbVJhZGlhbnM9ZnVuY3Rpb24oZSx0LG4sbyl7cmV0dXJuIG49bj8/MCxnKG8pPyhvLmxvbmdpdHVkZT1lLG8ubGF0aXR1ZGU9dCxvLmhlaWdodD1uLG8pOm5ldyBibihlLHQsbil9O2JuLmZyb21EZWdyZWVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBlPWsudG9SYWRpYW5zKGUpLHQ9ay50b1JhZGlhbnModCksYm4uZnJvbVJhZGlhbnMoZSx0LG4sbyl9O09TPW5ldyBzLFNTPW5ldyBzLENTPW5ldyBzO2JuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWk9bmV3IHMoMS82Mzc4MTM3LDEvNjM3ODEzNywxLzYzNTY3NTIzMTQyNDUxNzllLTkpO2JuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkPW5ldyBzKDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM3ODEzNyo2Mzc4MTM3KSwxLyg2MzU2NzUyMzE0MjQ1MTc5ZS05KjYzNTY3NTIzMTQyNDUxNzllLTkpKTtibi5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZD1rLkVQU0lMT04xO2JuLmZyb21DYXJ0ZXNpYW49ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWcodCk/dC5vbmVPdmVyUmFkaWk6Ym4uX2VsbGlwc29pZE9uZU92ZXJSYWRpaSxhPWcodCk/dC5vbmVPdmVyUmFkaWlTcXVhcmVkOmJuLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkLHI9Zyh0KT90Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkOmJuLl9lbGxpcHNvaWRDZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGk9WnUoZSxvLGEscixTUyk7aWYoIWcoaSkpcmV0dXJuO2xldCBmPXMubXVsdGlwbHlDb21wb25lbnRzKGksYSxPUyk7Zj1zLm5vcm1hbGl6ZShmLGYpO2xldCBkPXMuc3VidHJhY3QoZSxpLENTKSxjPU1hdGguYXRhbjIoZi55LGYueCksdT1NYXRoLmFzaW4oZi56KSxsPWsuc2lnbihzLmRvdChkLGUpKSpzLm1hZ25pdHVkZShkKTtyZXR1cm4gZyhuKT8obi5sb25naXR1ZGU9YyxuLmxhdGl0dWRlPXUsbi5oZWlnaHQ9bCxuKTpuZXcgYm4oYyx1LGwpfTtibi50b0NhcnRlc2lhbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHMuZnJvbVJhZGlhbnMoZS5sb25naXR1ZGUsZS5sYXRpdHVkZSxlLmhlaWdodCx0LG4pfTtibi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWUubG9uZ2l0dWRlLHQubGF0aXR1ZGU9ZS5sYXRpdHVkZSx0LmhlaWdodD1lLmhlaWdodCx0KTpuZXcgYm4oZS5sb25naXR1ZGUsZS5sYXRpdHVkZSxlLmhlaWdodCl9O2JuLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS5sb25naXR1ZGU9PT10LmxvbmdpdHVkZSYmZS5sYXRpdHVkZT09PXQubGF0aXR1ZGUmJmUuaGVpZ2h0PT09dC5oZWlnaHR9O2JuLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGUubG9uZ2l0dWRlLXQubG9uZ2l0dWRlKTw9biYmTWF0aC5hYnMoZS5sYXRpdHVkZS10LmxhdGl0dWRlKTw9biYmTWF0aC5hYnMoZS5oZWlnaHQtdC5oZWlnaHQpPD1ufTtibi5aRVJPPU9iamVjdC5mcmVlemUobmV3IGJuKDAsMCwwKSk7Ym4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBibi5jbG9uZSh0aGlzLGUpfTtibi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBibi5lcXVhbHModGhpcyxlKX07Ym4ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYm4uZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O2JuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLmxvbmdpdHVkZX0sICR7dGhpcy5sYXRpdHVkZX0sICR7dGhpcy5oZWlnaHR9KWB9O3JlPWJufSk7dmFyIEZuLFF1LGgxLG0xLGIxLE1TLFksanQ9WCgoKT0+e3NlKCk7R2UoKTtGbj1jbGFzcyBle2NvbnN0cnVjdG9yKHQsbil7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzB9c3RhdGljIGZyb21FbGVtZW50cyh0LG4sbyl7cmV0dXJuIGcobyk/KG8ueD10LG8ueT1uLG8pOm5ldyBlKHQsbil9c3RhdGljIGNsb25lKHQsbil7aWYoZyh0KSlyZXR1cm4gZyhuKT8obi54PXQueCxuLnk9dC55LG4pOm5ldyBlKHQueCx0LnkpfXN0YXRpYyBwYWNrKHQsbixvKXtyZXR1cm4gbz1vPz8wLG5bbysrXT10LngsbltvXT10Lnksbn1zdGF0aWMgdW5wYWNrKHQsbixvKXtyZXR1cm4gbj1uPz8wLGcobyl8fChvPW5ldyBlKSxvLng9dFtuKytdLG8ueT10W25dLG99c3RhdGljIHBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoLGE9byoyO2cobik/IUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoIT09YXx8bi5sZW5ndGghPT1hJiYobi5sZW5ndGg9YSk6bj1uZXcgQXJyYXkoYSk7Zm9yKGxldCByPTA7cjxvOysrcillLnBhY2sodFtyXSxuLHIqMik7cmV0dXJuIG59c3RhdGljIHVucGFja0FycmF5KHQsbil7bGV0IG89dC5sZW5ndGg7ZyhuKT9uLmxlbmd0aD1vLzI6bj1uZXcgQXJyYXkoby8yKTtmb3IobGV0IGE9MDthPG87YSs9Mil7bGV0IHI9YS8yO25bcl09ZS51bnBhY2sodCxhLG5bcl0pfXJldHVybiBufXN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1heCh0LngsdC55KX1zdGF0aWMgbWluaW11bUNvbXBvbmVudCh0KXtyZXR1cm4gTWF0aC5taW4odC54LHQueSl9c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudCh0LG4sbyl7cmV0dXJuIG8ueD1NYXRoLm1pbih0Lngsbi54KSxvLnk9TWF0aC5taW4odC55LG4ueSksb31zdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KHQsbixvKXtyZXR1cm4gby54PU1hdGgubWF4KHQueCxuLngpLG8ueT1NYXRoLm1heCh0Lnksbi55KSxvfXN0YXRpYyBjbGFtcCh0LG4sbyxhKXtsZXQgcj1rLmNsYW1wKHQueCxuLngsby54KSxpPWsuY2xhbXAodC55LG4ueSxvLnkpO3JldHVybiBhLng9cixhLnk9aSxhfXN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKHQpe3JldHVybiB0LngqdC54K3QueSp0Lnl9c3RhdGljIG1hZ25pdHVkZSh0KXtyZXR1cm4gTWF0aC5zcXJ0KGUubWFnbml0dWRlU3F1YXJlZCh0KSl9c3RhdGljIGRpc3RhbmNlKHQsbil7cmV0dXJuIGUuc3VidHJhY3QodCxuLFF1KSxlLm1hZ25pdHVkZShRdSl9c3RhdGljIGRpc3RhbmNlU3F1YXJlZCh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbixRdSksZS5tYWduaXR1ZGVTcXVhcmVkKFF1KX1zdGF0aWMgbm9ybWFsaXplKHQsbil7bGV0IG89ZS5tYWduaXR1ZGUodCk7cmV0dXJuIG4ueD10LngvbyxuLnk9dC55L28sbn1zdGF0aWMgZG90KHQsbil7cmV0dXJuIHQueCpuLngrdC55Km4ueX1zdGF0aWMgY3Jvc3ModCxuKXtyZXR1cm4gdC54Km4ueS10Lnkqbi54fXN0YXRpYyBtdWx0aXBseUNvbXBvbmVudHModCxuLG8pe3JldHVybiBvLng9dC54Km4ueCxvLnk9dC55Km4ueSxvfXN0YXRpYyBkaXZpZGVDb21wb25lbnRzKHQsbixvKXtyZXR1cm4gby54PXQueC9uLngsby55PXQueS9uLnksb31zdGF0aWMgYWRkKHQsbixvKXtyZXR1cm4gby54PXQueCtuLngsby55PXQueStuLnksb31zdGF0aWMgc3VidHJhY3QodCxuLG8pe3JldHVybiBvLng9dC54LW4ueCxvLnk9dC55LW4ueSxvfXN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKHQsbixvKXtyZXR1cm4gby54PXQueCpuLG8ueT10LnkqbixvfXN0YXRpYyBkaXZpZGVCeVNjYWxhcih0LG4sbyl7cmV0dXJuIG8ueD10LngvbixvLnk9dC55L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLGgxKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChoMSxhLGEpfXN0YXRpYyBhbmdsZUJldHdlZW4odCxuKXtyZXR1cm4gZS5ub3JtYWxpemUodCxtMSksZS5ub3JtYWxpemUobixiMSksay5hY29zQ2xhbXBlZChlLmRvdChtMSxiMSkpfXN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXModCxuKXtsZXQgbz1lLm5vcm1hbGl6ZSh0LE1TKTtyZXR1cm4gZS5hYnMobyxvKSxvLng8PW8ueT9uPWUuY2xvbmUoZS5VTklUX1gsbik6bj1lLmNsb25lKGUuVU5JVF9ZLG4pLG59c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmdC54PT09bi54JiZ0Lnk9PT1uLnl9c3RhdGljIGVxdWFsc0FycmF5KHQsbixvKXtyZXR1cm4gdC54PT09bltvXSYmdC55PT09bltvKzFdfXN0YXRpYyBlcXVhbHNFcHNpbG9uKHQsbixvLGEpe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmay5lcXVhbHNFcHNpbG9uKHQueCxuLngsbyxhKSYmay5lcXVhbHNFcHNpbG9uKHQueSxuLnksbyxhKX1jbG9uZSh0KXtyZXR1cm4gZS5jbG9uZSh0aGlzLHQpfWVxdWFscyh0KXtyZXR1cm4gZS5lcXVhbHModGhpcyx0KX1lcXVhbHNFcHNpbG9uKHQsbixvKXtyZXR1cm4gZS5lcXVhbHNFcHNpbG9uKHRoaXMsdCxuLG8pfXRvU3RyaW5nKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSlgfX07Rm4uZnJvbUNhcnRlc2lhbjM9Rm4uY2xvbmU7Rm4uZnJvbUNhcnRlc2lhbjQ9Rm4uY2xvbmU7Rm4ucGFja2VkTGVuZ3RoPTI7Rm4uZnJvbUFycmF5PUZuLnVucGFjaztRdT1uZXcgRm4saDE9bmV3IEZuLG0xPW5ldyBGbixiMT1uZXcgRm4sTVM9bmV3IEZuO0ZuLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgRm4oMCwwKSk7Rm4uT05FPU9iamVjdC5mcmVlemUobmV3IEZuKDEsMSkpO0ZuLlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyBGbigxLDApKTtGbi5VTklUX1k9T2JqZWN0LmZyZWV6ZShuZXcgRm4oMCwxKSk7WT1Gbn0pO2Z1bmN0aW9uIGcxKGUsdCxuLG8pe3Q9dD8/MCxuPW4/PzAsbz1vPz8wLGUuX3JhZGlpPW5ldyBzKHQsbixvKSxlLl9yYWRpaVNxdWFyZWQ9bmV3IHModCp0LG4qbixvKm8pLGUuX3JhZGlpVG9UaGVGb3VydGg9bmV3IHModCp0KnQqdCxuKm4qbipuLG8qbypvKm8pLGUuX29uZU92ZXJSYWRpaT1uZXcgcyh0PT09MD8wOjEvdCxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksZS5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgcyh0PT09MD8wOjEvKHQqdCksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksZS5fbWluaW11bVJhZGl1cz1NYXRoLm1pbih0LG4sbyksZS5fbWF4aW11bVJhZGl1cz1NYXRoLm1heCh0LG4sbyksZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1rLkVQU0lMT04xLGUuX3JhZGlpU3F1YXJlZC56IT09MCYmKGUuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPWUuX3JhZGlpU3F1YXJlZC54L2UuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiBfdChlLHQsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsZzEodGhpcyxlLHQsbil9ZnVuY3Rpb24gcDEoZSx0LG4pe2xldCBvPS41Kih0K2UpLGE9LjUqKHQtZSkscj0wO2ZvcihsZXQgaT0wO2k8NTtpKyspe2xldCBmPWEqRFNbaV07cis9QlNbaV0qKG4obytmKStuKG8tZikpfXJldHVybiByKj1hLHJ9dmFyIE5TLElTLFBTLGtTLHZTLEZTLERTLEJTLHEscWU9WCgoKT0+e2p0KCk7SWUoKTtFdCgpO3NlKCk7R2UoKTt6bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF90LnByb3RvdHlwZSx7cmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaX19LHJhZGlpU3F1YXJlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpU3F1YXJlZH19LHJhZGlpVG9UaGVGb3VydGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaVRvVGhlRm91cnRofX0sb25lT3ZlclJhZGlpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpfX0sb25lT3ZlclJhZGlpU3F1YXJlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWR9fSxtaW5pbXVtUmFkaXVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluaW11bVJhZGl1c319LG1heGltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtUmFkaXVzfX19KTtfdC5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKCFnKGUpKXJldHVybjtsZXQgbj1lLl9yYWRpaTtyZXR1cm4gZyh0KT8ocy5jbG9uZShuLHQuX3JhZGlpKSxzLmNsb25lKGUuX3JhZGlpU3F1YXJlZCx0Ll9yYWRpaVNxdWFyZWQpLHMuY2xvbmUoZS5fcmFkaWlUb1RoZUZvdXJ0aCx0Ll9yYWRpaVRvVGhlRm91cnRoKSxzLmNsb25lKGUuX29uZU92ZXJSYWRpaSx0Ll9vbmVPdmVyUmFkaWkpLHMuY2xvbmUoZS5fb25lT3ZlclJhZGlpU3F1YXJlZCx0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkKSx0Ll9taW5pbXVtUmFkaXVzPWUuX21pbmltdW1SYWRpdXMsdC5fbWF4aW11bVJhZGl1cz1lLl9tYXhpbXVtUmFkaXVzLHQuX2NlbnRlclRvbGVyYW5jZVNxdWFyZWQ9ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZCx0KTpuZXcgX3Qobi54LG4ueSxuLnopfTtfdC5mcm9tQ2FydGVzaWFuMz1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgX3QpLGcoZSkmJmcxKHQsZS54LGUueSxlLnopLHR9O190LldHUzg0PU9iamVjdC5mcmVlemUobmV3IF90KDYzNzgxMzcsNjM3ODEzNyw2MzU2NzUyMzE0MjQ1MTc5ZS05KSk7X3QuVU5JVF9TUEhFUkU9T2JqZWN0LmZyZWV6ZShuZXcgX3QoMSwxLDEpKTtfdC5NT09OPU9iamVjdC5mcmVlemUobmV3IF90KGsuTFVOQVJfUkFESVVTLGsuTFVOQVJfUkFESVVTLGsuTFVOQVJfUkFESVVTKSk7X3QuTUFSUz1PYmplY3QuZnJlZXplKG5ldyBfdCgzMzk2MTkwLDMzOTYxOTAsMzM3NjIwMCkpO190Ll9kZWZhdWx0PV90LldHUzg0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF90LHtkZWZhdWx0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3QuX2RlZmF1bHR9LHNldDpmdW5jdGlvbihlKXtfdC5fZGVmYXVsdD1lLHMuX2VsbGlwc29pZFJhZGlpU3F1YXJlZD1lLnJhZGlpU3F1YXJlZCxyZS5fZWxsaXBzb2lkT25lT3ZlclJhZGlpPWUub25lT3ZlclJhZGlpLHJlLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWlTcXVhcmVkPWUub25lT3ZlclJhZGlpU3F1YXJlZCxyZS5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZD1lLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkfX19KTtfdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIF90LmNsb25lKHRoaXMsZSl9O190LnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aDtfdC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9yYWRpaSx0LG4pLHR9O190LnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPXMudW5wYWNrKGUsdCk7cmV0dXJuIF90LmZyb21DYXJ0ZXNpYW4zKG8sbil9O190LnByb3RvdHlwZS5nZW9jZW50cmljU3VyZmFjZU5vcm1hbD1zLm5vcm1hbGl6ZTtfdC5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sb25naXR1ZGUsbz1lLmxhdGl0dWRlLGE9TWF0aC5jb3Mobykscj1hKk1hdGguY29zKG4pLGk9YSpNYXRoLnNpbihuKSxmPU1hdGguc2luKG8pO3JldHVybiBnKHQpfHwodD1uZXcgcyksdC54PXIsdC55PWksdC56PWYscy5ub3JtYWxpemUodCx0KX07X3QucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbD1mdW5jdGlvbihlLHQpe2lmKCFzLmVxdWFsc0Vwc2lsb24oZSxzLlpFUk8say5FUFNJTE9OMTQpKXJldHVybiBnKHQpfHwodD1uZXcgcyksdD1zLm11bHRpcGx5Q29tcG9uZW50cyhlLHRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWQsdCkscy5ub3JtYWxpemUodCx0KX07TlM9bmV3IHMsSVM9bmV3IHM7X3QucHJvdG90eXBlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuPWZ1bmN0aW9uKGUsdCl7bGV0IG49TlMsbz1JUzt0aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYyhlLG4pLHMubXVsdGlwbHlDb21wb25lbnRzKHRoaXMuX3JhZGlpU3F1YXJlZCxuLG8pO2xldCBhPU1hdGguc3FydChzLmRvdChuLG8pKTtyZXR1cm4gcy5kaXZpZGVCeVNjYWxhcihvLGEsbykscy5tdWx0aXBseUJ5U2NhbGFyKG4sZS5oZWlnaHQsbiksZyh0KXx8KHQ9bmV3IHMpLHMuYWRkKG8sbix0KX07X3QucHJvdG90eXBlLmNhcnRvZ3JhcGhpY0FycmF5VG9DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbihlLHQpe2xldCBuPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bjp0PW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47bysrKXRbb109dGhpcy5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlW29dLHRbb10pO3JldHVybiB0fTtQUz1uZXcgcyxrUz1uZXcgcyx2Uz1uZXcgcztfdC5wcm90b3R5cGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWM9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxrUyk7aWYoIWcobikpcmV0dXJuO2xldCBvPXRoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sUFMpLGE9cy5zdWJ0cmFjdChlLG4sdlMpLHI9TWF0aC5hdGFuMihvLnksby54KSxpPU1hdGguYXNpbihvLnopLGY9ay5zaWduKHMuZG90KGEsZSkpKnMubWFnbml0dWRlKGEpO3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1yLHQubGF0aXR1ZGU9aSx0LmhlaWdodD1mLHQpOm5ldyByZShyLGksZil9O190LnByb3RvdHlwZS5jYXJ0ZXNpYW5BcnJheVRvQ2FydG9ncmFwaGljQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW46dD1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyl0W29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVtvXSx0W29dKTtyZXR1cm4gdH07X3QucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWnUoZSx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLHQpfTtfdC5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IHMpO2xldCBuPWUueCxvPWUueSxhPWUueixyPXRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWQsaT0xL01hdGguc3FydChuKm4qci54K28qbypyLnkrYSphKnIueik7cmV0dXJuIHMubXVsdGlwbHlCeVNjYWxhcihlLGksdCl9O190LnByb3RvdHlwZS50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHMubXVsdGlwbHlDb21wb25lbnRzKGUsdGhpcy5fb25lT3ZlclJhZGlpLHQpfTtfdC5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Gcm9tU2NhbGVkU3BhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHMubXVsdGlwbHlDb21wb25lbnRzKGUsdGhpcy5fcmFkaWksdCl9O190LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHxnKGUpJiZzLmVxdWFscyh0aGlzLl9yYWRpaSxlLl9yYWRpaSl9O190LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpaS50b1N0cmluZygpfTtfdC5wcm90b3R5cGUuZ2V0U3VyZmFjZU5vcm1hbEludGVyc2VjdGlvbldpdGhaQXhpcz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPXRoaXMuX3NxdWFyZWRYT3ZlclNxdWFyZWRaO2lmKGcobil8fChuPW5ldyBzKSxuLng9MCxuLnk9MCxuLno9ZS56KigxLW8pLCEoTWF0aC5hYnMobi56KT49dGhpcy5fcmFkaWkuei10KSlyZXR1cm4gbn07RlM9bmV3IHM7X3QucHJvdG90eXBlLmdldExvY2FsQ3VydmF0dXJlPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFkpO2xldCBuPXRoaXMuZ2V0U3VyZmFjZU5vcm1hbEludGVyc2VjdGlvbldpdGhaQXhpcyhlLDAsRlMpLG89cy5kaXN0YW5jZShlLG4pLGE9dGhpcy5taW5pbXVtUmFkaXVzKm8vdGhpcy5tYXhpbXVtUmFkaXVzKioyLHI9byphKioyO3JldHVybiBZLmZyb21FbGVtZW50cygxL28sMS9yLHQpfTtEUz1bLjE0ODg3NDMzODk4MTYzLC40MzMzOTUzOTQxMjkyNSwuNjc5NDA5NTY4Mjk5MDIsLjg2NTA2MzM2NjY4ODk4LC45NzM5MDY1Mjg1MTcxNywwXSxCUz1bLjI5NTUyNDIyNDcxNDc1LC4yNjkyNjY3MTkzMDk5OSwuMjE5MDg2MzYyNTE1OTgsLjE0OTQ1MTM0OTE1MDU4LC4wNjY2NzEzNDQzMDg2ODQsMF07X3QucHJvdG90eXBlLnN1cmZhY2VBcmVhPWZ1bmN0aW9uKGUpe2xldCB0PWUud2VzdCxuPWUuZWFzdCxvPWUuc291dGgsYT1lLm5vcnRoO2Zvcig7bjx0OyluKz1rLlRXT19QSTtsZXQgcj10aGlzLl9yYWRpaVNxdWFyZWQsaT1yLngsZj1yLnksZD1yLnosYz1pKmY7cmV0dXJuIHAxKG8sYSxmdW5jdGlvbih1KXtsZXQgbD1NYXRoLmNvcyh1KSxoPU1hdGguc2luKHUpO3JldHVybiBNYXRoLmNvcyh1KSpwMSh0LG4sZnVuY3Rpb24obSl7bGV0IGI9TWF0aC5jb3MobSkscD1NYXRoLnNpbihtKTtyZXR1cm4gTWF0aC5zcXJ0KGMqaCpoK2QqKGYqYipiK2kqcCpwKSpsKmwpfSl9KX07cT1fdH0pO2Z1bmN0aW9uICR1KGUpe3RoaXMuX2VsbGlwc29pZD1lPz9xLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIGlvLGtyPVgoKCk9PntJZSgpO0V0KCk7c2UoKTtxZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCR1LnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX19KTskdS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuX3NlbWltYWpvckF4aXMsbz1lLmxvbmdpdHVkZSpuLGE9ZS5sYXRpdHVkZSpuLHI9ZS5oZWlnaHQ7cmV0dXJuIGcodCk/KHQueD1vLHQueT1hLHQuej1yLHQpOm5ldyBzKG8sYSxyKX07JHUucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89ZS54Km4sYT1lLnkqbixyPWUuejtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9byx0LmxhdGl0dWRlPWEsdC5oZWlnaHQ9cix0KTpuZXcgcmUobyxhLHIpfTtpbz0kdX0pO3ZhciBVUyxTbixaaT1YKCgpPT57VVM9e09VVFNJREU6LTEsSU5URVJTRUNUSU5HOjAsSU5TSURFOjF9LFNuPU9iamVjdC5mcmVlemUoVVMpfSk7ZnVuY3Rpb24gTFMoZSx0KXt0aGlzLnN0YXJ0PWU/PzAsdGhpcy5zdG9wPXQ/PzB9dmFyIEVvLGxmPVgoKCk9PntFbz1MU30pO2Z1bmN0aW9uIHdlKGUsdCxuLG8sYSxyLGksZixkKXt0aGlzWzBdPWU/PzAsdGhpc1sxXT1vPz8wLHRoaXNbMl09aT8/MCx0aGlzWzNdPXQ/PzAsdGhpc1s0XT1hPz8wLHRoaXNbNV09Zj8/MCx0aGlzWzZdPW4/PzAsdGhpc1s3XT1yPz8wLHRoaXNbOF09ZD8/MH1mdW5jdGlvbiBIUyhlKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248OTsrK24pe2xldCBvPWVbbl07dCs9bypvfXJldHVybiBNYXRoLnNxcnQodCl9ZnVuY3Rpb24gS1MoZSl7bGV0IHQ9MDtmb3IobGV0IG49MDtuPDM7KytuKXtsZXQgbz1lW3dlLmdldEVsZW1lbnRJbmRleChIbVtuXSxWbVtuXSldO3QrPTIqbypvfXJldHVybiBNYXRoLnNxcnQodCl9ZnVuY3Rpb24gcVMoZSx0KXtsZXQgbj1rLkVQU0lMT04xNSxvPTAsYT0xO2ZvcihsZXQgYz0wO2M8MzsrK2Mpe2xldCB1PU1hdGguYWJzKGVbd2UuZ2V0RWxlbWVudEluZGV4KEhtW2NdLFZtW2NdKV0pO3U+byYmKGE9YyxvPXUpfWxldCByPTEsaT0wLGY9Vm1bYV0sZD1IbVthXTtpZihNYXRoLmFicyhlW3dlLmdldEVsZW1lbnRJbmRleChkLGYpXSk+bil7bGV0IGM9ZVt3ZS5nZXRFbGVtZW50SW5kZXgoZCxkKV0sdT1lW3dlLmdldEVsZW1lbnRJbmRleChmLGYpXSxsPWVbd2UuZ2V0RWxlbWVudEluZGV4KGQsZildLGg9KGMtdSkvMi9sLG07aDwwP209LTEvKC1oK01hdGguc3FydCgxK2gqaCkpOm09MS8oaCtNYXRoLnNxcnQoMStoKmgpKSxyPTEvTWF0aC5zcXJ0KDErbSptKSxpPW0qcn1yZXR1cm4gdD13ZS5jbG9uZSh3ZS5JREVOVElUWSx0KSx0W3dlLmdldEVsZW1lbnRJbmRleChmLGYpXT10W3dlLmdldEVsZW1lbnRJbmRleChkLGQpXT1yLHRbd2UuZ2V0RWxlbWVudEluZGV4KGQsZildPWksdFt3ZS5nZXRFbGVtZW50SW5kZXgoZixkKV09LWksdH12YXIgalMselMsR20sXzEsR1MsVlMsVm0sSG0sZWwseTEsV1MsSixEbj1YKCgpPT57SWUoKTtzZSgpO0dlKCk7d2UucGFja2VkTGVuZ3RoPTk7d2UucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZVswXSx0W24rK109ZVsxXSx0W24rK109ZVsyXSx0W24rK109ZVszXSx0W24rK109ZVs0XSx0W24rK109ZVs1XSx0W24rK109ZVs2XSx0W24rK109ZVs3XSx0W24rK109ZVs4XSx0fTt3ZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IHdlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxuWzRdPWVbdCsrXSxuWzVdPWVbdCsrXSxuWzZdPWVbdCsrXSxuWzddPWVbdCsrXSxuWzhdPWVbdCsrXSxufTt3ZS5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW4qOTtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PW98fHQubGVuZ3RoIT09byYmKHQubGVuZ3RoPW8pOnQ9bmV3IEFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bjsrK2Epd2UucGFjayhlW2FdLHQsYSo5KTtyZXR1cm4gdH07d2UudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vOTp0PW5ldyBBcnJheShuLzkpO2ZvcihsZXQgbz0wO288bjtvKz05KXtsZXQgYT1vLzk7dFthXT13ZS51bnBhY2soZSxvLHRbYV0pfXJldHVybiB0fTt3ZS5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHQpOm5ldyB3ZShlWzBdLGVbM10sZVs2XSxlWzFdLGVbNF0sZVs3XSxlWzJdLGVbNV0sZVs4XSl9O3dlLmZyb21BcnJheT13ZS51bnBhY2s7d2UuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2UuY2xvbmUoZSx0KX07d2UuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdCk6bmV3IHdlKGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxlWzVdLGVbNl0sZVs3XSxlWzhdKX07d2UuZnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLngqZS54LG89ZS54KmUueSxhPWUueCplLnoscj1lLngqZS53LGk9ZS55KmUueSxmPWUueSplLnosZD1lLnkqZS53LGM9ZS56KmUueix1PWUueiplLncsbD1lLncqZS53LGg9bi1pLWMrbCxtPTIqKG8tdSksYj0yKihhK2QpLHA9Mioobyt1KSx5PS1uK2ktYytsLEU9MiooZi1yKSxfPTIqKGEtZCksVD0yKihmK3IpLHc9LW4taStjK2w7cmV0dXJuIGcodCk/KHRbMF09aCx0WzFdPXAsdFsyXT1fLHRbM109bSx0WzRdPXksdFs1XT1ULHRbNl09Yix0WzddPUUsdFs4XT13LHQpOm5ldyB3ZShoLG0sYixwLHksRSxfLFQsdyl9O3dlLmZyb21IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoLWUucGl0Y2gpLG89TWF0aC5jb3MoLWUuaGVhZGluZyksYT1NYXRoLmNvcyhlLnJvbGwpLHI9TWF0aC5zaW4oLWUucGl0Y2gpLGk9TWF0aC5zaW4oLWUuaGVhZGluZyksZj1NYXRoLnNpbihlLnJvbGwpLGQ9bipvLGM9LWEqaStmKnIqbyx1PWYqaSthKnIqbyxsPW4qaSxoPWEqbytmKnIqaSxtPS1mKm8rYSpyKmksYj0tcixwPWYqbix5PWEqbjtyZXR1cm4gZyh0KT8odFswXT1kLHRbMV09bCx0WzJdPWIsdFszXT1jLHRbNF09aCx0WzVdPXAsdFs2XT11LHRbN109bSx0WzhdPXksdCk6bmV3IHdlKGQsYyx1LGwsaCxtLGIscCx5KX07d2UuZnJvbVNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZS55LHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09ZS56LHQpOm5ldyB3ZShlLngsMCwwLDAsZS55LDAsMCwwLGUueil9O3dlLmZyb21Vbmlmb3JtU2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPWUsdCk6bmV3IHdlKGUsMCwwLDAsZSwwLDAsMCxlKX07d2UuZnJvbUNyb3NzUHJvZHVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPTAsdFsxXT1lLnosdFsyXT0tZS55LHRbM109LWUueix0WzRdPTAsdFs1XT1lLngsdFs2XT1lLnksdFs3XT0tZS54LHRbOF09MCx0KTpuZXcgd2UoMCwtZS56LGUueSxlLnosMCwtZS54LC1lLnksZS54LDApfTt3ZS5mcm9tUm90YXRpb25YPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09bix0WzVdPW8sdFs2XT0wLHRbN109LW8sdFs4XT1uLHQpOm5ldyB3ZSgxLDAsMCwwLG4sLW8sMCxvLG4pfTt3ZS5mcm9tUm90YXRpb25ZPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT1uLHRbMV09MCx0WzJdPS1vLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09byx0WzddPTAsdFs4XT1uLHQpOm5ldyB3ZShuLDAsbywwLDEsMCwtbywwLG4pfTt3ZS5mcm9tUm90YXRpb25aPWZ1bmN0aW9uKGUsdCl7bGV0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT1uLHRbMV09byx0WzJdPTAsdFszXT0tbyx0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHQpOm5ldyB3ZShuLC1vLDAsbyxuLDAsMCwwLDEpfTt3ZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XV19O3dlLmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiBlKjMrdH07d2UuZ2V0Q29sdW1uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10KjMsYT1lW29dLHI9ZVtvKzFdLGk9ZVtvKzJdO3JldHVybiBuLng9YSxuLnk9cixuLno9aSxufTt3ZS5zZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4sbyl7bz13ZS5jbG9uZShlLG8pO2xldCBhPXQqMztyZXR1cm4gb1thXT1uLngsb1thKzFdPW4ueSxvW2ErMl09bi56LG99O3dlLmdldFJvdz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVt0XSxhPWVbdCszXSxyPWVbdCs2XTtyZXR1cm4gbi54PW8sbi55PWEsbi56PXIsbn07d2Uuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPXdlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzNdPW4ueSxvW3QrNl09bi56LG99O2pTPW5ldyBzO3dlLnNldFNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz13ZS5nZXRTY2FsZShlLGpTKSxhPXQueC9vLngscj10Lnkvby55LGk9dC56L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdKnIsbls0XT1lWzRdKnIsbls1XT1lWzVdKnIsbls2XT1lWzZdKmksbls3XT1lWzddKmksbls4XT1lWzhdKmksbn07elM9bmV3IHM7d2Uuc2V0VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz13ZS5nZXRTY2FsZShlLHpTKSxhPXQvby54LHI9dC9vLnksaT10L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdKnIsbls0XT1lWzRdKnIsbls1XT1lWzVdKnIsbls2XT1lWzZdKmksbls3XT1lWzddKmksbls4XT1lWzhdKmksbn07R209bmV3IHM7d2UuZ2V0U2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbMF0sZVsxXSxlWzJdLEdtKSksdC55PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbM10sZVs0XSxlWzVdLEdtKSksdC56PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbNl0sZVs3XSxlWzhdLEdtKSksdH07XzE9bmV3IHM7d2UuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiB3ZS5nZXRTY2FsZShlLF8xKSxzLm1heGltdW1Db21wb25lbnQoXzEpfTtHUz1uZXcgczt3ZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89d2UuZ2V0U2NhbGUoZSxHUyk7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby54LG5bM109dFszXSpvLnksbls0XT10WzRdKm8ueSxuWzVdPXRbNV0qby55LG5bNl09dFs2XSpvLnosbls3XT10WzddKm8ueixuWzhdPXRbOF0qby56LG59O1ZTPW5ldyBzO3dlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKGUsdCl7bGV0IG49d2UuZ2V0U2NhbGUoZSxWUyk7cmV0dXJuIHRbMF09ZVswXS9uLngsdFsxXT1lWzFdL24ueCx0WzJdPWVbMl0vbi54LHRbM109ZVszXS9uLnksdFs0XT1lWzRdL24ueSx0WzVdPWVbNV0vbi55LHRbNl09ZVs2XS9uLnosdFs3XT1lWzddL24ueix0WzhdPWVbOF0vbi56LHR9O3dlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lWzBdKnRbMF0rZVszXSp0WzFdK2VbNl0qdFsyXSxhPWVbMV0qdFswXStlWzRdKnRbMV0rZVs3XSp0WzJdLHI9ZVsyXSp0WzBdK2VbNV0qdFsxXStlWzhdKnRbMl0saT1lWzBdKnRbM10rZVszXSp0WzRdK2VbNl0qdFs1XSxmPWVbMV0qdFszXStlWzRdKnRbNF0rZVs3XSp0WzVdLGQ9ZVsyXSp0WzNdK2VbNV0qdFs0XStlWzhdKnRbNV0sYz1lWzBdKnRbNl0rZVszXSp0WzddK2VbNl0qdFs4XSx1PWVbMV0qdFs2XStlWzRdKnRbN10rZVs3XSp0WzhdLGw9ZVsyXSp0WzZdK2VbNV0qdFs3XStlWzhdKnRbOF07cmV0dXJuIG5bMF09byxuWzFdPWEsblsyXT1yLG5bM109aSxuWzRdPWYsbls1XT1kLG5bNl09YyxuWzddPXUsbls4XT1sLG59O3dlLmFkZD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSt0WzBdLG5bMV09ZVsxXSt0WzFdLG5bMl09ZVsyXSt0WzJdLG5bM109ZVszXSt0WzNdLG5bNF09ZVs0XSt0WzRdLG5bNV09ZVs1XSt0WzVdLG5bNl09ZVs2XSt0WzZdLG5bN109ZVs3XSt0WzddLG5bOF09ZVs4XSt0WzhdLG59O3dlLnN1YnRyYWN0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLXRbMF0sblsxXT1lWzFdLXRbMV0sblsyXT1lWzJdLXRbMl0sblszXT1lWzNdLXRbM10sbls0XT1lWzRdLXRbNF0sbls1XT1lWzVdLXRbNV0sbls2XT1lWzZdLXRbNl0sbls3XT1lWzddLXRbN10sbls4XT1lWzhdLXRbOF0sbn07d2UubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbihlLHQsbil7bGV0IG89dC54LGE9dC55LHI9dC56LGk9ZVswXSpvK2VbM10qYStlWzZdKnIsZj1lWzFdKm8rZVs0XSphK2VbN10qcixkPWVbMl0qbytlWzVdKmErZVs4XSpyO3JldHVybiBuLng9aSxuLnk9ZixuLno9ZCxufTt3ZS5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQsblsxXT1lWzFdKnQsblsyXT1lWzJdKnQsblszXT1lWzNdKnQsbls0XT1lWzRdKnQsbls1XT1lWzVdKnQsbls2XT1lWzZdKnQsbls3XT1lWzddKnQsbls4XT1lWzhdKnQsbn07d2UubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQueCxuWzFdPWVbMV0qdC54LG5bMl09ZVsyXSp0LngsblszXT1lWzNdKnQueSxuWzRdPWVbNF0qdC55LG5bNV09ZVs1XSp0Lnksbls2XT1lWzZdKnQueixuWzddPWVbN10qdC56LG5bOF09ZVs4XSp0Lnosbn07d2UubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSp0LG5bOF09ZVs4XSp0LG59O3dlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHRbNF09LWVbNF0sdFs1XT0tZVs1XSx0WzZdPS1lWzZdLHRbN109LWVbN10sdFs4XT0tZVs4XSx0fTt3ZS50cmFuc3Bvc2U9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lWzBdLG89ZVszXSxhPWVbNl0scj1lWzFdLGk9ZVs0XSxmPWVbN10sZD1lWzJdLGM9ZVs1XSx1PWVbOF07cmV0dXJuIHRbMF09bix0WzFdPW8sdFsyXT1hLHRbM109cix0WzRdPWksdFs1XT1mLHRbNl09ZCx0WzddPWMsdFs4XT11LHR9O1ZtPVsxLDAsMF0sSG09WzIsMiwxXTtlbD1uZXcgd2UseTE9bmV3IHdlO3dlLmNvbXB1dGVFaWdlbkRlY29tcG9zaXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1rLkVQU0lMT04yMCxvPTEwLGE9MCxyPTA7Zyh0KXx8KHQ9e30pO2xldCBpPXQudW5pdGFyeT13ZS5jbG9uZSh3ZS5JREVOVElUWSx0LnVuaXRhcnkpLGY9dC5kaWFnb25hbD13ZS5jbG9uZShlLHQuZGlhZ29uYWwpLGQ9bipIUyhmKTtmb3IoO3I8byYmS1MoZik+ZDspcVMoZixlbCksd2UudHJhbnNwb3NlKGVsLHkxKSx3ZS5tdWx0aXBseShmLGVsLGYpLHdlLm11bHRpcGx5KHkxLGYsZiksd2UubXVsdGlwbHkoaSxlbCxpKSwrK2E+MiYmKCsrcixhPTApO3JldHVybiB0fTt3ZS5hYnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1NYXRoLmFicyhlWzBdKSx0WzFdPU1hdGguYWJzKGVbMV0pLHRbMl09TWF0aC5hYnMoZVsyXSksdFszXT1NYXRoLmFicyhlWzNdKSx0WzRdPU1hdGguYWJzKGVbNF0pLHRbNV09TWF0aC5hYnMoZVs1XSksdFs2XT1NYXRoLmFicyhlWzZdKSx0WzddPU1hdGguYWJzKGVbN10pLHRbOF09TWF0aC5hYnMoZVs4XSksdH07d2UuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oZSl7bGV0IHQ9ZVswXSxuPWVbM10sbz1lWzZdLGE9ZVsxXSxyPWVbNF0saT1lWzddLGY9ZVsyXSxkPWVbNV0sYz1lWzhdO3JldHVybiB0KihyKmMtZCppKSthKihkKm8tbipjKStmKihuKmktcipvKX07d2UuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzFdLGE9ZVsyXSxyPWVbM10saT1lWzRdLGY9ZVs1XSxkPWVbNl0sYz1lWzddLHU9ZVs4XSxsPXdlLmRldGVybWluYW50KGUpO3RbMF09aSp1LWMqZix0WzFdPWMqYS1vKnUsdFsyXT1vKmYtaSphLHRbM109ZCpmLXIqdSx0WzRdPW4qdS1kKmEsdFs1XT1yKmEtbipmLHRbNl09cipjLWQqaSx0WzddPWQqby1uKmMsdFs4XT1uKmktcipvO2xldCBoPTEvbDtyZXR1cm4gd2UubXVsdGlwbHlCeVNjYWxhcih0LGgsdCl9O1dTPW5ldyB3ZTt3ZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdlLmludmVyc2Uod2UudHJhbnNwb3NlKGUsV1MpLHQpfTt3ZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmVbMF09PT10WzBdJiZlWzFdPT09dFsxXSYmZVsyXT09PXRbMl0mJmVbM109PT10WzNdJiZlWzRdPT09dFs0XSYmZVs1XT09PXRbNV0mJmVbNl09PT10WzZdJiZlWzddPT09dFs3XSYmZVs4XT09PXRbOF19O3dlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGVbMF0tdFswXSk8PW4mJk1hdGguYWJzKGVbMV0tdFsxXSk8PW4mJk1hdGguYWJzKGVbMl0tdFsyXSk8PW4mJk1hdGguYWJzKGVbM10tdFszXSk8PW4mJk1hdGguYWJzKGVbNF0tdFs0XSk8PW4mJk1hdGguYWJzKGVbNV0tdFs1XSk8PW4mJk1hdGguYWJzKGVbNl0tdFs2XSk8PW4mJk1hdGguYWJzKGVbN10tdFs3XSk8PW4mJk1hdGguYWJzKGVbOF0tdFs4XSk8PW59O3dlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IHdlKDEsMCwwLDAsMSwwLDAsMCwxKSk7d2UuWkVSTz1PYmplY3QuZnJlZXplKG5ldyB3ZSgwLDAsMCwwLDAsMCwwLDAsMCkpO3dlLkNPTFVNTjBST1cwPTA7d2UuQ09MVU1OMFJPVzE9MTt3ZS5DT0xVTU4wUk9XMj0yO3dlLkNPTFVNTjFST1cwPTM7d2UuQ09MVU1OMVJPVzE9NDt3ZS5DT0xVTU4xUk9XMj01O3dlLkNPTFVNTjJST1cwPTY7d2UuQ09MVU1OMlJPVzE9Nzt3ZS5DT0xVTU4yUk9XMj04O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdlLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd2UucGFja2VkTGVuZ3RofX19KTt3ZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmNsb25lKHRoaXMsZSl9O3dlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmVxdWFscyh0aGlzLGUpfTt3ZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdJiZlWzRdPT09dFtuKzRdJiZlWzVdPT09dFtuKzVdJiZlWzZdPT09dFtuKzZdJiZlWzddPT09dFtuKzddJiZlWzhdPT09dFtuKzhdfTt3ZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiB3ZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07d2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbM119LCAke3RoaXNbNl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzddfSkKKCR7dGhpc1syXX0sICR7dGhpc1s1XX0sICR7dGhpc1s4XX0pYH07Sj13ZX0pO3ZhciBZbix0bCxBMSxYUyxLbSxObyxZUyxKUyx3MSxkdCxnYT1YKCgpPT57c2UoKTtHZSgpO1luPWNsYXNzIGV7Y29uc3RydWN0b3IodCxuLG8sYSl7dGhpcy54PXQ/PzAsdGhpcy55PW4/PzAsdGhpcy56PW8/PzAsdGhpcy53PWE/PzB9c3RhdGljIGZyb21FbGVtZW50cyh0LG4sbyxhLHIpe3JldHVybiBnKHIpPyhyLng9dCxyLnk9bixyLno9byxyLnc9YSxyKTpuZXcgZSh0LG4sbyxhKX1zdGF0aWMgZnJvbUNvbG9yKHQsbil7cmV0dXJuIGcobik/KG4ueD10LnJlZCxuLnk9dC5ncmVlbixuLno9dC5ibHVlLG4udz10LmFscGhhLG4pOm5ldyBlKHQucmVkLHQuZ3JlZW4sdC5ibHVlLHQuYWxwaGEpfXN0YXRpYyBjbG9uZSh0LG4pe2lmKGcodCkpcmV0dXJuIGcobik/KG4ueD10Lngsbi55PXQueSxuLno9dC56LG4udz10Lncsbik6bmV3IGUodC54LHQueSx0LnosdC53KX1zdGF0aWMgcGFjayh0LG4sbyl7cmV0dXJuIG89bz8/MCxuW28rK109dC54LG5bbysrXT10LnksbltvKytdPXQueixuW29dPXQudyxufXN0YXRpYyB1bnBhY2sodCxuLG8pe3JldHVybiBuPW4/PzAsZyhvKXx8KG89bmV3IGUpLG8ueD10W24rK10sby55PXRbbisrXSxvLno9dFtuKytdLG8udz10W25dLG99c3RhdGljIHBhY2tBcnJheSh0LG4pe2xldCBvPXQubGVuZ3RoLGE9byo0O2cobik/IUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoIT09YXx8bi5sZW5ndGghPT1hJiYobi5sZW5ndGg9YSk6bj1uZXcgQXJyYXkoYSk7Zm9yKGxldCByPTA7cjxvOysrcillLnBhY2sodFtyXSxuLHIqNCk7cmV0dXJuIG59c3RhdGljIHVucGFja0FycmF5KHQsbil7bGV0IG89dC5sZW5ndGg7ZyhuKT9uLmxlbmd0aD1vLzQ6bj1uZXcgQXJyYXkoby80KTtmb3IobGV0IGE9MDthPG87YSs9NCl7bGV0IHI9YS80O25bcl09ZS51bnBhY2sodCxhLG5bcl0pfXJldHVybiBufXN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1heCh0LngsdC55LHQueix0LncpfXN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KHQpe3JldHVybiBNYXRoLm1pbih0LngsdC55LHQueix0LncpfXN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQodCxuLG8pe3JldHVybiBvLng9TWF0aC5taW4odC54LG4ueCksby55PU1hdGgubWluKHQueSxuLnkpLG8uej1NYXRoLm1pbih0Lnosbi56KSxvLnc9TWF0aC5taW4odC53LG4udyksb31zdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KHQsbixvKXtyZXR1cm4gby54PU1hdGgubWF4KHQueCxuLngpLG8ueT1NYXRoLm1heCh0Lnksbi55KSxvLno9TWF0aC5tYXgodC56LG4ueiksby53PU1hdGgubWF4KHQudyxuLncpLG99c3RhdGljIGNsYW1wKHQsbixvLGEpe2xldCByPWsuY2xhbXAodC54LG4ueCxvLngpLGk9ay5jbGFtcCh0Lnksbi55LG8ueSksZj1rLmNsYW1wKHQueixuLnosby56KSxkPWsuY2xhbXAodC53LG4udyxvLncpO3JldHVybiBhLng9cixhLnk9aSxhLno9ZixhLnc9ZCxhfXN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKHQpe3JldHVybiB0LngqdC54K3QueSp0LnkrdC56KnQueit0LncqdC53fXN0YXRpYyBtYWduaXR1ZGUodCl7cmV0dXJuIE1hdGguc3FydChlLm1hZ25pdHVkZVNxdWFyZWQodCkpfXN0YXRpYyBkaXN0YW5jZSh0LG4pe3JldHVybiBlLnN1YnRyYWN0KHQsbix0bCksZS5tYWduaXR1ZGUodGwpfXN0YXRpYyBkaXN0YW5jZVNxdWFyZWQodCxuKXtyZXR1cm4gZS5zdWJ0cmFjdCh0LG4sdGwpLGUubWFnbml0dWRlU3F1YXJlZCh0bCl9c3RhdGljIG5vcm1hbGl6ZSh0LG4pe2xldCBvPWUubWFnbml0dWRlKHQpO3JldHVybiBuLng9dC54L28sbi55PXQueS9vLG4uej10LnovbyxuLnc9dC53L28sbn1zdGF0aWMgZG90KHQsbil7cmV0dXJuIHQueCpuLngrdC55Km4ueSt0Lnoqbi56K3QudypuLnd9c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyh0LG4sbyl7cmV0dXJuIG8ueD10Lngqbi54LG8ueT10Lnkqbi55LG8uej10Lnoqbi56LG8udz10Lncqbi53LG99c3RhdGljIGRpdmlkZUNvbXBvbmVudHModCxuLG8pe3JldHVybiBvLng9dC54L24ueCxvLnk9dC55L24ueSxvLno9dC56L24ueixvLnc9dC53L24udyxvfXN0YXRpYyBhZGQodCxuLG8pe3JldHVybiBvLng9dC54K24ueCxvLnk9dC55K24ueSxvLno9dC56K24ueixvLnc9dC53K24udyxvfXN0YXRpYyBzdWJ0cmFjdCh0LG4sbyl7cmV0dXJuIG8ueD10Lngtbi54LG8ueT10Lnktbi55LG8uej10Lnotbi56LG8udz10Lnctbi53LG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIodCxuLG8pe3JldHVybiBvLng9dC54Km4sby55PXQueSpuLG8uej10LnoqbixvLnc9dC53Km4sb31zdGF0aWMgZGl2aWRlQnlTY2FsYXIodCxuLG8pe3JldHVybiBvLng9dC54L24sby55PXQueS9uLG8uej10LnovbixvLnc9dC53L24sb31zdGF0aWMgbmVnYXRlKHQsbil7cmV0dXJuIG4ueD0tdC54LG4ueT0tdC55LG4uej0tdC56LG4udz0tdC53LG59c3RhdGljIGFicyh0LG4pe3JldHVybiBuLng9TWF0aC5hYnModC54KSxuLnk9TWF0aC5hYnModC55KSxuLno9TWF0aC5hYnModC56KSxuLnc9TWF0aC5hYnModC53KSxufXN0YXRpYyBsZXJwKHQsbixvLGEpe3JldHVybiBlLm11bHRpcGx5QnlTY2FsYXIobixvLEExKSxhPWUubXVsdGlwbHlCeVNjYWxhcih0LDEtbyxhKSxlLmFkZChBMSxhLGEpfXN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXModCxuKXtsZXQgbz1lLm5vcm1hbGl6ZSh0LFhTKTtyZXR1cm4gZS5hYnMobyxvKSxvLng8PW8ueT9vLng8PW8uej9vLng8PW8udz9uPWUuY2xvbmUoZS5VTklUX1gsbik6bj1lLmNsb25lKGUuVU5JVF9XLG4pOm8uejw9by53P249ZS5jbG9uZShlLlVOSVRfWixuKTpuPWUuY2xvbmUoZS5VTklUX1csbik6by55PD1vLno/by55PD1vLnc/bj1lLmNsb25lKGUuVU5JVF9ZLG4pOm49ZS5jbG9uZShlLlVOSVRfVyxuKTpvLno8PW8udz9uPWUuY2xvbmUoZS5VTklUX1osbik6bj1lLmNsb25lKGUuVU5JVF9XLG4pLG59c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0PT09bnx8Zyh0KSYmZyhuKSYmdC54PT09bi54JiZ0Lnk9PT1uLnkmJnQuej09PW4ueiYmdC53PT09bi53fXN0YXRpYyBlcXVhbHNBcnJheSh0LG4sbyl7cmV0dXJuIHQueD09PW5bb10mJnQueT09PW5bbysxXSYmdC56PT09bltvKzJdJiZ0Lnc9PT1uW28rM119c3RhdGljIGVxdWFsc0Vwc2lsb24odCxuLG8sYSl7cmV0dXJuIHQ9PT1ufHxnKHQpJiZnKG4pJiZrLmVxdWFsc0Vwc2lsb24odC54LG4ueCxvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC55LG4ueSxvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC56LG4ueixvLGEpJiZrLmVxdWFsc0Vwc2lsb24odC53LG4udyxvLGEpfWNsb25lKHQpe3JldHVybiBlLmNsb25lKHRoaXMsdCl9ZXF1YWxzKHQpe3JldHVybiBlLmVxdWFscyh0aGlzLHQpfWVxdWFsc0Vwc2lsb24odCxuLG8pe3JldHVybiBlLmVxdWFsc0Vwc2lsb24odGhpcyx0LG4sbyl9dG9TdHJpbmcoKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfXN0YXRpYyBwYWNrRmxvYXQodCxuKXtyZXR1cm4gZyhuKXx8KG49bmV3IGUpLEttWzBdPXQsdzE/KG4ueD1Ob1swXSxuLnk9Tm9bMV0sbi56PU5vWzJdLG4udz1Ob1szXSk6KG4ueD1Ob1szXSxuLnk9Tm9bMl0sbi56PU5vWzFdLG4udz1Ob1swXSksbn1zdGF0aWMgdW5wYWNrRmxvYXQodCl7cmV0dXJuIHcxPyhOb1swXT10LngsTm9bMV09dC55LE5vWzJdPXQueixOb1szXT10LncpOihOb1swXT10LncsTm9bMV09dC56LE5vWzJdPXQueSxOb1szXT10LngpLEttWzBdfX07WW4ucGFja2VkTGVuZ3RoPTQ7WW4uZnJvbUFycmF5PVluLnVucGFjazt0bD1uZXcgWW4sQTE9bmV3IFluLFhTPW5ldyBZbjtZbi5aRVJPPU9iamVjdC5mcmVlemUobmV3IFluKDAsMCwwLDApKTtZbi5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgWW4oMSwxLDEsMSkpO1luLlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyBZbigxLDAsMCwwKSk7WW4uVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IFluKDAsMSwwLDApKTtZbi5VTklUX1o9T2JqZWN0LmZyZWV6ZShuZXcgWW4oMCwwLDEsMCkpO1luLlVOSVRfVz1PYmplY3QuZnJlZXplKG5ldyBZbigwLDAsMCwxKSk7S209bmV3IEZsb2F0MzJBcnJheSgxKSxObz1uZXcgVWludDhBcnJheShLbS5idWZmZXIpLFlTPW5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSksSlM9bmV3IFVpbnQ4QXJyYXkoWVMuYnVmZmVyKSx3MT1KU1swXT09PTY4LGR0PVlufSk7dmFyIHFtLENlLG10PVgoKCk9PntxbT17fTtxbS5FTVBUWV9PQkpFQ1Q9T2JqZWN0LmZyZWV6ZSh7fSk7cW0uRU1QVFlfQVJSQVk9T2JqZWN0LmZyZWV6ZShbXSk7Q2U9cW19KTtmdW5jdGlvbiBoZihlKXt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciIsdGhpcy5tZXNzYWdlPWU7bGV0IHQ7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChuKXt0PW4uc3RhY2t9dGhpcy5zdGFjaz10fXZhciB1dCxqYT1YKCgpPT57c2UoKTtnKE9iamVjdC5jcmVhdGUpJiYoaGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxoZi5wcm90b3R5cGUuY29uc3RydWN0b3I9aGYpO2hmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCBlPWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGcodGhpcy5zdGFjaykmJihlKz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLGV9O3V0PWhmfSk7ZnVuY3Rpb24gQWUoZSx0LG4sbyxhLHIsaSxmLGQsYyx1LGwsaCxtLGIscCl7dGhpc1swXT1lPz8wLHRoaXNbMV09YT8/MCx0aGlzWzJdPWQ/PzAsdGhpc1szXT1oPz8wLHRoaXNbNF09dD8/MCx0aGlzWzVdPXI/PzAsdGhpc1s2XT1jPz8wLHRoaXNbN109bT8/MCx0aGlzWzhdPW4/PzAsdGhpc1s5XT1pPz8wLHRoaXNbMTBdPXU/PzAsdGhpc1sxMV09Yj8/MCx0aGlzWzEyXT1vPz8wLHRoaXNbMTNdPWY/PzAsdGhpc1sxNF09bD8/MCx0aGlzWzE1XT1wPz8wfXZhciBYYyxZYyxtZixaUyxRUyxXbSxFMSwkUyxlQyx0QyxuQyxvQyxhQyxyQywkLHBuPVgoKCk9PntJZSgpO2dhKCk7bXQoKTtzZSgpO0dlKCk7RG4oKTtqYSgpO0FlLnBhY2tlZExlbmd0aD0xNjtBZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lWzBdLHRbbisrXT1lWzFdLHRbbisrXT1lWzJdLHRbbisrXT1lWzNdLHRbbisrXT1lWzRdLHRbbisrXT1lWzVdLHRbbisrXT1lWzZdLHRbbisrXT1lWzddLHRbbisrXT1lWzhdLHRbbisrXT1lWzldLHRbbisrXT1lWzEwXSx0W24rK109ZVsxMV0sdFtuKytdPWVbMTJdLHRbbisrXT1lWzEzXSx0W24rK109ZVsxNF0sdFtuXT1lWzE1XSx0fTtBZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IEFlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxuWzRdPWVbdCsrXSxuWzVdPWVbdCsrXSxuWzZdPWVbdCsrXSxuWzddPWVbdCsrXSxuWzhdPWVbdCsrXSxuWzldPWVbdCsrXSxuWzEwXT1lW3QrK10sblsxMV09ZVt0KytdLG5bMTJdPWVbdCsrXSxuWzEzXT1lW3QrK10sblsxNF09ZVt0KytdLG5bMTVdPWVbdF0sbn07QWUucGFja0FycmF5PWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sZW5ndGgsbz1uKjE2O2codCk/IUFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoIT09b3x8dC5sZW5ndGghPT1vJiYodC5sZW5ndGg9byk6dD1uZXcgQXJyYXkobyk7Zm9yKGxldCBhPTA7YTxuOysrYSlBZS5wYWNrKGVbYV0sdCxhKjE2KTtyZXR1cm4gdH07QWUudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vMTY6dD1uZXcgQXJyYXkobi8xNik7Zm9yKGxldCBvPTA7bzxuO28rPTE2KXtsZXQgYT1vLzE2O3RbYV09QWUudW5wYWNrKGUsbyx0W2FdKX1yZXR1cm4gdH07QWUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdCk6bmV3IEFlKGVbMF0sZVs0XSxlWzhdLGVbMTJdLGVbMV0sZVs1XSxlWzldLGVbMTNdLGVbMl0sZVs2XSxlWzEwXSxlWzE0XSxlWzNdLGVbN10sZVsxMV0sZVsxNV0pfTtBZS5mcm9tQXJyYXk9QWUudW5wYWNrO0FlLmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFlLmNsb25lKGUsdCl9O0FlLmZyb21Sb3dNYWpvckFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XSx0KTpuZXcgQWUoZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XSl9O0FlLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz9zLlpFUk8sZyhuKT8oblswXT1lWzBdLG5bMV09ZVsxXSxuWzJdPWVbMl0sblszXT0wLG5bNF09ZVszXSxuWzVdPWVbNF0sbls2XT1lWzVdLG5bN109MCxuWzhdPWVbNl0sbls5XT1lWzddLG5bMTBdPWVbOF0sblsxMV09MCxuWzEyXT10LngsblsxM109dC55LG5bMTRdPXQueixuWzE1XT0xLG4pOm5ldyBBZShlWzBdLGVbM10sZVs2XSx0LngsZVsxXSxlWzRdLGVbN10sdC55LGVbMl0sZVs1XSxlWzhdLHQueiwwLDAsMCwxKX07QWUuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGU9ZnVuY3Rpb24oZSx0LG4sbyl7ZyhvKXx8KG89bmV3IEFlKTtsZXQgYT1uLngscj1uLnksaT1uLnosZj10LngqdC54LGQ9dC54KnQueSxjPXQueCp0LnosdT10LngqdC53LGw9dC55KnQueSxoPXQueSp0LnosbT10LnkqdC53LGI9dC56KnQueixwPXQueip0LncseT10LncqdC53LEU9Zi1sLWIreSxfPTIqKGQtcCksVD0yKihjK20pLHc9MiooZCtwKSxSPS1mK2wtYit5LFM9MiooaC11KSxDPTIqKGMtbSksST0yKihoK3UpLE49LWYtbCtiK3k7cmV0dXJuIG9bMF09RSphLG9bMV09dyphLG9bMl09QyphLG9bM109MCxvWzRdPV8qcixvWzVdPVIqcixvWzZdPUkqcixvWzddPTAsb1s4XT1UKmksb1s5XT1TKmksb1sxMF09TippLG9bMTFdPTAsb1sxMl09ZS54LG9bMTNdPWUueSxvWzE0XT1lLnosb1sxNV09MSxvfTtBZS5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFlLmZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlKGUudHJhbnNsYXRpb24sZS5yb3RhdGlvbixlLnNjYWxlLHQpfTtBZS5mcm9tVHJhbnNsYXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQWUuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5JREVOVElUWSxlLHQpfTtBZS5mcm9tU2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLngsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZS55LHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT1lLnosdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHQpOm5ldyBBZShlLngsMCwwLDAsMCxlLnksMCwwLDAsMCxlLnosMCwwLDAsMCwxKX07QWUuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdCk6bmV3IEFlKGUsMCwwLDAsMCxlLDAsMCwwLDAsZSwwLDAsMCwwLDEpfTtBZS5mcm9tUm90YXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IEFlKSx0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTAsdFs0XT1lWzNdLHRbNV09ZVs0XSx0WzZdPWVbNV0sdFs3XT0wLHRbOF09ZVs2XSx0WzldPWVbN10sdFsxMF09ZVs4XSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH07WGM9bmV3IHMsWWM9bmV3IHMsbWY9bmV3IHM7QWUuZnJvbUNhbWVyYT1mdW5jdGlvbihlLHQpe2xldCBuPWUucG9zaXRpb24sbz1lLmRpcmVjdGlvbixhPWUudXA7cy5ub3JtYWxpemUobyxYYykscy5ub3JtYWxpemUocy5jcm9zcyhYYyxhLFljKSxZYykscy5ub3JtYWxpemUocy5jcm9zcyhZYyxYYyxtZiksbWYpO2xldCByPVljLngsaT1ZYy55LGY9WWMueixkPVhjLngsYz1YYy55LHU9WGMueixsPW1mLngsaD1tZi55LG09bWYueixiPW4ueCxwPW4ueSx5PW4ueixFPXIqLWIraSotcCtmKi15LF89bCotYitoKi1wK20qLXksVD1kKmIrYypwK3UqeTtyZXR1cm4gZyh0KT8odFswXT1yLHRbMV09bCx0WzJdPS1kLHRbM109MCx0WzRdPWksdFs1XT1oLHRbNl09LWMsdFs3XT0wLHRbOF09Zix0WzldPW0sdFsxMF09LXUsdFsxMV09MCx0WzEyXT1FLHRbMTNdPV8sdFsxNF09VCx0WzE1XT0xLHQpOm5ldyBBZShyLGksZixFLGwsaCxtLF8sLWQsLWMsLXUsVCwwLDAsMCwxKX07QWUuY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXc9ZnVuY3Rpb24oZSx0LG4sbyxhKXtsZXQgaT0xL01hdGgudGFuKGUqLjUpLGY9aS90LGQ9KG8rbikvKG4tbyksYz0yKm8qbi8obi1vKTtyZXR1cm4gYVswXT1mLGFbMV09MCxhWzJdPTAsYVszXT0wLGFbNF09MCxhWzVdPWksYVs2XT0wLGFbN109MCxhWzhdPTAsYVs5XT0wLGFbMTBdPWQsYVsxMV09LTEsYVsxMl09MCxhWzEzXT0wLGFbMTRdPWMsYVsxNV09MCxhfTtBZS5jb21wdXRlT3J0aG9ncmFwaGljT2ZmQ2VudGVyPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPTEvKHQtZSksZD0xLyhvLW4pLGM9MS8oci1hKSx1PS0odCtlKSpmLGw9LShvK24pKmQsaD0tKHIrYSkqYztyZXR1cm4gZio9MixkKj0yLGMqPS0yLGlbMF09ZixpWzFdPTAsaVsyXT0wLGlbM109MCxpWzRdPTAsaVs1XT1kLGlbNl09MCxpWzddPTAsaVs4XT0wLGlbOV09MCxpWzEwXT1jLGlbMTFdPTAsaVsxMl09dSxpWzEzXT1sLGlbMTRdPWgsaVsxNV09MSxpfTtBZS5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9MiphLyh0LWUpLGQ9MiphLyhvLW4pLGM9KHQrZSkvKHQtZSksdT0obytuKS8oby1uKSxsPS0ocithKS8oci1hKSxoPS0xLG09LTIqciphLyhyLWEpO3JldHVybiBpWzBdPWYsaVsxXT0wLGlbMl09MCxpWzNdPTAsaVs0XT0wLGlbNV09ZCxpWzZdPTAsaVs3XT0wLGlbOF09YyxpWzldPXUsaVsxMF09bCxpWzExXT1oLGlbMTJdPTAsaVsxM109MCxpWzE0XT1tLGlbMTVdPTAsaX07QWUuY29tcHV0ZUluZmluaXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPTIqYS8odC1lKSxmPTIqYS8oby1uKSxkPSh0K2UpLyh0LWUpLGM9KG8rbikvKG8tbiksdT0tMSxsPS0xLGg9LTIqYTtyZXR1cm4gclswXT1pLHJbMV09MCxyWzJdPTAsclszXT0wLHJbNF09MCxyWzVdPWYscls2XT0wLHJbN109MCxyWzhdPWQscls5XT1jLHJbMTBdPXUsclsxMV09bCxyWzEyXT0wLHJbMTNdPTAsclsxNF09aCxyWzE1XT0wLHJ9O0FlLmNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCxuLG8pe2cobyl8fChvPW5ldyBBZSksZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IGE9ZS54Pz8wLHI9ZS55Pz8wLGk9ZS53aWR0aD8/MCxmPWUuaGVpZ2h0Pz8wO3Q9dD8/MCxuPW4/PzE7bGV0IGQ9aSouNSxjPWYqLjUsdT0obi10KSouNSxsPWQsaD1jLG09dSxiPWErZCxwPXIrYyx5PXQrdSxFPTE7cmV0dXJuIG9bMF09bCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1oLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1tLG9bMTFdPTAsb1sxMl09YixvWzEzXT1wLG9bMTRdPXksb1sxNV09RSxvfTtBZS5jb21wdXRlVmlldz1mdW5jdGlvbihlLHQsbixvLGEpe3JldHVybiBhWzBdPW8ueCxhWzFdPW4ueCxhWzJdPS10LngsYVszXT0wLGFbNF09by55LGFbNV09bi55LGFbNl09LXQueSxhWzddPTAsYVs4XT1vLnosYVs5XT1uLnosYVsxMF09LXQueixhWzExXT0wLGFbMTJdPS1zLmRvdChvLGUpLGFbMTNdPS1zLmRvdChuLGUpLGFbMTRdPXMuZG90KHQsZSksYVsxNV09MSxhfTtBZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0KTpbZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV19O0FlLmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiBlKjQrdH07QWUuZ2V0Q29sdW1uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10KjQsYT1lW29dLHI9ZVtvKzFdLGk9ZVtvKzJdLGY9ZVtvKzNdO3JldHVybiBuLng9YSxuLnk9cixuLno9aSxuLnc9ZixufTtBZS5zZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4sbyl7bz1BZS5jbG9uZShlLG8pO2xldCBhPXQqNDtyZXR1cm4gb1thXT1uLngsb1thKzFdPW4ueSxvW2ErMl09bi56LG9bYSszXT1uLncsb307QWUuZ2V0Um93PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lW3RdLGE9ZVt0KzRdLHI9ZVt0KzhdLGk9ZVt0KzEyXTtyZXR1cm4gbi54PW8sbi55PWEsbi56PXIsbi53PWksbn07QWUuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPUFlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzRdPW4ueSxvW3QrOF09bi56LG9bdCsxMl09bi53LG99O0FlLnNldFRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLG5bMV09ZVsxXSxuWzJdPWVbMl0sblszXT1lWzNdLG5bNF09ZVs0XSxuWzVdPWVbNV0sbls2XT1lWzZdLG5bN109ZVs3XSxuWzhdPWVbOF0sbls5XT1lWzldLG5bMTBdPWVbMTBdLG5bMTFdPWVbMTFdLG5bMTJdPXQueCxuWzEzXT10LnksblsxNF09dC56LG5bMTVdPWVbMTVdLG59O1pTPW5ldyBzO0FlLnNldFNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1BZS5nZXRTY2FsZShlLFpTKSxhPXQueC9vLngscj10Lnkvby55LGk9dC56L28uejtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKmEsblszXT1lWzNdLG5bNF09ZVs0XSpyLG5bNV09ZVs1XSpyLG5bNl09ZVs2XSpyLG5bN109ZVs3XSxuWzhdPWVbOF0qaSxuWzldPWVbOV0qaSxuWzEwXT1lWzEwXSppLG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59O1FTPW5ldyBzO0FlLnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89QWUuZ2V0U2NhbGUoZSxRUyksYT10L28ueCxyPXQvby55LGk9dC9vLno7cmV0dXJuIG5bMF09ZVswXSphLG5bMV09ZVsxXSphLG5bMl09ZVsyXSphLG5bM109ZVszXSxuWzRdPWVbNF0qcixuWzVdPWVbNV0qcixuWzZdPWVbNl0qcixuWzddPWVbN10sbls4XT1lWzhdKmksbls5XT1lWzldKmksblsxMF09ZVsxMF0qaSxuWzExXT1lWzExXSxuWzEyXT1lWzEyXSxuWzEzXT1lWzEzXSxuWzE0XT1lWzE0XSxuWzE1XT1lWzE1XSxufTtXbT1uZXcgcztBZS5nZXRTY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0Lng9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVswXSxlWzFdLGVbMl0sV20pKSx0Lnk9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVs0XSxlWzVdLGVbNl0sV20pKSx0Lno9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVs4XSxlWzldLGVbMTBdLFdtKSksdH07RTE9bmV3IHM7QWUuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBBZS5nZXRTY2FsZShlLEUxKSxzLm1heGltdW1Db21wb25lbnQoRTEpfTskUz1uZXcgcztBZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89QWUuZ2V0U2NhbGUoZSwkUyk7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby54LG5bM109ZVszXSxuWzRdPXRbM10qby55LG5bNV09dFs0XSpvLnksbls2XT10WzVdKm8ueSxuWzddPWVbN10sbls4XT10WzZdKm8ueixuWzldPXRbN10qby56LG5bMTBdPXRbOF0qby56LG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59O2VDPW5ldyBzO0FlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKGUsdCl7bGV0IG49QWUuZ2V0U2NhbGUoZSxlQyk7cmV0dXJuIHRbMF09ZVswXS9uLngsdFsxXT1lWzFdL24ueCx0WzJdPWVbMl0vbi54LHRbM109ZVs0XS9uLnksdFs0XT1lWzVdL24ueSx0WzVdPWVbNl0vbi55LHRbNl09ZVs4XS9uLnosdFs3XT1lWzldL24ueix0WzhdPWVbMTBdL24ueix0fTtBZS5tdWx0aXBseT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSxhPWVbMV0scj1lWzJdLGk9ZVszXSxmPWVbNF0sZD1lWzVdLGM9ZVs2XSx1PWVbN10sbD1lWzhdLGg9ZVs5XSxtPWVbMTBdLGI9ZVsxMV0scD1lWzEyXSx5PWVbMTNdLEU9ZVsxNF0sXz1lWzE1XSxUPXRbMF0sdz10WzFdLFI9dFsyXSxTPXRbM10sQz10WzRdLEk9dFs1XSxOPXRbNl0sUD10WzddLHY9dFs4XSxBPXRbOV0seD10WzEwXSxNPXRbMTFdLEY9dFsxMl0sVT10WzEzXSx6PXRbMTRdLEQ9dFsxNV0sRz1vKlQrZip3K2wqUitwKlMsSD1hKlQrZCp3K2gqUit5KlMsTz1yKlQrYyp3K20qUitFKlMsWj1pKlQrdSp3K2IqUitfKlMsb2U9bypDK2YqSStsKk4rcCpQLGNlPWEqQytkKkkraCpOK3kqUCxkZT1yKkMrYypJK20qTitFKlAsZWU9aSpDK3UqSStiKk4rXypQLG1lPW8qditmKkErbCp4K3AqTSxsZT1hKnYrZCpBK2gqeCt5Kk0sYmU9cip2K2MqQSttKngrRSpNLGZlPWkqdit1KkErYip4K18qTSxhZT1vKkYrZipVK2wqeitwKkQsUmU9YSpGK2QqVStoKnoreSpELE5lPXIqRitjKlUrbSp6K0UqRCxKZT1pKkYrdSpVK2IqeitfKkQ7cmV0dXJuIG5bMF09RyxuWzFdPUgsblsyXT1PLG5bM109WixuWzRdPW9lLG5bNV09Y2Usbls2XT1kZSxuWzddPWVlLG5bOF09bWUsbls5XT1sZSxuWzEwXT1iZSxuWzExXT1mZSxuWzEyXT1hZSxuWzEzXT1SZSxuWzE0XT1OZSxuWzE1XT1KZSxufTtBZS5hZGQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuWzBdPWVbMF0rdFswXSxuWzFdPWVbMV0rdFsxXSxuWzJdPWVbMl0rdFsyXSxuWzNdPWVbM10rdFszXSxuWzRdPWVbNF0rdFs0XSxuWzVdPWVbNV0rdFs1XSxuWzZdPWVbNl0rdFs2XSxuWzddPWVbN10rdFs3XSxuWzhdPWVbOF0rdFs4XSxuWzldPWVbOV0rdFs5XSxuWzEwXT1lWzEwXSt0WzEwXSxuWzExXT1lWzExXSt0WzExXSxuWzEyXT1lWzEyXSt0WzEyXSxuWzEzXT1lWzEzXSt0WzEzXSxuWzE0XT1lWzE0XSt0WzE0XSxuWzE1XT1lWzE1XSt0WzE1XSxufTtBZS5zdWJ0cmFjdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXS10WzBdLG5bMV09ZVsxXS10WzFdLG5bMl09ZVsyXS10WzJdLG5bM109ZVszXS10WzNdLG5bNF09ZVs0XS10WzRdLG5bNV09ZVs1XS10WzVdLG5bNl09ZVs2XS10WzZdLG5bN109ZVs3XS10WzddLG5bOF09ZVs4XS10WzhdLG5bOV09ZVs5XS10WzldLG5bMTBdPWVbMTBdLXRbMTBdLG5bMTFdPWVbMTFdLXRbMTFdLG5bMTJdPWVbMTJdLXRbMTJdLG5bMTNdPWVbMTNdLXRbMTNdLG5bMTRdPWVbMTRdLXRbMTRdLG5bMTVdPWVbMTVdLXRbMTVdLG59O0FlLm11bHRpcGx5VHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWVbMF0sYT1lWzFdLHI9ZVsyXSxpPWVbNF0sZj1lWzVdLGQ9ZVs2XSxjPWVbOF0sdT1lWzldLGw9ZVsxMF0saD1lWzEyXSxtPWVbMTNdLGI9ZVsxNF0scD10WzBdLHk9dFsxXSxFPXRbMl0sXz10WzRdLFQ9dFs1XSx3PXRbNl0sUj10WzhdLFM9dFs5XSxDPXRbMTBdLEk9dFsxMl0sTj10WzEzXSxQPXRbMTRdLHY9bypwK2kqeStjKkUsQT1hKnArZip5K3UqRSx4PXIqcCtkKnkrbCpFLE09bypfK2kqVCtjKncsRj1hKl8rZipUK3UqdyxVPXIqXytkKlQrbCp3LHo9bypSK2kqUytjKkMsRD1hKlIrZipTK3UqQyxHPXIqUitkKlMrbCpDLEg9bypJK2kqTitjKlAraCxPPWEqSStmKk4rdSpQK20sWj1yKkkrZCpOK2wqUCtiO3JldHVybiBuWzBdPXYsblsxXT1BLG5bMl09eCxuWzNdPTAsbls0XT1NLG5bNV09RixuWzZdPVUsbls3XT0wLG5bOF09eixuWzldPUQsblsxMF09RyxuWzExXT0wLG5bMTJdPUgsblsxM109TyxuWzE0XT1aLG5bMTVdPTEsbn07QWUubXVsdGlwbHlCeU1hdHJpeDM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWVbMF0sYT1lWzFdLHI9ZVsyXSxpPWVbNF0sZj1lWzVdLGQ9ZVs2XSxjPWVbOF0sdT1lWzldLGw9ZVsxMF0saD10WzBdLG09dFsxXSxiPXRbMl0scD10WzNdLHk9dFs0XSxFPXRbNV0sXz10WzZdLFQ9dFs3XSx3PXRbOF0sUj1vKmgraSptK2MqYixTPWEqaCtmKm0rdSpiLEM9cipoK2QqbStsKmIsST1vKnAraSp5K2MqRSxOPWEqcCtmKnkrdSpFLFA9cipwK2QqeStsKkUsdj1vKl8raSpUK2MqdyxBPWEqXytmKlQrdSp3LHg9cipfK2QqVCtsKnc7cmV0dXJuIG5bMF09UixuWzFdPVMsblsyXT1DLG5bM109MCxuWzRdPUksbls1XT1OLG5bNl09UCxuWzddPTAsbls4XT12LG5bOV09QSxuWzEwXT14LG5bMTFdPTAsblsxMl09ZVsxMl0sblsxM109ZVsxM10sblsxNF09ZVsxNF0sblsxNV09ZVsxNV0sbn07QWUubXVsdGlwbHlCeVRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10LngsYT10Lnkscj10LnosaT1vKmVbMF0rYSplWzRdK3IqZVs4XStlWzEyXSxmPW8qZVsxXSthKmVbNV0rciplWzldK2VbMTNdLGQ9byplWzJdK2EqZVs2XStyKmVbMTBdK2VbMTRdO3JldHVybiBuWzBdPWVbMF0sblsxXT1lWzFdLG5bMl09ZVsyXSxuWzNdPWVbM10sbls0XT1lWzRdLG5bNV09ZVs1XSxuWzZdPWVbNl0sbls3XT1lWzddLG5bOF09ZVs4XSxuWzldPWVbOV0sblsxMF09ZVsxMF0sblsxMV09ZVsxMV0sblsxMl09aSxuWzEzXT1mLG5bMTRdPWQsblsxNV09ZVsxNV0sbn07QWUubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz10LngsYT10Lnkscj10Lno7cmV0dXJuIG89PT0xJiZhPT09MSYmcj09PTE/QWUuY2xvbmUoZSxuKTooblswXT1vKmVbMF0sblsxXT1vKmVbMV0sblsyXT1vKmVbMl0sblszXT1lWzNdLG5bNF09YSplWzRdLG5bNV09YSplWzVdLG5bNl09YSplWzZdLG5bN109ZVs3XSxuWzhdPXIqZVs4XSxuWzldPXIqZVs5XSxuWzEwXT1yKmVbMTBdLG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG4pfTtBZS5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdKnQsblsxXT1lWzFdKnQsblsyXT1lWzJdKnQsblszXT1lWzNdLG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSxuWzhdPWVbOF0qdCxuWzldPWVbOV0qdCxuWzEwXT1lWzEwXSp0LG5bMTFdPWVbMTFdLG5bMTJdPWVbMTJdLG5bMTNdPWVbMTNdLG5bMTRdPWVbMTRdLG5bMTVdPWVbMTVdLG59O0FlLm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQueCxhPXQueSxyPXQueixpPXQudyxmPWVbMF0qbytlWzRdKmErZVs4XSpyK2VbMTJdKmksZD1lWzFdKm8rZVs1XSphK2VbOV0qcitlWzEzXSppLGM9ZVsyXSpvK2VbNl0qYStlWzEwXSpyK2VbMTRdKmksdT1lWzNdKm8rZVs3XSphK2VbMTFdKnIrZVsxNV0qaTtyZXR1cm4gbi54PWYsbi55PWQsbi56PWMsbi53PXUsbn07QWUubXVsdGlwbHlCeVBvaW50QXNWZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQueCxhPXQueSxyPXQueixpPWVbMF0qbytlWzRdKmErZVs4XSpyLGY9ZVsxXSpvK2VbNV0qYStlWzldKnIsZD1lWzJdKm8rZVs2XSphK2VbMTBdKnI7cmV0dXJuIG4ueD1pLG4ueT1mLG4uej1kLG59O0FlLm11bHRpcGx5QnlQb2ludD1mdW5jdGlvbihlLHQsbil7bGV0IG89dC54LGE9dC55LHI9dC56LGk9ZVswXSpvK2VbNF0qYStlWzhdKnIrZVsxMl0sZj1lWzFdKm8rZVs1XSphK2VbOV0qcitlWzEzXSxkPWVbMl0qbytlWzZdKmErZVsxMF0qcitlWzE0XTtyZXR1cm4gbi54PWksbi55PWYsbi56PWQsbn07QWUubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG5bNF09ZVs0XSp0LG5bNV09ZVs1XSp0LG5bNl09ZVs2XSp0LG5bN109ZVs3XSp0LG5bOF09ZVs4XSp0LG5bOV09ZVs5XSp0LG5bMTBdPWVbMTBdKnQsblsxMV09ZVsxMV0qdCxuWzEyXT1lWzEyXSp0LG5bMTNdPWVbMTNdKnQsblsxNF09ZVsxNF0qdCxuWzE1XT1lWzE1XSp0LG59O0FlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHRbNF09LWVbNF0sdFs1XT0tZVs1XSx0WzZdPS1lWzZdLHRbN109LWVbN10sdFs4XT0tZVs4XSx0WzldPS1lWzldLHRbMTBdPS1lWzEwXSx0WzExXT0tZVsxMV0sdFsxMl09LWVbMTJdLHRbMTNdPS1lWzEzXSx0WzE0XT0tZVsxNF0sdFsxNV09LWVbMTVdLHR9O0FlLnRyYW5zcG9zZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMV0sbz1lWzJdLGE9ZVszXSxyPWVbNl0saT1lWzddLGY9ZVsxMV07cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1uLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW8sdFs5XT1yLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWEsdFsxM109aSx0WzE0XT1mLHRbMTVdPWVbMTVdLHR9O0FlLmFicz1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPU1hdGguYWJzKGVbMF0pLHRbMV09TWF0aC5hYnMoZVsxXSksdFsyXT1NYXRoLmFicyhlWzJdKSx0WzNdPU1hdGguYWJzKGVbM10pLHRbNF09TWF0aC5hYnMoZVs0XSksdFs1XT1NYXRoLmFicyhlWzVdKSx0WzZdPU1hdGguYWJzKGVbNl0pLHRbN109TWF0aC5hYnMoZVs3XSksdFs4XT1NYXRoLmFicyhlWzhdKSx0WzldPU1hdGguYWJzKGVbOV0pLHRbMTBdPU1hdGguYWJzKGVbMTBdKSx0WzExXT1NYXRoLmFicyhlWzExXSksdFsxMl09TWF0aC5hYnMoZVsxMl0pLHRbMTNdPU1hdGguYWJzKGVbMTNdKSx0WzE0XT1NYXRoLmFicyhlWzE0XSksdFsxNV09TWF0aC5hYnMoZVsxNV0pLHR9O0FlLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZVsxMl09PT10WzEyXSYmZVsxM109PT10WzEzXSYmZVsxNF09PT10WzE0XSYmZVswXT09PXRbMF0mJmVbMV09PT10WzFdJiZlWzJdPT09dFsyXSYmZVs0XT09PXRbNF0mJmVbNV09PT10WzVdJiZlWzZdPT09dFs2XSYmZVs4XT09PXRbOF0mJmVbOV09PT10WzldJiZlWzEwXT09PXRbMTBdJiZlWzNdPT09dFszXSYmZVs3XT09PXRbN10mJmVbMTFdPT09dFsxMV0mJmVbMTVdPT09dFsxNV19O0FlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKGVbMF0tdFswXSk8PW4mJk1hdGguYWJzKGVbMV0tdFsxXSk8PW4mJk1hdGguYWJzKGVbMl0tdFsyXSk8PW4mJk1hdGguYWJzKGVbM10tdFszXSk8PW4mJk1hdGguYWJzKGVbNF0tdFs0XSk8PW4mJk1hdGguYWJzKGVbNV0tdFs1XSk8PW4mJk1hdGguYWJzKGVbNl0tdFs2XSk8PW4mJk1hdGguYWJzKGVbN10tdFs3XSk8PW4mJk1hdGguYWJzKGVbOF0tdFs4XSk8PW4mJk1hdGguYWJzKGVbOV0tdFs5XSk8PW4mJk1hdGguYWJzKGVbMTBdLXRbMTBdKTw9biYmTWF0aC5hYnMoZVsxMV0tdFsxMV0pPD1uJiZNYXRoLmFicyhlWzEyXS10WzEyXSk8PW4mJk1hdGguYWJzKGVbMTNdLXRbMTNdKTw9biYmTWF0aC5hYnMoZVsxNF0tdFsxNF0pPD1uJiZNYXRoLmFicyhlWzE1XS10WzE1XSk8PW59O0FlLmdldFRyYW5zbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQueD1lWzEyXSx0Lnk9ZVsxM10sdC56PWVbMTRdLHR9O0FlLmdldE1hdHJpeDM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzRdLHRbNF09ZVs1XSx0WzVdPWVbNl0sdFs2XT1lWzhdLHRbN109ZVs5XSx0WzhdPWVbMTBdLHR9O3RDPW5ldyBKLG5DPW5ldyBKLG9DPW5ldyBkdCxhQz1uZXcgZHQoMCwwLDAsMSk7QWUuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzRdLGE9ZVs4XSxyPWVbMTJdLGk9ZVsxXSxmPWVbNV0sZD1lWzldLGM9ZVsxM10sdT1lWzJdLGw9ZVs2XSxoPWVbMTBdLG09ZVsxNF0sYj1lWzNdLHA9ZVs3XSx5PWVbMTFdLEU9ZVsxNV0sXz1oKkUsVD1tKnksdz1sKkUsUj1tKnAsUz1sKnksQz1oKnAsST11KkUsTj1tKmIsUD11Knksdj1oKmIsQT11KnAseD1sKmIsTT1fKmYrUipkK1MqYy0oVCpmK3cqZCtDKmMpLEY9VCppK0kqZCt2KmMtKF8qaStOKmQrUCpjKSxVPXcqaStOKmYrQSpjLShSKmkrSSpmK3gqYyksej1DKmkrUCpmK3gqZC0oUyppK3YqZitBKmQpLEQ9VCpvK3cqYStDKnItKF8qbytSKmErUypyKSxHPV8qbitOKmErUCpyLShUKm4rSSphK3YqciksSD1SKm4rSSpvK3gqci0odypuK04qbytBKnIpLE89UypuK3YqbytBKmEtKEMqbitQKm8reCphKTtfPWEqYyxUPXIqZCx3PW8qYyxSPXIqZixTPW8qZCxDPWEqZixJPW4qYyxOPXIqaSxQPW4qZCx2PWEqaSxBPW4qZix4PW8qaTtsZXQgWj1fKnArUip5K1MqRS0oVCpwK3cqeStDKkUpLG9lPVQqYitJKnkrdipFLShfKmIrTip5K1AqRSksY2U9dypiK04qcCtBKkUtKFIqYitJKnAreCpFKSxkZT1DKmIrUCpwK3gqeS0oUypiK3YqcCtBKnkpLGVlPXcqaCtDKm0rVCpsLShTKm0rXypsK1IqaCksbWU9UCptK18qdStOKmgtKEkqaCt2Km0rVCp1KSxsZT1JKmwreCptK1IqdS0oQSptK3cqdStOKmwpLGJlPUEqaCtTKnUrdipsLShQKmwreCpoK0MqdSksZmU9bipNK28qRithKlUrcip6O2lmKE1hdGguYWJzKGZlKTxrLkVQU0lMT04yMSl7aWYoSi5lcXVhbHNFcHNpbG9uKEFlLmdldE1hdHJpeDMoZSx0QyksbkMsay5FUFNJTE9ONykmJmR0LmVxdWFscyhBZS5nZXRSb3coZSwzLG9DKSxhQykpcmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0wLHRbMTFdPTAsdFsxMl09LWVbMTJdLHRbMTNdPS1lWzEzXSx0WzE0XT0tZVsxNF0sdFsxNV09MSx0O3Rocm93IG5ldyB1dCgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIGZlPTEvZmUsdFswXT1NKmZlLHRbMV09RipmZSx0WzJdPVUqZmUsdFszXT16KmZlLHRbNF09RCpmZSx0WzVdPUcqZmUsdFs2XT1IKmZlLHRbN109TypmZSx0WzhdPVoqZmUsdFs5XT1vZSpmZSx0WzEwXT1jZSpmZSx0WzExXT1kZSpmZSx0WzEyXT1lZSpmZSx0WzEzXT1tZSpmZSx0WzE0XT1sZSpmZSx0WzE1XT1iZSpmZSx0fTtBZS5pbnZlcnNlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lWzBdLG89ZVsxXSxhPWVbMl0scj1lWzRdLGk9ZVs1XSxmPWVbNl0sZD1lWzhdLGM9ZVs5XSx1PWVbMTBdLGw9ZVsxMl0saD1lWzEzXSxtPWVbMTRdLGI9LW4qbC1vKmgtYSptLHA9LXIqbC1pKmgtZiptLHk9LWQqbC1jKmgtdSptO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09ZCx0WzNdPTAsdFs0XT1vLHRbNV09aSx0WzZdPWMsdFs3XT0wLHRbOF09YSx0WzldPWYsdFsxMF09dSx0WzExXT0wLHRbMTJdPWIsdFsxM109cCx0WzE0XT15LHRbMTVdPTEsdH07ckM9bmV3IEFlO0FlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQWUuaW52ZXJzZShBZS50cmFuc3Bvc2UoZSxyQyksdCl9O0FlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IEFlKDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpKTtBZS5aRVJPPU9iamVjdC5mcmVlemUobmV3IEFlKDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApKTtBZS5DT0xVTU4wUk9XMD0wO0FlLkNPTFVNTjBST1cxPTE7QWUuQ09MVU1OMFJPVzI9MjtBZS5DT0xVTU4wUk9XMz0zO0FlLkNPTFVNTjFST1cwPTQ7QWUuQ09MVU1OMVJPVzE9NTtBZS5DT0xVTU4xUk9XMj02O0FlLkNPTFVNTjFST1czPTc7QWUuQ09MVU1OMlJPVzA9ODtBZS5DT0xVTU4yUk9XMT05O0FlLkNPTFVNTjJST1cyPTEwO0FlLkNPTFVNTjJST1czPTExO0FlLkNPTFVNTjNST1cwPTEyO0FlLkNPTFVNTjNST1cxPTEzO0FlLkNPTFVNTjNST1cyPTE0O0FlLkNPTFVNTjNST1czPTE1O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFlLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQWUucGFja2VkTGVuZ3RofX19KTtBZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEFlLmNsb25lKHRoaXMsZSl9O0FlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFlLmVxdWFscyh0aGlzLGUpfTtBZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdJiZlWzRdPT09dFtuKzRdJiZlWzVdPT09dFtuKzVdJiZlWzZdPT09dFtuKzZdJiZlWzddPT09dFtuKzddJiZlWzhdPT09dFtuKzhdJiZlWzldPT09dFtuKzldJiZlWzEwXT09PXRbbisxMF0mJmVbMTFdPT09dFtuKzExXSYmZVsxMl09PT10W24rMTJdJiZlWzEzXT09PXRbbisxM10mJmVbMTRdPT09dFtuKzE0XSYmZVsxNV09PT10W24rMTVdfTtBZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiBBZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07QWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbNF19LCAke3RoaXNbOF19LCAke3RoaXNbMTJdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s1XX0sICR7dGhpc1s5XX0sICR7dGhpc1sxM119KQooJHt0aGlzWzJdfSwgJHt0aGlzWzZdfSwgJHt0aGlzWzEwXX0sICR7dGhpc1sxNF19KQooJHt0aGlzWzNdfSwgJHt0aGlzWzddfSwgJHt0aGlzWzExXX0sICR7dGhpc1sxNV19KWB9OyQ9QWV9KTtmdW5jdGlvbiBpQyhlLHQsbil7bGV0IG89MCxhPWUubGVuZ3RoLTEscixpO2Zvcig7bzw9YTspe2lmKHI9fn4oKG8rYSkvMiksaT1uKGVbcl0sdCksaTwwKXtvPXIrMTtjb250aW51ZX1pZihpPjApe2E9ci0xO2NvbnRpbnVlfXJldHVybiByfXJldHVybn4oYSsxKX12YXIgX2Esbmw9WCgoKT0+e19hPWlDfSk7ZnVuY3Rpb24gY0MoZSx0LG4sbyxhKXt0aGlzLnhQb2xlV2FuZGVyPWUsdGhpcy55UG9sZVdhbmRlcj10LHRoaXMueFBvbGVPZmZzZXQ9bix0aGlzLnlQb2xlT2Zmc2V0PW8sdGhpcy51dDFNaW51c1V0Yz1hfXZhciBiZixYbT1YKCgpPT57YmY9Y0N9KTtmdW5jdGlvbiBzQyhlKXtyZXR1cm4gZSU0PT09MCYmZSUxMDAhPT0wfHxlJTQwMD09PTB9dmFyIHBmLFltPVgoKCk9PntwZj1zQ30pO2Z1bmN0aW9uIGZDKGUsdCxuLG8sYSxyLGksZil7ZT1lPz8xLHQ9dD8/MSxuPW4/PzEsbz1vPz8wLGE9YT8/MCxyPXI/PzAsaT1pPz8wLGY9Zj8/ITEsdGhpcy55ZWFyPWUsdGhpcy5tb250aD10LHRoaXMuZGF5PW4sdGhpcy5ob3VyPW8sdGhpcy5taW51dGU9YSx0aGlzLnNlY29uZD1yLHRoaXMubWlsbGlzZWNvbmQ9aSx0aGlzLmlzTGVhcFNlY29uZD1mO2Z1bmN0aW9uIHAoKXtNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIlllYXIiLGUsMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJZZWFyIixlLDk5OTkpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiTW9udGgiLHQsMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJNb250aCIsdCwxMiksTW4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJEYXkiLG4sMSksTW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJEYXkiLG4sMzEpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiSG91ciIsbywwKSxNbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMjMpLE1uLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiTWludXRlIixhLDApLE1uLnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiTWludXRlIixhLDU5KSxNbi50eXBlT2YuYm9vbCgiSXNMZWFwU2Vjb25kIixmKSxNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIlNlY29uZCIsciwwKSxNbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIlNlY29uZCIscixmPzYwOjU5KSxNbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIk1pbGxpc2Vjb25kIixpLDApLE1uLnR5cGVPZi5udW1iZXIubGVzc1RoYW4oIk1pbGxpc2Vjb25kIixpLDFlMyl9ZnVuY3Rpb24geSgpe2xldCBFPXQ9PT0yJiZwZihlKT9UMVt0LTFdKzE6VDFbdC0xXTtpZihuPkUpdGhyb3cgbmV3IFd0KCJNb250aCBhbmQgRGF5IHJlcHJlc2VudHMgaW52YWxpZCBkYXRlIil9fXZhciBUMSxKbSxSMT1YKCgpPT57VW0oKTtKaSgpO1ltKCk7VDE9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtKbT1mQ30pO2Z1bmN0aW9uIGRDKGUsdCl7dGhpcy5qdWxpYW5EYXRlPWUsdGhpcy5vZmZzZXQ9dH12YXIgUXQsWm09WCgoKT0+e1F0PWRDfSk7dmFyIHVDLGduLG9sPVgoKCk9Pnt1Qz17U0VDT05EU19QRVJfTUlMTElTRUNPTkQ6LjAwMSxTRUNPTkRTX1BFUl9NSU5VVEU6NjAsTUlOVVRFU19QRVJfSE9VUjo2MCxIT1VSU19QRVJfREFZOjI0LFNFQ09ORFNfUEVSX0hPVVI6MzYwMCxNSU5VVEVTX1BFUl9EQVk6MTQ0MCxTRUNPTkRTX1BFUl9EQVk6ODY0MDAsREFZU19QRVJfSlVMSUFOX0NFTlRVUlk6MzY1MjUsUElDT1NFQ09ORDoxZS05LE1PRElGSUVEX0pVTElBTl9EQVRFX0RJRkZFUkVOQ0U6MjQwMDAwMDVlLTF9LGduPU9iamVjdC5mcmVlemUodUMpfSk7dmFyIGxDLHl0LGFsPVgoKCk9PntsQz17VVRDOjAsVEFJOjF9LHl0PU9iamVjdC5mcmVlemUobEMpfSk7ZnVuY3Rpb24gZWIoZSx0KXtyZXR1cm4gQmUuY29tcGFyZShlLmp1bGlhbkRhdGUsdC5qdWxpYW5EYXRlKX1mdW5jdGlvbiBpbChlKXtKYy5qdWxpYW5EYXRlPWU7bGV0IHQ9QmUubGVhcFNlY29uZHMsbj1fYSh0LEpjLGViKTtuPDAmJihuPX5uKSxuPj10Lmxlbmd0aCYmKG49dC5sZW5ndGgtMSk7bGV0IG89dFtuXS5vZmZzZXQ7bj4wJiZCZS5zZWNvbmRzRGlmZmVyZW5jZSh0W25dLmp1bGlhbkRhdGUsZSk+byYmKG4tLSxvPXRbbl0ub2Zmc2V0KSxCZS5hZGRTZWNvbmRzKGUsbyxlKX1mdW5jdGlvbiB4MShlLHQpe0pjLmp1bGlhbkRhdGU9ZTtsZXQgbj1CZS5sZWFwU2Vjb25kcyxvPV9hKG4sSmMsZWIpO2lmKG88MCYmKG89fm8pLG89PT0wKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bMF0ub2Zmc2V0LHQpO2lmKG8+PW4ubGVuZ3RoKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bby0xXS5vZmZzZXQsdCk7bGV0IGE9QmUuc2Vjb25kc0RpZmZlcmVuY2UobltvXS5qdWxpYW5EYXRlLGUpO2lmKGE9PT0wKXJldHVybiBCZS5hZGRTZWNvbmRzKGUsLW5bb10ub2Zmc2V0LHQpO2lmKCEoYTw9MSkpcmV0dXJuIEJlLmFkZFNlY29uZHMoZSwtblstLW9dLm9mZnNldCx0KX1mdW5jdGlvbiBkaShlLHQsbil7bGV0IG89dC9nbi5TRUNPTkRTX1BFUl9EQVl8MDtyZXR1cm4gZSs9byx0LT1nbi5TRUNPTkRTX1BFUl9EQVkqbyx0PDAmJihlLS0sdCs9Z24uU0VDT05EU19QRVJfREFZKSxuLmRheU51bWJlcj1lLG4uc2Vjb25kc09mRGF5PXQsbn1mdW5jdGlvbiB0YihlLHQsbixvLGEscixpKXtsZXQgZj0odC0xNCkvMTJ8MCxkPWUrNDgwMCtmLGM9KDE0NjEqZC80fDApKygzNjcqKHQtMi0xMipmKS8xMnwwKS0oMyooKGQrMTAwKS8xMDB8MCkvNHwwKStuLTMyMDc1O289by0xMixvPDAmJihvKz0yNCk7bGV0IHU9cisobypnbi5TRUNPTkRTX1BFUl9IT1VSK2EqZ24uU0VDT05EU19QRVJfTUlOVVRFK2kqZ24uU0VDT05EU19QRVJfTUlMTElTRUNPTkQpO3JldHVybiB1Pj00MzIwMCYmKGMtPTEpLFtjLHVdfWZ1bmN0aW9uIEJlKGUsdCxuKXt0aGlzLmRheU51bWJlcj12b2lkIDAsdGhpcy5zZWNvbmRzT2ZEYXk9dm9pZCAwLGU9ZT8/MCx0PXQ/PzAsbj1uPz95dC5VVEM7bGV0IG89ZXwwO3Q9dCsoZS1vKSpnbi5TRUNPTkRTX1BFUl9EQVksZGkobyx0LHRoaXMpLG49PT15dC5VVEMmJmlsKHRoaXMpfXZhciBPMSxRbSwkbSxKYyxoQyxtQyxiQyxwQyxnQyxuYixfQyx5QyxBQyxybCxKbixjbD1YKCgpPT57bmwoKTtzZSgpO1IxKCk7WW0oKTtabSgpO29sKCk7YWwoKTtPMT1uZXcgSm0sUW09WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSwkbT0yOTtKYz1uZXcgUXQ7aEM9L14oXGR7NH0pJC8sbUM9L14oXGR7NH0pLShcZHsyfSkkLyxiQz0vXihcZHs0fSktPyhcZHszfSkkLyxwQz0vXihcZHs0fSktP1coXGR7Mn0pLT8oXGR7MX0pPyQvLGdDPS9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezJ9KSQvLG5iPS8oW1orXC1dKT8oXGR7Mn0pPzo/KFxkezJ9KT8kLyxfQz0vXihcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZSx5Qz0vXihcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZSxBQz0vXihcZHsyfSk6PyhcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK25iLnNvdXJjZTtCZS5mcm9tR3JlZ29yaWFuRGF0ZT1mdW5jdGlvbihlLHQpe2xldCBuPXRiKGUueWVhcixlLm1vbnRoLGUuZGF5LGUuaG91cixlLm1pbnV0ZSxlLnNlY29uZCxlLm1pbGxpc2Vjb25kKTtyZXR1cm4gZyh0KT8oZGkoblswXSxuWzFdLHQpLGlsKHQpLHQpOm5ldyBCZShuWzBdLG5bMV0seXQuVVRDKX07QmUuZnJvbURhdGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj10YihlLmdldFVUQ0Z1bGxZZWFyKCksZS5nZXRVVENNb250aCgpKzEsZS5nZXRVVENEYXRlKCksZS5nZXRVVENIb3VycygpLGUuZ2V0VVRDTWludXRlcygpLGUuZ2V0VVRDU2Vjb25kcygpLGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO3JldHVybiBnKHQpPyhkaShuWzBdLG5bMV0sdCksaWwodCksdCk6bmV3IEJlKG5bMF0sblsxXSx5dC5VVEMpfTtCZS5mcm9tSXNvODYwMT1mdW5jdGlvbihlLHQpe2U9ZS5yZXBsYWNlKCIsIiwiLiIpO2xldCBuPWUuc3BsaXQoIlQiKSxvLGE9MSxyPTEsaT0wLGY9MCxkPTAsYz0wLHU9blswXSxsPW5bMV0saCxtO2lmKG49dS5tYXRjaChnQyksbiE9PW51bGwpbz0rblsxXSxhPStuWzJdLHI9K25bM107ZWxzZSBpZihuPXUubWF0Y2gobUMpLG4hPT1udWxsKW89K25bMV0sYT0rblsyXTtlbHNlIGlmKG49dS5tYXRjaChoQyksbiE9PW51bGwpbz0rblsxXTtlbHNle2xldCBFO2lmKG49dS5tYXRjaChiQyksbiE9PW51bGwpbz0rblsxXSxFPStuWzJdLG09cGYobyk7ZWxzZSBpZihuPXUubWF0Y2gocEMpLG4hPT1udWxsKXtvPStuWzFdO2xldCBfPStuWzJdLFQ9K25bM118fDAsdz1uZXcgRGF0ZShEYXRlLlVUQyhvLDAsNCkpO0U9Xyo3K1Qtdy5nZXRVVENEYXkoKS0zfWg9bmV3IERhdGUoRGF0ZS5VVEMobywwLDEpKSxoLnNldFVUQ0RhdGUoRSksYT1oLmdldFVUQ01vbnRoKCkrMSxyPWguZ2V0VVRDRGF0ZSgpfW09cGYobyk7bGV0IGI7aWYoZyhsKSl7bj1sLm1hdGNoKEFDKSxuIT09bnVsbD8oaT0rblsxXSxmPStuWzJdLGQ9K25bM10sYz0rKG5bNF18fDApKjFlMyxiPTUpOihuPWwubWF0Y2goeUMpLG4hPT1udWxsPyhpPStuWzFdLGY9K25bMl0sZD0rKG5bM118fDApKjYwLGI9NCk6KG49bC5tYXRjaChfQyksbiE9PW51bGwmJihpPStuWzFdLGY9KyhuWzJdfHwwKSo2MCxiPTMpKSk7bGV0IEU9bltiXSxfPStuW2IrMV0sVD0rKG5bYisyXXx8MCk7c3dpdGNoKEUpe2Nhc2UiKyI6aT1pLV8sZj1mLVQ7YnJlYWs7Y2FzZSItIjppPWkrXyxmPWYrVDticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6Zj1mK25ldyBEYXRlKERhdGUuVVRDKG8sYS0xLHIsaSxmKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IHA9ZD09PTYwO2ZvcihwJiZkLS07Zj49NjA7KWYtPTYwLGkrKztmb3IoO2k+PTI0OylpLT0yNCxyKys7Zm9yKGg9bSYmYT09PTI/JG06UW1bYS0xXTtyPmg7KXItPWgsYSsrLGE+MTImJihhLT0xMixvKyspLGg9bSYmYT09PTI/JG06UW1bYS0xXTtmb3IoO2Y8MDspZis9NjAsaS0tO2Zvcig7aTwwOylpKz0yNCxyLS07Zm9yKDtyPDE7KWEtLSxhPDEmJihhKz0xMixvLS0pLGg9bSYmYT09PTI/JG06UW1bYS0xXSxyKz1oO2xldCB5PXRiKG8sYSxyLGksZixkLGMpO3JldHVybiBnKHQpPyhkaSh5WzBdLHlbMV0sdCksaWwodCkpOnQ9bmV3IEJlKHlbMF0seVsxXSx5dC5VVEMpLHAmJkJlLmFkZFNlY29uZHModCwxLHQpLHR9O0JlLm5vdz1mdW5jdGlvbihlKXtyZXR1cm4gQmUuZnJvbURhdGUobmV3IERhdGUsZSl9O3JsPW5ldyBCZSgwLDAseXQuVEFJKTtCZS50b0dyZWdvcmlhbkRhdGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj0hMSxvPXgxKGUscmwpO2cobyl8fChCZS5hZGRTZWNvbmRzKGUsLTEscmwpLG89eDEocmwscmwpLG49ITApO2xldCBhPW8uZGF5TnVtYmVyLHI9by5zZWNvbmRzT2ZEYXk7cj49NDMyMDAmJihhKz0xKTtsZXQgaT1hKzY4NTY5fDAsZj00KmkvMTQ2MDk3fDA7aT1pLSgoMTQ2MDk3KmYrMykvNHwwKXwwO2xldCBkPTRlMyooaSsxKS8xNDYxMDAxfDA7aT1pLSgxNDYxKmQvNHwwKSszMXwwO2xldCBjPTgwKmkvMjQ0N3wwLHU9aS0oMjQ0NypjLzgwfDApfDA7aT1jLzExfDA7bGV0IGw9YysyLTEyKml8MCxoPTEwMCooZi00OSkrZCtpfDAsbT1yL2duLlNFQ09ORFNfUEVSX0hPVVJ8MCxiPXItbSpnbi5TRUNPTkRTX1BFUl9IT1VSLHA9Yi9nbi5TRUNPTkRTX1BFUl9NSU5VVEV8MDtiPWItcCpnbi5TRUNPTkRTX1BFUl9NSU5VVEU7bGV0IHk9YnwwLEU9KGIteSkvZ24uU0VDT05EU19QRVJfTUlMTElTRUNPTkQ7cmV0dXJuIG0rPTEyLG0+MjMmJihtLT0yNCksbiYmKHkrPTEpLGcodCk/KHQueWVhcj1oLHQubW9udGg9bCx0LmRheT11LHQuaG91cj1tLHQubWludXRlPXAsdC5zZWNvbmQ9eSx0Lm1pbGxpc2Vjb25kPUUsdC5pc0xlYXBTZWNvbmQ9bix0KTpuZXcgSm0oaCxsLHUsbSxwLHksRSxuKX07QmUudG9EYXRlPWZ1bmN0aW9uKGUpe2xldCB0PUJlLnRvR3JlZ29yaWFuRGF0ZShlLE8xKSxuPXQuc2Vjb25kO3JldHVybiB0LmlzTGVhcFNlY29uZCYmKG4tPTEpLG5ldyBEYXRlKERhdGUuVVRDKHQueWVhcix0Lm1vbnRoLTEsdC5kYXksdC5ob3VyLHQubWludXRlLG4sdC5taWxsaXNlY29uZCkpfTtCZS50b0lzbzg2MDE9ZnVuY3Rpb24oZSx0KXtsZXQgbj1CZS50b0dyZWdvcmlhbkRhdGUoZSxPMSksbz1uLnllYXIsYT1uLm1vbnRoLHI9bi5kYXksaT1uLmhvdXIsZj1uLm1pbnV0ZSxkPW4uc2Vjb25kLGM9bi5taWxsaXNlY29uZDtvPT09MWU0JiZhPT09MSYmcj09PTEmJmk9PT0wJiZmPT09MCYmZD09PTAmJmM9PT0wJiYobz05OTk5LGE9MTIscj0zMSxpPTI0KTtsZXQgdTtpZighZyh0KSYmYyE9PTApe2xldCBsPWMqLjAxO3JldHVybiB1PWw8MWUtNj9sLnRvRml4ZWQoMjApLnJlcGxhY2UoIi4iLCIiKS5yZXBsYWNlKC8wKyQvLCIiKTpsLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIiIpLGAke28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke3V9WmB9cmV0dXJuIWcodCl8fHQ9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOih1PShjKi4wMSkudG9GaXhlZCh0KS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCx0KSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke2EudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7ZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHt1fVpgKX07QmUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LmRheU51bWJlcj1lLmRheU51bWJlcix0LnNlY29uZHNPZkRheT1lLnNlY29uZHNPZkRheSx0KTpuZXcgQmUoZS5kYXlOdW1iZXIsZS5zZWNvbmRzT2ZEYXkseXQuVEFJKX07QmUuY29tcGFyZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuZGF5TnVtYmVyLXQuZGF5TnVtYmVyO3JldHVybiBuIT09MD9uOmUuc2Vjb25kc09mRGF5LXQuc2Vjb25kc09mRGF5fTtCZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUuZGF5TnVtYmVyPT09dC5kYXlOdW1iZXImJmUuc2Vjb25kc09mRGF5PT09dC5zZWNvbmRzT2ZEYXl9O0JlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsZT09PXR8fGcoZSkmJmcodCkmJk1hdGguYWJzKEJlLnNlY29uZHNEaWZmZXJlbmNlKGUsdCkpPD1ufTtCZS50b3RhbERheXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGF5TnVtYmVyK2Uuc2Vjb25kc09mRGF5L2duLlNFQ09ORFNfUEVSX0RBWX07QmUuc2Vjb25kc0RpZmZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5kYXlOdW1iZXItdC5kYXlOdW1iZXIpKmduLlNFQ09ORFNfUEVSX0RBWSsoZS5zZWNvbmRzT2ZEYXktdC5zZWNvbmRzT2ZEYXkpfTtCZS5kYXlzRGlmZmVyZW5jZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuZGF5TnVtYmVyLXQuZGF5TnVtYmVyLG89KGUuc2Vjb25kc09mRGF5LXQuc2Vjb25kc09mRGF5KS9nbi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG4rb307QmUuY29tcHV0ZVRhaU1pbnVzVXRjPWZ1bmN0aW9uKGUpe0pjLmp1bGlhbkRhdGU9ZTtsZXQgdD1CZS5sZWFwU2Vjb25kcyxuPV9hKHQsSmMsZWIpO3JldHVybiBuPDAmJihuPX5uLC0tbixuPDAmJihuPTApKSx0W25dLm9mZnNldH07QmUuYWRkU2Vjb25kcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGRpKGUuZGF5TnVtYmVyLGUuc2Vjb25kc09mRGF5K3Qsbil9O0JlLmFkZE1pbnV0ZXM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuc2Vjb25kc09mRGF5K3QqZ24uU0VDT05EU19QRVJfTUlOVVRFO3JldHVybiBkaShlLmRheU51bWJlcixvLG4pfTtCZS5hZGRIb3Vycz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZS5zZWNvbmRzT2ZEYXkrdCpnbi5TRUNPTkRTX1BFUl9IT1VSO3JldHVybiBkaShlLmRheU51bWJlcixvLG4pfTtCZS5hZGREYXlzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmRheU51bWJlcit0O3JldHVybiBkaShvLGUuc2Vjb25kc09mRGF5LG4pfTtCZS5sZXNzVGhhbj1mdW5jdGlvbihlLHQpe3JldHVybiBCZS5jb21wYXJlKGUsdCk8MH07QmUubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBCZS5jb21wYXJlKGUsdCk8PTB9O0JlLmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJlLmNvbXBhcmUoZSx0KT4wfTtCZS5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJlLmNvbXBhcmUoZSx0KT49MH07QmUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBCZS5jbG9uZSh0aGlzLGUpfTtCZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBCZS5lcXVhbHModGhpcyxlKX07QmUucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQmUuZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O0JlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBCZS50b0lzbzg2MDEodGhpcyl9O0JlLmxlYXBTZWNvbmRzPVtuZXcgUXQobmV3IEJlKDI0NDEzMTcsNDMyMTAseXQuVEFJKSwxMCksbmV3IFF0KG5ldyBCZSgyNDQxNDk5LDQzMjExLHl0LlRBSSksMTEpLG5ldyBRdChuZXcgQmUoMjQ0MTY4Myw0MzIxMix5dC5UQUkpLDEyKSxuZXcgUXQobmV3IEJlKDI0NDIwNDgsNDMyMTMseXQuVEFJKSwxMyksbmV3IFF0KG5ldyBCZSgyNDQyNDEzLDQzMjE0LHl0LlRBSSksMTQpLG5ldyBRdChuZXcgQmUoMjQ0Mjc3OCw0MzIxNSx5dC5UQUkpLDE1KSxuZXcgUXQobmV3IEJlKDI0NDMxNDQsNDMyMTYseXQuVEFJKSwxNiksbmV3IFF0KG5ldyBCZSgyNDQzNTA5LDQzMjE3LHl0LlRBSSksMTcpLG5ldyBRdChuZXcgQmUoMjQ0Mzg3NCw0MzIxOCx5dC5UQUkpLDE4KSxuZXcgUXQobmV3IEJlKDI0NDQyMzksNDMyMTkseXQuVEFJKSwxOSksbmV3IFF0KG5ldyBCZSgyNDQ0Nzg2LDQzMjIwLHl0LlRBSSksMjApLG5ldyBRdChuZXcgQmUoMjQ0NTE1MSw0MzIyMSx5dC5UQUkpLDIxKSxuZXcgUXQobmV3IEJlKDI0NDU1MTYsNDMyMjIseXQuVEFJKSwyMiksbmV3IFF0KG5ldyBCZSgyNDQ2MjQ3LDQzMjIzLHl0LlRBSSksMjMpLG5ldyBRdChuZXcgQmUoMjQ0NzE2MSw0MzIyNCx5dC5UQUkpLDI0KSxuZXcgUXQobmV3IEJlKDI0NDc4OTIsNDMyMjUseXQuVEFJKSwyNSksbmV3IFF0KG5ldyBCZSgyNDQ4MjU3LDQzMjI2LHl0LlRBSSksMjYpLG5ldyBRdChuZXcgQmUoMjQ0ODgwNCw0MzIyNyx5dC5UQUkpLDI3KSxuZXcgUXQobmV3IEJlKDI0NDkxNjksNDMyMjgseXQuVEFJKSwyOCksbmV3IFF0KG5ldyBCZSgyNDQ5NTM0LDQzMjI5LHl0LlRBSSksMjkpLG5ldyBRdChuZXcgQmUoMjQ1MDA4Myw0MzIzMCx5dC5UQUkpLDMwKSxuZXcgUXQobmV3IEJlKDI0NTA2MzAsNDMyMzEseXQuVEFJKSwzMSksbmV3IFF0KG5ldyBCZSgyNDUxMTc5LDQzMjMyLHl0LlRBSSksMzIpLG5ldyBRdChuZXcgQmUoMjQ1MzczNiw0MzIzMyx5dC5UQUkpLDMzKSxuZXcgUXQobmV3IEJlKDI0NTQ4MzIsNDMyMzQseXQuVEFJKSwzNCksbmV3IFF0KG5ldyBCZSgyNDU2MTA5LDQzMjM1LHl0LlRBSSksMzUpLG5ldyBRdChuZXcgQmUoMjQ1NzIwNCw0MzIzNix5dC5UQUkpLDM2KSxuZXcgUXQobmV3IEJlKDI0NTc3NTQsNDMyMzcseXQuVEFJKSwzNyldO0puPUJlfSk7dmFyIFMxPWVvKChaYyxRYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgWmM9PSJvYmplY3QiJiZaYyYmIVpjLm5vZGVUeXBlJiZaYyxuPXR5cGVvZiBRYz09Im9iamVjdCImJlFjJiYhUWMubm9kZVR5cGUmJlFjLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYoZT1vKTt2YXIgYSxyPTIxNDc0ODM2NDcsaT0zNixmPTEsZD0yNixjPTM4LHU9NzAwLGw9NzIsaD0xMjgsbT0iLSIsYj0vXnhuLS0vLHA9L1teXHgyMC1ceDdFXS8seT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csRT17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sXz1pLWYsVD1NYXRoLmZsb29yLHc9U3RyaW5nLmZyb21DaGFyQ29kZSxSO2Z1bmN0aW9uIFMoRCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoRVtEXSl9ZnVuY3Rpb24gQyhELEcpe2Zvcih2YXIgSD1ELmxlbmd0aCxPPVtdO0gtLTspT1tIXT1HKERbSF0pO3JldHVybiBPfWZ1bmN0aW9uIEkoRCxHKXt2YXIgSD1ELnNwbGl0KCJAIiksTz0iIjtILmxlbmd0aD4xJiYoTz1IWzBdKyJAIixEPUhbMV0pLEQ9RC5yZXBsYWNlKHksIi4iKTt2YXIgWj1ELnNwbGl0KCIuIiksb2U9QyhaLEcpLmpvaW4oIi4iKTtyZXR1cm4gTytvZX1mdW5jdGlvbiBOKEQpe2Zvcih2YXIgRz1bXSxIPTAsTz1ELmxlbmd0aCxaLG9lO0g8TzspWj1ELmNoYXJDb2RlQXQoSCsrKSxaPj01NTI5NiYmWjw9NTYzMTkmJkg8Tz8ob2U9RC5jaGFyQ29kZUF0KEgrKyksKG9lJjY0NTEyKT09NTYzMjA/Ry5wdXNoKCgoWiYxMDIzKTw8MTApKyhvZSYxMDIzKSs2NTUzNik6KEcucHVzaChaKSxILS0pKTpHLnB1c2goWik7cmV0dXJuIEd9ZnVuY3Rpb24gUChEKXtyZXR1cm4gQyhELGZ1bmN0aW9uKEcpe3ZhciBIPSIiO3JldHVybiBHPjY1NTM1JiYoRy09NjU1MzYsSCs9dyhHPj4+MTAmMTAyM3w1NTI5NiksRz01NjMyMHxHJjEwMjMpLEgrPXcoRyksSH0pLmpvaW4oIiIpfWZ1bmN0aW9uIHYoRCl7cmV0dXJuIEQtNDg8MTA/RC0yMjpELTY1PDI2P0QtNjU6RC05NzwyNj9ELTk3Oml9ZnVuY3Rpb24gQShELEcpe3JldHVybiBEKzIyKzc1KihEPDI2KS0oKEchPTApPDw1KX1mdW5jdGlvbiB4KEQsRyxIKXt2YXIgTz0wO2ZvcihEPUg/VChEL3UpOkQ+PjEsRCs9VChEL0cpO0Q+XypkPj4xO08rPWkpRD1UKEQvXyk7cmV0dXJuIFQoTysoXysxKSpELyhEK2MpKX1mdW5jdGlvbiBNKEQpe3ZhciBHPVtdLEg9RC5sZW5ndGgsTyxaPTAsb2U9aCxjZT1sLGRlLGVlLG1lLGxlLGJlLGZlLGFlLFJlLE5lO2ZvcihkZT1ELmxhc3RJbmRleE9mKG0pLGRlPDAmJihkZT0wKSxlZT0wO2VlPGRlOysrZWUpRC5jaGFyQ29kZUF0KGVlKT49MTI4JiZTKCJub3QtYmFzaWMiKSxHLnB1c2goRC5jaGFyQ29kZUF0KGVlKSk7Zm9yKG1lPWRlPjA/ZGUrMTowO21lPEg7KXtmb3IobGU9WixiZT0xLGZlPWk7bWU+PUgmJlMoImludmFsaWQtaW5wdXQiKSxhZT12KEQuY2hhckNvZGVBdChtZSsrKSksKGFlPj1pfHxhZT5UKChyLVopL2JlKSkmJlMoIm92ZXJmbG93IiksWis9YWUqYmUsUmU9ZmU8PWNlP2Y6ZmU+PWNlK2Q/ZDpmZS1jZSwhKGFlPFJlKTtmZSs9aSlOZT1pLVJlLGJlPlQoci9OZSkmJlMoIm92ZXJmbG93IiksYmUqPU5lO089Ry5sZW5ndGgrMSxjZT14KFotbGUsTyxsZT09MCksVChaL08pPnItb2UmJlMoIm92ZXJmbG93Iiksb2UrPVQoWi9PKSxaJT1PLEcuc3BsaWNlKForKywwLG9lKX1yZXR1cm4gUChHKX1mdW5jdGlvbiBGKEQpe3ZhciBHLEgsTyxaLG9lLGNlLGRlLGVlLG1lLGxlLGJlLGZlPVtdLGFlLFJlLE5lLEplO2ZvcihEPU4oRCksYWU9RC5sZW5ndGgsRz1oLEg9MCxvZT1sLGNlPTA7Y2U8YWU7KytjZSliZT1EW2NlXSxiZTwxMjgmJmZlLnB1c2godyhiZSkpO2ZvcihPPVo9ZmUubGVuZ3RoLFomJmZlLnB1c2gobSk7TzxhZTspe2ZvcihkZT1yLGNlPTA7Y2U8YWU7KytjZSliZT1EW2NlXSxiZT49RyYmYmU8ZGUmJihkZT1iZSk7Zm9yKFJlPU8rMSxkZS1HPlQoKHItSCkvUmUpJiZTKCJvdmVyZmxvdyIpLEgrPShkZS1HKSpSZSxHPWRlLGNlPTA7Y2U8YWU7KytjZSlpZihiZT1EW2NlXSxiZTxHJiYrK0g+ciYmUygib3ZlcmZsb3ciKSxiZT09Ryl7Zm9yKGVlPUgsbWU9aTtsZT1tZTw9b2U/ZjptZT49b2UrZD9kOm1lLW9lLCEoZWU8bGUpO21lKz1pKUplPWVlLWxlLE5lPWktbGUsZmUucHVzaCh3KEEobGUrSmUlTmUsMCkpKSxlZT1UKEplL05lKTtmZS5wdXNoKHcoQShlZSwwKSkpLG9lPXgoSCxSZSxPPT1aKSxIPTAsKytPfSsrSCwrK0d9cmV0dXJuIGZlLmpvaW4oIiIpfWZ1bmN0aW9uIFUoRCl7cmV0dXJuIEkoRCxmdW5jdGlvbihHKXtyZXR1cm4gYi50ZXN0KEcpP00oRy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpHfSl9ZnVuY3Rpb24geihEKXtyZXR1cm4gSShELGZ1bmN0aW9uKEcpe3JldHVybiBwLnRlc3QoRyk/InhuLS0iK0YoRyk6R30pfWlmKGE9e3ZlcnNpb246IjEuMy4yIix1Y3MyOntkZWNvZGU6TixlbmNvZGU6UH0sZGVjb2RlOk0sZW5jb2RlOkYsdG9BU0NJSTp6LHRvVW5pY29kZTpVfSx0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZGVmaW5lLmFtZD09Im9iamVjdCImJmRlZmluZS5hbWQpZGVmaW5lKCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO2Vsc2UgaWYodCYmbilpZihRYy5leHBvcnRzPT10KW4uZXhwb3J0cz1hO2Vsc2UgZm9yKFIgaW4gYSlhLmhhc093blByb3BlcnR5KFIpJiYodFtSXT1hW1JdKTtlbHNlIGUucHVueWNvZGU9YX0pKFpjKX0pO3ZhciBNMT1lbygoQzEsc2wpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogSVB2NiBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Ygc2w9PSJvYmplY3QiJiZzbC5leHBvcnRzP3NsLmV4cG9ydHM9dCgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuSVB2Nj10KGUpfSkoQzEsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWUmJmUuSVB2NjtmdW5jdGlvbiBuKGEpe3ZhciByPWEudG9Mb3dlckNhc2UoKSxpPXIuc3BsaXQoIjoiKSxmPWkubGVuZ3RoLGQ9ODtpWzBdPT09IiImJmlbMV09PT0iIiYmaVsyXT09PSIiPyhpLnNoaWZ0KCksaS5zaGlmdCgpKTppWzBdPT09IiImJmlbMV09PT0iIj9pLnNoaWZ0KCk6aVtmLTFdPT09IiImJmlbZi0yXT09PSIiJiZpLnBvcCgpLGY9aS5sZW5ndGgsaVtmLTFdLmluZGV4T2YoIi4iKSE9PS0xJiYoZD03KTt2YXIgYztmb3IoYz0wO2M8ZiYmaVtjXSE9PSIiO2MrKyk7aWYoYzxkKWZvcihpLnNwbGljZShjLDEsIjAwMDAiKTtpLmxlbmd0aDxkOylpLnNwbGljZShjLDAsIjAwMDAiKTtmb3IodmFyIHUsbD0wO2w8ZDtsKyspe3U9aVtsXS5zcGxpdCgiIik7Zm9yKHZhciBoPTA7aDwzJiYodVswXT09PSIwIiYmdS5sZW5ndGg+MSk7aCsrKXUuc3BsaWNlKDAsMSk7aVtsXT11LmpvaW4oIiIpfXZhciBtPS0xLGI9MCxwPTAseT0tMSxFPSExO2ZvcihsPTA7bDxkO2wrKylFP2lbbF09PT0iMCI/cCs9MTooRT0hMSxwPmImJihtPXksYj1wKSk6aVtsXT09PSIwIiYmKEU9ITAseT1sLHA9MSk7cD5iJiYobT15LGI9cCksYj4xJiZpLnNwbGljZShtLGIsIiIpLGY9aS5sZW5ndGg7dmFyIF89IiI7Zm9yKGlbMF09PT0iIiYmKF89IjoiKSxsPTA7bDxmJiYoXys9aVtsXSxsIT09Zi0xKTtsKyspXys9IjoiO3JldHVybiBpW2YtMV09PT0iIiYmKF8rPSI6IiksX31mdW5jdGlvbiBvKCl7cmV0dXJuIGUuSVB2Nj09PXRoaXMmJihlLklQdjY9dCksdGhpc31yZXR1cm57YmVzdDpuLG5vQ29uZmxpY3Q6b319KX0pO3ZhciBJMT1lbygoTjEsZmwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogU2Vjb25kIExldmVsIERvbWFpbiAoU0xEKSBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgZmw9PSJvYmplY3QiJiZmbC5leHBvcnRzP2ZsLmV4cG9ydHM9dCgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuU2Vjb25kTGV2ZWxEb21haW5zPXQoZSl9KShOMSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZSYmZS5TZWNvbmRMZXZlbERvbWFpbnMsbj17bGlzdDp7YWM6IiBjb20gZ292IG1pbCBuZXQgb3JnICIsYWU6IiBhYyBjbyBnb3YgbWlsIG5hbWUgbmV0IG9yZyBwcm8gc2NoICIsYWY6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYWw6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGFvOiIgY28gZWQgZ3YgaXQgb2cgcGIgIixhcjoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHVyICIsYXQ6IiBhYyBjbyBndiBvciAiLGF1OiIgYXNuIGNvbSBjc2lybyBlZHUgZ292IGlkIG5ldCBvcmcgIixiYToiIGNvIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnIHJzIHVuYmkgdW5tbyB1bnNhIHVudHogdW56ZSAiLGJiOiIgYml6IGNvIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyBzdG9yZSB0diAiLGJoOiIgYml6IGNjIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLGJuOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGJvOiIgY29tIGVkdSBnb2IgZ292IGludCBtaWwgbmV0IG9yZyB0diAiLGJyOiIgYWRtIGFkdiBhZ3IgYW0gYXJxIGFydCBhdG8gYiBiaW8gYmxvZyBibWQgY2ltIGNuZyBjbnQgY29tIGNvb3AgZWNuIGVkdSBlbmcgZXNwIGV0YyBldGkgZmFyIGZsb2cgZm0gZm5kIGZvdCBmc3QgZzEyIGdnZiBnb3YgaW1iIGluZCBpbmYgam9yIGp1cyBsZWwgbWF0IG1lZCBtaWwgbXVzIG5ldCBub20gbm90IG50ciBvZG8gb3JnIHBwZyBwcm8gcHNjIHBzaSBxc2wgcmVjIHNsZyBzcnYgdG1wIHRyZCB0dXIgdHYgdmV0IHZsb2cgd2lraSB6bGcgIixiczoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixiejoiIGR1IGV0IG9tIG92IHJnICIsY2E6IiBhYiBiYyBtYiBuYiBuZiBubCBucyBudCBudSBvbiBwZSBxYyBzayB5ayAiLGNrOiIgYml6IGNvIGVkdSBnZW4gZ292IGluZm8gbmV0IG9yZyAiLGNuOiIgYWMgYWggYmogY29tIGNxIGVkdSBmaiBnZCBnb3YgZ3MgZ3ggZ3ogaGEgaGIgaGUgaGkgaGwgaG4gamwganMganggbG4gbWlsIG5ldCBubSBueCBvcmcgcWggc2Mgc2Qgc2ggc24gc3ggdGogdHcgeGogeHogeW4gemogIixjbzoiIGNvbSBlZHUgZ292IG1pbCBuZXQgbm9tIG9yZyAiLGNyOiIgYWMgYyBjbyBlZCBmaSBnbyBvciBzYSAiLGN5OiIgYWMgYml6IGNvbSBla2xvZ2VzIGdvdiBsdGQgbmFtZSBuZXQgb3JnIHBhcmxpYW1lbnQgcHJlc3MgcHJvIHRtICIsZG86IiBhcnQgY29tIGVkdSBnb2IgZ292IG1pbCBuZXQgb3JnIHNsZCB3ZWIgIixkejoiIGFydCBhc3NvIGNvbSBlZHUgZ292IG5ldCBvcmcgcG9sICIsZWM6IiBjb20gZWR1IGZpbiBnb3YgaW5mbyBtZWQgbWlsIG5ldCBvcmcgcHJvICIsZWc6IiBjb20gZWR1IGV1biBnb3YgbWlsIG5hbWUgbmV0IG9yZyBzY2kgIixlcjoiIGNvbSBlZHUgZ292IGluZCBtaWwgbmV0IG9yZyByb2NoZXN0IHcgIixlczoiIGNvbSBlZHUgZ29iIG5vbSBvcmcgIixldDoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5hbWUgbmV0IG9yZyAiLGZqOiIgYWMgYml6IGNvbSBpbmZvIG1pbCBuYW1lIG5ldCBvcmcgcHJvICIsZms6IiBhYyBjbyBnb3YgbmV0IG5vbSBvcmcgIixmcjoiIGFzc28gY29tIGYgZ291diBub20gcHJkIHByZXNzZSB0bSAiLGdnOiIgY28gbmV0IG9yZyAiLGdoOiIgY29tIGVkdSBnb3YgbWlsIG9yZyAiLGduOiIgYWMgY29tIGdvdiBuZXQgb3JnICIsZ3I6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGd0OiIgY29tIGVkdSBnb2IgaW5kIG1pbCBuZXQgb3JnICIsZ3U6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsaGs6IiBjb20gZWR1IGdvdiBpZHYgbmV0IG9yZyAiLGh1OiIgMjAwMCBhZ3JhciBib2x0IGNhc2lubyBjaXR5IGNvIGVyb3RpY2EgZXJvdGlrYSBmaWxtIGZvcnVtIGdhbWVzIGhvdGVsIGluZm8gaW5nYXRsYW4gam9nYXN6IGtvbnl2ZWxvIGxha2FzIG1lZGlhIG5ld3Mgb3JnIHByaXYgcmVrbGFtIHNleCBzaG9wIHNwb3J0IHN1bGkgc3pleCB0bSB0b3pzZGUgdXRhemFzIHZpZGVvICIsaWQ6IiBhYyBjbyBnbyBtaWwgbmV0IG9yIHNjaCB3ZWIgIixpbDoiIGFjIGNvIGdvdiBpZGYgazEyIG11bmkgbmV0IG9yZyAiLGluOiIgYWMgY28gZWR1IGVybmV0IGZpcm0gZ2VuIGdvdiBpIGluZCBtaWwgbmV0IG5pYyBvcmcgcmVzICIsaXE6IiBjb20gZWR1IGdvdiBpIG1pbCBuZXQgb3JnICIsaXI6IiBhYyBjbyBkbnNzZWMgZ292IGkgaWQgbmV0IG9yZyBzY2ggIixpdDoiIGVkdSBnb3YgIixqZToiIGNvIG5ldCBvcmcgIixqbzoiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsanA6IiBhYyBhZCBjbyBlZCBnbyBnciBsZyBuZSBvciAiLGtlOiIgYWMgY28gZ28gaW5mbyBtZSBtb2JpIG5lIG9yIHNjICIsa2g6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBwZXIgIixraToiIGJpeiBjb20gZGUgZWR1IGdvdiBpbmZvIG1vYiBuZXQgb3JnIHRlbCAiLGttOiIgYXNzbyBjb20gY29vcCBlZHUgZ291diBrIG1lZGVjaW4gbWlsIG5vbSBub3RhaXJlcyBwaGFybWFjaWVucyBwcmVzc2UgdG0gdmV0ZXJpbmFpcmUgIixrbjoiIGVkdSBnb3YgbmV0IG9yZyAiLGtyOiIgYWMgYnVzYW4gY2h1bmdidWsgY2h1bmduYW0gY28gZGFlZ3UgZGFlamVvbiBlcyBnYW5nd29uIGdvIGd3YW5nanUgZ3llb25nYnVrIGd5ZW9uZ2dpIGd5ZW9uZ25hbSBocyBpbmNoZW9uIGplanUgamVvbmJ1ayBqZW9ubmFtIGsga2cgbWlsIG1zIG5lIG9yIHBlIHJlIHNjIHNlb3VsIHVsc2FuICIsa3c6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3k6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3o6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGxiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGxrOiIgYXNzbiBjb20gZWR1IGdvdiBncnAgaG90ZWwgaW50IGx0ZCBuZXQgbmdvIG9yZyBzY2ggc29jIHdlYiAiLGxyOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGx2OiIgYXNuIGNvbSBjb25mIGVkdSBnb3YgaWQgbWlsIG5ldCBvcmcgIixseToiIGNvbSBlZHUgZ292IGlkIG1lZCBuZXQgb3JnIHBsYyBzY2ggIixtYToiIGFjIGNvIGdvdiBtIG5ldCBvcmcgcHJlc3MgIixtYzoiIGFzc28gdG0gIixtZToiIGFjIGNvIGVkdSBnb3YgaXRzIG5ldCBvcmcgcHJpdiAiLG1nOiIgY29tIGVkdSBnb3YgbWlsIG5vbSBvcmcgcHJkIHRtICIsbWs6IiBjb20gZWR1IGdvdiBpbmYgbmFtZSBuZXQgb3JnIHBybyAiLG1sOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwcmVzc2UgIixtbjoiIGVkdSBnb3Ygb3JnICIsbW86IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXQ6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXY6IiBhZXJvIGJpeiBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IG1pbCBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyAiLG13OiIgYWMgY28gY29tIGNvb3AgZWR1IGdvdiBpbnQgbXVzZXVtIG5ldCBvcmcgIixteDoiIGNvbSBlZHUgZ29iIG5ldCBvcmcgIixteToiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsbmY6IiBhcnRzIGNvbSBmaXJtIGluZm8gbmV0IG90aGVyIHBlciByZWMgc3RvcmUgd2ViICIsbmc6IiBiaXogY29tIGVkdSBnb3YgbWlsIG1vYmkgbmFtZSBuZXQgb3JnIHNjaCAiLG5pOiIgYWMgY28gY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnICIsbnA6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLG5yOiIgYml6IGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLG9tOiIgYWMgYml6IGNvIGNvbSBlZHUgZ292IG1lZCBtaWwgbXVzZXVtIG5ldCBvcmcgcHJvIHNjaCAiLHBlOiIgY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnIHNsZCAiLHBoOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG5nbyBvcmcgIixwazoiIGJpeiBjb20gZWR1IGZhbSBnb2IgZ29rIGdvbiBnb3AgZ29zIGdvdiBuZXQgb3JnIHdlYiAiLHBsOiIgYXJ0IGJpYWx5c3RvayBiaXogY29tIGVkdSBnZGEgZ2RhbnNrIGdvcnpvdyBnb3YgaW5mbyBrYXRvd2ljZSBrcmFrb3cgbG9keiBsdWJsaW4gbWlsIG5ldCBuZ28gb2xzenR5biBvcmcgcG96bmFuIHB3ciByYWRvbSBzbHVwc2sgc3pjemVjaW4gdG9ydW4gd2Fyc3phd2Egd2F3IHdyb2Mgd3JvY2xhdyB6Z29yYSAiLHByOiIgYWMgYml6IGNvbSBlZHUgZXN0IGdvdiBpbmZvIGlzbGEgbmFtZSBuZXQgb3JnIHBybyBwcm9mICIscHM6IiBjb20gZWR1IGdvdiBuZXQgb3JnIHBsbyBzZWMgIixwdzoiIGJlbGF1IGNvIGVkIGdvIG5lIG9yICIscm86IiBhcnRzIGNvbSBmaXJtIGluZm8gbm9tIG50IG9yZyByZWMgc3RvcmUgdG0gd3d3ICIscnM6IiBhYyBjbyBlZHUgZ292IGluIG9yZyAiLHNiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNjOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNoOiIgY28gY29tIGVkdSBnb3YgbmV0IG5vbSBvcmcgIixzbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzdDoiIGNvIGNvbSBjb25zdWxhZG8gZWR1IGVtYmFpeGFkYSBnb3YgbWlsIG5ldCBvcmcgcHJpbmNpcGUgc2FvdG9tZSBzdG9yZSAiLHN2OiIgY29tIGVkdSBnb2Igb3JnIHJlZCAiLHN6OiIgYWMgY28gb3JnICIsdHI6IiBhdiBiYnMgYmVsIGJpeiBjb20gZHIgZWR1IGdlbiBnb3YgaW5mbyBrMTIgbmFtZSBuZXQgb3JnIHBvbCB0ZWwgdHNrIHR2IHdlYiAiLHR0OiIgYWVybyBiaXogY2F0IGNvIGNvbSBjb29wIGVkdSBnb3YgaW5mbyBpbnQgam9icyBtaWwgbW9iaSBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyB0ZWwgdHJhdmVsICIsdHc6IiBjbHViIGNvbSBlYml6IGVkdSBnYW1lIGdvdiBpZHYgbWlsIG5ldCBvcmcgIixtdToiIGFjIGNvIGNvbSBnb3YgbmV0IG9yIG9yZyAiLG16OiIgYWMgY28gZWR1IGdvdiBvcmcgIixuYToiIGNvIGNvbSAiLG56OiIgYWMgY28gY3JpIGdlZWsgZ2VuIGdvdnQgaGVhbHRoIGl3aSBtYW9yaSBtaWwgbmV0IG9yZyBwYXJsaWFtZW50IHNjaG9vbCAiLHBhOiIgYWJvIGFjIGNvbSBlZHUgZ29iIGluZyBtZWQgbmV0IG5vbSBvcmcgc2xkICIscHQ6IiBjb20gZWR1IGdvdiBpbnQgbmV0IG5vbWUgb3JnIHB1YmwgIixweToiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIscWE6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHJlOiIgYXNzbyBjb20gbm9tICIscnU6IiBhYyBhZHlnZXlhIGFsdGFpIGFtdXIgYXJraGFuZ2Vsc2sgYXN0cmFraGFuIGJhc2hraXJpYSBiZWxnb3JvZCBiaXIgYnJ5YW5zayBidXJ5YXRpYSBjYmcgY2hlbCBjaGVseWFiaW5zayBjaGl0YSBjaHVrb3RrYSBjaHV2YXNoaWEgY29tIGRhZ2VzdGFuIGUtYnVyZyBlZHUgZ292IGdyb3pueSBpbnQgaXJrdXRzayBpdmFub3ZvIGl6aGV2c2sgamFyIGpvc2hrYXItb2xhIGthbG15a2lhIGthbHVnYSBrYW1jaGF0a2Ega2FyZWxpYSBrYXphbiBrY2hyIGtlbWVyb3ZvIGtoYWJhcm92c2sga2hha2Fzc2lhIGtodiBraXJvdiBrb2VuaWcga29taSBrb3N0cm9tYSBrcmFub3lhcnNrIGt1YmFuIGt1cmdhbiBrdXJzayBsaXBldHNrIG1hZ2FkYW4gbWFyaSBtYXJpLWVsIG1hcmluZSBtaWwgbW9yZG92aWEgbW9zcmVnIG1zayBtdXJtYW5zayBuYWxjaGlrIG5ldCBubm92IG5vdiBub3Zvc2liaXJzayBuc2sgb21zayBvcmVuYnVyZyBvcmcgb3J5b2wgcGVuemEgcGVybSBwcCBwc2tvdiBwdHogcm5kIHJ5YXphbiBzYWtoYWxpbiBzYW1hcmEgc2FyYXRvdiBzaW1iaXJzayBzbW9sZW5zayBzcGIgc3RhdnJvcG9sIHN0diBzdXJndXQgdGFtYm92IHRhdGFyc3RhbiB0b20gdG9tc2sgdHNhcml0c3luIHRzayB0dWxhIHR1dmEgdHZlciB0eXVtZW4gdWRtIHVkbXVydGlhIHVsYW4tdWRlIHZsYWRpa2F2a2F6IHZsYWRpbWlyIHZsYWRpdm9zdG9rIHZvbGdvZ3JhZCB2b2xvZ2RhIHZvcm9uZXpoIHZybiB2eWF0a2EgeWFrdXRpYSB5YW1hbCB5ZWthdGVyaW5idXJnIHl1emhuby1zYWtoYWxpbnNrICIscnc6IiBhYyBjbyBjb20gZWR1IGdvdXYgZ292IGludCBtaWwgbmV0ICIsc2E6IiBjb20gZWR1IGdvdiBtZWQgbmV0IG9yZyBwdWIgc2NoICIsc2Q6IiBjb20gZWR1IGdvdiBpbmZvIG1lZCBuZXQgb3JnIHR2ICIsc2U6IiBhIGFjIGIgYmQgYyBkIGUgZiBnIGggaSBrIGwgbSBuIG8gb3JnIHAgcGFydGkgcHAgcHJlc3MgciBzIHQgdG0gdSB3IHggeSB6ICIsc2c6IiBjb20gZWR1IGdvdiBpZG4gbmV0IG9yZyBwZXIgIixzbjoiIGFydCBjb20gZWR1IGdvdXYgb3JnIHBlcnNvIHVuaXYgIixzeToiIGNvbSBlZHUgZ292IG1pbCBuZXQgbmV3cyBvcmcgIix0aDoiIGFjIGNvIGdvIGluIG1pIG5ldCBvciAiLHRqOiIgYWMgYml6IGNvIGNvbSBlZHUgZ28gZ292IGluZm8gaW50IG1pbCBuYW1lIG5ldCBuaWMgb3JnIHRlc3Qgd2ViICIsdG46IiBhZ3JpbmV0IGNvbSBkZWZlbnNlIGVkdW5ldCBlbnMgZmluIGdvdiBpbmQgaW5mbyBpbnRsIG1pbmNvbSBuYXQgbmV0IG9yZyBwZXJzbyBybnJ0IHJucyBybnUgdG91cmlzbSAiLHR6OiIgYWMgY28gZ28gbmUgb3IgIix1YToiIGJpeiBjaGVya2Fzc3kgY2hlcm5pZ292IGNoZXJub3Z0c3kgY2sgY24gY28gY29tIGNyaW1lYSBjdiBkbiBkbmVwcm9wZXRyb3ZzayBkb25ldHNrIGRwIGVkdSBnb3YgaWYgaW4gaXZhbm8tZnJhbmtpdnNrIGtoIGtoYXJrb3Yga2hlcnNvbiBraG1lbG5pdHNraXkga2lldiBraXJvdm9ncmFkIGttIGtyIGtzIGt2IGxnIGx1Z2Fuc2sgbHV0c2sgbHZpdiBtZSBtayBuZXQgbmlrb2xhZXYgb2Qgb2Rlc3NhIG9yZyBwbCBwb2x0YXZhIHBwIHJvdm5vIHJ2IHNlYmFzdG9wb2wgc3VteSB0ZSB0ZXJub3BpbCB1emhnb3JvZCB2aW5uaWNhIHZuIHphcG9yaXpoemhlIHpoaXRvbWlyIHpwIHp0ICIsdWc6IiBhYyBjbyBnbyBuZSBvciBvcmcgc2MgIix1azoiIGFjIGJsIGJyaXRpc2gtbGlicmFyeSBjbyBjeW0gZ292IGdvdnQgaWNuZXQgamV0IGxlYSBsdGQgbWUgbWlsIG1vZCBuYXRpb25hbC1saWJyYXJ5LXNjb3RsYW5kIG5lbCBuZXQgbmhzIG5pYyBubHMgb3JnIG9yZ24gcGFybGlhbWVudCBwbGMgcG9saWNlIHNjaCBzY290IHNvYyAiLHVzOiIgZG5pIGZlZCBpc2Ega2lkcyBuc24gIix1eToiIGNvbSBlZHUgZ3ViIG1pbCBuZXQgb3JnICIsdmU6IiBjbyBjb20gZWR1IGdvYiBpbmZvIG1pbCBuZXQgb3JnIHdlYiAiLHZpOiIgY28gY29tIGsxMiBuZXQgb3JnICIsdm46IiBhYyBiaXogY29tIGVkdSBnb3YgaGVhbHRoIGluZm8gaW50IG5hbWUgbmV0IG9yZyBwcm8gIix5ZToiIGNvIGNvbSBnb3YgbHRkIG1lIG5ldCBvcmcgcGxjICIseXU6IiBhYyBjbyBlZHUgZ292IG9yZyAiLHphOiIgYWMgYWdyaWMgYWx0IGJvdXJzZSBjaXR5IGNvIGN5YmVybmV0IGRiIGVkdSBnb3YgZ3JvbmRhciBpYWNjZXNzIGltdCBpbmNhIGxhbmRlc2lnbiBsYXcgbWlsIG5ldCBuZ28gbmlzIG5vbSBvbGl2ZXR0aSBvcmcgcGl4IHNjaG9vbCB0bSB3ZWIgIix6bToiIGFjIGNvIGNvbSBlZHUgZ292IG5ldCBvcmcgc2NoICIsY29tOiJhciBiciBjbiBkZSBldSBnYiBnciBodSBqcG4ga3Igbm8gcWMgcnUgc2Egc2UgdWsgdXMgdXkgemEgIixuZXQ6ImdiIGpwIHNlIHVrICIsb3JnOiJhZSIsZGU6ImNvbSAifSxoYXM6ZnVuY3Rpb24obyl7dmFyIGE9by5sYXN0SW5kZXhPZigiLiIpO2lmKGE8PTB8fGE+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIsYS0xKTtpZihyPD0wfHxyPj1hLTEpcmV0dXJuITE7dmFyIGk9bi5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKHIrMSxhKSsiICIpPj0wOiExfSxpczpmdW5jdGlvbihvKXt2YXIgYT1vLmxhc3RJbmRleE9mKCIuIik7aWYoYTw9MHx8YT49by5sZW5ndGgtMSlyZXR1cm4hMTt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIixhLTEpO2lmKHI+PTApcmV0dXJuITE7dmFyIGk9bi5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKDAsYSkrIiAiKT49MDohMX0sZ2V0OmZ1bmN0aW9uKG8pe3ZhciBhPW8ubGFzdEluZGV4T2YoIi4iKTtpZihhPD0wfHxhPj1vLmxlbmd0aC0xKXJldHVybiBudWxsO3ZhciByPW8ubGFzdEluZGV4T2YoIi4iLGEtMSk7aWYocjw9MHx8cj49YS0xKXJldHVybiBudWxsO3ZhciBpPW4ubGlzdFtvLnNsaWNlKGErMSldO3JldHVybiFpfHxpLmluZGV4T2YoIiAiK28uc2xpY2UocisxLGEpKyIgIik8MD9udWxsOm8uc2xpY2UocisxKX0sbm9Db25mbGljdDpmdW5jdGlvbigpe3JldHVybiBlLlNlY29uZExldmVsRG9tYWlucz09PXRoaXMmJihlLlNlY29uZExldmVsRG9tYWlucz10KSx0aGlzfX07cmV0dXJuIG59KX0pO3ZhciB1aT1lbygoUDEsZGwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICoKICogVmVyc2lvbjogMS4xOS4xMQogKgogKiBBdXRob3I6IFJvZG5leSBSZWhtCiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzLwogKgogKiBMaWNlbnNlZCB1bmRlcgogKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UKICoKICovKGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3R5cGVvZiBkbD09Im9iamVjdCImJmRsLmV4cG9ydHM/ZGwuZXhwb3J0cz10KFMxKCksTTEoKSxJMSgpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbIi4vcHVueWNvZGUiLCIuL0lQdjYiLCIuL1NlY29uZExldmVsRG9tYWlucyJdLHQpOmUuVVJJPXQoZS5wdW55Y29kZSxlLklQdjYsZS5TZWNvbmRMZXZlbERvbWFpbnMsZSl9KShQMSxmdW5jdGlvbihlLHQsbixvKXsidXNlIHN0cmljdCI7dmFyIGE9byYmby5VUkk7ZnVuY3Rpb24gcihBLHgpe3ZhciBNPWFyZ3VtZW50cy5sZW5ndGg+PTEsRj1hcmd1bWVudHMubGVuZ3RoPj0yO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBNP0Y/bmV3IHIoQSx4KTpuZXcgcihBKTpuZXcgcjtpZihBPT09dm9pZCAwKXtpZihNKXRocm93IG5ldyBUeXBlRXJyb3IoInVuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7dHlwZW9mIGxvY2F0aW9uPCJ1Ij9BPWxvY2F0aW9uLmhyZWYrIiI6QT0iIn1pZihBPT09bnVsbCYmTSl0aHJvdyBuZXcgVHlwZUVycm9yKCJudWxsIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBVUkkiKTtyZXR1cm4gdGhpcy5ocmVmKEEpLHghPT12b2lkIDA/dGhpcy5hYnNvbHV0ZVRvKHgpOnRoaXN9ZnVuY3Rpb24gaShBKXtyZXR1cm4vXlswLTldKyQvLnRlc3QoQSl9ci52ZXJzaW9uPSIxLjE5LjExIjt2YXIgZj1yLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYyhBKXtyZXR1cm4gQS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKX1mdW5jdGlvbiB1KEEpe3JldHVybiBBPT09dm9pZCAwPyJVbmRlZmluZWQiOlN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQSkpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGwoQSl7cmV0dXJuIHUoQSk9PT0iQXJyYXkifWZ1bmN0aW9uIGgoQSx4KXt2YXIgTT17fSxGLFU7aWYodSh4KT09PSJSZWdFeHAiKU09bnVsbDtlbHNlIGlmKGwoeCkpZm9yKEY9MCxVPXgubGVuZ3RoO0Y8VTtGKyspTVt4W0ZdXT0hMDtlbHNlIE1beF09ITA7Zm9yKEY9MCxVPUEubGVuZ3RoO0Y8VTtGKyspe3ZhciB6PU0mJk1bQVtGXV0hPT12b2lkIDB8fCFNJiZ4LnRlc3QoQVtGXSk7eiYmKEEuc3BsaWNlKEYsMSksVS0tLEYtLSl9cmV0dXJuIEF9ZnVuY3Rpb24gbShBLHgpe3ZhciBNLEY7aWYobCh4KSl7Zm9yKE09MCxGPXgubGVuZ3RoO008RjtNKyspaWYoIW0oQSx4W01dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgVT11KHgpO2ZvcihNPTAsRj1BLmxlbmd0aDtNPEY7TSsrKWlmKFU9PT0iUmVnRXhwIil7aWYodHlwZW9mIEFbTV09PSJzdHJpbmciJiZBW01dLm1hdGNoKHgpKXJldHVybiEwfWVsc2UgaWYoQVtNXT09PXgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYihBLHgpe2lmKCFsKEEpfHwhbCh4KXx8QS5sZW5ndGghPT14Lmxlbmd0aClyZXR1cm4hMTtBLnNvcnQoKSx4LnNvcnQoKTtmb3IodmFyIE09MCxGPUEubGVuZ3RoO008RjtNKyspaWYoQVtNXSE9PXhbTV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChBKXt2YXIgeD0vXlwvK3xcLyskL2c7cmV0dXJuIEEucmVwbGFjZSh4LCIiKX1yLl9wYXJ0cz1mdW5jdGlvbigpe3JldHVybntwcm90b2NvbDpudWxsLHVzZXJuYW1lOm51bGwscGFzc3dvcmQ6bnVsbCxob3N0bmFtZTpudWxsLHVybjpudWxsLHBvcnQ6bnVsbCxwYXRoOm51bGwscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsLHByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lLGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczpyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxlc2NhcGVRdWVyeVNwYWNlOnIuZXNjYXBlUXVlcnlTcGFjZX19LHIucHJldmVudEludmFsaWRIb3N0bmFtZT0hMSxyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz0hMSxyLmVzY2FwZVF1ZXJ5U3BhY2U9ITAsci5wcm90b2NvbF9leHByZXNzaW9uPS9eW2Etel1bYS16MC05ListXSokL2ksci5pZG5fZXhwcmVzc2lvbj0vW15hLXowLTlcLl8tXS9pLHIucHVueWNvZGVfZXhwcmVzc2lvbj0vKHhuLS0pL2ksci5pcDRfZXhwcmVzc2lvbj0vXlxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30kLyxyLmlwNl9leHByZXNzaW9uPS9eXHMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpKCUuKyk/XHMqJC8sci5maW5kX3VyaV9leHByZXNzaW9uPS9cYigoPzpbYS16XVtcdy1dKzooPzpcL3sxLDN9fFthLXowLTklXSl8d3d3XGR7MCwzfVsuXXxbYS16MC05LlwtXStbLl1bYS16XXsyLDR9XC8pKD86W15ccygpPD5dK3xcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpKSsoPzpcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpfFteXHNgISgpXFtcXXt9OzonIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZyxyLmZpbmRVcmk9e3N0YXJ0Oi9cYig/OihbYS16XVthLXowLTkuKy1dKjpcL1wvKXx3d3dcLikvZ2ksZW5kOi9bXHNcclxuXXwkLyx0cmltOi9bYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJ7igJjigJldKyQvLHBhcmVuczovKFwoW15cKV0qXCl8XFtbXlxdXSpcXXxce1tefV0qXH18PFtePl0qPikvZ30sci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbj0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLHIuYXNjaWlfdGFiX3doaXRlc3BhY2U9L1tcdTAwMDlcdTAwMEFcdTAwMERdKy9nLHIuZGVmYXVsdFBvcnRzPXtodHRwOiI4MCIsaHR0cHM6IjQ0MyIsZnRwOiIyMSIsZ29waGVyOiI3MCIsd3M6IjgwIix3c3M6IjQ0MyJ9LHIuaG9zdFByb3RvY29scz1bImh0dHAiLCJodHRwcyJdLHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzPS9bXmEtekEtWjAtOVwuXC06X10vLHIuZG9tQXR0cmlidXRlcz17YToiaHJlZiIsYmxvY2txdW90ZToiY2l0ZSIsbGluazoiaHJlZiIsYmFzZToiaHJlZiIsc2NyaXB0OiJzcmMiLGZvcm06ImFjdGlvbiIsaW1nOiJzcmMiLGFyZWE6ImhyZWYiLGlmcmFtZToic3JjIixlbWJlZDoic3JjIixzb3VyY2U6InNyYyIsdHJhY2s6InNyYyIsaW5wdXQ6InNyYyIsYXVkaW86InNyYyIsdmlkZW86InNyYyJ9LHIuZ2V0RG9tQXR0cmlidXRlPWZ1bmN0aW9uKEEpe2lmKCEoIUF8fCFBLm5vZGVOYW1lKSl7dmFyIHg9QS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCEoeD09PSJpbnB1dCImJkEudHlwZSE9PSJpbWFnZSIpKXJldHVybiByLmRvbUF0dHJpYnV0ZXNbeF19fTtmdW5jdGlvbiB5KEEpe3JldHVybiBlc2NhcGUoQSl9ZnVuY3Rpb24gRShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpKl0vZyx5KS5yZXBsYWNlKC9cKi9nLCIlMkEiKX1yLmVuY29kZT1FLHIuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudCxyLmlzbzg4NTk9ZnVuY3Rpb24oKXtyLmVuY29kZT1lc2NhcGUsci5kZWNvZGU9dW5lc2NhcGV9LHIudW5pY29kZT1mdW5jdGlvbigpe3IuZW5jb2RlPUUsci5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50fSxyLmNoYXJhY3RlcnM9e3BhdGhuYW1lOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjR8MjZ8MkJ8MkN8M0J8M0R8M0F8NDApL2lnLG1hcDp7IiUyNCI6IiQiLCIlMjYiOiImIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSIsIiUzQSI6IjoiLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jXS9nLG1hcDp7Ii8iOiIlMkYiLCI/IjoiJTNGIiwiIyI6IiUyMyJ9fX0scmVzZXJ2ZWQ6e2VuY29kZTp7ZXhwcmVzc2lvbjovJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsbWFwOnsiJTNBIjoiOiIsIiUyRiI6Ii8iLCIlM0YiOiI/IiwiJTIzIjoiIyIsIiU1QiI6IlsiLCIlNUQiOiJdIiwiJTQwIjoiQCIsIiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9In19fSx1cm5wYXRoOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLG1hcDp7IiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI3IjoiJyIsIiUyOCI6IigiLCIlMjkiOiIpIiwiJTJBIjoiKiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jOl0vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMiLCI6IjoiJTNBIn19fX0sci5lbmNvZGVRdWVyeT1mdW5jdGlvbihBLHgpe3ZhciBNPXIuZW5jb2RlKEErIiIpO3JldHVybiB4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpLHg/TS5yZXBsYWNlKC8lMjAvZywiKyIpOk19LHIuZGVjb2RlUXVlcnk9ZnVuY3Rpb24oQSx4KXtBKz0iIix4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpO3RyeXtyZXR1cm4gci5kZWNvZGUoeD9BLnJlcGxhY2UoL1wrL2csIiUyMCIpOkEpfWNhdGNoe3JldHVybiBBfX07dmFyIF89e2VuY29kZToiZW5jb2RlIixkZWNvZGU6ImRlY29kZSJ9LFQsdz1mdW5jdGlvbihBLHgpe3JldHVybiBmdW5jdGlvbihNKXt0cnl7cmV0dXJuIHJbeF0oTSsiIikucmVwbGFjZShyLmNoYXJhY3RlcnNbQV1beF0uZXhwcmVzc2lvbixmdW5jdGlvbihGKXtyZXR1cm4gci5jaGFyYWN0ZXJzW0FdW3hdLm1hcFtGXX0pfWNhdGNoe3JldHVybiBNfX19O2ZvcihUIGluIF8pcltUKyJQYXRoU2VnbWVudCJdPXcoInBhdGhuYW1lIixfW1RdKSxyW1QrIlVyblBhdGhTZWdtZW50Il09dygidXJucGF0aCIsX1tUXSk7dmFyIFI9ZnVuY3Rpb24oQSx4LE0pe3JldHVybiBmdW5jdGlvbihGKXt2YXIgVTtNP1U9ZnVuY3Rpb24oSCl7cmV0dXJuIHJbeF0ocltNXShIKSl9OlU9clt4XTtmb3IodmFyIHo9KEYrIiIpLnNwbGl0KEEpLEQ9MCxHPXoubGVuZ3RoO0Q8RztEKyspeltEXT1VKHpbRF0pO3JldHVybiB6LmpvaW4oQSl9fTtyLmRlY29kZVBhdGg9UigiLyIsImRlY29kZVBhdGhTZWdtZW50Iiksci5kZWNvZGVVcm5QYXRoPVIoIjoiLCJkZWNvZGVVcm5QYXRoU2VnbWVudCIpLHIucmVjb2RlUGF0aD1SKCIvIiwiZW5jb2RlUGF0aFNlZ21lbnQiLCJkZWNvZGUiKSxyLnJlY29kZVVyblBhdGg9UigiOiIsImVuY29kZVVyblBhdGhTZWdtZW50IiwiZGVjb2RlIiksci5lbmNvZGVSZXNlcnZlZD13KCJyZXNlcnZlZCIsImVuY29kZSIpLHIucGFyc2U9ZnVuY3Rpb24oQSx4KXt2YXIgTTtyZXR1cm4geHx8KHg9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSksQT1BLnJlcGxhY2Uoci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbiwiIiksQT1BLnJlcGxhY2Uoci5hc2NpaV90YWJfd2hpdGVzcGFjZSwiIiksTT1BLmluZGV4T2YoIiMiKSxNPi0xJiYoeC5mcmFnbWVudD1BLnN1YnN0cmluZyhNKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxNKSksTT1BLmluZGV4T2YoIj8iKSxNPi0xJiYoeC5xdWVyeT1BLnN1YnN0cmluZyhNKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxNKSksQT1BLnJlcGxhY2UoL14oaHR0cHM/fGZ0cHx3c3M/KT86K1svXFxdKi9pLCIkMTovLyIpLEE9QS5yZXBsYWNlKC9eWy9cXF17Mix9L2ksIi8vIiksQS5zdWJzdHJpbmcoMCwyKT09PSIvLyI/KHgucHJvdG9jb2w9bnVsbCxBPUEuc3Vic3RyaW5nKDIpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooTT1BLmluZGV4T2YoIjoiKSxNPi0xJiYoeC5wcm90b2NvbD1BLnN1YnN0cmluZygwLE0pfHxudWxsLHgucHJvdG9jb2wmJiF4LnByb3RvY29sLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbik/eC5wcm90b2NvbD12b2lkIDA6QS5zdWJzdHJpbmcoTSsxLE0rMykucmVwbGFjZSgvXFwvZywiLyIpPT09Ii8vIj8oQT1BLnN1YnN0cmluZyhNKzMpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooQT1BLnN1YnN0cmluZyhNKzEpLHgudXJuPSEwKSkpLHgucGF0aD1BLHh9LHIucGFyc2VIb3N0PWZ1bmN0aW9uKEEseCl7QXx8KEE9IiIpLEE9QS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIE09QS5pbmRleE9mKCIvIiksRixVO2lmKE09PT0tMSYmKE09QS5sZW5ndGgpLEEuY2hhckF0KDApPT09IlsiKUY9QS5pbmRleE9mKCJdIikseC5ob3N0bmFtZT1BLnN1YnN0cmluZygxLEYpfHxudWxsLHgucG9ydD1BLnN1YnN0cmluZyhGKzIsTSl8fG51bGwseC5wb3J0PT09Ii8iJiYoeC5wb3J0PW51bGwpO2Vsc2V7dmFyIHo9QS5pbmRleE9mKCI6IiksRD1BLmluZGV4T2YoIi8iKSxHPUEuaW5kZXhPZigiOiIseisxKTtHIT09LTEmJihEPT09LTF8fEc8RCk/KHguaG9zdG5hbWU9QS5zdWJzdHJpbmcoMCxNKXx8bnVsbCx4LnBvcnQ9bnVsbCk6KFU9QS5zdWJzdHJpbmcoMCxNKS5zcGxpdCgiOiIpLHguaG9zdG5hbWU9VVswXXx8bnVsbCx4LnBvcnQ9VVsxXXx8bnVsbCl9cmV0dXJuIHguaG9zdG5hbWUmJkEuc3Vic3RyaW5nKE0pLmNoYXJBdCgwKSE9PSIvIiYmKE0rKyxBPSIvIitBKSx4LnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZSh4Lmhvc3RuYW1lLHgucHJvdG9jb2wpLHgucG9ydCYmci5lbnN1cmVWYWxpZFBvcnQoeC5wb3J0KSxBLnN1YnN0cmluZyhNKXx8Ii8ifSxyLnBhcnNlQXV0aG9yaXR5PWZ1bmN0aW9uKEEseCl7cmV0dXJuIEE9ci5wYXJzZVVzZXJpbmZvKEEseCksci5wYXJzZUhvc3QoQSx4KX0sci5wYXJzZVVzZXJpbmZvPWZ1bmN0aW9uKEEseCl7dmFyIE09QSxGPUEuaW5kZXhPZigiXFwiKTtGIT09LTEmJihBPUEucmVwbGFjZSgvXFwvZywiLyIpKTt2YXIgVT1BLmluZGV4T2YoIi8iKSx6PUEubGFzdEluZGV4T2YoIkAiLFU+LTE/VTpBLmxlbmd0aC0xKSxEO3JldHVybiB6Pi0xJiYoVT09PS0xfHx6PFUpPyhEPUEuc3Vic3RyaW5nKDAseikuc3BsaXQoIjoiKSx4LnVzZXJuYW1lPURbMF0/ci5kZWNvZGUoRFswXSk6bnVsbCxELnNoaWZ0KCkseC5wYXNzd29yZD1EWzBdP3IuZGVjb2RlKEQuam9pbigiOiIpKTpudWxsLEE9TS5zdWJzdHJpbmcoeisxKSk6KHgudXNlcm5hbWU9bnVsbCx4LnBhc3N3b3JkPW51bGwpLEF9LHIucGFyc2VRdWVyeT1mdW5jdGlvbihBLHgpe2lmKCFBKXJldHVybnt9O2lmKEE9QS5yZXBsYWNlKC8mKy9nLCImIikucmVwbGFjZSgvXlw/KiYqfCYrJC9nLCIiKSwhQSlyZXR1cm57fTtmb3IodmFyIE09e30sRj1BLnNwbGl0KCImIiksVT1GLmxlbmd0aCx6LEQsRyxIPTA7SDxVO0grKyl6PUZbSF0uc3BsaXQoIj0iKSxEPXIuZGVjb2RlUXVlcnkoei5zaGlmdCgpLHgpLEc9ei5sZW5ndGg/ci5kZWNvZGVRdWVyeSh6LmpvaW4oIj0iKSx4KTpudWxsLEQhPT0iX19wcm90b19fIiYmKGQuY2FsbChNLEQpPygodHlwZW9mIE1bRF09PSJzdHJpbmcifHxNW0RdPT09bnVsbCkmJihNW0RdPVtNW0RdXSksTVtEXS5wdXNoKEcpKTpNW0RdPUcpO3JldHVybiBNfSxyLmJ1aWxkPWZ1bmN0aW9uKEEpe3ZhciB4PSIiLE09ITE7cmV0dXJuIEEucHJvdG9jb2wmJih4Kz1BLnByb3RvY29sKyI6IiksIUEudXJuJiYoeHx8QS5ob3N0bmFtZSkmJih4Kz0iLy8iLE09ITApLHgrPXIuYnVpbGRBdXRob3JpdHkoQSl8fCIiLHR5cGVvZiBBLnBhdGg9PSJzdHJpbmciJiYoQS5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmTSYmKHgrPSIvIikseCs9QS5wYXRoKSx0eXBlb2YgQS5xdWVyeT09InN0cmluZyImJkEucXVlcnkmJih4Kz0iPyIrQS5xdWVyeSksdHlwZW9mIEEuZnJhZ21lbnQ9PSJzdHJpbmciJiZBLmZyYWdtZW50JiYoeCs9IiMiK0EuZnJhZ21lbnQpLHh9LHIuYnVpbGRIb3N0PWZ1bmN0aW9uKEEpe3ZhciB4PSIiO2lmKEEuaG9zdG5hbWUpci5pcDZfZXhwcmVzc2lvbi50ZXN0KEEuaG9zdG5hbWUpP3grPSJbIitBLmhvc3RuYW1lKyJdIjp4Kz1BLmhvc3RuYW1lO2Vsc2UgcmV0dXJuIiI7cmV0dXJuIEEucG9ydCYmKHgrPSI6IitBLnBvcnQpLHh9LHIuYnVpbGRBdXRob3JpdHk9ZnVuY3Rpb24oQSl7cmV0dXJuIHIuYnVpbGRVc2VyaW5mbyhBKStyLmJ1aWxkSG9zdChBKX0sci5idWlsZFVzZXJpbmZvPWZ1bmN0aW9uKEEpe3ZhciB4PSIiO3JldHVybiBBLnVzZXJuYW1lJiYoeCs9ci5lbmNvZGUoQS51c2VybmFtZSkpLEEucGFzc3dvcmQmJih4Kz0iOiIrci5lbmNvZGUoQS5wYXNzd29yZCkpLHgmJih4Kz0iQCIpLHh9LHIuYnVpbGRRdWVyeT1mdW5jdGlvbihBLHgsTSl7dmFyIEY9IiIsVSx6LEQsRztmb3IoeiBpbiBBKWlmKHohPT0iX19wcm90b19fIiYmZC5jYWxsKEEseikpaWYobChBW3pdKSlmb3IoVT17fSxEPTAsRz1BW3pdLmxlbmd0aDtEPEc7RCsrKUFbel1bRF0hPT12b2lkIDAmJlVbQVt6XVtEXSsiIl09PT12b2lkIDAmJihGKz0iJiIrci5idWlsZFF1ZXJ5UGFyYW1ldGVyKHosQVt6XVtEXSxNKSx4IT09ITAmJihVW0Fbel1bRF0rIiJdPSEwKSk7ZWxzZSBBW3pdIT09dm9pZCAwJiYoRis9IiYiK3IuYnVpbGRRdWVyeVBhcmFtZXRlcih6LEFbel0sTSkpO3JldHVybiBGLnN1YnN0cmluZygxKX0sci5idWlsZFF1ZXJ5UGFyYW1ldGVyPWZ1bmN0aW9uKEEseCxNKXtyZXR1cm4gci5lbmNvZGVRdWVyeShBLE0pKyh4IT09bnVsbD8iPSIrci5lbmNvZGVRdWVyeSh4LE0pOiIiKX0sci5hZGRRdWVyeT1mdW5jdGlvbihBLHgsTSl7aWYodHlwZW9mIHg9PSJvYmplY3QiKWZvcih2YXIgRiBpbiB4KWQuY2FsbCh4LEYpJiZyLmFkZFF1ZXJ5KEEsRix4W0ZdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIil7aWYoQVt4XT09PXZvaWQgMCl7QVt4XT1NO3JldHVybn1lbHNlIHR5cGVvZiBBW3hdPT0ic3RyaW5nIiYmKEFbeF09W0FbeF1dKTtsKE0pfHwoTT1bTV0pLEFbeF09KEFbeF18fFtdKS5jb25jYXQoTSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnNldFF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXtpZih0eXBlb2YgeD09Im9iamVjdCIpZm9yKHZhciBGIGluIHgpZC5jYWxsKHgsRikmJnIuc2V0UXVlcnkoQSxGLHhbRl0pO2Vsc2UgaWYodHlwZW9mIHg9PSJzdHJpbmciKUFbeF09TT09PXZvaWQgMD9udWxsOk07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuc2V0UXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgRixVLHo7aWYobCh4KSlmb3IoRj0wLFU9eC5sZW5ndGg7RjxVO0YrKylBW3hbRl1dPXZvaWQgMDtlbHNlIGlmKHUoeCk9PT0iUmVnRXhwIilmb3IoeiBpbiBBKXgudGVzdCh6KSYmKEFbel09dm9pZCAwKTtlbHNlIGlmKHR5cGVvZiB4PT0ib2JqZWN0Iilmb3IoeiBpbiB4KWQuY2FsbCh4LHopJiZyLnJlbW92ZVF1ZXJ5KEEseix4W3pdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIilNIT09dm9pZCAwP3UoTSk9PT0iUmVnRXhwIj8hbChBW3hdKSYmTS50ZXN0KEFbeF0pP0FbeF09dm9pZCAwOkFbeF09aChBW3hdLE0pOkFbeF09PT1TdHJpbmcoTSkmJighbChNKXx8TS5sZW5ndGg9PT0xKT9BW3hdPXZvaWQgMDpsKEFbeF0pJiYoQVt4XT1oKEFbeF0sTSkpOkFbeF09dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnJlbW92ZVF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZywgUmVnRXhwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIiKX0sci5oYXNRdWVyeT1mdW5jdGlvbihBLHgsTSxGKXtzd2l0Y2godSh4KSl7Y2FzZSJTdHJpbmciOmJyZWFrO2Nhc2UiUmVnRXhwIjpmb3IodmFyIFUgaW4gQSlpZihkLmNhbGwoQSxVKSYmeC50ZXN0KFUpJiYoTT09PXZvaWQgMHx8ci5oYXNRdWVyeShBLFUsTSkpKXJldHVybiEwO3JldHVybiExO2Nhc2UiT2JqZWN0Ijpmb3IodmFyIHogaW4geClpZihkLmNhbGwoeCx6KSYmIXIuaGFzUXVlcnkoQSx6LHhbel0pKXJldHVybiExO3JldHVybiEwO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhIHN0cmluZywgcmVndWxhciBleHByZXNzaW9uIG9yIG9iamVjdCBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX1zd2l0Y2godShNKSl7Y2FzZSJVbmRlZmluZWQiOnJldHVybiB4IGluIEE7Y2FzZSJCb29sZWFuIjp2YXIgRD0hIShsKEFbeF0pP0FbeF0ubGVuZ3RoOkFbeF0pO3JldHVybiBNPT09RDtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4hIU0oQVt4XSx4LEEpO2Nhc2UiQXJyYXkiOmlmKCFsKEFbeF0pKXJldHVybiExO3ZhciBHPUY/bTpiO3JldHVybiBHKEFbeF0sTSk7Y2FzZSJSZWdFeHAiOnJldHVybiBsKEFbeF0pP0Y/bShBW3hdLE0pOiExOiEhKEFbeF0mJkFbeF0ubWF0Y2goTSkpO2Nhc2UiTnVtYmVyIjpNPVN0cmluZyhNKTtjYXNlIlN0cmluZyI6cmV0dXJuIGwoQVt4XSk/Rj9tKEFbeF0sTSk6ITE6QVt4XT09PU07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIHVuZGVmaW5lZCwgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIsIFJlZ0V4cCwgRnVuY3Rpb24gYXMgdGhlIHZhbHVlIHBhcmFtZXRlciIpfX0sci5qb2luUGF0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIEE9W10seD1bXSxNPTAsRj0wO0Y8YXJndW1lbnRzLmxlbmd0aDtGKyspe3ZhciBVPW5ldyByKGFyZ3VtZW50c1tGXSk7QS5wdXNoKFUpO2Zvcih2YXIgej1VLnNlZ21lbnQoKSxEPTA7RDx6Lmxlbmd0aDtEKyspdHlwZW9mIHpbRF09PSJzdHJpbmciJiZ4LnB1c2goeltEXSkseltEXSYmTSsrfWlmKCF4Lmxlbmd0aHx8IU0pcmV0dXJuIG5ldyByKCIiKTt2YXIgRz1uZXcgcigiIikuc2VnbWVudCh4KTtyZXR1cm4oQVswXS5wYXRoKCk9PT0iInx8QVswXS5wYXRoKCkuc2xpY2UoMCwxKT09PSIvIikmJkcucGF0aCgiLyIrRy5wYXRoKCkpLEcubm9ybWFsaXplKCl9LHIuY29tbW9uUGF0aD1mdW5jdGlvbihBLHgpe3ZhciBNPU1hdGgubWluKEEubGVuZ3RoLHgubGVuZ3RoKSxGO2ZvcihGPTA7RjxNO0YrKylpZihBLmNoYXJBdChGKSE9PXguY2hhckF0KEYpKXtGLS07YnJlYWt9cmV0dXJuIEY8MT9BLmNoYXJBdCgwKT09PXguY2hhckF0KDApJiZBLmNoYXJBdCgwKT09PSIvIj8iLyI6IiI6KChBLmNoYXJBdChGKSE9PSIvInx8eC5jaGFyQXQoRikhPT0iLyIpJiYoRj1BLnN1YnN0cmluZygwLEYpLmxhc3RJbmRleE9mKCIvIikpLEEuc3Vic3RyaW5nKDAsRisxKSl9LHIud2l0aGluU3RyaW5nPWZ1bmN0aW9uKEEseCxNKXtNfHwoTT17fSk7dmFyIEY9TS5zdGFydHx8ci5maW5kVXJpLnN0YXJ0LFU9TS5lbmR8fHIuZmluZFVyaS5lbmQsej1NLnRyaW18fHIuZmluZFVyaS50cmltLEQ9TS5wYXJlbnN8fHIuZmluZFVyaS5wYXJlbnMsRz0vW2EtejAtOS1dPVsiJ10/JC9pO2ZvcihGLmxhc3RJbmRleD0wOzspe3ZhciBIPUYuZXhlYyhBKTtpZighSClicmVhazt2YXIgTz1ILmluZGV4O2lmKE0uaWdub3JlSHRtbCl7dmFyIFo9QS5zbGljZShNYXRoLm1heChPLTMsMCksTyk7aWYoWiYmRy50ZXN0KFopKWNvbnRpbnVlfWZvcih2YXIgb2U9TytBLnNsaWNlKE8pLnNlYXJjaChVKSxjZT1BLnNsaWNlKE8sb2UpLGRlPS0xOzspe3ZhciBlZT1ELmV4ZWMoY2UpO2lmKCFlZSlicmVhazt2YXIgbWU9ZWUuaW5kZXgrZWVbMF0ubGVuZ3RoO2RlPU1hdGgubWF4KGRlLG1lKX1pZihkZT4tMT9jZT1jZS5zbGljZSgwLGRlKStjZS5zbGljZShkZSkucmVwbGFjZSh6LCIiKTpjZT1jZS5yZXBsYWNlKHosIiIpLCEoY2UubGVuZ3RoPD1IWzBdLmxlbmd0aCkmJiEoTS5pZ25vcmUmJk0uaWdub3JlLnRlc3QoY2UpKSl7b2U9TytjZS5sZW5ndGg7dmFyIGxlPXgoY2UsTyxvZSxBKTtpZihsZT09PXZvaWQgMCl7Ri5sYXN0SW5kZXg9b2U7Y29udGludWV9bGU9U3RyaW5nKGxlKSxBPUEuc2xpY2UoMCxPKStsZStBLnNsaWNlKG9lKSxGLmxhc3RJbmRleD1PK2xlLmxlbmd0aH19cmV0dXJuIEYubGFzdEluZGV4PTAsQX0sci5lbnN1cmVWYWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEseCl7dmFyIE09ISFBLEY9ISF4LFU9ITE7aWYoRiYmKFU9bShyLmhvc3RQcm90b2NvbHMseCkpLFUmJiFNKXRocm93IG5ldyBUeXBlRXJyb3IoIkhvc3RuYW1lIGNhbm5vdCBiZSBlbXB0eSwgaWYgcHJvdG9jb2wgaXMgIit4KTtpZihBJiZBLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl7aWYoIWUpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dIGFuZCBQdW55Y29kZS5qcyBpcyBub3QgYXZhaWxhYmxlJyk7aWYoZS50b0FTQ0lJKEEpLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li06X10nKX19LHIuZW5zdXJlVmFsaWRQb3J0PWZ1bmN0aW9uKEEpe2lmKEEpe3ZhciB4PU51bWJlcihBKTtpZighKGkoeCkmJng+MCYmeDw2NTUzNikpdGhyb3cgbmV3IFR5cGVFcnJvcignUG9ydCAiJytBKyciIGlzIG5vdCBhIHZhbGlkIHBvcnQnKX19LHIubm9Db25mbGljdD1mdW5jdGlvbihBKXtpZihBKXt2YXIgeD17VVJJOnRoaXMubm9Db25mbGljdCgpfTtyZXR1cm4gby5VUklUZW1wbGF0ZSYmdHlwZW9mIG8uVVJJVGVtcGxhdGUubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguVVJJVGVtcGxhdGU9by5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0KCkpLG8uSVB2NiYmdHlwZW9mIG8uSVB2Ni5ub0NvbmZsaWN0PT0iZnVuY3Rpb24iJiYoeC5JUHY2PW8uSVB2Ni5ub0NvbmZsaWN0KCkpLG8uU2Vjb25kTGV2ZWxEb21haW5zJiZ0eXBlb2Ygby5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguU2Vjb25kTGV2ZWxEb21haW5zPW8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QoKSkseH1lbHNlIG8uVVJJPT09dGhpcyYmKG8uVVJJPWEpO3JldHVybiB0aGlzfSxmLmJ1aWxkPWZ1bmN0aW9uKEEpe3JldHVybiBBPT09ITA/dGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITA6KEE9PT12b2lkIDB8fHRoaXMuX2RlZmVycmVkX2J1aWxkKSYmKHRoaXMuX3N0cmluZz1yLmJ1aWxkKHRoaXMuX3BhcnRzKSx0aGlzLl9kZWZlcnJlZF9idWlsZD0hMSksdGhpc30sZi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX0sZi52YWx1ZU9mPWYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWlsZCghMSkuX3N0cmluZ307ZnVuY3Rpb24gUyhBKXtyZXR1cm4gZnVuY3Rpb24oeCxNKXtyZXR1cm4geD09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KHRoaXMuX3BhcnRzW0FdPXh8fG51bGwsdGhpcy5idWlsZCghTSksdGhpcyl9fWZ1bmN0aW9uIEMoQSx4KXtyZXR1cm4gZnVuY3Rpb24oTSxGKXtyZXR1cm4gTT09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KE0hPT1udWxsJiYoTT1NKyIiLE0uY2hhckF0KDApPT09eCYmKE09TS5zdWJzdHJpbmcoMSkpKSx0aGlzLl9wYXJ0c1tBXT1NLHRoaXMuYnVpbGQoIUYpLHRoaXMpfX1mLnByb3RvY29sPVMoInByb3RvY29sIiksZi51c2VybmFtZT1TKCJ1c2VybmFtZSIpLGYucGFzc3dvcmQ9UygicGFzc3dvcmQiKSxmLmhvc3RuYW1lPVMoImhvc3RuYW1lIiksZi5wb3J0PVMoInBvcnQiKSxmLnF1ZXJ5PUMoInF1ZXJ5IiwiPyIpLGYuZnJhZ21lbnQ9QygiZnJhZ21lbnQiLCIjIiksZi5zZWFyY2g9ZnVuY3Rpb24oQSx4KXt2YXIgTT10aGlzLnF1ZXJ5KEEseCk7cmV0dXJuIHR5cGVvZiBNPT0ic3RyaW5nIiYmTS5sZW5ndGg/Ij8iK006TX0sZi5oYXNoPWZ1bmN0aW9uKEEseCl7dmFyIE09dGhpcy5mcmFnbWVudChBLHgpO3JldHVybiB0eXBlb2YgTT09InN0cmluZyImJk0ubGVuZ3RoPyIjIitNOk19LGYucGF0aG5hbWU9ZnVuY3Rpb24oQSx4KXtpZihBPT09dm9pZCAwfHxBPT09ITApe3ZhciBNPXRoaXMuX3BhcnRzLnBhdGh8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBPyh0aGlzLl9wYXJ0cy51cm4/ci5kZWNvZGVVcm5QYXRoOnIuZGVjb2RlUGF0aCkoTSk6TX1lbHNlIHJldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5fcGFydHMucGF0aD1BP3IucmVjb2RlVXJuUGF0aChBKToiIjp0aGlzLl9wYXJ0cy5wYXRoPUE/ci5yZWNvZGVQYXRoKEEpOiIvIix0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnBhdGg9Zi5wYXRobmFtZSxmLmhyZWY9ZnVuY3Rpb24oQSx4KXt2YXIgTTtpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLnRvU3RyaW5nKCk7dGhpcy5fc3RyaW5nPSIiLHRoaXMuX3BhcnRzPXIuX3BhcnRzKCk7dmFyIEY9QSBpbnN0YW5jZW9mIHIsVT10eXBlb2YgQT09Im9iamVjdCImJihBLmhvc3RuYW1lfHxBLnBhdGh8fEEucGF0aG5hbWUpO2lmKEEubm9kZU5hbWUpe3ZhciB6PXIuZ2V0RG9tQXR0cmlidXRlKEEpO0E9QVt6XXx8IiIsVT0hMX1pZighRiYmVSYmQS5wYXRobmFtZSE9PXZvaWQgMCYmKEE9QS50b1N0cmluZygpKSx0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpdGhpcy5fcGFydHM9ci5wYXJzZShTdHJpbmcoQSksdGhpcy5fcGFydHMpO2Vsc2UgaWYoRnx8VSl7dmFyIEQ9Rj9BLl9wYXJ0czpBO2ZvcihNIGluIEQpTSE9PSJxdWVyeSImJmQuY2FsbCh0aGlzLl9wYXJ0cyxNKSYmKHRoaXMuX3BhcnRzW01dPURbTV0pO0QucXVlcnkmJnRoaXMucXVlcnkoRC5xdWVyeSwhMSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGlucHV0Iik7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYuaXM9ZnVuY3Rpb24oQSl7dmFyIHg9ITEsTT0hMSxGPSExLFU9ITEsej0hMSxEPSExLEc9ITEsSD0hdGhpcy5fcGFydHMudXJuO3N3aXRjaCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKEg9ITEsTT1yLmlwNF9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLEY9ci5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSx4PU18fEYsVT0heCx6PVUmJm4mJm4uaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxEPVUmJnIuaWRuX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksRz1VJiZyLnB1bnljb2RlX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLEEudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZWxhdGl2ZSI6cmV0dXJuIEg7Y2FzZSJhYnNvbHV0ZSI6cmV0dXJuIUg7Y2FzZSJkb21haW4iOmNhc2UibmFtZSI6cmV0dXJuIFU7Y2FzZSJzbGQiOnJldHVybiB6O2Nhc2UiaXAiOnJldHVybiB4O2Nhc2UiaXA0IjpjYXNlImlwdjQiOmNhc2UiaW5ldDQiOnJldHVybiBNO2Nhc2UiaXA2IjpjYXNlImlwdjYiOmNhc2UiaW5ldDYiOnJldHVybiBGO2Nhc2UiaWRuIjpyZXR1cm4gRDtjYXNlInVybCI6cmV0dXJuIXRoaXMuX3BhcnRzLnVybjtjYXNlInVybiI6cmV0dXJuISF0aGlzLl9wYXJ0cy51cm47Y2FzZSJwdW55Y29kZSI6cmV0dXJuIEd9cmV0dXJuIG51bGx9O3ZhciBJPWYucHJvdG9jb2wsTj1mLnBvcnQsUD1mLmhvc3RuYW1lO2YucHJvdG9jb2w9ZnVuY3Rpb24oQSx4KXtpZihBJiYoQT1BLnJlcGxhY2UoLzooXC9cLyk/JC8sIiIpLCFBLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbikpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3RvY29sICInK0ErYCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuKy1dIG9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBbQS1aXWApO3JldHVybiBJLmNhbGwodGhpcyxBLHgpfSxmLnNjaGVtZT1mLnByb3RvY29sLGYucG9ydD1mdW5jdGlvbihBLHgpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/QT09PXZvaWQgMD8iIjp0aGlzOihBIT09dm9pZCAwJiYoQT09PTAmJihBPW51bGwpLEEmJihBKz0iIixBLmNoYXJBdCgwKT09PSI6IiYmKEE9QS5zdWJzdHJpbmcoMSkpLHIuZW5zdXJlVmFsaWRQb3J0KEEpKSksTi5jYWxsKHRoaXMsQSx4KSl9LGYuaG9zdG5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBIT09dm9pZCAwKXt2YXIgTT17cHJldmVudEludmFsaWRIb3N0bmFtZTp0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSxGPXIucGFyc2VIb3N0KEEsTSk7aWYoRiE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7QT1NLmhvc3RuYW1lLHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKX1yZXR1cm4gUC5jYWxsKHRoaXMsQSx4KX0sZi5vcmlnaW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTT10aGlzLnByb3RvY29sKCksRj10aGlzLmF1dGhvcml0eSgpO3JldHVybiBGPyhNP00rIjovLyI6IiIpK3RoaXMuYXV0aG9yaXR5KCk6IiJ9ZWxzZXt2YXIgVT1yKEEpO3JldHVybiB0aGlzLnByb3RvY29sKFUucHJvdG9jb2woKSkuYXV0aG9yaXR5KFUuYXV0aG9yaXR5KCkpLmJ1aWxkKCF4KSx0aGlzfX0sZi5ob3N0PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU/ci5idWlsZEhvc3QodGhpcy5fcGFydHMpOiIiO3ZhciBNPXIucGFyc2VIb3N0KEEsdGhpcy5fcGFydHMpO2lmKE0hPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLmF1dGhvcml0eT1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP3IuYnVpbGRBdXRob3JpdHkodGhpcy5fcGFydHMpOiIiO3ZhciBNPXIucGFyc2VBdXRob3JpdHkoQSx0aGlzLl9wYXJ0cyk7aWYoTSE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYudXNlcmluZm89ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTT1yLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO3JldHVybiBNJiZNLnN1YnN0cmluZygwLE0ubGVuZ3RoLTEpfWVsc2UgcmV0dXJuIEFbQS5sZW5ndGgtMV0hPT0iQCImJihBKz0iQCIpLHIucGFyc2VVc2VyaW5mbyhBLHRoaXMuX3BhcnRzKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnJlc291cmNlPWZ1bmN0aW9uKEEseCl7dmFyIE07cmV0dXJuIEE9PT12b2lkIDA/dGhpcy5wYXRoKCkrdGhpcy5zZWFyY2goKSt0aGlzLmhhc2goKTooTT1yLnBhcnNlKEEpLHRoaXMuX3BhcnRzLnBhdGg9TS5wYXRoLHRoaXMuX3BhcnRzLnF1ZXJ5PU0ucXVlcnksdGhpcy5fcGFydHMuZnJhZ21lbnQ9TS5mcmFnbWVudCx0aGlzLmJ1aWxkKCF4KSx0aGlzKX0sZi5zdWJkb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE09dGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoLXRoaXMuZG9tYWluKCkubGVuZ3RoLTE7cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLE0pfHwiIn1lbHNle3ZhciBGPXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aCxVPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLEYpLHo9bmV3IFJlZ0V4cCgiXiIrYyhVKSk7aWYoQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLiImJihBKz0iLiIpLEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtyZXR1cm4gQSYmci5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoeixBKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5kb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoeD1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE09dGhpcy5fcGFydHMuaG9zdG5hbWUubWF0Y2goL1wuL2cpO2lmKE0mJk0ubGVuZ3RoPDIpcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lO3ZhciBGPXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLnRsZCh4KS5sZW5ndGgtMTtyZXR1cm4gRj10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIsRi0xKSsxLHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyhGKXx8IiJ9ZWxzZXtpZighQSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eSIpO2lmKEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtpZihyLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCksIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXRoaXMuX3BhcnRzLmhvc3RuYW1lPUE7ZWxzZXt2YXIgVT1uZXcgUmVnRXhwKGModGhpcy5kb21haW4oKSkrIiQiKTt0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSl9cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9fSxmLnRsZD1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKHR5cGVvZiBBPT0iYm9vbGVhbiImJih4PUEsQT12b2lkIDApLEE9PT12b2lkIDApe2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSlyZXR1cm4iIjt2YXIgTT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIpLEY9dGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKE0rMSk7cmV0dXJuIHghPT0hMCYmbiYmbi5saXN0W0YudG9Mb3dlckNhc2UoKV0mJm4uZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKXx8Rn1lbHNle3ZhciBVO2lmKEEpaWYoQS5tYXRjaCgvW15hLXpBLVowLTktXS8pKWlmKG4mJm4uaXMoQSkpVT1uZXcgUmVnRXhwKGModGhpcy50bGQoKSkrIiQiKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtlbHNle2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoImNhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCIpO1U9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShVLEEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBUTEQgZW1wdHkiKTtyZXR1cm4gdGhpcy5idWlsZCgheCksdGhpc319LGYuZGlyZWN0b3J5PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aCYmIXRoaXMuX3BhcnRzLmhvc3RuYW1lKXJldHVybiIiO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIi8iO3ZhciBNPXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgtMSxGPXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsTSl8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBP3IuZGVjb2RlUGF0aChGKTpGfWVsc2V7dmFyIFU9dGhpcy5fcGFydHMucGF0aC5sZW5ndGgtdGhpcy5maWxlbmFtZSgpLmxlbmd0aCx6PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsVSksRD1uZXcgUmVnRXhwKCJeIitjKHopKTtyZXR1cm4gdGhpcy5pcygicmVsYXRpdmUiKXx8KEF8fChBPSIvIiksQS5jaGFyQXQoMCkhPT0iLyImJihBPSIvIitBKSksQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLyImJihBKz0iLyIpLEE9ci5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKEQsQSksdGhpcy5idWlsZCgheCksdGhpc319LGYuZmlsZW5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQSE9InN0cmluZyIpe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBNPXRoaXMuX3BhcnRzLnBhdGgubGFzdEluZGV4T2YoIi8iKSxGPXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKE0rMSk7cmV0dXJuIEE/ci5kZWNvZGVQYXRoU2VnbWVudChGKTpGfWVsc2V7dmFyIFU9ITE7QS5jaGFyQXQoMCk9PT0iLyImJihBPUEuc3Vic3RyaW5nKDEpKSxBLm1hdGNoKC9cLj9cLy8pJiYoVT0hMCk7dmFyIHo9bmV3IFJlZ0V4cChjKHRoaXMuZmlsZW5hbWUoKSkrIiQiKTtyZXR1cm4gQT1yLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UoeixBKSxVP3RoaXMubm9ybWFsaXplUGF0aCh4KTp0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zdWZmaXg9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwfHxBPT09ITApe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBNPXRoaXMuZmlsZW5hbWUoKSxGPU0ubGFzdEluZGV4T2YoIi4iKSxVLHo7cmV0dXJuIEY9PT0tMT8iIjooVT1NLnN1YnN0cmluZyhGKzEpLHo9L15bYS16MC05JV0rJC9pLnRlc3QoVSk/VToiIixBP3IuZGVjb2RlUGF0aFNlZ21lbnQoeik6eil9ZWxzZXtBLmNoYXJBdCgwKT09PSIuIiYmKEE9QS5zdWJzdHJpbmcoMSkpO3ZhciBEPXRoaXMuc3VmZml4KCksRztpZihEKUE/Rz1uZXcgUmVnRXhwKGMoRCkrIiQiKTpHPW5ldyBSZWdFeHAoYygiLiIrRCkrIiQiKTtlbHNle2lmKCFBKXJldHVybiB0aGlzO3RoaXMuX3BhcnRzLnBhdGgrPSIuIityLnJlY29kZVBhdGgoQSl9cmV0dXJuIEcmJihBPXIucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShHLEEpKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zZWdtZW50PWZ1bmN0aW9uKEEseCxNKXt2YXIgRj10aGlzLl9wYXJ0cy51cm4/IjoiOiIvIixVPXRoaXMucGF0aCgpLHo9VS5zdWJzdHJpbmcoMCwxKT09PSIvIixEPVUuc3BsaXQoRik7aWYoQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiJiYoTT14LHg9QSxBPXZvaWQgMCksQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcignQmFkIHNlZ21lbnQgIicrQSsnIiwgbXVzdCBiZSAwLWJhc2VkIGludGVnZXInKTtpZih6JiZELnNoaWZ0KCksQTwwJiYoQT1NYXRoLm1heChELmxlbmd0aCtBLDApKSx4PT09dm9pZCAwKXJldHVybiBBPT09dm9pZCAwP0Q6RFtBXTtpZihBPT09bnVsbHx8RFtBXT09PXZvaWQgMClpZihsKHgpKXtEPVtdO2Zvcih2YXIgRz0wLEg9eC5sZW5ndGg7RzxIO0crKykheFtHXS5sZW5ndGgmJighRC5sZW5ndGh8fCFEW0QubGVuZ3RoLTFdLmxlbmd0aCl8fChELmxlbmd0aCYmIURbRC5sZW5ndGgtMV0ubGVuZ3RoJiZELnBvcCgpLEQucHVzaChwKHhbR10pKSl9ZWxzZSh4fHx0eXBlb2YgeD09InN0cmluZyIpJiYoeD1wKHgpLERbRC5sZW5ndGgtMV09PT0iIj9EW0QubGVuZ3RoLTFdPXg6RC5wdXNoKHgpKTtlbHNlIHg/RFtBXT1wKHgpOkQuc3BsaWNlKEEsMSk7cmV0dXJuIHomJkQudW5zaGlmdCgiIiksdGhpcy5wYXRoKEQuam9pbihGKSxNKX0sZi5zZWdtZW50Q29kZWQ9ZnVuY3Rpb24oQSx4LE0pe3ZhciBGLFUsejtpZih0eXBlb2YgQSE9Im51bWJlciImJihNPXgseD1BLEE9dm9pZCAwKSx4PT09dm9pZCAwKXtpZihGPXRoaXMuc2VnbWVudChBLHgsTSksIWwoRikpRj1GIT09dm9pZCAwP3IuZGVjb2RlKEYpOnZvaWQgMDtlbHNlIGZvcihVPTAsej1GLmxlbmd0aDtVPHo7VSsrKUZbVV09ci5kZWNvZGUoRltVXSk7cmV0dXJuIEZ9aWYoIWwoeCkpeD10eXBlb2YgeD09InN0cmluZyJ8fHggaW5zdGFuY2VvZiBTdHJpbmc/ci5lbmNvZGUoeCk6eDtlbHNlIGZvcihVPTAsej14Lmxlbmd0aDtVPHo7VSsrKXhbVV09ci5lbmNvZGUoeFtVXSk7cmV0dXJuIHRoaXMuc2VnbWVudChBLHgsTSl9O3ZhciB2PWYucXVlcnk7cmV0dXJuIGYucXVlcnk9ZnVuY3Rpb24oQSx4KXtpZihBPT09ITApcmV0dXJuIHIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09ImZ1bmN0aW9uIil7dmFyIE09ci5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLEY9QS5jYWxsKHRoaXMsTSk7cmV0dXJuIHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeShGfHxNLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfWVsc2UgcmV0dXJuIEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ic3RyaW5nIj8odGhpcy5fcGFydHMucXVlcnk9ci5idWlsZFF1ZXJ5KEEsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHRoaXMuYnVpbGQoIXgpLHRoaXMpOnYuY2FsbCh0aGlzLEEseCl9LGYuc2V0UXVlcnk9ZnVuY3Rpb24oQSx4LE0pe3ZhciBGPXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpRltBXT14IT09dm9pZCAwP3g6bnVsbDtlbHNlIGlmKHR5cGVvZiBBPT0ib2JqZWN0Iilmb3IodmFyIFUgaW4gQSlkLmNhbGwoQSxVKSYmKEZbVV09QVtVXSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkoRix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTT14KSx0aGlzLmJ1aWxkKCFNKSx0aGlzfSxmLmFkZFF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgRj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIuYWRkUXVlcnkoRixBLHg9PT12b2lkIDA/bnVsbDp4KSx0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkoRix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTT14KSx0aGlzLmJ1aWxkKCFNKSx0aGlzfSxmLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxNKXt2YXIgRj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIucmVtb3ZlUXVlcnkoRixBLHgpLHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeShGLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0eXBlb2YgQSE9InN0cmluZyImJihNPXgpLHRoaXMuYnVpbGQoIU0pLHRoaXN9LGYuaGFzUXVlcnk9ZnVuY3Rpb24oQSx4LE0pe3ZhciBGPXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtyZXR1cm4gci5oYXNRdWVyeShGLEEseCxNKX0sZi5zZXRTZWFyY2g9Zi5zZXRRdWVyeSxmLmFkZFNlYXJjaD1mLmFkZFF1ZXJ5LGYucmVtb3ZlU2VhcmNoPWYucmVtb3ZlUXVlcnksZi5oYXNTZWFyY2g9Zi5oYXNRdWVyeSxmLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5ub3JtYWxpemVQcm90b2NvbCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpOnRoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZUhvc3RuYW1lKCExKS5ub3JtYWxpemVQb3J0KCExKS5ub3JtYWxpemVQYXRoKCExKS5ub3JtYWxpemVRdWVyeSghMSkubm9ybWFsaXplRnJhZ21lbnQoITEpLmJ1aWxkKCl9LGYubm9ybWFsaXplUHJvdG9jb2w9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbD09InN0cmluZyImJih0aGlzLl9wYXJ0cy5wcm90b2NvbD10aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKHRoaXMuaXMoIklETiIpJiZlP3RoaXMuX3BhcnRzLmhvc3RuYW1lPWUudG9BU0NJSSh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk6dGhpcy5pcygiSVB2NiIpJiZ0JiYodGhpcy5fcGFydHMuaG9zdG5hbWU9dC5iZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQb3J0PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiZ0aGlzLl9wYXJ0cy5wb3J0PT09ci5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdJiYodGhpcy5fcGFydHMucG9ydD1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5fcGFydHMucGF0aDtpZigheClyZXR1cm4gdGhpcztpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIHRoaXMuX3BhcnRzLnBhdGg9ci5yZWNvZGVVcm5QYXRoKHRoaXMuX3BhcnRzLnBhdGgpLHRoaXMuYnVpbGQoIUEpLHRoaXM7aWYodGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4gdGhpczt4PXIucmVjb2RlUGF0aCh4KTt2YXIgTSxGPSIiLFUsejtmb3IoeC5jaGFyQXQoMCkhPT0iLyImJihNPSEwLHg9Ii8iK3gpLCh4LnNsaWNlKC0zKT09PSIvLi4ifHx4LnNsaWNlKC0yKT09PSIvLiIpJiYoeCs9Ii8iKSx4PXgucmVwbGFjZSgvKFwvKFwuXC8pKyl8KFwvXC4kKS9nLCIvIikucmVwbGFjZSgvXC97Mix9L2csIi8iKSxNJiYoRj14LnN1YnN0cmluZygxKS5tYXRjaCgvXihcLlwuXC8pKy8pfHwiIixGJiYoRj1GWzBdKSk7VT14LnNlYXJjaCgvXC9cLlwuKFwvfCQpLyksVSE9PS0xOyl7aWYoVT09PTApe3g9eC5zdWJzdHJpbmcoMyk7Y29udGludWV9ej14LnN1YnN0cmluZygwLFUpLmxhc3RJbmRleE9mKCIvIiksej09PS0xJiYoej1VKSx4PXguc3Vic3RyaW5nKDAseikreC5zdWJzdHJpbmcoVSszKX1yZXR1cm4gTSYmdGhpcy5pcygicmVsYXRpdmUiKSYmKHg9Rit4LnN1YnN0cmluZygxKSksdGhpcy5fcGFydHMucGF0aD14LHRoaXMuYnVpbGQoIUEpLHRoaXN9LGYubm9ybWFsaXplUGF0aG5hbWU9Zi5ub3JtYWxpemVQYXRoLGYubm9ybWFsaXplUXVlcnk9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5xdWVyeT09InN0cmluZyImJih0aGlzLl9wYXJ0cy5xdWVyeS5sZW5ndGg/dGhpcy5xdWVyeShyLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkpOnRoaXMuX3BhcnRzLnF1ZXJ5PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplRnJhZ21lbnQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmZyYWdtZW50fHwodGhpcy5fcGFydHMuZnJhZ21lbnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVTZWFyY2g9Zi5ub3JtYWxpemVRdWVyeSxmLm5vcm1hbGl6ZUhhc2g9Zi5ub3JtYWxpemVGcmFnbWVudCxmLmlzbzg4NTk9ZnVuY3Rpb24oKXt2YXIgQT1yLmVuY29kZSx4PXIuZGVjb2RlO3IuZW5jb2RlPWVzY2FwZSxyLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQ7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtyLmVuY29kZT1BLHIuZGVjb2RlPXh9cmV0dXJuIHRoaXN9LGYudW5pY29kZT1mdW5jdGlvbigpe3ZhciBBPXIuZW5jb2RlLHg9ci5kZWNvZGU7ci5lbmNvZGU9RSxyLmRlY29kZT11bmVzY2FwZTt0cnl7dGhpcy5ub3JtYWxpemUoKX1maW5hbGx5e3IuZW5jb2RlPUEsci5kZWNvZGU9eH1yZXR1cm4gdGhpc30sZi5yZWFkYWJsZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuY2xvbmUoKTtBLnVzZXJuYW1lKCIiKS5wYXNzd29yZCgiIikubm9ybWFsaXplKCk7dmFyIHg9IiI7aWYoQS5fcGFydHMucHJvdG9jb2wmJih4Kz1BLl9wYXJ0cy5wcm90b2NvbCsiOi8vIiksQS5fcGFydHMuaG9zdG5hbWUmJihBLmlzKCJwdW55Y29kZSIpJiZlPyh4Kz1lLnRvVW5pY29kZShBLl9wYXJ0cy5ob3N0bmFtZSksQS5fcGFydHMucG9ydCYmKHgrPSI6IitBLl9wYXJ0cy5wb3J0KSk6eCs9QS5ob3N0KCkpLEEuX3BhcnRzLmhvc3RuYW1lJiZBLl9wYXJ0cy5wYXRoJiZBLl9wYXJ0cy5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmKHgrPSIvIikseCs9QS5wYXRoKCEwKSxBLl9wYXJ0cy5xdWVyeSl7Zm9yKHZhciBNPSIiLEY9MCxVPUEuX3BhcnRzLnF1ZXJ5LnNwbGl0KCImIiksej1VLmxlbmd0aDtGPHo7RisrKXt2YXIgRD0oVVtGXXx8IiIpLnNwbGl0KCI9Iik7TSs9IiYiK3IuZGVjb2RlUXVlcnkoRFswXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpLERbMV0hPT12b2lkIDAmJihNKz0iPSIrci5kZWNvZGVRdWVyeShEWzFdLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLnJlcGxhY2UoLyYvZywiJTI2IikpfXgrPSI/IitNLnN1YnN0cmluZygxKX1yZXR1cm4geCs9ci5kZWNvZGVRdWVyeShBLmhhc2goKSwhMCkseH0sZi5hYnNvbHV0ZVRvPWZ1bmN0aW9uKEEpe3ZhciB4PXRoaXMuY2xvbmUoKSxNPVsicHJvdG9jb2wiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiaG9zdG5hbWUiLCJwb3J0Il0sRixVLHo7aWYodGhpcy5fcGFydHMudXJuKXRocm93IG5ldyBFcnJvcigiVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMiKTtpZihBIGluc3RhbmNlb2Ygcnx8KEE9bmV3IHIoQSkpLHguX3BhcnRzLnByb3RvY29sfHwoeC5fcGFydHMucHJvdG9jb2w9QS5fcGFydHMucHJvdG9jb2wsdGhpcy5fcGFydHMuaG9zdG5hbWUpKXJldHVybiB4O2ZvcihVPTA7ej1NW1VdO1UrKyl4Ll9wYXJ0c1t6XT1BLl9wYXJ0c1t6XTtyZXR1cm4geC5fcGFydHMucGF0aD8oeC5fcGFydHMucGF0aC5zdWJzdHJpbmcoLTIpPT09Ii4uIiYmKHguX3BhcnRzLnBhdGgrPSIvIikseC5wYXRoKCkuY2hhckF0KDApIT09Ii8iJiYoRj1BLmRpcmVjdG9yeSgpLEY9Rnx8KEEucGF0aCgpLmluZGV4T2YoIi8iKT09PTA/Ii8iOiIiKSx4Ll9wYXJ0cy5wYXRoPShGP0YrIi8iOiIiKSt4Ll9wYXJ0cy5wYXRoLHgubm9ybWFsaXplUGF0aCgpKSk6KHguX3BhcnRzLnBhdGg9QS5fcGFydHMucGF0aCx4Ll9wYXJ0cy5xdWVyeXx8KHguX3BhcnRzLnF1ZXJ5PUEuX3BhcnRzLnF1ZXJ5KSkseC5idWlsZCgpLHh9LGYucmVsYXRpdmVUbz1mdW5jdGlvbihBKXt2YXIgeD10aGlzLmNsb25lKCkubm9ybWFsaXplKCksTSxGLFUseixEO2lmKHguX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQT1uZXcgcihBKS5ub3JtYWxpemUoKSxNPXguX3BhcnRzLEY9QS5fcGFydHMsej14LnBhdGgoKSxEPUEucGF0aCgpLHouY2hhckF0KDApIT09Ii8iKXRocm93IG5ldyBFcnJvcigiVVJJIGlzIGFscmVhZHkgcmVsYXRpdmUiKTtpZihELmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgYSBVUkkgcmVsYXRpdmUgdG8gYW5vdGhlciByZWxhdGl2ZSBVUkkiKTtpZihNLnByb3RvY29sPT09Ri5wcm90b2NvbCYmKE0ucHJvdG9jb2w9bnVsbCksTS51c2VybmFtZSE9PUYudXNlcm5hbWV8fE0ucGFzc3dvcmQhPT1GLnBhc3N3b3JkfHxNLnByb3RvY29sIT09bnVsbHx8TS51c2VybmFtZSE9PW51bGx8fE0ucGFzc3dvcmQhPT1udWxsKXJldHVybiB4LmJ1aWxkKCk7aWYoTS5ob3N0bmFtZT09PUYuaG9zdG5hbWUmJk0ucG9ydD09PUYucG9ydClNLmhvc3RuYW1lPW51bGwsTS5wb3J0PW51bGw7ZWxzZSByZXR1cm4geC5idWlsZCgpO2lmKHo9PT1EKXJldHVybiBNLnBhdGg9IiIseC5idWlsZCgpO2lmKFU9ci5jb21tb25QYXRoKHosRCksIVUpcmV0dXJuIHguYnVpbGQoKTt2YXIgRz1GLnBhdGguc3Vic3RyaW5nKFUubGVuZ3RoKS5yZXBsYWNlKC9bXlwvXSokLywiIikucmVwbGFjZSgvLio/XC8vZywiLi4vIik7cmV0dXJuIE0ucGF0aD1HK00ucGF0aC5zdWJzdHJpbmcoVS5sZW5ndGgpfHwiLi8iLHguYnVpbGQoKX0sZi5lcXVhbHM9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5jbG9uZSgpLE09bmV3IHIoQSksRj17fSxVPXt9LHo9e30sRCxHLEg7aWYoeC5ub3JtYWxpemUoKSxNLm5vcm1hbGl6ZSgpLHgudG9TdHJpbmcoKT09PU0udG9TdHJpbmcoKSlyZXR1cm4hMDtpZihEPXgucXVlcnkoKSxHPU0ucXVlcnkoKSx4LnF1ZXJ5KCIiKSxNLnF1ZXJ5KCIiKSx4LnRvU3RyaW5nKCkhPT1NLnRvU3RyaW5nKCl8fEQubGVuZ3RoIT09Ry5sZW5ndGgpcmV0dXJuITE7Rj1yLnBhcnNlUXVlcnkoRCx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxVPXIucGFyc2VRdWVyeShHLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO2ZvcihIIGluIEYpaWYoZC5jYWxsKEYsSCkpe2lmKGwoRltIXSkpe2lmKCFiKEZbSF0sVVtIXSkpcmV0dXJuITF9ZWxzZSBpZihGW0hdIT09VVtIXSlyZXR1cm4hMTt6W0hdPSEwfWZvcihIIGluIFUpaWYoZC5jYWxsKFUsSCkmJiF6W0hdKXJldHVybiExO3JldHVybiEwfSxmLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ISFBLHRoaXN9LGYuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ISFBLHRoaXN9LGYuZXNjYXBlUXVlcnlTcGFjZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZT0hIUEsdGhpc30scn0pfSk7ZnVuY3Rpb24gd0MoZSl7cmV0dXJuKGUubGVuZ3RoPT09MHx8ZVtlLmxlbmd0aC0xXSE9PSIvIikmJihlPWAke2V9L2ApLGV9dmFyIGsxLHYxPVgoKCk9PntrMT13Q30pO2Z1bmN0aW9uIEYxKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm4gZTt0PXQ/PyExO2xldCBuPW5ldyBlLmNvbnN0cnVjdG9yO2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykpe2xldCBhPWVbb107dCYmKGE9RjEoYSx0KSksbltvXT1hfXJldHVybiBufXZhciAkYyxEMT1YKCgpPT57JGM9RjF9KTtmdW5jdGlvbiBCMShlLHQsbil7bj1uPz8hMTtsZXQgbz17fSxhPWcoZSkscj1nKHQpLGksZixkO2lmKGEpZm9yKGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYoZj1lW2ldLHImJm4mJnR5cGVvZiBmPT0ib2JqZWN0IiYmdC5oYXNPd25Qcm9wZXJ0eShpKT8oZD10W2ldLHR5cGVvZiBkPT0ib2JqZWN0Ij9vW2ldPUIxKGYsZCxuKTpvW2ldPWYpOm9baV09Zik7aWYocilmb3IoaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJiFvLmhhc093blByb3BlcnR5KGkpJiYoZD10W2ldLG9baV09ZCk7cmV0dXJuIG99dmFyIHlhLHVsPVgoKCk9PntzZSgpO3lhPUIxfSk7ZnVuY3Rpb24gRUMoKXtsZXQgZSx0LG49bmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXtlPW8sdD1hfSk7cmV0dXJue3Jlc29sdmU6ZSxyZWplY3Q6dCxwcm9taXNlOm59fXZhciBRaSxvYj1YKCgpPT57UWk9RUN9KTtmdW5jdGlvbiBhYihlLHQpe2xldCBuO3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiYobj1kb2N1bWVudCksYWIuX2ltcGxlbWVudGF0aW9uKGUsdCxuKX12YXIgVTEsZ2YscmI9WCgoKT0+e1UxPWNhKHVpKCksMSk7c2UoKTthYi5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24oZSx0LG4pe2lmKCFnKHQpKXtpZih0eXBlb2Ygbj4idSIpcmV0dXJuIGU7dD1uLmJhc2VVUkk/P24ubG9jYXRpb24uaHJlZn1sZXQgbz1uZXcgVTEuZGVmYXVsdChlKTtyZXR1cm4gby5zY2hlbWUoKSE9PSIiP28udG9TdHJpbmcoKTpvLmFic29sdXRlVG8odCkudG9TdHJpbmcoKX07Z2Y9YWJ9KTtmdW5jdGlvbiBUQyhlLHQpe2xldCBuPSIiLG89ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJihuPWUuc3Vic3RyaW5nKDAsbysxKSksdCYmKGU9bmV3IEwxLmRlZmF1bHQoZSksZS5xdWVyeSgpLmxlbmd0aCE9PTAmJihuKz1gPyR7ZS5xdWVyeSgpfWApLGUuZnJhZ21lbnQoKS5sZW5ndGghPT0wJiYobis9YCMke2UuZnJhZ21lbnQoKX1gKSksbn12YXIgTDEsajEsejE9WCgoKT0+e0wxPWNhKHVpKCksMSk7ajE9VEN9KTtmdW5jdGlvbiBSQyhlKXtsZXQgdD1uZXcgRzEuZGVmYXVsdChlKTt0Lm5vcm1hbGl6ZSgpO2xldCBuPXQucGF0aCgpLG89bi5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJihuPW4uc3Vic3RyKG8rMSkpLG89bi5sYXN0SW5kZXhPZigiLiIpLG89PT0tMT9uPSIiOm49bi5zdWJzdHIobysxKSxufXZhciBHMSxWMSxIMT1YKCgpPT57RzE9Y2EodWkoKSwxKTtWMT1SQ30pO2Z1bmN0aW9uIHhDKGUsdCxuKXtnKHQpfHwodD1lLndpZHRoKSxnKG4pfHwobj1lLmhlaWdodCk7bGV0IG89SzFbdF07ZyhvKXx8KG89e30sSzFbdF09byk7bGV0IGE9b1tuXTtpZighZyhhKSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ci53aWR0aD10LHIuaGVpZ2h0PW4sYT1yLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSksYS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImNvcHkiLG9bbl09YX1yZXR1cm4gYS5kcmF3SW1hZ2UoZSwwLDAsdCxuKSxhLmdldEltYWdlRGF0YSgwLDAsdCxuKS5kYXRhfXZhciBLMSxpYixxMT1YKCgpPT57c2UoKTtLMT17fTtpYj14Q30pO2Z1bmN0aW9uIFNDKGUpe3JldHVybiBPQy50ZXN0KGUpfXZhciBPQyxsbCxjYj1YKCgpPT57T0M9L15ibG9iOi9pO2xsPVNDfSk7ZnVuY3Rpb24gQ0MoZSl7Zyhvcil8fChvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLG9yLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWY7bGV0IHQ9b3IuaG9zdCxuPW9yLnByb3RvY29sO3JldHVybiBvci5ocmVmPWUsb3IuaHJlZj1vci5ocmVmLG4hPT1vci5wcm90b2NvbHx8dCE9PW9yLmhvc3R9dmFyIG9yLF9mLHNiPVgoKCk9PntzZSgpO19mPUNDfSk7ZnVuY3Rpb24gTkMoZSl7cmV0dXJuIE1DLnRlc3QoZSl9dmFyIE1DLGhsLGZiPVgoKCk9PntNQz0vXmRhdGE6L2k7aGw9TkN9KTtmdW5jdGlvbiBJQyhlKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyZXR1cm4gdC5hc3luYz0hMCx0LnNyYz1lLG5ldyBQcm9taXNlKChuLG8pPT57d2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQmJnQuc2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIsImFub255bW91cyIpO2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dC5vbmxvYWQ9ZnVuY3Rpb24oKXt0Lm9ubG9hZD12b2lkIDAsYS5yZW1vdmVDaGlsZCh0KSxuKCl9LHQub25lcnJvcj1mdW5jdGlvbihyKXtvKHIpfSxhLmFwcGVuZENoaWxkKHQpfSl9dmFyIFcxLFgxPVgoKCk9PntXMT1JQ30pO2Z1bmN0aW9uIFBDKGUpe2xldCB0PSIiO2ZvcihsZXQgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe2xldCBvPWVbbl0sYT1gJHtlbmNvZGVVUklDb21wb25lbnQobil9PWA7aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHI9MCxpPW8ubGVuZ3RoO3I8aTsrK3IpdCs9YCR7YStlbmNvZGVVUklDb21wb25lbnQob1tyXSl9JmA7ZWxzZSB0Kz1gJHthK2VuY29kZVVSSUNvbXBvbmVudChvKX0mYH1yZXR1cm4gdD10LnNsaWNlKDAsLTEpLHR9dmFyIFkxLEoxPVgoKCk9PntZMT1QQ30pO2Z1bmN0aW9uIGtDKGUpe2xldCB0PXt9O2lmKGU9PT0iIilyZXR1cm4gdDtsZXQgbj1lLnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAsYT1uLmxlbmd0aDtvPGE7KytvKXtsZXQgcj1uW29dLnNwbGl0KCI9IiksaT1kZWNvZGVVUklDb21wb25lbnQoclswXSksZj1yWzFdO2coZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgZD10W2ldO3R5cGVvZiBkPT0ic3RyaW5nIj90W2ldPVtkLGZdOkFycmF5LmlzQXJyYXkoZCk/ZC5wdXNoKGYpOnRbaV09Zn1yZXR1cm4gdH12YXIgWjEsUTE9WCgoKT0+e3NlKCk7WjE9a0N9KTt2YXIgdkMsQ24sbWw9WCgoKT0+e3ZDPXtVTklTU1VFRDowLElTU1VFRDoxLEFDVElWRToyLFJFQ0VJVkVEOjMsQ0FOQ0VMTEVEOjQsRkFJTEVEOjV9LENuPU9iamVjdC5mcmVlemUodkMpfSk7dmFyIEZDLCQxLGVBPVgoKCk9PntGQz17VEVSUkFJTjowLElNQUdFUlk6MSxUSUxFUzNEOjIsT1RIRVI6M30sJDE9T2JqZWN0LmZyZWV6ZShGQyl9KTtmdW5jdGlvbiBibChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnRocm90dGxlQnlTZXJ2ZXI/PyExLG49ZS50aHJvdHRsZT8/ITE7dGhpcy51cmw9ZS51cmwsdGhpcy5yZXF1ZXN0RnVuY3Rpb249ZS5yZXF1ZXN0RnVuY3Rpb24sdGhpcy5jYW5jZWxGdW5jdGlvbj1lLmNhbmNlbEZ1bmN0aW9uLHRoaXMucHJpb3JpdHlGdW5jdGlvbj1lLnByaW9yaXR5RnVuY3Rpb24sdGhpcy5wcmlvcml0eT1lLnByaW9yaXR5Pz8wLHRoaXMudGhyb3R0bGU9bix0aGlzLnRocm90dGxlQnlTZXJ2ZXI9dCx0aGlzLnR5cGU9ZS50eXBlPz8kMS5PVEhFUix0aGlzLnNlcnZlcktleT1lLnNlcnZlcktleSx0aGlzLnN0YXRlPUNuLlVOSVNTVUVELHRoaXMuZGVmZXJyZWQ9dm9pZCAwLHRoaXMuY2FuY2VsbGVkPSExfXZhciB0QSxuQT1YKCgpPT57bXQoKTtzZSgpO21sKCk7ZUEoKTtibC5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ9ITB9O2JsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT8oZS51cmw9dGhpcy51cmwsZS5yZXF1ZXN0RnVuY3Rpb249dGhpcy5yZXF1ZXN0RnVuY3Rpb24sZS5jYW5jZWxGdW5jdGlvbj10aGlzLmNhbmNlbEZ1bmN0aW9uLGUucHJpb3JpdHlGdW5jdGlvbj10aGlzLnByaW9yaXR5RnVuY3Rpb24sZS5wcmlvcml0eT10aGlzLnByaW9yaXR5LGUudGhyb3R0bGU9dGhpcy50aHJvdHRsZSxlLnRocm90dGxlQnlTZXJ2ZXI9dGhpcy50aHJvdHRsZUJ5U2VydmVyLGUudHlwZT10aGlzLnR5cGUsZS5zZXJ2ZXJLZXk9dGhpcy5zZXJ2ZXJLZXksZS5zdGF0ZT1Dbi5VTklTU1VFRCxlLmRlZmVycmVkPXZvaWQgMCxlLmNhbmNlbGxlZD0hMSxlKTpuZXcgYmwodGhpcyl9O3RBPWJsfSk7ZnVuY3Rpb24gREMoZSl7bGV0IHQ9e307aWYoIWUpcmV0dXJuIHQ7bGV0IG49ZS5zcGxpdChgXHIKYCk7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDsrK28pe2xldCBhPW5bb10scj1hLmluZGV4T2YoIjogIik7aWYocj4wKXtsZXQgaT1hLnN1YnN0cmluZygwLHIpLGY9YS5zdWJzdHJpbmcocisyKTt0W2ldPWZ9fXJldHVybiB0fXZhciBvQSxhQT1YKCgpPT57b0E9REN9KTtmdW5jdGlvbiByQShlLHQsbil7dGhpcy5zdGF0dXNDb2RlPWUsdGhpcy5yZXNwb25zZT10LHRoaXMucmVzcG9uc2VIZWFkZXJzPW4sdHlwZW9mIHRoaXMucmVzcG9uc2VIZWFkZXJzPT0ic3RyaW5nIiYmKHRoaXMucmVzcG9uc2VIZWFkZXJzPW9BKHRoaXMucmVzcG9uc2VIZWFkZXJzKSl9dmFyIHlmLGlBPVgoKCk9PntzZSgpO2FBKCk7ckEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IGU9IlJlcXVlc3QgaGFzIGZhaWxlZC4iO3JldHVybiBnKHRoaXMuc3RhdHVzQ29kZSkmJihlKz1gIFN0YXR1cyBDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gKSxlfTt5Zj1yQX0pO2Z1bmN0aW9uIEFmKCl7dGhpcy5fbGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fdG9SZW1vdmU9bmV3IE1hcCx0aGlzLl90b0FkZD1uZXcgTWFwLHRoaXMuX2ludm9raW5nTGlzdGVuZXJzPSExLHRoaXMuX2xpc3RlbmVyQ291bnQ9MH1mdW5jdGlvbiB1YihlLHQsbixvKXt0LmhhcyhuKXx8dC5zZXQobixuZXcgU2V0KTtsZXQgYT10LmdldChuKTtyZXR1cm4gYS5oYXMobyk/ITE6KGEuYWRkKG8pLCEwKX1mdW5jdGlvbiBkYihlLHQsbixvKXtsZXQgYT10LmdldChuKTtpZighYXx8IWEuaGFzKG8pKXJldHVybiExO2lmKGUuX2ludm9raW5nTGlzdGVuZXJzKXtpZighdWIoZSxlLl90b1JlbW92ZSxuLG8pKXJldHVybiExfWVsc2UgYS5kZWxldGUobyksYS5zaXplPT09MCYmdC5kZWxldGUobik7cmV0dXJuITB9dmFyIHBsLGxiPVgoKCk9PntzZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lckNvdW50fX19KTtBZi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMsbz1uLl9pbnZva2luZ0xpc3RlbmVycz9uLl90b0FkZDpuLl9saXN0ZW5lcnM7cmV0dXJuIHViKHRoaXMsbyxlLHQpJiZuLl9saXN0ZW5lckNvdW50KyssZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KX19O0FmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZGIodGhpcyx0aGlzLl9saXN0ZW5lcnMsZSx0KSxvPWRiKHRoaXMsdGhpcy5fdG9BZGQsZSx0KSxhPW58fG87cmV0dXJuIGEmJnRoaXMuX2xpc3RlbmVyQ291bnQtLSxhfTtBZi5wcm90b3R5cGUucmFpc2VFdmVudD1mdW5jdGlvbigpe3RoaXMuX2ludm9raW5nTGlzdGVuZXJzPSEwO2ZvcihsZXRbZSx0XW9mIHRoaXMuX2xpc3RlbmVycy5lbnRyaWVzKCkpaWYoZyhlKSlmb3IobGV0IG4gb2YgdCllLmFwcGx5KG4sYXJndW1lbnRzKTt0aGlzLl9pbnZva2luZ0xpc3RlbmVycz0hMTtmb3IobGV0W2UsdF1vZiB0aGlzLl90b0FkZC5lbnRyaWVzKCkpZm9yKGxldCBuIG9mIHQpdWIodGhpcyx0aGlzLl9saXN0ZW5lcnMsZSxuKTt0aGlzLl90b0FkZC5jbGVhcigpO2ZvcihsZXRbZSx0XW9mIHRoaXMuX3RvUmVtb3ZlLmVudHJpZXMoKSlmb3IobGV0IG4gb2YgdClkYih0aGlzLHRoaXMuX2xpc3RlbmVycyxlLG4pO3RoaXMuX3RvUmVtb3ZlLmNsZWFyKCl9O3BsPUFmfSk7ZnVuY3Rpb24gJGkoZSl7dGhpcy5fY29tcGFyYXRvcj1lLmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gaGIoZSx0LG4pe2xldCBvPWVbdF07ZVt0XT1lW25dLGVbbl09b312YXIgY0Esc0E9WCgoKT0+e3NlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJGkucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fSxpbnRlcm5hbEFycmF5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXl9fSxtYXhpbXVtTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4aW11bUxlbmd0aH0sc2V0OmZ1bmN0aW9uKGUpe2xldCB0PXRoaXMuX2xlbmd0aDtpZihlPHQpe2xldCBuPXRoaXMuX2FycmF5O2ZvcihsZXQgbz1lO288dDsrK28pbltvXT12b2lkIDA7dGhpcy5fbGVuZ3RoPWUsbi5sZW5ndGg9ZX10aGlzLl9tYXhpbXVtTGVuZ3RoPWV9fSxjb21wYXJhdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn19fSk7JGkucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24oZSl7ZT1lPz90aGlzLl9sZW5ndGgsdGhpcy5fYXJyYXkubGVuZ3RoPWV9OyRpLnByb3RvdHlwZS5oZWFwaWZ5PWZ1bmN0aW9uKGUpe2U9ZT8/MDtsZXQgdD10aGlzLl9sZW5ndGgsbj10aGlzLl9jb21wYXJhdG9yLG89dGhpcy5fYXJyYXksYT0tMSxyPSEwO2Zvcig7cjspe2xldCBpPTIqKGUrMSksZj1pLTE7Zjx0JiZuKG9bZl0sb1tlXSk8MD9hPWY6YT1lLGk8dCYmbihvW2ldLG9bYV0pPDAmJihhPWkpLGEhPT1lPyhoYihvLGEsZSksZT1hKTpyPSExfX07JGkucHJvdG90eXBlLnJlc29ydD1mdW5jdGlvbigpe2xldCBlPXRoaXMuX2xlbmd0aDtmb3IobGV0IHQ9TWF0aC5jZWlsKGUvMik7dD49MDstLXQpdGhpcy5oZWFwaWZ5KHQpfTskaS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUpe2xldCB0PXRoaXMuX2FycmF5LG49dGhpcy5fY29tcGFyYXRvcixvPXRoaXMuX21heGltdW1MZW5ndGgsYT10aGlzLl9sZW5ndGgrKztmb3IoYTx0Lmxlbmd0aD90W2FdPWU6dC5wdXNoKGUpO2EhPT0wOyl7bGV0IGk9TWF0aC5mbG9vcigoYS0xKS8yKTtpZihuKHRbYV0sdFtpXSk8MCloYih0LGEsaSksYT1pO2Vsc2UgYnJlYWt9bGV0IHI7cmV0dXJuIGcobykmJnRoaXMuX2xlbmd0aD5vJiYocj10W29dLHRoaXMuX2xlbmd0aD1vKSxyfTskaS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGUpe2lmKGU9ZT8/MCx0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgdD10aGlzLl9hcnJheSxuPXRbZV07cmV0dXJuIGhiKHQsZSwtLXRoaXMuX2xlbmd0aCksdGhpcy5oZWFwaWZ5KGUpLHRbdGhpcy5fbGVuZ3RoXT12b2lkIDAsbn07Y0E9JGl9KTtmdW5jdGlvbiBCQyhlLHQpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9ZnVuY3Rpb24gVG4oKXt9ZnVuY3Rpb24gZkEoZSl7ZyhlLnByaW9yaXR5RnVuY3Rpb24pJiYoZS5wcmlvcml0eT1lLnByaW9yaXR5RnVuY3Rpb24oKSl9ZnVuY3Rpb24gZEEoZSl7cmV0dXJuIGUuc3RhdGU9PT1Dbi5VTklTU1VFRCYmKGUuc3RhdGU9Q24uSVNTVUVELGUuZGVmZXJyZWQ9UWkoKSksZS5kZWZlcnJlZC5wcm9taXNlfWZ1bmN0aW9uIExDKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihlLnN0YXRlPT09Q24uQ0FOQ0VMTEVEKXJldHVybjtsZXQgbj1lLmRlZmVycmVkOy0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSxfbC5yYWlzZUV2ZW50KCksZS5zdGF0ZT1Dbi5SRUNFSVZFRCxlLmRlZmVycmVkPXZvaWQgMCxuLnJlc29sdmUodCl9fWZ1bmN0aW9uIGpDKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLnN0YXRlIT09Q24uQ0FOQ0VMTEVEJiYoKytYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzLC0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSxfbC5yYWlzZUV2ZW50KHQpLGUuc3RhdGU9Q24uRkFJTEVELGUuZGVmZXJyZWQucmVqZWN0KHQpKX19ZnVuY3Rpb24gdUEoZSl7bGV0IHQ9ZEEoZSk7cmV0dXJuIGUuc3RhdGU9Q24uQUNUSVZFLGFyLnB1c2goZSksKytYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLCsrWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXIsKyt2cltlLnNlcnZlcktleV0sZS5yZXF1ZXN0RnVuY3Rpb24oKS50aGVuKExDKGUpKS5jYXRjaChqQyhlKSksdH1mdW5jdGlvbiBlYyhlKXtsZXQgdD1lLnN0YXRlPT09Q24uQUNUSVZFO2lmKGUuc3RhdGU9Q24uQ0FOQ0VMTEVELCsrWHQubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cyxnKGUuZGVmZXJyZWQpKXtsZXQgbj1lLmRlZmVycmVkO2UuZGVmZXJyZWQ9dm9pZCAwLG4ucmVqZWN0KCl9dCYmKC0tWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLXZyW2Uuc2VydmVyS2V5XSwrK1h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHMpLGcoZS5jYW5jZWxGdW5jdGlvbikmJmUuY2FuY2VsRnVuY3Rpb24oKX1mdW5jdGlvbiB6Qygpe1RuLmRlYnVnU2hvd1N0YXRpc3RpY3MmJihYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzPT09MCYmWHQubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM+MCYmKFh0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgYXR0ZW1wdGVkIHJlcXVlc3RzOiAke1h0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHN9YCksWHQubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz0wKSxYdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCByZXF1ZXN0czogJHtYdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzfWApLFh0Lm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCksWHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBjYW5jZWxsZWQgYWN0aXZlIHJlcXVlc3RzOiAke1h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHN9YCksWHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz0wKSxYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGZhaWxlZCByZXF1ZXN0czogJHtYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzfWApLFh0Lm51bWJlck9mRmFpbGVkUmVxdWVzdHM9MCkpLFh0Lmxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzPVh0Lm51bWJlck9mQWN0aXZlUmVxdWVzdHMpfXZhciBnbCxYdCxlcyxJbyxhcix2cixVQyxfbCx5bCxsQT1YKCgpPT57Z2w9Y2EodWkoKSwxKTtvYigpO3NlKCk7bGIoKTtzQSgpO2NiKCk7ZmIoKTttbCgpO1h0PXtudW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzOjAsbnVtYmVyT2ZBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzOjAsbnVtYmVyT2ZGYWlsZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyOjAsbGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM6MH0sZXM9MjAsSW89bmV3IGNBKHtjb21wYXJhdG9yOkJDfSk7SW8ubWF4aW11bUxlbmd0aD1lcztJby5yZXNlcnZlKGVzKTthcj1bXSx2cj17fSxVQz10eXBlb2YgZG9jdW1lbnQ8InUiP25ldyBnbC5kZWZhdWx0KGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpOm5ldyBnbC5kZWZhdWx0LF9sPW5ldyBwbDtUbi5tYXhpbXVtUmVxdWVzdHM9NTA7VG4ubWF4aW11bVJlcXVlc3RzUGVyU2VydmVyPTE4O1RuLnJlcXVlc3RzQnlTZXJ2ZXI9e307VG4udGhyb3R0bGVSZXF1ZXN0cz0hMDtUbi5kZWJ1Z1Nob3dTdGF0aXN0aWNzPSExO1RuLnJlcXVlc3RDb21wbGV0ZWRFdmVudD1fbDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUbix7c3RhdGlzdGljczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFh0fX0scHJpb3JpdHlIZWFwTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZXN9LHNldDpmdW5jdGlvbihlKXtpZihlPGVzKWZvcig7SW8ubGVuZ3RoPmU7KXtsZXQgdD1Jby5wb3AoKTtlYyh0KX1lcz1lLElvLm1heGltdW1MZW5ndGg9ZSxJby5yZXNlcnZlKGUpfX19KTtUbi5zZXJ2ZXJIYXNPcGVuU2xvdHM9ZnVuY3Rpb24oZSx0KXt0PXQ/PzE7bGV0IG49VG4ucmVxdWVzdHNCeVNlcnZlcltlXT8/VG4ubWF4aW11bVJlcXVlc3RzUGVyU2VydmVyO3JldHVybiB2cltlXSt0PD1ufTtUbi5oZWFwSGFzT3BlblNsb3RzPWZ1bmN0aW9uKGUpe3JldHVybiBJby5sZW5ndGgrZTw9ZXN9O1RuLnVwZGF0ZT1mdW5jdGlvbigpe2xldCBlLHQsbj0wLG89YXIubGVuZ3RoO2ZvcihlPTA7ZTxvOysrZSl7aWYodD1hcltlXSx0LmNhbmNlbGxlZCYmZWModCksdC5zdGF0ZSE9PUNuLkFDVElWRSl7KytuO2NvbnRpbnVlfW4+MCYmKGFyW2Utbl09dCl9YXIubGVuZ3RoLT1uO2xldCBhPUlvLmludGVybmFsQXJyYXkscj1Jby5sZW5ndGg7Zm9yKGU9MDtlPHI7KytlKWZBKGFbZV0pO0lvLnJlc29ydCgpO2xldCBpPU1hdGgubWF4KFRuLm1heGltdW1SZXF1ZXN0cy1hci5sZW5ndGgsMCksZj0wO2Zvcig7ZjxpJiZJby5sZW5ndGg+MDspe2lmKHQ9SW8ucG9wKCksdC5jYW5jZWxsZWQpe2VjKHQpO2NvbnRpbnVlfWlmKHQudGhyb3R0bGVCeVNlcnZlciYmIVRuLnNlcnZlckhhc09wZW5TbG90cyh0LnNlcnZlcktleSkpe2VjKHQpO2NvbnRpbnVlfXVBKHQpLCsrZn16QygpfTtUbi5nZXRTZXJ2ZXJLZXk9ZnVuY3Rpb24oZSl7bGV0IHQ9bmV3IGdsLmRlZmF1bHQoZSk7dC5zY2hlbWUoKT09PSIiJiYodD10LmFic29sdXRlVG8oVUMpLHQubm9ybWFsaXplKCkpO2xldCBuPXQuYXV0aG9yaXR5KCk7LzovLnRlc3Qobil8fChuPWAke259OiR7dC5zY2hlbWUoKT09PSJodHRwcyI/IjQ0MyI6IjgwIn1gKTtsZXQgbz12cltuXTtyZXR1cm4gZyhvKXx8KHZyW25dPTApLG59O1RuLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7aWYoaGwoZS51cmwpfHxsbChlLnVybCkpcmV0dXJuIF9sLnJhaXNlRXZlbnQoKSxlLnN0YXRlPUNuLlJFQ0VJVkVELGUucmVxdWVzdEZ1bmN0aW9uKCk7aWYoKytYdC5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzLGcoZS5zZXJ2ZXJLZXkpfHwoZS5zZXJ2ZXJLZXk9VG4uZ2V0U2VydmVyS2V5KGUudXJsKSksVG4udGhyb3R0bGVSZXF1ZXN0cyYmZS50aHJvdHRsZUJ5U2VydmVyJiYhVG4uc2VydmVySGFzT3BlblNsb3RzKGUuc2VydmVyS2V5KSlyZXR1cm47aWYoIVRuLnRocm90dGxlUmVxdWVzdHN8fCFlLnRocm90dGxlKXJldHVybiB1QShlKTtpZihhci5sZW5ndGg+PVRuLm1heGltdW1SZXF1ZXN0cylyZXR1cm47ZkEoZSk7bGV0IHQ9SW8uaW5zZXJ0KGUpO2lmKGcodCkpe2lmKHQ9PT1lKXJldHVybjtlYyh0KX1yZXR1cm4gZEEoZSl9O1RuLmNsZWFyRm9yU3BlY3M9ZnVuY3Rpb24oKXtmb3IoO0lvLmxlbmd0aD4wOyl7bGV0IHQ9SW8ucG9wKCk7ZWModCl9bGV0IGU9YXIubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTsrK3QpZWMoYXJbdF0pO2FyLmxlbmd0aD0wLHZyPXt9LFh0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM9MCxYdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzPTAsWHQubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wLFh0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHM9MCxYdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzPTAsWHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXI9MCxYdC5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz0wfTtUbi5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzQnlTZXJ2ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZyW2VdfTtUbi5yZXF1ZXN0SGVhcD1Jbzt5bD1Ubn0pO2Z1bmN0aW9uIEdDKGUpe2xldCB0PW5ldyBoQS5kZWZhdWx0KGUpO3Qubm9ybWFsaXplKCk7bGV0IG49dC5hdXRob3JpdHkoKTtpZihuLmxlbmd0aCE9PTApe2lmKHQuYXV0aG9yaXR5KG4pLG4uaW5kZXhPZigiQCIpIT09LTEmJihuPW4uc3BsaXQoIkAiKVsxXSksbi5pbmRleE9mKCI6Iik9PT0tMSl7bGV0IG89dC5zY2hlbWUoKTtpZihvLmxlbmd0aD09PTAmJihvPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCxvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtMSkpLG89PT0iaHR0cCIpbis9Ijo4MCI7ZWxzZSBpZihvPT09Imh0dHBzIiluKz0iOjQ0MyI7ZWxzZSByZXR1cm59cmV0dXJuIG59fXZhciBoQSx3Zix0cyxtYixtQT1YKCgpPT57aEE9Y2EodWkoKSwxKTtzZSgpO3dmPXt9LHRzPXt9O3dmLmFkZD1mdW5jdGlvbihlLHQpe2xldCBuPWAke2UudG9Mb3dlckNhc2UoKX06JHt0fWA7Zyh0c1tuXSl8fCh0c1tuXT0hMCl9O3dmLnJlbW92ZT1mdW5jdGlvbihlLHQpe2xldCBuPWAke2UudG9Mb3dlckNhc2UoKX06JHt0fWA7Zyh0c1tuXSkmJmRlbGV0ZSB0c1tuXX07d2YuY29udGFpbnM9ZnVuY3Rpb24oZSl7bGV0IHQ9R0MoZSk7cmV0dXJuISEoZyh0KSYmZyh0c1t0XSkpfTt3Zi5jbGVhcj1mdW5jdGlvbigpe3RzPXt9fTttYj13Zn0pO2Z1bmN0aW9uIERlKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3VybDplfSksdGhpcy5fdXJsPXZvaWQgMCx0aGlzLl90ZW1wbGF0ZVZhbHVlcz1ycihlLnRlbXBsYXRlVmFsdWVzLHt9KSx0aGlzLl9xdWVyeVBhcmFtZXRlcnM9cnIoZS5xdWVyeVBhcmFtZXRlcnMse30pLHRoaXMuaGVhZGVycz1ycihlLmhlYWRlcnMse30pLHRoaXMucmVxdWVzdD1lLnJlcXVlc3Q/P25ldyB0QSx0aGlzLnByb3h5PWUucHJveHksdGhpcy5yZXRyeUNhbGxiYWNrPWUucmV0cnlDYWxsYmFjayx0aGlzLnJldHJ5QXR0ZW1wdHM9ZS5yZXRyeUF0dGVtcHRzPz8wLHRoaXMuX3JldHJ5Q291bnQ9MCxlLnBhcnNlVXJsPz8hMD90aGlzLnBhcnNlVXJsKGUudXJsLCEwLCEwKTp0aGlzLl91cmw9ZS51cmwsdGhpcy5fY3JlZGl0cz1lLmNyZWRpdHN9ZnVuY3Rpb24gcnIoZSx0KXtyZXR1cm4gZyhlKT8kYyhlKTp0fWZ1bmN0aW9uIFZDKGUpe3JldHVybiBlLmxlbmd0aD09PTA/e306ZS5pbmRleE9mKCI9Iik9PT0tMT97W2VdOnZvaWQgMH06WjEoZSl9ZnVuY3Rpb24gd2woZSx0LG4pe2lmKCFuKXJldHVybiB5YShlLHQpO2xldCBvPSRjKGUsITApO2ZvcihsZXQgYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYSkpe2xldCByPW9bYV0saT10W2FdO2cocik/KEFycmF5LmlzQXJyYXkocil8fChyPW9bYV09W3JdKSxvW2FdPXIuY29uY2F0KGkpKTpvW2FdPUFycmF5LmlzQXJyYXkoaSk/aS5zbGljZSgpOml9cmV0dXJuIG99ZnVuY3Rpb24gSEMoZSl7bGV0IHQ9T2JqZWN0LmtleXMoZSk7cmV0dXJuIHQubGVuZ3RoPT09MD8iIjp0Lmxlbmd0aD09PTEmJiFnKGVbdFswXV0pP2A/JHt0WzBdfWA6YD8ke1kxKGUpfWB9ZnVuY3Rpb24gX0EoZSx0LG4pe2xldCBvPXt9O29bdF09bixlLnNldFF1ZXJ5UGFyYW1ldGVycyhvKTtsZXQgYT1lLnJlcXVlc3Qscj1lLnVybDthLnVybD1yLGEucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGY9UWkoKTtyZXR1cm4gd2luZG93W25dPWZ1bmN0aW9uKGQpe2YucmVzb2x2ZShkKTt0cnl7ZGVsZXRlIHdpbmRvd1tuXX1jYXRjaHt3aW5kb3dbbl09dm9pZCAwfX0sRGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdChyLG4sZiksZi5wcm9taXNlfTtsZXQgaT15bC5yZXF1ZXN0KGEpO2lmKGcoaSkpcmV0dXJuIGkuY2F0Y2goZnVuY3Rpb24oZil7cmV0dXJuIGEuc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoZik6ZS5yZXRyeU9uRXJyb3IoZikudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gZD8oYS5zdGF0ZT1Dbi5VTklTU1VFRCxhLmRlZmVycmVkPXZvaWQgMCxfQShlLHQsbikpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiBiYihlKXtpZihlLnN0YXRlPT09Q24uSVNTVUVEfHxlLnN0YXRlPT09Q24uQUNUSVZFKXRocm93IG5ldyB1dCgiVGhlIFJlc291cmNlIGlzIGFscmVhZHkgYmVpbmcgZmV0Y2hlZC4iKTtlLnN0YXRlPUNuLlVOSVNTVUVELGUuZGVmZXJyZWQ9dm9pZCAwfWZ1bmN0aW9uIEFsKGUsdCl7bGV0IG49ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3JldHVybiBlP2F0b2Iobik6bn1mdW5jdGlvbiBiQShlLHQpe2xldCBuPUFsKGUsdCksbz1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLGE9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspYVtyXT1uLmNoYXJDb2RlQXQocik7cmV0dXJuIG99ZnVuY3Rpb24gcUMoZSx0KXt0PXQ/PyIiO2xldCBuPWVbMV0sbz0hIWVbMl0sYT1lWzNdLHIsaTtzd2l0Y2godCl7Y2FzZSIiOmNhc2UidGV4dCI6cmV0dXJuIEFsKG8sYSk7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGJBKG8sYSk7Y2FzZSJibG9iIjpyZXR1cm4gcj1iQShvLGEpLG5ldyBCbG9iKFtyXSx7dHlwZTpufSk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGk9bmV3IERPTVBhcnNlcixpLnBhcnNlRnJvbVN0cmluZyhBbChvLGEpLG4pO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UoQWwobyxhKSk7ZGVmYXVsdDp9fWZ1bmN0aW9uIFdDKGUsdCxuLG8sYSxyLGkpe2ZldGNoKGUse21ldGhvZDpuLGhlYWRlcnM6YX0pLnRoZW4oYXN5bmMgZj0+e2lmKCFmLm9rKXtsZXQgZD17fTtmLmhlYWRlcnMuZm9yRWFjaCgoYyx1KT0+e2RbdV09Y30pLHIucmVqZWN0KG5ldyB5ZihmLnN0YXR1cyxmLGQpKTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UidGV4dCI6ci5yZXNvbHZlKGYudGV4dCgpKTticmVhaztjYXNlImpzb24iOnIucmVzb2x2ZShmLmpzb24oKSk7YnJlYWs7ZGVmYXVsdDpyLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoYXdhaXQgZi5hcnJheUJ1ZmZlcigpKS5idWZmZXIpO2JyZWFrfX0pLmNhdGNoKCgpPT57ci5yZWplY3QobmV3IHlmKX0pfXZhciBwQSxnQSxucyxLQyxYQyxBYSxvcz1YKCgpPT57cEE9Y2EodWkoKSwxKTt2MSgpO1VtKCk7RDEoKTt1bCgpO210KCk7b2IoKTtzZSgpO3JiKCk7ejEoKTtIMSgpO3ExKCk7Y2IoKTtzYigpO2ZiKCk7WDEoKTtHZSgpO0oxKCk7UTEoKTtuQSgpO2lBKCk7bEEoKTttbCgpO2phKCk7bUEoKTtnQT0oZnVuY3Rpb24oKXt0cnl7bGV0IGU9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBlLm9wZW4oIkdFVCIsIiMiLCEwKSxlLnJlc3BvbnNlVHlwZT0iYmxvYiIsZS5yZXNwb25zZVR5cGU9PT0iYmxvYiJ9Y2F0Y2h7cmV0dXJuITF9fSkoKTtEZS5jcmVhdGVJZk5lZWRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERlP2UuZ2V0RGVyaXZlZFJlc291cmNlKHtyZXF1ZXN0OmUucmVxdWVzdH0pOnR5cGVvZiBlIT0ic3RyaW5nIj9lOm5ldyBEZSh7dXJsOmV9KX07RGUuc3VwcG9ydHNJbWFnZUJpdG1hcE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZyhucyk/bnM6dHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwIT0iZnVuY3Rpb24iPyhucz1Qcm9taXNlLnJlc29sdmUoITEpLG5zKToobnM9RGUuZmV0Y2hCbG9iKHt1cmw6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBSUFBQUNRZDFQZUFBQUFCR2RCVFVFQUFFNGczckVpRGdBQUFDQmpTRkpOQUFCNkpnQUFnSVFBQVBvQUFBQ0E2QUFBZFRBQUFPcGdBQUE2bUFBQUYzQ2N1bEU4QUFBQURFbEVRVlFJMTJOZzZHQUFBQUVVQUluZ0UzWmlBQUFBQUVsRlRrU3VRbUNDIn0pLnRoZW4oZnVuY3Rpb24odCl7bGV0IG49e2ltYWdlT3JpZW50YXRpb246ImZsaXBZIixwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9O3JldHVybiBQcm9taXNlLmFsbChbY3JlYXRlSW1hZ2VCaXRtYXAodCxuKSxjcmVhdGVJbWFnZUJpdG1hcCh0KV0pfSkudGhlbihmdW5jdGlvbih0KXtsZXQgbj1pYih0WzBdKSxvPWliKHRbMV0pO3JldHVybiBuWzFdIT09b1sxXX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSxucyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERlLHtpc0Jsb2JTdXBwb3J0ZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBnQX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGUucHJvdG90eXBlLHtxdWVyeVBhcmFtZXRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtZXRlcnN9fSx0ZW1wbGF0ZVZhbHVlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RlbXBsYXRlVmFsdWVzfX0sdXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRVcmxDb21wb25lbnQoITAsITApfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5wYXJzZVVybChlLCExLCExKX19LGV4dGVuc2lvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYxKHRoaXMuX3VybCl9fSxpc0RhdGFVcmk6e2dldDpmdW5jdGlvbigpe3JldHVybiBobCh0aGlzLl91cmwpfX0saXNCbG9iVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbGwodGhpcy5fdXJsKX19LGlzQ3Jvc3NPcmlnaW5Vcmw6e2dldDpmdW5jdGlvbigpe3JldHVybiBfZih0aGlzLl91cmwpfX0saGFzSGVhZGVyczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVycykubGVuZ3RoPjB9fSxjcmVkaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlZGl0c319fSk7RGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX07RGUucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPW5ldyBwQS5kZWZhdWx0KGUpLHI9VkMoYS5xdWVyeSgpKTt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9dD93bChyLHRoaXMucXVlcnlQYXJhbWV0ZXJzLG4pOnIsYS5zZWFyY2goIiIpLGEuZnJhZ21lbnQoIiIpLGcobykmJmEuc2NoZW1lKCk9PT0iIiYmKGE9YS5hYnNvbHV0ZVRvKGdmKG8pKSksdGhpcy5fdXJsPWEudG9TdHJpbmcoKX07RGUucHJvdG90eXBlLmdldFVybENvbXBvbmVudD1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaXNEYXRhVXJpKXJldHVybiB0aGlzLl91cmw7bGV0IG49dGhpcy5fdXJsO2UmJihuPWAke259JHtIQyh0aGlzLnF1ZXJ5UGFyYW1ldGVycyl9YCksbj1uLnJlcGxhY2UoLyU3Qi9nLCJ7IikucmVwbGFjZSgvJTdEL2csIn0iKTtsZXQgbz10aGlzLl90ZW1wbGF0ZVZhbHVlcztyZXR1cm4gT2JqZWN0LmtleXMobykubGVuZ3RoPjAmJihuPW4ucmVwbGFjZSgveyguKj8pfS9nLGZ1bmN0aW9uKGEscil7bGV0IGk9b1tyXTtyZXR1cm4gZyhpKT9lbmNvZGVVUklDb21wb25lbnQoaSk6YX0pKSx0JiZnKHRoaXMucHJveHkpJiYobj10aGlzLnByb3h5LmdldFVSTChuKSksbn07RGUucHJvdG90eXBlLnNldFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbihlLHQpe3Q/dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPXdsKHRoaXMuX3F1ZXJ5UGFyYW1ldGVycyxlLCExKTp0aGlzLl9xdWVyeVBhcmFtZXRlcnM9d2woZSx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITEpfTtEZS5wcm90b3R5cGUuYXBwZW5kUXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKGUpe3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz13bChlLHRoaXMuX3F1ZXJ5UGFyYW1ldGVycywhMCl9O0RlLnByb3RvdHlwZS5zZXRUZW1wbGF0ZVZhbHVlcz1mdW5jdGlvbihlLHQpe3Q/dGhpcy5fdGVtcGxhdGVWYWx1ZXM9eWEodGhpcy5fdGVtcGxhdGVWYWx1ZXMsZSk6dGhpcy5fdGVtcGxhdGVWYWx1ZXM9eWEoZSx0aGlzLl90ZW1wbGF0ZVZhbHVlcyl9O0RlLnByb3RvdHlwZS5nZXREZXJpdmVkUmVzb3VyY2U9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5jbG9uZSgpO2lmKHQuX3JldHJ5Q291bnQ9MCxnKGUudXJsKSl7bGV0IG49ZS5wcmVzZXJ2ZVF1ZXJ5UGFyYW1ldGVycz8/ITE7dC5wYXJzZVVybChlLnVybCwhMCxuLHRoaXMuX3VybCl9cmV0dXJuIGcoZS5xdWVyeVBhcmFtZXRlcnMpJiYodC5fcXVlcnlQYXJhbWV0ZXJzPXlhKGUucXVlcnlQYXJhbWV0ZXJzLHQucXVlcnlQYXJhbWV0ZXJzKSksZyhlLnRlbXBsYXRlVmFsdWVzKSYmKHQuX3RlbXBsYXRlVmFsdWVzPXlhKGUudGVtcGxhdGVWYWx1ZXMsdC50ZW1wbGF0ZVZhbHVlcykpLGcoZS5oZWFkZXJzKSYmKHQuaGVhZGVycz15YShlLmhlYWRlcnMsdC5oZWFkZXJzKSksZyhlLnByb3h5KSYmKHQucHJveHk9ZS5wcm94eSksZyhlLnJlcXVlc3QpJiYodC5yZXF1ZXN0PWUucmVxdWVzdCksZyhlLnJldHJ5Q2FsbGJhY2spJiYodC5yZXRyeUNhbGxiYWNrPWUucmV0cnlDYWxsYmFjayksZyhlLnJldHJ5QXR0ZW1wdHMpJiYodC5yZXRyeUF0dGVtcHRzPWUucmV0cnlBdHRlbXB0cyksdH07RGUucHJvdG90eXBlLnJldHJ5T25FcnJvcj1mdW5jdGlvbihlKXtsZXQgdD10aGlzLnJldHJ5Q2FsbGJhY2s7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fHRoaXMuX3JldHJ5Q291bnQ+PXRoaXMucmV0cnlBdHRlbXB0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtsZXQgbj10aGlzO3JldHVybiBQcm9taXNlLnJlc29sdmUodCh0aGlzLGUpKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybisrbi5fcmV0cnlDb3VudCxvfSl9O0RlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKT8oZS5fdXJsPXRoaXMuX3VybCxlLl9xdWVyeVBhcmFtZXRlcnM9JGModGhpcy5fcXVlcnlQYXJhbWV0ZXJzKSxlLl90ZW1wbGF0ZVZhbHVlcz0kYyh0aGlzLl90ZW1wbGF0ZVZhbHVlcyksZS5oZWFkZXJzPSRjKHRoaXMuaGVhZGVycyksZS5wcm94eT10aGlzLnByb3h5LGUucmV0cnlDYWxsYmFjaz10aGlzLnJldHJ5Q2FsbGJhY2ssZS5yZXRyeUF0dGVtcHRzPXRoaXMucmV0cnlBdHRlbXB0cyxlLl9yZXRyeUNvdW50PTAsZS5yZXF1ZXN0PXRoaXMucmVxdWVzdC5jbG9uZSgpLGUpOm5ldyBEZSh7dXJsOnRoaXMuX3VybCxxdWVyeVBhcmFtZXRlcnM6dGhpcy5xdWVyeVBhcmFtZXRlcnMsdGVtcGxhdGVWYWx1ZXM6dGhpcy50ZW1wbGF0ZVZhbHVlcyxoZWFkZXJzOnRoaXMuaGVhZGVycyxwcm94eTp0aGlzLnByb3h5LHJldHJ5Q2FsbGJhY2s6dGhpcy5yZXRyeUNhbGxiYWNrLHJldHJ5QXR0ZW1wdHM6dGhpcy5yZXRyeUF0dGVtcHRzLHJlcXVlc3Q6dGhpcy5yZXF1ZXN0LmNsb25lKCkscGFyc2VVcmw6ITEsY3JlZGl0czpnKHRoaXMuY3JlZGl0cyk/dGhpcy5jcmVkaXRzLnNsaWNlKCk6dm9pZCAwfSl9O0RlLnByb3RvdHlwZS5nZXRCYXNlVXJpPWZ1bmN0aW9uKGUpe3JldHVybiBqMSh0aGlzLmdldFVybENvbXBvbmVudChlKSxlKX07RGUucHJvdG90eXBlLmFwcGVuZEZvcndhcmRTbGFzaD1mdW5jdGlvbigpe3RoaXMuX3VybD1rMSh0aGlzLl91cmwpfTtEZS5wcm90b3R5cGUuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pfTtEZS5mZXRjaEFycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hBcnJheUJ1ZmZlcigpfTtEZS5wcm90b3R5cGUuZmV0Y2hCbG9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToiYmxvYiJ9KX07RGUuZmV0Y2hCbG9iPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hCbG9iKCl9O0RlLnByb3RvdHlwZS5mZXRjaEltYWdlPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucHJlZmVySW1hZ2VCaXRtYXA/PyExLG49ZS5wcmVmZXJCbG9iPz8hMSxvPWUuZmxpcFk/PyExLGE9ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/PyExO2lmKGJiKHRoaXMucmVxdWVzdCksIWdBfHx0aGlzLmlzRGF0YVVyaXx8dGhpcy5pc0Jsb2JVcml8fCF0aGlzLmhhc0hlYWRlcnMmJiFuKXJldHVybiB0aGlzLl9mZXRjaEltYWdlKHtyZXNvdXJjZTp0aGlzLGZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOmEscHJlZmVySW1hZ2VCaXRtYXA6dH0pO2xldCByPXRoaXMuZmV0Y2hCbG9iKCk7aWYoIWcocikpcmV0dXJuO2xldCBpLGYsZCxjO3JldHVybiBEZS5zdXBwb3J0c0ltYWdlQml0bWFwT3B0aW9ucygpLnRoZW4oZnVuY3Rpb24odSl7cmV0dXJuIGk9dSxmPWkmJnQscn0pLnRoZW4oZnVuY3Rpb24odSl7aWYoIWcodSkpcmV0dXJuO2lmKGM9dSxmKXJldHVybiBEZS5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKHUse2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246YX0pO2xldCBsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHUpO3JldHVybiBkPW5ldyBEZSh7dXJsOmx9KSxkLl9mZXRjaEltYWdlKHtmbGlwWTpvLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjphLHByZWZlckltYWdlQml0bWFwOiExfSl9KS50aGVuKGZ1bmN0aW9uKHUpe2lmKGcodSkpcmV0dXJuIHUuYmxvYj1jLGZ8fHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGQudXJsKSx1fSkuY2F0Y2goZnVuY3Rpb24odSl7cmV0dXJuIGcoZCkmJndpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGQudXJsKSx1LmJsb2I9YyxQcm9taXNlLnJlamVjdCh1KX0pfTtEZS5wcm90b3R5cGUuX2ZldGNoSW1hZ2U9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcyxuPWUuZmxpcFksbz1lLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixhPWUucHJlZmVySW1hZ2VCaXRtYXAscj10LnJlcXVlc3Q7ci51cmw9dC51cmwsci5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj0hMTshdC5pc0RhdGFVcmkmJiF0LmlzQmxvYlVyaSYmKGY9dC5pc0Nyb3NzT3JpZ2luVXJsKTtsZXQgZD1RaSgpO3JldHVybiBEZS5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlKHIsZixkLG4sbyxhKSxkLnByb21pc2V9O2xldCBpPXlsLnJlcXVlc3Qocik7aWYoZyhpKSlyZXR1cm4gaS5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gci5zdGF0ZSE9PUNuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTp0LnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBkPyhyLnN0YXRlPUNuLlVOSVNTVUVELHIuZGVmZXJyZWQ9dm9pZCAwLHQuX2ZldGNoSW1hZ2Uoe2ZsaXBZOm4sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm8scHJlZmVySW1hZ2VCaXRtYXA6YX0pKTpQcm9taXNlLnJlamVjdChmKX0pfSl9O0RlLmZldGNoSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaEltYWdlKHtmbGlwWTplLmZsaXBZLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjplLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixwcmVmZXJCbG9iOmUucHJlZmVyQmxvYixwcmVmZXJJbWFnZUJpdG1hcDplLnByZWZlckltYWdlQml0bWFwfSl9O0RlLnByb3RvdHlwZS5mZXRjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pfTtEZS5mZXRjaFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaFRleHQoKX07RGUucHJvdG90eXBlLmZldGNoSnNvbj1mdW5jdGlvbigpe2xldCBlPXRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCovKjtxPTAuMDEifX0pO2lmKGcoZSkpcmV0dXJuIGUudGhlbihmdW5jdGlvbih0KXtpZihnKHQpKXJldHVybiBKU09OLnBhcnNlKHQpfSl9O0RlLmZldGNoSnNvbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmZldGNoSnNvbigpfTtEZS5wcm90b3R5cGUuZmV0Y2hYTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJkb2N1bWVudCIsb3ZlcnJpZGVNaW1lVHlwZToidGV4dC94bWwifSl9O0RlLmZldGNoWE1MPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hYTUwoKX07RGUucHJvdG90eXBlLmZldGNoSnNvbnA9ZnVuY3Rpb24oZSl7ZT1lPz8iY2FsbGJhY2siLGJiKHRoaXMucmVxdWVzdCk7bGV0IHQ7ZG8gdD1gbG9hZEpzb25wJHtrLm5leHRSYW5kb21OdW1iZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDgpfWA7d2hpbGUoZyh3aW5kb3dbdF0pKTtyZXR1cm4gX0EodGhpcyxlLHQpfTtEZS5mZXRjaEpzb25wPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkuZmV0Y2hKc29ucChlLmNhbGxiYWNrUGFyYW1ldGVyTmFtZSl9O0RlLnByb3RvdHlwZS5fbWFrZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcztiYih0LnJlcXVlc3QpO2xldCBuPXQucmVxdWVzdCxvPXQudXJsO24udXJsPW8sbi5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgcj1lLnJlc3BvbnNlVHlwZSxpPXlhKGUuaGVhZGVycyx0LmhlYWRlcnMpLGY9ZS5vdmVycmlkZU1pbWVUeXBlLGQ9ZS5tZXRob2QsYz1lLmRhdGEsdT1RaSgpLGw9RGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihvLHIsZCxjLGksdSxmKTtyZXR1cm4gZyhsKSYmZyhsLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXtsLmFib3J0KCl9KSx1LnByb21pc2V9O2xldCBhPXlsLnJlcXVlc3Qobik7aWYoZyhhKSlyZXR1cm4gYS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxyfSkuY2F0Y2goZnVuY3Rpb24ocil7cmV0dXJuIG4uY2FuY2VsRnVuY3Rpb249dm9pZCAwLG4uc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3Qocik6dC5yZXRyeU9uRXJyb3IocikudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gaT8obi5zdGF0ZT1Dbi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCx0LmZldGNoKGUpKTpQcm9taXNlLnJlamVjdChyKX0pfSl9O0tDPS9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvO0RlLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gZT1ycihlLHt9KSxlLm1ldGhvZD0iR0VUIix0aGlzLl9tYWtlUmVxdWVzdChlKX07RGUuZmV0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5mZXRjaCh7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cnIoZSx7fSksZS5tZXRob2Q9IkRFTEVURSIsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0RlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmRlbGV0ZSh7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlLGRhdGE6ZS5kYXRhfSl9O0RlLnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBlPXJyKGUse30pLGUubWV0aG9kPSJIRUFEIix0aGlzLl9tYWtlUmVxdWVzdChlKX07RGUuaGVhZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpLmhlYWQoe3Jlc3BvbnNlVHlwZTplLnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOmUub3ZlcnJpZGVNaW1lVHlwZX0pfTtEZS5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gZT1ycihlLHt9KSxlLm1ldGhvZD0iT1BUSU9OUyIsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0RlLm9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5vcHRpb25zKHtyZXNwb25zZVR5cGU6ZS5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTplLm92ZXJyaWRlTWltZVR5cGV9KX07RGUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgiZGF0YSIsZSksdD1ycih0LHt9KSx0Lm1ldGhvZD0iUE9TVCIsdC5kYXRhPWUsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0RlLnBvc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEZShlKS5wb3N0KGUuZGF0YSx7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgiZGF0YSIsZSksdD1ycih0LHt9KSx0Lm1ldGhvZD0iUFVUIix0LmRhdGE9ZSx0aGlzLl9tYWtlUmVxdWVzdCh0KX07RGUucHV0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkucHV0KGUuZGF0YSx7cmVzcG9uc2VUeXBlOmUucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6ZS5vdmVycmlkZU1pbWVUeXBlfSl9O0RlLnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBNbi5kZWZpbmVkKCJkYXRhIixlKSx0PXJyKHQse30pLHQubWV0aG9kPSJQQVRDSCIsdC5kYXRhPWUsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0RlLnBhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoZSkucGF0Y2goZS5kYXRhLHtyZXNwb25zZVR5cGU6ZS5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTplLm92ZXJyaWRlTWltZVR5cGV9KX07RGUuX0ltcGxlbWVudGF0aW9ucz17fTtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPW5ldyBJbWFnZTtvLm9ubG9hZD1mdW5jdGlvbigpe28ubmF0dXJhbFdpZHRoPT09MCYmby5uYXR1cmFsSGVpZ2h0PT09MCYmby53aWR0aD09PTAmJm8uaGVpZ2h0PT09MCYmKG8ud2lkdGg9MzAwLG8uaGVpZ2h0PTE1MCksbi5yZXNvbHZlKG8pfSxvLm9uZXJyb3I9ZnVuY3Rpb24oYSl7bi5yZWplY3QoYSl9LHQmJihtYi5jb250YWlucyhlKT9vLmNyb3NzT3JpZ2luPSJ1c2UtY3JlZGVudGlhbHMiOm8uY3Jvc3NPcmlnaW49IiIpLG8uc3JjPWV9O0RlLl9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS51cmw7RGUuc3VwcG9ydHNJbWFnZUJpdG1hcE9wdGlvbnMoKS50aGVuKGZ1bmN0aW9uKGQpe2lmKCEoZCYmcikpe0RlLl9JbXBsZW1lbnRhdGlvbnMubG9hZEltYWdlRWxlbWVudChmLHQsbik7cmV0dXJufWxldCBjPSJibG9iIix1PSJHRVQiLGw9UWkoKSxoPURlLl9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHIoZixjLHUsdm9pZCAwLGksbCx2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGcoaCkmJmcoaC5hYm9ydCkmJihlLmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aC5hYm9ydCgpfSksbC5wcm9taXNlLnRoZW4oZnVuY3Rpb24obSl7aWYoIWcobSkpe24ucmVqZWN0KG5ldyB1dChgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAke2Z9IGJ1dCBpdCBjb250YWluZWQgbm8gY29udGVudC5gKSk7cmV0dXJufXJldHVybiBEZS5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKG0se2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246YX0pfSkudGhlbihmdW5jdGlvbihtKXtuLnJlc29sdmUobSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGQpe24ucmVqZWN0KGQpfSl9O0RlLmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTW4uZGVmaW5lZCgib3B0aW9ucyIsdCksTW4udHlwZU9mLmJvb2woIm9wdGlvbnMuZmxpcFkiLHQuZmxpcFkpLE1uLnR5cGVPZi5ib29sKCJvcHRpb25zLnByZW11bHRpcGx5QWxwaGEiLHQucHJlbXVsdGlwbHlBbHBoYSksTW4udHlwZU9mLmJvb2woIm9wdGlvbnMuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uIix0LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbiksY3JlYXRlSW1hZ2VCaXRtYXAoZSx7aW1hZ2VPcmllbnRhdGlvbjp0LmZsaXBZPyJmbGlwWSI6Im5vbmUiLHByZW11bHRpcGx5QWxwaGE6dC5wcmVtdWx0aXBseUFscGhhPyJwcmVtdWx0aXBseSI6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOnQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPyJub25lIjoiZGVmYXVsdCJ9KX07WEM9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PiJ1IjtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPUtDLmV4ZWMoZSk7aWYoZiE9PW51bGwpe3IucmVzb2x2ZShxQyhmLHQpKTtyZXR1cm59aWYoWEMpe1dDKGUsdCxuLG8sYSxyLGkpO3JldHVybn1sZXQgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYobWIuY29udGFpbnMoZSkmJihkLndpdGhDcmVkZW50aWFscz0hMCksZC5vcGVuKG4sZSwhMCksZyhpKSYmZyhkLm92ZXJyaWRlTWltZVR5cGUpJiZkLm92ZXJyaWRlTWltZVR5cGUoaSksZyhhKSlmb3IobGV0IHUgaW4gYSlhLmhhc093blByb3BlcnR5KHUpJiZkLnNldFJlcXVlc3RIZWFkZXIodSxhW3VdKTtnKHQpJiYoZC5yZXNwb25zZVR5cGU9dCk7bGV0IGM9ITE7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGM9ZS5pbmRleE9mKCJmaWxlOi8vIik9PT0wfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmxvY2F0aW9uLm9yaWdpbj09PSJmaWxlOi8vIiksZC5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigoZC5zdGF0dXM8MjAwfHxkLnN0YXR1cz49MzAwKSYmIShjJiZkLnN0YXR1cz09PTApKXtyLnJlamVjdChuZXcgeWYoZC5zdGF0dXMsZC5yZXNwb25zZSxkLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSk7cmV0dXJufWxldCB1PWQucmVzcG9uc2UsbD1kLnJlc3BvbnNlVHlwZTtpZihuPT09IkhFQUQifHxuPT09Ik9QVElPTlMiKXtsZXQgbT1kLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnRyaW0oKS5zcGxpdCgvW1xyXG5dKy8pLGI9e307bS5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCB5PXAuc3BsaXQoIjogIiksRT15LnNoaWZ0KCk7YltFXT15LmpvaW4oIjogIil9KSxyLnJlc29sdmUoYik7cmV0dXJufWlmKGQuc3RhdHVzPT09MjA0KXIucmVzb2x2ZSh2b2lkIDApO2Vsc2UgaWYoZyh1KSYmKCFnKHQpfHxsPT09dCkpci5yZXNvbHZlKHUpO2Vsc2UgaWYodD09PSJqc29uIiYmdHlwZW9mIHU9PSJzdHJpbmciKXRyeXtyLnJlc29sdmUoSlNPTi5wYXJzZSh1KSl9Y2F0Y2goaCl7ci5yZWplY3QoaCl9ZWxzZShsPT09IiJ8fGw9PT0iZG9jdW1lbnQiKSYmZyhkLnJlc3BvbnNlWE1MKSYmZC5yZXNwb25zZVhNTC5oYXNDaGlsZE5vZGVzKCk/ci5yZXNvbHZlKGQucmVzcG9uc2VYTUwpOihsPT09IiJ8fGw9PT0idGV4dCIpJiZnKGQucmVzcG9uc2VUZXh0KT9yLnJlc29sdmUoZC5yZXNwb25zZVRleHQpOnIucmVqZWN0KG5ldyB1dCgiSW52YWxpZCBYTUxIdHRwUmVxdWVzdCByZXNwb25zZSB0eXBlLiIpKX0sZC5vbmVycm9yPWZ1bmN0aW9uKHUpe3IucmVqZWN0KG5ldyB5Zil9LGQuc2VuZChvKSxkfTtEZS5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVzEoZSx0KS5jYXRjaChmdW5jdGlvbihvKXtuLnJlamVjdChvKX0pfTtEZS5fRGVmYXVsdEltcGxlbWVudGF0aW9ucz17fTtEZS5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5jcmVhdGVJbWFnZT1EZS5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlO0RlLl9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPURlLl9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI7RGUuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9RGUuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdDtEZS5ERUZBVUxUPU9iamVjdC5mcmVlemUobmV3IERlKHt1cmw6dHlwZW9mIGRvY3VtZW50PiJ1Ij8iIjpkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnNwbGl0KCI/IilbMF19KSk7QWE9RGV9KTtmdW5jdGlvbiBUZihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLl9kYXRlcz12b2lkIDAsdGhpcy5fc2FtcGxlcz12b2lkIDAsdGhpcy5fZGF0ZUNvbHVtbj0tMSx0aGlzLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj0tMSx0aGlzLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj0tMSx0aGlzLl9jb2x1bW5Db3VudD0wLHRoaXMuX2xhc3RJbmRleD0tMSx0aGlzLl9hZGROZXdMZWFwU2Vjb25kcz1lLmFkZE5ld0xlYXBTZWNvbmRzPz8hMCxnKGUuZGF0YSk/eUEodGhpcyxlLmRhdGEpOnlBKHRoaXMse2NvbHVtbk5hbWVzOlsiZGF0ZUlzbzg2MDEiLCJtb2RpZmllZEp1bGlhbkRhdGVVdGMiLCJ4UG9sZVdhbmRlclJhZGlhbnMiLCJ5UG9sZVdhbmRlclJhZGlhbnMiLCJ1dDFNaW51c1V0Y1NlY29uZHMiLCJsZW5ndGhPZkRheUNvcnJlY3Rpb25TZWNvbmRzIiwieENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwidGFpTWludXNVdGNTZWNvbmRzIl0sc2FtcGxlczpbXX0pfWZ1bmN0aW9uIFlDKGUsdCl7cmV0dXJuIEpuLmNvbXBhcmUoZS5qdWxpYW5EYXRlLHQpfWZ1bmN0aW9uIHlBKGUsdCl7aWYoIWcodC5jb2x1bW5OYW1lcykpdGhyb3cgbmV3IHV0KCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBjb2x1bW5OYW1lcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtpZighZyh0LnNhbXBsZXMpKXRocm93IG5ldyB1dCgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgc2FtcGxlcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmNvbHVtbk5hbWVzLmluZGV4T2YoIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIpLG89dC5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4UG9sZVdhbmRlclJhZGlhbnMiKSxhPXQuY29sdW1uTmFtZXMuaW5kZXhPZigieVBvbGVXYW5kZXJSYWRpYW5zIikscj10LmNvbHVtbk5hbWVzLmluZGV4T2YoInV0MU1pbnVzVXRjU2Vjb25kcyIpLGk9dC5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSxmPXQuY29sdW1uTmFtZXMuaW5kZXhPZigieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiksZD10LmNvbHVtbk5hbWVzLmluZGV4T2YoInRhaU1pbnVzVXRjU2Vjb25kcyIpO2lmKG48MHx8bzwwfHxhPDB8fHI8MHx8aTwwfHxmPDB8fGQ8MCl0aHJvdyBuZXcgdXQoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IG11c3QgaW5jbHVkZSBtb2RpZmllZEp1bGlhbkRhdGVVdGMsIHhQb2xlV2FuZGVyUmFkaWFucywgeVBvbGVXYW5kZXJSYWRpYW5zLCB1dDFNaW51c1V0Y1NlY29uZHMsIHhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucywgeUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCBhbmQgdGFpTWludXNVdGNTZWNvbmRzIGNvbHVtbnMiKTtsZXQgYz1lLl9zYW1wbGVzPXQuc2FtcGxlcyx1PWUuX2RhdGVzPVtdO2UuX2RhdGVDb2x1bW49bixlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49byxlLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49YSxlLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW49cixlLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49aSxlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49ZixlLl90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW49ZCxlLl9jb2x1bW5Db3VudD10LmNvbHVtbk5hbWVzLmxlbmd0aCxlLl9sYXN0SW5kZXg9dm9pZCAwO2xldCBsLGg9ZS5fYWRkTmV3TGVhcFNlY29uZHM7Zm9yKGxldCBtPTAsYj1jLmxlbmd0aDttPGI7bSs9ZS5fY29sdW1uQ291bnQpe2xldCBwPWNbbStuXSx5PWNbbStkXSxFPXArZ24uTU9ESUZJRURfSlVMSUFOX0RBVEVfRElGRkVSRU5DRSxfPW5ldyBKbihFLHkseXQuVEFJKTtpZih1LnB1c2goXyksaCl7aWYoeSE9PWwmJmcobCkpe2xldCBUPUpuLmxlYXBTZWNvbmRzLHc9X2EoVCxfLFlDKTtpZih3PDApe2xldCBSPW5ldyBRdChfLHkpO1Quc3BsaWNlKH53LDAsUil9fWw9eX19fWZ1bmN0aW9uIEFBKGUsdCxuLG8sYSl7bGV0IHI9bipvO2EueFBvbGVXYW5kZXI9dFtyK2UuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sYS55UG9sZVdhbmRlcj10W3IrZS5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxhLnhQb2xlT2Zmc2V0PXRbcitlLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLGEueVBvbGVPZmZzZXQ9dFtyK2UuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sYS51dDFNaW51c1V0Yz10W3IrZS5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXX1mdW5jdGlvbiBFZihlLHQsbil7cmV0dXJuIHQrZSoobi10KX1mdW5jdGlvbiB3QShlLHQsbixvLGEscixpKXtsZXQgZj1lLl9jb2x1bW5Db3VudDtpZihyPnQubGVuZ3RoLTEpcmV0dXJuIGkueFBvbGVXYW5kZXI9MCxpLnlQb2xlV2FuZGVyPTAsaS54UG9sZU9mZnNldD0wLGkueVBvbGVPZmZzZXQ9MCxpLnV0MU1pbnVzVXRjPTAsaTtsZXQgZD10W2FdLGM9dFtyXTtpZihkLmVxdWFscyhjKXx8by5lcXVhbHMoZCkpcmV0dXJuIEFBKGUsbixhLGYsaSksaTtpZihvLmVxdWFscyhjKSlyZXR1cm4gQUEoZSxuLHIsZixpKSxpO2xldCB1PUpuLnNlY29uZHNEaWZmZXJlbmNlKG8sZCkvSm4uc2Vjb25kc0RpZmZlcmVuY2UoYyxkKSxsPWEqZixoPXIqZixtPW5bbCtlLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dLGI9bltoK2UuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0scD1iLW07aWYocD4uNXx8cDwtLjUpe2xldCB5PW5bbCtlLl90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW5dLEU9bltoK2UuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl07eSE9PUUmJihjLmVxdWFscyhvKT9tPWI6Yi09RS15KX1yZXR1cm4gaS54UG9sZVdhbmRlcj1FZih1LG5bbCtlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLG5baCtlLl94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dKSxpLnlQb2xlV2FuZGVyPUVmKHUsbltsK2UuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltoK2UuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLGkueFBvbGVPZmZzZXQ9RWYodSxuW2wrZS5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxuW2grZS5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSksaS55UG9sZU9mZnNldD1FZih1LG5bbCtlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5baCtlLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxpLnV0MU1pbnVzVXRjPUVmKHUsbSxiKSxpfXZhciBFQSxUQT1YKCgpPT57bmwoKTttdCgpO3NlKCk7WG0oKTtjbCgpO1ptKCk7b3MoKTtqYSgpO29sKCk7YWwoKTtUZi5mcm9tVXJsPWFzeW5jIGZ1bmN0aW9uKGUsdCl7dD10Pz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IG49QWEuY3JlYXRlSWZOZWVkZWQoZSksbzt0cnl7bz1hd2FpdCBuLmZldGNoSnNvbigpfWNhdGNoe3Rocm93IG5ldyB1dChgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmV0cmlldmluZyB0aGUgRU9QIGRhdGEgZnJvbSB0aGUgVVJMICR7bi51cmx9LmApfXJldHVybiBuZXcgVGYoe2FkZE5ld0xlYXBTZWNvbmRzOnQuYWRkTmV3TGVhcFNlY29uZHMsZGF0YTpvfSl9O1RmLk5PTkU9T2JqZWN0LmZyZWV6ZSh7Y29tcHV0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0LnhQb2xlV2FuZGVyPTAsdC55UG9sZVdhbmRlcj0wLHQueFBvbGVPZmZzZXQ9MCx0LnlQb2xlT2Zmc2V0PTAsdC51dDFNaW51c1V0Yz0wKTp0PW5ldyBiZigwLDAsMCwwLDApLHR9fSk7VGYucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oZSx0KXtpZighZyh0aGlzLl9zYW1wbGVzKSlyZXR1cm47aWYoZyh0KXx8KHQ9bmV3IGJmKDAsMCwwLDAsMCkpLHRoaXMuX3NhbXBsZXMubGVuZ3RoPT09MClyZXR1cm4gdC54UG9sZVdhbmRlcj0wLHQueVBvbGVXYW5kZXI9MCx0LnhQb2xlT2Zmc2V0PTAsdC55UG9sZU9mZnNldD0wLHQudXQxTWludXNVdGM9MCx0O2xldCBuPXRoaXMuX2RhdGVzLG89dGhpcy5fbGFzdEluZGV4LGE9MCxyPTA7aWYoZyhvKSl7bGV0IGY9bltvXSxkPW5bbysxXSxjPUpuLmxlc3NUaGFuT3JFcXVhbHMoZixlKSx1PSFnKGQpLGw9dXx8Sm4uZ3JlYXRlclRoYW5PckVxdWFscyhkLGUpO2lmKGMmJmwpcmV0dXJuIGE9bywhdSYmZC5lcXVhbHMoZSkmJisrYSxyPWErMSx3QSh0aGlzLG4sdGhpcy5fc2FtcGxlcyxlLGEscix0KSx0fWxldCBpPV9hKG4sZSxKbi5jb21wYXJlLHRoaXMuX2RhdGVDb2x1bW4pO3JldHVybiBpPj0wPyhpPG4ubGVuZ3RoLTEmJm5baSsxXS5lcXVhbHMoZSkmJisraSxhPWkscj1pKToocj1+aSxhPXItMSxhPDAmJihhPTApKSx0aGlzLl9sYXN0SW5kZXg9YSx3QSh0aGlzLG4sdGhpcy5fc2FtcGxlcyxlLGEscix0KSx0fTtFQT1UZn0pO2Z1bmN0aW9uIFBvKGUsdCxuKXt0aGlzLmhlYWRpbmc9ZT8/MCx0aGlzLnBpdGNoPXQ/PzAsdGhpcy5yb2xsPW4/PzB9dmFyIEVsLFJBPVgoKCk9PntzZSgpO0dlKCk7UG8uZnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgUG8pO2xldCBuPTIqKGUudyplLnktZS56KmUueCksbz0xLTIqKGUueCplLngrZS55KmUueSksYT0yKihlLncqZS54K2UueSplLnopLHI9MS0yKihlLnkqZS55K2UueiplLnopLGk9MiooZS53KmUueitlLngqZS55KTtyZXR1cm4gdC5oZWFkaW5nPS1NYXRoLmF0YW4yKGksciksdC5yb2xsPU1hdGguYXRhbjIoYSxvKSx0LnBpdGNoPS1rLmFzaW5DbGFtcGVkKG4pLHR9O1BvLmZyb21EZWdyZWVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBnKG8pfHwobz1uZXcgUG8pLG8uaGVhZGluZz1lKmsuUkFESUFOU19QRVJfREVHUkVFLG8ucGl0Y2g9dCprLlJBRElBTlNfUEVSX0RFR1JFRSxvLnJvbGw9biprLlJBRElBTlNfUEVSX0RFR1JFRSxvfTtQby5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQuaGVhZGluZz1lLmhlYWRpbmcsdC5waXRjaD1lLnBpdGNoLHQucm9sbD1lLnJvbGwsdCk6bmV3IFBvKGUuaGVhZGluZyxlLnBpdGNoLGUucm9sbCl9O1BvLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS5oZWFkaW5nPT09dC5oZWFkaW5nJiZlLnBpdGNoPT09dC5waXRjaCYmZS5yb2xsPT09dC5yb2xsfTtQby5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmay5lcXVhbHNFcHNpbG9uKGUuaGVhZGluZyx0LmhlYWRpbmcsbixvKSYmay5lcXVhbHNFcHNpbG9uKGUucGl0Y2gsdC5waXRjaCxuLG8pJiZrLmVxdWFsc0Vwc2lsb24oZS5yb2xsLHQucm9sbCxuLG8pfTtQby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFBvLmNsb25lKHRoaXMsZSl9O1BvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBvLmVxdWFscyh0aGlzLGUpfTtQby5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFBvLmVxdWFsc0Vwc2lsb24odGhpcyxlLHQsbil9O1BvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLmhlYWRpbmd9LCAke3RoaXMucGl0Y2h9LCAke3RoaXMucm9sbH0pYH07RWw9UG99KTtmdW5jdGlvbiBKQygpe2xldCBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpe2xldCBvPWVbdF0uZ2V0QXR0cmlidXRlKCJzcmMiKSxhPU9BLmV4ZWMobyk7aWYoYSE9PW51bGwpcmV0dXJuIGFbMV19fWZ1bmN0aW9uIFNBKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+InUiP2U6KGcoVGwpfHwoVGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxUbC5ocmVmPWUsVGwuaHJlZil9ZnVuY3Rpb24gQ0EoKXtpZihnKHRjKSlyZXR1cm4gdGM7bGV0IGU7cmV0dXJuIHR5cGVvZiBDRVNJVU1fQkFTRV9VUkw8InUiP2U9Q0VTSVVNX0JBU0VfVVJMOmcoeEE/LnVybCk/ZT1nZigiLiIseEEudXJsKTp0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmZyhkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmcoYmEudG9VcmwpP2U9Z2YoIi4uIixuYygiQ29yZS9idWlsZE1vZHVsZVVybC5qcyIpKTplPUpDKCksdGM9bmV3IEFhKHt1cmw6U0EoZSl9KSx0Yy5hcHBlbmRGb3J3YXJkU2xhc2goKSx0Y31mdW5jdGlvbiBaQyhlKXtyZXR1cm4gU0EoYmEudG9VcmwoYC4uLyR7ZX1gKSl9ZnVuY3Rpb24gTUEoZSl7cmV0dXJuIENBKCkuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6ZX0pLnVybH1mdW5jdGlvbiBuYyhlKXtyZXR1cm4gZyhSbCl8fCh0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmZyhkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmcoYmEudG9VcmwpP1JsPVpDOlJsPU1BKSxSbChlKX12YXIgeEEsT0EsVGwsdGMsUmwsaXIseGw9WCgoKT0+e3NlKCk7cmIoKTtvcygpO3hBPXt9LE9BPS8oKD86LipcLyl8XilDZXNpdW1cLmpzKD86XD98XCN8JCkvO25jLl9jZXNpdW1TY3JpcHRSZWdleD1PQTtuYy5fYnVpbGRNb2R1bGVVcmxGcm9tQmFzZVVybD1NQTtuYy5fY2xlYXJCYXNlUmVzb3VyY2U9ZnVuY3Rpb24oKXt0Yz12b2lkIDB9O25jLnNldEJhc2VVcmw9ZnVuY3Rpb24oZSl7dGM9QWEuREVGQVVMVC5nZXREZXJpdmVkUmVzb3VyY2Uoe3VybDplfSl9O25jLmdldENlc2l1bUJhc2VVcmw9Q0E7aXI9bmN9KTtmdW5jdGlvbiBRQyhlLHQsbil7dGhpcy54PWUsdGhpcy55PXQsdGhpcy5zPW59dmFyIE9sLHBiPVgoKCk9PntPbD1RQ30pO2Z1bmN0aW9uIHliKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuX3h5c0ZpbGVVcmxUZW1wbGF0ZT1BYS5jcmVhdGVJZk5lZWRlZChlLnh5c0ZpbGVVcmxUZW1wbGF0ZSksdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyPWUuaW50ZXJwb2xhdGlvbk9yZGVyPz85LHRoaXMuX3NhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPWUuc2FtcGxlWmVyb0p1bGlhbkVwaGVtZXJpc0RhdGU/PzI0NDIzOTY1ZS0xLHRoaXMuX3NhbXBsZVplcm9EYXRlVFQ9bmV3IEpuKHRoaXMuX3NhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlLDAseXQuVEFJKSx0aGlzLl9zdGVwU2l6ZURheXM9ZS5zdGVwU2l6ZURheXM/PzEsdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGU9ZS5zYW1wbGVzUGVyWHlzRmlsZT8/MWUzLHRoaXMuX3RvdGFsU2FtcGxlcz1lLnRvdGFsU2FtcGxlcz8/Mjc0MjYsdGhpcy5fc2FtcGxlcz1uZXcgQXJyYXkodGhpcy5fdG90YWxTYW1wbGVzKjMpLHRoaXMuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzcz1bXTtsZXQgdD10aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXIsbj10aGlzLl9kZW5vbWluYXRvcnM9bmV3IEFycmF5KHQrMSksbz10aGlzLl94VGFibGU9bmV3IEFycmF5KHQrMSksYT1NYXRoLnBvdyh0aGlzLl9zdGVwU2l6ZURheXMsdCk7Zm9yKGxldCByPTA7cjw9dDsrK3Ipe25bcl09YSxvW3JdPXIqdGhpcy5fc3RlcFNpemVEYXlzO2ZvcihsZXQgaT0wO2k8PXQ7KytpKWkhPT1yJiYobltyXSo9ci1pKTtuW3JdPTEvbltyXX10aGlzLl93b3JrPW5ldyBBcnJheSh0KzEpLHRoaXMuX2NvZWY9bmV3IEFycmF5KHQrMSl9ZnVuY3Rpb24gZ2IoZSx0LG4pe2xldCBvPSRDO3JldHVybiBvLmRheU51bWJlcj10LG8uc2Vjb25kc09mRGF5PW4sSm4uZGF5c0RpZmZlcmVuY2UobyxlLl9zYW1wbGVaZXJvRGF0ZVRUKX1mdW5jdGlvbiBfYihlLHQpe2lmKGUuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1t0XSlyZXR1cm4gZS5fY2h1bmtEb3dubG9hZHNJblByb2dyZXNzW3RdO2xldCBuLG89ZS5feHlzRmlsZVVybFRlbXBsYXRlO2cobyk/bj1vLmdldERlcml2ZWRSZXNvdXJjZSh7dGVtcGxhdGVWYWx1ZXM6ezA6dH19KTpuPW5ldyBBYSh7dXJsOmlyKGBBc3NldHMvSUFVMjAwNl9YWVMvSUFVMjAwNl9YWVNfJHt0fS5qc29uYCl9KTtsZXQgYT1uLmZldGNoSnNvbigpLnRoZW4oZnVuY3Rpb24ocil7ZS5fY2h1bmtEb3dubG9hZHNJblByb2dyZXNzW3RdPSExO2xldCBpPWUuX3NhbXBsZXMsZj1yLnNhbXBsZXMsZD10KmUuX3NhbXBsZXNQZXJYeXNGaWxlKjM7Zm9yKGxldCBjPTAsdT1mLmxlbmd0aDtjPHU7KytjKWlbZCtjXT1mW2NdfSk7cmV0dXJuIGUuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1t0XT1hLGF9dmFyICRDLE5BLElBPVgoKCk9Pnt4bCgpO210KCk7c2UoKTtwYigpO2NsKCk7b3MoKTthbCgpOyRDPW5ldyBKbigwLDAseXQuVEFJKTt5Yi5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1nYih0aGlzLGUsdCkscj1nYih0aGlzLG4sbyksaT1hL3RoaXMuX3N0ZXBTaXplRGF5cy10aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXIvMnwwO2k8MCYmKGk9MCk7bGV0IGY9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MCt0aGlzLl9pbnRlcnBvbGF0aW9uT3JkZXI7Zj49dGhpcy5fdG90YWxTYW1wbGVzJiYoZj10aGlzLl90b3RhbFNhbXBsZXMtMSk7bGV0IGQ9aS90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwLGM9Zi90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwLHU9W107Zm9yKGxldCBsPWQ7bDw9YzsrK2wpdS5wdXNoKF9iKHRoaXMsbCkpO3JldHVybiBQcm9taXNlLmFsbCh1KX07eWIucHJvdG90eXBlLmNvbXB1dGVYeXNSYWRpYW5zPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1nYih0aGlzLGUsdCk7aWYobzwwKXJldHVybjtsZXQgYT1vL3RoaXMuX3N0ZXBTaXplRGF5c3wwO2lmKGE+PXRoaXMuX3RvdGFsU2FtcGxlcylyZXR1cm47bGV0IHI9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLGk9YS0oci8yfDApO2k8MCYmKGk9MCk7bGV0IGY9aStyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEsaT1mLXIsaTwwJiYoaT0wKSk7bGV0IGQ9ITEsYz10aGlzLl9zYW1wbGVzO2lmKGcoY1tpKjNdKXx8KF9iKHRoaXMsaS90aGlzLl9zYW1wbGVzUGVyWHlzRmlsZXwwKSxkPSEwKSxnKGNbZiozXSl8fChfYih0aGlzLGYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksZD0hMCksZClyZXR1cm47ZyhuKT8obi54PTAsbi55PTAsbi5zPTApOm49bmV3IE9sKDAsMCwwKTtsZXQgdT1vLWkqdGhpcy5fc3RlcFNpemVEYXlzLGw9dGhpcy5fd29yayxoPXRoaXMuX2Rlbm9taW5hdG9ycyxtPXRoaXMuX2NvZWYsYj10aGlzLl94VGFibGUscCx5O2ZvcihwPTA7cDw9cjsrK3ApbFtwXT11LWJbcF07Zm9yKHA9MDtwPD1yOysrcCl7Zm9yKG1bcF09MSx5PTA7eTw9cjsrK3kpeSE9PXAmJihtW3BdKj1sW3ldKTttW3BdKj1oW3BdO2xldCBFPShpK3ApKjM7bi54Kz1tW3BdKmNbRSsrXSxuLnkrPW1bcF0qY1tFKytdLG4ucys9bVtwXSpjW0VdfXJldHVybiBufTtOQT15Yn0pO3ZhciBsaSxCbixZbyxQQSxrQT1YKCgpPT57c2UoKTtCbj17cmVxdWVzdEZ1bGxzY3JlZW46dm9pZCAwLGV4aXRGdWxsc2NyZWVuOnZvaWQgMCxmdWxsc2NyZWVuRW5hYmxlZDp2b2lkIDAsZnVsbHNjcmVlbkVsZW1lbnQ6dm9pZCAwLGZ1bGxzY3JlZW5jaGFuZ2U6dm9pZCAwLGZ1bGxzY3JlZW5lcnJvcjp2b2lkIDB9LFlvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFlvLHtlbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gZG9jdW1lbnRbQm4uZnVsbHNjcmVlbkVsZW1lbnRdfX0sY2hhbmdlRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gQm4uZnVsbHNjcmVlbmNoYW5nZX19LGVycm9yRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gQm4uZnVsbHNjcmVlbmVycm9yfX0sZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7aWYoWW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W0JuLmZ1bGxzY3JlZW5FbmFibGVkXX19LGZ1bGxzY3JlZW46e2dldDpmdW5jdGlvbigpe2lmKFlvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBZby5lbGVtZW50IT09bnVsbH19fSk7WW8uc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7aWYoZyhsaSkpcmV0dXJuIGxpO2xpPSExO2xldCBlPWRvY3VtZW50LmJvZHk7aWYodHlwZW9mIGUucmVxdWVzdEZ1bGxzY3JlZW49PSJmdW5jdGlvbiIpcmV0dXJuIEJuLnJlcXVlc3RGdWxsc2NyZWVuPSJyZXF1ZXN0RnVsbHNjcmVlbiIsQm4uZXhpdEZ1bGxzY3JlZW49ImV4aXRGdWxsc2NyZWVuIixCbi5mdWxsc2NyZWVuRW5hYmxlZD0iZnVsbHNjcmVlbkVuYWJsZWQiLEJuLmZ1bGxzY3JlZW5FbGVtZW50PSJmdWxsc2NyZWVuRWxlbWVudCIsQm4uZnVsbHNjcmVlbmNoYW5nZT0iZnVsbHNjcmVlbmNoYW5nZSIsQm4uZnVsbHNjcmVlbmVycm9yPSJmdWxsc2NyZWVuZXJyb3IiLGxpPSEwLGxpO2xldCB0PVsid2Via2l0IiwibW96IiwibyIsIm1zIiwia2h0bWwiXSxuO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhOysrbyl7bGV0IHI9dFtvXTtuPWAke3J9UmVxdWVzdEZ1bGxzY3JlZW5gLHR5cGVvZiBlW25dPT0iZnVuY3Rpb24iPyhCbi5yZXF1ZXN0RnVsbHNjcmVlbj1uLGxpPSEwKToobj1gJHtyfVJlcXVlc3RGdWxsU2NyZWVuYCx0eXBlb2YgZVtuXT09ImZ1bmN0aW9uIiYmKEJuLnJlcXVlc3RGdWxsc2NyZWVuPW4sbGk9ITApKSxuPWAke3J9RXhpdEZ1bGxzY3JlZW5gLHR5cGVvZiBkb2N1bWVudFtuXT09ImZ1bmN0aW9uIj9Cbi5leGl0RnVsbHNjcmVlbj1uOihuPWAke3J9Q2FuY2VsRnVsbFNjcmVlbmAsdHlwZW9mIGRvY3VtZW50W25dPT0iZnVuY3Rpb24iJiYoQm4uZXhpdEZ1bGxzY3JlZW49bikpLG49YCR7cn1GdWxsc2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbbl0hPT12b2lkIDA/Qm4uZnVsbHNjcmVlbkVuYWJsZWQ9bjoobj1gJHtyfUZ1bGxTY3JlZW5FbmFibGVkYCxkb2N1bWVudFtuXSE9PXZvaWQgMCYmKEJuLmZ1bGxzY3JlZW5FbmFibGVkPW4pKSxuPWAke3J9RnVsbHNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W25dIT09dm9pZCAwP0JuLmZ1bGxzY3JlZW5FbGVtZW50PW46KG49YCR7cn1GdWxsU2NyZWVuRWxlbWVudGAsZG9jdW1lbnRbbl0hPT12b2lkIDAmJihCbi5mdWxsc2NyZWVuRWxlbWVudD1uKSksbj1gJHtyfWZ1bGxzY3JlZW5jaGFuZ2VgLGRvY3VtZW50W2BvbiR7bn1gXSE9PXZvaWQgMCYmKHI9PT0ibXMiJiYobj0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksQm4uZnVsbHNjcmVlbmNoYW5nZT1uKSxuPWAke3J9ZnVsbHNjcmVlbmVycm9yYCxkb2N1bWVudFtgb24ke259YF0hPT12b2lkIDAmJihyPT09Im1zIiYmKG49Ik1TRnVsbHNjcmVlbkVycm9yIiksQm4uZnVsbHNjcmVlbmVycm9yPW4pfXJldHVybiBsaX07WW8ucmVxdWVzdEZ1bGxzY3JlZW49ZnVuY3Rpb24oZSx0KXtZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSYmZVtCbi5yZXF1ZXN0RnVsbHNjcmVlbl0oe3ZyRGlzcGxheTp0fSl9O1lvLmV4aXRGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7WW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJmRvY3VtZW50W0JuLmV4aXRGdWxsc2NyZWVuXSgpfTtZby5fbmFtZXM9Qm47UEE9WW99KTtmdW5jdGlvbiBSZihlKXtsZXQgdD1lLnNwbGl0KCIuIik7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87KytuKXRbbl09cGFyc2VJbnQodFtuXSwxMCk7cmV0dXJuIHR9ZnVuY3Rpb24gUmIoKXtpZighZyhTbCkmJihTbD0hMSwha2woKSkpe2xldCBlPS8gQ2hyb21lXC8oW1wuMC05XSspLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihTbD0hMCx2QT1SZihlWzFdKSl9cmV0dXJuIFNsfWZ1bmN0aW9uIGVNKCl7cmV0dXJuIFJiKCkmJnZBfWZ1bmN0aW9uIERBKCl7aWYoIWcoQ2wpJiYoQ2w9ITEsIVJiKCkmJiFrbCgpJiYvIFNhZmFyaVwvW1wuMC05XSsvLnRlc3Qod2EudXNlckFnZW50KSkpe2xldCBlPS8gVmVyc2lvblwvKFtcLjAtOV0rKS8uZXhlYyh3YS51c2VyQWdlbnQpO2UhPT1udWxsJiYoQ2w9ITAsRkE9UmYoZVsxXSkpfXJldHVybiBDbH1mdW5jdGlvbiB0TSgpe3JldHVybiBEQSgpJiZGQX1mdW5jdGlvbiBCQSgpe2lmKCFnKE1sKSl7TWw9ITE7bGV0IGU9LyBBcHBsZVdlYktpdFwvKFtcLjAtOV0rKShcKz8pLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihNbD0hMCxUYj1SZihlWzFdKSxUYi5pc05pZ2h0bHk9ISFlWzJdKX1yZXR1cm4gTWx9ZnVuY3Rpb24gbk0oKXtyZXR1cm4gQkEoKSYmVGJ9ZnVuY3Rpb24ga2woKXtpZighZyhObCkpe05sPSExO2xldCBlPS8gRWRnXC8oW1wuMC05XSspLy5leGVjKHdhLnVzZXJBZ2VudCk7ZSE9PW51bGwmJihObD0hMCxVQT1SZihlWzFdKSl9cmV0dXJuIE5sfWZ1bmN0aW9uIG9NKCl7cmV0dXJuIGtsKCkmJlVBfWZ1bmN0aW9uIHZsKCl7aWYoIWcoSWwpKXtJbD0hMTtsZXQgZT0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyh3YS51c2VyQWdlbnQpO2UhPT1udWxsJiYoSWw9ITAseGI9UmYoZVsxXSkpfXJldHVybiBJbH1mdW5jdGlvbiBhTSgpe3JldHVybiBnKEFiKXx8KEFiPS9XaW5kb3dzL2kudGVzdCh3YS5hcHBWZXJzaW9uKSksQWJ9ZnVuY3Rpb24gck0oKXtyZXR1cm4gZyh3Yil8fCh3Yj1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLHdifWZ1bmN0aW9uIGlNKCl7cmV0dXJuIHZsKCkmJnhifWZ1bmN0aW9uIGNNKCl7cmV0dXJuIGcoRWIpfHwoRWI9IXZsKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIWcod2EucG9pbnRlckVuYWJsZWQpfHx3YS5wb2ludGVyRW5hYmxlZCkpLEVifWZ1bmN0aW9uIGpBKCl7aWYoIWcoUGwpKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IHQ9ZS5zdHlsZS5pbWFnZVJlbmRlcmluZztQbD1nKHQpJiZ0IT09IiIsUGwmJihMQT10KX1yZXR1cm4gUGx9ZnVuY3Rpb24gc00oKXtyZXR1cm4gakEoKT9MQTp2b2lkIDB9ZnVuY3Rpb24gTG8oKXtyZXR1cm4gTG8uX3Jlc3VsdH12YXIgd2EsU2wsdkEsQ2wsRkEsTWwsVGIsTmwsVUEsSWwseGIsQWIsd2IsRWIsTEEsUGwsYXMsRWEsY3IsRmw9WCgoKT0+e3NlKCk7a0EoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij93YT1uYXZpZ2F0b3I6d2E9e307TG8uX3Byb21pc2U9dm9pZCAwO0xvLl9yZXN1bHQ9dm9pZCAwO0xvLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZyhMby5fcHJvbWlzZSl8fChMby5fcHJvbWlzZT1uZXcgUHJvbWlzZShlPT57bGV0IHQ9bmV3IEltYWdlO3Qub25sb2FkPWZ1bmN0aW9uKCl7TG8uX3Jlc3VsdD10LndpZHRoPjAmJnQuaGVpZ2h0PjAsZShMby5fcmVzdWx0KX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7TG8uX3Jlc3VsdD0hMSxlKExvLl9yZXN1bHQpfSx0LnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksTG8uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKExvLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcoTG8uX3Jlc3VsdCl9fX0pO2FzPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihhcy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZhcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZhcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJmFzLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmYXMucHVzaChCaWdVaW50NjRBcnJheSkpO0VhPXtpc0Nocm9tZTpSYixjaHJvbWVWZXJzaW9uOmVNLGlzU2FmYXJpOkRBLHNhZmFyaVZlcnNpb246dE0saXNXZWJraXQ6QkEsd2Via2l0VmVyc2lvbjpuTSxpc0VkZ2U6a2wsZWRnZVZlcnNpb246b00saXNGaXJlZm94OnZsLGZpcmVmb3hWZXJzaW9uOmlNLGlzV2luZG93czphTSxpc0lQYWRPcklPUzpyTSxoYXJkd2FyZUNvbmN1cnJlbmN5OndhLmhhcmR3YXJlQ29uY3VycmVuY3k/PzMsc3VwcG9ydHNQb2ludGVyRXZlbnRzOmNNLHN1cHBvcnRzSW1hZ2VSZW5kZXJpbmdQaXhlbGF0ZWQ6akEsc3VwcG9ydHNXZWJQOkxvLGltYWdlUmVuZGVyaW5nVmFsdWU6c00sdHlwZWRBcnJheVR5cGVzOmFzfTtFYS5zdXBwb3J0c0Jhc2lzPWZ1bmN0aW9uKGUpe3JldHVybiBFYS5zdXBwb3J0c1dlYkFzc2VtYmx5KCkmJmUuY29udGV4dC5zdXBwb3J0c0Jhc2lzfTtFYS5zdXBwb3J0c0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gUEEuc3VwcG9ydHNGdWxsc2NyZWVuKCl9O0VhLnN1cHBvcnRzVHlwZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1In07RWEuc3VwcG9ydHNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ2NEFycmF5PCJ1In07RWEuc3VwcG9ydHNCaWdVaW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnVWludDY0QXJyYXk8InUifTtFYS5zdXBwb3J0c0JpZ0ludD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50PCJ1In07RWEuc3VwcG9ydHNXZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXI8InUifTtFYS5zdXBwb3J0c1dlYkFzc2VtYmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXZWJBc3NlbWJseTwidSJ9O0VhLnN1cHBvcnRzV2ViZ2wyPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRleHQud2ViZ2wyfTtFYS5zdXBwb3J0c0VzbVdlYldvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hdmwoKXx8cGFyc2VJbnQoeGIpPj0xMTR9O2NyPUVhfSk7ZnVuY3Rpb24gVGUoZSx0LG4sbyl7dGhpcy54PWU/PzAsdGhpcy55PXQ/PzAsdGhpcy56PW4/PzAsdGhpcy53PW8/PzB9dmFyIHhmLGZNLGRNLHpBLEdBLE9iLFZBLERsLFNiLHphLEhBLEJsLENiLEtBLE1iLE5iLHVNLGxNLE9mLHJzLGhNLHFBLFVsLExsLEZyLERyLFFlLEpvPVgoKCk9PntJZSgpO3NlKCk7RmwoKTtHZSgpO0RuKCk7eGY9bmV3IHM7VGUuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89dC8yLGE9TWF0aC5zaW4obyk7eGY9cy5ub3JtYWxpemUoZSx4Zik7bGV0IHI9eGYueCphLGk9eGYueSphLGY9eGYueiphLGQ9TWF0aC5jb3Mobyk7cmV0dXJuIGcobik/KG4ueD1yLG4ueT1pLG4uej1mLG4udz1kLG4pOm5ldyBUZShyLGksZixkKX07Zk09WzEsMiwwXSxkTT1uZXcgQXJyYXkoMyk7VGUuZnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKGUsdCl7bGV0IG4sbyxhLHIsaSxmPWVbSi5DT0xVTU4wUk9XMF0sZD1lW0ouQ09MVU1OMVJPVzFdLGM9ZVtKLkNPTFVNTjJST1cyXSx1PWYrZCtjO2lmKHU+MCluPU1hdGguc3FydCh1KzEpLGk9LjUqbixuPS41L24sbz0oZVtKLkNPTFVNTjFST1cyXS1lW0ouQ09MVU1OMlJPVzFdKSpuLGE9KGVbSi5DT0xVTU4yUk9XMF0tZVtKLkNPTFVNTjBST1cyXSkqbixyPShlW0ouQ09MVU1OMFJPVzFdLWVbSi5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgbD1mTSxoPTA7ZD5mJiYoaD0xKSxjPmYmJmM+ZCYmKGg9Mik7bGV0IG09bFtoXSxiPWxbbV07bj1NYXRoLnNxcnQoZVtKLmdldEVsZW1lbnRJbmRleChoLGgpXS1lW0ouZ2V0RWxlbWVudEluZGV4KG0sbSldLWVbSi5nZXRFbGVtZW50SW5kZXgoYixiKV0rMSk7bGV0IHA9ZE07cFtoXT0uNSpuLG49LjUvbixpPShlW0ouZ2V0RWxlbWVudEluZGV4KGIsbSldLWVbSi5nZXRFbGVtZW50SW5kZXgobSxiKV0pKm4scFttXT0oZVtKLmdldEVsZW1lbnRJbmRleChtLGgpXStlW0ouZ2V0RWxlbWVudEluZGV4KGgsbSldKSpuLHBbYl09KGVbSi5nZXRFbGVtZW50SW5kZXgoYixoKV0rZVtKLmdldEVsZW1lbnRJbmRleChoLGIpXSkqbixvPS1wWzBdLGE9LXBbMV0scj0tcFsyXX1yZXR1cm4gZyh0KT8odC54PW8sdC55PWEsdC56PXIsdC53PWksdCk6bmV3IFRlKG8sYSxyLGkpfTt6QT1uZXcgVGUsR0E9bmV3IFRlLE9iPW5ldyBUZSxWQT1uZXcgVGU7VGUuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVkE9VGUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWCxlLnJvbGwsekEpLE9iPVRlLmZyb21BeGlzQW5nbGUocy5VTklUX1ksLWUucGl0Y2gsdCksdD1UZS5tdWx0aXBseShPYixWQSxPYiksR0E9VGUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtZS5oZWFkaW5nLHpBKSxUZS5tdWx0aXBseShHQSx0LHQpfTtEbD1uZXcgcyxTYj1uZXcgcyx6YT1uZXcgVGUsSEE9bmV3IFRlLEJsPW5ldyBUZTtUZS5wYWNrZWRMZW5ndGg9NDtUZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLngsdFtuKytdPWUueSx0W24rK109ZS56LHRbbl09ZS53LHR9O1RlLnVucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dD8/MCxnKG4pfHwobj1uZXcgVGUpLG4ueD1lW3RdLG4ueT1lW3QrMV0sbi56PWVbdCsyXSxuLnc9ZVt0KzNdLG59O1RlLnBhY2tlZEludGVycG9sYXRpb25MZW5ndGg9MztUZS5jb252ZXJ0UGFja2VkQXJyYXlGb3JJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCxuLG8pe1RlLnVucGFjayhlLG4qNCxCbCksVGUuY29uanVnYXRlKEJsLEJsKTtmb3IobGV0IGE9MCxyPW4tdCsxO2E8cjthKyspe2xldCBpPWEqMztUZS51bnBhY2soZSwodCthKSo0LHphKSxUZS5tdWx0aXBseSh6YSxCbCx6YSksemEudzwwJiZUZS5uZWdhdGUoemEsemEpLFRlLmNvbXB1dGVBeGlzKHphLERsKTtsZXQgZj1UZS5jb21wdXRlQW5nbGUoemEpO2cobyl8fChvPVtdKSxvW2ldPURsLngqZixvW2krMV09RGwueSpmLG9baSsyXT1EbC56KmZ9fTtUZS51bnBhY2tJbnRlcnBvbGF0aW9uUmVzdWx0PWZ1bmN0aW9uKGUsdCxuLG8sYSl7ZyhhKXx8KGE9bmV3IFRlKSxzLmZyb21BcnJheShlLDAsU2IpO2xldCByPXMubWFnbml0dWRlKFNiKTtyZXR1cm4gVGUudW5wYWNrKHQsbyo0LEhBKSxyPT09MD9UZS5jbG9uZShUZS5JREVOVElUWSx6YSk6VGUuZnJvbUF4aXNBbmdsZShTYixyLHphKSxUZS5tdWx0aXBseSh6YSxIQSxhKX07VGUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0Lng9ZS54LHQueT1lLnksdC56PWUueix0Lnc9ZS53LHQpOm5ldyBUZShlLngsZS55LGUueixlLncpfTtUZS5jb25qdWdhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PS1lLngsdC55PS1lLnksdC56PS1lLnosdC53PWUudyx0fTtUZS5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlLngqZS54K2UueSplLnkrZS56KmUueitlLncqZS53fTtUZS5tYWduaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChUZS5tYWduaXR1ZGVTcXVhcmVkKGUpKX07VGUubm9ybWFsaXplPWZ1bmN0aW9uKGUsdCl7bGV0IG49MS9UZS5tYWduaXR1ZGUoZSksbz1lLngqbixhPWUueSpuLHI9ZS56Km4saT1lLncqbjtyZXR1cm4gdC54PW8sdC55PWEsdC56PXIsdC53PWksdH07VGUuaW52ZXJzZT1mdW5jdGlvbihlLHQpe2xldCBuPVRlLm1hZ25pdHVkZVNxdWFyZWQoZSk7cmV0dXJuIHQ9VGUuY29uanVnYXRlKGUsdCksVGUubXVsdGlwbHlCeVNjYWxhcih0LDEvbix0KX07VGUuYWRkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi54PWUueCt0Lngsbi55PWUueSt0Lnksbi56PWUueit0Lnosbi53PWUudyt0Lncsbn07VGUuc3VidHJhY3Q9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54LXQueCxuLnk9ZS55LXQueSxuLno9ZS56LXQueixuLnc9ZS53LXQudyxufTtUZS5uZWdhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC54PS1lLngsdC55PS1lLnksdC56PS1lLnosdC53PS1lLncsdH07VGUuZG90PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueCp0LngrZS55KnQueStlLnoqdC56K2Uudyp0Lnd9O1RlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLngsYT1lLnkscj1lLnosaT1lLncsZj10LngsZD10LnksYz10LnosdT10LncsbD1pKmYrbyp1K2EqYy1yKmQsaD1pKmQtbypjK2EqdStyKmYsbT1pKmMrbypkLWEqZityKnUsYj1pKnUtbypmLWEqZC1yKmM7cmV0dXJuIG4ueD1sLG4ueT1oLG4uej1tLG4udz1iLG59O1RlLm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54KnQsbi55PWUueSp0LG4uej1lLnoqdCxuLnc9ZS53KnQsbn07VGUuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLng9ZS54L3Qsbi55PWUueS90LG4uej1lLnovdCxuLnc9ZS53L3Qsbn07VGUuY29tcHV0ZUF4aXM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLnc7aWYoTWF0aC5hYnMobi0xKTxrLkVQU0lMT042fHxNYXRoLmFicyhuKzEpPGsuRVBTSUxPTjYpcmV0dXJuIHQueD0xLHQueT10Lno9MCx0O2xldCBvPTEvTWF0aC5zcXJ0KDEtbipuKTtyZXR1cm4gdC54PWUueCpvLHQueT1lLnkqbyx0Lno9ZS56Km8sdH07VGUuY29tcHV0ZUFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhlLnctMSk8ay5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKGUudyl9O0NiPW5ldyBUZTtUZS5sZXJwPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBDYj1UZS5tdWx0aXBseUJ5U2NhbGFyKHQsbixDYiksbz1UZS5tdWx0aXBseUJ5U2NhbGFyKGUsMS1uLG8pLFRlLmFkZChDYixvLG8pfTtLQT1uZXcgVGUsTWI9bmV3IFRlLE5iPW5ldyBUZTtUZS5zbGVycD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1UZS5kb3QoZSx0KSxyPXQ7aWYoYTwwJiYoYT0tYSxyPUtBPVRlLm5lZ2F0ZSh0LEtBKSksMS1hPGsuRVBTSUxPTjYpcmV0dXJuIFRlLmxlcnAoZSxyLG4sbyk7bGV0IGk9TWF0aC5hY29zKGEpO3JldHVybiBNYj1UZS5tdWx0aXBseUJ5U2NhbGFyKGUsTWF0aC5zaW4oKDEtbikqaSksTWIpLE5iPVRlLm11bHRpcGx5QnlTY2FsYXIocixNYXRoLnNpbihuKmkpLE5iKSxvPVRlLmFkZChNYixOYixvKSxUZS5tdWx0aXBseUJ5U2NhbGFyKG8sMS9NYXRoLnNpbihpKSxvKX07VGUubG9nPWZ1bmN0aW9uKGUsdCl7bGV0IG49ay5hY29zQ2xhbXBlZChlLncpLG89MDtyZXR1cm4gbiE9PTAmJihvPW4vTWF0aC5zaW4obikpLHMubXVsdGlwbHlCeVNjYWxhcihlLG8sdCl9O1RlLmV4cD1mdW5jdGlvbihlLHQpe2xldCBuPXMubWFnbml0dWRlKGUpLG89MDtyZXR1cm4gbiE9PTAmJihvPU1hdGguc2luKG4pL24pLHQueD1lLngqbyx0Lnk9ZS55Km8sdC56PWUueipvLHQudz1NYXRoLmNvcyhuKSx0fTt1TT1uZXcgcyxsTT1uZXcgcyxPZj1uZXcgVGUscnM9bmV3IFRlO1RlLmNvbXB1dGVJbm5lclF1YWRyYW5nbGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9VGUuY29uanVnYXRlKHQsT2YpO1RlLm11bHRpcGx5KGEsbixycyk7bGV0IHI9VGUubG9nKHJzLHVNKTtUZS5tdWx0aXBseShhLGUscnMpO2xldCBpPVRlLmxvZyhycyxsTSk7cmV0dXJuIHMuYWRkKHIsaSxyKSxzLm11bHRpcGx5QnlTY2FsYXIociwuMjUscikscy5uZWdhdGUocixyKSxUZS5leHAocixPZiksVGUubXVsdGlwbHkodCxPZixvKX07VGUuc3F1YWQ9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPVRlLnNsZXJwKGUsdCxhLE9mKSxmPVRlLnNsZXJwKG4sbyxhLHJzKTtyZXR1cm4gVGUuc2xlcnAoaSxmLDIqYSooMS1hKSxyKX07aE09bmV3IFRlLHFBPTEuOTAxMTA3NDUzNTE3MzAwMyxVbD1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxMbD1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxGcj1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxEcj1jci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXTtmb3IobGV0IGU9MDtlPDc7KytlKXtsZXQgdD1lKzEsbj0yKnQrMTtVbFtlXT0xLyh0Km4pLExsW2VdPXQvbn1VbFs3XT1xQS8xMzY7TGxbN109cUEqOC8xNztUZS5mYXN0U2xlcnA9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9VGUuZG90KGUsdCkscjthPj0wP3I9MToocj0tMSxhPS1hKTtsZXQgaT1hLTEsZj0xLW4sZD1uKm4sYz1mKmY7Zm9yKGxldCBtPTc7bT49MDstLW0pRnJbbV09KFVsW21dKmQtTGxbbV0pKmksRHJbbV09KFVsW21dKmMtTGxbbV0pKmk7bGV0IHU9cipuKigxK0ZyWzBdKigxK0ZyWzFdKigxK0ZyWzJdKigxK0ZyWzNdKigxK0ZyWzRdKigxK0ZyWzVdKigxK0ZyWzZdKigxK0ZyWzddKSkpKSkpKSksbD1mKigxK0RyWzBdKigxK0RyWzFdKigxK0RyWzJdKigxK0RyWzNdKigxK0RyWzRdKigxK0RyWzVdKigxK0RyWzZdKigxK0RyWzddKSkpKSkpKSksaD1UZS5tdWx0aXBseUJ5U2NhbGFyKGUsbCxoTSk7cmV0dXJuIFRlLm11bHRpcGx5QnlTY2FsYXIodCx1LG8pLFRlLmFkZChoLG8sbyl9O1RlLmZhc3RTcXVhZD1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9VGUuZmFzdFNsZXJwKGUsdCxhLE9mKSxmPVRlLmZhc3RTbGVycChuLG8sYSxycyk7cmV0dXJuIFRlLmZhc3RTbGVycChpLGYsMiphKigxLWEpLHIpfTtUZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUueD09PXQueCYmZS55PT09dC55JiZlLno9PT10LnomJmUudz09PXQud307VGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZS54LXQueCk8PW4mJk1hdGguYWJzKGUueS10LnkpPD1uJiZNYXRoLmFicyhlLnotdC56KTw9biYmTWF0aC5hYnMoZS53LXQudyk8PW59O1RlLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgVGUoMCwwLDAsMCkpO1RlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFRlKDAsMCwwLDEpKTtUZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFRlLmNsb25lKHRoaXMsZSl9O1RlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRlLmVxdWFscyh0aGlzLGUpfTtUZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiBUZS5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX07VGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07UWU9VGV9KTt2YXIgYnQsSWIsaXMsUGIsWm8saGksbWksYmksbU0sYk0scE0sZ00sX00seU0sQU0sV0Esd00sRU0sVE0sUk0seE0sT00sU00sQ00sTU0sTk0samwsRmIsSU0sUE0sa00semwsdk0sRk0sRE0sQk0sa2IsdmIsVU0sTE0sak0sek0sWEEsRGIsR00sVk0sQmIsWUEsY28sc3I9WCgoKT0+e2p0KCk7SWUoKTtnYSgpO0V0KCk7c2UoKTtKaSgpO1RBKCk7WG0oKTtxZSgpO1JBKCk7SUEoKTtwYigpO2NsKCk7R2UoKTtEbigpO3BuKCk7Sm8oKTtvbCgpO2J0PXt9LEliPXt1cDp7c291dGg6ImVhc3QiLG5vcnRoOiJ3ZXN0Iix3ZXN0OiJzb3V0aCIsZWFzdDoibm9ydGgifSxkb3duOntzb3V0aDoid2VzdCIsbm9ydGg6ImVhc3QiLHdlc3Q6Im5vcnRoIixlYXN0OiJzb3V0aCJ9LHNvdXRoOnt1cDoid2VzdCIsZG93bjoiZWFzdCIsd2VzdDoiZG93biIsZWFzdDoidXAifSxub3J0aDp7dXA6ImVhc3QiLGRvd246Indlc3QiLHdlc3Q6InVwIixlYXN0OiJkb3duIn0sd2VzdDp7dXA6Im5vcnRoIixkb3duOiJzb3V0aCIsbm9ydGg6ImRvd24iLHNvdXRoOiJ1cCJ9LGVhc3Q6e3VwOiJzb3V0aCIsZG93bjoibm9ydGgiLG5vcnRoOiJ1cCIsc291dGg6ImRvd24ifX0saXM9e25vcnRoOlstMSwwLDBdLGVhc3Q6WzAsMSwwXSx1cDpbMCwwLDFdLHNvdXRoOlsxLDAsMF0sd2VzdDpbMCwtMSwwXSxkb3duOlswLDAsLTFdfSxQYj17fSxabz17ZWFzdDpuZXcgcyxub3J0aDpuZXcgcyx1cDpuZXcgcyx3ZXN0Om5ldyBzLHNvdXRoOm5ldyBzLGRvd246bmV3IHN9LGhpPW5ldyBzLG1pPW5ldyBzLGJpPW5ldyBzO2J0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZighSWIuaGFzT3duUHJvcGVydHkoZSl8fCFJYltlXS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgV3QoImZpcnN0QXhpcyBhbmQgc2Vjb25kQXhpcyBtdXN0IGJlIGVhc3QsIG5vcnRoLCB1cCwgd2VzdCwgc291dGggb3IgZG93bi4iKTtsZXQgbj1JYltlXVt0XSxvLGE9ZSt0O3JldHVybiBnKFBiW2FdKT9vPVBiW2FdOihvPWZ1bmN0aW9uKHIsaSxmKXtpZihnKGYpfHwoZj1uZXcgJCkscy5lcXVhbHNFcHNpbG9uKHIscy5aRVJPLGsuRVBTSUxPTjE0KSlzLnVucGFjayhpc1tlXSwwLGhpKSxzLnVucGFjayhpc1t0XSwwLG1pKSxzLnVucGFjayhpc1tuXSwwLGJpKTtlbHNlIGlmKGsuZXF1YWxzRXBzaWxvbihyLngsMCxrLkVQU0lMT04xNCkmJmsuZXF1YWxzRXBzaWxvbihyLnksMCxrLkVQU0lMT04xNCkpe2xldCBkPWsuc2lnbihyLnopO3MudW5wYWNrKGlzW2VdLDAsaGkpLGUhPT0iZWFzdCImJmUhPT0id2VzdCImJnMubXVsdGlwbHlCeVNjYWxhcihoaSxkLGhpKSxzLnVucGFjayhpc1t0XSwwLG1pKSx0IT09ImVhc3QiJiZ0IT09Indlc3QiJiZzLm11bHRpcGx5QnlTY2FsYXIobWksZCxtaSkscy51bnBhY2soaXNbbl0sMCxiaSksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmcy5tdWx0aXBseUJ5U2NhbGFyKGJpLGQsYmkpfWVsc2V7aT1pPz9xLmRlZmF1bHQsaS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocixaby51cCk7bGV0IGQ9Wm8udXAsYz1aby5lYXN0O2MueD0tci55LGMueT1yLngsYy56PTAscy5ub3JtYWxpemUoYyxaby5lYXN0KSxzLmNyb3NzKGQsYyxaby5ub3J0aCkscy5tdWx0aXBseUJ5U2NhbGFyKFpvLnVwLC0xLFpvLmRvd24pLHMubXVsdGlwbHlCeVNjYWxhcihaby5lYXN0LC0xLFpvLndlc3QpLHMubXVsdGlwbHlCeVNjYWxhcihaby5ub3J0aCwtMSxaby5zb3V0aCksaGk9Wm9bZV0sbWk9Wm9bdF0sYmk9Wm9bbl19cmV0dXJuIGZbMF09aGkueCxmWzFdPWhpLnksZlsyXT1oaS56LGZbM109MCxmWzRdPW1pLngsZls1XT1taS55LGZbNl09bWkueixmWzddPTAsZls4XT1iaS54LGZbOV09YmkueSxmWzEwXT1iaS56LGZbMTFdPTAsZlsxMl09ci54LGZbMTNdPXIueSxmWzE0XT1yLnosZlsxNV09MSxmfSxQYlthXT1vKSxvfTtidC5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1idC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtidC5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPWJ0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO2J0Lm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPWJ0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtidC5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1idC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTttTT1uZXcgUWUsYk09bmV3IHMoMSwxLDEpLHBNPW5ldyAkO2J0LmhlYWRpbmdQaXRjaFJvbGxUb0ZpeGVkRnJhbWU9ZnVuY3Rpb24oZSx0LG4sbyxhKXtvPW8/P2J0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCByPVFlLmZyb21IZWFkaW5nUGl0Y2hSb2xsKHQsbU0pLGk9JC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShzLlpFUk8scixiTSxwTSk7cmV0dXJuIGE9byhlLG4sYSksJC5tdWx0aXBseShhLGksYSl9O2dNPW5ldyAkLF9NPW5ldyBKO2J0LmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9YnQuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShlLHQsbixvLGdNKSxpPSQuZ2V0TWF0cml4MyhyLF9NKTtyZXR1cm4gUWUuZnJvbVJvdGF0aW9uTWF0cml4KGksYSl9O3lNPW5ldyBzKDEsMSwxKSxBTT1uZXcgcyxXQT1uZXcgJCx3TT1uZXcgJCxFTT1uZXcgSixUTT1uZXcgUWU7YnQuZml4ZWRGcmFtZVRvSGVhZGluZ1BpdGNoUm9sbD1mdW5jdGlvbihlLHQsbixvKXt0PXQ/P3EuZGVmYXVsdCxuPW4/P2J0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLGcobyl8fChvPW5ldyBFbCk7bGV0IGE9JC5nZXRUcmFuc2xhdGlvbihlLEFNKTtpZihzLmVxdWFscyhhLHMuWkVSTykpcmV0dXJuIG8uaGVhZGluZz0wLG8ucGl0Y2g9MCxvLnJvbGw9MCxvO2xldCByPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKG4oYSx0LFdBKSxXQSksaT0kLnNldFNjYWxlKGUseU0sd00pO2k9JC5zZXRUcmFuc2xhdGlvbihpLHMuWkVSTyxpKSxyPSQubXVsdGlwbHkocixpLHIpO2xldCBmPVFlLmZyb21Sb3RhdGlvbk1hdHJpeCgkLmdldE1hdHJpeDMocixFTSksVE0pO3JldHVybiBmPVFlLm5vcm1hbGl6ZShmLGYpLEVsLmZyb21RdWF0ZXJuaW9uKGYsbyl9O1JNPTYqMzYwMCsyNDYwKzUwLjU0ODQxLHhNPTg2NDAxODQ4MTI4NjZlLTYsT009LjA5MzEwNCxTTT0tNjJlLTcsQ009MTE3NzI3NTgzODQ2NjhlLTMyLE1NPTcyOTIxMTU4NTUzZS0xNSxOTT1rLlRXT19QSS84NjQwMCxqbD1uZXcgSm47YnQuY29tcHV0ZUljcmZUb0NlbnRyYWxCb2R5Rml4ZWRNYXRyaXg9ZnVuY3Rpb24oZSx0KXtsZXQgbj1idC5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXgoZSx0KTtyZXR1cm4gZyhuKXx8KG49YnQuY29tcHV0ZVRlbWVUb1BzZXVkb0ZpeGVkTWF0cml4KGUsdCkpLG59O2J0LmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe2psPUpuLmFkZFNlY29uZHMoZSwtSm4uY29tcHV0ZVRhaU1pbnVzVXRjKGUpLGpsKTtsZXQgbj1qbC5kYXlOdW1iZXIsbz1qbC5zZWNvbmRzT2ZEYXksYSxyPW4tMjQ1MTU0NTtvPj00MzIwMD9hPShyKy41KS9nbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTphPShyLS41KS9nbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTtsZXQgZj0oUk0rYSooeE0rYSooT00rYSpTTSkpKSpOTSVrLlRXT19QSSxkPU1NK0NNKihuLTI0NTE1NDU1ZS0xKSxjPShvK2duLlNFQ09ORFNfUEVSX0RBWSouNSklZ24uU0VDT05EU19QRVJfREFZLHU9ZitkKmMsbD1NYXRoLmNvcyh1KSxoPU1hdGguc2luKHUpO3JldHVybiBnKHQpPyh0WzBdPWwsdFsxXT0taCx0WzJdPTAsdFszXT1oLHRbNF09bCx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdCk6bmV3IEoobCxoLDAsLWgsbCwwLDAsMCwxKX07YnQuaWF1MjAwNlh5c0RhdGE9bmV3IE5BO2J0LmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzPUVBLk5PTkU7RmI9MzIuMTg0LElNPTI0NTE1NDU7YnQucHJlbG9hZEljcmZGaXhlZD1mdW5jdGlvbihlKXtsZXQgdD1lLnN0YXJ0LmRheU51bWJlcixuPWUuc3RhcnQuc2Vjb25kc09mRGF5K0ZiLG89ZS5zdG9wLmRheU51bWJlcixhPWUuc3RvcC5zZWNvbmRzT2ZEYXkrRmI7cmV0dXJuIGJ0LmlhdTIwMDZYeXNEYXRhLnByZWxvYWQodCxuLG8sYSl9O2J0LmNvbXB1dGVJY3JmVG9GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXgoZSx0KTtpZihnKG4pKXJldHVybiBKLnRyYW5zcG9zZShuLHQpfTtQTT0zMi4xODQsa009MjQ1MTU0NSx6bD1uZXcgRWwsdk09bmV3IEosRk09bmV3IEpuO2J0LmNvbXB1dGVNb29uRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgSik7bGV0IG49Sm4uYWRkU2Vjb25kcyhlLFBNLEZNKSxvPUpuLnRvdGFsRGF5cyhuKS1rTSxhPWsudG9SYWRpYW5zKDEyLjExMiktay50b1JhZGlhbnMoLjA1Mjk5MikqbyxyPWsudG9SYWRpYW5zKDI0LjIyNCktay50b1JhZGlhbnMoLjEwNTk4NCkqbyxpPWsudG9SYWRpYW5zKDIyNy42NDUpK2sudG9SYWRpYW5zKDEzLjAxMikqbyxmPWsudG9SYWRpYW5zKDI2MS4xMDUpK2sudG9SYWRpYW5zKDEzLjM0MDcxNikqbyxkPWsudG9SYWRpYW5zKDM1OCkray50b1JhZGlhbnMoLjk4NTYpKm87cmV0dXJuIHpsLnBpdGNoPWsudG9SYWRpYW5zKDE4MCktay50b1JhZGlhbnMoMy44NzgpKk1hdGguc2luKGEpLWsudG9SYWRpYW5zKC4xMikqTWF0aC5zaW4ocikray50b1JhZGlhbnMoLjA3KSpNYXRoLnNpbihpKS1rLnRvUmFkaWFucyguMDE3KSpNYXRoLnNpbihmKSx6bC5yb2xsPWsudG9SYWRpYW5zKDY2LjUzLTkwKStrLnRvUmFkaWFucygxLjU0MykqTWF0aC5jb3MoYSkray50b1JhZGlhbnMoLjI0KSpNYXRoLmNvcyhyKS1rLnRvUmFkaWFucyguMDI4KSpNYXRoLmNvcyhpKStrLnRvUmFkaWFucyguMDA3KSpNYXRoLmNvcyhmKSx6bC5oZWFkaW5nPWsudG9SYWRpYW5zKDI0NC4zNzUtOTApK2sudG9SYWRpYW5zKDEzLjE3NjM1ODMxKSpvK2sudG9SYWRpYW5zKDMuNTU4KSpNYXRoLnNpbihhKStrLnRvUmFkaWFucyguMTIxKSpNYXRoLnNpbihyKS1rLnRvUmFkaWFucyguMDY0KSpNYXRoLnNpbihpKStrLnRvUmFkaWFucyguMDE2KSpNYXRoLnNpbihmKStrLnRvUmFkaWFucyguMDI1KSpNYXRoLnNpbihkKSxKLmZyb21IZWFkaW5nUGl0Y2hSb2xsKHpsLHZNKX07YnQuY29tcHV0ZUljcmZUb01vb25GaXhlZE1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5jb21wdXRlTW9vbkZpeGVkVG9JY3JmTWF0cml4KGUsdCk7aWYoZyhuKSlyZXR1cm4gSi50cmFuc3Bvc2Uobix0KX07RE09bmV3IE9sKDAsMCwwKSxCTT1uZXcgYmYoMCwwLDAsMCwwLDApLGtiPW5ldyBKLHZiPW5ldyBKO2J0LmNvbXB1dGVGaXhlZFRvSWNyZk1hdHJpeD1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBKKTtsZXQgbj1idC5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycy5jb21wdXRlKGUsQk0pO2lmKCFnKG4pKXJldHVybjtsZXQgbz1lLmRheU51bWJlcixhPWUuc2Vjb25kc09mRGF5K0ZiLHI9YnQuaWF1MjAwNlh5c0RhdGEuY29tcHV0ZVh5c1JhZGlhbnMobyxhLERNKTtpZighZyhyKSlyZXR1cm47bGV0IGk9ci54K24ueFBvbGVPZmZzZXQsZj1yLnkrbi55UG9sZU9mZnNldCxkPTEvKDErTWF0aC5zcXJ0KDEtaSppLWYqZikpLGM9a2I7Y1swXT0xLWQqaSppLGNbM109LWQqaSpmLGNbNl09aSxjWzFdPS1kKmkqZixjWzRdPTEtZCpmKmYsY1s3XT1mLGNbMl09LWksY1s1XT0tZixjWzhdPTEtZCooaSppK2YqZik7bGV0IHU9Si5mcm9tUm90YXRpb25aKC1yLnMsdmIpLGw9Si5tdWx0aXBseShjLHUsa2IpLGg9ZS5kYXlOdW1iZXIsbT1lLnNlY29uZHNPZkRheS1Kbi5jb21wdXRlVGFpTWludXNVdGMoZSkrbi51dDFNaW51c1V0YyxiPWgtMjQ1MTU0NSxwPW0vZ24uU0VDT05EU19QRVJfREFZLHk9Ljc3OTA1NzI3MzI2NCtwKy4wMDI3Mzc4MTE5MTEzNTQ0OCooYitwKTt5PXklMSprLlRXT19QSTtsZXQgRT1KLmZyb21Sb3RhdGlvblooeSx2YiksXz1KLm11bHRpcGx5KGwsRSxrYiksVD1NYXRoLmNvcyhuLnhQb2xlV2FuZGVyKSx3PU1hdGguY29zKG4ueVBvbGVXYW5kZXIpLFI9TWF0aC5zaW4obi54UG9sZVdhbmRlciksUz1NYXRoLnNpbihuLnlQb2xlV2FuZGVyKSxDPW8tSU0rYS9nbi5TRUNPTkRTX1BFUl9EQVk7Qy89MzY1MjU7bGV0IEk9LTQ3ZS02KkMqay5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMCxOPU1hdGguY29zKEkpLFA9TWF0aC5zaW4oSSksdj12YjtyZXR1cm4gdlswXT1UKk4sdlsxXT1UKlAsdlsyXT1SLHZbM109LXcqUCtTKlIqTix2WzRdPXcqTitTKlIqUCx2WzVdPS1TKlQsdls2XT0tUypQLXcqUipOLHZbN109UypOLXcqUipQLHZbOF09dypULEoubXVsdGlwbHkoXyx2LHQpfTtVTT1uZXcgZHQ7YnQucG9pbnRUb1dpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPWJ0LnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzKGUsdCxuLG8pLG8ueT0yKnRbNV0tby55LG99O2J0LnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCxuLG8pe2cobyl8fChvPW5ldyBZKTtsZXQgYT1VTTtyZXR1cm4gJC5tdWx0aXBseUJ5VmVjdG9yKGUsZHQuZnJvbUVsZW1lbnRzKG4ueCxuLnksbi56LDEsYSksYSksZHQubXVsdGlwbHlCeVNjYWxhcihhLDEvYS53LGEpLCQubXVsdGlwbHlCeVZlY3Rvcih0LGEsYSksWS5mcm9tQ2FydGVzaWFuNChhLG8pfTtMTT1uZXcgcyxqTT1uZXcgcyx6TT1uZXcgcztidC5yb3RhdGlvbk1hdHJpeEZyb21Qb3NpdGlvblZlbG9jaXR5PWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPShuPz9xLmRlZmF1bHQpLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLExNKSxyPXMuY3Jvc3ModCxhLGpNKTtzLmVxdWFsc0Vwc2lsb24ocixzLlpFUk8say5FUFNJTE9ONikmJihyPXMuY2xvbmUocy5VTklUX1gscikpO2xldCBpPXMuY3Jvc3Mocix0LHpNKTtyZXR1cm4gcy5ub3JtYWxpemUoaSxpKSxzLmNyb3NzKHQsaSxyKSxzLm5lZ2F0ZShyLHIpLHMubm9ybWFsaXplKHIsciksZyhvKXx8KG89bmV3IEopLG9bMF09dC54LG9bMV09dC55LG9bMl09dC56LG9bM109ci54LG9bNF09ci55LG9bNV09ci56LG9bNl09aS54LG9bN109aS55LG9bOF09aS56LG99O2J0LlNXSVpaTEVfM0RfVE9fMkRfTUFUUklYPU9iamVjdC5mcmVlemUobmV3ICQoMCwwLDEsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMSkpO1hBPW5ldyByZSxEYj1uZXcgcyxHTT1uZXcgcyxWTT1uZXcgSixCYj1uZXcgJCxZQT1uZXcgJDtidC5iYXNpc1RvMkQ9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPSQuZ2V0VHJhbnNsYXRpb24odCxHTSksYT1lLmVsbGlwc29pZCxyO2lmKHMuZXF1YWxzKG8scy5aRVJPKSlyPXMuY2xvbmUocy5aRVJPLERiKTtlbHNle2xldCB1PWEuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxYQSk7cj1lLnByb2plY3QodSxEYikscy5mcm9tRWxlbWVudHMoci56LHIueCxyLnkscil9bGV0IGk9YnQuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobyxhLEJiKSxmPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGksWUEpLGQ9JC5nZXRNYXRyaXgzKHQsVk0pLGM9JC5tdWx0aXBseUJ5TWF0cml4MyhmLGQsbik7cmV0dXJuICQubXVsdGlwbHkoYnQuU1dJWlpMRV8zRF9UT18yRF9NQVRSSVgsYyxuKSwkLnNldFRyYW5zbGF0aW9uKG4scixuKSxufTtidC5lbGxpcHNvaWRUbzJETW9kZWxNYXRyaXg9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuZWxsaXBzb2lkLGE9YnQuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodCxvLEJiKSxyPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGEsWUEpLGk9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LFhBKSxmPWUucHJvamVjdChpLERiKTtzLmZyb21FbGVtZW50cyhmLnosZi54LGYueSxmKTtsZXQgZD0kLmZyb21UcmFuc2xhdGlvbihmLEJiKTtyZXR1cm4gJC5tdWx0aXBseShidC5TV0laWkxFXzNEX1RPXzJEX01BVFJJWCxyLG4pLCQubXVsdGlwbHkoZCxuLG4pLG59O2NvPWJ0fSk7ZnVuY3Rpb24gYXQoZSx0LG4sbyl7dGhpcy53ZXN0PWU/PzAsdGhpcy5zb3V0aD10Pz8wLHRoaXMuZWFzdD1uPz8wLHRoaXMubm9ydGg9bz8/MH12YXIgSE0sS00scU0sV00sWE0sVWIsWU0sU2UsX249WCgoKT0+e0llKCk7RXQoKTtzZSgpO3FlKCk7R2UoKTtzcigpO3BuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmNvbXB1dGVXaWR0aCh0aGlzKX19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmNvbXB1dGVIZWlnaHQodGhpcyl9fX0pO2F0LnBhY2tlZExlbmd0aD00O2F0LnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsdFtuKytdPWUud2VzdCx0W24rK109ZS5zb3V0aCx0W24rK109ZS5lYXN0LHRbbl09ZS5ub3J0aCx0fTthdC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IGF0KSxuLndlc3Q9ZVt0KytdLG4uc291dGg9ZVt0KytdLG4uZWFzdD1lW3QrK10sbi5ub3J0aD1lW3RdLG59O2F0LmNvbXB1dGVXaWR0aD1mdW5jdGlvbihlKXtsZXQgdD1lLmVhc3Qsbj1lLndlc3Q7cmV0dXJuIHQ8biYmKHQrPWsuVFdPX1BJKSx0LW59O2F0LmNvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9ydGgtZS5zb3V0aH07YXQuZnJvbURlZ3JlZXM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gZT1rLnRvUmFkaWFucyhlPz8wKSx0PWsudG9SYWRpYW5zKHQ/PzApLG49ay50b1JhZGlhbnMobj8/MCksbz1rLnRvUmFkaWFucyhvPz8wKSxnKGEpPyhhLndlc3Q9ZSxhLnNvdXRoPXQsYS5lYXN0PW4sYS5ub3J0aD1vLGEpOm5ldyBhdChlLHQsbixvKX07YXQuZnJvbVJhZGlhbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gZyhhKT8oYS53ZXN0PWU/PzAsYS5zb3V0aD10Pz8wLGEuZWFzdD1uPz8wLGEubm9ydGg9bz8/MCxhKTpuZXcgYXQoZSx0LG4sbyl9O2F0LmZyb21DYXJ0b2dyYXBoaWNBcnJheT1mdW5jdGlvbihlLHQpe2xldCBuPU51bWJlci5NQVhfVkFMVUUsbz0tTnVtYmVyLk1BWF9WQUxVRSxhPU51bWJlci5NQVhfVkFMVUUscj0tTnVtYmVyLk1BWF9WQUxVRSxpPU51bWJlci5NQVhfVkFMVUUsZj0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGQ9MCxjPWUubGVuZ3RoO2Q8YztkKyspe2xldCB1PWVbZF07bj1NYXRoLm1pbihuLHUubG9uZ2l0dWRlKSxvPU1hdGgubWF4KG8sdS5sb25naXR1ZGUpLGk9TWF0aC5taW4oaSx1LmxhdGl0dWRlKSxmPU1hdGgubWF4KGYsdS5sYXRpdHVkZSk7bGV0IGw9dS5sb25naXR1ZGU+PTA/dS5sb25naXR1ZGU6dS5sb25naXR1ZGUray5UV09fUEk7YT1NYXRoLm1pbihhLGwpLHI9TWF0aC5tYXgocixsKX1yZXR1cm4gby1uPnItYSYmKG49YSxvPXIsbz5rLlBJJiYobz1vLWsuVFdPX1BJKSxuPmsuUEkmJihuPW4tay5UV09fUEkpKSxnKHQpPyh0Lndlc3Q9bix0LnNvdXRoPWksdC5lYXN0PW8sdC5ub3J0aD1mLHQpOm5ldyBhdChuLGksbyxmKX07YXQuZnJvbUNhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKGUsdCxuKXt0PXQ/P3EuZGVmYXVsdDtsZXQgbz1OdW1iZXIuTUFYX1ZBTFVFLGE9LU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLGk9LU51bWJlci5NQVhfVkFMVUUsZj1OdW1iZXIuTUFYX1ZBTFVFLGQ9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBjPTAsdT1lLmxlbmd0aDtjPHU7YysrKXtsZXQgbD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbY10pO289TWF0aC5taW4obyxsLmxvbmdpdHVkZSksYT1NYXRoLm1heChhLGwubG9uZ2l0dWRlKSxmPU1hdGgubWluKGYsbC5sYXRpdHVkZSksZD1NYXRoLm1heChkLGwubGF0aXR1ZGUpO2xldCBoPWwubG9uZ2l0dWRlPj0wP2wubG9uZ2l0dWRlOmwubG9uZ2l0dWRlK2suVFdPX1BJO3I9TWF0aC5taW4ocixoKSxpPU1hdGgubWF4KGksaCl9cmV0dXJuIGEtbz5pLXImJihvPXIsYT1pLGE+ay5QSSYmKGE9YS1rLlRXT19QSSksbz5rLlBJJiYobz1vLWsuVFdPX1BJKSksZyhuKT8obi53ZXN0PW8sbi5zb3V0aD1mLG4uZWFzdD1hLG4ubm9ydGg9ZCxuKTpuZXcgYXQobyxmLGEsZCl9O0hNPW5ldyBzLEtNPW5ldyBzLHFNPW5ldyBzLFdNPW5ldyBzLFhNPW5ldyBzLFViPW5ldyBBcnJheSg1KTtmb3IobGV0IGU9MDtlPFViLmxlbmd0aDsrK2UpVWJbZV09bmV3IHM7YXQuZnJvbUJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmNlbnRlcixhPWUucmFkaXVzO2lmKGcodCl8fCh0PXEuZGVmYXVsdCksZyhuKXx8KG49bmV3IGF0KSxzLmVxdWFscyhvLHMuWkVSTykpcmV0dXJuIGF0LmNsb25lKGF0Lk1BWF9WQUxVRSxuKSxuO2xldCByPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG8sdCxITSksaT0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIscy5VTklUX1gsS00pO3Mubm9ybWFsaXplKGksaSk7bGV0IGY9JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLHMuVU5JVF9ZLHFNKTtzLm5vcm1hbGl6ZShmLGYpLHMubXVsdGlwbHlCeVNjYWxhcihmLGEsZikscy5tdWx0aXBseUJ5U2NhbGFyKGksYSxpKTtsZXQgZD1zLm5lZ2F0ZShmLFhNKSxjPXMubmVnYXRlKGksV00pLHU9VWIsbD11WzBdO3JldHVybiBzLmFkZChvLGYsbCksbD11WzFdLHMuYWRkKG8sYyxsKSxsPXVbMl0scy5hZGQobyxkLGwpLGw9dVszXSxzLmFkZChvLGksbCksdVs0XT1vLGF0LmZyb21DYXJ0ZXNpYW5BcnJheSh1LHQsbil9O2F0LmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC53ZXN0PWUud2VzdCx0LnNvdXRoPWUuc291dGgsdC5lYXN0PWUuZWFzdCx0Lm5vcnRoPWUubm9ydGgsdCk6bmV3IGF0KGUud2VzdCxlLnNvdXRoLGUuZWFzdCxlLm5vcnRoKX07YXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZS53ZXN0LXQud2VzdCk8PW4mJk1hdGguYWJzKGUuc291dGgtdC5zb3V0aCk8PW4mJk1hdGguYWJzKGUuZWFzdC10LmVhc3QpPD1uJiZNYXRoLmFicyhlLm5vcnRoLXQubm9ydGgpPD1ufTthdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGF0LmNsb25lKHRoaXMsZSl9O2F0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGF0LmVxdWFscyh0aGlzLGUpfTthdC5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUud2VzdD09PXQud2VzdCYmZS5zb3V0aD09PXQuc291dGgmJmUuZWFzdD09PXQuZWFzdCYmZS5ub3J0aD09PXQubm9ydGh9O2F0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGF0LmVxdWFsc0Vwc2lsb24odGhpcyxlLHQpfTthdC5fdmFsaWRhdGU9ZnVuY3Rpb24oZSl7fTthdC5zb3V0aHdlc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS53ZXN0LHQubGF0aXR1ZGU9ZS5zb3V0aCx0LmhlaWdodD0wLHQpOm5ldyByZShlLndlc3QsZS5zb3V0aCl9O2F0Lm5vcnRod2VzdD1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1lLndlc3QsdC5sYXRpdHVkZT1lLm5vcnRoLHQuaGVpZ2h0PTAsdCk6bmV3IHJlKGUud2VzdCxlLm5vcnRoKX07YXQubm9ydGhlYXN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWUuZWFzdCx0LmxhdGl0dWRlPWUubm9ydGgsdC5oZWlnaHQ9MCx0KTpuZXcgcmUoZS5lYXN0LGUubm9ydGgpfTthdC5zb3V0aGVhc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS5lYXN0LHQubGF0aXR1ZGU9ZS5zb3V0aCx0LmhlaWdodD0wLHQpOm5ldyByZShlLmVhc3QsZS5zb3V0aCl9O2F0LmNlbnRlcj1mdW5jdGlvbihlLHQpe2xldCBuPWUuZWFzdCxvPWUud2VzdDtuPG8mJihuKz1rLlRXT19QSSk7bGV0IGE9ay5uZWdhdGl2ZVBpVG9QaSgobytuKSouNSkscj0oZS5zb3V0aCtlLm5vcnRoKSouNTtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9YSx0LmxhdGl0dWRlPXIsdC5oZWlnaHQ9MCx0KTpuZXcgcmUoYSxyKX07YXQuaW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmVhc3QsYT1lLndlc3Qscj10LmVhc3QsaT10Lndlc3Q7bzxhJiZyPjA/bys9ay5UV09fUEk6cjxpJiZvPjAmJihyKz1rLlRXT19QSSksbzxhJiZpPDA/aSs9ay5UV09fUEk6cjxpJiZhPDAmJihhKz1rLlRXT19QSSk7bGV0IGY9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChhLGkpKSxkPWsubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4obyxyKSk7aWYoKGUud2VzdDxlLmVhc3R8fHQud2VzdDx0LmVhc3QpJiZkPD1mKXJldHVybjtsZXQgYz1NYXRoLm1heChlLnNvdXRoLHQuc291dGgpLHU9TWF0aC5taW4oZS5ub3J0aCx0Lm5vcnRoKTtpZighKGM+PXUpKXJldHVybiBnKG4pPyhuLndlc3Q9ZixuLnNvdXRoPWMsbi5lYXN0PWQsbi5ub3J0aD11LG4pOm5ldyBhdChmLGMsZCx1KX07YXQuc2ltcGxlSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1NYXRoLm1heChlLndlc3QsdC53ZXN0KSxhPU1hdGgubWF4KGUuc291dGgsdC5zb3V0aCkscj1NYXRoLm1pbihlLmVhc3QsdC5lYXN0KSxpPU1hdGgubWluKGUubm9ydGgsdC5ub3J0aCk7aWYoIShhPj1pfHxvPj1yKSlyZXR1cm4gZyhuKT8obi53ZXN0PW8sbi5zb3V0aD1hLG4uZWFzdD1yLG4ubm9ydGg9aSxuKTpuZXcgYXQobyxhLHIsaSl9O2F0LnVuaW9uPWZ1bmN0aW9uKGUsdCxuKXtnKG4pfHwobj1uZXcgYXQpO2xldCBvPWUuZWFzdCxhPWUud2VzdCxyPXQuZWFzdCxpPXQud2VzdDtvPGEmJnI+MD9vKz1rLlRXT19QSTpyPGkmJm8+MCYmKHIrPWsuVFdPX1BJKSxvPGEmJmk8MD9pKz1rLlRXT19QSTpyPGkmJmE8MCYmKGErPWsuVFdPX1BJKTtsZXQgZj1rLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWluKGEsaSkpLGQ9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChvLHIpKTtyZXR1cm4gbi53ZXN0PWYsbi5zb3V0aD1NYXRoLm1pbihlLnNvdXRoLHQuc291dGgpLG4uZWFzdD1kLG4ubm9ydGg9TWF0aC5tYXgoZS5ub3J0aCx0Lm5vcnRoKSxufTthdC5leHBhbmQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgYXQpLG4ud2VzdD1NYXRoLm1pbihlLndlc3QsdC5sb25naXR1ZGUpLG4uc291dGg9TWF0aC5taW4oZS5zb3V0aCx0LmxhdGl0dWRlKSxuLmVhc3Q9TWF0aC5tYXgoZS5lYXN0LHQubG9uZ2l0dWRlKSxuLm5vcnRoPU1hdGgubWF4KGUubm9ydGgsdC5sYXRpdHVkZSksbn07YXQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUsYT1lLndlc3Qscj1lLmVhc3Q7cmV0dXJuIHI8YSYmKHIrPWsuVFdPX1BJLG48MCYmKG4rPWsuVFdPX1BJKSksKG4+YXx8ay5lcXVhbHNFcHNpbG9uKG4sYSxrLkVQU0lMT04xNCkpJiYobjxyfHxrLmVxdWFsc0Vwc2lsb24obixyLGsuRVBTSUxPTjE0KSkmJm8+PWUuc291dGgmJm88PWUubm9ydGh9O1lNPW5ldyByZTthdC5zdWJzYW1wbGU9ZnVuY3Rpb24oZSx0LG4sbyl7dD10Pz9xLmRlZmF1bHQsbj1uPz8wLGcobyl8fChvPVtdKTtsZXQgYT0wLHI9ZS5ub3J0aCxpPWUuc291dGgsZj1lLmVhc3QsZD1lLndlc3QsYz1ZTTtjLmhlaWdodD1uLGMubG9uZ2l0dWRlPWQsYy5sYXRpdHVkZT1yLG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyxjLmxvbmdpdHVkZT1mLG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyxjLmxhdGl0dWRlPWksb1thXT10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1thXSksYSsrLGMubG9uZ2l0dWRlPWQsb1thXT10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1thXSksYSsrLHI8MD9jLmxhdGl0dWRlPXI6aT4wP2MubGF0aXR1ZGU9aTpjLmxhdGl0dWRlPTA7Zm9yKGxldCB1PTE7dTw4OysrdSljLmxvbmdpdHVkZT0tTWF0aC5QSSt1KmsuUElfT1ZFUl9UV08sYXQuY29udGFpbnMoZSxjKSYmKG9bYV09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bYV0pLGErKyk7cmV0dXJuIGMubGF0aXR1ZGU9PT0wJiYoYy5sb25naXR1ZGU9ZCxvW2FdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW2FdKSxhKyssYy5sb25naXR1ZGU9ZixvW2FdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW2FdKSxhKyspLG8ubGVuZ3RoPWEsb307YXQuc3Vic2VjdGlvbj1mdW5jdGlvbihlLHQsbixvLGEscil7aWYoZyhyKXx8KHI9bmV3IGF0KSxlLndlc3Q8PWUuZWFzdCl7bGV0IGY9ZS5lYXN0LWUud2VzdDtyLndlc3Q9ZS53ZXN0K3QqZixyLmVhc3Q9ZS53ZXN0K28qZn1lbHNle2xldCBmPWsuVFdPX1BJK2UuZWFzdC1lLndlc3Q7ci53ZXN0PWsubmVnYXRpdmVQaVRvUGkoZS53ZXN0K3QqZiksci5lYXN0PWsubmVnYXRpdmVQaVRvUGkoZS53ZXN0K28qZil9bGV0IGk9ZS5ub3J0aC1lLnNvdXRoO3JldHVybiByLnNvdXRoPWUuc291dGgrbippLHIubm9ydGg9ZS5zb3V0aCthKmksdD09PTEmJihyLndlc3Q9ZS5lYXN0KSxvPT09MSYmKHIuZWFzdD1lLmVhc3QpLG49PT0xJiYoci5zb3V0aD1lLm5vcnRoKSxhPT09MSYmKHIubm9ydGg9ZS5ub3J0aCkscn07YXQuTUFYX1ZBTFVFPU9iamVjdC5mcmVlemUobmV3IGF0KC1NYXRoLlBJLC1rLlBJX09WRVJfVFdPLE1hdGguUEksay5QSV9PVkVSX1RXTykpO1NlPWF0fSk7ZnVuY3Rpb24gJGUoZSx0KXt0aGlzLmNlbnRlcj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5yYWRpdXM9dD8/MH12YXIgemIsR2IsVmIsSGIsS2IscWIsV2IsYm8sWGIsWWIsSmIsWmIsSk0sSkEsWk0sUU0sTGIsamIsJE0sZU4sdE4sbk4sb04sYU4sck4saU4sY04sc04sZk4sZE4sWkEsdU4sbE4saE4sbU4sYk4sJEEsUUEsZ2UsTXQ9WCgoKT0+e0llKCk7RXQoKTtzZSgpO3FlKCk7a3IoKTtaaSgpO2xmKCk7R2UoKTtEbigpO3BuKCk7X24oKTt6Yj1uZXcgcyxHYj1uZXcgcyxWYj1uZXcgcyxIYj1uZXcgcyxLYj1uZXcgcyxxYj1uZXcgcyxXYj1uZXcgcyxibz1uZXcgcyxYYj1uZXcgcyxZYj1uZXcgcyxKYj1uZXcgcyxaYj1uZXcgcyxKTT00LzMqay5QSTskZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3ICRlKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0LmNlbnRlcj1zLmNsb25lKHMuWkVSTyx0LmNlbnRlciksdC5yYWRpdXM9MCx0O2xldCBuPXMuY2xvbmUoZVswXSxXYiksbz1zLmNsb25lKG4semIpLGE9cy5jbG9uZShuLEdiKSxyPXMuY2xvbmUobixWYiksaT1zLmNsb25lKG4sSGIpLGY9cy5jbG9uZShuLEtiKSxkPXMuY2xvbmUobixxYiksYz1lLmxlbmd0aCx1O2Zvcih1PTE7dTxjO3UrKyl7cy5jbG9uZShlW3VdLG4pO2xldCBJPW4ueCxOPW4ueSxQPW4uejtJPG8ueCYmcy5jbG9uZShuLG8pLEk+aS54JiZzLmNsb25lKG4saSksTjxhLnkmJnMuY2xvbmUobixhKSxOPmYueSYmcy5jbG9uZShuLGYpLFA8ci56JiZzLmNsb25lKG4sciksUD5kLnomJnMuY2xvbmUobixkKX1sZXQgbD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChpLG8sYm8pKSxoPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGYsYSxibykpLG09cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoZCxyLGJvKSksYj1vLHA9aSx5PWw7aD55JiYoeT1oLGI9YSxwPWYpLG0+eSYmKHk9bSxiPXIscD1kKTtsZXQgRT1YYjtFLng9KGIueCtwLngpKi41LEUueT0oYi55K3AueSkqLjUsRS56PShiLnorcC56KSouNTtsZXQgXz1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChwLEUsYm8pKSxUPU1hdGguc3FydChfKSx3PVliO3cueD1vLngsdy55PWEueSx3Lno9ci56O2xldCBSPUpiO1IueD1pLngsUi55PWYueSxSLno9ZC56O2xldCBTPXMubWlkcG9pbnQodyxSLFpiKSxDPTA7Zm9yKHU9MDt1PGM7dSsrKXtzLmNsb25lKGVbdV0sbik7bGV0IEk9cy5tYWduaXR1ZGUocy5zdWJ0cmFjdChuLFMsYm8pKTtJPkMmJihDPUkpO2xldCBOPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KG4sRSxibykpO2lmKE4+Xyl7bGV0IFA9TWF0aC5zcXJ0KE4pO1Q9KFQrUCkqLjUsXz1UKlQ7bGV0IHY9UC1UO0UueD0oVCpFLngrdipuLngpL1AsRS55PShUKkUueSt2Km4ueSkvUCxFLno9KFQqRS56K3Yqbi56KS9QfX1yZXR1cm4gVDxDPyhzLmNsb25lKEUsdC5jZW50ZXIpLHQucmFkaXVzPVQpOihzLmNsb25lKFMsdC5jZW50ZXIpLHQucmFkaXVzPUMpLHR9O0pBPW5ldyBpbyxaTT1uZXcgcyxRTT1uZXcgcyxMYj1uZXcgcmUsamI9bmV3IHJlOyRlLmZyb21SZWN0YW5nbGUyRD1mdW5jdGlvbihlLHQsbil7cmV0dXJuICRlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKGUsdCwwLDAsbil9OyRlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEPWZ1bmN0aW9uKGUsdCxuLG8sYSl7aWYoZyhhKXx8KGE9bmV3ICRlKSwhZyhlKSlyZXR1cm4gYS5jZW50ZXI9cy5jbG9uZShzLlpFUk8sYS5jZW50ZXIpLGEucmFkaXVzPTAsYTtKQS5fZWxsaXBzb2lkPXEuZGVmYXVsdCx0PXQ/P0pBLFNlLnNvdXRod2VzdChlLExiKSxMYi5oZWlnaHQ9bixTZS5ub3J0aGVhc3QoZSxqYiksamIuaGVpZ2h0PW87bGV0IHI9dC5wcm9qZWN0KExiLFpNKSxpPXQucHJvamVjdChqYixRTSksZj1pLngtci54LGQ9aS55LXIueSxjPWkuei1yLno7YS5yYWRpdXM9TWF0aC5zcXJ0KGYqZitkKmQrYypjKSouNTtsZXQgdT1hLmNlbnRlcjtyZXR1cm4gdS54PXIueCtmKi41LHUueT1yLnkrZCouNSx1Lno9ci56K2MqLjUsYX07JE09W107JGUuZnJvbVJlY3RhbmdsZTNEPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKHQ9dD8/cS5kZWZhdWx0LG49bj8/MCxnKG8pfHwobz1uZXcgJGUpLCFnKGUpKXJldHVybiBvLmNlbnRlcj1zLmNsb25lKHMuWkVSTyxvLmNlbnRlciksby5yYWRpdXM9MCxvO2xldCBhPVNlLnN1YnNhbXBsZShlLHQsbiwkTSk7cmV0dXJuICRlLmZyb21Qb2ludHMoYSxvKX07JGUuZnJvbVZlcnRpY2VzPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKGcobyl8fChvPW5ldyAkZSksIWcoZSl8fGUubGVuZ3RoPT09MClyZXR1cm4gby5jZW50ZXI9cy5jbG9uZShzLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbzt0PXQ/P3MuWkVSTyxuPW4/PzM7bGV0IGE9V2I7YS54PWVbMF0rdC54LGEueT1lWzFdK3QueSxhLno9ZVsyXSt0Lno7bGV0IHI9cy5jbG9uZShhLHpiKSxpPXMuY2xvbmUoYSxHYiksZj1zLmNsb25lKGEsVmIpLGQ9cy5jbG9uZShhLEhiKSxjPXMuY2xvbmUoYSxLYiksdT1zLmNsb25lKGEscWIpLGw9ZS5sZW5ndGgsaDtmb3IoaD0wO2g8bDtoKz1uKXtsZXQgUD1lW2hdK3QueCx2PWVbaCsxXSt0LnksQT1lW2grMl0rdC56O2EueD1QLGEueT12LGEuej1BLFA8ci54JiZzLmNsb25lKGEsciksUD5kLngmJnMuY2xvbmUoYSxkKSx2PGkueSYmcy5jbG9uZShhLGkpLHY+Yy55JiZzLmNsb25lKGEsYyksQTxmLnomJnMuY2xvbmUoYSxmKSxBPnUueiYmcy5jbG9uZShhLHUpfWxldCBtPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGQscixibykpLGI9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoYyxpLGJvKSkscD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh1LGYsYm8pKSx5PXIsRT1kLF89bTtiPl8mJihfPWIseT1pLEU9YykscD5fJiYoXz1wLHk9ZixFPXUpO2xldCBUPVhiO1QueD0oeS54K0UueCkqLjUsVC55PSh5LnkrRS55KSouNSxULno9KHkueitFLnopKi41O2xldCB3PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEUsVCxibykpLFI9TWF0aC5zcXJ0KHcpLFM9WWI7Uy54PXIueCxTLnk9aS55LFMuej1mLno7bGV0IEM9SmI7Qy54PWQueCxDLnk9Yy55LEMuej11Lno7bGV0IEk9cy5taWRwb2ludChTLEMsWmIpLE49MDtmb3IoaD0wO2g8bDtoKz1uKXthLng9ZVtoXSt0LngsYS55PWVbaCsxXSt0LnksYS56PWVbaCsyXSt0Lno7bGV0IFA9cy5tYWduaXR1ZGUocy5zdWJ0cmFjdChhLEksYm8pKTtQPk4mJihOPVApO2xldCB2PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGEsVCxibykpO2lmKHY+dyl7bGV0IEE9TWF0aC5zcXJ0KHYpO1I9KFIrQSkqLjUsdz1SKlI7bGV0IHg9QS1SO1QueD0oUipULngreCphLngpL0EsVC55PShSKlQueSt4KmEueSkvQSxULno9KFIqVC56K3gqYS56KS9BfX1yZXR1cm4gUjxOPyhzLmNsb25lKFQsby5jZW50ZXIpLG8ucmFkaXVzPVIpOihzLmNsb25lKEksby5jZW50ZXIpLG8ucmFkaXVzPU4pLG99OyRlLmZyb21FbmNvZGVkQ2FydGVzaWFuVmVydGljZXM9ZnVuY3Rpb24oZSx0LG4pe2lmKGcobil8fChuPW5ldyAkZSksIWcoZSl8fCFnKHQpfHxlLmxlbmd0aCE9PXQubGVuZ3RofHxlLmxlbmd0aD09PTApcmV0dXJuIG4uY2VudGVyPXMuY2xvbmUocy5aRVJPLG4uY2VudGVyKSxuLnJhZGl1cz0wLG47bGV0IG89V2I7by54PWVbMF0rdFswXSxvLnk9ZVsxXSt0WzFdLG8uej1lWzJdK3RbMl07bGV0IGE9cy5jbG9uZShvLHpiKSxyPXMuY2xvbmUobyxHYiksaT1zLmNsb25lKG8sVmIpLGY9cy5jbG9uZShvLEhiKSxkPXMuY2xvbmUobyxLYiksYz1zLmNsb25lKG8scWIpLHU9ZS5sZW5ndGgsbDtmb3IobD0wO2w8dTtsKz0zKXtsZXQgTj1lW2xdK3RbbF0sUD1lW2wrMV0rdFtsKzFdLHY9ZVtsKzJdK3RbbCsyXTtvLng9TixvLnk9UCxvLno9dixOPGEueCYmcy5jbG9uZShvLGEpLE4+Zi54JiZzLmNsb25lKG8sZiksUDxyLnkmJnMuY2xvbmUobyxyKSxQPmQueSYmcy5jbG9uZShvLGQpLHY8aS56JiZzLmNsb25lKG8saSksdj5jLnomJnMuY2xvbmUobyxjKX1sZXQgaD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChmLGEsYm8pKSxtPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGQscixibykpLGI9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoYyxpLGJvKSkscD1hLHk9ZixFPWg7bT5FJiYoRT1tLHA9cix5PWQpLGI+RSYmKEU9YixwPWkseT1jKTtsZXQgXz1YYjtfLng9KHAueCt5LngpKi41LF8ueT0ocC55K3kueSkqLjUsXy56PShwLnoreS56KSouNTtsZXQgVD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh5LF8sYm8pKSx3PU1hdGguc3FydChUKSxSPVliO1IueD1hLngsUi55PXIueSxSLno9aS56O2xldCBTPUpiO1MueD1mLngsUy55PWQueSxTLno9Yy56O2xldCBDPXMubWlkcG9pbnQoUixTLFpiKSxJPTA7Zm9yKGw9MDtsPHU7bCs9Myl7by54PWVbbF0rdFtsXSxvLnk9ZVtsKzFdK3RbbCsxXSxvLno9ZVtsKzJdK3RbbCsyXTtsZXQgTj1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KG8sQyxibykpO04+SSYmKEk9Tik7bGV0IFA9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QobyxfLGJvKSk7aWYoUD5UKXtsZXQgdj1NYXRoLnNxcnQoUCk7dz0odyt2KSouNSxUPXcqdztsZXQgQT12LXc7Xy54PSh3Kl8ueCtBKm8ueCkvdixfLnk9KHcqXy55K0Eqby55KS92LF8uej0odypfLnorQSpvLnopL3Z9fXJldHVybiB3PEk/KHMuY2xvbmUoXyxuLmNlbnRlciksbi5yYWRpdXM9dyk6KHMuY2xvbmUoQyxuLmNlbnRlciksbi5yYWRpdXM9SSksbn07JGUuZnJvbUNvcm5lclBvaW50cz1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3ICRlKTtsZXQgbz1zLm1pZHBvaW50KGUsdCxuLmNlbnRlcik7cmV0dXJuIG4ucmFkaXVzPXMuZGlzdGFuY2Uobyx0KSxufTskZS5mcm9tRWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCl8fCh0PW5ldyAkZSkscy5jbG9uZShzLlpFUk8sdC5jZW50ZXIpLHQucmFkaXVzPWUubWF4aW11bVJhZGl1cyx0fTtlTj1uZXcgczskZS5mcm9tQm91bmRpbmdTcGhlcmVzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3ICRlKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0LmNlbnRlcj1zLmNsb25lKHMuWkVSTyx0LmNlbnRlciksdC5yYWRpdXM9MCx0O2xldCBuPWUubGVuZ3RoO2lmKG49PT0xKXJldHVybiAkZS5jbG9uZShlWzBdLHQpO2lmKG49PT0yKXJldHVybiAkZS51bmlvbihlWzBdLGVbMV0sdCk7bGV0IG89W10sYTtmb3IoYT0wO2E8bjthKyspby5wdXNoKGVbYV0uY2VudGVyKTt0PSRlLmZyb21Qb2ludHMobyx0KTtsZXQgcj10LmNlbnRlcixpPXQucmFkaXVzO2ZvcihhPTA7YTxuO2ErKyl7bGV0IGY9ZVthXTtpPU1hdGgubWF4KGkscy5kaXN0YW5jZShyLGYuY2VudGVyLGVOKStmLnJhZGl1cyl9cmV0dXJuIHQucmFkaXVzPWksdH07dE49bmV3IHMsbk49bmV3IHMsb049bmV3IHM7JGUuZnJvbU9yaWVudGVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgJGUpO2xldCBuPWUuaGFsZkF4ZXMsbz1KLmdldENvbHVtbihuLDAsdE4pLGE9Si5nZXRDb2x1bW4obiwxLG5OKSxyPUouZ2V0Q29sdW1uKG4sMixvTik7cmV0dXJuIHMuYWRkKG8sYSxvKSxzLmFkZChvLHIsbyksdC5jZW50ZXI9cy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksdC5yYWRpdXM9cy5tYWduaXR1ZGUobyksdH07YU49bmV3IHMsck49bmV3IHM7JGUuZnJvbVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3ICRlKTtsZXQgbj0kLmdldFRyYW5zbGF0aW9uKGUsYU4pLG89JC5nZXRTY2FsZShlLHJOKSxhPS41KnMubWFnbml0dWRlKG8pO3JldHVybiB0LmNlbnRlcj1zLmNsb25lKG4sdC5jZW50ZXIpLHQucmFkaXVzPWEsdH07JGUuY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LmNlbnRlcj1zLmNsb25lKGUuY2VudGVyLHQuY2VudGVyKSx0LnJhZGl1cz1lLnJhZGl1cyx0KTpuZXcgJGUoZS5jZW50ZXIsZS5yYWRpdXMpfTskZS5wYWNrZWRMZW5ndGg9NDskZS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5jZW50ZXI7cmV0dXJuIHRbbisrXT1vLngsdFtuKytdPW8ueSx0W24rK109by56LHRbbl09ZS5yYWRpdXMsdH07JGUudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzAsZyhuKXx8KG49bmV3ICRlKTtsZXQgbz1uLmNlbnRlcjtyZXR1cm4gby54PWVbdCsrXSxvLnk9ZVt0KytdLG8uej1lW3QrK10sbi5yYWRpdXM9ZVt0XSxufTtpTj1uZXcgcyxjTj1uZXcgczskZS51bmlvbj1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3ICRlKTtsZXQgbz1lLmNlbnRlcixhPWUucmFkaXVzLHI9dC5jZW50ZXIsaT10LnJhZGl1cyxmPXMuc3VidHJhY3QocixvLGlOKSxkPXMubWFnbml0dWRlKGYpO2lmKGE+PWQraSlyZXR1cm4gZS5jbG9uZShuKSxuO2lmKGk+PWQrYSlyZXR1cm4gdC5jbG9uZShuKSxuO2xldCBjPShhK2QraSkqLjUsdT1zLm11bHRpcGx5QnlTY2FsYXIoZiwoLWErYykvZCxjTik7cmV0dXJuIHMuYWRkKHUsbyx1KSxzLmNsb25lKHUsbi5jZW50ZXIpLG4ucmFkaXVzPWMsbn07c049bmV3IHM7JGUuZXhwYW5kPWZ1bmN0aW9uKGUsdCxuKXtuPSRlLmNsb25lKGUsbik7bGV0IG89cy5tYWduaXR1ZGUocy5zdWJ0cmFjdCh0LG4uY2VudGVyLHNOKSk7cmV0dXJuIG8+bi5yYWRpdXMmJihuLnJhZGl1cz1vKSxufTskZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuY2VudGVyLG89ZS5yYWRpdXMsYT10Lm5vcm1hbCxyPXMuZG90KGEsbikrdC5kaXN0YW5jZTtyZXR1cm4gcjwtbz9Tbi5PVVRTSURFOnI8bz9Tbi5JTlRFUlNFQ1RJTkc6U24uSU5TSURFfTskZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgJGUpLG4uY2VudGVyPSQubXVsdGlwbHlCeVBvaW50KHQsZS5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPSQuZ2V0TWF4aW11bVNjYWxlKHQpKmUucmFkaXVzLG59O2ZOPW5ldyBzOyRlLmRpc3RhbmNlU3F1YXJlZFRvPWZ1bmN0aW9uKGUsdCl7bGV0IG49cy5zdWJ0cmFjdChlLmNlbnRlcix0LGZOKSxvPXMubWFnbml0dWRlKG4pLWUucmFkaXVzO3JldHVybiBvPD0wPzA6bypvfTskZS50cmFuc2Zvcm1XaXRob3V0U2NhbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgJGUpLG4uY2VudGVyPSQubXVsdGlwbHlCeVBvaW50KHQsZS5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPWUucmFkaXVzLG59O2ROPW5ldyBzOyRlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbixvKXtnKG8pfHwobz1uZXcgRW8pO2xldCBhPXMuc3VidHJhY3QoZS5jZW50ZXIsdCxkTikscj1zLmRvdChuLGEpO3JldHVybiBvLnN0YXJ0PXItZS5yYWRpdXMsby5zdG9wPXIrZS5yYWRpdXMsb307WkE9bmV3IHMsdU49bmV3IHMsbE49bmV3IHMsaE49bmV3IHMsbU49bmV3IHMsYk49bmV3IHJlLCRBPW5ldyBBcnJheSg4KTtmb3IobGV0IGU9MDtlPDg7KytlKSRBW2VdPW5ldyBzO1FBPW5ldyBpbzskZS5wcm9qZWN0VG8yRD1mdW5jdGlvbihlLHQsbil7UUEuX2VsbGlwc29pZD1xLmRlZmF1bHQsdD10Pz9RQTtsZXQgbz10LmVsbGlwc29pZCxhPWUuY2VudGVyLHI9ZS5yYWRpdXMsaTtzLmVxdWFscyhhLHMuWkVSTyk/aT1zLmNsb25lKHMuVU5JVF9YLFpBKTppPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEsWkEpO2xldCBmPXMuY3Jvc3Mocy5VTklUX1osaSx1Tik7cy5ub3JtYWxpemUoZixmKTtsZXQgZD1zLmNyb3NzKGksZixsTik7cy5ub3JtYWxpemUoZCxkKSxzLm11bHRpcGx5QnlTY2FsYXIoaSxyLGkpLHMubXVsdGlwbHlCeVNjYWxhcihkLHIsZCkscy5tdWx0aXBseUJ5U2NhbGFyKGYscixmKTtsZXQgYz1zLm5lZ2F0ZShkLG1OKSx1PXMubmVnYXRlKGYsaE4pLGw9JEEsaD1sWzBdO3MuYWRkKGksZCxoKSxzLmFkZChoLGYsaCksaD1sWzFdLHMuYWRkKGksZCxoKSxzLmFkZChoLHUsaCksaD1sWzJdLHMuYWRkKGksYyxoKSxzLmFkZChoLHUsaCksaD1sWzNdLHMuYWRkKGksYyxoKSxzLmFkZChoLGYsaCkscy5uZWdhdGUoaSxpKSxoPWxbNF0scy5hZGQoaSxkLGgpLHMuYWRkKGgsZixoKSxoPWxbNV0scy5hZGQoaSxkLGgpLHMuYWRkKGgsdSxoKSxoPWxbNl0scy5hZGQoaSxjLGgpLHMuYWRkKGgsdSxoKSxoPWxbN10scy5hZGQoaSxjLGgpLHMuYWRkKGgsZixoKTtsZXQgbT1sLmxlbmd0aDtmb3IobGV0IEU9MDtFPG07KytFKXtsZXQgXz1sW0VdO3MuYWRkKGEsXyxfKTtsZXQgVD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sYk4pO3QucHJvamVjdChULF8pfW49JGUuZnJvbVBvaW50cyhsLG4pLGE9bi5jZW50ZXI7bGV0IGI9YS54LHA9YS55LHk9YS56O3JldHVybiBhLng9eSxhLnk9YixhLno9cCxufTskZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXQuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUoZSl9OyRlLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmcy5lcXVhbHMoZS5jZW50ZXIsdC5jZW50ZXIpJiZlLnJhZGl1cz09PXQucmFkaXVzfTskZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuICRlLmludGVyc2VjdFBsYW5lKHRoaXMsZSl9OyRlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbihlKXtyZXR1cm4gJGUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyxlKX07JGUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuICRlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLGUsdCxuKX07JGUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuICRlLmlzT2NjbHVkZWQodGhpcyxlKX07JGUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gJGUuZXF1YWxzKHRoaXMsZSl9OyRlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gJGUuY2xvbmUodGhpcyxlKX07JGUucHJvdG90eXBlLnZvbHVtZT1mdW5jdGlvbigpe2xldCBlPXRoaXMucmFkaXVzO3JldHVybiBKTSplKmUqZX07Z2U9JGV9KTt2YXIgcE4sUGUsb2M9WCgoKT0+e3BOPXtERVBUSF9CVUZGRVJfQklUOjI1NixTVEVOQ0lMX0JVRkZFUl9CSVQ6MTAyNCxDT0xPUl9CVUZGRVJfQklUOjE2Mzg0LFBPSU5UUzowLExJTkVTOjEsTElORV9MT09QOjIsTElORV9TVFJJUDozLFRSSUFOR0xFUzo0LFRSSUFOR0xFX1NUUklQOjUsVFJJQU5HTEVfRkFOOjYsWkVSTzowLE9ORToxLFNSQ19DT0xPUjo3NjgsT05FX01JTlVTX1NSQ19DT0xPUjo3NjksU1JDX0FMUEhBOjc3MCxPTkVfTUlOVVNfU1JDX0FMUEhBOjc3MSxEU1RfQUxQSEE6NzcyLE9ORV9NSU5VU19EU1RfQUxQSEE6NzczLERTVF9DT0xPUjo3NzQsT05FX01JTlVTX0RTVF9DT0xPUjo3NzUsU1JDX0FMUEhBX1NBVFVSQVRFOjc3NixGVU5DX0FERDozMjc3NCxCTEVORF9FUVVBVElPTjozMjc3NyxCTEVORF9FUVVBVElPTl9SR0I6MzI3NzcsQkxFTkRfRVFVQVRJT05fQUxQSEE6MzQ4NzcsRlVOQ19TVUJUUkFDVDozMjc3OCxGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6MzI3NzksQkxFTkRfRFNUX1JHQjozMjk2OCxCTEVORF9TUkNfUkdCOjMyOTY5LEJMRU5EX0RTVF9BTFBIQTozMjk3MCxCTEVORF9TUkNfQUxQSEE6MzI5NzEsQ09OU1RBTlRfQ09MT1I6MzI3NjksT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOjMyNzcwLENPTlNUQU5UX0FMUEhBOjMyNzcxLE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQTozMjc3MixCTEVORF9DT0xPUjozMjc3MyxBUlJBWV9CVUZGRVI6MzQ5NjIsRUxFTUVOVF9BUlJBWV9CVUZGRVI6MzQ5NjMsQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjQsRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzozNDk2NSxTVFJFQU1fRFJBVzozNTA0MCxTVEFUSUNfRFJBVzozNTA0NCxEWU5BTUlDX0RSQVc6MzUwNDgsQlVGRkVSX1NJWkU6MzQ2NjAsQlVGRkVSX1VTQUdFOjM0NjYxLENVUlJFTlRfVkVSVEVYX0FUVFJJQjozNDM0MixGUk9OVDoxMDI4LEJBQ0s6MTAyOSxGUk9OVF9BTkRfQkFDSzoxMDMyLENVTExfRkFDRToyODg0LEJMRU5EOjMwNDIsRElUSEVSOjMwMjQsU1RFTkNJTF9URVNUOjI5NjAsREVQVEhfVEVTVDoyOTI5LFNDSVNTT1JfVEVTVDozMDg5LFBPTFlHT05fT0ZGU0VUX0ZJTEw6MzI4MjMsU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOjMyOTI2LFNBTVBMRV9DT1ZFUkFHRTozMjkyOCxOT19FUlJPUjowLElOVkFMSURfRU5VTToxMjgwLElOVkFMSURfVkFMVUU6MTI4MSxJTlZBTElEX09QRVJBVElPTjoxMjgyLE9VVF9PRl9NRU1PUlk6MTI4NSxDVzoyMzA0LENDVzoyMzA1LExJTkVfV0lEVEg6Mjg0OSxBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6MzM5MDEsQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOjMzOTAyLENVTExfRkFDRV9NT0RFOjI4ODUsRlJPTlRfRkFDRToyODg2LERFUFRIX1JBTkdFOjI5MjgsREVQVEhfV1JJVEVNQVNLOjI5MzAsREVQVEhfQ0xFQVJfVkFMVUU6MjkzMSxERVBUSF9GVU5DOjI5MzIsU1RFTkNJTF9DTEVBUl9WQUxVRToyOTYxLFNURU5DSUxfRlVOQzoyOTYyLFNURU5DSUxfRkFJTDoyOTY0LFNURU5DSUxfUEFTU19ERVBUSF9GQUlMOjI5NjUsU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Mjk2NixTVEVOQ0lMX1JFRjoyOTY3LFNURU5DSUxfVkFMVUVfTUFTSzoyOTYzLFNURU5DSUxfV1JJVEVNQVNLOjI5NjgsU1RFTkNJTF9CQUNLX0ZVTkM6MzQ4MTYsU1RFTkNJTF9CQUNLX0ZBSUw6MzQ4MTcsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDozNDgxOCxTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOjM0ODE5LFNURU5DSUxfQkFDS19SRUY6MzYwMDMsU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6MzYwMDQsU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzozNjAwNSxWSUVXUE9SVDoyOTc4LFNDSVNTT1JfQk9YOjMwODgsQ09MT1JfQ0xFQVJfVkFMVUU6MzEwNixDT0xPUl9XUklURU1BU0s6MzEwNyxVTlBBQ0tfQUxJR05NRU5UOjMzMTcsUEFDS19BTElHTk1FTlQ6MzMzMyxNQVhfVEVYVFVSRV9TSVpFOjMzNzksTUFYX1ZJRVdQT1JUX0RJTVM6MzM4NixTVUJQSVhFTF9CSVRTOjM0MDgsUkVEX0JJVFM6MzQxMCxHUkVFTl9CSVRTOjM0MTEsQkxVRV9CSVRTOjM0MTIsQUxQSEFfQklUUzozNDEzLERFUFRIX0JJVFM6MzQxNCxTVEVOQ0lMX0JJVFM6MzQxNSxQT0xZR09OX09GRlNFVF9VTklUUzoxMDc1MixQT0xZR09OX09GRlNFVF9GQUNUT1I6MzI4MjQsVEVYVFVSRV9CSU5ESU5HXzJEOjMyODczLFNBTVBMRV9CVUZGRVJTOjMyOTM2LFNBTVBMRVM6MzI5MzcsU0FNUExFX0NPVkVSQUdFX1ZBTFVFOjMyOTM4LFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6MzI5MzksQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6MzQ0NjcsRE9OVF9DQVJFOjQzNTIsRkFTVEVTVDo0MzUzLE5JQ0VTVDo0MzU0LEdFTkVSQVRFX01JUE1BUF9ISU5UOjMzMTcwLEJZVEU6NTEyMCxVTlNJR05FRF9CWVRFOjUxMjEsU0hPUlQ6NTEyMixVTlNJR05FRF9TSE9SVDo1MTIzLElOVDo1MTI0LFVOU0lHTkVEX0lOVDo1MTI1LEZMT0FUOjUxMjYsREVQVEhfQ09NUE9ORU5UOjY0MDIsQUxQSEE6NjQwNixSR0I6NjQwNyxSR0JBOjY0MDgsTFVNSU5BTkNFOjY0MDksTFVNSU5BTkNFX0FMUEhBOjY0MTAsVU5TSUdORURfU0hPUlRfNF80XzRfNDozMjgxOSxVTlNJR05FRF9TSE9SVF81XzVfNV8xOjMyODIwLFVOU0lHTkVEX1NIT1JUXzVfNl81OjMzNjM1LEZSQUdNRU5UX1NIQURFUjozNTYzMixWRVJURVhfU0hBREVSOjM1NjMzLE1BWF9WRVJURVhfQVRUUklCUzozNDkyMSxNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzozNjM0NyxNQVhfVkFSWUlOR19WRUNUT1JTOjM2MzQ4LE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOjM1NjYxLE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MCxNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNDkzMCxNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOjM2MzQ5LFNIQURFUl9UWVBFOjM1NjYzLERFTEVURV9TVEFUVVM6MzU3MTIsTElOS19TVEFUVVM6MzU3MTQsVkFMSURBVEVfU1RBVFVTOjM1NzE1LEFUVEFDSEVEX1NIQURFUlM6MzU3MTcsQUNUSVZFX1VOSUZPUk1TOjM1NzE4LEFDVElWRV9BVFRSSUJVVEVTOjM1NzIxLFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjozNTcyNCxDVVJSRU5UX1BST0dSQU06MzU3MjUsTkVWRVI6NTEyLExFU1M6NTEzLEVRVUFMOjUxNCxMRVFVQUw6NTE1LEdSRUFURVI6NTE2LE5PVEVRVUFMOjUxNyxHRVFVQUw6NTE4LEFMV0FZUzo1MTksS0VFUDo3NjgwLFJFUExBQ0U6NzY4MSxJTkNSOjc2ODIsREVDUjo3NjgzLElOVkVSVDo1Mzg2LElOQ1JfV1JBUDozNDA1NSxERUNSX1dSQVA6MzQwNTYsVkVORE9SOjc5MzYsUkVOREVSRVI6NzkzNyxWRVJTSU9OOjc5MzgsTkVBUkVTVDo5NzI4LExJTkVBUjo5NzI5LE5FQVJFU1RfTUlQTUFQX05FQVJFU1Q6OTk4NCxMSU5FQVJfTUlQTUFQX05FQVJFU1Q6OTk4NSxORUFSRVNUX01JUE1BUF9MSU5FQVI6OTk4NixMSU5FQVJfTUlQTUFQX0xJTkVBUjo5OTg3LFRFWFRVUkVfTUFHX0ZJTFRFUjoxMDI0MCxURVhUVVJFX01JTl9GSUxURVI6MTAyNDEsVEVYVFVSRV9XUkFQX1M6MTAyNDIsVEVYVFVSRV9XUkFQX1Q6MTAyNDMsVEVYVFVSRV8yRDozNTUzLFRFWFRVUkU6NTg5MCxURVhUVVJFX0NVQkVfTUFQOjM0MDY3LFRFWFRVUkVfQklORElOR19DVUJFX01BUDozNDA2OCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6MzQwNjksVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOjM0MDcwLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWTozNDA3MSxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6MzQwNzIsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOjM0MDczLFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjozNDA3NCxNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOjM0MDc2LFRFWFRVUkUwOjMzOTg0LFRFWFRVUkUxOjMzOTg1LFRFWFRVUkUyOjMzOTg2LFRFWFRVUkUzOjMzOTg3LFRFWFRVUkU0OjMzOTg4LFRFWFRVUkU1OjMzOTg5LFRFWFRVUkU2OjMzOTkwLFRFWFRVUkU3OjMzOTkxLFRFWFRVUkU4OjMzOTkyLFRFWFRVUkU5OjMzOTkzLFRFWFRVUkUxMDozMzk5NCxURVhUVVJFMTE6MzM5OTUsVEVYVFVSRTEyOjMzOTk2LFRFWFRVUkUxMzozMzk5NyxURVhUVVJFMTQ6MzM5OTgsVEVYVFVSRTE1OjMzOTk5LFRFWFRVUkUxNjozNGUzLFRFWFRVUkUxNzozNDAwMSxURVhUVVJFMTg6MzQwMDIsVEVYVFVSRTE5OjM0MDAzLFRFWFRVUkUyMDozNDAwNCxURVhUVVJFMjE6MzQwMDUsVEVYVFVSRTIyOjM0MDA2LFRFWFRVUkUyMzozNDAwNyxURVhUVVJFMjQ6MzQwMDgsVEVYVFVSRTI1OjM0MDA5LFRFWFRVUkUyNjozNDAxMCxURVhUVVJFMjc6MzQwMTEsVEVYVFVSRTI4OjM0MDEyLFRFWFRVUkUyOTozNDAxMyxURVhUVVJFMzA6MzQwMTQsVEVYVFVSRTMxOjM0MDE1LEFDVElWRV9URVhUVVJFOjM0MDE2LFJFUEVBVDoxMDQ5NyxDTEFNUF9UT19FREdFOjMzMDcxLE1JUlJPUkVEX1JFUEVBVDozMzY0OCxGTE9BVF9WRUMyOjM1NjY0LEZMT0FUX1ZFQzM6MzU2NjUsRkxPQVRfVkVDNDozNTY2NixJTlRfVkVDMjozNTY2NyxJTlRfVkVDMzozNTY2OCxJTlRfVkVDNDozNTY2OSxCT09MOjM1NjcwLEJPT0xfVkVDMjozNTY3MSxCT09MX1ZFQzM6MzU2NzIsQk9PTF9WRUM0OjM1NjczLEZMT0FUX01BVDI6MzU2NzQsRkxPQVRfTUFUMzozNTY3NSxGTE9BVF9NQVQ0OjM1Njc2LFNBTVBMRVJfMkQ6MzU2NzgsU0FNUExFUl9DVUJFOjM1NjgwLFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDozNDMzOCxWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6MzQzMzksVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6MzQzNDAsVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOjM0MzQxLFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDozNDkyMixWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVI6MzQzNzMsVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzozNDk3NSxJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6MzU3MzgsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6MzU3MzksQ09NUElMRV9TVEFUVVM6MzU3MTMsTE9XX0ZMT0FUOjM2MzM2LE1FRElVTV9GTE9BVDozNjMzNyxISUdIX0ZMT0FUOjM2MzM4LExPV19JTlQ6MzYzMzksTUVESVVNX0lOVDozNjM0MCxISUdIX0lOVDozNjM0MSxGUkFNRUJVRkZFUjozNjE2MCxSRU5ERVJCVUZGRVI6MzYxNjEsUkdCQTQ6MzI4NTQsUkdCNV9BMTozMjg1NSxSR0I1NjU6MzYxOTQsREVQVEhfQ09NUE9ORU5UMTY6MzMxODksU1RFTkNJTF9JTkRFWDo2NDAxLFNURU5DSUxfSU5ERVg4OjM2MTY4LERFUFRIX1NURU5DSUw6MzQwNDEsUkVOREVSQlVGRkVSX1dJRFRIOjM2MTYyLFJFTkRFUkJVRkZFUl9IRUlHSFQ6MzYxNjMsUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDozNjE2NCxSRU5ERVJCVUZGRVJfUkVEX1NJWkU6MzYxNzYsUkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6MzYxNzcsUkVOREVSQlVGRkVSX0JMVUVfU0laRTozNjE3OCxSRU5ERVJCVUZGRVJfQUxQSEFfU0laRTozNjE3OSxSRU5ERVJCVUZGRVJfREVQVEhfU0laRTozNjE4MCxSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOjM2MTgxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6MzYwNDgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRTozNjA0OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6MzYwNTAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6MzYwNTEsQ09MT1JfQVRUQUNITUVOVDA6MzYwNjQsREVQVEhfQVRUQUNITUVOVDozNjA5NixTVEVOQ0lMX0FUVEFDSE1FTlQ6MzYxMjgsREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOjMzMzA2LE5PTkU6MCxGUkFNRUJVRkZFUl9DT01QTEVURTozNjA1MyxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ6MzYwNTQsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ6MzYwNTUsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOjM2MDU3LEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOjM2MDYxLEZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVOREVSQlVGRkVSX0JJTkRJTkc6MzYwMDcsTUFYX1JFTkRFUkJVRkZFUl9TSVpFOjM0MDI0LElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOjEyODYsVU5QQUNLX0ZMSVBfWV9XRUJHTDozNzQ0MCxVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Mzc0NDEsQ09OVEVYVF9MT1NUX1dFQkdMOjM3NDQyLFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Mzc0NDMsQlJPV1NFUl9ERUZBVUxUX1dFQkdMOjM3NDQ0LENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6MzM3NzYsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6MzM3NzcsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6MzM3NzgsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6MzM3NzksQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzozNTg0MCxDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOjM1ODQxLENPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOjM1ODQyLENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOjM1ODQzLENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTDozNzgwOCxDT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOjM2MTk2LENPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNOjM2NDkyLEhBTEZfRkxPQVRfT0VTOjM2MTkzLERPVUJMRTo1MTMwLFJFQURfQlVGRkVSOjMwNzQsVU5QQUNLX1JPV19MRU5HVEg6MzMxNCxVTlBBQ0tfU0tJUF9ST1dTOjMzMTUsVU5QQUNLX1NLSVBfUElYRUxTOjMzMTYsUEFDS19ST1dfTEVOR1RIOjMzMzAsUEFDS19TS0lQX1JPV1M6MzMzMSxQQUNLX1NLSVBfUElYRUxTOjMzMzIsQ09MT1I6NjE0NCxERVBUSDo2MTQ1LFNURU5DSUw6NjE0NixSRUQ6NjQwMyxSR0I4OjMyODQ5LFJHQkE4OjMyODU2LFJHQjEwX0EyOjMyODU3LFRFWFRVUkVfQklORElOR18zRDozMjg3NCxVTlBBQ0tfU0tJUF9JTUFHRVM6MzI4NzcsVU5QQUNLX0lNQUdFX0hFSUdIVDozMjg3OCxURVhUVVJFXzNEOjMyODc5LFRFWFRVUkVfV1JBUF9SOjMyODgyLE1BWF8zRF9URVhUVVJFX1NJWkU6MzI4ODMsVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOjMzNjQwLE1BWF9FTEVNRU5UU19WRVJUSUNFUzozM2UzLE1BWF9FTEVNRU5UU19JTkRJQ0VTOjMzMDAxLFRFWFRVUkVfTUlOX0xPRDozMzA4MixURVhUVVJFX01BWF9MT0Q6MzMwODMsVEVYVFVSRV9CQVNFX0xFVkVMOjMzMDg0LFRFWFRVUkVfTUFYX0xFVkVMOjMzMDg1LE1JTjozMjc3NSxNQVg6MzI3NzYsREVQVEhfQ09NUE9ORU5UMjQ6MzMxOTAsTUFYX1RFWFRVUkVfTE9EX0JJQVM6MzQwNDUsVEVYVFVSRV9DT01QQVJFX01PREU6MzQ4OTIsVEVYVFVSRV9DT01QQVJFX0ZVTkM6MzQ4OTMsQ1VSUkVOVF9RVUVSWTozNDkxNyxRVUVSWV9SRVNVTFQ6MzQ5MTgsUVVFUllfUkVTVUxUX0FWQUlMQUJMRTozNDkxOSxTVFJFQU1fUkVBRDozNTA0MSxTVFJFQU1fQ09QWTozNTA0MixTVEFUSUNfUkVBRDozNTA0NSxTVEFUSUNfQ09QWTozNTA0NixEWU5BTUlDX1JFQUQ6MzUwNDksRFlOQU1JQ19DT1BZOjM1MDUwLE1BWF9EUkFXX0JVRkZFUlM6MzQ4NTIsRFJBV19CVUZGRVIwOjM0ODUzLERSQVdfQlVGRkVSMTozNDg1NCxEUkFXX0JVRkZFUjI6MzQ4NTUsRFJBV19CVUZGRVIzOjM0ODU2LERSQVdfQlVGRkVSNDozNDg1NyxEUkFXX0JVRkZFUjU6MzQ4NTgsRFJBV19CVUZGRVI2OjM0ODU5LERSQVdfQlVGRkVSNzozNDg2MCxEUkFXX0JVRkZFUjg6MzQ4NjEsRFJBV19CVUZGRVI5OjM0ODYyLERSQVdfQlVGRkVSMTA6MzQ4NjMsRFJBV19CVUZGRVIxMTozNDg2NCxEUkFXX0JVRkZFUjEyOjM0ODY1LERSQVdfQlVGRkVSMTM6MzQ4NjYsRFJBV19CVUZGRVIxNDozNDg2NyxEUkFXX0JVRkZFUjE1OjM0ODY4LE1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTcsTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTgsU0FNUExFUl8zRDozNTY3OSxTQU1QTEVSXzJEX1NIQURPVzozNTY4MixGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOjM1NzIzLFBJWEVMX1BBQ0tfQlVGRkVSOjM1MDUxLFBJWEVMX1VOUEFDS19CVUZGRVI6MzUwNTIsUElYRUxfUEFDS19CVUZGRVJfQklORElORzozNTA1MyxQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTUsRkxPQVRfTUFUMngzOjM1Njg1LEZMT0FUX01BVDJ4NDozNTY4NixGTE9BVF9NQVQzeDI6MzU2ODcsRkxPQVRfTUFUM3g0OjM1Njg4LEZMT0FUX01BVDR4MjozNTY4OSxGTE9BVF9NQVQ0eDM6MzU2OTAsU1JHQjozNTkwNCxTUkdCODozNTkwNSxTUkdCOF9BTFBIQTg6MzU5MDcsQ09NUEFSRV9SRUZfVE9fVEVYVFVSRTozNDg5NCxSR0JBMzJGOjM0ODM2LFJHQjMyRjozNDgzNyxSR0JBMTZGOjM0ODQyLFJHQjE2RjozNDg0MyxWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6MzUwNjksTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOjM1MDcxLE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVDozNTA3NixNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzcsTUFYX1ZBUllJTkdfQ09NUE9ORU5UUzozNTY1OSxURVhUVVJFXzJEX0FSUkFZOjM1ODY2LFRFWFRVUkVfQklORElOR18yRF9BUlJBWTozNTg2OSxSMTFGX0cxMUZfQjEwRjozNTg5OCxVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOjM1ODk5LFJHQjlfRTU6MzU5MDEsVU5TSUdORURfSU5UXzVfOV85XzlfUkVWOjM1OTAyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERTozNTk2NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6MzU5NjgsVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOjM1OTcxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6MzU5NzIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOjM1OTczLFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU46MzU5NzYsUkFTVEVSSVpFUl9ESVNDQVJEOjM1OTc3LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzozNTk3OCxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6MzU5NzksSU5URVJMRUFWRURfQVRUUklCUzozNTk4MCxTRVBBUkFURV9BVFRSSUJTOjM1OTgxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6MzU5ODIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOjM1OTgzLFJHQkEzMlVJOjM2MjA4LFJHQjMyVUk6MzYyMDksUkdCQTE2VUk6MzYyMTQsUkdCMTZVSTozNjIxNSxSR0JBOFVJOjM2MjIwLFJHQjhVSTozNjIyMSxSR0JBMzJJOjM2MjI2LFJHQjMySTozNjIyNyxSR0JBMTZJOjM2MjMyLFJHQjE2STozNjIzMyxSR0JBOEk6MzYyMzgsUkdCOEk6MzYyMzksUkVEX0lOVEVHRVI6MzYyNDQsUkdCX0lOVEVHRVI6MzYyNDgsUkdCQV9JTlRFR0VSOjM2MjQ5LFNBTVBMRVJfMkRfQVJSQVk6MzYyODksU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6MzYyOTIsU0FNUExFUl9DVUJFX1NIQURPVzozNjI5MyxVTlNJR05FRF9JTlRfVkVDMjozNjI5NCxVTlNJR05FRF9JTlRfVkVDMzozNjI5NSxVTlNJR05FRF9JTlRfVkVDNDozNjI5NixJTlRfU0FNUExFUl8yRDozNjI5OCxJTlRfU0FNUExFUl8zRDozNjI5OSxJTlRfU0FNUExFUl9DVUJFOjM2MzAwLElOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzAzLFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOjM2MzA2LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOjM2MzA3LFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6MzYzMDgsVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6MzYzMTEsREVQVEhfQ09NUE9ORU5UMzJGOjM2MDEyLERFUFRIMzJGX1NURU5DSUw4OjM2MDEzLEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjozNjI2OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HOjMzMjk2LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6MzMyOTcsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRTozMzI5OCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkU6MzMyOTksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6MzMzMDAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOjMzMzAxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRTozMzMwMixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRTozMzMwMyxGUkFNRUJVRkZFUl9ERUZBVUxUOjMzMzA0LFVOU0lHTkVEX0lOVF8yNF84OjM0MDQyLERFUFRIMjRfU1RFTkNJTDg6MzUwNTYsVU5TSUdORURfTk9STUFMSVpFRDozNTg2MyxEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVBRF9GUkFNRUJVRkZFUjozNjAwOCxEUkFXX0ZSQU1FQlVGRkVSOjM2MDA5LFJFQURfRlJBTUVCVUZGRVJfQklORElORzozNjAxMCxSRU5ERVJCVUZGRVJfU0FNUExFUzozNjAxMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6MzYwNTIsTUFYX0NPTE9SX0FUVEFDSE1FTlRTOjM2MDYzLENPTE9SX0FUVEFDSE1FTlQxOjM2MDY1LENPTE9SX0FUVEFDSE1FTlQyOjM2MDY2LENPTE9SX0FUVEFDSE1FTlQzOjM2MDY3LENPTE9SX0FUVEFDSE1FTlQ0OjM2MDY4LENPTE9SX0FUVEFDSE1FTlQ1OjM2MDY5LENPTE9SX0FUVEFDSE1FTlQ2OjM2MDcwLENPTE9SX0FUVEFDSE1FTlQ3OjM2MDcxLENPTE9SX0FUVEFDSE1FTlQ4OjM2MDcyLENPTE9SX0FUVEFDSE1FTlQ5OjM2MDczLENPTE9SX0FUVEFDSE1FTlQxMDozNjA3NCxDT0xPUl9BVFRBQ0hNRU5UMTE6MzYwNzUsQ09MT1JfQVRUQUNITUVOVDEyOjM2MDc2LENPTE9SX0FUVEFDSE1FTlQxMzozNjA3NyxDT0xPUl9BVFRBQ0hNRU5UMTQ6MzYwNzgsQ09MT1JfQVRUQUNITUVOVDE1OjM2MDc5LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEU6MzYxODIsTUFYX1NBTVBMRVM6MzYxODMsSEFMRl9GTE9BVDo1MTMxLFJHOjMzMzE5LFJHX0lOVEVHRVI6MzMzMjAsUjg6MzMzMjEsUkc4OjMzMzIzLFIxNkY6MzMzMjUsUjMyRjozMzMyNixSRzE2RjozMzMyNyxSRzMyRjozMzMyOCxSOEk6MzMzMjksUjhVSTozMzMzMCxSMTZJOjMzMzMxLFIxNlVJOjMzMzMyLFIzMkk6MzMzMzMsUjMyVUk6MzMzMzQsUkc4STozMzMzNSxSRzhVSTozMzMzNixSRzE2STozMzMzNyxSRzE2VUk6MzMzMzgsUkczMkk6MzMzMzksUkczMlVJOjMzMzQwLFZFUlRFWF9BUlJBWV9CSU5ESU5HOjM0MjI5LFI4X1NOT1JNOjM2NzU2LFJHOF9TTk9STTozNjc1NyxSR0I4X1NOT1JNOjM2NzU4LFJHQkE4X1NOT1JNOjM2NzU5LFNJR05FRF9OT1JNQUxJWkVEOjM2NzY0LENPUFlfUkVBRF9CVUZGRVI6MzY2NjIsQ09QWV9XUklURV9CVUZGRVI6MzY2NjMsQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6MzY2NjMsVU5JRk9STV9CVUZGRVI6MzUzNDUsVU5JRk9STV9CVUZGRVJfQklORElORzozNTM2OCxVTklGT1JNX0JVRkZFUl9TVEFSVDozNTM2OSxVTklGT1JNX0JVRkZFUl9TSVpFOjM1MzcwLE1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6MzUzNzEsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTOjM1MzczLE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzozNTM3NCxNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6MzUzNzUsTUFYX1VOSUZPUk1fQkxPQ0tfU0laRTozNTM3NixNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3NyxNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1Mzc5LFVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6MzUzODAsQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOjM1MzgyLFVOSUZPUk1fVFlQRTozNTM4MyxVTklGT1JNX1NJWkU6MzUzODQsVU5JRk9STV9CTE9DS19JTkRFWDozNTM4NixVTklGT1JNX09GRlNFVDozNTM4NyxVTklGT1JNX0FSUkFZX1NUUklERTozNTM4OCxVTklGT1JNX01BVFJJWF9TVFJJREU6MzUzODksVU5JRk9STV9JU19ST1dfTUFKT1I6MzUzOTAsVU5JRk9STV9CTE9DS19CSU5ESU5HOjM1MzkxLFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOjM1MzkyLFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOjM1Mzk0LFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzozNTM5NSxVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjozNTM5NixVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOjM1Mzk4LElOVkFMSURfSU5ERVg6NDI5NDk2NzI5NSxNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTOjM3MTU0LE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTOjM3MTU3LE1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOjM3MTM3LE9CSkVDVF9UWVBFOjM3MTM4LFNZTkNfQ09ORElUSU9OOjM3MTM5LFNZTkNfU1RBVFVTOjM3MTQwLFNZTkNfRkxBR1M6MzcxNDEsU1lOQ19GRU5DRTozNzE0MixTWU5DX0dQVV9DT01NQU5EU19DT01QTEVURTozNzE0MyxVTlNJR05BTEVEOjM3MTQ0LFNJR05BTEVEOjM3MTQ1LEFMUkVBRFlfU0lHTkFMRUQ6MzcxNDYsVElNRU9VVF9FWFBJUkVEOjM3MTQ3LENPTkRJVElPTl9TQVRJU0ZJRUQ6MzcxNDgsV0FJVF9GQUlMRUQ6MzcxNDksU1lOQ19GTFVTSF9DT01NQU5EU19CSVQ6MSxWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6MzUwNzAsQU5ZX1NBTVBMRVNfUEFTU0VEOjM1ODg3LEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU6MzYyMDIsU0FNUExFUl9CSU5ESU5HOjM1MDk3LFJHQjEwX0EyVUk6MzY5NzUsSU5UXzJfMTBfMTBfMTBfUkVWOjM2MjU1LFRSQU5TRk9STV9GRUVEQkFDSzozNjM4NixUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOjM2Mzg3LFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6MzYzODgsVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6MzYzODksQ09NUFJFU1NFRF9SMTFfRUFDOjM3NDg4LENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Mzc0ODksQ09NUFJFU1NFRF9SRzExX0VBQzozNzQ5MCxDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzozNzQ5MSxDT01QUkVTU0VEX1JHQjhfRVRDMjozNzQ5MixDT01QUkVTU0VEX1NSR0I4X0VUQzI6Mzc0OTMsQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NCxDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NSxDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOjM3NDk2LENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOjM3NDk3LFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDozNzE2NyxNQVhfRUxFTUVOVF9JTkRFWDozNjIwMyxURVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6MzM1MDMsTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOjM0MDQ3fSxQZT1PYmplY3QuZnJlZXplKHBOKX0pO3ZhciBvdCxuZSx2dD1YKCgpPT57c2UoKTtvYygpO290PXtCWVRFOlBlLkJZVEUsVU5TSUdORURfQllURTpQZS5VTlNJR05FRF9CWVRFLFNIT1JUOlBlLlNIT1JULFVOU0lHTkVEX1NIT1JUOlBlLlVOU0lHTkVEX1NIT1JULElOVDpQZS5JTlQsVU5TSUdORURfSU5UOlBlLlVOU0lHTkVEX0lOVCxGTE9BVDpQZS5GTE9BVCxET1VCTEU6UGUuRE9VQkxFfTtvdC5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBvdC5CWVRFOnJldHVybiBJbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugb3QuU0hPUlQ6cmV0dXJuIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9TSE9SVDpyZXR1cm4gVWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5JTlQ6cmV0dXJuIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBvdC5VTlNJR05FRF9JTlQ6cmV0dXJuIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugb3QuRkxPQVQ6cmV0dXJuIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIG90LkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UfX07b3QuZnJvbVR5cGVkQXJyYXk9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gb3QuQllURTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gb3QuVU5TSUdORURfQllURTtpZihlIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gb3QuU0hPUlQ7aWYoZSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBvdC5VTlNJR05FRF9TSE9SVDtpZihlIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gb3QuSU5UO2lmKGUgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gb3QuVU5TSUdORURfSU5UO2lmKGUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIG90LkZMT0FUO2lmKGUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIG90LkRPVUJMRX07b3QudmFsaWRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSkmJihlPT09b3QuQllURXx8ZT09PW90LlVOU0lHTkVEX0JZVEV8fGU9PT1vdC5TSE9SVHx8ZT09PW90LlVOU0lHTkVEX1NIT1JUfHxlPT09b3QuSU5UfHxlPT09b3QuVU5TSUdORURfSU5UfHxlPT09b3QuRkxPQVR8fGU9PT1vdC5ET1VCTEUpfTtvdC5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2Ugb3QuQllURTpyZXR1cm4gbmV3IEludDhBcnJheSh0KTtjYXNlIG90LlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpO2Nhc2Ugb3QuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KHQpO2Nhc2Ugb3QuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheSh0KTtjYXNlIG90LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkodCk7Y2FzZSBvdC5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheSh0KTtjYXNlIG90LkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KHQpO2Nhc2Ugb3QuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KHQpfX07b3QuY3JlYXRlQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKGUsdCxuLG8pe3N3aXRjaChuPW4/PzAsbz1vPz8odC5ieXRlTGVuZ3RoLW4pL290LmdldFNpemVJbkJ5dGVzKGUpLGUpe2Nhc2Ugb3QuQllURTpyZXR1cm4gbmV3IEludDhBcnJheSh0LG4sbyk7Y2FzZSBvdC5VTlNJR05FRF9CWVRFOnJldHVybiBuZXcgVWludDhBcnJheSh0LG4sbyk7Y2FzZSBvdC5TSE9SVDpyZXR1cm4gbmV3IEludDE2QXJyYXkodCxuLG8pO2Nhc2Ugb3QuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheSh0LG4sbyk7Y2FzZSBvdC5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KHQsbixvKTtjYXNlIG90LlVOU0lHTkVEX0lOVDpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHQsbixvKTtjYXNlIG90LkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KHQsbixvKTtjYXNlIG90LkRPVUJMRTpyZXR1cm4gbmV3IEZsb2F0NjRBcnJheSh0LG4sbyl9fTtvdC5mcm9tTmFtZT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJCWVRFIjpyZXR1cm4gb3QuQllURTtjYXNlIlVOU0lHTkVEX0JZVEUiOnJldHVybiBvdC5VTlNJR05FRF9CWVRFO2Nhc2UiU0hPUlQiOnJldHVybiBvdC5TSE9SVDtjYXNlIlVOU0lHTkVEX1NIT1JUIjpyZXR1cm4gb3QuVU5TSUdORURfU0hPUlQ7Y2FzZSJJTlQiOnJldHVybiBvdC5JTlQ7Y2FzZSJVTlNJR05FRF9JTlQiOnJldHVybiBvdC5VTlNJR05FRF9JTlQ7Y2FzZSJGTE9BVCI6cmV0dXJuIG90LkZMT0FUO2Nhc2UiRE9VQkxFIjpyZXR1cm4gb3QuRE9VQkxFfX07bmU9T2JqZWN0LmZyZWV6ZShvdCl9KTt2YXIgZ04sQnIsR2w9WCgoKT0+e2dOPXtOT05FOjAsVFJJQU5HTEVTOjEsTElORVM6MixQT0xZTElORVM6M30sQnI9T2JqZWN0LmZyZWV6ZShnTil9KTtmdW5jdGlvbiBIZShlLHQsbixvKXt0aGlzWzBdPWU/PzAsdGhpc1sxXT1uPz8wLHRoaXNbMl09dD8/MCx0aGlzWzNdPW8/PzB9dmFyIF9OLHlOLGV3LHR3LEFOLHdOLFFvLFNmPVgoKCk9PntqdCgpO3NlKCk7SGUucGFja2VkTGVuZ3RoPTQ7SGUucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZVswXSx0W24rK109ZVsxXSx0W24rK109ZVsyXSx0W24rK109ZVszXSx0fTtIZS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IEhlKSxuWzBdPWVbdCsrXSxuWzFdPWVbdCsrXSxuWzJdPWVbdCsrXSxuWzNdPWVbdCsrXSxufTtIZS5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW4qNDtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PW98fHQubGVuZ3RoIT09byYmKHQubGVuZ3RoPW8pOnQ9bmV3IEFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bjsrK2EpSGUucGFjayhlW2FdLHQsYSo0KTtyZXR1cm4gdH07SGUudW5wYWNrQXJyYXk9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW4vNDp0PW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgYT1vLzQ7dFthXT1IZS51bnBhY2soZSxvLHRbYV0pfXJldHVybiB0fTtIZS5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0KTpuZXcgSGUoZVswXSxlWzJdLGVbMV0sZVszXSl9O0hlLmZyb21BcnJheT1IZS51bnBhY2s7SGUuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGUuY2xvbmUoZSx0KX07SGUuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsyXSx0WzJdPWVbMV0sdFszXT1lWzNdLHQpOm5ldyBIZShlWzBdLGVbMV0sZVsyXSxlWzNdKX07SGUuZnJvbVNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT1lLnksdCk6bmV3IEhlKGUueCwwLDAsZS55KX07SGUuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPWUsdCk6bmV3IEhlKGUsMCwwLGUpfTtIZS5mcm9tUm90YXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpO3JldHVybiBnKHQpPyh0WzBdPW4sdFsxXT1vLHRbMl09LW8sdFszXT1uLHQpOm5ldyBIZShuLC1vLG8sbil9O0hlLnRvQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdXX07SGUuZ2V0RWxlbWVudEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqMit0fTtIZS5nZXRDb2x1bW49ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQqMixhPWVbb10scj1lW28rMV07cmV0dXJuIG4ueD1hLG4ueT1yLG59O0hlLnNldENvbHVtbj1mdW5jdGlvbihlLHQsbixvKXtvPUhlLmNsb25lKGUsbyk7bGV0IGE9dCoyO3JldHVybiBvW2FdPW4ueCxvW2ErMV09bi55LG99O0hlLmdldFJvdz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVt0XSxhPWVbdCsyXTtyZXR1cm4gbi54PW8sbi55PWEsbn07SGUuc2V0Um93PWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBvPUhlLmNsb25lKGUsbyksb1t0XT1uLngsb1t0KzJdPW4ueSxvfTtfTj1uZXcgWTtIZS5zZXRTY2FsZT1mdW5jdGlvbihlLHQsbil7bGV0IG89SGUuZ2V0U2NhbGUoZSxfTiksYT10Lngvby54LHI9dC55L28ueTtyZXR1cm4gblswXT1lWzBdKmEsblsxXT1lWzFdKmEsblsyXT1lWzJdKnIsblszXT1lWzNdKnIsbn07eU49bmV3IFk7SGUuc2V0VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1IZS5nZXRTY2FsZShlLHlOKSxhPXQvby54LHI9dC9vLnk7cmV0dXJuIG5bMF09ZVswXSphLG5bMV09ZVsxXSphLG5bMl09ZVsyXSpyLG5bM109ZVszXSpyLG59O2V3PW5ldyBZO0hlLmdldFNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQueD1ZLm1hZ25pdHVkZShZLmZyb21FbGVtZW50cyhlWzBdLGVbMV0sZXcpKSx0Lnk9WS5tYWduaXR1ZGUoWS5mcm9tRWxlbWVudHMoZVsyXSxlWzNdLGV3KSksdH07dHc9bmV3IFk7SGUuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5nZXRTY2FsZShlLHR3KSxZLm1heGltdW1Db21wb25lbnQodHcpfTtBTj1uZXcgWTtIZS5zZXRSb3RhdGlvbj1mdW5jdGlvbihlLHQsbil7bGV0IG89SGUuZ2V0U2NhbGUoZSxBTik7cmV0dXJuIG5bMF09dFswXSpvLngsblsxXT10WzFdKm8ueCxuWzJdPXRbMl0qby55LG5bM109dFszXSpvLnksbn07d049bmV3IFk7SGUuZ2V0Um90YXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1IZS5nZXRTY2FsZShlLHdOKTtyZXR1cm4gdFswXT1lWzBdL24ueCx0WzFdPWVbMV0vbi54LHRbMl09ZVsyXS9uLnksdFszXT1lWzNdL24ueSx0fTtIZS5tdWx0aXBseT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSp0WzBdK2VbMl0qdFsxXSxhPWVbMF0qdFsyXStlWzJdKnRbM10scj1lWzFdKnRbMF0rZVszXSp0WzFdLGk9ZVsxXSp0WzJdK2VbM10qdFszXTtyZXR1cm4gblswXT1vLG5bMV09cixuWzJdPWEsblszXT1pLG59O0hlLmFkZD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSt0WzBdLG5bMV09ZVsxXSt0WzFdLG5bMl09ZVsyXSt0WzJdLG5bM109ZVszXSt0WzNdLG59O0hlLnN1YnRyYWN0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblswXT1lWzBdLXRbMF0sblsxXT1lWzFdLXRbMV0sblsyXT1lWzJdLXRbMl0sblszXT1lWzNdLXRbM10sbn07SGUubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbihlLHQsbil7bGV0IG89ZVswXSp0LngrZVsyXSp0LnksYT1lWzFdKnQueCtlWzNdKnQueTtyZXR1cm4gbi54PW8sbi55PWEsbn07SGUubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG59O0hlLm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LngsblsxXT1lWzFdKnQueCxuWzJdPWVbMl0qdC55LG5bM109ZVszXSp0Lnksbn07SGUubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5bMF09ZVswXSp0LG5bMV09ZVsxXSp0LG5bMl09ZVsyXSp0LG5bM109ZVszXSp0LG59O0hlLm5lZ2F0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHR9O0hlLnRyYW5zcG9zZT1mdW5jdGlvbihlLHQpe2xldCBuPWVbMF0sbz1lWzJdLGE9ZVsxXSxyPWVbM107cmV0dXJuIHRbMF09bix0WzFdPW8sdFsyXT1hLHRbM109cix0fTtIZS5hYnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFswXT1NYXRoLmFicyhlWzBdKSx0WzFdPU1hdGguYWJzKGVbMV0pLHRbMl09TWF0aC5hYnMoZVsyXSksdFszXT1NYXRoLmFicyhlWzNdKSx0fTtIZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmVbMF09PT10WzBdJiZlWzFdPT09dFsxXSYmZVsyXT09PXRbMl0mJmVbM109PT10WzNdfTtIZS5lcXVhbHNBcnJheT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbMF09PT10W25dJiZlWzFdPT09dFtuKzFdJiZlWzJdPT09dFtuKzJdJiZlWzNdPT09dFtuKzNdfTtIZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLGU9PT10fHxnKGUpJiZnKHQpJiZNYXRoLmFicyhlWzBdLXRbMF0pPD1uJiZNYXRoLmFicyhlWzFdLXRbMV0pPD1uJiZNYXRoLmFicyhlWzJdLXRbMl0pPD1uJiZNYXRoLmFicyhlWzNdLXRbM10pPD1ufTtIZS5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBIZSgxLDAsMCwxKSk7SGUuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBIZSgwLDAsMCwwKSk7SGUuQ09MVU1OMFJPVzA9MDtIZS5DT0xVTU4wUk9XMT0xO0hlLkNPTFVNTjFST1cwPTI7SGUuQ09MVU1OMVJPVzE9MztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZS5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEhlLnBhY2tlZExlbmd0aH19fSk7SGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5jbG9uZSh0aGlzLGUpfTtIZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBIZS5lcXVhbHModGhpcyxlKX07SGUucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGUuZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9O0hlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzJdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYH07UW89SGV9KTt2YXIgVG8sVWUsY249WCgoKT0+e29jKCk7VG89e1BPSU5UUzpQZS5QT0lOVFMsTElORVM6UGUuTElORVMsTElORV9MT09QOlBlLkxJTkVfTE9PUCxMSU5FX1NUUklQOlBlLkxJTkVfU1RSSVAsVFJJQU5HTEVTOlBlLlRSSUFOR0xFUyxUUklBTkdMRV9TVFJJUDpQZS5UUklBTkdMRV9TVFJJUCxUUklBTkdMRV9GQU46UGUuVFJJQU5HTEVfRkFOfTtUby5pc0xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09VG8uTElORVN8fGU9PT1Uby5MSU5FX0xPT1B8fGU9PT1Uby5MSU5FX1NUUklQfTtUby5pc1RyaWFuZ2xlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PVRvLlRSSUFOR0xFU3x8ZT09PVRvLlRSSUFOR0xFX1NUUklQfHxlPT09VG8uVFJJQU5HTEVfRkFOfTtUby52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PVRvLlBPSU5UU3x8ZT09PVRvLkxJTkVTfHxlPT09VG8uTElORV9MT09QfHxlPT09VG8uTElORV9TVFJJUHx8ZT09PVRvLlRSSUFOR0xFU3x8ZT09PVRvLlRSSUFOR0xFX1NUUklQfHxlPT09VG8uVFJJQU5HTEVfRkFOfTtVZT1PYmplY3QuZnJlZXplKFRvKX0pO2Z1bmN0aW9uIFFiKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuYXR0cmlidXRlcz1lLmF0dHJpYnV0ZXMsdGhpcy5pbmRpY2VzPWUuaW5kaWNlcyx0aGlzLnByaW1pdGl2ZVR5cGU9ZS5wcmltaXRpdmVUeXBlPz9VZS5UUklBTkdMRVMsdGhpcy5ib3VuZGluZ1NwaGVyZT1lLmJvdW5kaW5nU3BoZXJlLHRoaXMuZ2VvbWV0cnlUeXBlPWUuZ2VvbWV0cnlUeXBlPz9Cci5OT05FLHRoaXMuYm91bmRpbmdTcGhlcmVDVj1lLmJvdW5kaW5nU3BoZXJlQ1YsdGhpcy5vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGV9dmFyIEVOLFROLG53LFJOLHhOLE9OLFNOLENOLE1OLE5OLHZlLCR0PVgoKCk9PntqdCgpO0llKCk7RXQoKTttdCgpO3NlKCk7R2woKTtTZigpO0RuKCk7cG4oKTtjbigpO0pvKCk7X24oKTtzcigpO1FiLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKGUpe2xldCB0PS0xO2ZvcihsZXQgbiBpbiBlLmF0dHJpYnV0ZXMpaWYoZS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KG4pJiZnKGUuYXR0cmlidXRlc1tuXSkmJmcoZS5hdHRyaWJ1dGVzW25dLnZhbHVlcykpe2xldCBvPWUuYXR0cmlidXRlc1tuXTt0PW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGV9cmV0dXJuIHR9O0VOPW5ldyByZSxUTj1uZXcgcyxudz1uZXcgJCxSTj1bbmV3IHJlLG5ldyByZSxuZXcgcmVdLHhOPVtuZXcgWSxuZXcgWSxuZXcgWV0sT049W25ldyBZLG5ldyBZLG5ldyBZXSxTTj1uZXcgcyxDTj1uZXcgUWUsTU49bmV3ICQsTk49bmV3IFFvO1FiLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhLHI9U2UuY2VudGVyKG8sRU4pLGk9cmUudG9DYXJ0ZXNpYW4ocixuLFROKSxmPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGksbixudyksZD0kLmludmVyc2UoZixudyksYz14Tix1PVJOO3VbMF0ubG9uZ2l0dWRlPW8ud2VzdCx1WzBdLmxhdGl0dWRlPW8uc291dGgsdVsxXS5sb25naXR1ZGU9by53ZXN0LHVbMV0ubGF0aXR1ZGU9by5ub3J0aCx1WzJdLmxvbmdpdHVkZT1vLmVhc3QsdVsyXS5sYXRpdHVkZT1vLnNvdXRoO2xldCBsPVNOO2ZvcihhPTA7YTwzO2ErKylyZS50b0NhcnRlc2lhbih1W2FdLG4sbCksbD0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGQsbCxsKSxjW2FdLng9bC54LGNbYV0ueT1sLnk7bGV0IGg9UWUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtdCxDTiksbT1KLmZyb21RdWF0ZXJuaW9uKGgsTU4pLGI9ZS5sZW5ndGgscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGE9MDthPGI7YSsrKWw9JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihkLGVbYV0sbCksbD1KLm11bHRpcGx5QnlWZWN0b3IobSxsLGwpLHA9TWF0aC5taW4ocCxsLngpLHk9TWF0aC5taW4oeSxsLnkpLEU9TWF0aC5tYXgoRSxsLngpLF89TWF0aC5tYXgoXyxsLnkpO2xldCBUPVFvLmZyb21Sb3RhdGlvbih0LE5OKSx3PU9OO3dbMF0ueD1wLHdbMF0ueT15LHdbMV0ueD1wLHdbMV0ueT1fLHdbMl0ueD1FLHdbMl0ueT15O2xldCBSPWNbMF0sUz1jWzJdLngtUi54LEM9Y1sxXS55LVIueTtmb3IoYT0wO2E8MzthKyspe2xldCBBPXdbYV07UW8ubXVsdGlwbHlCeVZlY3RvcihULEEsQSksQS54PShBLngtUi54KS9TLEEueT0oQS55LVIueSkvQ31sZXQgST13WzBdLE49d1sxXSxQPXdbMl0sdj1uZXcgQXJyYXkoNik7cmV0dXJuIFkucGFjayhJLHYpLFkucGFjayhOLHYsMiksWS5wYWNrKFAsdiw0KSx2fTt2ZT1RYn0pO2Z1bmN0aW9uIElOKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuY29tcG9uZW50RGF0YXR5cGU9ZS5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9ZS5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPWUubm9ybWFsaXplPz8hMSx0aGlzLnZhbHVlcz1lLnZhbHVlc312YXIgaWUsZW49WCgoKT0+e210KCk7aWU9SU59KTtmdW5jdGlvbiBQTihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPWUucG9zaXRpb24sdGhpcy5ub3JtYWw9ZS5ub3JtYWwsdGhpcy5zdD1lLnN0LHRoaXMuYml0YW5nZW50PWUuYml0YW5nZW50LHRoaXMudGFuZ2VudD1lLnRhbmdlbnQsdGhpcy5jb2xvcj1lLmNvbG9yfXZhciBudCx1bj1YKCgpPT57bXQoKTtudD1QTn0pO3ZhciBZdCxvdyxhdz1YKCgpPT57anQoKTtJZSgpO2dhKCk7U2YoKTtEbigpO3BuKCk7WXQ9e1NDQUxBUjoiU0NBTEFSIixWRUMyOiJWRUMyIixWRUMzOiJWRUMzIixWRUM0OiJWRUM0IixNQVQyOiJNQVQyIixNQVQzOiJNQVQzIixNQVQ0OiJNQVQ0In07WXQuZ2V0TWF0aFR5cGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgWXQuU0NBTEFSOnJldHVybiBOdW1iZXI7Y2FzZSBZdC5WRUMyOnJldHVybiBZO2Nhc2UgWXQuVkVDMzpyZXR1cm4gcztjYXNlIFl0LlZFQzQ6cmV0dXJuIGR0O2Nhc2UgWXQuTUFUMjpyZXR1cm4gUW87Y2FzZSBZdC5NQVQzOnJldHVybiBKO2Nhc2UgWXQuTUFUNDpyZXR1cm4gJH19O1l0LmdldE51bWJlck9mQ29tcG9uZW50cz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6cmV0dXJuIDE7Y2FzZSBZdC5WRUMyOnJldHVybiAyO2Nhc2UgWXQuVkVDMzpyZXR1cm4gMztjYXNlIFl0LlZFQzQ6Y2FzZSBZdC5NQVQyOnJldHVybiA0O2Nhc2UgWXQuTUFUMzpyZXR1cm4gOTtjYXNlIFl0Lk1BVDQ6cmV0dXJuIDE2fX07WXQuZ2V0QXR0cmlidXRlTG9jYXRpb25Db3VudD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6Y2FzZSBZdC5WRUMyOmNhc2UgWXQuVkVDMzpjYXNlIFl0LlZFQzQ6cmV0dXJuIDE7Y2FzZSBZdC5NQVQyOnJldHVybiAyO2Nhc2UgWXQuTUFUMzpyZXR1cm4gMztjYXNlIFl0Lk1BVDQ6cmV0dXJuIDR9fTtZdC5nZXRHbHNsVHlwZT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBZdC5TQ0FMQVI6cmV0dXJuImZsb2F0IjtjYXNlIFl0LlZFQzI6cmV0dXJuInZlYzIiO2Nhc2UgWXQuVkVDMzpyZXR1cm4idmVjMyI7Y2FzZSBZdC5WRUM0OnJldHVybiJ2ZWM0IjtjYXNlIFl0Lk1BVDI6cmV0dXJuIm1hdDIiO2Nhc2UgWXQuTUFUMzpyZXR1cm4ibWF0MyI7Y2FzZSBZdC5NQVQ0OnJldHVybiJtYXQ0In19O293PU9iamVjdC5mcmVlemUoWXQpfSk7ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIGl3WzBdPWUsaXdbMF19ZnVuY3Rpb24gJGIoZSl7cmV0dXJuIGU+PjFeLShlJjEpfXZhciBydyxrTixlcCx0bixDZixpdyx0cCxWdCxVcj1YKCgpPT57anQoKTtJZSgpO3Z0KCk7c2UoKTtHZSgpO2F3KCk7cnc9MS8yNTYsa049NjU1MzYsZXA9MjU2LHRuPXt9O3RuLm9jdEVuY29kZUluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe2lmKG4ueD1lLngvKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KStNYXRoLmFicyhlLnopKSxuLnk9ZS55LyhNYXRoLmFicyhlLngpK01hdGguYWJzKGUueSkrTWF0aC5hYnMoZS56KSksZS56PDApe2xldCBvPW4ueCxhPW4ueTtuLng9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8obyksbi55PSgxLU1hdGguYWJzKG8pKSprLnNpZ25Ob3RaZXJvKGEpfXJldHVybiBuLng9ay50b1NOb3JtKG4ueCx0KSxuLnk9ay50b1NOb3JtKG4ueSx0KSxufTt0bi5vY3RFbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG4ub2N0RW5jb2RlSW5SYW5nZShlLDI1NSx0KX07Q2Y9bmV3IFksaXc9bmV3IFVpbnQ4QXJyYXkoMSk7dG4ub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRuLm9jdEVuY29kZUluUmFuZ2UoZSw2NTUzNSxDZiksdC54PVZsKENmLngqcncpLHQueT1WbChDZi54KSx0Lno9VmwoQ2YueSpydyksdC53PVZsKENmLnkpLHR9O3RuLm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4sbyl7aWYoby54PWsuZnJvbVNOb3JtKGUsbiksby55PWsuZnJvbVNOb3JtKHQsbiksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCBhPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqay5zaWduTm90WmVybyhhKSxvLnk9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8oby55KX1yZXR1cm4gcy5ub3JtYWxpemUobyxvKX07dG4ub2N0RGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdG4ub2N0RGVjb2RlSW5SYW5nZShlLHQsMjU1LG4pfTt0bi5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbihlLHQpe2xldCBuPWUueCxvPWUueSxhPWUueixyPWUudyxpPW4qZXArbyxmPWEqZXArcjtyZXR1cm4gdG4ub2N0RGVjb2RlSW5SYW5nZShpLGYsNjU1MzUsdCl9O3RuLm9jdFBhY2tGbG9hdD1mdW5jdGlvbihlKXtyZXR1cm4gMjU2KmUueCtlLnl9O3RwPW5ldyBZO3RuLm9jdEVuY29kZUZsb2F0PWZ1bmN0aW9uKGUpe3JldHVybiB0bi5vY3RFbmNvZGUoZSx0cCksdG4ub2N0UGFja0Zsb2F0KHRwKX07dG4ub2N0RGVjb2RlRmxvYXQ9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLzI1NixvPU1hdGguZmxvb3IobiksYT0obi1vKSoyNTY7cmV0dXJuIHRuLm9jdERlY29kZShvLGEsdCl9O3RuLm9jdFBhY2s9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9dG4ub2N0RW5jb2RlRmxvYXQoZSkscj10bi5vY3RFbmNvZGVGbG9hdCh0KSxpPXRuLm9jdEVuY29kZShuLHRwKTtyZXR1cm4gby54PTY1NTM2KmkueCthLG8ueT02NTUzNippLnkrcixvfTt0bi5vY3RVbnBhY2s9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9ZS54LzY1NTM2LHI9TWF0aC5mbG9vcihhKSxpPShhLXIpKjY1NTM2O2E9ZS55LzY1NTM2O2xldCBmPU1hdGguZmxvb3IoYSksZD0oYS1mKSo2NTUzNjt0bi5vY3REZWNvZGVGbG9hdChpLHQpLHRuLm9jdERlY29kZUZsb2F0KGQsbiksdG4ub2N0RGVjb2RlKHIsZixvKX07dG4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS54KjQwOTV8MCxuPWUueSo0MDk1fDA7cmV0dXJuIDQwOTYqdCtufTt0bi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS80MDk2LG89TWF0aC5mbG9vcihuKTtyZXR1cm4gdC54PW8vNDA5NSx0Lnk9KGUtbyo0MDk2KS80MDk1LHR9O3RuLnppZ1phZ0RlbHRhRGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmxlbmd0aCxhPTAscj0wLGk9MDtmb3IobGV0IGY9MDtmPG87KytmKWErPSRiKGVbZl0pLHIrPSRiKHRbZl0pLGVbZl09YSx0W2ZdPXIsZyhuKSYmKGkrPSRiKG5bZl0pLG5bZl09aSl9O3RuLmRlcXVhbnRpemU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9b3cuZ2V0TnVtYmVyT2ZDb21wb25lbnRzKG4pLHI7c3dpdGNoKHQpe2Nhc2UgbmUuQllURTpyPTEyNzticmVhaztjYXNlIG5lLlVOU0lHTkVEX0JZVEU6cj0yNTU7YnJlYWs7Y2FzZSBuZS5TSE9SVDpyPTMyNzY3O2JyZWFrO2Nhc2UgbmUuVU5TSUdORURfU0hPUlQ6cj02NTUzNTticmVhaztjYXNlIG5lLklOVDpyPTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSBuZS5VTlNJR05FRF9JTlQ6cj00Mjk0OTY3Mjk1O2JyZWFrfWxldCBpPW5ldyBGbG9hdDMyQXJyYXkobyphKTtmb3IobGV0IGY9MDtmPG87ZisrKWZvcihsZXQgZD0wO2Q8YTtkKyspe2xldCBjPWYqYStkO2lbY109TWF0aC5tYXgoZVtjXS9yLC0xKX1yZXR1cm4gaX07dG4uZW5jb2RlUkdCOD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChrLmNsYW1wKGUucmVkKjI1NSwwLDI1NSkpKmtOK01hdGgucm91bmQoay5jbGFtcChlLmdyZWVuKjI1NSwwLDI1NSkpKmVwK01hdGgucm91bmQoay5jbGFtcChlLmJsdWUqMjU1LDAsMjU1KSl9O3RuLmRlY29kZVJHQjg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLHQucmVkPShlPj4xNiYyNTUpLzI1NSx0LmdyZWVuPShlPj44JjI1NSkvMjU1LHQuYmx1ZT0oZSYyNTUpLzI1NSx0fTt0bi5kZWNvZGVSR0I1NjU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aDtnKHQpfHwodD1uZXcgRmxvYXQzMkFycmF5KG4qMykpO2xldCBvPTMxLGE9NjMscj0xLzMxLGk9MS82Mztmb3IobGV0IGY9MDtmPG47ZisrKXtsZXQgZD1lW2ZdLGM9ZD4+MTEsdT1kPj41JmEsbD1kJm8saD0zKmY7dFtoXT1jKnIsdFtoKzFdPXUqaSx0W2grMl09bCpyfXJldHVybiB0fTtWdD10bn0pO2Z1bmN0aW9uIHZOKGUsdCxuLG8sYSl7ZyhhKXx8KGE9bmV3IHMpO2xldCByLGksZixkLGMsdSxsLGg7aWYoZyh0LnopKXtpZihzLmVxdWFsc0Vwc2lsb24oZSx0LGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWCxhKTtpZihzLmVxdWFsc0Vwc2lsb24oZSxuLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWSxhKTtpZihzLmVxdWFsc0Vwc2lsb24oZSxvLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWixhKTtyPXMuc3VidHJhY3Qobix0LGN3KSxpPXMuc3VidHJhY3Qobyx0LHN3KSxmPXMuc3VidHJhY3QoZSx0LGZ3KSxkPXMuZG90KHIsciksYz1zLmRvdChyLGkpLHU9cy5kb3QocixmKSxsPXMuZG90KGksaSksaD1zLmRvdChpLGYpfWVsc2V7aWYoWS5lcXVhbHNFcHNpbG9uKGUsdCxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1gsYSk7aWYoWS5lcXVhbHNFcHNpbG9uKGUsbixrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1ksYSk7aWYoWS5lcXVhbHNFcHNpbG9uKGUsbyxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1osYSk7cj1ZLnN1YnRyYWN0KG4sdCxjdyksaT1ZLnN1YnRyYWN0KG8sdCxzdyksZj1ZLnN1YnRyYWN0KGUsdCxmdyksZD1ZLmRvdChyLHIpLGM9WS5kb3QocixpKSx1PVkuZG90KHIsZiksbD1ZLmRvdChpLGkpLGg9WS5kb3QoaSxmKX1hLnk9bCp1LWMqaCxhLno9ZCpoLWMqdTtsZXQgbT1kKmwtYypjO2lmKG0hPT0wKXJldHVybiBhLnkvPW0sYS56Lz1tLGEueD0xLWEueS1hLnosYX12YXIgY3csc3csZncsZHcsdXc9WCgoKT0+e2p0KCk7SWUoKTtzZSgpO0dlKCk7Y3c9bmV3IHMsc3c9bmV3IHMsZnc9bmV3IHM7ZHc9dk59KTtmdW5jdGlvbiBmcigpe3RoaXMuaGlnaD1zLmNsb25lKHMuWkVSTyksdGhpcy5sb3c9cy5jbG9uZShzLlpFUk8pfXZhciBMcixucCxhYyxvcD1YKCgpPT57SWUoKTtzZSgpO2ZyLmVuY29kZT1mdW5jdGlvbihlLHQpe2codCl8fCh0PXtoaWdoOjAsbG93OjB9KTtsZXQgbjtyZXR1cm4gZT49MD8obj1NYXRoLmZsb29yKGUvNjU1MzYpKjY1NTM2LHQuaGlnaD1uLHQubG93PWUtbik6KG49TWF0aC5mbG9vcigtZS82NTUzNikqNjU1MzYsdC5oaWdoPS1uLHQubG93PWUrbiksdH07THI9e2hpZ2g6MCxsb3c6MH07ZnIuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbihlLHQpe2codCl8fCh0PW5ldyBmcik7bGV0IG49dC5oaWdoLG89dC5sb3c7cmV0dXJuIGZyLmVuY29kZShlLngsTHIpLG4ueD1Mci5oaWdoLG8ueD1Mci5sb3csZnIuZW5jb2RlKGUueSxMciksbi55PUxyLmhpZ2gsby55PUxyLmxvdyxmci5lbmNvZGUoZS56LExyKSxuLno9THIuaGlnaCxvLno9THIubG93LHR9O25wPW5ldyBmcjtmci53cml0ZUVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuKXtmci5mcm9tQ2FydGVzaWFuKGUsbnApO2xldCBvPW5wLmhpZ2gsYT1ucC5sb3c7dFtuXT1vLngsdFtuKzFdPW8ueSx0W24rMl09by56LHRbbiszXT1hLngsdFtuKzRdPWEueSx0W24rNV09YS56fTthYz1mcn0pO3ZhciBzbyxrZSxubj1YKCgpPT57c2UoKTtHZSgpO29jKCk7c289e1VOU0lHTkVEX0JZVEU6UGUuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpQZS5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6UGUuVU5TSUdORURfSU5UfTtzby5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBzby5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc28uVU5TSUdORURfU0hPUlQ6cmV0dXJuIFVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc28uVU5TSUdORURfSU5UOnJldHVybiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVH19O3NvLmZyb21TaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAyOnJldHVybiBzby5VTlNJR05FRF9TSE9SVDtjYXNlIDQ6cmV0dXJuIHNvLlVOU0lHTkVEX0lOVDtjYXNlIDE6cmV0dXJuIHNvLlVOU0lHTkVEX0JZVEV9fTtzby52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKSYmKGU9PT1zby5VTlNJR05FRF9CWVRFfHxlPT09c28uVU5TSUdORURfU0hPUlR8fGU9PT1zby5VTlNJR05FRF9JTlQpfTtzby5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PWsuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KHQpOm5ldyBVaW50MTZBcnJheSh0KX07c28uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gZT49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUz9uZXcgVWludDMyQXJyYXkodCxuLG8pOm5ldyBVaW50MTZBcnJheSh0LG4sbyl9O3NvLmZyb21UeXBlZEFycmF5PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBzby5VTlNJR05FRF9CWVRFO2lmKGUgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gc28uVU5TSUdORURfU0hPUlQ7aWYoZSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBzby5VTlNJR05FRF9JTlR9O2tlPU9iamVjdC5mcmVlemUoc28pfSk7ZnVuY3Rpb24gbHcoZSx0LG4pe2xldCBvPWUrdDtyZXR1cm4gay5zaWduKGUpIT09ay5zaWduKHQpJiZNYXRoLmFicyhvL01hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSk8bj8wOm99dmFyIGFwLFRhLEhsPVgoKCk9PntHZSgpO2FwPXt9O2FwLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KnQtNCplKm59O2FwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvO2lmKGU9PT0wKXJldHVybiB0PT09MD9bXTpbLW4vdF07aWYodD09PTApe2lmKG49PT0wKXJldHVyblswLDBdO2xldCBkPU1hdGguYWJzKG4pLGM9TWF0aC5hYnMoZSk7aWYoZDxjJiZkL2M8ay5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYoZD5jJiZjL2Q8ay5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tbi9lLG88MClyZXR1cm5bXTtsZXQgdT1NYXRoLnNxcnQobyk7cmV0dXJuWy11LHVdfWVsc2UgaWYobj09PTApcmV0dXJuIG89LXQvZSxvPDA/W28sMF06WzAsb107bGV0IGE9dCp0LHI9NCplKm4saT1sdyhhLC1yLGsuRVBTSUxPTjE0KTtpZihpPDApcmV0dXJuW107bGV0IGY9LS41Kmx3KHQsay5zaWduKHQpKk1hdGguc3FydChpKSxrLkVQU0lMT04xNCk7cmV0dXJuIHQ+MD9bZi9lLG4vZl06W24vZixmL2VdfTtUYT1hcH0pO2Z1bmN0aW9uIHJwKGUsdCxuLG8pe2xldCBhPWUscj10LzMsaT1uLzMsZj1vLGQ9YSppLGM9cipmLHU9cipyLGw9aSppLGg9YSppLXUsbT1hKmYtcippLGI9cipmLWwscD00KmgqYi1tKm0seSxFO2lmKHA8MCl7bGV0IE8sWixvZTt1KmM+PWQqbD8oTz1hLFo9aCxvZT0tMipyKmgrYSptKTooTz1mLFo9YixvZT0tZiptKzIqaSpiKTtsZXQgZGU9LShvZTwwPy0xOjEpKk1hdGguYWJzKE8pKk1hdGguc3FydCgtcCk7RT0tb2UrZGU7bGV0IGVlPUUvMixtZT1lZTwwPy1NYXRoLnBvdygtZWUsMS8zKTpNYXRoLnBvdyhlZSwxLzMpLGxlPUU9PT1kZT8tbWU6LVovbWU7cmV0dXJuIHk9Wjw9MD9tZStsZTotb2UvKG1lKm1lK2xlKmxlK1opLHUqYz49ZCpsP1soeS1yKS9hXTpbLWYvKHkraSldfWxldCBfPWgsVD0tMipyKmgrYSptLHc9YixSPS1mKm0rMippKmIsUz1NYXRoLnNxcnQocCksQz1NYXRoLnNxcnQoMykvMixJPU1hdGguYWJzKE1hdGguYXRhbjIoYSpTLC1UKS8zKTt5PTIqTWF0aC5zcXJ0KC1fKTtsZXQgTj1NYXRoLmNvcyhJKTtFPXkqTjtsZXQgUD15KigtTi8yLUMqTWF0aC5zaW4oSSkpLHY9RStQPjIqcj9FLXI6UC1yLEE9YSx4PXYvQTtJPU1hdGguYWJzKE1hdGguYXRhbjIoZipTLC1SKS8zKSx5PTIqTWF0aC5zcXJ0KC13KSxOPU1hdGguY29zKEkpLEU9eSpOLFA9eSooLU4vMi1DKk1hdGguc2luKEkpKTtsZXQgTT0tZixGPUUrUDwyKmk/RStpOlAraSxVPU0vRix6PUEqRixEPS12KkYtQSpNLEc9dipNLEg9KGkqRC1yKkcpLygtcipEK2kqeik7cmV0dXJuIHg8PUg/eDw9VT9IPD1VP1t4LEgsVV06W3gsVSxIXTpbVSx4LEhdOng8PVU/W0gseCxVXTpIPD1VP1tILFUseF06W1UsSCx4XX12YXIgaXAsS2wsaHc9WCgoKT0+e0hsKCk7aXA9e307aXAuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1lKmUscj10KnQsaT1uKm4sZj1vKm87cmV0dXJuIDE4KmUqdCpuKm8rcippLTI3KmEqZi00KihlKmkqbityKnQqbyl9O2lwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGEscjtpZihlPT09MClyZXR1cm4gVGEuY29tcHV0ZVJlYWxSb290cyh0LG4sbyk7aWYodD09PTApe2lmKG49PT0wKXtpZihvPT09MClyZXR1cm5bMCwwLDBdO3I9LW8vZTtsZXQgaT1yPDA/LU1hdGgucG93KC1yLDEvMyk6TWF0aC5wb3cociwxLzMpO3JldHVybltpLGksaV19ZWxzZSBpZihvPT09MClyZXR1cm4gYT1UYS5jb21wdXRlUmVhbFJvb3RzKGUsMCxuKSxhLkxlbmd0aD09PTA/WzBdOlthWzBdLDAsYVsxXV07cmV0dXJuIHJwKGUsMCxuLG8pfWVsc2V7aWYobj09PTApcmV0dXJuIG89PT0wPyhyPS10L2UscjwwP1tyLDAsMF06WzAsMCxyXSk6cnAoZSx0LDAsbyk7aWYobz09PTApcmV0dXJuIGE9VGEuY29tcHV0ZVJlYWxSb290cyhlLHQsbiksYS5sZW5ndGg9PT0wP1swXTphWzFdPD0wP1thWzBdLGFbMV0sMF06YVswXT49MD9bMCxhWzBdLGFbMV1dOlthWzBdLDAsYVsxXV19cmV0dXJuIHJwKGUsdCxuLG8pfTtLbD1pcH0pO2Z1bmN0aW9uIEdhKGUsdCxuLG8pe2xldCBhPWUqZSxyPXQtMyphLzgsaT1uLXQqZS8yK2EqZS84LGY9by1uKmUvNCt0KmEvMTYtMyphKmEvMjU2LGQ9S2wuY29tcHV0ZVJlYWxSb290cygxLDIqcixyKnItNCpmLC1pKmkpO2lmKGQubGVuZ3RoPjApe2xldCBjPS1lLzQsdT1kW2QubGVuZ3RoLTFdO2lmKE1hdGguYWJzKHUpPGsuRVBTSUxPTjE0KXtsZXQgbD1UYS5jb21wdXRlUmVhbFJvb3RzKDEscixmKTtpZihsLmxlbmd0aD09PTIpe2xldCBoPWxbMF0sbT1sWzFdLGI7aWYoaD49MCYmbT49MCl7bGV0IHA9TWF0aC5zcXJ0KGgpLHk9TWF0aC5zcXJ0KG0pO3JldHVybltjLXksYy1wLGMrcCxjK3ldfWVsc2V7aWYoaD49MCYmbTwwKXJldHVybiBiPU1hdGguc3FydChoKSxbYy1iLGMrYl07aWYoaDwwJiZtPj0wKXJldHVybiBiPU1hdGguc3FydChtKSxbYy1iLGMrYl19fXJldHVybltdfWVsc2UgaWYodT4wKXtsZXQgbD1NYXRoLnNxcnQodSksaD0ocit1LWkvbCkvMixtPShyK3UraS9sKS8yLGI9VGEuY29tcHV0ZVJlYWxSb290cygxLGwsaCkscD1UYS5jb21wdXRlUmVhbFJvb3RzKDEsLWwsbSk7cmV0dXJuIGIubGVuZ3RoIT09MD8oYlswXSs9YyxiWzFdKz1jLHAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLGJbMV08PXBbMF0/W2JbMF0sYlsxXSxwWzBdLHBbMV1dOnBbMV08PWJbMF0/W3BbMF0scFsxXSxiWzBdLGJbMV1dOmJbMF0+PXBbMF0mJmJbMV08PXBbMV0/W3BbMF0sYlswXSxiWzFdLHBbMV1dOnBbMF0+PWJbMF0mJnBbMV08PWJbMV0/W2JbMF0scFswXSxwWzFdLGJbMV1dOmJbMF0+cFswXSYmYlswXTxwWzFdP1twWzBdLGJbMF0scFsxXSxiWzFdXTpbYlswXSxwWzBdLGJbMV0scFsxXV0pOmIpOnAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLHApOltdfX1yZXR1cm5bXX1mdW5jdGlvbiBNZihlLHQsbixvKXtsZXQgYT1uKm4scj10KnQsaT1lKmUsZj0tMip0LGQ9biplK3ItNCpvLGM9aSpvLW4qdCplK2EsdT1LbC5jb21wdXRlUmVhbFJvb3RzKDEsZixkLGMpO2lmKHUubGVuZ3RoPjApe2xldCBsPXVbMF0saD10LWwsbT1oKmgsYj1lLzIscD1oLzIseT1tLTQqbyxFPW0rNCpNYXRoLmFicyhvKSxfPWktNCpsLFQ9aSs0Kk1hdGguYWJzKGwpLHcsUjtpZihsPDB8fHkqVDxfKkUpe2xldCBBPU1hdGguc3FydChfKTt3PUEvMixSPUE9PT0wPzA6KGUqcC1uKS9BfWVsc2V7bGV0IEE9TWF0aC5zcXJ0KHkpO3c9QT09PTA/MDooZSpwLW4pL0EsUj1BLzJ9bGV0IFMsQztiPT09MCYmdz09PTA/KFM9MCxDPTApOmsuc2lnbihiKT09PWsuc2lnbih3KT8oUz1iK3csQz1sL1MpOihDPWItdyxTPWwvQyk7bGV0IEksTjtwPT09MCYmUj09PTA/KEk9MCxOPTApOmsuc2lnbihwKT09PWsuc2lnbihSKT8oST1wK1IsTj1vL0kpOihOPXAtUixJPW8vTik7bGV0IFA9VGEuY29tcHV0ZVJlYWxSb290cygxLFMsSSksdj1UYS5jb21wdXRlUmVhbFJvb3RzKDEsQyxOKTtpZihQLmxlbmd0aCE9PTApcmV0dXJuIHYubGVuZ3RoIT09MD9QWzFdPD12WzBdP1tQWzBdLFBbMV0sdlswXSx2WzFdXTp2WzFdPD1QWzBdP1t2WzBdLHZbMV0sUFswXSxQWzFdXTpQWzBdPj12WzBdJiZQWzFdPD12WzFdP1t2WzBdLFBbMF0sUFsxXSx2WzFdXTp2WzBdPj1QWzBdJiZ2WzFdPD1QWzFdP1tQWzBdLHZbMF0sdlsxXSxQWzFdXTpQWzBdPnZbMF0mJlBbMF08dlsxXT9bdlswXSxQWzBdLHZbMV0sUFsxXV06W1BbMF0sdlswXSxQWzFdLHZbMV1dOlA7aWYodi5sZW5ndGghPT0wKXJldHVybiB2fXJldHVybltdfXZhciBjcCxtdyxidz1YKCgpPT57aHcoKTtHZSgpO0hsKCk7Y3A9e307Y3AuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUqZSxpPXIqZSxmPXQqdCxkPWYqdCxjPW4qbix1PWMqbixsPW8qbyxoPWwqbyxtPWEqYSxiPW0qYTtyZXR1cm4gZipjKmwtNCpkKmgtNCplKnUqbCsxOCplKnQqbipoLTI3KnIqbCpsKzI1NippKmIrYSooMTgqZCpuKm8tNCpmKnUrMTYqZSpjKmMtODAqZSp0KmMqby02KmUqZipsKzE0NCpyKm4qbCkrbSooMTQ0KmUqZipuLTI3KmYqZi0xMjgqcipjLTE5MipyKnQqbyl9O2NwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtpZihNYXRoLmFicyhlKTxrLkVQU0lMT04xNSlyZXR1cm4gS2wuY29tcHV0ZVJlYWxSb290cyh0LG4sbyxhKTtsZXQgcj10L2UsaT1uL2UsZj1vL2UsZD1hL2UsYz1yPDA/MTowO3N3aXRjaChjKz1pPDA/YysxOmMsYys9ZjwwP2MrMTpjLGMrPWQ8MD9jKzE6YyxjKXtjYXNlIDA6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTpyZXR1cm4gTWYocixpLGYsZCk7Y2FzZSAyOnJldHVybiBNZihyLGksZixkKTtjYXNlIDM6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgNDpyZXR1cm4gR2EocixpLGYsZCk7Y2FzZSA1OnJldHVybiBNZihyLGksZixkKTtjYXNlIDY6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgNzpyZXR1cm4gR2EocixpLGYsZCk7Y2FzZSA4OnJldHVybiBNZihyLGksZixkKTtjYXNlIDk6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTA6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTE6cmV0dXJuIE1mKHIsaSxmLGQpO2Nhc2UgMTI6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTM6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTQ6cmV0dXJuIEdhKHIsaSxmLGQpO2Nhc2UgMTU6cmV0dXJuIEdhKHIsaSxmLGQpO2RlZmF1bHQ6cmV0dXJufX07bXc9Y3B9KTtmdW5jdGlvbiBxbChlLHQpe3Q9cy5jbG9uZSh0Pz9zLlpFUk8pLHMuZXF1YWxzKHQscy5aRVJPKXx8cy5ub3JtYWxpemUodCx0KSx0aGlzLm9yaWdpbj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5kaXJlY3Rpb249dH12YXIgZHIsTmY9WCgoKT0+e0llKCk7c2UoKTtxbC5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQub3JpZ2luPXMuY2xvbmUoZS5vcmlnaW4pLHQuZGlyZWN0aW9uPXMuY2xvbmUoZS5kaXJlY3Rpb24pLHQpOm5ldyBxbChlLm9yaWdpbixlLmRpcmVjdGlvbil9O3FsLmdldFBvaW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZyhuKXx8KG49bmV3IHMpLG49cy5tdWx0aXBseUJ5U2NhbGFyKGUuZGlyZWN0aW9uLHQsbikscy5hZGQoZS5vcmlnaW4sbixuKX07ZHI9cWx9KTtmdW5jdGlvbiBVTihlLHQsbixvKXtsZXQgYT10KnQtNCplKm47aWYoYTwwKXJldHVybjtpZihhPjApe2xldCBpPTEvKDIqZSksZj1NYXRoLnNxcnQoYSksZD0oLXQrZikqaSxjPSgtdC1mKSppO3JldHVybiBkPGM/KG8ucm9vdDA9ZCxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT1kKSxvfWxldCByPS10LygyKmUpO2lmKHIhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9cixvfWZ1bmN0aW9uIFJ3KGUsdCxuKXtnKG4pfHwobj1uZXcgRW8pO2xldCBvPWUub3JpZ2luLGE9ZS5kaXJlY3Rpb24scj10LmNlbnRlcixpPXQucmFkaXVzKnQucmFkaXVzLGY9cy5zdWJ0cmFjdChvLHIsVHcpLGQ9cy5kb3QoYSxhKSxjPTIqcy5kb3QoYSxmKSx1PXMubWFnbml0dWRlU3F1YXJlZChmKS1pLGw9VU4oZCxjLHUsTE4pO2lmKGcobCkpcmV0dXJuIG4uc3RhcnQ9bC5yb290MCxuLnN0b3A9bC5yb290MSxufWZ1bmN0aW9uIHNwKGUsdCxuLG8sYSl7aWYoYS5zdGFydD0obi1lKS90LGEuc3RvcD0oby1lKS90LGEuc3RvcDxhLnN0YXJ0KXtsZXQgcj1hLnN0b3A7YS5zdG9wPWEuc3RhcnQsYS5zdGFydD1yfXJldHVybiBhfWZ1bmN0aW9uIHJjKGUsdCxuKXtsZXQgbz1lK3Q7cmV0dXJuIGsuc2lnbihlKSE9PWsuc2lnbih0KSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpPG4/MDpvfXZhciBsbixGTixETixUdyxwdyxndyxCTixMTixqTix6TixHTixWTixITixLTixmcCxfdyx5dyxXbCxxTixXTixYTixZTixKTixaTixBdyx3dyxFdyxRTiwkTixlSSxubyxwaT1YKCgpPT57SWUoKTtFdCgpO3NlKCk7bGYoKTtHZSgpO0RuKCk7SGwoKTtidygpO05mKCk7bG49e307bG4ucmF5UGxhbmU9ZnVuY3Rpb24oZSx0LG4pe2cobil8fChuPW5ldyBzKTtsZXQgbz1lLm9yaWdpbixhPWUuZGlyZWN0aW9uLHI9dC5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjE1KXJldHVybjtsZXQgZj0oLXQuZGlzdGFuY2Utcy5kb3QocixvKSkvaTtpZighKGY8MCkpcmV0dXJuIG49cy5tdWx0aXBseUJ5U2NhbGFyKGEsZixuKSxzLmFkZChvLG4sbil9O0ZOPW5ldyBzLEROPW5ldyBzLFR3PW5ldyBzLHB3PW5ldyBzLGd3PW5ldyBzO2xuLnJheVRyaWFuZ2xlUGFyYW1ldHJpYz1mdW5jdGlvbihlLHQsbixvLGEpe2E9YT8/ITE7bGV0IHI9ZS5vcmlnaW4saT1lLmRpcmVjdGlvbixmPXMuc3VidHJhY3Qobix0LEZOKSxkPXMuc3VidHJhY3Qobyx0LEROKSxjPXMuY3Jvc3MoaSxkLFR3KSx1PXMuZG90KGYsYyksbCxoLG0sYixwO2lmKGEpe2lmKHU8ay5FUFNJTE9ONnx8KGw9cy5zdWJ0cmFjdChyLHQscHcpLG09cy5kb3QobCxjKSxtPDB8fG0+dSl8fChoPXMuY3Jvc3MobCxmLGd3KSxiPXMuZG90KGksaCksYjwwfHxtK2I+dSkpcmV0dXJuO3A9cy5kb3QoZCxoKS91fWVsc2V7aWYoTWF0aC5hYnModSk8ay5FUFNJTE9ONilyZXR1cm47bGV0IHk9MS91O2lmKGw9cy5zdWJ0cmFjdChyLHQscHcpLG09cy5kb3QobCxjKSp5LG08MHx8bT4xfHwoaD1zLmNyb3NzKGwsZixndyksYj1zLmRvdChpLGgpKnksYjwwfHxtK2I+MSkpcmV0dXJuO3A9cy5kb3QoZCxoKSp5fXJldHVybiBwfTtsbi5yYXlUcmlhbmdsZT1mdW5jdGlvbihlLHQsbixvLGEscil7bGV0IGk9bG4ucmF5VHJpYW5nbGVQYXJhbWV0cmljKGUsdCxuLG8sYSk7aWYoISghZyhpKXx8aTwwKSlyZXR1cm4gZyhyKXx8KHI9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihlLmRpcmVjdGlvbixpLHIpLHMuYWRkKGUub3JpZ2luLHIscil9O0JOPW5ldyBkcjtsbi5saW5lU2VnbWVudFRyaWFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPUJOO3MuY2xvbmUoZSxmLm9yaWdpbikscy5zdWJ0cmFjdCh0LGUsZi5kaXJlY3Rpb24pLHMubm9ybWFsaXplKGYuZGlyZWN0aW9uLGYuZGlyZWN0aW9uKTtsZXQgZD1sbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWMoZixuLG8sYSxyKTtpZighKCFnKGQpfHxkPDB8fGQ+cy5kaXN0YW5jZShlLHQpKSlyZXR1cm4gZyhpKXx8KGk9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihmLmRpcmVjdGlvbixkLGkpLHMuYWRkKGYub3JpZ2luLGksaSl9O0xOPXtyb290MDowLHJvb3QxOjB9O2xuLnJheVNwaGVyZT1mdW5jdGlvbihlLHQsbil7aWYobj1SdyhlLHQsbiksISghZyhuKXx8bi5zdG9wPDApKXJldHVybiBuLnN0YXJ0PU1hdGgubWF4KG4uc3RhcnQsMCksbn07ak49bmV3IGRyO2xuLmxpbmVTZWdtZW50U3BoZXJlPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPWpOO3MuY2xvbmUoZSxhLm9yaWdpbik7bGV0IHI9cy5zdWJ0cmFjdCh0LGUsYS5kaXJlY3Rpb24pLGk9cy5tYWduaXR1ZGUocik7aWYocy5ub3JtYWxpemUocixyKSxvPVJ3KGEsbixvKSwhKCFnKG8pfHxvLnN0b3A8MHx8by5zdGFydD5pKSlyZXR1cm4gby5zdGFydD1NYXRoLm1heChvLnN0YXJ0LDApLG8uc3RvcD1NYXRoLm1pbihvLnN0b3AsaSksb307ek49bmV3IHMsR049bmV3IHM7bG4ucmF5RWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7bGV0IG49dC5vbmVPdmVyUmFkaWksbz1zLm11bHRpcGx5Q29tcG9uZW50cyhuLGUub3JpZ2luLHpOKSxhPXMubXVsdGlwbHlDb21wb25lbnRzKG4sZS5kaXJlY3Rpb24sR04pLHI9cy5tYWduaXR1ZGVTcXVhcmVkKG8pLGk9cy5kb3QobyxhKSxmLGQsYyx1LGw7aWYocj4xKXtpZihpPj0wKXJldHVybjtsZXQgaD1pKmk7aWYoZj1yLTEsZD1zLm1hZ25pdHVkZVNxdWFyZWQoYSksYz1kKmYsaDxjKXJldHVybjtpZihoPmMpe3U9aSppLWMsbD0taStNYXRoLnNxcnQodSk7bGV0IGI9bC9kLHA9Zi9sO3JldHVybiBiPHA/bmV3IEVvKGIscCk6e3N0YXJ0OnAsc3RvcDpifX1sZXQgbT1NYXRoLnNxcnQoZi9kKTtyZXR1cm4gbmV3IEVvKG0sbSl9ZWxzZSBpZihyPDEpcmV0dXJuIGY9ci0xLGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLGM9ZCpmLHU9aSppLWMsbD0taStNYXRoLnNxcnQodSksbmV3IEVvKDAsbC9kKTtpZihpPDApcmV0dXJuIGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLG5ldyBFbygwLC1pL2QpfTtWTj1uZXcgRW8sSE49bmV3IEVvLEtOPW5ldyBFbztsbi5yYXlBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKGUsdCxuKXtnKG4pfHwobj1uZXcgRW8pO2xldCBvPXNwKGUub3JpZ2luLngsZS5kaXJlY3Rpb24ueCx0Lm1pbmltdW0ueCx0Lm1heGltdW0ueCxWTiksYT1zcChlLm9yaWdpbi55LGUuZGlyZWN0aW9uLnksdC5taW5pbXVtLnksdC5tYXhpbXVtLnksSE4pLHI9c3AoZS5vcmlnaW4ueixlLmRpcmVjdGlvbi56LHQubWluaW11bS56LHQubWF4aW11bS56LEtOKTtpZihuLnN0YXJ0PW8uc3RhcnQ+YS5zdGFydD9vLnN0YXJ0OmEuc3RhcnQsbi5zdG9wPW8uc3RvcDxhLnN0b3A/by5zdG9wOmEuc3RvcCwhKG8uc3RhcnQ+YS5zdG9wfHxhLnN0YXJ0Pm8uc3RvcCkmJiEobi5zdGFydD5yLnN0b3B8fHIuc3RhcnQ+bi5zdG9wKSlyZXR1cm4gci5zdGFydD5uLnN0YXJ0JiYobi5zdGFydD1yLnN0YXJ0KSxyLnN0b3A8bi5zdG9wJiYobi5zdG9wPXIuc3RvcCksbn07bG4ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbj1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPW8qbyxpPWEqYSxmPShlW0ouQ09MVU1OMVJPVzFdLWVbSi5DT0xVTU4yUk9XMl0pKmksZD1hKihvKnJjKGVbSi5DT0xVTU4xUk9XMF0sZVtKLkNPTFVNTjBST1cxXSxrLkVQU0lMT04xNSkrdC55KSxjPWVbSi5DT0xVTU4wUk9XMF0qcitlW0ouQ09MVU1OMlJPVzJdKmkrbyp0Lngrbix1PWkqcmMoZVtKLkNPTFVNTjJST1cxXSxlW0ouQ09MVU1OMVJPVzJdLGsuRVBTSUxPTjE1KSxsPWEqKG8qcmMoZVtKLkNPTFVNTjJST1cwXSxlW0ouQ09MVU1OMFJPVzJdKSt0LnopLGgsbT1bXTtpZihsPT09MCYmdT09PTApe2lmKGg9VGEuY29tcHV0ZVJlYWxSb290cyhmLGQsYyksaC5sZW5ndGg9PT0wKXJldHVybiBtO2xldCBJPWhbMF0sTj1NYXRoLnNxcnQoTWF0aC5tYXgoMS1JKkksMCkpO2lmKG0ucHVzaChuZXcgcyhvLGEqSSxhKi1OKSksbS5wdXNoKG5ldyBzKG8sYSpJLGEqTikpLGgubGVuZ3RoPT09Mil7bGV0IFA9aFsxXSx2PU1hdGguc3FydChNYXRoLm1heCgxLVAqUCwwKSk7bS5wdXNoKG5ldyBzKG8sYSpQLGEqLXYpKSxtLnB1c2gobmV3IHMobyxhKlAsYSp2KSl9cmV0dXJuIG19bGV0IGI9bCpsLHA9dSp1LHk9ZipmLEU9bCp1LF89eStwLFQ9MiooZCpmK0UpLHc9MipjKmYrZCpkLXArYixSPTIqKGMqZC1FKSxTPWMqYy1iO2lmKF89PT0wJiZUPT09MCYmdz09PTAmJlI9PT0wKXJldHVybiBtO2g9bXcuY29tcHV0ZVJlYWxSb290cyhfLFQsdyxSLFMpO2xldCBDPWgubGVuZ3RoO2lmKEM9PT0wKXJldHVybiBtO2ZvcihsZXQgST0wO0k8QzsrK0kpe2xldCBOPWhbSV0sUD1OKk4sdj1NYXRoLm1heCgxLVAsMCksQT1NYXRoLnNxcnQodikseDtrLnNpZ24oZik9PT1rLnNpZ24oYyk/eD1yYyhmKlArYyxkKk4say5FUFNJTE9OMTIpOmsuc2lnbihjKT09PWsuc2lnbihkKk4pP3g9cmMoZipQLGQqTitjLGsuRVBTSUxPTjEyKTp4PXJjKGYqUCtkKk4sYyxrLkVQU0lMT04xMik7bGV0IE09cmModSpOLGwsay5FUFNJTE9OMTUpLEY9eCpNO0Y8MD9tLnB1c2gobmV3IHMobyxhKk4sYSpBKSk6Rj4wP20ucHVzaChuZXcgcyhvLGEqTixhKi1BKSk6QSE9PTA/KG0ucHVzaChuZXcgcyhvLGEqTixhKi1BKSksbS5wdXNoKG5ldyBzKG8sYSpOLGEqQSkpLCsrSSk6bS5wdXNoKG5ldyBzKG8sYSpOLGEqQSkpfXJldHVybiBtfTtmcD1uZXcgcyxfdz1uZXcgcyx5dz1uZXcgcyxXbD1uZXcgcyxxTj1uZXcgcyxXTj1uZXcgSixYTj1uZXcgSixZTj1uZXcgSixKTj1uZXcgSixaTj1uZXcgSixBdz1uZXcgSix3dz1uZXcgSixFdz1uZXcgcyxRTj1uZXcgcywkTj1uZXcgcmU7bG4uZ3JhemluZ0FsdGl0dWRlTG9jYXRpb249ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLm9yaWdpbixvPWUuZGlyZWN0aW9uO2lmKCFzLmVxdWFscyhuLHMuWkVSTykpe2xldCBTPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sZnApO2lmKHMuZG90KG8sUyk+PTApcmV0dXJuIG59bGV0IGE9Zyh0aGlzLnJheUVsbGlwc29pZChlLHQpKSxyPXQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8sZnApLGk9cy5ub3JtYWxpemUocixyKSxmPXMubW9zdE9ydGhvZ29uYWxBeGlzKHIsV2wpLGQ9cy5ub3JtYWxpemUocy5jcm9zcyhmLGksX3cpLF93KSxjPXMubm9ybWFsaXplKHMuY3Jvc3MoaSxkLHl3KSx5dyksdT1XTjt1WzBdPWkueCx1WzFdPWkueSx1WzJdPWkueix1WzNdPWQueCx1WzRdPWQueSx1WzVdPWQueix1WzZdPWMueCx1WzddPWMueSx1WzhdPWMuejtsZXQgbD1KLnRyYW5zcG9zZSh1LFhOKSxoPUouZnJvbVNjYWxlKHQucmFkaWksWU4pLG09Si5mcm9tU2NhbGUodC5vbmVPdmVyUmFkaWksSk4pLGI9Wk47YlswXT0wLGJbMV09LW8ueixiWzJdPW8ueSxiWzNdPW8ueixiWzRdPTAsYls1XT0tby54LGJbNl09LW8ueSxiWzddPW8ueCxiWzhdPTA7bGV0IHA9Si5tdWx0aXBseShKLm11bHRpcGx5KGwsbSxBdyksYixBdykseT1KLm11bHRpcGx5KEoubXVsdGlwbHkocCxoLHd3KSx1LHd3KSxFPUoubXVsdGlwbHlCeVZlY3RvcihwLG4scU4pLF89bG4ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbih5LHMubmVnYXRlKEUsZnApLDAsMCwxKSxULHcsUj1fLmxlbmd0aDtpZihSPjApe2xldCBTPXMuY2xvbmUocy5aRVJPLFFOKSxDPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IE49MDtOPFI7KytOKXtUPUoubXVsdGlwbHlCeVZlY3RvcihoLEoubXVsdGlwbHlCeVZlY3Rvcih1LF9bTl0sRXcpLEV3KTtsZXQgUD1zLm5vcm1hbGl6ZShzLnN1YnRyYWN0KFQsbixXbCksV2wpLHY9cy5kb3QoUCxvKTt2PkMmJihDPXYsUz1zLmNsb25lKFQsUykpfWxldCBJPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoUywkTik7cmV0dXJuIEM9ay5jbGFtcChDLDAsMSksdz1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KFMsbixXbCkpKk1hdGguc3FydCgxLUMqQyksdz1hPy13OncsSS5oZWlnaHQ9dyx0LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEksbmV3IHMpfX07ZUk9bmV3IHM7bG4ubGluZVNlZ21lbnRQbGFuZT1mdW5jdGlvbihlLHQsbixvKXtnKG8pfHwobz1uZXcgcyk7bGV0IGE9cy5zdWJ0cmFjdCh0LGUsZUkpLHI9bi5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjYpcmV0dXJuO2xldCBmPXMuZG90KHIsZSksZD0tKG4uZGlzdGFuY2UrZikvaTtpZighKGQ8MHx8ZD4xKSlyZXR1cm4gcy5tdWx0aXBseUJ5U2NhbGFyKGEsZCxvKSxzLmFkZChlLG8sbyksb307bG4udHJpYW5nbGVQbGFuZUludGVyc2VjdGlvbj1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1vLm5vcm1hbCxyPW8uZGlzdGFuY2UsaT1zLmRvdChhLGUpK3I8MCxmPXMuZG90KGEsdCkrcjwwLGQ9cy5kb3QoYSxuKStyPDAsYz0wO2MrPWk/MTowLGMrPWY/MTowLGMrPWQ/MTowO2xldCB1LGw7aWYoKGM9PT0xfHxjPT09MikmJih1PW5ldyBzLGw9bmV3IHMpLGM9PT0xKXtpZihpKXJldHVybiBsbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLHUpLGxuLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8sbCkse3Bvc2l0aW9uczpbZSx0LG4sdSxsXSxpbmRpY2VzOlswLDMsNCwxLDIsNCwxLDQsM119O2lmKGYpcmV0dXJuIGxuLmxpbmVTZWdtZW50UGxhbmUodCxuLG8sdSksbG4ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxsKSx7cG9zaXRpb25zOltlLHQsbix1LGxdLGluZGljZXM6WzEsMyw0LDIsMCw0LDIsNCwzXX07aWYoZClyZXR1cm4gbG4ubGluZVNlZ21lbnRQbGFuZShuLGUsbyx1KSxsbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLGwpLHtwb3NpdGlvbnM6W2UsdCxuLHUsbF0saW5kaWNlczpbMiwzLDQsMCwxLDQsMCw0LDNdfX1lbHNlIGlmKGM9PT0yKWlmKGkpaWYoZil7aWYoIWQpcmV0dXJuIGxuLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8sdSksbG4ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxsKSx7cG9zaXRpb25zOltlLHQsbix1LGxdLGluZGljZXM6WzAsMSw0LDAsNCwzLDIsMyw0XX19ZWxzZSByZXR1cm4gbG4ubGluZVNlZ21lbnRQbGFuZShuLHQsbyx1KSxsbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLGwpLHtwb3NpdGlvbnM6W2UsdCxuLHUsbF0saW5kaWNlczpbMiwwLDQsMiw0LDMsMSwzLDRdfTtlbHNlIHJldHVybiBsbi5saW5lU2VnbWVudFBsYW5lKHQsZSxvLHUpLGxuLmxpbmVTZWdtZW50UGxhbmUobixlLG8sbCkse3Bvc2l0aW9uczpbZSx0LG4sdSxsXSxpbmRpY2VzOlsxLDIsNCwxLDQsMywwLDMsNF19fTtubz1sbn0pO2Z1bmN0aW9uIGZvKGUsdCl7dGhpcy5ub3JtYWw9cy5jbG9uZShlKSx0aGlzLmRpc3RhbmNlPXR9dmFyIHRJLG5JLG9JLGFJLHJJLHNuLGdpPVgoKCk9PntJZSgpO2dhKCk7c2UoKTtwbigpO2ZvLmZyb21Qb2ludE5vcm1hbD1mdW5jdGlvbihlLHQsbil7bGV0IG89LXMuZG90KHQsZSk7cmV0dXJuIGcobik/KHMuY2xvbmUodCxuLm5vcm1hbCksbi5kaXN0YW5jZT1vLG4pOm5ldyBmbyh0LG8pfTt0ST1uZXcgcztmby5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbihlLHQpe2xldCBuPXMuZnJvbUNhcnRlc2lhbjQoZSx0SSksbz1lLnc7cmV0dXJuIGcodCk/KHMuY2xvbmUobix0Lm5vcm1hbCksdC5kaXN0YW5jZT1vLHQpOm5ldyBmbyhuLG8pfTtmby5nZXRQb2ludERpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuZG90KGUubm9ybWFsLHQpK2UuZGlzdGFuY2V9O25JPW5ldyBzO2ZvLnByb2plY3RQb2ludE9udG9QbGFuZT1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IHMpO2xldCBvPWZvLmdldFBvaW50RGlzdGFuY2UoZSx0KSxhPXMubXVsdGlwbHlCeVNjYWxhcihlLm5vcm1hbCxvLG5JKTtyZXR1cm4gcy5zdWJ0cmFjdCh0LGEsbil9O29JPW5ldyAkLGFJPW5ldyBkdCxyST1uZXcgcztmby50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUubm9ybWFsLGE9ZS5kaXN0YW5jZSxyPSQuaW52ZXJzZVRyYW5zcG9zZSh0LG9JKSxpPWR0LmZyb21FbGVtZW50cyhvLngsby55LG8ueixhLGFJKTtpPSQubXVsdGlwbHlCeVZlY3RvcihyLGksaSk7bGV0IGY9cy5mcm9tQ2FydGVzaWFuNChpLHJJKTtyZXR1cm4gaT1kdC5kaXZpZGVCeVNjYWxhcihpLHMubWFnbml0dWRlKGYpLGkpLGZvLmZyb21DYXJ0ZXNpYW40KGksbil9O2ZvLmNsb25lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCk/KHMuY2xvbmUoZS5ub3JtYWwsdC5ub3JtYWwpLHQuZGlzdGFuY2U9ZS5kaXN0YW5jZSx0KTpuZXcgZm8oZS5ub3JtYWwsZS5kaXN0YW5jZSl9O2ZvLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRpc3RhbmNlPT09dC5kaXN0YW5jZSYmcy5lcXVhbHMoZS5ub3JtYWwsdC5ub3JtYWwpfTtmby5PUklHSU5fWFlfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgZm8ocy5VTklUX1osMCkpO2ZvLk9SSUdJTl9ZWl9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBmbyhzLlVOSVRfWCwwKSk7Zm8uT1JJR0lOX1pYX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IGZvKHMuVU5JVF9ZLDApKTtzbj1mb30pO3ZhciBkcCx4dyxPdz1YKCgpPT57bXQoKTtzZSgpO2RwPXt9O2RwLmNhbGN1bGF0ZUFDTVI9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5pbmRpY2VzLG49ZS5tYXhpbXVtSW5kZXgsbz1lLmNhY2hlU2l6ZT8/MjQsYT10Lmxlbmd0aDtpZighZyhuKSl7bj0wO2xldCBmPTAsZD10W2ZdO2Zvcig7ZjxhOylkPm4mJihuPWQpLCsrZixkPXRbZl19bGV0IHI9W107Zm9yKGxldCBmPTA7ZjxuKzE7ZisrKXJbZl09MDtsZXQgaT1vKzE7Zm9yKGxldCBmPTA7ZjxhOysrZilpLXJbdFtmXV0+byYmKHJbdFtmXV09aSwrK2kpO3JldHVybihpLW8rMSkvKGEvMyl9O2RwLnRpcHNpZnk9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5pbmRpY2VzLG49ZS5tYXhpbXVtSW5kZXgsbz1lLmNhY2hlU2l6ZT8/MjQsYTtmdW5jdGlvbiByKHYsQSx4LE0pe2Zvcig7QS5sZW5ndGg+PTE7KXtsZXQgRj1BW0EubGVuZ3RoLTFdO2lmKEEuc3BsaWNlKEEubGVuZ3RoLTEsMSksdltGXS5udW1MaXZlVHJpYW5nbGVzPjApcmV0dXJuIEZ9Zm9yKDthPE07KXtpZih2W2FdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4rK2EsYS0xOysrYX1yZXR1cm4tMX1mdW5jdGlvbiBpKHYsQSx4LE0sRixVLHope2xldCBEPS0xLEcsSD0tMSxPPTA7Zm9yKDtPPHgubGVuZ3RoOyl7bGV0IFo9eFtPXTtNW1pdLm51bUxpdmVUcmlhbmdsZXMmJihHPTAsRi1NW1pdLnRpbWVTdGFtcCsyKk1bWl0ubnVtTGl2ZVRyaWFuZ2xlczw9QSYmKEc9Ri1NW1pdLnRpbWVTdGFtcCksKEc+SHx8SD09PS0xKSYmKEg9RyxEPVopKSwrK099cmV0dXJuIEQ9PT0tMT9yKE0sVSx2LHopOkR9bGV0IGY9dC5sZW5ndGgsZD0wLGM9MCx1PXRbY10sbD1mO2lmKGcobikpZD1uKzE7ZWxzZXtmb3IoO2M8bDspdT5kJiYoZD11KSwrK2MsdT10W2NdO2lmKGQ9PT0tMSlyZXR1cm4gMDsrK2R9bGV0IGg9W10sbTtmb3IobT0wO208ZDttKyspaFttXT17bnVtTGl2ZVRyaWFuZ2xlczowLHRpbWVTdGFtcDowLHZlcnRleFRyaWFuZ2xlczpbXX07Yz0wO2xldCBiPTA7Zm9yKDtjPGw7KWhbdFtjXV0udmVydGV4VHJpYW5nbGVzLnB1c2goYiksKytoW3RbY11dLm51bUxpdmVUcmlhbmdsZXMsaFt0W2MrMV1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsraFt0W2MrMV1dLm51bUxpdmVUcmlhbmdsZXMsaFt0W2MrMl1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsraFt0W2MrMl1dLm51bUxpdmVUcmlhbmdsZXMsKytiLGMrPTM7bGV0IHA9MCx5PW8rMTthPTE7bGV0IEU9W10sXz1bXSxULHcsUj0wLFM9W10sQz1mLzMsST1bXTtmb3IobT0wO208QzttKyspSVttXT0hMTtsZXQgTixQO2Zvcig7cCE9PS0xOyl7RT1bXSx3PWhbcF0sUD13LnZlcnRleFRyaWFuZ2xlcy5sZW5ndGg7Zm9yKGxldCB2PTA7djxQOysrdilpZihiPXcudmVydGV4VHJpYW5nbGVzW3ZdLCFJW2JdKXtJW2JdPSEwLGM9YitiK2I7Zm9yKGxldCBBPTA7QTwzOysrQSlOPXRbY10sRS5wdXNoKE4pLF8ucHVzaChOKSxTW1JdPU4sKytSLFQ9aFtOXSwtLVQubnVtTGl2ZVRyaWFuZ2xlcyx5LVQudGltZVN0YW1wPm8mJihULnRpbWVTdGFtcD15LCsreSksKytjfXA9aSh0LG8sRSxoLHksXyxkKX1yZXR1cm4gU307eHc9ZHB9KTtmdW5jdGlvbiBlaChlLHQsbixvLGEpe2VbdCsrXT1uLGVbdCsrXT1vLGVbdCsrXT1vLGVbdCsrXT1hLGVbdCsrXT1hLGVbdF09bn1mdW5jdGlvbiBpSShlKXtsZXQgdD1lLmxlbmd0aCxuPXQvMyo2LG89a2UuY3JlYXRlVHlwZWRBcnJheSh0LG4pLGE9MDtmb3IobGV0IHI9MDtyPHQ7cis9MyxhKz02KWVoKG8sYSxlW3JdLGVbcisxXSxlW3IrMl0pO3JldHVybiBvfWZ1bmN0aW9uIGNJKGUpe2xldCB0PWUubGVuZ3RoO2lmKHQ+PTMpe2xldCBuPSh0LTIpKjYsbz1rZS5jcmVhdGVUeXBlZEFycmF5KHQsbik7ZWgobywwLGVbMF0sZVsxXSxlWzJdKTtsZXQgYT02O2ZvcihsZXQgcj0zO3I8dDsrK3IsYSs9NillaChvLGEsZVtyLTFdLGVbcl0sZVtyLTJdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uIHNJKGUpe2lmKGUubGVuZ3RoPjApe2xldCB0PWUubGVuZ3RoLTEsbj0odC0xKSo2LG89a2UuY3JlYXRlVHlwZWRBcnJheSh0LG4pLGE9ZVswXSxyPTA7Zm9yKGxldCBpPTE7aTx0OysraSxyKz02KWVoKG8scixhLGVbaV0sZVtpKzFdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uIFN3KGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikmJmcoZVtuXSkmJmcoZVtuXS52YWx1ZXMpKXtsZXQgbz1lW25dO3Rbbl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpvLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6by5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpvLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gdH1mdW5jdGlvbiBmSShlLHQsbil7Zm9yKGxldCBvIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShvKSYmZyh0W29dKSYmZyh0W29dLnZhbHVlcykpe2xldCBhPXRbb107Zm9yKGxldCByPTA7cjxhLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7KytyKWVbb10udmFsdWVzLnB1c2goYS52YWx1ZXNbbiphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUrcl0pfX1mdW5jdGlvbiBscChlLHQpe2lmKGcodCkpe2xldCBuPXQudmFsdWVzLG89bi5sZW5ndGg7Zm9yKGxldCBhPTA7YTxvO2ErPTMpcy51bnBhY2sobixhLEhhKSwkLm11bHRpcGx5QnlQb2ludChlLEhhLEhhKSxzLnBhY2soSGEsbixhKX19ZnVuY3Rpb24gaHAoZSx0KXtpZihnKHQpKXtsZXQgbj10LnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKz0zKXMudW5wYWNrKG4sYSxIYSksSi5tdWx0aXBseUJ5VmVjdG9yKGUsSGEsSGEpLEhhPXMubm9ybWFsaXplKEhhLEhhKSxzLnBhY2soSGEsbixhKX19ZnVuY3Rpb24gdUkoZSx0KXtsZXQgbj1lLmxlbmd0aCxvPXt9LGE9ZVswXVt0XS5hdHRyaWJ1dGVzLHI7Zm9yKHIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHIpJiZnKGFbcl0pJiZnKGFbcl0udmFsdWVzKSl7bGV0IGk9YVtyXSxmPWkudmFsdWVzLmxlbmd0aCxkPSEwO2ZvcihsZXQgYz0xO2M8bjsrK2Mpe2xldCB1PWVbY11bdF0uYXR0cmlidXRlc1tyXTtpZighZyh1KXx8aS5jb21wb25lbnREYXRhdHlwZSE9PXUuY29tcG9uZW50RGF0YXR5cGV8fGkuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PXUuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8aS5ub3JtYWxpemUhPT11Lm5vcm1hbGl6ZSl7ZD0hMTticmVha31mKz11LnZhbHVlcy5sZW5ndGh9ZCYmKG9bcl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTppLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6aS5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTppLm5vcm1hbGl6ZSx2YWx1ZXM6bmUuY3JlYXRlVHlwZWRBcnJheShpLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIG1wKGUsdCl7bGV0IG49ZS5sZW5ndGgsbyxhLHIsaSxmPWVbMF0ubW9kZWxNYXRyaXgsZD1nKGVbMF1bdF0uaW5kaWNlcyksYz1lWzBdW3RdLnByaW1pdGl2ZVR5cGUsdT11SShlLHQpLGwsaCxtO2ZvcihvIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShvKSlmb3IobD11W29dLnZhbHVlcyxpPTAsYT0wO2E8bjsrK2EpZm9yKGg9ZVthXVt0XS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxtPWgubGVuZ3RoLHI9MDtyPG07KytyKWxbaSsrXT1oW3JdO2xldCBiO2lmKGQpe2xldCBfPTA7Zm9yKGE9MDthPG47KythKV8rPWVbYV1bdF0uaW5kaWNlcy5sZW5ndGg7bGV0IFQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IHZlKHthdHRyaWJ1dGVzOnUscHJpbWl0aXZlVHlwZTpVZS5QT0lOVFN9KSksdz1rZS5jcmVhdGVUeXBlZEFycmF5KFQsXyksUj0wLFM9MDtmb3IoYT0wO2E8bjsrK2Epe2xldCBDPWVbYV1bdF0uaW5kaWNlcyxJPUMubGVuZ3RoO2ZvcihpPTA7aTxJOysraSl3W1IrK109UytDW2ldO1MrPXZlLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKGVbYV1bdF0pfWI9d31sZXQgcD1uZXcgcyx5PTAsRTtmb3IoYT0wO2E8bjsrK2Epe2lmKEU9ZVthXVt0XS5ib3VuZGluZ1NwaGVyZSwhZyhFKSl7cD12b2lkIDA7YnJlYWt9cy5hZGQoRS5jZW50ZXIscCxwKX1pZihnKHApKWZvcihzLmRpdmlkZUJ5U2NhbGFyKHAsbixwKSxhPTA7YTxuOysrYSl7RT1lW2FdW3RdLmJvdW5kaW5nU3BoZXJlO2xldCBfPXMubWFnbml0dWRlKHMuc3VidHJhY3QoRS5jZW50ZXIscCxsSSkpK0UucmFkaXVzO18+eSYmKHk9Xyl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczp1LGluZGljZXM6YixwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6ZyhwKT9uZXcgZ2UocCx5KTp2b2lkIDB9KX1mdW5jdGlvbiBiSShlKXtpZihnKGUuaW5kaWNlcykpcmV0dXJuIGU7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCk7Zm9yKGxldCBvPTA7bzx0OysrbyluW29dPW87cmV0dXJuIGUuaW5kaWNlcz1uLGV9ZnVuY3Rpb24gcEkoZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsKHQtMikqMyk7blswXT0xLG5bMV09MCxuWzJdPTI7bGV0IG89Mztmb3IobGV0IGE9MzthPHQ7KythKW5bbysrXT1hLTEsbltvKytdPTAsbltvKytdPWE7cmV0dXJuIGUuaW5kaWNlcz1uLGUucHJpbWl0aXZlVHlwZT1VZS5UUklBTkdMRVMsZX1mdW5jdGlvbiBnSShlKXtsZXQgdD12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKSxuPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCwodC0yKSozKTtuWzBdPTAsblsxXT0xLG5bMl09Mix0PjMmJihuWzNdPTAsbls0XT0yLG5bNV09Myk7bGV0IG89Njtmb3IobGV0IGE9MzthPHQtMTthKz0yKW5bbysrXT1hLG5bbysrXT1hLTEsbltvKytdPWErMSxhKzI8dCYmKG5bbysrXT1hLG5bbysrXT1hKzEsbltvKytdPWErMik7cmV0dXJuIGUuaW5kaWNlcz1uLGUucHJpbWl0aXZlVHlwZT1VZS5UUklBTkdMRVMsZX1mdW5jdGlvbiBfSShlKXtpZihnKGUuaW5kaWNlcykpcmV0dXJuIGU7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCk7Zm9yKGxldCBvPTA7bzx0OysrbyluW29dPW87cmV0dXJuIGUuaW5kaWNlcz1uLGV9ZnVuY3Rpb24geUkoZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsKHQtMSkqMik7blswXT0wLG5bMV09MTtsZXQgbz0yO2ZvcihsZXQgYT0yO2E8dDsrK2EpbltvKytdPWEtMSxuW28rK109YTtyZXR1cm4gZS5pbmRpY2VzPW4sZS5wcmltaXRpdmVUeXBlPVVlLkxJTkVTLGV9ZnVuY3Rpb24gQUkoZSl7bGV0IHQ9dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSksbj1rZS5jcmVhdGVUeXBlZEFycmF5KHQsdCoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCBhPTI7YTx0OysrYSluW28rK109YS0xLG5bbysrXT1hO3JldHVybiBuW28rK109dC0xLG5bb109MCxlLmluZGljZXM9bixlLnByaW1pdGl2ZVR5cGU9VWUuTElORVMsZX1mdW5jdGlvbiB3SShlKXtzd2l0Y2goZS5wcmltaXRpdmVUeXBlKXtjYXNlIFVlLlRSSUFOR0xFX0ZBTjpyZXR1cm4gcEkoZSk7Y2FzZSBVZS5UUklBTkdMRV9TVFJJUDpyZXR1cm4gZ0koZSk7Y2FzZSBVZS5UUklBTkdMRVM6cmV0dXJuIGJJKGUpO2Nhc2UgVWUuTElORV9TVFJJUDpyZXR1cm4geUkoZSk7Y2FzZSBVZS5MSU5FX0xPT1A6cmV0dXJuIEFJKGUpO2Nhc2UgVWUuTElORVM6cmV0dXJuIF9JKGUpfXJldHVybiBlfWZ1bmN0aW9uIF9pKGUsdCl7TWF0aC5hYnMoZS55KTxrLkVQU0lMT042JiYodD9lLnk9LWsuRVBTSUxPTjY6ZS55PWsuRVBTSUxPTjYpfWZ1bmN0aW9uIEVJKGUsdCxuKXtpZihlLnkhPT0wJiZ0LnkhPT0wJiZuLnkhPT0wKXtfaShlLGUueTwwKSxfaSh0LHQueTwwKSxfaShuLG4ueTwwKTtyZXR1cm59bGV0IG89TWF0aC5hYnMoZS55KSxhPU1hdGguYWJzKHQueSkscj1NYXRoLmFicyhuLnkpLGk7bz5hP28+cj9pPWsuc2lnbihlLnkpOmk9ay5zaWduKG4ueSk6YT5yP2k9ay5zaWduKHQueSk6aT1rLnNpZ24obi55KTtsZXQgZj1pPDA7X2koZSxmKSxfaSh0LGYpLF9pKG4sZil9ZnVuY3Rpb24geGEoZSx0LG4sbyl7cy5hZGQoZSxzLm11bHRpcGx5QnlTY2FsYXIocy5zdWJ0cmFjdCh0LGUsUHcpLGUueS8oZS55LXQueSksUHcpLG4pLHMuY2xvbmUobixvKSxfaShuLCEwKSxfaShvLCExKX1mdW5jdGlvbiBUSShlLHQsbil7aWYoZS54Pj0wfHx0Lng+PTB8fG4ueD49MClyZXR1cm47RUkoZSx0LG4pO2xldCBvPWUueTwwLGE9dC55PDAscj1uLnk8MCxpPTA7aSs9bz8xOjAsaSs9YT8xOjAsaSs9cj8xOjA7bGV0IGY9YnAuaW5kaWNlcztpPT09MT8oZlsxXT0zLGZbMl09NCxmWzVdPTYsZls3XT02LGZbOF09NSxvPyh4YShlLHQsaWMsc2MpLHhhKGUsbixjYyxmYyksZlswXT0wLGZbM109MSxmWzRdPTIsZls2XT0xKTphPyh4YSh0LG4saWMsc2MpLHhhKHQsZSxjYyxmYyksZlswXT0xLGZbM109MixmWzRdPTAsZls2XT0yKTpyJiYoeGEobixlLGljLHNjKSx4YShuLHQsY2MsZmMpLGZbMF09MixmWzNdPTAsZls0XT0xLGZbNl09MCkpOmk9PT0yJiYoZlsyXT00LGZbNF09NCxmWzVdPTMsZls3XT01LGZbOF09NixvP2E/cnx8KHhhKG4sZSxpYyxzYykseGEobix0LGNjLGZjKSxmWzBdPTAsZlsxXT0xLGZbM109MCxmWzZdPTIpOih4YSh0LG4saWMsc2MpLHhhKHQsZSxjYyxmYyksZlswXT0yLGZbMV09MCxmWzNdPTIsZls2XT0xKTooeGEoZSx0LGljLHNjKSx4YShlLG4sY2MsZmMpLGZbMF09MSxmWzFdPTIsZlszXT0xLGZbNl09MCkpO2xldCBkPWJwLnBvc2l0aW9ucztyZXR1cm4gZFswXT1lLGRbMV09dCxkWzJdPW4sZC5sZW5ndGg9MywoaT09PTF8fGk9PT0yKSYmKGRbM109aWMsZFs0XT1jYyxkWzVdPXNjLGRbNl09ZmMsZC5sZW5ndGg9NyksYnB9ZnVuY3Rpb24ga3coZSx0KXtsZXQgbj1lLmF0dHJpYnV0ZXM7aWYobi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBhIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShhKSYmZyhuW2FdKSYmZyhuW2FdLnZhbHVlcykpe2xldCByPW5bYV07ci52YWx1ZXM9bmUuY3JlYXRlVHlwZWRBcnJheShyLmNvbXBvbmVudERhdGF0eXBlLHIudmFsdWVzKX1sZXQgbz12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKTtyZXR1cm4gZS5pbmRpY2VzPWtlLmNyZWF0ZVR5cGVkQXJyYXkobyxlLmluZGljZXMpLHQmJihlLmJvdW5kaW5nU3BoZXJlPWdlLmZyb21WZXJ0aWNlcyhuLnBvc2l0aW9uLnZhbHVlcykpLGV9ZnVuY3Rpb24gZHMoZSl7bGV0IHQ9ZS5hdHRyaWJ1dGVzLG49e307Zm9yKGxldCBvIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShvKSYmZyh0W29dKSYmZyh0W29dLnZhbHVlcykpe2xldCBhPXRbb107bltvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOmEuY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOmEubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bixpbmRpY2VzOltdLHByaW1pdGl2ZVR5cGU6ZS5wcmltaXRpdmVUeXBlfSl9ZnVuY3Rpb24geXAoZSx0LG4pe2xldCBvPWcoZS5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7dD1rdyh0LG8pLG49a3cobixvKSxnKG4pJiYhZyh0KT9lLmdlb21ldHJ5PW46IWcobikmJmcodCk/ZS5nZW9tZXRyeT10OihlLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9dCxlLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9bixlLmdlb21ldHJ5PXZvaWQgMCl9ZnVuY3Rpb24gQXAoZSx0KXtsZXQgbj1uZXcgZSxvPW5ldyBlLGE9bmV3IGU7cmV0dXJuIGZ1bmN0aW9uKHIsaSxmLGQsYyx1LGwsaCl7bGV0IG09ZS5mcm9tQXJyYXkoYyxyKnQsbiksYj1lLmZyb21BcnJheShjLGkqdCxvKSxwPWUuZnJvbUFycmF5KGMsZip0LGEpO2UubXVsdGlwbHlCeVNjYWxhcihtLGQueCxtKSxlLm11bHRpcGx5QnlTY2FsYXIoYixkLnksYiksZS5tdWx0aXBseUJ5U2NhbGFyKHAsZC56LHApO2xldCB5PWUuYWRkKG0sYixtKTtlLmFkZCh5LHAseSksaCYmZS5ub3JtYWxpemUoeSx5KSxlLnBhY2soeSx1LGwqdCl9fWZ1bmN0aW9uIFpsKGUsdCxuLG8sYSxyLGksZixkLGMsdSxsLGgsbSxiLHApe2lmKCFnKHIpJiYhZyhpKSYmIWcoZikmJiFnKGQpJiYhZyhjKSYmbT09PTApcmV0dXJuO2xldCB5PXMuZnJvbUFycmF5KGEsZSozLGtmKSxFPXMuZnJvbUFycmF5KGEsdCozLHBwKSxfPXMuZnJvbUFycmF5KGEsbiozLGdwKSxUPWR3KG8seSxFLF8sT0kpO2lmKGcoVCkpe2lmKGcocikmJiRsKGUsdCxuLFQscixsLm5vcm1hbC52YWx1ZXMscCwhMCksZyhjKSl7bGV0IHc9cy5mcm9tQXJyYXkoYyxlKjMsa2YpLFI9cy5mcm9tQXJyYXkoYyx0KjMscHApLFM9cy5mcm9tQXJyYXkoYyxuKjMsZ3ApO3MubXVsdGlwbHlCeVNjYWxhcih3LFQueCx3KSxzLm11bHRpcGx5QnlTY2FsYXIoUixULnksUikscy5tdWx0aXBseUJ5U2NhbGFyKFMsVC56LFMpO2xldCBDOyFzLmVxdWFscyh3LHMuWkVSTyl8fCFzLmVxdWFscyhSLHMuWkVSTyl8fCFzLmVxdWFscyhTLHMuWkVSTyk/KEM9cy5hZGQodyxSLHcpLHMuYWRkKEMsUyxDKSxzLm5vcm1hbGl6ZShDLEMpKTooQz1rZixDLng9MCxDLnk9MCxDLno9MCkscy5wYWNrKEMsbC5leHRydWRlRGlyZWN0aW9uLnZhbHVlcyxwKjMpfWlmKGcodSkmJnhJKGUsdCxuLFQsdSxsLmFwcGx5T2Zmc2V0LnZhbHVlcyxwKSxnKGkpJiYkbChlLHQsbixULGksbC50YW5nZW50LnZhbHVlcyxwLCEwKSxnKGYpJiYkbChlLHQsbixULGYsbC5iaXRhbmdlbnQudmFsdWVzLHAsITApLGcoZCkmJkx3KGUsdCxuLFQsZCxsLnN0LnZhbHVlcyxwKSxtPjApZm9yKGxldCB3PTA7dzxtO3crKyl7bGV0IFI9aFt3XTtTSShlLHQsbixULHAsYltSXSxsW1JdKX19fWZ1bmN0aW9uIFNJKGUsdCxuLG8sYSxyLGkpe2xldCBmPXIuY29tcG9uZW50c1BlckF0dHJpYnV0ZSxkPXIudmFsdWVzLGM9aS52YWx1ZXM7c3dpdGNoKGYpe2Nhc2UgNDpSSShlLHQsbixvLGQsYyxhLCExKTticmVhaztjYXNlIDM6JGwoZSx0LG4sbyxkLGMsYSwhMSk7YnJlYWs7Y2FzZSAyOkx3KGUsdCxuLG8sZCxjLGEsITEpO2JyZWFrO2RlZmF1bHQ6Y1thXT1kW2VdKm8ueCtkW3RdKm8ueStkW25dKm8uen19ZnVuY3Rpb24gdXIoZSx0LG4sbyxhLHIpe2xldCBpPWUucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zO2lmKGEhPT0tMSl7bGV0IGY9b1thXSxkPW5bZl07cmV0dXJuIGQ9PT0tMT8obltmXT1pLGUucG9zaXRpb24udmFsdWVzLnB1c2goci54LHIueSxyLnopLHQucHVzaChpKSxpKToodC5wdXNoKGQpLGQpfXJldHVybiBlLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHIueCxyLnksci56KSx0LnB1c2goaSksaX1mdW5jdGlvbiB2dyhlKXtsZXQgdD1lLmdlb21ldHJ5LG49dC5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMsYT1nKG4ubm9ybWFsKT9uLm5vcm1hbC52YWx1ZXM6dm9pZCAwLHI9ZyhuLmJpdGFuZ2VudCk/bi5iaXRhbmdlbnQudmFsdWVzOnZvaWQgMCxpPWcobi50YW5nZW50KT9uLnRhbmdlbnQudmFsdWVzOnZvaWQgMCxmPWcobi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLGQ9ZyhuLmV4dHJ1ZGVEaXJlY3Rpb24pP24uZXh0cnVkZURpcmVjdGlvbi52YWx1ZXM6dm9pZCAwLGM9ZyhuLmFwcGx5T2Zmc2V0KT9uLmFwcGx5T2Zmc2V0LnZhbHVlczp2b2lkIDAsdT10LmluZGljZXMsbD1bXTtmb3IobGV0IEMgaW4gbiluLmhhc093blByb3BlcnR5KEMpJiYhQ0lbQ10mJmcobltDXSkmJmwucHVzaChDKTtsZXQgaD1sLmxlbmd0aCxtPWRzKHQpLGI9ZHModCkscCx5LEUsXyxULHc9W107dy5sZW5ndGg9by5sZW5ndGgvMztsZXQgUj1bXTtmb3IoUi5sZW5ndGg9by5sZW5ndGgvMyxUPTA7VDx3Lmxlbmd0aDsrK1Qpd1tUXT0tMSxSW1RdPS0xO2xldCBTPXUubGVuZ3RoO2ZvcihUPTA7VDxTO1QrPTMpe2xldCBDPXVbVF0sST11W1QrMV0sTj11W1QrMl0sUD1zLmZyb21BcnJheShvLEMqMyksdj1zLmZyb21BcnJheShvLEkqMyksQT1zLmZyb21BcnJheShvLE4qMykseD1USShQLHYsQSk7aWYoZyh4KSYmeC5wb3NpdGlvbnMubGVuZ3RoPjMpe2xldCBNPXgucG9zaXRpb25zLEY9eC5pbmRpY2VzLFU9Ri5sZW5ndGg7Zm9yKGxldCB6PTA7ejxVOysreil7bGV0IEQ9Rlt6XSxHPU1bRF07Ry55PDA/KHA9Yi5hdHRyaWJ1dGVzLHk9Yi5pbmRpY2VzLEU9dyk6KHA9bS5hdHRyaWJ1dGVzLHk9bS5pbmRpY2VzLEU9UiksXz11cihwLHksRSx1LEQ8Mz9UK0Q6LTEsRyksWmwoQyxJLE4sRyxvLGEsaSxyLGYsZCxjLHAsbCxoLG4sXyl9fWVsc2UgZyh4KSYmKFA9eC5wb3NpdGlvbnNbMF0sdj14LnBvc2l0aW9uc1sxXSxBPXgucG9zaXRpb25zWzJdKSxQLnk8MD8ocD1iLmF0dHJpYnV0ZXMseT1iLmluZGljZXMsRT13KToocD1tLmF0dHJpYnV0ZXMseT1tLmluZGljZXMsRT1SKSxfPXVyKHAseSxFLHUsVCxQKSxabChDLEksTixQLG8sYSxpLHIsZixkLGMscCxsLGgsbixfKSxfPXVyKHAseSxFLHUsVCsxLHYpLFpsKEMsSSxOLHYsbyxhLGkscixmLGQsYyxwLGwsaCxuLF8pLF89dXIocCx5LEUsdSxUKzIsQSksWmwoQyxJLE4sQSxvLGEsaSxyLGYsZCxjLHAsbCxoLG4sXyl9eXAoZSxiLG0pfWZ1bmN0aW9uIGZzKGUsdCxuLG8sYSxyLGkpe2lmKCFnKGkpKXJldHVybjtsZXQgZj1zLmZyb21BcnJheShvLGUqMyxrZik7cy5lcXVhbHNFcHNpbG9uKGYsbixrLkVQU0lMT04xMCk/ci5hcHBseU9mZnNldC52YWx1ZXNbYV09aVtlXTpyLmFwcGx5T2Zmc2V0LnZhbHVlc1thXT1pW3RdfWZ1bmN0aW9uIEZ3KGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPWcobi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLHI9dC5pbmRpY2VzLGk9ZHModCksZj1kcyh0KSxkLGM9ci5sZW5ndGgsdT1bXTt1Lmxlbmd0aD1vLmxlbmd0aC8zO2xldCBsPVtdO2ZvcihsLmxlbmd0aD1vLmxlbmd0aC8zLGQ9MDtkPHUubGVuZ3RoOysrZCl1W2RdPS0xLGxbZF09LTE7Zm9yKGQ9MDtkPGM7ZCs9Mil7bGV0IGg9cltkXSxtPXJbZCsxXSxiPXMuZnJvbUFycmF5KG8saCozLGtmKSxwPXMuZnJvbUFycmF5KG8sbSozLHBwKSx5O01hdGguYWJzKGIueSk8ay5FUFNJTE9ONiYmKGIueTwwP2IueT0tay5FUFNJTE9ONjpiLnk9ay5FUFNJTE9ONiksTWF0aC5hYnMocC55KTxrLkVQU0lMT042JiYocC55PDA/cC55PS1rLkVQU0lMT042OnAueT1rLkVQU0lMT042KTtsZXQgRT1pLmF0dHJpYnV0ZXMsXz1pLmluZGljZXMsVD1sLHc9Zi5hdHRyaWJ1dGVzLFI9Zi5pbmRpY2VzLFM9dSxDPW5vLmxpbmVTZWdtZW50UGxhbmUoYixwLGp3LGdwKTtpZihnKEMpKXtsZXQgST1zLm11bHRpcGx5QnlTY2FsYXIocy5VTklUX1ksNSprLkVQU0lMT045LE1JKTtiLnk8MCYmKHMubmVnYXRlKEksSSksRT1mLmF0dHJpYnV0ZXMsXz1mLmluZGljZXMsVD11LHc9aS5hdHRyaWJ1dGVzLFI9aS5pbmRpY2VzLFM9bCk7bGV0IE49cy5hZGQoQyxJLE5JKTt5PXVyKEUsXyxULHIsZCxiKSxmcyhoLG0sYixvLHksRSxhKSx5PXVyKEUsXyxULHIsLTEsTiksZnMoaCxtLE4sbyx5LEUsYSkscy5uZWdhdGUoSSxJKSxzLmFkZChDLEksTikseT11cih3LFIsUyxyLC0xLE4pLGZzKGgsbSxOLG8seSx3LGEpLHk9dXIodyxSLFMscixkKzEscCksZnMoaCxtLHAsbyx5LHcsYSl9ZWxzZXtsZXQgSSxOLFA7Yi55PDA/KEk9Zi5hdHRyaWJ1dGVzLE49Zi5pbmRpY2VzLFA9dSk6KEk9aS5hdHRyaWJ1dGVzLE49aS5pbmRpY2VzLFA9bCkseT11cihJLE4sUCxyLGQsYiksZnMoaCxtLGIsbyx5LEksYSkseT11cihJLE4sUCxyLGQrMSxwKSxmcyhoLG0scCxvLHksSSxhKX19eXAoZSxmLGkpfWZ1bmN0aW9uIFV3KGUpe2xldCB0PWUuYXR0cmlidXRlcyxuPXQucG9zaXRpb24udmFsdWVzLG89dC5wcmV2UG9zaXRpb24udmFsdWVzLGE9dC5uZXh0UG9zaXRpb24udmFsdWVzLHI9bi5sZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2krPTMpe2xldCBmPXMudW5wYWNrKG4saSx6dyk7aWYoZi54PjApY29udGludWU7bGV0IGQ9cy51bnBhY2sobyxpLEd3KTsoZi55PDAmJmQueT4wfHxmLnk+MCYmZC55PDApJiYoaS0zPjA/KG9baV09bltpLTNdLG9baSsxXT1uW2ktMl0sb1tpKzJdPW5baS0xXSk6cy5wYWNrKGYsbyxpKSk7bGV0IGM9cy51bnBhY2soYSxpLF9wKTsoZi55PDAmJmMueT4wfHxmLnk+MCYmYy55PDApJiYoaSszPHI/KGFbaV09bltpKzNdLGFbaSsxXT1uW2krNF0sYVtpKzJdPW5baSs1XSk6cy5wYWNrKGYsYSxpKSl9fWZ1bmN0aW9uIERJKGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPW4ucHJldlBvc2l0aW9uLnZhbHVlcyxyPW4ubmV4dFBvc2l0aW9uLnZhbHVlcyxpPW4uZXhwYW5kQW5kV2lkdGgudmFsdWVzLGY9ZyhuLnN0KT9uLnN0LnZhbHVlczp2b2lkIDAsZD1nKG4uY29sb3IpP24uY29sb3IudmFsdWVzOnZvaWQgMCxjPWRzKHQpLHU9ZHModCksbCxoLG0sYj0hMSxwPW8ubGVuZ3RoLzM7Zm9yKGw9MDtsPHA7bCs9NCl7bGV0IHk9bCxFPWwrMixfPXMuZnJvbUFycmF5KG8seSozLHp3KSxUPXMuZnJvbUFycmF5KG8sRSozLEd3KTtpZihNYXRoLmFicyhfLnkpPFFsKWZvcihfLnk9UWwqKFQueTwwPy0xOjEpLG9bbCozKzFdPV8ueSxvWyhsKzEpKjMrMV09Xy55LGg9eSozO2g8eSozKzEyO2grPTMpYVtoXT1vW2wqM10sYVtoKzFdPW9bbCozKzFdLGFbaCsyXT1vW2wqMysyXTtpZihNYXRoLmFicyhULnkpPFFsKWZvcihULnk9UWwqKF8ueTwwPy0xOjEpLG9bKGwrMikqMysxXT1ULnksb1sobCszKSozKzFdPVQueSxoPXkqMztoPHkqMysxMjtoKz0zKXJbaF09b1sobCsyKSozXSxyW2grMV09b1sobCsyKSozKzFdLHJbaCsyXT1vWyhsKzIpKjMrMl07bGV0IHc9Yy5hdHRyaWJ1dGVzLFI9Yy5pbmRpY2VzLFM9dS5hdHRyaWJ1dGVzLEM9dS5pbmRpY2VzLEk9bm8ubGluZVNlZ21lbnRQbGFuZShfLFQsancsUEkpO2lmKGcoSSkpe2I9ITA7bGV0IE49cy5tdWx0aXBseUJ5U2NhbGFyKHMuVU5JVF9ZLEZJLGtJKTtfLnk8MCYmKHMubmVnYXRlKE4sTiksdz11LmF0dHJpYnV0ZXMsUj11LmluZGljZXMsUz1jLmF0dHJpYnV0ZXMsQz1jLmluZGljZXMpO2xldCBQPXMuYWRkKEksTix2SSk7dy5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueixfLngsXy55LF8ueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goYVt5KjNdLGFbeSozKzFdLGFbeSozKzJdKSx3LnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChhW3kqMyszXSxhW3kqMys0XSxhW3kqMys1XSksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goXy54LF8ueSxfLnosXy54LF8ueSxfLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSx3Lm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksdy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxzLm5lZ2F0ZShOLE4pLHMuYWRkKEksTixQKSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFQueCxULnksVC56LFQueCxULnksVC56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLFMucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goVC54LFQueSxULnosVC54LFQueSxULnopLFMubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbRSozXSxyW0UqMysxXSxyW0UqMysyXSksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2gocltFKjMrM10scltFKjMrNF0scltFKjMrNV0pO2xldCB2PVkuZnJvbUFycmF5KGkseSoyLER3KSxBPU1hdGguYWJzKHYueSk7dy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksdy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCB4PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEksXyxfcCkpO2lmKHgvPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KFQsXyxfcCkpLGcoZCkpe2xldCBNPWR0LmZyb21BcnJheShkLHkqNCxCdyksRj1kdC5mcm9tQXJyYXkoZCxFKjQsQncpLFU9ay5sZXJwKE0ueCxGLngseCksej1rLmxlcnAoTS55LEYueSx4KSxEPWsubGVycChNLnosRi56LHgpLEc9ay5sZXJwKE0udyxGLncseCk7Zm9yKGg9eSo0O2g8eSo0Kzg7KytoKXcuY29sb3IudmFsdWVzLnB1c2goZFtoXSk7Zm9yKHcuY29sb3IudmFsdWVzLnB1c2goVSx6LEQsRyksdy5jb2xvci52YWx1ZXMucHVzaChVLHosRCxHKSxTLmNvbG9yLnZhbHVlcy5wdXNoKFUseixELEcpLFMuY29sb3IudmFsdWVzLnB1c2goVSx6LEQsRyksaD1FKjQ7aDxFKjQrODsrK2gpUy5jb2xvci52YWx1ZXMucHVzaChkW2hdKX1pZihnKGYpKXtsZXQgTT1ZLmZyb21BcnJheShmLHkqMixEdyksRj1ZLmZyb21BcnJheShmLChsKzMpKjIsSUkpLFU9ay5sZXJwKE0ueCxGLngseCk7Zm9yKGg9eSoyO2g8eSoyKzQ7KytoKXcuc3QudmFsdWVzLnB1c2goZltoXSk7Zm9yKHcuc3QudmFsdWVzLnB1c2goVSxNLnkpLHcuc3QudmFsdWVzLnB1c2goVSxGLnkpLFMuc3QudmFsdWVzLnB1c2goVSxNLnkpLFMuc3QudmFsdWVzLnB1c2goVSxGLnkpLGg9RSoyO2g8RSoyKzQ7KytoKVMuc3QudmFsdWVzLnB1c2goZltoXSl9bT13LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFIucHVzaChtLG0rMixtKzEpLFIucHVzaChtKzEsbSsyLG0rMyksbT1TLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LEMucHVzaChtLG0rMixtKzEpLEMucHVzaChtKzEsbSsyLG0rMyl9ZWxzZXtsZXQgTixQO2ZvcihfLnk8MD8oTj11LmF0dHJpYnV0ZXMsUD11LmluZGljZXMpOihOPWMuYXR0cmlidXRlcyxQPWMuaW5kaWNlcyksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChULngsVC55LFQueiksTi5wb3NpdGlvbi52YWx1ZXMucHVzaChULngsVC55LFQueiksaD1sKjM7aDxsKjMrMTI7KytoKU4ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKGFbaF0pLE4ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbaF0pO2ZvcihoPWwqMjtoPGwqMis4OysraClOLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKGlbaF0pLGcoZikmJk4uc3QudmFsdWVzLnB1c2goZltoXSk7aWYoZyhkKSlmb3IoaD1sKjQ7aDxsKjQrMTY7KytoKU4uY29sb3IudmFsdWVzLnB1c2goZFtoXSk7bT1OLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFAucHVzaChtLG0rMixtKzEpLFAucHVzaChtKzEsbSsyLG0rMyl9fWImJihVdyh1KSxVdyhjKSkseXAoZSx1LGMpfXZhciBqbyxDdyxkSSx1cCxIYSxYbCxZbCxsSSxSYSxJZixjcyxzcyxoSSxNdyxtSSxQZixWYSxOdyxJdyxKbCxQdyxpYyxjYyxzYyxmYyxicCxSSSwkbCxMdyx4SSxrZixwcCxncCxPSSxDSSxqdyxNSSxOSSxEdyxJSSx6dyxHdyxfcCxQSSxrSSx2SSxCdyxGSSxRbCxIdCxscj1YKCgpPT57VXIoKTt1dygpO010KCk7anQoKTtJZSgpO2dhKCk7RXQoKTt2dCgpO3NlKCk7b3AoKTtrcigpOyR0KCk7ZW4oKTtHbCgpO25uKCk7WmkoKTtwaSgpO0dlKCk7RG4oKTtwbigpO2dpKCk7Y24oKTtPdygpO2pvPXt9O2pvLnRvV2lyZWZyYW1lPWZ1bmN0aW9uKGUpe2xldCB0PWUuaW5kaWNlcztpZihnKHQpKXtzd2l0Y2goZS5wcmltaXRpdmVUeXBlKXtjYXNlIFVlLlRSSUFOR0xFUzplLmluZGljZXM9aUkodCk7YnJlYWs7Y2FzZSBVZS5UUklBTkdMRV9TVFJJUDplLmluZGljZXM9Y0kodCk7YnJlYWs7Y2FzZSBVZS5UUklBTkdMRV9GQU46ZS5pbmRpY2VzPXNJKHQpO2JyZWFrfWUucHJpbWl0aXZlVHlwZT1VZS5MSU5FU31yZXR1cm4gZX07am8uY3JlYXRlTGluZVNlZ21lbnRzRm9yVmVjdG9ycz1mdW5jdGlvbihlLHQsbil7dD10Pz8ibm9ybWFsIixuPW4/PzFlNDtsZXQgbz1lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9ZS5hdHRyaWJ1dGVzW3RdLnZhbHVlcyxyPW8ubGVuZ3RoLGk9bmV3IEZsb2F0NjRBcnJheSgyKnIpLGY9MDtmb3IobGV0IHU9MDt1PHI7dSs9MylpW2YrK109b1t1XSxpW2YrK109b1t1KzFdLGlbZisrXT1vW3UrMl0saVtmKytdPW9bdV0rYVt1XSpuLGlbZisrXT1vW3UrMV0rYVt1KzFdKm4saVtmKytdPW9bdSsyXSthW3UrMl0qbjtsZXQgZCxjPWUuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGcoYykmJihkPW5ldyBnZShjLmNlbnRlcixjLnJhZGl1cytuKSksbmV3IHZlKHthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX0scHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpkfSl9O2pvLmNyZWF0ZUF0dHJpYnV0ZUxvY2F0aW9ucz1mdW5jdGlvbihlKXtsZXQgdD1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPWUuYXR0cmlidXRlcyxvPXt9LGE9MCxyLGk9dC5sZW5ndGg7Zm9yKHI9MDtyPGk7KytyKXtsZXQgZj10W3JdO2cobltmXSkmJihvW2ZdPWErKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIWcob1tmXSkmJihvW2ZdPWErKyk7cmV0dXJuIG99O2pvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD12ZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhlKSxuPWUuaW5kaWNlcztpZihnKG4pKXtsZXQgbz1uZXcgSW50MzJBcnJheSh0KTtmb3IobGV0IGg9MDtoPHQ7aCsrKW9baF09LTE7bGV0IGE9bixyPWEubGVuZ3RoLGk9a2UuY3JlYXRlVHlwZWRBcnJheSh0LHIpLGY9MCxkPTAsYz0wLHU7Zm9yKDtmPHI7KXU9b1thW2ZdXSx1IT09LTE/aVtkXT11Oih1PWFbZl0sb1t1XT1jLGlbZF09YywrK2MpLCsrZiwrK2Q7ZS5pbmRpY2VzPWk7bGV0IGw9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgaCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoaCkmJmcobFtoXSkmJmcobFtoXS52YWx1ZXMpKXtsZXQgbT1sW2hdLGI9bS52YWx1ZXMscD0wLHk9bS5jb21wb25lbnRzUGVyQXR0cmlidXRlLEU9bmUuY3JlYXRlVHlwZWRBcnJheShtLmNvbXBvbmVudERhdGF0eXBlLGMqeSk7Zm9yKDtwPHQ7KXtsZXQgXz1vW3BdO2lmKF8hPT0tMSlmb3IobGV0IFQ9MDtUPHk7VCsrKUVbeSpfK1RdPWJbeSpwK1RdOysrcH1tLnZhbHVlcz1FfX1yZXR1cm4gZX07am8ucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZT1mdW5jdGlvbihlLHQpe2xldCBuPWUuaW5kaWNlcztpZihlLnByaW1pdGl2ZVR5cGU9PT1VZS5UUklBTkdMRVMmJmcobikpe2xldCBvPW4ubGVuZ3RoLGE9MDtmb3IobGV0IHI9MDtyPG87cisrKW5bcl0+YSYmKGE9bltyXSk7ZS5pbmRpY2VzPXh3LnRpcHNpZnkoe2luZGljZXM6bixtYXhpbXVtSW5kZXg6YSxjYWNoZVNpemU6dH0pfXJldHVybiBlfTtqby5maXRUb1Vuc2lnbmVkU2hvcnRJbmRpY2VzPWZ1bmN0aW9uKGUpe2xldCB0PVtdLG49dmUuY29tcHV0ZU51bWJlck9mVmVydGljZXMoZSk7aWYoZyhlLmluZGljZXMpJiZuPj1rLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxhPVtdLHI9MCxpPVN3KGUuYXR0cmlidXRlcyksZj1lLmluZGljZXMsZD1mLmxlbmd0aCxjO2UucHJpbWl0aXZlVHlwZT09PVVlLlRSSUFOR0xFUz9jPTM6ZS5wcmltaXRpdmVUeXBlPT09VWUuTElORVM/Yz0yOmUucHJpbWl0aXZlVHlwZT09PVVlLlBPSU5UUyYmKGM9MSk7Zm9yKGxldCB1PTA7dTxkO3UrPWMpe2ZvcihsZXQgbD0wO2w8YzsrK2wpe2xldCBoPWZbdStsXSxtPW9baF07ZyhtKXx8KG09cisrLG9baF09bSxmSShpLGUuYXR0cmlidXRlcyxoKSksYS5wdXNoKG0pfXIrYz49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKHQucHVzaChuZXcgdmUoe2F0dHJpYnV0ZXM6aSxpbmRpY2VzOmEscHJpbWl0aXZlVHlwZTplLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6ZS5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOmUuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLGE9W10scj0wLGk9U3coZS5hdHRyaWJ1dGVzKSl9YS5sZW5ndGghPT0wJiZ0LnB1c2gobmV3IHZlKHthdHRyaWJ1dGVzOmksaW5kaWNlczphLHByaW1pdGl2ZVR5cGU6ZS5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmUuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjplLmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9O0N3PW5ldyBzLGRJPW5ldyByZTtqby5wcm9qZWN0VG8yRD1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUuYXR0cmlidXRlc1t0XTthPWcoYSk/YTpuZXcgaW87bGV0IGk9YS5lbGxpcHNvaWQsZj1yLnZhbHVlcyxkPW5ldyBGbG9hdDY0QXJyYXkoZi5sZW5ndGgpLGM9MDtmb3IobGV0IHU9MDt1PGYubGVuZ3RoO3UrPTMpe2xldCBsPXMuZnJvbUFycmF5KGYsdSxDdyksaD1pLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsZEkpLG09YS5wcm9qZWN0KGgsQ3cpO2RbYysrXT1tLngsZFtjKytdPW0ueSxkW2MrK109bS56fXJldHVybiBlLmF0dHJpYnV0ZXNbbl09cixlLmF0dHJpYnV0ZXNbb109bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSksZGVsZXRlIGUuYXR0cmlidXRlc1t0XSxlfTt1cD17aGlnaDowLGxvdzowfTtqby5lbmNvZGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9ZS5hdHRyaWJ1dGVzW3RdLHI9YS52YWx1ZXMsaT1yLmxlbmd0aCxmPW5ldyBGbG9hdDMyQXJyYXkoaSksZD1uZXcgRmxvYXQzMkFycmF5KGkpO2ZvcihsZXQgdT0wO3U8aTsrK3UpYWMuZW5jb2RlKHJbdV0sdXApLGZbdV09dXAuaGlnaCxkW3VdPXVwLmxvdztsZXQgYz1hLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7cmV0dXJuIGUuYXR0cmlidXRlc1tuXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6Zn0pLGUuYXR0cmlidXRlc1tvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6ZH0pLGRlbGV0ZSBlLmF0dHJpYnV0ZXNbdF0sZX07SGE9bmV3IHM7WGw9bmV3ICQsWWw9bmV3IEo7am8udHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe2xldCB0PWUubW9kZWxNYXRyaXg7aWYoJC5lcXVhbHModCwkLklERU5USVRZKSlyZXR1cm4gZTtsZXQgbj1lLmdlb21ldHJ5LmF0dHJpYnV0ZXM7bHAodCxuLnBvc2l0aW9uKSxscCh0LG4ucHJldlBvc2l0aW9uKSxscCh0LG4ubmV4dFBvc2l0aW9uKSwoZyhuLm5vcm1hbCl8fGcobi50YW5nZW50KXx8ZyhuLmJpdGFuZ2VudCkpJiYoJC5pbnZlcnNlKHQsWGwpLCQudHJhbnNwb3NlKFhsLFhsKSwkLmdldE1hdHJpeDMoWGwsWWwpLGhwKFlsLG4ubm9ybWFsKSxocChZbCxuLnRhbmdlbnQpLGhwKFlsLG4uYml0YW5nZW50KSk7bGV0IG89ZS5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gZyhvKSYmKGUuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmU9Z2UudHJhbnNmb3JtKG8sdCxvKSksZS5tb2RlbE1hdHJpeD0kLmNsb25lKCQuSURFTlRJVFkpLGV9O2xJPW5ldyBzO2pvLmNvbWJpbmVJbnN0YW5jZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9W10sbj1bXSxvPWUubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bzsrK3Ipe2xldCBpPWVbcl07ZyhpLmdlb21ldHJ5KT90LnB1c2goaSk6ZyhpLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZnKGkuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJm4ucHVzaChpKX1sZXQgYT1bXTtyZXR1cm4gdC5sZW5ndGg+MCYmYS5wdXNoKG1wKHQsImdlb21ldHJ5IikpLG4ubGVuZ3RoPjAmJihhLnB1c2gobXAobiwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxhLnB1c2gobXAobiwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSksYX07UmE9bmV3IHMsSWY9bmV3IHMsY3M9bmV3IHMsc3M9bmV3IHM7am8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbihlKXtsZXQgdD1lLmluZGljZXMsbj1lLmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxhPW4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoci8zKSxkPW5ldyBBcnJheShyKSxjO2ZvcihjPTA7YzxhO2MrKylpW2NdPXtpbmRleE9mZnNldDowLGNvdW50OjAsY3VycmVudENvdW50OjB9O2xldCB1PTA7Zm9yKGM9MDtjPHI7Yys9Myl7bGV0IGI9dFtjXSxwPXRbYysxXSx5PXRbYysyXSxFPWIqMyxfPXAqMyxUPXkqMztJZi54PW9bRV0sSWYueT1vW0UrMV0sSWYuej1vW0UrMl0sY3MueD1vW19dLGNzLnk9b1tfKzFdLGNzLno9b1tfKzJdLHNzLng9b1tUXSxzcy55PW9bVCsxXSxzcy56PW9bVCsyXSxpW2JdLmNvdW50KyssaVtwXS5jb3VudCsrLGlbeV0uY291bnQrKyxzLnN1YnRyYWN0KGNzLElmLGNzKSxzLnN1YnRyYWN0KHNzLElmLHNzKSxmW3VdPXMuY3Jvc3MoY3Msc3MsbmV3IHMpLHUrK31sZXQgbD0wO2ZvcihjPTA7YzxhO2MrKylpW2NdLmluZGV4T2Zmc2V0Kz1sLGwrPWlbY10uY291bnQ7dT0wO2xldCBoO2ZvcihjPTA7YzxyO2MrPTMpe2g9aVt0W2NdXTtsZXQgYj1oLmluZGV4T2Zmc2V0K2guY3VycmVudENvdW50O2RbYl09dSxoLmN1cnJlbnRDb3VudCsrLGg9aVt0W2MrMV1dLGI9aC5pbmRleE9mZnNldCtoLmN1cnJlbnRDb3VudCxkW2JdPXUsaC5jdXJyZW50Q291bnQrKyxoPWlbdFtjKzJdXSxiPWguaW5kZXhPZmZzZXQraC5jdXJyZW50Q291bnQsZFtiXT11LGguY3VycmVudENvdW50KyssdSsrfWxldCBtPW5ldyBGbG9hdDMyQXJyYXkoYSozKTtmb3IoYz0wO2M8YTtjKyspe2xldCBiPWMqMztpZihoPWlbY10scy5jbG9uZShzLlpFUk8sUmEpLGguY291bnQ+MCl7Zm9yKHU9MDt1PGguY291bnQ7dSsrKXMuYWRkKFJhLGZbZFtoLmluZGV4T2Zmc2V0K3VdXSxSYSk7cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxSYSxrLkVQU0lMT04xMCkmJnMuY2xvbmUoZltkW2guaW5kZXhPZmZzZXRdXSxSYSl9cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxSYSxrLkVQU0lMT04xMCkmJihSYS56PTEpLHMubm9ybWFsaXplKFJhLFJhKSxtW2JdPVJhLngsbVtiKzFdPVJhLnksbVtiKzJdPVJhLnp9cmV0dXJuIGUuYXR0cmlidXRlcy5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSxlfTtoST1uZXcgcyxNdz1uZXcgcyxtST1uZXcgcztqby5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudD1mdW5jdGlvbihlKXtsZXQgdD1lLmF0dHJpYnV0ZXMsbj1lLmluZGljZXMsbz1lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9ZS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMscj1lLmF0dHJpYnV0ZXMuc3QudmFsdWVzLGk9ZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxmPW4ubGVuZ3RoLGQ9bmV3IEFycmF5KGkqMyksYztmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWRbY109MDtsZXQgdSxsLGg7Zm9yKGM9MDtjPGY7Yys9Myl7bGV0IHA9bltjXSx5PW5bYysxXSxFPW5bYysyXTt1PXAqMyxsPXkqMyxoPUUqMztsZXQgXz1wKjIsVD15KjIsdz1FKjIsUj1vW3VdLFM9b1t1KzFdLEM9b1t1KzJdLEk9cltfXSxOPXJbXysxXSxQPXJbVCsxXS1OLHY9clt3KzFdLU4sQT0xLygocltUXS1JKSp2LShyW3ddLUkpKlApLHg9KHYqKG9bbF0tUiktUCoob1toXS1SKSkqQSxNPSh2KihvW2wrMV0tUyktUCoob1toKzFdLVMpKSpBLEY9KHYqKG9bbCsyXS1DKS1QKihvW2grMl0tQykpKkE7ZFt1XSs9eCxkW3UrMV0rPU0sZFt1KzJdKz1GLGRbbF0rPXgsZFtsKzFdKz1NLGRbbCsyXSs9RixkW2hdKz14LGRbaCsxXSs9TSxkW2grMl0rPUZ9bGV0IG09bmV3IEZsb2F0MzJBcnJheShpKjMpLGI9bmV3IEZsb2F0MzJBcnJheShpKjMpO2ZvcihjPTA7YzxpO2MrKyl7dT1jKjMsbD11KzEsaD11KzI7bGV0IHA9cy5mcm9tQXJyYXkoYSx1LGhJKSx5PXMuZnJvbUFycmF5KGQsdSxtSSksRT1zLmRvdChwLHkpO3MubXVsdGlwbHlCeVNjYWxhcihwLEUsTXcpLHMubm9ybWFsaXplKHMuc3VidHJhY3QoeSxNdyx5KSx5KSxtW3VdPXkueCxtW2xdPXkueSxtW2hdPXkueixzLm5vcm1hbGl6ZShzLmNyb3NzKHAseSx5KSx5KSxiW3VdPXkueCxiW2xdPXkueSxiW2hdPXkuen1yZXR1cm4gZS5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSxlLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksZX07UGY9bmV3IFksVmE9bmV3IHMsTnc9bmV3IHMsSXc9bmV3IHMsSmw9bmV3IFk7am8uY29tcHJlc3NWZXJ0aWNlcz1mdW5jdGlvbihlKXtsZXQgdD1lLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYoZyh0KSl7bGV0IFM9dC52YWx1ZXM7bz1TLmxlbmd0aC8zO2xldCBDPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxJPTA7Zm9yKG49MDtuPG87KytuKXtpZihzLmZyb21BcnJheShTLG4qMyxWYSkscy5lcXVhbHMoVmEscy5aRVJPKSl7SSs9Mjtjb250aW51ZX1KbD1WdC5vY3RFbmNvZGVJblJhbmdlKFZhLDY1NTM1LEpsKSxDW0krK109SmwueCxDW0krK109SmwueX1yZXR1cm4gZS5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpDfSksZGVsZXRlIGUuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLGV9bGV0IGE9ZS5hdHRyaWJ1dGVzLm5vcm1hbCxyPWUuYXR0cmlidXRlcy5zdCxpPWcoYSksZj1nKHIpO2lmKCFpJiYhZilyZXR1cm4gZTtsZXQgZD1lLmF0dHJpYnV0ZXMudGFuZ2VudCxjPWUuYXR0cmlidXRlcy5iaXRhbmdlbnQsdT1nKGQpLGw9ZyhjKSxoLG0sYixwO2kmJihoPWEudmFsdWVzKSxmJiYobT1yLnZhbHVlcyksdSYmKGI9ZC52YWx1ZXMpLGwmJihwPWMudmFsdWVzKSxvPShpP2gubGVuZ3RoOm0ubGVuZ3RoKS8oaT8zOjIpO2xldCBfPW8sVD1mJiZpPzI6MTtUKz11fHxsPzE6MCxfKj1UO2xldCB3PW5ldyBGbG9hdDMyQXJyYXkoXyksUj0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKFkuZnJvbUFycmF5KG0sbioyLFBmKSx3W1IrK109VnQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUGYpKTtsZXQgUz1uKjM7aSYmZyhiKSYmZyhwKT8ocy5mcm9tQXJyYXkoaCxTLFZhKSxzLmZyb21BcnJheShiLFMsTncpLHMuZnJvbUFycmF5KHAsUyxJdyksVnQub2N0UGFjayhWYSxOdyxJdyxQZiksd1tSKytdPVBmLngsd1tSKytdPVBmLnkpOihpJiYocy5mcm9tQXJyYXkoaCxTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSx1JiYocy5mcm9tQXJyYXkoYixTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSxsJiYocy5mcm9tQXJyYXkocCxTLFZhKSx3W1IrK109VnQub2N0RW5jb2RlRmxvYXQoVmEpKSl9cmV0dXJuIGUuYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6VCx2YWx1ZXM6d30pLGkmJmRlbGV0ZSBlLmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSBlLmF0dHJpYnV0ZXMuc3QsbCYmZGVsZXRlIGUuYXR0cmlidXRlcy5iaXRhbmdlbnQsdSYmZGVsZXRlIGUuYXR0cmlidXRlcy50YW5nZW50LGV9O1B3PW5ldyBzO2ljPW5ldyBzLGNjPW5ldyBzLHNjPW5ldyBzLGZjPW5ldyBzLGJwPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDkpfTtSST1BcChkdCw0KSwkbD1BcChzLDMpLEx3PUFwKFksMikseEk9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9YVtlXSpvLngsZD1hW3RdKm8ueSxjPWFbbl0qby56O3JbaV09ZitkK2M+ay5FUFNJTE9ONj8xOjB9LGtmPW5ldyBzLHBwPW5ldyBzLGdwPW5ldyBzLE9JPW5ldyBzO0NJPXtwb3NpdGlvbjohMCxub3JtYWw6ITAsYml0YW5nZW50OiEwLHRhbmdlbnQ6ITAsc3Q6ITAsZXh0cnVkZURpcmVjdGlvbjohMCxhcHBseU9mZnNldDohMH07anc9c24uZnJvbVBvaW50Tm9ybWFsKHMuWkVSTyxzLlVOSVRfWSksTUk9bmV3IHMsTkk9bmV3IHM7RHc9bmV3IFksSUk9bmV3IFksenc9bmV3IHMsR3c9bmV3IHMsX3A9bmV3IHMsUEk9bmV3IHMsa0k9bmV3IHMsdkk9bmV3IHMsQnc9bmV3IGR0O0ZJPTUqay5FUFNJTE9OOSxRbD1rLkVQU0lMT042O2pvLnNwbGl0TG9uZ2l0dWRlPWZ1bmN0aW9uKGUpe2xldCB0PWUuZ2VvbWV0cnksbj10LmJvdW5kaW5nU3BoZXJlO2lmKGcobikmJihuLmNlbnRlci54LW4ucmFkaXVzPjB8fGdlLmludGVyc2VjdFBsYW5lKG4sc24uT1JJR0lOX1pYX1BMQU5FKSE9PVNuLklOVEVSU0VDVElORykpcmV0dXJuIGU7aWYodC5nZW9tZXRyeVR5cGUhPT1Cci5OT05FKXN3aXRjaCh0Lmdlb21ldHJ5VHlwZSl7Y2FzZSBCci5QT0xZTElORVM6REkoZSk7YnJlYWs7Y2FzZSBCci5UUklBTkdMRVM6dncoZSk7YnJlYWs7Y2FzZSBCci5MSU5FUzpGdyhlKTticmVha31lbHNlIHdJKHQpLHQucHJpbWl0aXZlVHlwZT09PVVlLlRSSUFOR0xFUz92dyhlKTp0LnByaW1pdGl2ZVR5cGU9PT1VZS5MSU5FUyYmRncoZSk7cmV0dXJuIGV9O0h0PWpvfSk7ZnVuY3Rpb24gdmYoZSx0LG4pe2U9ZT8/MCx0PXQ/PzAsbj1uPz8wLHRoaXMudmFsdWU9bmV3IEZsb2F0MzJBcnJheShbZSx0LG5dKX12YXIgVncsSHc9WCgoKT0+e3Z0KCk7c2UoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2Zi5wcm90b3R5cGUse2NvbXBvbmVudERhdGF0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmUuRkxPQVR9fSxjb21wb25lbnRzUGVyQXR0cmlidXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gM319LG5vcm1hbGl6ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fX0pO3ZmLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdmYoZS54LGUueSxlLnopfTt2Zi50b1ZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCl8fCh0PW5ldyBGbG9hdDMyQXJyYXkoW2UueCxlLnksZS56XSkpLHRbMF09ZS54LHRbMV09ZS55LHRbMl09ZS56LHR9O1Z3PXZmfSk7ZnVuY3Rpb24gJG8oZSl7dGhpcy5fZWxsaXBzb2lkPWU/P3EuV0dTODQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIFJuLHlpPVgoKCk9PntJZSgpO0V0KCk7c2UoKTtxZSgpO0dlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJG8ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pOyRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4oTWF0aC5leHAoLWUpKX07JG8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZT1mdW5jdGlvbihlKXtlPiRvLk1heGltdW1MYXRpdHVkZT9lPSRvLk1heGltdW1MYXRpdHVkZTplPC0kby5NYXhpbXVtTGF0aXR1ZGUmJihlPS0kby5NYXhpbXVtTGF0aXR1ZGUpO2xldCB0PU1hdGguc2luKGUpO3JldHVybiAuNSpNYXRoLmxvZygoMSt0KS8oMS10KSl9OyRvLk1heGltdW1MYXRpdHVkZT0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKE1hdGguUEkpOyRvLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPWUubG9uZ2l0dWRlKm4sYT0kby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGUubGF0aXR1ZGUpKm4scj1lLmhlaWdodDtyZXR1cm4gZyh0KT8odC54PW8sdC55PWEsdC56PXIsdCk6bmV3IHMobyxhLHIpfTskby5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fb25lT3ZlclNlbWltYWpvckF4aXMsbz1lLngqbixhPSRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGUoZS55Km4pLHI9ZS56O3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1vLHQubGF0aXR1ZGU9YSx0LmhlaWdodD1yLHQpOm5ldyByZShvLGEscil9O1JuPSRvfSk7ZnVuY3Rpb24gQkkoZSx0LG4pe2xldCBvPSFuLGE9ZS5sZW5ndGgscjtpZighbyYmYT4xKXtsZXQgaT1lWzBdLm1vZGVsTWF0cml4O2ZvcihyPTE7cjxhOysrcilpZighJC5lcXVhbHMoaSxlW3JdLm1vZGVsTWF0cml4KSl7bz0hMDticmVha319aWYobylmb3Iocj0wO3I8YTsrK3IpZyhlW3JdLmdlb21ldHJ5KSYmSHQudHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzKGVbcl0pO2Vsc2UgJC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKHQsZVswXS5tb2RlbE1hdHJpeCx0KX1mdW5jdGlvbiB3cChlLHQpe2xldCBuPWUuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24sYT1vLnZhbHVlcy5sZW5ndGgvby5jb21wb25lbnRzUGVyQXR0cmlidXRlO24uYmF0Y2hJZD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheShhKX0pO2xldCByPW4uYmF0Y2hJZC52YWx1ZXM7Zm9yKGxldCBpPTA7aTxhOysraSlyW2ldPXR9ZnVuY3Rpb24gVUkoZSl7bGV0IHQ9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjx0Oysrbil7bGV0IG89ZVtuXTtnKG8uZ2VvbWV0cnkpP3dwKG8uZ2VvbWV0cnksbik6ZyhvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZnKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJih3cChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnksbiksd3Aoby5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pKX19ZnVuY3Rpb24gTEkoZSl7bGV0IHQ9ZS5pbnN0YW5jZXMsbj1lLnByb2plY3Rpb24sbz1lLmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsYT1lLnNjZW5lM0RPbmx5LHI9ZS52ZXJ0ZXhDYWNoZU9wdGltaXplLGk9ZS5jb21wcmVzc1ZlcnRpY2VzLGY9ZS5tb2RlbE1hdHJpeCxkLGMsdSxsPXQubGVuZ3RoO2ZvcihkPTA7ZDxsOysrZClpZihnKHRbZF0uZ2VvbWV0cnkpKXt1PXRbZF0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZTticmVha31pZihCSSh0LGYsYSksIWEpZm9yKGQ9MDtkPGw7KytkKWcodFtkXS5nZW9tZXRyeSkmJkh0LnNwbGl0TG9uZ2l0dWRlKHRbZF0pO2lmKFVJKHQpLHIpZm9yKGQ9MDtkPGw7KytkKXtsZXQgbT10W2RdO2cobS5nZW9tZXRyeSk/KEh0LnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUobS5nZW9tZXRyeSksSHQucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0uZ2VvbWV0cnkpKTpnKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJmcobS5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmKEh0LnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUobS53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxIdC5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUobS53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxIdC5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSksSHQucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkpfWxldCBoPUh0LmNvbWJpbmVJbnN0YW5jZXModCk7Zm9yKGw9aC5sZW5ndGgsZD0wO2Q8bDsrK2Qpe2M9aFtkXTtsZXQgbT1jLmF0dHJpYnV0ZXM7aWYoYSlmb3IobGV0IGIgaW4gbSltLmhhc093blByb3BlcnR5KGIpJiZtW2JdLmNvbXBvbmVudERhdGF0eXBlPT09bmUuRE9VQkxFJiZIdC5lbmNvZGVBdHRyaWJ1dGUoYyxiLGAke2J9M0RIaWdoYCxgJHtifTNETG93YCk7ZWxzZSBmb3IobGV0IGIgaW4gbSlpZihtLmhhc093blByb3BlcnR5KGIpJiZtW2JdLmNvbXBvbmVudERhdGF0eXBlPT09bmUuRE9VQkxFKXtsZXQgcD1gJHtifTNEYCx5PWAke2J9MkRgO0h0LnByb2plY3RUbzJEKGMsYixwLHksbiksZyhjLmJvdW5kaW5nU3BoZXJlKSYmYj09PSJwb3NpdGlvbiImJihjLmJvdW5kaW5nU3BoZXJlQ1Y9Z2UuZnJvbVZlcnRpY2VzKGMuYXR0cmlidXRlcy5wb3NpdGlvbjJELnZhbHVlcykpLEh0LmVuY29kZUF0dHJpYnV0ZShjLHAsYCR7cH1IaWdoYCxgJHtwfUxvd2ApLEh0LmVuY29kZUF0dHJpYnV0ZShjLHksYCR7eX1IaWdoYCxgJHt5fUxvd2ApfWkmJkh0LmNvbXByZXNzVmVydGljZXMoYyl9aWYoIW8pe2xldCBtPVtdO2ZvcihsPWgubGVuZ3RoLGQ9MDtkPGw7KytkKWM9aFtkXSxtPW0uY29uY2F0KEh0LmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXMoYykpO2g9bX1yZXR1cm4gaH1mdW5jdGlvbiBFcChlLHQsbixvKXtsZXQgYSxyLGksZj1vLmxlbmd0aC0xO2lmKGY+PTApe2xldCBjPW9bZl07YT1jLm9mZnNldCtjLmNvdW50LGk9Yy5pbmRleCxyPW5baV0uaW5kaWNlcy5sZW5ndGh9ZWxzZSBhPTAsaT0wLHI9bltpXS5pbmRpY2VzLmxlbmd0aDtsZXQgZD1lLmxlbmd0aDtmb3IobGV0IGM9MDtjPGQ7KytjKXtsZXQgbD1lW2NdW3RdO2lmKCFnKGwpKWNvbnRpbnVlO2xldCBoPWwuaW5kaWNlcy5sZW5ndGg7YStoPnImJihhPTAscj1uWysraV0uaW5kaWNlcy5sZW5ndGgpLG8ucHVzaCh7aW5kZXg6aSxvZmZzZXQ6YSxjb3VudDpofSksYSs9aH19ZnVuY3Rpb24gakkoZSx0KXtsZXQgbj1bXTtyZXR1cm4gRXAoZSwiZ2VvbWV0cnkiLHQsbiksRXAoZSwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIsdCxuKSxFcChlLCJlYXN0SGVtaXNwaGVyZUdlb21ldHJ5Iix0LG4pLG59ZnVuY3Rpb24gekkoZSx0KXtsZXQgbj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShvKSl7bGV0IGE9bltvXTtnKGEpJiZnKGEudmFsdWVzKSYmdC5wdXNoKGEudmFsdWVzLmJ1ZmZlcil9ZyhlLmluZGljZXMpJiZ0LnB1c2goZS5pbmRpY2VzLmJ1ZmZlcil9ZnVuY3Rpb24gR0koZSx0KXtsZXQgbj1lLmxlbmd0aDtmb3IobGV0IG89MDtvPG47KytvKXpJKGVbb10sdCl9ZnVuY3Rpb24gVkkoZSl7bGV0IHQ9MSxuPWUubGVuZ3RoO2ZvcihsZXQgbz0wO288bjtvKyspe2xldCBhPWVbb107aWYoKyt0LCFnKGEpKWNvbnRpbnVlO2xldCByPWEuYXR0cmlidXRlczt0Kz03KzIqZ2UucGFja2VkTGVuZ3RoKyhnKGEuaW5kaWNlcyk/YS5pbmRpY2VzLmxlbmd0aDowKTtmb3IobGV0IGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpJiZnKHJbaV0pKXtsZXQgZj1yW2ldO3QrPTUrZi52YWx1ZXMubGVuZ3RofX1yZXR1cm4gdH1mdW5jdGlvbiBISShlLHQpe2xldCBuPWUubGVuZ3RoLG89bmV3IEZsb2F0NjRBcnJheSgxK24qMTkpLGE9MDtvW2ErK109bjtmb3IobGV0IHI9MDtyPG47cisrKXtsZXQgaT1lW3JdO2lmKCQucGFjayhpLm1vZGVsTWF0cml4LG8sYSksYSs9JC5wYWNrZWRMZW5ndGgsZyhpLmF0dHJpYnV0ZXMpJiZnKGkuYXR0cmlidXRlcy5vZmZzZXQpKXtsZXQgZj1pLmF0dHJpYnV0ZXMub2Zmc2V0LnZhbHVlO29bYV09ZlswXSxvW2ErMV09ZlsxXSxvW2ErMl09ZlsyXX1hKz0zfXJldHVybiB0LnB1c2goby5idWZmZXIpLG99ZnVuY3Rpb24gS0koZSl7bGV0IHQ9ZSxuPW5ldyBBcnJheSh0WzBdKSxvPTAsYT0xO2Zvcig7YTx0Lmxlbmd0aDspe2xldCByPSQudW5wYWNrKHQsYSksaTthKz0kLnBhY2tlZExlbmd0aCxnKHRbYV0pJiYoaT17b2Zmc2V0Om5ldyBWdyh0W2FdLHRbYSsxXSx0W2ErMl0pfSksYSs9MyxuW28rK109e21vZGVsTWF0cml4OnIsYXR0cmlidXRlczppfX1yZXR1cm4gbn1mdW5jdGlvbiBLdyhlKXtsZXQgdD1lLmxlbmd0aCxuPTErKGdlLnBhY2tlZExlbmd0aCsxKSp0LG89bmV3IEZsb2F0MzJBcnJheShuKSxhPTA7b1thKytdPXQ7Zm9yKGxldCByPTA7cjx0Oysrcil7bGV0IGk9ZVtyXTtnKGkpPyhvW2ErK109MSxnZS5wYWNrKGVbcl0sbyxhKSk6b1thKytdPTAsYSs9Z2UucGFja2VkTGVuZ3RofXJldHVybiBvfWZ1bmN0aW9uIHF3KGUpe2xldCB0PW5ldyBBcnJheShlWzBdKSxuPTAsbz0xO2Zvcig7bzxlLmxlbmd0aDspZVtvKytdPT09MSYmKHRbbl09Z2UudW5wYWNrKGUsbykpLCsrbixvKz1nZS5wYWNrZWRMZW5ndGg7cmV0dXJuIHR9dmFyIGpyLHVzLFRwPVgoKCk9PntNdCgpO3Z0KCk7c2UoKTtxZSgpO2tyKCk7JHQoKTtlbigpO3VuKCk7bHIoKTtubigpO3BuKCk7SHcoKTt5aSgpO2pyPXt9O2pyLmNvbWJpbmVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdCxuLG89ZS5pbnN0YW5jZXMsYT1vLmxlbmd0aCxyLGksZj0hMTthPjAmJih0PUxJKGUpLHQubGVuZ3RoPjAmJihuPUh0LmNyZWF0ZUF0dHJpYnV0ZUxvY2F0aW9ucyh0WzBdKSxlLmNyZWF0ZVBpY2tPZmZzZXRzJiYocj1qSShvLHQpKSksZyhvWzBdLmF0dHJpYnV0ZXMpJiZnKG9bMF0uYXR0cmlidXRlcy5vZmZzZXQpJiYoaT1uZXcgQXJyYXkoYSksZj0hMCkpO2xldCBkPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKTtmb3IobGV0IHU9MDt1PGE7Kyt1KXtsZXQgbD1vW3VdLGg9bC5nZW9tZXRyeTtnKGgpJiYoZFt1XT1oLmJvdW5kaW5nU3BoZXJlLGNbdV09aC5ib3VuZGluZ1NwaGVyZUNWLGYmJihpW3VdPWwuZ2VvbWV0cnkub2Zmc2V0QXR0cmlidXRlKSk7bGV0IG09bC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LGI9bC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5O2cobSkmJmcoYikmJihnKG0uYm91bmRpbmdTcGhlcmUpJiZnKGIuYm91bmRpbmdTcGhlcmUpJiYoZFt1XT1nZS51bmlvbihtLmJvdW5kaW5nU3BoZXJlLGIuYm91bmRpbmdTcGhlcmUpKSxnKG0uYm91bmRpbmdTcGhlcmVDVikmJmcoYi5ib3VuZGluZ1NwaGVyZUNWKSYmKGNbdV09Z2UudW5pb24obS5ib3VuZGluZ1NwaGVyZUNWLGIuYm91bmRpbmdTcGhlcmVDVikpKX1yZXR1cm57Z2VvbWV0cmllczp0LG1vZGVsTWF0cml4OmUubW9kZWxNYXRyaXgsYXR0cmlidXRlTG9jYXRpb25zOm4scGlja09mZnNldHM6cixvZmZzZXRJbnN0YW5jZUV4dGVuZDppLGJvdW5kaW5nU3BoZXJlczpkLGJvdW5kaW5nU3BoZXJlc0NWOmN9fTtqci5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUsdCl7bGV0IG49bmV3IEZsb2F0NjRBcnJheShWSShlKSksbz1bXSxhPXt9LHI9ZS5sZW5ndGgsaT0wO25baSsrXT1yO2ZvcihsZXQgZj0wO2Y8cjtmKyspe2xldCBkPWVbZl0sYz1nKGQpO2lmKG5baSsrXT1jPzE6MCwhYyljb250aW51ZTtuW2krK109ZC5wcmltaXRpdmVUeXBlLG5baSsrXT1kLmdlb21ldHJ5VHlwZSxuW2krK109ZC5vZmZzZXRBdHRyaWJ1dGU/Py0xO2xldCB1PWcoZC5ib3VuZGluZ1NwaGVyZSk/MTowO25baSsrXT11LHUmJmdlLnBhY2soZC5ib3VuZGluZ1NwaGVyZSxuLGkpLGkrPWdlLnBhY2tlZExlbmd0aDtsZXQgbD1nKGQuYm91bmRpbmdTcGhlcmVDVik/MTowO25baSsrXT1sLGwmJmdlLnBhY2soZC5ib3VuZGluZ1NwaGVyZUNWLG4saSksaSs9Z2UucGFja2VkTGVuZ3RoO2xldCBoPWQuYXR0cmlidXRlcyxtPVtdO2ZvcihsZXQgcCBpbiBoKWguaGFzT3duUHJvcGVydHkocCkmJmcoaFtwXSkmJihtLnB1c2gocCksZyhhW3BdKXx8KGFbcF09by5sZW5ndGgsby5wdXNoKHApKSk7bltpKytdPW0ubGVuZ3RoO2ZvcihsZXQgcD0wO3A8bS5sZW5ndGg7cCsrKXtsZXQgeT1tW3BdLEU9aFt5XTtuW2krK109YVt5XSxuW2krK109RS5jb21wb25lbnREYXRhdHlwZSxuW2krK109RS5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5baSsrXT1FLm5vcm1hbGl6ZT8xOjAsbltpKytdPUUudmFsdWVzLmxlbmd0aCxuLnNldChFLnZhbHVlcyxpKSxpKz1FLnZhbHVlcy5sZW5ndGh9bGV0IGI9ZyhkLmluZGljZXMpP2QuaW5kaWNlcy5sZW5ndGg6MDtuW2krK109YixiPjAmJihuLnNldChkLmluZGljZXMsaSksaSs9Yil9cmV0dXJuIHQucHVzaChuLmJ1ZmZlcikse3N0cmluZ1RhYmxlOm8scGFja2VkRGF0YTpufX07anIudW5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUpe2xldCB0PWUuc3RyaW5nVGFibGUsbj1lLnBhY2tlZERhdGEsbyxhPW5ldyBBcnJheShuWzBdKSxyPTAsaT0xO2Zvcig7aTxuLmxlbmd0aDspe2lmKCEobltpKytdPT09MSkpe2FbcisrXT12b2lkIDA7Y29udGludWV9bGV0IGQ9bltpKytdLGM9bltpKytdLHU9bltpKytdO3U9PT0tMSYmKHU9dm9pZCAwKTtsZXQgbCxoO25baSsrXT09PTEmJihsPWdlLnVucGFjayhuLGkpKSxpKz1nZS5wYWNrZWRMZW5ndGgsbltpKytdPT09MSYmKGg9Z2UudW5wYWNrKG4saSkpLGkrPWdlLnBhY2tlZExlbmd0aDtsZXQgcCx5LEUsXz1uZXcgbnQsVD1uW2krK107Zm9yKG89MDtvPFQ7bysrKXtsZXQgUj10W25baSsrXV0sUz1uW2krK107RT1uW2krK107bGV0IEM9bltpKytdIT09MDtwPW5baSsrXSx5PW5lLmNyZWF0ZVR5cGVkQXJyYXkoUyxwKTtmb3IobGV0IEk9MDtJPHA7SSsrKXlbSV09bltpKytdO19bUl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpTLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6RSxub3JtYWxpemU6Qyx2YWx1ZXM6eX0pfWxldCB3O2lmKHA9bltpKytdLHA+MCl7bGV0IFI9eS5sZW5ndGgvRTtmb3Iodz1rZS5jcmVhdGVUeXBlZEFycmF5KFIscCksbz0wO288cDtvKyspd1tvXT1uW2krK119YVtyKytdPW5ldyB2ZSh7cHJpbWl0aXZlVHlwZTpkLGdlb21ldHJ5VHlwZTpjLGJvdW5kaW5nU3BoZXJlOmwsYm91bmRpbmdTcGhlcmVDVjpoLGluZGljZXM6dyxhdHRyaWJ1dGVzOl8sb2Zmc2V0QXR0cmlidXRlOnV9KX1yZXR1cm4gYX07anIucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxvPW4ubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKyspdC5wdXNoKG5bYV0ucGFja2VkRGF0YS5idWZmZXIpO3JldHVybntjcmVhdGVHZW9tZXRyeVJlc3VsdHM6ZS5jcmVhdGVHZW9tZXRyeVJlc3VsdHMscGFja2VkSW5zdGFuY2VzOkhJKGUuaW5zdGFuY2VzLHQpLGVsbGlwc29pZDplLmVsbGlwc29pZCxpc0dlb2dyYXBoaWM6ZS5wcm9qZWN0aW9uIGluc3RhbmNlb2YgaW8sZWxlbWVudEluZGV4VWludFN1cHBvcnRlZDplLmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsc2NlbmUzRE9ubHk6ZS5zY2VuZTNET25seSx2ZXJ0ZXhDYWNoZU9wdGltaXplOmUudmVydGV4Q2FjaGVPcHRpbWl6ZSxjb21wcmVzc1ZlcnRpY2VzOmUuY29tcHJlc3NWZXJ0aWNlcyxtb2RlbE1hdHJpeDplLm1vZGVsTWF0cml4LGNyZWF0ZVBpY2tPZmZzZXRzOmUuY3JlYXRlUGlja09mZnNldHN9fTtqci51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKGUpe2xldCB0PUtJKGUucGFja2VkSW5zdGFuY2VzKSxuPWUuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLG89bi5sZW5ndGgsYT0wO2ZvcihsZXQgZj0wO2Y8bztmKyspe2xldCBkPWpyLnVucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhuW2ZdKSxjPWQubGVuZ3RoO2ZvcihsZXQgdT0wO3U8Yzt1Kyspe2xldCBsPWRbdV0saD10W2FdO2guZ2VvbWV0cnk9bCwrK2F9fWxldCByPXEuY2xvbmUoZS5lbGxpcHNvaWQpLGk9ZS5pc0dlb2dyYXBoaWM/bmV3IGlvKHIpOm5ldyBSbihyKTtyZXR1cm57aW5zdGFuY2VzOnQsZWxsaXBzb2lkOnIscHJvamVjdGlvbjppLGVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQ6ZS5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHNjZW5lM0RPbmx5OmUuc2NlbmUzRE9ubHksdmVydGV4Q2FjaGVPcHRpbWl6ZTplLnZlcnRleENhY2hlT3B0aW1pemUsY29tcHJlc3NWZXJ0aWNlczplLmNvbXByZXNzVmVydGljZXMsbW9kZWxNYXRyaXg6JC5jbG9uZShlLm1vZGVsTWF0cml4KSxjcmVhdGVQaWNrT2Zmc2V0czplLmNyZWF0ZVBpY2tPZmZzZXRzfX07anIucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24oZSx0KXtnKGUuZ2VvbWV0cmllcykmJkdJKGUuZ2VvbWV0cmllcyx0KTtsZXQgbj1LdyhlLmJvdW5kaW5nU3BoZXJlcyksbz1LdyhlLmJvdW5kaW5nU3BoZXJlc0NWKTtyZXR1cm4gdC5wdXNoKG4uYnVmZmVyLG8uYnVmZmVyKSx7Z2VvbWV0cmllczplLmdlb21ldHJpZXMsYXR0cmlidXRlTG9jYXRpb25zOmUuYXR0cmlidXRlTG9jYXRpb25zLG1vZGVsTWF0cml4OmUubW9kZWxNYXRyaXgscGlja09mZnNldHM6ZS5waWNrT2Zmc2V0cyxvZmZzZXRJbnN0YW5jZUV4dGVuZDplLm9mZnNldEluc3RhbmNlRXh0ZW5kLGJvdW5kaW5nU3BoZXJlczpuLGJvdW5kaW5nU3BoZXJlc0NWOm99fTtqci51bnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKGUpe3JldHVybntnZW9tZXRyaWVzOmUuZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6ZS5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6ZS5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czplLnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOmUub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOnF3KGUuYm91bmRpbmdTcGhlcmVzKSxib3VuZGluZ1NwaGVyZXNDVjpxdyhlLmJvdW5kaW5nU3BoZXJlc0NWKX19O3VzPWpyfSk7ZnVuY3Rpb24gcUkoZSl7bGV0IHQsbj1lLm5hbWUsbz1lLm1lc3NhZ2U7ZyhuKSYmZyhvKT90PWAke259OiAke299YDp0PWUudG9TdHJpbmcoKTtsZXQgYT1lLnN0YWNrO3JldHVybiBnKGEpJiYodCs9YAoke2F9YCksdH12YXIgV3csWHc9WCgoKT0+e3NlKCk7V3c9cUl9KTt2YXIgUnA9e307cnQoUnAse2RlZmF1bHQ6KCk9PkF0fSk7ZnVuY3Rpb24gV0koZSl7YXN5bmMgZnVuY3Rpb24gdCh7ZGF0YTpvfSl7bGV0IGE9W10scj17aWQ6by5pZCxyZXN1bHQ6dm9pZCAwLGVycm9yOnZvaWQgMH07c2VsZi5DRVNJVU1fQkFTRV9VUkw9by5iYXNlVXJsO3RyeXtsZXQgaT1hd2FpdCBlKG8ucGFyYW1ldGVycyxhKTtyLnJlc3VsdD1pfWNhdGNoKGkpe2kgaW5zdGFuY2VvZiBFcnJvcj9yLmVycm9yPXtuYW1lOmkubmFtZSxtZXNzYWdlOmkubWVzc2FnZSxzdGFjazppLnN0YWNrfTpyLmVycm9yPWl9by5jYW5UcmFuc2ZlckFycmF5QnVmZmVyfHwoYS5sZW5ndGg9MCk7dHJ5e3Bvc3RNZXNzYWdlKHIsYSl9Y2F0Y2goaSl7ci5yZXN1bHQ9dm9pZCAwLHIuZXJyb3I9YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke1d3KGkpfQogIHdpdGggcmVzcG9uc2VNZXNzYWdlOiAke0pTT04uc3RyaW5naWZ5KHIpfWAscG9zdE1lc3NhZ2Uocil9fWZ1bmN0aW9uIG4obyl7cG9zdE1lc3NhZ2Uoe2lkOm8uZGF0YT8uaWQsZXJyb3I6YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KG8pfWB9KX1yZXR1cm4gc2VsZi5vbm1lc3NhZ2U9dCxzZWxmLm9ubWVzc2FnZWVycm9yPW4sc2VsZn12YXIgQXQsVW49WCgoKT0+e1h3KCk7QXQ9V0l9KTt2YXIgeHA9e307cnQoeHAse2RlZmF1bHQ6KCk9PllJfSk7ZnVuY3Rpb24gWEkoZSx0KXtsZXQgbj11cy51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzKGUpLG89dXMuY29tYmluZUdlb21ldHJ5KG4pO3JldHVybiB1cy5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cyhvLHQpfXZhciBZSSxPcD1YKCgpPT57VHAoKTtVbigpO1lJPUF0KFhJKX0pO3ZhciBKSSxzdCx6bz1YKCgpPT57Skk9e05PTkU6MCxUT1A6MSxBTEw6Mn0sc3Q9T2JqZWN0LmZyZWV6ZShKSSl9KTtmdW5jdGlvbiBabihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPWUucG9zaXRpb24/PyExLHRoaXMubm9ybWFsPWUubm9ybWFsPz8hMSx0aGlzLnN0PWUuc3Q/PyExLHRoaXMuYml0YW5nZW50PWUuYml0YW5nZW50Pz8hMSx0aGlzLnRhbmdlbnQ9ZS50YW5nZW50Pz8hMSx0aGlzLmNvbG9yPWUuY29sb3I/PyExfXZhciBoZSxrbz1YKCgpPT57bXQoKTtzZSgpO1puLlBPU0lUSU9OX09OTFk9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwfSkpO1puLlBPU0lUSU9OX0FORF9OT1JNQUw9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMH0pKTtabi5QT1NJVElPTl9OT1JNQUxfQU5EX1NUPU9iamVjdC5mcmVlemUobmV3IFpuKHtwb3NpdGlvbjohMCxub3JtYWw6ITAsc3Q6ITB9KSk7Wm4uUE9TSVRJT05fQU5EX1NUPU9iamVjdC5mcmVlemUobmV3IFpuKHtwb3NpdGlvbjohMCxzdDohMH0pKTtabi5QT1NJVElPTl9BTkRfQ09MT1I9T2JqZWN0LmZyZWV6ZShuZXcgWm4oe3Bvc2l0aW9uOiEwLGNvbG9yOiEwfSkpO1puLkFMTD1PYmplY3QuZnJlZXplKG5ldyBabih7cG9zaXRpb246ITAsbm9ybWFsOiEwLHN0OiEwLHRhbmdlbnQ6ITAsYml0YW5nZW50OiEwfSkpO1puLkRFRkFVTFQ9Wm4uUE9TSVRJT05fTk9STUFMX0FORF9TVDtabi5wYWNrZWRMZW5ndGg9Njtabi5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLnBvc2l0aW9uPzE6MCx0W24rK109ZS5ub3JtYWw/MTowLHRbbisrXT1lLnN0PzE6MCx0W24rK109ZS50YW5nZW50PzE6MCx0W24rK109ZS5iaXRhbmdlbnQ/MTowLHRbbl09ZS5jb2xvcj8xOjAsdH07Wm4udW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz8wLGcobil8fChuPW5ldyBabiksbi5wb3NpdGlvbj1lW3QrK109PT0xLG4ubm9ybWFsPWVbdCsrXT09PTEsbi5zdD1lW3QrK109PT0xLG4udGFuZ2VudD1lW3QrK109PT0xLG4uYml0YW5nZW50PWVbdCsrXT09PTEsbi5jb2xvcj1lW3RdPT09MSxufTtabi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCl8fCh0PW5ldyBabiksdC5wb3NpdGlvbj1lLnBvc2l0aW9uLHQubm9ybWFsPWUubm9ybWFsLHQuc3Q9ZS5zdCx0LnRhbmdlbnQ9ZS50YW5nZW50LHQuYml0YW5nZW50PWUuYml0YW5nZW50LHQuY29sb3I9ZS5jb2xvcix0fTtoZT1abn0pO2Z1bmN0aW9uIHNhKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUubWluaW11bSxuPWUubWF4aW11bSxvPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUO3RoaXMuX21pbmltdW09cy5jbG9uZSh0KSx0aGlzLl9tYXhpbXVtPXMuY2xvbmUobiksdGhpcy5fdmVydGV4Rm9ybWF0PW8sdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveEdlb21ldHJ5In12YXIgWkksSncsWncsUXcsWXcsU3AsRmYsQ3A9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO2NuKCk7a28oKTtaST1uZXcgcztzYS5mcm9tRGltZW5zaW9ucz1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmRpbWVuc2lvbnMsbj1zLm11bHRpcGx5QnlTY2FsYXIodCwuNSxuZXcgcyk7cmV0dXJuIG5ldyBzYSh7bWluaW11bTpzLm5lZ2F0ZShuLG5ldyBzKSxtYXhpbXVtOm4sdmVydGV4Rm9ybWF0OmUudmVydGV4Rm9ybWF0LG9mZnNldEF0dHJpYnV0ZTplLm9mZnNldEF0dHJpYnV0ZX0pfTtzYS5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHNhKHttaW5pbXVtOmUubWluaW11bSxtYXhpbXVtOmUubWF4aW11bX0pfTtzYS5wYWNrZWRMZW5ndGg9MipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrMTtzYS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9taW5pbXVtLHQsbikscy5wYWNrKGUuX21heGltdW0sdCxuK3MucGFja2VkTGVuZ3RoKSxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4rMipzLnBhY2tlZExlbmd0aCksdFtuKzIqcy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O0p3PW5ldyBzLFp3PW5ldyBzLFF3PW5ldyBoZSxZdz17bWluaW11bTpKdyxtYXhpbXVtOlp3LHZlcnRleEZvcm1hdDpRdyxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtzYS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQsSncpLGE9cy51bnBhY2soZSx0K3MucGFja2VkTGVuZ3RoLFp3KSxyPWhlLnVucGFjayhlLHQrMipzLnBhY2tlZExlbmd0aCxRdyksaT1lW3QrMipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGhdO3JldHVybiBnKG4pPyhuLl9taW5pbXVtPXMuY2xvbmUobyxuLl9taW5pbXVtKSxuLl9tYXhpbXVtPXMuY2xvbmUoYSxuLl9tYXhpbXVtKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX29mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbik6KFl3Lm9mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbmV3IHNhKFl3KSl9O3NhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX21pbmltdW0sbj1lLl9tYXhpbXVtLG89ZS5fdmVydGV4Rm9ybWF0O2lmKHMuZXF1YWxzKHQsbikpcmV0dXJuO2xldCBhPW5ldyBudCxyLGk7aWYoby5wb3NpdGlvbiYmKG8uc3R8fG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KSl7aWYoby5wb3NpdGlvbiYmKGk9bmV3IEZsb2F0NjRBcnJheSg3MiksaVswXT10LngsaVsxXT10LnksaVsyXT1uLnosaVszXT1uLngsaVs0XT10LnksaVs1XT1uLnosaVs2XT1uLngsaVs3XT1uLnksaVs4XT1uLnosaVs5XT10LngsaVsxMF09bi55LGlbMTFdPW4ueixpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueixpWzE1XT1uLngsaVsxNl09dC55LGlbMTddPXQueixpWzE4XT1uLngsaVsxOV09bi55LGlbMjBdPXQueixpWzIxXT10LngsaVsyMl09bi55LGlbMjNdPXQueixpWzI0XT1uLngsaVsyNV09dC55LGlbMjZdPXQueixpWzI3XT1uLngsaVsyOF09bi55LGlbMjldPXQueixpWzMwXT1uLngsaVszMV09bi55LGlbMzJdPW4ueixpWzMzXT1uLngsaVszNF09dC55LGlbMzVdPW4ueixpWzM2XT10LngsaVszN109dC55LGlbMzhdPXQueixpWzM5XT10LngsaVs0MF09bi55LGlbNDFdPXQueixpWzQyXT10LngsaVs0M109bi55LGlbNDRdPW4ueixpWzQ1XT10LngsaVs0Nl09dC55LGlbNDddPW4ueixpWzQ4XT10LngsaVs0OV09bi55LGlbNTBdPXQueixpWzUxXT1uLngsaVs1Ml09bi55LGlbNTNdPXQueixpWzU0XT1uLngsaVs1NV09bi55LGlbNTZdPW4ueixpWzU3XT10LngsaVs1OF09bi55LGlbNTldPW4ueixpWzYwXT10LngsaVs2MV09dC55LGlbNjJdPXQueixpWzYzXT1uLngsaVs2NF09dC55LGlbNjVdPXQueixpWzY2XT1uLngsaVs2N109dC55LGlbNjhdPW4ueixpWzY5XT10LngsaVs3MF09dC55LGlbNzFdPW4ueixhLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pKSxvLm5vcm1hbCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MCxjWzVdPTEsY1s2XT0wLGNbN109MCxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MSxjWzEyXT0wLGNbMTNdPTAsY1sxNF09LTEsY1sxNV09MCxjWzE2XT0wLGNbMTddPS0xLGNbMThdPTAsY1sxOV09MCxjWzIwXT0tMSxjWzIxXT0wLGNbMjJdPTAsY1syM109LTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MSxjWzI4XT0wLGNbMjldPTAsY1szMF09MSxjWzMxXT0wLGNbMzJdPTAsY1szM109MSxjWzM0XT0wLGNbMzVdPTAsY1szNl09LTEsY1szN109MCxjWzM4XT0wLGNbMzldPS0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0tMSxjWzQzXT0wLGNbNDRdPTAsY1s0NV09LTEsY1s0Nl09MCxjWzQ3XT0wLGNbNDhdPTAsY1s0OV09MSxjWzUwXT0wLGNbNTFdPTAsY1s1Ml09MSxjWzUzXT0wLGNbNTRdPTAsY1s1NV09MSxjWzU2XT0wLGNbNTddPTAsY1s1OF09MSxjWzU5XT0wLGNbNjBdPTAsY1s2MV09LTEsY1s2Ml09MCxjWzYzXT0wLGNbNjRdPS0xLGNbNjVdPTAsY1s2Nl09MCxjWzY3XT0tMSxjWzY4XT0wLGNbNjldPTAsY1s3MF09LTEsY1s3MV09MCxhLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uc3Qpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNDgpO2NbMF09MCxjWzFdPTAsY1syXT0xLGNbM109MCxjWzRdPTEsY1s1XT0xLGNbNl09MCxjWzddPTEsY1s4XT0xLGNbOV09MCxjWzEwXT0wLGNbMTFdPTAsY1sxMl09MCxjWzEzXT0xLGNbMTRdPTEsY1sxNV09MSxjWzE2XT0wLGNbMTddPTAsY1sxOF09MSxjWzE5XT0wLGNbMjBdPTEsY1syMV09MSxjWzIyXT0wLGNbMjNdPTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MCxjWzI4XT0wLGNbMjldPTEsY1szMF09MSxjWzMxXT0xLGNbMzJdPTEsY1szM109MCxjWzM0XT0wLGNbMzVdPTAsY1szNl09MCxjWzM3XT0xLGNbMzhdPTEsY1szOV09MSxjWzQwXT0wLGNbNDFdPTAsY1s0Ml09MSxjWzQzXT0wLGNbNDRdPTEsY1s0NV09MSxjWzQ2XT0wLGNbNDddPTEsYS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Y30pfWlmKG8udGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0xLGNbMV09MCxjWzJdPTAsY1szXT0xLGNbNF09MCxjWzVdPTAsY1s2XT0xLGNbN109MCxjWzhdPTAsY1s5XT0xLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0tMSxjWzEzXT0wLGNbMTRdPTAsY1sxNV09LTEsY1sxNl09MCxjWzE3XT0wLGNbMThdPS0xLGNbMTldPTAsY1syMF09MCxjWzIxXT0tMSxjWzIyXT0wLGNbMjNdPTAsY1syNF09MCxjWzI1XT0xLGNbMjZdPTAsY1syN109MCxjWzI4XT0xLGNbMjldPTAsY1szMF09MCxjWzMxXT0xLGNbMzJdPTAsY1szM109MCxjWzM0XT0xLGNbMzVdPTAsY1szNl09MCxjWzM3XT0tMSxjWzM4XT0wLGNbMzldPTAsY1s0MF09LTEsY1s0MV09MCxjWzQyXT0wLGNbNDNdPS0xLGNbNDRdPTAsY1s0NV09MCxjWzQ2XT0tMSxjWzQ3XT0wLGNbNDhdPS0xLGNbNDldPTAsY1s1MF09MCxjWzUxXT0tMSxjWzUyXT0wLGNbNTNdPTAsY1s1NF09LTEsY1s1NV09MCxjWzU2XT0wLGNbNTddPS0xLGNbNThdPTAsY1s1OV09MCxjWzYwXT0xLGNbNjFdPTAsY1s2Ml09MCxjWzYzXT0xLGNbNjRdPTAsY1s2NV09MCxjWzY2XT0xLGNbNjddPTAsY1s2OF09MCxjWzY5XT0xLGNbNzBdPTAsY1s3MV09MCxhLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pZihvLmJpdGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MSxjWzJdPTAsY1szXT0wLGNbNF09MSxjWzVdPTAsY1s2XT0wLGNbN109MSxjWzhdPTAsY1s5XT0wLGNbMTBdPTEsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MCxjWzE1XT0wLGNbMTZdPTEsY1sxN109MCxjWzE4XT0wLGNbMTldPTEsY1syMF09MCxjWzIxXT0wLGNbMjJdPTEsY1syM109MCxjWzI0XT0wLGNbMjVdPTAsY1syNl09MSxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0wLGNbMzFdPTAsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MSxjWzM2XT0wLGNbMzddPTAsY1szOF09MSxjWzM5XT0wLGNbNDBdPTAsY1s0MV09MSxjWzQyXT0wLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0wLGNbNDZdPTAsY1s0N109MSxjWzQ4XT0wLGNbNDldPTAsY1s1MF09MSxjWzUxXT0wLGNbNTJdPTAsY1s1M109MSxjWzU0XT0wLGNbNTVdPTAsY1s1Nl09MSxjWzU3XT0wLGNbNThdPTAsY1s1OV09MSxjWzYwXT0wLGNbNjFdPTAsY1s2Ml09MSxjWzYzXT0wLGNbNjRdPTAsY1s2NV09MSxjWzY2XT0wLGNbNjddPTAsY1s2OF09MSxjWzY5XT0wLGNbNzBdPTAsY1s3MV09MSxhLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfXI9bmV3IFVpbnQxNkFycmF5KDM2KSxyWzBdPTAsclsxXT0xLHJbMl09MixyWzNdPTAscls0XT0yLHJbNV09MyxyWzZdPTYscls3XT01LHJbOF09NCxyWzldPTcsclsxMF09NixyWzExXT00LHJbMTJdPTgsclsxM109OSxyWzE0XT0xMCxyWzE1XT04LHJbMTZdPTEwLHJbMTddPTExLHJbMThdPTE0LHJbMTldPTEzLHJbMjBdPTEyLHJbMjFdPTE1LHJbMjJdPTE0LHJbMjNdPTEyLHJbMjRdPTE4LHJbMjVdPTE3LHJbMjZdPTE2LHJbMjddPTE5LHJbMjhdPTE4LHJbMjldPTE2LHJbMzBdPTIwLHJbMzFdPTIxLHJbMzJdPTIyLHJbMzNdPTIwLHJbMzRdPTIyLHJbMzVdPTIzfWVsc2UgaT1uZXcgRmxvYXQ2NEFycmF5KDI0KSxpWzBdPXQueCxpWzFdPXQueSxpWzJdPXQueixpWzNdPW4ueCxpWzRdPXQueSxpWzVdPXQueixpWzZdPW4ueCxpWzddPW4ueSxpWzhdPXQueixpWzldPXQueCxpWzEwXT1uLnksaVsxMV09dC56LGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09bi56LGlbMTVdPW4ueCxpWzE2XT10LnksaVsxN109bi56LGlbMThdPW4ueCxpWzE5XT1uLnksaVsyMF09bi56LGlbMjFdPXQueCxpWzIyXT1uLnksaVsyM109bi56LGEucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSkscj1uZXcgVWludDE2QXJyYXkoMzYpLHJbMF09NCxyWzFdPTUsclsyXT02LHJbM109NCxyWzRdPTYscls1XT03LHJbNl09MSxyWzddPTAscls4XT0zLHJbOV09MSxyWzEwXT0zLHJbMTFdPTIsclsxMl09MSxyWzEzXT02LHJbMTRdPTUsclsxNV09MSxyWzE2XT0yLHJbMTddPTYsclsxOF09MixyWzE5XT0zLHJbMjBdPTcsclsyMV09MixyWzIyXT03LHJbMjNdPTYsclsyNF09MyxyWzI1XT0wLHJbMjZdPTQsclsyN109MyxyWzI4XT00LHJbMjldPTcsclszMF09MCxyWzMxXT0xLHJbMzJdPTUsclszM109MCxyWzM0XT01LHJbMzVdPTQ7bGV0IGY9cy5zdWJ0cmFjdChuLHQsWkkpLGQ9cy5tYWduaXR1ZGUoZikqLjU7aWYoZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgYz1pLmxlbmd0aCx1PWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLGw9bmV3IFVpbnQ4QXJyYXkoYy8zKS5maWxsKHUpO2EuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6YSxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IGdlKHMuWkVSTyxkKSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O3NhLmdldFVuaXRCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gZyhTcCl8fChTcD1zYS5jcmVhdGVHZW9tZXRyeShzYS5mcm9tRGltZW5zaW9ucyh7ZGltZW5zaW9uczpuZXcgcygxLDEsMSksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFl9KSkpLFNwfTtGZj1zYX0pO3ZhciBNcD17fTtydChNcCx7ZGVmYXVsdDooKT0+JEl9KTtmdW5jdGlvbiBRSShlLHQpe3JldHVybiBnKHQpJiYoZT1GZi51bnBhY2soZSx0KSksRmYuY3JlYXRlR2VvbWV0cnkoZSl9dmFyICRJLE5wPVgoKCk9PntDcCgpO3NlKCk7JEk9UUl9KTtmdW5jdGlvbiBocihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLm1pbmltdW0sbj1lLm1heGltdW07dGhpcy5fbWluPXMuY2xvbmUodCksdGhpcy5fbWF4PXMuY2xvbmUobiksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveE91dGxpbmVHZW9tZXRyeSJ9dmFyIGUzLGVFLHRFLCR3LElwLG5FPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtjbigpO2UzPW5ldyBzO2hyLmZyb21EaW1lbnNpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUuZGltZW5zaW9ucyxuPXMubXVsdGlwbHlCeVNjYWxhcih0LC41LG5ldyBzKTtyZXR1cm4gbmV3IGhyKHttaW5pbXVtOnMubmVnYXRlKG4sbmV3IHMpLG1heGltdW06bixvZmZzZXRBdHRyaWJ1dGU6ZS5vZmZzZXRBdHRyaWJ1dGV9KX07aHIuZnJvbUF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBocih7bWluaW11bTplLm1pbmltdW0sbWF4aW11bTplLm1heGltdW19KX07aHIucGFja2VkTGVuZ3RoPTIqcy5wYWNrZWRMZW5ndGgrMTtoci5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9taW4sdCxuKSxzLnBhY2soZS5fbWF4LHQsbitzLnBhY2tlZExlbmd0aCksdFtuK3MucGFja2VkTGVuZ3RoKjJdPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07ZUU9bmV3IHMsdEU9bmV3IHMsJHc9e21pbmltdW06ZUUsbWF4aW11bTp0RSxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtoci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQsZUUpLGE9cy51bnBhY2soZSx0K3MucGFja2VkTGVuZ3RoLHRFKSxyPWVbdCtzLnBhY2tlZExlbmd0aCoyXTtyZXR1cm4gZyhuKT8obi5fbWluPXMuY2xvbmUobyxuLl9taW4pLG4uX21heD1zLmNsb25lKGEsbi5fbWF4KSxuLl9vZmZzZXRBdHRyaWJ1dGU9cj09PS0xP3ZvaWQgMDpyLG4pOigkdy5vZmZzZXRBdHRyaWJ1dGU9cj09PS0xP3ZvaWQgMDpyLG5ldyBocigkdykpfTtoci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9taW4sbj1lLl9tYXg7aWYocy5lcXVhbHModCxuKSlyZXR1cm47bGV0IG89bmV3IG50LGE9bmV3IFVpbnQxNkFycmF5KDI0KSxyPW5ldyBGbG9hdDY0QXJyYXkoMjQpO3JbMF09dC54LHJbMV09dC55LHJbMl09dC56LHJbM109bi54LHJbNF09dC55LHJbNV09dC56LHJbNl09bi54LHJbN109bi55LHJbOF09dC56LHJbOV09dC54LHJbMTBdPW4ueSxyWzExXT10LnosclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT1uLnosclsxNV09bi54LHJbMTZdPXQueSxyWzE3XT1uLnosclsxOF09bi54LHJbMTldPW4ueSxyWzIwXT1uLnosclsyMV09dC54LHJbMjJdPW4ueSxyWzIzXT1uLnosby5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KSxhWzBdPTQsYVsxXT01LGFbMl09NSxhWzNdPTYsYVs0XT02LGFbNV09NyxhWzZdPTcsYVs3XT00LGFbOF09MCxhWzldPTEsYVsxMF09MSxhWzExXT0yLGFbMTJdPTIsYVsxM109MyxhWzE0XT0zLGFbMTVdPTAsYVsxNl09MCxhWzE3XT00LGFbMThdPTEsYVsxOV09NSxhWzIwXT0yLGFbMjFdPTYsYVsyMl09MyxhWzIzXT03O2xldCBpPXMuc3VidHJhY3Qobix0LGUzKSxmPXMubWFnbml0dWRlKGkpKi41O2lmKGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGQ9ci5sZW5ndGgsYz1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSx1PW5ldyBVaW50OEFycmF5KGQvMykuZmlsbChjKTtvLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnV9KX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOm8saW5kaWNlczphLHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IGdlKHMuWkVSTyxmKSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O0lwPWhyfSk7dmFyIFBwPXt9O3J0KFBwLHtkZWZhdWx0OigpPT5uM30pO2Z1bmN0aW9uIHQzKGUsdCl7cmV0dXJuIGcodCkmJihlPUlwLnVucGFjayhlLHQpKSxJcC5jcmVhdGVHZW9tZXRyeShlKX12YXIgbjMsa3A9WCgoKT0+e25FKCk7c2UoKTtuMz10M30pO2Z1bmN0aW9uIGxzKGUsdCxuLG8sYSxyLGksZixkLGMpe2xldCB1PWUrdDtzLm11bHRpcGx5QnlTY2FsYXIobyxNYXRoLmNvcyh1KSx0aCkscy5tdWx0aXBseUJ5U2NhbGFyKG4sTWF0aC5zaW4odSksb0UpLHMuYWRkKHRoLG9FLHRoKTtsZXQgbD1NYXRoLmNvcyhlKTtsPWwqbDtsZXQgaD1NYXRoLnNpbihlKTtoPWgqaDtsZXQgYj1yL01hdGguc3FydChpKmwrYSpoKS9mO3JldHVybiBRZS5mcm9tQXhpc0FuZ2xlKHRoLGIsYUUpLEouZnJvbVF1YXRlcm5pb24oYUUsckUpLEoubXVsdGlwbHlCeVZlY3RvcihyRSxkLGMpLHMubm9ybWFsaXplKGMsYykscy5tdWx0aXBseUJ5U2NhbGFyKGMsZixjKSxjfXZhciBGcCx0aCxvRSxhRSxyRSxpRSxjRSx2cCxvMyxhMyxyMyxpMyxLYSxEcD1YKCgpPT57SWUoKTtHZSgpO0RuKCk7Sm8oKTtGcD17fSx0aD1uZXcgcyxvRT1uZXcgcyxhRT1uZXcgUWUsckU9bmV3IEo7aUU9bmV3IHMsY0U9bmV3IHMsdnA9bmV3IHMsbzM9bmV3IHM7RnAucmFpc2VQb3NpdGlvbnNUb0hlaWdodD1mdW5jdGlvbihlLHQsbil7bGV0IG89dC5lbGxpcHNvaWQsYT10LmhlaWdodCxyPXQuZXh0cnVkZWRIZWlnaHQsaT1uP2UubGVuZ3RoLzMqMjplLmxlbmd0aC8zLGY9bmV3IEZsb2F0NjRBcnJheShpKjMpLGQ9ZS5sZW5ndGgsYz1uP2Q6MDtmb3IobGV0IHU9MDt1PGQ7dSs9Myl7bGV0IGw9dSsxLGg9dSsyLG09cy5mcm9tQXJyYXkoZSx1LGlFKTtvLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobSxtKTtsZXQgYj1zLmNsb25lKG0sY0UpLHA9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobSxvMykseT1zLm11bHRpcGx5QnlTY2FsYXIocCxhLHZwKTtzLmFkZChtLHksbSksbiYmKHMubXVsdGlwbHlCeVNjYWxhcihwLHIseSkscy5hZGQoYix5LGIpLGZbdStjXT1iLngsZltsK2NdPWIueSxmW2grY109Yi56KSxmW3VdPW0ueCxmW2xdPW0ueSxmW2hdPW0uen1yZXR1cm4gZn07YTM9bmV3IHMscjM9bmV3IHMsaTM9bmV3IHM7RnAuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuc2VtaU1pbm9yQXhpcyxhPWUuc2VtaU1ham9yQXhpcyxyPWUucm90YXRpb24saT1lLmNlbnRlcixmPWUuZ3JhbnVsYXJpdHkqOCxkPW8qbyxjPWEqYSx1PWEqbyxsPXMubWFnbml0dWRlKGkpLGg9cy5ub3JtYWxpemUoaSxhMyksbT1zLmNyb3NzKHMuVU5JVF9aLGkscjMpO209cy5ub3JtYWxpemUobSxtKTtsZXQgYj1zLmNyb3NzKGgsbSxpMykscD0xK01hdGguY2VpbChrLlBJX09WRVJfVFdPL2YpLHk9ay5QSV9PVkVSX1RXTy8ocC0xKSxFPWsuUElfT1ZFUl9UV08tcCp5O0U8MCYmKHAtPU1hdGguY2VpbChNYXRoLmFicyhFKS95KSk7bGV0IF89MioocCoocCsyKSksVD10P25ldyBBcnJheShfKjMpOnZvaWQgMCx3PTAsUj1pRSxTPWNFLEM9cCo0KjMsST1DLTEsTj0wLFA9bj9uZXcgQXJyYXkoQyk6dm9pZCAwLHYsQSx4LE0sRjtmb3IoRT1rLlBJX09WRVJfVFdPLFI9bHMoRSxyLGIsbSxkLHUsYyxsLGgsUiksdCYmKFRbdysrXT1SLngsVFt3KytdPVIueSxUW3crK109Ui56KSxuJiYoUFtJLS1dPVIueixQW0ktLV09Ui55LFBbSS0tXT1SLngpLEU9ay5QSV9PVkVSX1RXTy15LHY9MTt2PHArMTsrK3Ype2lmKFI9bHMoRSxyLGIsbSxkLHUsYyxsLGgsUiksUz1scyhNYXRoLlBJLUUscixiLG0sZCx1LGMsbCxoLFMpLHQpe2ZvcihUW3crK109Ui54LFRbdysrXT1SLnksVFt3KytdPVIueix4PTIqdisyLEE9MTtBPHgtMTsrK0EpTT1BLyh4LTEpLEY9cy5sZXJwKFIsUyxNLHZwKSxUW3crK109Ri54LFRbdysrXT1GLnksVFt3KytdPUYuejtUW3crK109Uy54LFRbdysrXT1TLnksVFt3KytdPVMuen1uJiYoUFtJLS1dPVIueixQW0ktLV09Ui55LFBbSS0tXT1SLngsUFtOKytdPVMueCxQW04rK109Uy55LFBbTisrXT1TLnopLEU9ay5QSV9PVkVSX1RXTy0odisxKSp5fWZvcih2PXA7dj4xOy0tdil7aWYoRT1rLlBJX09WRVJfVFdPLSh2LTEpKnksUj1scygtRSxyLGIsbSxkLHUsYyxsLGgsUiksUz1scyhFK01hdGguUEkscixiLG0sZCx1LGMsbCxoLFMpLHQpe2ZvcihUW3crK109Ui54LFRbdysrXT1SLnksVFt3KytdPVIueix4PTIqKHYtMSkrMixBPTE7QTx4LTE7KytBKU09QS8oeC0xKSxGPXMubGVycChSLFMsTSx2cCksVFt3KytdPUYueCxUW3crK109Ri55LFRbdysrXT1GLno7VFt3KytdPVMueCxUW3crK109Uy55LFRbdysrXT1TLnp9biYmKFBbSS0tXT1SLnosUFtJLS1dPVIueSxQW0ktLV09Ui54LFBbTisrXT1TLngsUFtOKytdPVMueSxQW04rK109Uy56KX1FPWsuUElfT1ZFUl9UV08sUj1scygtRSxyLGIsbSxkLHUsYyxsLGgsUik7bGV0IFU9e307cmV0dXJuIHQmJihUW3crK109Ui54LFRbdysrXT1SLnksVFt3KytdPVIueixVLnBvc2l0aW9ucz1ULFUubnVtUHRzPXApLG4mJihQW0ktLV09Ui56LFBbSS0tXT1SLnksUFtJLS1dPVIueCxVLm91dGVyUG9zaXRpb25zPVApLFV9O0thPUZwfSk7ZnVuY3Rpb24gYzMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1QsdGhpcy5nZW9tZXRyeT1lLmdlb21ldHJ5LHRoaXMubW9kZWxNYXRyaXg9JC5jbG9uZShlLm1vZGVsTWF0cml4Pz8kLklERU5USVRZKSx0aGlzLmlkPWUuaWQsdGhpcy5waWNrUHJpbWl0aXZlPWUucGlja1ByaW1pdGl2ZSx0aGlzLmF0dHJpYnV0ZXM9ZS5hdHRyaWJ1dGVzPz97fSx0aGlzLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwLHRoaXMuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeT12b2lkIDB9dmFyIHBvLGRjPVgoKCk9PnttdCgpO3BuKCk7cG89YzN9KTtmdW5jdGlvbiBwRShlLHQsbil7bGV0IG89dC52ZXJ0ZXhGb3JtYXQsYT10LmNlbnRlcixyPXQuc2VtaU1ham9yQXhpcyxpPXQuc2VtaU1pbm9yQXhpcyxmPXQuZWxsaXBzb2lkLGQ9dC5zdFJvdGF0aW9uLGM9bj9lLmxlbmd0aC8zKjI6ZS5sZW5ndGgvMyx1PXQuc2hhZG93Vm9sdW1lLGw9by5zdD9uZXcgRmxvYXQzMkFycmF5KGMqMik6dm9pZCAwLGg9by5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCxtPW8udGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9by5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCxwPXU/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCx5PTAsRT1kRSxfPXVFLFQ9bEUsdz1uZXcgaW8oZiksUj13LnByb2plY3QoZi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhhLGFoKSxoRSksUz1mLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoYSxocyk7Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoUyxTKTtsZXQgQz1mRSxJPXMzO2lmKGQhPT0wKXtsZXQgRj1RZS5mcm9tQXhpc0FuZ2xlKFMsZCxMcCk7Qz1KLmZyb21RdWF0ZXJuaW9uKEYsQyksRj1RZS5mcm9tQXhpc0FuZ2xlKFMsLWQsTHApLEk9Si5mcm9tUXVhdGVybmlvbihGLEkpfWVsc2UgQz1KLmNsb25lKEouSURFTlRJVFksQyksST1KLmNsb25lKEouSURFTlRJVFksSSk7bGV0IE49WS5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxtRSksUD1ZLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGJFKSx2PWUubGVuZ3RoLEE9bj92OjAseD1BLzMqMjtmb3IobGV0IEY9MDtGPHY7Ris9Myl7bGV0IFU9RisxLHo9RisyLEQ9cy5mcm9tQXJyYXkoZSxGLGhzKTtpZihvLnN0KXtsZXQgRz1KLm11bHRpcGx5QnlWZWN0b3IoQyxELEJwKSxIPXcucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEcsYWgpLFVwKTtzLnN1YnRyYWN0KEgsUixIKSxvby54PShILngrcikvKDIqciksb28ueT0oSC55K2kpLygyKmkpLE4ueD1NYXRoLm1pbihvby54LE4ueCksTi55PU1hdGgubWluKG9vLnksTi55KSxQLng9TWF0aC5tYXgob28ueCxQLngpLFAueT1NYXRoLm1heChvby55LFAueSksbiYmKGxbeSt4XT1vby54LGxbeSsxK3hdPW9vLnkpLGxbeSsrXT1vby54LGxbeSsrXT1vby55fShvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudHx8dSkmJihFPWYuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEQsRSksdSYmKHBbRitBXT0tRS54LHBbVStBXT0tRS55LHBbeitBXT0tRS56KSwoby5ub3JtYWx8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpJiYoKG8udGFuZ2VudHx8by5iaXRhbmdlbnQpJiYoXz1zLm5vcm1hbGl6ZShzLmNyb3NzKHMuVU5JVF9aLEUsXyksXyksSi5tdWx0aXBseUJ5VmVjdG9yKEksXyxfKSksby5ub3JtYWwmJihoW0ZdPUUueCxoW1VdPUUueSxoW3pdPUUueixuJiYoaFtGK0FdPS1FLngsaFtVK0FdPS1FLnksaFt6K0FdPS1FLnopKSxvLnRhbmdlbnQmJihtW0ZdPV8ueCxtW1VdPV8ueSxtW3pdPV8ueixuJiYobVtGK0FdPS1fLngsbVtVK0FdPS1fLnksbVt6K0FdPS1fLnopKSxvLmJpdGFuZ2VudCYmKFQ9cy5ub3JtYWxpemUocy5jcm9zcyhFLF8sVCksVCksYltGXT1ULngsYltVXT1ULnksYlt6XT1ULnosbiYmKGJbRitBXT1ULngsYltVK0FdPVQueSxiW3orQV09VC56KSkpKX1pZihvLnN0KXt2PWwubGVuZ3RoO2ZvcihsZXQgRj0wO0Y8djtGKz0yKWxbRl09KGxbRl0tTi54KS8oUC54LU4ueCksbFtGKzFdPShsW0YrMV0tTi55KS8oUC55LU4ueSl9bGV0IE09bmV3IG50O2lmKG8ucG9zaXRpb24pe2xldCBGPUthLnJhaXNlUG9zaXRpb25zVG9IZWlnaHQoZSx0LG4pO00ucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpGfSl9aWYoby5zdCYmKE0uc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmx9KSksby5ub3JtYWwmJihNLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxvLnRhbmdlbnQmJihNLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksby5iaXRhbmdlbnQmJihNLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pKSx1JiYoTS5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSkpLG4mJmcodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRj1uZXcgVWludDhBcnJheShjKTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClGPUYuZmlsbCgxLDAsYy8yKTtlbHNle2xldCBVPXQub2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjE7Rj1GLmZpbGwoVSl9TS5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpGfSl9cmV0dXJuIE19ZnVuY3Rpb24gZ0UoZSl7bGV0IHQ9bmV3IEFycmF5KDEyKihlKihlKzEpKS02KSxuPTAsbyxhLHIsaSxmO2ZvcihvPTAscj0xLGk9MDtpPDM7aSsrKXRbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXI7Zm9yKGk9MjtpPGUrMTsrK2kpe2ZvcihyPWkqKGkrMSktMSxvPShpLTEpKmktMSx0W24rK109cisrLHRbbisrXT1vLHRbbisrXT1yLGE9MippLGY9MDtmPGEtMTsrK2YpdFtuKytdPXIsdFtuKytdPW8rKyx0W24rK109byx0W24rK109cisrLHRbbisrXT1vLHRbbisrXT1yO3RbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXJ9Zm9yKGE9ZSoyLCsrciwrK28saT0wO2k8YS0xOysraSl0W24rK109cix0W24rK109bysrLHRbbisrXT1vLHRbbisrXT1yKyssdFtuKytdPW8sdFtuKytdPXI7Zm9yKHRbbisrXT1yLHRbbisrXT1vKyssdFtuKytdPW8sdFtuKytdPXIrKyx0W24rK109bysrLHRbbisrXT1vLCsrbyxpPWUtMTtpPjE7LS1pKXtmb3IodFtuKytdPW8rKyx0W24rK109byx0W24rK109cixhPTIqaSxmPTA7ZjxhLTE7KytmKXRbbisrXT1yLHRbbisrXT1vKyssdFtuKytdPW8sdFtuKytdPXIrKyx0W24rK109byx0W24rK109cjt0W24rK109bysrLHRbbisrXT1vKyssdFtuKytdPXIrK31mb3IoaT0wO2k8MztpKyspdFtuKytdPW8rKyx0W24rK109byx0W24rK109cjtyZXR1cm4gdH1mdW5jdGlvbiBmMyhlKXtsZXQgdD1lLmNlbnRlcjt1Yz1zLm11bHRpcGx5QnlTY2FsYXIoZS5lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsdWMpLGUuaGVpZ2h0LHVjKSx1Yz1zLmFkZCh0LHVjLHVjKTtsZXQgbj1uZXcgZ2UodWMsZS5zZW1pTWFqb3JBeGlzKSxvPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKGUsITAsITEpLGE9by5wb3NpdGlvbnMscj1vLm51bVB0cyxpPXBFKGEsZSwhMSksZj1nRShyKTtyZXR1cm4gZj1rZS5jcmVhdGVUeXBlZEFycmF5KGEubGVuZ3RoLzMsZikse2JvdW5kaW5nU3BoZXJlOm4sYXR0cmlidXRlczppLGluZGljZXM6Zn19ZnVuY3Rpb24gZDMoZSx0KXtsZXQgbj10LnZlcnRleEZvcm1hdCxvPXQuY2VudGVyLGE9dC5zZW1pTWFqb3JBeGlzLHI9dC5zZW1pTWlub3JBeGlzLGk9dC5lbGxpcHNvaWQsZj10LmhlaWdodCxkPXQuZXh0cnVkZWRIZWlnaHQsYz10LnN0Um90YXRpb24sdT1lLmxlbmd0aC8zKjIsbD1uZXcgRmxvYXQ2NEFycmF5KHUqMyksaD1uLnN0P25ldyBGbG9hdDMyQXJyYXkodSoyKTp2b2lkIDAsbT1uLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLGI9bi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAscD1uLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLHk9dC5zaGFkb3dWb2x1bWUsRT15P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsXz0wLFQ9ZEUsdz11RSxSPWxFLFM9bmV3IGlvKGkpLEM9Uy5wcm9qZWN0KGkuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxhaCksaEUpLEk9aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG8saHMpO2kuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEksSSk7bGV0IE49UWUuZnJvbUF4aXNBbmdsZShJLGMsTHApLFA9Si5mcm9tUXVhdGVybmlvbihOLGZFKSx2PVkuZnJvbUVsZW1lbnRzKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbUUpLEE9WS5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxiRSkseD1lLmxlbmd0aCxNPXgvMyoyO2ZvcihsZXQgVT0wO1U8eDtVKz0zKXtsZXQgej1VKzEsRD1VKzIsRz1zLmZyb21BcnJheShlLFUsaHMpLEg7aWYobi5zdCl7bGV0IFo9Si5tdWx0aXBseUJ5VmVjdG9yKFAsRyxCcCksb2U9Uy5wcm9qZWN0KGkuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoWixhaCksVXApO3Muc3VidHJhY3Qob2UsQyxvZSksb28ueD0ob2UueCthKS8oMiphKSxvby55PShvZS55K3IpLygyKnIpLHYueD1NYXRoLm1pbihvby54LHYueCksdi55PU1hdGgubWluKG9vLnksdi55KSxBLng9TWF0aC5tYXgob28ueCxBLngpLEEueT1NYXRoLm1heChvby55LEEueSksaFtfK01dPW9vLngsaFtfKzErTV09b28ueSxoW18rK109b28ueCxoW18rK109b28ueX1HPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShHLEcpLEg9cy5jbG9uZShHLEJwKSxUPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEcsVCkseSYmKEVbVSt4XT0tVC54LEVbeit4XT0tVC55LEVbRCt4XT0tVC56KTtsZXQgTz1zLm11bHRpcGx5QnlTY2FsYXIoVCxmLHNFKTtpZihHPXMuYWRkKEcsTyxHKSxPPXMubXVsdGlwbHlCeVNjYWxhcihULGQsTyksSD1zLmFkZChILE8sSCksbi5wb3NpdGlvbiYmKGxbVSt4XT1ILngsbFt6K3hdPUgueSxsW0QreF09SC56LGxbVV09Ry54LGxbel09Ry55LGxbRF09Ry56KSxuLm5vcm1hbHx8bi50YW5nZW50fHxuLmJpdGFuZ2VudCl7Uj1zLmNsb25lKFQsUik7bGV0IFo9cy5mcm9tQXJyYXkoZSwoVSszKSV4LHNFKTtzLnN1YnRyYWN0KFosRyxaKTtsZXQgb2U9cy5zdWJ0cmFjdChILEcsVXApO1Q9cy5ub3JtYWxpemUocy5jcm9zcyhvZSxaLFQpLFQpLG4ubm9ybWFsJiYobVtVXT1ULngsbVt6XT1ULnksbVtEXT1ULnosbVtVK3hdPVQueCxtW3oreF09VC55LG1bRCt4XT1ULnopLG4udGFuZ2VudCYmKHc9cy5ub3JtYWxpemUocy5jcm9zcyhSLFQsdyksdyksYltVXT13LngsYlt6XT13LnksYltEXT13LnosYltVK3hdPXcueCxiW1UrMSt4XT13LnksYltVKzIreF09dy56KSxuLmJpdGFuZ2VudCYmKHBbVV09Ui54LHBbel09Ui55LHBbRF09Ui56LHBbVSt4XT1SLngscFt6K3hdPVIueSxwW0QreF09Ui56KX19aWYobi5zdCl7eD1oLmxlbmd0aDtmb3IobGV0IFU9MDtVPHg7VSs9MiloW1VdPShoW1VdLXYueCkvKEEueC12LngpLGhbVSsxXT0oaFtVKzFdLXYueSkvKEEueS12LnkpfWxldCBGPW5ldyBudDtpZihuLnBvc2l0aW9uJiYoRi5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KSksbi5zdCYmKEYuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmh9KSksbi5ub3JtYWwmJihGLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxuLnRhbmdlbnQmJihGLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksbi5iaXRhbmdlbnQmJihGLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSx5JiYoRi5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpFfSkpLGcodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgVT1uZXcgVWludDhBcnJheSh1KTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClVPVUuZmlsbCgxLDAsdS8yKTtlbHNle2xldCB6PXQub2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjE7VT1VLmZpbGwoeil9Ri5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpVfSl9cmV0dXJuIEZ9ZnVuY3Rpb24gdTMoZSl7bGV0IHQ9ZS5sZW5ndGgvMyxuPWtlLmNyZWF0ZVR5cGVkQXJyYXkodCx0KjYpLG89MDtmb3IobGV0IGE9MDthPHQ7YSsrKXtsZXQgcj1hLGk9YSt0LGY9KHIrMSkldCxkPWYrdDtuW28rK109cixuW28rK109aSxuW28rK109ZixuW28rK109ZixuW28rK109aSxuW28rK109ZH1yZXR1cm4gbn1mdW5jdGlvbiBsMyhlKXtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkLG89ZS5zZW1pTWFqb3JBeGlzLGE9cy5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsaHMpLGUuaGVpZ2h0LGhzKTtuaC5jZW50ZXI9cy5hZGQodCxhLG5oLmNlbnRlciksbmgucmFkaXVzPW8sYT1zLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxhKSxlLmV4dHJ1ZGVkSGVpZ2h0LGEpLG9oLmNlbnRlcj1zLmFkZCh0LGEsb2guY2VudGVyKSxvaC5yYWRpdXM9bztsZXQgcj1LYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyhlLCEwLCEwKSxpPXIucG9zaXRpb25zLGY9ci5udW1QdHMsZD1yLm91dGVyUG9zaXRpb25zLGM9Z2UudW5pb24obmgsb2gpLHU9cEUoaSxlLCEwKSxsPWdFKGYpLGg9bC5sZW5ndGg7bC5sZW5ndGg9aCoyO2xldCBtPWkubGVuZ3RoLzM7Zm9yKGxldCB3PTA7dzxoO3crPTMpbFt3K2hdPWxbdysyXSttLGxbdysxK2hdPWxbdysxXSttLGxbdysyK2hdPWxbd10rbTtsZXQgYj1rZS5jcmVhdGVUeXBlZEFycmF5KG0qMi8zLGwpLHA9bmV3IHZlKHthdHRyaWJ1dGVzOnUsaW5kaWNlczpiLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfSkseT1kMyhkLGUpO2w9dTMoZCk7bGV0IEU9a2UuY3JlYXRlVHlwZWRBcnJheShkLmxlbmd0aCoyLzMsbCksXz1uZXcgdmUoe2F0dHJpYnV0ZXM6eSxpbmRpY2VzOkUscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9KSxUPUh0LmNvbWJpbmVJbnN0YW5jZXMoW25ldyBwbyh7Z2VvbWV0cnk6cH0pLG5ldyBwbyh7Z2VvbWV0cnk6X30pXSk7cmV0dXJue2JvdW5kaW5nU3BoZXJlOmMsYXR0cmlidXRlczpUWzBdLmF0dHJpYnV0ZXMsaW5kaWNlczpUWzBdLmluZGljZXN9fWZ1bmN0aW9uIF9FKGUsdCxuLG8sYSxyLGkpe2xldCBkPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHtjZW50ZXI6ZSxzZW1pTWFqb3JBeGlzOnQsc2VtaU1pbm9yQXhpczpuLHJvdGF0aW9uOm8sZ3JhbnVsYXJpdHk6YX0sITEsITApLm91dGVyUG9zaXRpb25zLGM9ZC5sZW5ndGgvMyx1PW5ldyBBcnJheShjKTtmb3IobGV0IGg9MDtoPGM7KytoKXVbaF09cy5mcm9tQXJyYXkoZCxoKjMpO2xldCBsPVNlLmZyb21DYXJ0ZXNpYW5BcnJheSh1LHIsaSk7cmV0dXJuIGwud2lkdGg+ay5QSSYmKGwubm9ydGg9bC5ub3J0aD4wP2suUElfT1ZFUl9UV08tay5FUFNJTE9ONzpsLm5vcnRoLGwuc291dGg9bC5zb3V0aDwwP2suRVBTSUxPTjctay5QSV9PVkVSX1RXTzpsLnNvdXRoLGwuZWFzdD1rLlBJLGwud2VzdD0tay5QSSksbH1mdW5jdGlvbiBicihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsbz1lLnNlbWlNYWpvckF4aXMsYT1lLnNlbWlNaW5vckF4aXMscj1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxpPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxULGY9ZS5oZWlnaHQ/PzAsZD1lLmV4dHJ1ZGVkSGVpZ2h0Pz9mO3RoaXMuX2NlbnRlcj1zLmNsb25lKHQpLHRoaXMuX3NlbWlNYWpvckF4aXM9byx0aGlzLl9zZW1pTWlub3JBeGlzPWEsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUobiksdGhpcy5fcm90YXRpb249ZS5yb3RhdGlvbj8/MCx0aGlzLl9zdFJvdGF0aW9uPWUuc3RSb3RhdGlvbj8/MCx0aGlzLl9oZWlnaHQ9TWF0aC5tYXgoZCxmKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShpKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihkLGYpLHRoaXMuX3NoYWRvd1ZvbHVtZT1lLnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRWxsaXBzZUdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMH1mdW5jdGlvbiBoMyhlKXtsZXQgdD0tZS5fc3RSb3RhdGlvbjtpZih0PT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBvPUthLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHtjZW50ZXI6ZS5fY2VudGVyLHNlbWlNYWpvckF4aXM6ZS5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOmUuX3NlbWlNaW5vckF4aXMscm90YXRpb246ZS5fcm90YXRpb24sZ3JhbnVsYXJpdHk6ZS5fZ3JhbnVsYXJpdHl9LCExLCEwKS5vdXRlclBvc2l0aW9ucyxhPW8ubGVuZ3RoLzMscj1uZXcgQXJyYXkoYSk7Zm9yKGxldCBkPTA7ZDxhOysrZClyW2RdPXMuZnJvbUFycmF5KG8sZCozKTtsZXQgaT1lLl9lbGxpcHNvaWQsZj1lLnJlY3RhbmdsZTtyZXR1cm4gdmUuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMocix0LGksZil9dmFyIGhzLEJwLFVwLHNFLG9vLGZFLHMzLExwLGRFLHVFLGxFLGFoLGhFLG1FLGJFLHVjLG5oLG9oLHlFLEFFLHdFLG1yLHFhLGpwPVgoKCk9PntNdCgpO2p0KCk7SWUoKTtFdCgpO3Z0KCk7bXQoKTtzZSgpO0RwKCk7cWUoKTtrcigpOyR0KCk7ZW4oKTt1bigpO2RjKCk7em8oKTtscigpO25uKCk7R2UoKTtEbigpO2NuKCk7Sm8oKTtfbigpO2tvKCk7aHM9bmV3IHMsQnA9bmV3IHMsVXA9bmV3IHMsc0U9bmV3IHMsb289bmV3IFksZkU9bmV3IEosczM9bmV3IEosTHA9bmV3IFFlLGRFPW5ldyBzLHVFPW5ldyBzLGxFPW5ldyBzLGFoPW5ldyByZSxoRT1uZXcgcyxtRT1uZXcgWSxiRT1uZXcgWTt1Yz1uZXcgcztuaD1uZXcgZ2Usb2g9bmV3IGdlO2JyLnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrOTtici5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHMucGFjayhlLl9jZW50ZXIsdCxuKSxuKz1zLnBhY2tlZExlbmd0aCxxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX3NlbWlNYWpvckF4aXMsdFtuKytdPWUuX3NlbWlNaW5vckF4aXMsdFtuKytdPWUuX3JvdGF0aW9uLHRbbisrXT1lLl9zdFJvdGF0aW9uLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2dyYW51bGFyaXR5LHRbbisrXT1lLl9leHRydWRlZEhlaWdodCx0W24rK109ZS5fc2hhZG93Vm9sdW1lPzE6MCx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07eUU9bmV3IHMsQUU9bmV3IHEsd0U9bmV3IGhlLG1yPXtjZW50ZXI6eUUsZWxsaXBzb2lkOkFFLHZlcnRleEZvcm1hdDp3RSxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07YnIudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89cy51bnBhY2soZSx0LHlFKTt0Kz1zLnBhY2tlZExlbmd0aDtsZXQgYT1xLnVucGFjayhlLHQsQUUpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhlLHQsd0UpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3QrK10sdT1lW3QrK10sbD1lW3QrK10saD1lW3QrK10sbT1lW3QrK109PT0xLGI9ZVt0XTtyZXR1cm4gZyhuKT8obi5fY2VudGVyPXMuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX3NlbWlNYWpvckF4aXM9aSxuLl9zZW1pTWlub3JBeGlzPWYsbi5fcm90YXRpb249ZCxuLl9zdFJvdGF0aW9uPWMsbi5faGVpZ2h0PXUsbi5fZ3JhbnVsYXJpdHk9bCxuLl9leHRydWRlZEhlaWdodD1oLG4uX3NoYWRvd1ZvbHVtZT1tLG4uX29mZnNldEF0dHJpYnV0ZT1iPT09LTE/dm9pZCAwOmIsbik6KG1yLmhlaWdodD11LG1yLmV4dHJ1ZGVkSGVpZ2h0PWgsbXIuZ3JhbnVsYXJpdHk9bCxtci5zdFJvdGF0aW9uPWMsbXIucm90YXRpb249ZCxtci5zZW1pTWFqb3JBeGlzPWksbXIuc2VtaU1pbm9yQXhpcz1mLG1yLnNoYWRvd1ZvbHVtZT1tLG1yLm9mZnNldEF0dHJpYnV0ZT1iPT09LTE/dm9pZCAwOmIsbmV3IGJyKG1yKSl9O2JyLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24oZSx0KXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgbj1lLmNlbnRlcixvPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsYT1lLnNlbWlNYWpvckF4aXMscj1lLnNlbWlNaW5vckF4aXMsaT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxmPWUucm90YXRpb24/PzA7cmV0dXJuIF9FKG4sYSxyLGYsaSxvLHQpfTtici5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtpZihlLl9zZW1pTWFqb3JBeGlzPD0wfHxlLl9zZW1pTWlub3JBeGlzPD0wKXJldHVybjtsZXQgdD1lLl9oZWlnaHQsbj1lLl9leHRydWRlZEhlaWdodCxvPSFrLmVxdWFsc0Vwc2lsb24odCxuLDAsay5FUFNJTE9OMik7ZS5fY2VudGVyPWUuX2VsbGlwc29pZC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUuX2NlbnRlcixlLl9jZW50ZXIpO2xldCBhPXtjZW50ZXI6ZS5fY2VudGVyLHNlbWlNYWpvckF4aXM6ZS5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOmUuX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOmUuX2VsbGlwc29pZCxyb3RhdGlvbjplLl9yb3RhdGlvbixoZWlnaHQ6dCxncmFudWxhcml0eTplLl9ncmFudWxhcml0eSx2ZXJ0ZXhGb3JtYXQ6ZS5fdmVydGV4Rm9ybWF0LHN0Um90YXRpb246ZS5fc3RSb3RhdGlvbn0scjtpZihvKWEuZXh0cnVkZWRIZWlnaHQ9bixhLnNoYWRvd1ZvbHVtZT1lLl9zaGFkb3dWb2x1bWUsYS5vZmZzZXRBdHRyaWJ1dGU9ZS5fb2Zmc2V0QXR0cmlidXRlLHI9bDMoYSk7ZWxzZSBpZihyPWYzKGEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGk9ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsZj1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxkPW5ldyBVaW50OEFycmF5KGkvMykuZmlsbChmKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6ZH0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6ci5hdHRyaWJ1dGVzLGluZGljZXM6ci5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOnIuYm91bmRpbmdTcGhlcmUsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtici5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2dyYW51bGFyaXR5LGE9ZS5fZWxsaXBzb2lkLHI9dChvLGEpLGk9bihvLGEpO3JldHVybiBuZXcgYnIoe2NlbnRlcjplLl9jZW50ZXIsc2VtaU1ham9yQXhpczplLl9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6ZS5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6YSxyb3RhdGlvbjplLl9yb3RhdGlvbixzdFJvdGF0aW9uOmUuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhici5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fcmVjdGFuZ2xlKXx8KHRoaXMuX3JlY3RhbmdsZT1fRSh0aGlzLl9jZW50ZXIsdGhpcy5fc2VtaU1ham9yQXhpcyx0aGlzLl9zZW1pTWlub3JBeGlzLHRoaXMuX3JvdGF0aW9uLHRoaXMuX2dyYW51bGFyaXR5LHRoaXMuX2VsbGlwc29pZCkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMpfHwodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz1oMyh0aGlzKSksdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7cWE9YnJ9KTtmdW5jdGlvbiB6cihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnJhZGl1cyxuPXtjZW50ZXI6ZS5jZW50ZXIsc2VtaU1ham9yQXhpczp0LHNlbWlNaW5vckF4aXM6dCxlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsaGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsZ3JhbnVsYXJpdHk6ZS5ncmFudWxhcml0eSx2ZXJ0ZXhGb3JtYXQ6ZS52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjplLnN0Um90YXRpb24sc2hhZG93Vm9sdW1lOmUuc2hhZG93Vm9sdW1lfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHFhKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZUdlb21ldHJ5In12YXIgRUUsUm8senAsVEU9WCgoKT0+e0llKCk7bXQoKTtzZSgpO2pwKCk7cWUoKTtrbygpO3pyLnBhY2tlZExlbmd0aD1xYS5wYWNrZWRMZW5ndGg7enIucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHFhLnBhY2soZS5fZWxsaXBzZUdlb21ldHJ5LHQsbil9O0VFPW5ldyBxYSh7Y2VudGVyOm5ldyBzLHNlbWlNYWpvckF4aXM6MSxzZW1pTWlub3JBeGlzOjF9KSxSbz17Y2VudGVyOm5ldyBzLHJhZGl1czp2b2lkIDAsZWxsaXBzb2lkOnEuY2xvbmUocS5kZWZhdWx0KSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsdmVydGV4Rm9ybWF0Om5ldyBoZSxzdFJvdGF0aW9uOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwfTt6ci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXFhLnVucGFjayhlLHQsRUUpO3JldHVybiBSby5jZW50ZXI9cy5jbG9uZShvLl9jZW50ZXIsUm8uY2VudGVyKSxSby5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsUm8uZWxsaXBzb2lkKSxSby5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsRUUuX2VsbGlwc29pZCksUm8uaGVpZ2h0PW8uX2hlaWdodCxSby5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxSby5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxSby52ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoby5fdmVydGV4Rm9ybWF0LFJvLnZlcnRleEZvcm1hdCksUm8uc3RSb3RhdGlvbj1vLl9zdFJvdGF0aW9uLFJvLnNoYWRvd1ZvbHVtZT1vLl9zaGFkb3dWb2x1bWUsZyhuKT8oUm8uc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLFJvLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHFhKFJvKSxuKTooUm8ucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHpyKFJvKSl9O3pyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBxYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNlR2VvbWV0cnkpfTt6ci5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2VsbGlwc2VHZW9tZXRyeS5fZ3JhbnVsYXJpdHksYT1lLl9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCxyPXQobyxhKSxpPW4obyxhKTtyZXR1cm4gbmV3IHpyKHtjZW50ZXI6ZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIscmFkaXVzOmUuX2VsbGlwc2VHZW9tZXRyeS5fc2VtaU1ham9yQXhpcyxlbGxpcHNvaWQ6YSxzdFJvdGF0aW9uOmUuX2VsbGlwc2VHZW9tZXRyeS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OnIsaGVpZ2h0OmksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHpyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNlR2VvbWV0cnkudGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7enA9enJ9KTt2YXIgR3A9e307cnQoR3Ase2RlZmF1bHQ6KCk9PmIzfSk7ZnVuY3Rpb24gbTMoZSx0KXtyZXR1cm4gZyh0KSYmKGU9enAudW5wYWNrKGUsdCkpLGUuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPXMuY2xvbmUoZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLGUuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLHpwLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBiMyxWcD1YKCgpPT57SWUoKTtURSgpO3NlKCk7cWUoKTtiMz1tM30pO2Z1bmN0aW9uIHAzKGUpe2xldCB0PWUuY2VudGVyO2xjPXMubXVsdGlwbHlCeVNjYWxhcihlLmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxsYyksZS5oZWlnaHQsbGMpLGxjPXMuYWRkKHQsbGMsbGMpO2xldCBuPW5ldyBnZShsYyxlLnNlbWlNYWpvckF4aXMpLG89S2EuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoZSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYT1uZXcgbnQoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6S2EucmFpc2VQb3NpdGlvbnNUb0hlaWdodChvLGUsITEpfSl9KSxyPW8ubGVuZ3RoLzMsaT1rZS5jcmVhdGVUeXBlZEFycmF5KHIscioyKSxmPTA7Zm9yKGxldCBkPTA7ZDxyOysrZClpW2YrK109ZCxpW2YrK109KGQrMSklcjtyZXR1cm57Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOmEsaW5kaWNlczppfX1mdW5jdGlvbiBnMyhlKXtsZXQgdD1lLmNlbnRlcixuPWUuZWxsaXBzb2lkLG89ZS5zZW1pTWFqb3JBeGlzLGE9cy5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsUkUpLGUuaGVpZ2h0LFJFKTtyaC5jZW50ZXI9cy5hZGQodCxhLHJoLmNlbnRlcikscmgucmFkaXVzPW8sYT1zLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxhKSxlLmV4dHJ1ZGVkSGVpZ2h0LGEpLGloLmNlbnRlcj1zLmFkZCh0LGEsaWguY2VudGVyKSxpaC5yYWRpdXM9bztsZXQgcj1LYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyhlLCExLCEwKS5vdXRlclBvc2l0aW9ucyxpPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpLYS5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KHIsZSwhMCl9KX0pO3I9aS5wb3NpdGlvbi52YWx1ZXM7bGV0IGY9Z2UudW5pb24ocmgsaWgpLGQ9ci5sZW5ndGgvMztpZihnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IGI9bmV3IFVpbnQ4QXJyYXkoZCk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5UT1ApYj1iLmZpbGwoMSwwLGQvMik7ZWxzZXtsZXQgcD1lLm9mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO2I9Yi5maWxsKHApfWkuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfWxldCBjPWUubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNjtjPWsuY2xhbXAoYywwLGQvMik7bGV0IHU9a2UuY3JlYXRlVHlwZWRBcnJheShkLGQqMitjKjIpO2QvPTI7bGV0IGw9MCxoO2ZvcihoPTA7aDxkOysraCl1W2wrK109aCx1W2wrK109KGgrMSklZCx1W2wrK109aCtkLHVbbCsrXT0oaCsxKSVkK2Q7bGV0IG07aWYoYz4wKXtsZXQgYj1NYXRoLm1pbihjLGQpO209TWF0aC5yb3VuZChkL2IpO2xldCBwPU1hdGgubWluKG0qYyxkKTtmb3IoaD0wO2g8cDtoKz1tKXVbbCsrXT1oLHVbbCsrXT1oK2R9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczppLGluZGljZXM6dX19ZnVuY3Rpb24gbXMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5jZW50ZXIsbj1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LG89ZS5zZW1pTWFqb3JBeGlzLGE9ZS5zZW1pTWlub3JBeGlzLHI9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsaT1lLmhlaWdodD8/MCxmPWUuZXh0cnVkZWRIZWlnaHQ/P2k7dGhpcy5fY2VudGVyPXMuY2xvbmUodCksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9YSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj1lLnJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLGkpLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixpKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgoZS5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5In12YXIgUkUsbGMscmgsaWgseEUsT0UsR3IsV2EsSHA9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTtEcCgpO3FlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO0dlKCk7Y24oKTtSRT1uZXcgcyxsYz1uZXcgcztyaD1uZXcgZ2UsaWg9bmV3IGdlO21zLnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCs4O21zLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuX2NlbnRlcix0LG4pLG4rPXMucGFja2VkTGVuZ3RoLHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W24rK109ZS5fc2VtaU1ham9yQXhpcyx0W24rK109ZS5fc2VtaU1pbm9yQXhpcyx0W24rK109ZS5fcm90YXRpb24sdFtuKytdPWUuX2hlaWdodCx0W24rK109ZS5fZ3JhbnVsYXJpdHksdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O3hFPW5ldyBzLE9FPW5ldyBxLEdyPXtjZW50ZXI6eEUsZWxsaXBzb2lkOk9FLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTttcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQseEUpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBhPXEudW5wYWNrKGUsdCxPRSk7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IHI9ZVt0KytdLGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fY2VudGVyPXMuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl9zZW1pTWFqb3JBeGlzPXIsbi5fc2VtaU1pbm9yQXhpcz1pLG4uX3JvdGF0aW9uPWYsbi5faGVpZ2h0PWQsbi5fZ3JhbnVsYXJpdHk9YyxuLl9leHRydWRlZEhlaWdodD11LG4uX251bWJlck9mVmVydGljYWxMaW5lcz1sLG4uX29mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbik6KEdyLmhlaWdodD1kLEdyLmV4dHJ1ZGVkSGVpZ2h0PXUsR3IuZ3JhbnVsYXJpdHk9YyxHci5yb3RhdGlvbj1mLEdyLnNlbWlNYWpvckF4aXM9cixHci5zZW1pTWlub3JBeGlzPWksR3IubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWwsR3Iub2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuZXcgbXMoR3IpKX07bXMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7aWYoZS5fc2VtaU1ham9yQXhpczw9MHx8ZS5fc2VtaU1pbm9yQXhpczw9MClyZXR1cm47bGV0IHQ9ZS5faGVpZ2h0LG49ZS5fZXh0cnVkZWRIZWlnaHQsbz0hay5lcXVhbHNFcHNpbG9uKHQsbiwwLGsuRVBTSUxPTjIpO2UuX2NlbnRlcj1lLl9lbGxpcHNvaWQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLl9jZW50ZXIsZS5fY2VudGVyKTtsZXQgYT17Y2VudGVyOmUuX2NlbnRlcixzZW1pTWFqb3JBeGlzOmUuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczplLl9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDplLl9lbGxpcHNvaWQscm90YXRpb246ZS5fcm90YXRpb24saGVpZ2h0OnQsZ3JhbnVsYXJpdHk6ZS5fZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOmUuX251bWJlck9mVmVydGljYWxMaW5lc30scjtpZihvKWEuZXh0cnVkZWRIZWlnaHQ9bixhLm9mZnNldEF0dHJpYnV0ZT1lLl9vZmZzZXRBdHRyaWJ1dGUscj1nMyhhKTtlbHNlIGlmKHI9cDMoYSksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgaT1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLGQ9bmV3IFVpbnQ4QXJyYXkoaS8zKS5maWxsKGYpO3IuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpkfSl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpyLmF0dHJpYnV0ZXMsaW5kaWNlczpyLmluZGljZXMscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpyLmJvdW5kaW5nU3BoZXJlLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07V2E9bXN9KTtmdW5jdGlvbiBicyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnJhZGl1cyxuPXtjZW50ZXI6ZS5jZW50ZXIsc2VtaU1ham9yQXhpczp0LHNlbWlNaW5vckF4aXM6dCxlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsaGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsZ3JhbnVsYXJpdHk6ZS5ncmFudWxhcml0eSxudW1iZXJPZlZlcnRpY2FsTGluZXM6ZS5udW1iZXJPZlZlcnRpY2FsTGluZXN9O3RoaXMuX2VsbGlwc2VHZW9tZXRyeT1uZXcgV2EobiksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ2lyY2xlT3V0bGluZUdlb21ldHJ5In12YXIgXzMsZmEsS3AsU0U9WCgoKT0+e0llKCk7bXQoKTtzZSgpO0hwKCk7cWUoKTticy5wYWNrZWRMZW5ndGg9V2EucGFja2VkTGVuZ3RoO2JzLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBXYS5wYWNrKGUuX2VsbGlwc2VHZW9tZXRyeSx0LG4pfTtfMz1uZXcgV2Eoe2NlbnRlcjpuZXcgcyxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksZmE9e2NlbnRlcjpuZXcgcyxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpxLmNsb25lKHEuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTticy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPVdhLnVucGFjayhlLHQsXzMpO3JldHVybiBmYS5jZW50ZXI9cy5jbG9uZShvLl9jZW50ZXIsZmEuY2VudGVyKSxmYS5lbGxpcHNvaWQ9cS5jbG9uZShvLl9lbGxpcHNvaWQsZmEuZWxsaXBzb2lkKSxmYS5oZWlnaHQ9by5faGVpZ2h0LGZhLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LGZhLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LGZhLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsZyhuKT8oZmEuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLGZhLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IFdhKGZhKSxuKTooZmEucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IGJzKGZhKSl9O2JzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBXYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNlR2VvbWV0cnkpfTtLcD1ic30pO3ZhciBxcD17fTtydChxcCx7ZGVmYXVsdDooKT0+QTN9KTtmdW5jdGlvbiB5MyhlLHQpe3JldHVybiBnKHQpJiYoZT1LcC51bnBhY2soZSx0KSksZS5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9cy5jbG9uZShlLl9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksZS5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCksS3AuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEEzLFdwPVgoKCk9PntJZSgpO1NFKCk7c2UoKTtxZSgpO0EzPXkzfSk7ZnVuY3Rpb24gdzMoZSx0LG4sbyl7aWYoIWcoZSkpcmV0dXJuO249bj8/ITE7bGV0IGE9ZyhvKSxyPWUubGVuZ3RoO2lmKHI8MilyZXR1cm4gZTtsZXQgaSxmPWVbMF0sZCxjLHU9MCxsPS0xO2ZvcihpPTE7aTxyOysraSlkPWVbaV0sdChmLGQsQ0UpPyhnKGMpfHwoYz1lLnNsaWNlKDAsaSksdT1pLTEsbD0wKSxhJiZvLnB1c2goaSkpOihnKGMpJiYoYy5wdXNoKGQpLHU9aSxhJiYobD1vLmxlbmd0aCkpLGY9ZCk7cmV0dXJuIG4mJnQoZVswXSxlW3ItMV0sQ0UpJiYoYSYmKGcoYyk/by5zcGxpY2UobCwwLHUpOm8ucHVzaChyLTEpKSxnKGMpP2MubGVuZ3RoLT0xOmM9ZS5zbGljZSgwLC0xKSksZyhjKT9jOmV9dmFyIENFLE5uLFhhPVgoKCk9PntzZSgpO0dlKCk7Q0U9ay5FUFNJTE9OMTA7Tm49dzN9KTtmdW5jdGlvbiBMbihlLHQsbixvKXt0aGlzLng9ZT8/MCx0aGlzLnk9dD8/MCx0aGlzLndpZHRoPW4/PzAsdGhpcy5oZWlnaHQ9bz8/MH12YXIgTUUsRTMsVDMsWWEsRGY9WCgoKT0+e2p0KCk7RXQoKTtzZSgpO3FlKCk7a3IoKTtaaSgpO19uKCk7TG4ucGFja2VkTGVuZ3RoPTQ7TG4ucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZS54LHRbbisrXT1lLnksdFtuKytdPWUud2lkdGgsdFtuXT1lLmhlaWdodCx0fTtMbi51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IExuKSxuLng9ZVt0KytdLG4ueT1lW3QrK10sbi53aWR0aD1lW3QrK10sbi5oZWlnaHQ9ZVt0XSxufTtMbi5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IExuKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiB0Lng9MCx0Lnk9MCx0LndpZHRoPTAsdC5oZWlnaHQ9MCx0O2xldCBuPWUubGVuZ3RoLG89ZVswXS54LGE9ZVswXS55LHI9ZVswXS54LGk9ZVswXS55O2ZvcihsZXQgZj0xO2Y8bjtmKyspe2xldCBkPWVbZl0sYz1kLngsdT1kLnk7bz1NYXRoLm1pbihjLG8pLHI9TWF0aC5tYXgoYyxyKSxhPU1hdGgubWluKHUsYSksaT1NYXRoLm1heCh1LGkpfXJldHVybiB0Lng9byx0Lnk9YSx0LndpZHRoPXItbyx0LmhlaWdodD1pLWEsdH07TUU9bmV3IGlvLEUzPW5ldyByZSxUMz1uZXcgcmU7TG4uZnJvbVJlY3RhbmdsZT1mdW5jdGlvbihlLHQsbil7aWYoZyhuKXx8KG49bmV3IExuKSwhZyhlKSlyZXR1cm4gbi54PTAsbi55PTAsbi53aWR0aD0wLG4uaGVpZ2h0PTAsbjtNRS5fZWxsaXBzb2lkPXEuZGVmYXVsdCx0PXQ/P01FO2xldCBvPXQucHJvamVjdChTZS5zb3V0aHdlc3QoZSxFMykpLGE9dC5wcm9qZWN0KFNlLm5vcnRoZWFzdChlLFQzKSk7cmV0dXJuIFkuc3VidHJhY3QoYSxvLGEpLG4ueD1vLngsbi55PW8ueSxuLndpZHRoPWEueCxuLmhlaWdodD1hLnksbn07TG4uY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0Lng9ZS54LHQueT1lLnksdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQpOm5ldyBMbihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfTtMbi51bmlvbj1mdW5jdGlvbihlLHQsbil7ZyhuKXx8KG49bmV3IExuKTtsZXQgbz1NYXRoLm1pbihlLngsdC54KSxhPU1hdGgubWluKGUueSx0LnkpLHI9TWF0aC5tYXgoZS54K2Uud2lkdGgsdC54K3Qud2lkdGgpLGk9TWF0aC5tYXgoZS55K2UuaGVpZ2h0LHQueSt0LmhlaWdodCk7cmV0dXJuIG4ueD1vLG4ueT1hLG4ud2lkdGg9ci1vLG4uaGVpZ2h0PWktYSxufTtMbi5leHBhbmQ9ZnVuY3Rpb24oZSx0LG4pe249TG4uY2xvbmUoZSxuKTtsZXQgbz10Lngtbi54LGE9dC55LW4ueTtyZXR1cm4gbz5uLndpZHRoP24ud2lkdGg9bzpvPDAmJihuLndpZHRoLT1vLG4ueD10LngpLGE+bi5oZWlnaHQ/bi5oZWlnaHQ9YTphPDAmJihuLmhlaWdodC09YSxuLnk9dC55KSxufTtMbi5pbnRlcnNlY3Q9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLngsbz1lLnksYT10Lngscj10Lnk7cmV0dXJuIG4+YSt0LndpZHRofHxuK2Uud2lkdGg8YXx8bytlLmhlaWdodDxyfHxvPnIrdC5oZWlnaHQ/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O0xuLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS54PT09dC54JiZlLnk9PT10LnkmJmUud2lkdGg9PT10LndpZHRoJiZlLmhlaWdodD09PXQuaGVpZ2h0fTtMbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIExuLmNsb25lKHRoaXMsZSl9O0xuLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIExuLmludGVyc2VjdCh0aGlzLGUpfTtMbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBMbi5lcXVhbHModGhpcyxlKX07WWE9TG59KTtmdW5jdGlvbiBnbyhlLHQsbil7dGhpcy5taW5pbXVtPXMuY2xvbmUoZT8/cy5aRVJPKSx0aGlzLm1heGltdW09cy5jbG9uZSh0Pz9zLlpFUk8pLGcobik/bj1zLmNsb25lKG4pOm49cy5taWRwb2ludCh0aGlzLm1pbmltdW0sdGhpcy5tYXhpbXVtLG5ldyBzKSx0aGlzLmNlbnRlcj1ufXZhciBjaCx1byxBaT1YKCgpPT57SWUoKTtzZSgpO1ppKCk7Z28uZnJvbUNvcm5lcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pfHwobj1uZXcgZ28pLG4ubWluaW11bT1zLmNsb25lKGUsbi5taW5pbXVtKSxuLm1heGltdW09cy5jbG9uZSh0LG4ubWF4aW11bSksbi5jZW50ZXI9cy5taWRwb2ludChlLHQsbi5jZW50ZXIpLG59O2dvLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSx0KXtpZihnKHQpfHwodD1uZXcgZ28pLCFnKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuIHQubWluaW11bT1zLmNsb25lKHMuWkVSTyx0Lm1pbmltdW0pLHQubWF4aW11bT1zLmNsb25lKHMuWkVSTyx0Lm1heGltdW0pLHQuY2VudGVyPXMuY2xvbmUocy5aRVJPLHQuY2VudGVyKSx0O2xldCBuPWVbMF0ueCxvPWVbMF0ueSxhPWVbMF0ueixyPWVbMF0ueCxpPWVbMF0ueSxmPWVbMF0ueixkPWUubGVuZ3RoO2ZvcihsZXQgbD0xO2w8ZDtsKyspe2xldCBoPWVbbF0sbT1oLngsYj1oLnkscD1oLno7bj1NYXRoLm1pbihtLG4pLHI9TWF0aC5tYXgobSxyKSxvPU1hdGgubWluKGIsbyksaT1NYXRoLm1heChiLGkpLGE9TWF0aC5taW4ocCxhKSxmPU1hdGgubWF4KHAsZil9bGV0IGM9dC5taW5pbXVtO2MueD1uLGMueT1vLGMuej1hO2xldCB1PXQubWF4aW11bTtyZXR1cm4gdS54PXIsdS55PWksdS56PWYsdC5jZW50ZXI9cy5taWRwb2ludChjLHUsdC5jZW50ZXIpLHR9O2dvLmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC5taW5pbXVtPXMuY2xvbmUoZS5taW5pbXVtLHQubWluaW11bSksdC5tYXhpbXVtPXMuY2xvbmUoZS5tYXhpbXVtLHQubWF4aW11bSksdC5jZW50ZXI9cy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksdCk6bmV3IGdvKGUubWluaW11bSxlLm1heGltdW0sZS5jZW50ZXIpfTtnby5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJnMuZXF1YWxzKGUuY2VudGVyLHQuY2VudGVyKSYmcy5lcXVhbHMoZS5taW5pbXVtLHQubWluaW11bSkmJnMuZXF1YWxzKGUubWF4aW11bSx0Lm1heGltdW0pfTtjaD1uZXcgcztnby5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbihlLHQpe2NoPXMuc3VidHJhY3QoZS5tYXhpbXVtLGUubWluaW11bSxjaCk7bGV0IG49cy5tdWx0aXBseUJ5U2NhbGFyKGNoLC41LGNoKSxvPXQubm9ybWFsLGE9bi54Kk1hdGguYWJzKG8ueCkrbi55Kk1hdGguYWJzKG8ueSkrbi56Kk1hdGguYWJzKG8ueikscj1zLmRvdChlLmNlbnRlcixvKSt0LmRpc3RhbmNlO3JldHVybiByLWE+MD9Tbi5JTlNJREU6cithPDA/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O2dvLmludGVyc2VjdEF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5taW5pbXVtLng8PXQubWF4aW11bS54JiZlLm1heGltdW0ueD49dC5taW5pbXVtLngmJmUubWluaW11bS55PD10Lm1heGltdW0ueSYmZS5tYXhpbXVtLnk+PXQubWluaW11bS55JiZlLm1pbmltdW0uejw9dC5tYXhpbXVtLnomJmUubWF4aW11bS56Pj10Lm1pbmltdW0uen07Z28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBnby5jbG9uZSh0aGlzLGUpfTtnby5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvLmludGVyc2VjdFBsYW5lKHRoaXMsZSl9O2dvLnByb3RvdHlwZS5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKGUpe3JldHVybiBnby5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94KHRoaXMsZSl9O2dvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvLmVxdWFscyh0aGlzLGUpfTt1bz1nb30pO2Z1bmN0aW9uIHByKGUsdCl7dD10Pz9xLmRlZmF1bHQsZT10LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSk7bGV0IG49Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoZSx0KTt0aGlzLl9lbGxpcHNvaWQ9dCx0aGlzLl9vcmlnaW49ZSx0aGlzLl94QXhpcz1zLmZyb21DYXJ0ZXNpYW40KCQuZ2V0Q29sdW1uKG4sMCxYcCkpLHRoaXMuX3lBeGlzPXMuZnJvbUNhcnRlc2lhbjQoJC5nZXRDb2x1bW4obiwxLFhwKSk7bGV0IG89cy5mcm9tQ2FydGVzaWFuNCgkLmdldENvbHVtbihuLDIsWHApKTt0aGlzLl9wbGFuZT1zbi5mcm9tUG9pbnROb3JtYWwoZSxvKX12YXIgWHAsUjMsTkUsc2gseDMseG8scHM9WCgoKT0+e0FpKCk7anQoKTtJZSgpO2dhKCk7c2UoKTtxZSgpO3BpKCk7cG4oKTtnaSgpO05mKCk7c3IoKTtYcD1uZXcgZHQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHIucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7UjM9bmV3IHVvO3ByLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj11by5mcm9tUG9pbnRzKGUsUjMpO3JldHVybiBuZXcgcHIobi5jZW50ZXIsdCl9O05FPW5ldyBkcixzaD1uZXcgcztwci5wcm90b3R5cGUucHJvamVjdFBvaW50T250b1BsYW5lPWZ1bmN0aW9uKGUsdCl7bGV0IG49TkU7bi5vcmlnaW49ZSxzLm5vcm1hbGl6ZShlLG4uZGlyZWN0aW9uKTtsZXQgbz1uby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHNoKTtpZihnKG8pfHwocy5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89bm8ucmF5UGxhbmUobix0aGlzLl9wbGFuZSxzaCkpLGcobykpe2xldCBhPXMuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbykscj1zLmRvdCh0aGlzLl94QXhpcyxhKSxpPXMuZG90KHRoaXMuX3lBeGlzLGEpO3JldHVybiBnKHQpPyh0Lng9cix0Lnk9aSx0KTpuZXcgWShyLGkpfX07cHIucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvUGxhbmU9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1bXSk7bGV0IG49MCxvPWUubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKyspe2xldCByPXRoaXMucHJvamVjdFBvaW50T250b1BsYW5lKGVbYV0sdFtuXSk7ZyhyKSYmKHRbbl09cixuKyspfXJldHVybiB0Lmxlbmd0aD1uLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFkpO2xldCBuPU5FO24ub3JpZ2luPWUscy5jbG9uZSh0aGlzLl9wbGFuZS5ub3JtYWwsbi5kaXJlY3Rpb24pO2xldCBvPW5vLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsc2gpO2cobyl8fChzLm5lZ2F0ZShuLmRpcmVjdGlvbixuLmRpcmVjdGlvbiksbz1uby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHNoKSk7bGV0IGE9cy5zdWJ0cmFjdChvLHRoaXMuX29yaWdpbixvKSxyPXMuZG90KHRoaXMuX3hBeGlzLGEpLGk9cy5kb3QodGhpcy5feUF4aXMsYSk7cmV0dXJuIHQueD1yLHQueT1pLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzVG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbihlLHQpe2codCl8fCh0PVtdKTtsZXQgbj1lLmxlbmd0aDt0Lmxlbmd0aD1uO2ZvcihsZXQgbz0wO288bjtvKyspdFtvXT10aGlzLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoZVtvXSx0W29dKTtyZXR1cm4gdH07eDM9bmV3IHM7cHIucHJvdG90eXBlLnByb2plY3RQb2ludE9udG9FbGxpcHNvaWQ9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgcyk7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG89dGhpcy5fb3JpZ2luLGE9dGhpcy5feEF4aXMscj10aGlzLl95QXhpcyxpPXgzO3JldHVybiBzLm11bHRpcGx5QnlTY2FsYXIoYSxlLngsaSksdD1zLmFkZChvLGksdCkscy5tdWx0aXBseUJ5U2NhbGFyKHIsZS55LGkpLHMuYWRkKHQsaSx0KSxuLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZSh0LHQpLHR9O3ByLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b0VsbGlwc29pZD1mdW5jdGlvbihlLHQpe2xldCBuPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bjp0PW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47KytvKXRbb109dGhpcy5wcm9qZWN0UG9pbnRPbnRvRWxsaXBzb2lkKGVbb10sdFtvXSk7cmV0dXJuIHR9O3hvPXByfSk7ZnVuY3Rpb24gVXQoZSx0KXt0aGlzLmNlbnRlcj1zLmNsb25lKGU/P3MuWkVSTyksdGhpcy5oYWxmQXhlcz1KLmNsb25lKHQ/P0ouWkVSTyl9ZnVuY3Rpb24gSUUoZSx0LG4sbyxhLHIsaSxmLGQsYyx1KXtnKHUpfHwodT1uZXcgVXQpO2xldCBsPXUuaGFsZkF4ZXM7Si5zZXRDb2x1bW4obCwwLHQsbCksSi5zZXRDb2x1bW4obCwxLG4sbCksSi5zZXRDb2x1bW4obCwyLG8sbCk7bGV0IGg9REU7aC54PShhK3IpLzIsaC55PShpK2YpLzIsaC56PShkK2MpLzI7bGV0IG09djM7bS54PShyLWEpLzIsbS55PShmLWkpLzIsbS56PShjLWQpLzI7bGV0IGI9dS5jZW50ZXI7cmV0dXJuIGg9Si5tdWx0aXBseUJ5VmVjdG9yKGwsaCxoKSxzLmFkZChlLGgsYiksSi5tdWx0aXBseUJ5U2NhbGUobCxtLGwpLHV9dmFyIE8zLFMzLEMzLE0zLE4zLEkzLFAzLGszLERFLHYzLFBFLEYzLEQzLEIzLFUzLEwzLGozLHozLGtFLEczLHZFLFYzLEgzLEszLHEzLFczLFgzLFkzLEozLFozLFEzLCQzLGVQLHRQLG5QLG9QLEJFLFVFLExFLGFQLEZFLHJQLGlQLGNQLHNQLGZQLGRQLHVQLGxQLHluLHdpPVgoKCk9PntNdCgpO2p0KCk7SWUoKTtFdCgpO3NlKCk7cWUoKTtwcygpO1ppKCk7bGYoKTtHZSgpO0RuKCk7cG4oKTtnaSgpO19uKCk7VXQucGFja2VkTGVuZ3RoPXMucGFja2VkTGVuZ3RoK0oucGFja2VkTGVuZ3RoO1V0LnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuY2VudGVyLHQsbiksSi5wYWNrKGUuaGFsZkF4ZXMsdCxuK3MucGFja2VkTGVuZ3RoKSx0fTtVdC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQ/PzAsZyhuKXx8KG49bmV3IFV0KSxzLnVucGFjayhlLHQsbi5jZW50ZXIpLEoudW5wYWNrKGUsdCtzLnBhY2tlZExlbmd0aCxuLmhhbGZBeGVzKSxufTtPMz1uZXcgcyxTMz1uZXcgcyxDMz1uZXcgcyxNMz1uZXcgcyxOMz1uZXcgcyxJMz1uZXcgcyxQMz1uZXcgSixrMz17dW5pdGFyeTpuZXcgSixkaWFnb25hbDpuZXcgSn07VXQuZnJvbVBvaW50cz1mdW5jdGlvbihlLHQpe2lmKGcodCl8fCh0PW5ldyBVdCksIWcoZSl8fGUubGVuZ3RoPT09MClyZXR1cm4gdC5oYWxmQXhlcz1KLlpFUk8sdC5jZW50ZXI9cy5aRVJPLHQ7bGV0IG4sbz1lLmxlbmd0aCxhPXMuY2xvbmUoZVswXSxPMyk7Zm9yKG49MTtuPG87bisrKXMuYWRkKGEsZVtuXSxhKTtsZXQgcj0xL287cy5tdWx0aXBseUJ5U2NhbGFyKGEscixhKTtsZXQgaT0wLGY9MCxkPTAsYz0wLHU9MCxsPTAsaDtmb3Iobj0wO248bztuKyspaD1zLnN1YnRyYWN0KGVbbl0sYSxTMyksaSs9aC54KmgueCxmKz1oLngqaC55LGQrPWgueCpoLnosYys9aC55KmgueSx1Kz1oLnkqaC56LGwrPWgueipoLno7aSo9cixmKj1yLGQqPXIsYyo9cix1Kj1yLGwqPXI7bGV0IG09UDM7bVswXT1pLG1bMV09ZixtWzJdPWQsbVszXT1mLG1bNF09YyxtWzVdPXUsbVs2XT1kLG1bN109dSxtWzhdPWw7bGV0IGI9Si5jb21wdXRlRWlnZW5EZWNvbXBvc2l0aW9uKG0sazMpLHA9Si5jbG9uZShiLnVuaXRhcnksdC5oYWxmQXhlcykseT1KLmdldENvbHVtbihwLDAsTTMpLEU9Si5nZXRDb2x1bW4ocCwxLE4zKSxfPUouZ2V0Q29sdW1uKHAsMixJMyksVD0tTnVtYmVyLk1BWF9WQUxVRSx3PS1OdW1iZXIuTUFYX1ZBTFVFLFI9LU51bWJlci5NQVhfVkFMVUUsUz1OdW1iZXIuTUFYX1ZBTFVFLEM9TnVtYmVyLk1BWF9WQUxVRSxJPU51bWJlci5NQVhfVkFMVUU7Zm9yKG49MDtuPG87bisrKWg9ZVtuXSxUPU1hdGgubWF4KHMuZG90KHksaCksVCksdz1NYXRoLm1heChzLmRvdChFLGgpLHcpLFI9TWF0aC5tYXgocy5kb3QoXyxoKSxSKSxTPU1hdGgubWluKHMuZG90KHksaCksUyksQz1NYXRoLm1pbihzLmRvdChFLGgpLEMpLEk9TWF0aC5taW4ocy5kb3QoXyxoKSxJKTt5PXMubXVsdGlwbHlCeVNjYWxhcih5LC41KihTK1QpLHkpLEU9cy5tdWx0aXBseUJ5U2NhbGFyKEUsLjUqKEMrdyksRSksXz1zLm11bHRpcGx5QnlTY2FsYXIoXywuNSooSStSKSxfKTtsZXQgTj1zLmFkZCh5LEUsdC5jZW50ZXIpO3MuYWRkKE4sXyxOKTtsZXQgUD1DMztyZXR1cm4gUC54PVQtUyxQLnk9dy1DLFAuej1SLUkscy5tdWx0aXBseUJ5U2NhbGFyKFAsLjUsUCksSi5tdWx0aXBseUJ5U2NhbGUodC5oYWxmQXhlcyxQLHQuaGFsZkF4ZXMpLHR9O0RFPW5ldyBzLHYzPW5ldyBzO1BFPW5ldyByZSxGMz1uZXcgcyxEMz1uZXcgcmUsQjM9bmV3IHJlLFUzPW5ldyByZSxMMz1uZXcgcmUsajM9bmV3IHJlLHozPW5ldyBzLGtFPW5ldyBzLEczPW5ldyBzLHZFPW5ldyBzLFYzPW5ldyBzLEgzPW5ldyBZLEszPW5ldyBZLHEzPW5ldyBZLFczPW5ldyBZLFgzPW5ldyBZLFkzPW5ldyBzLEozPW5ldyBzLFozPW5ldyBzLFEzPW5ldyBzLCQzPW5ldyBZLGVQPW5ldyBzLHRQPW5ldyBzLG5QPW5ldyBzLG9QPW5ldyBzbihzLlVOSVRfWCwwKTtVdC5mcm9tUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8sYSl7dD10Pz8wLG49bj8/MCxvPW8/P3EuZGVmYXVsdDtsZXQgcixpLGYsZCxjLHUsbDtpZihlLndpZHRoPD1rLlBJKXtsZXQgQz1TZS5jZW50ZXIoZSxQRSksST1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEMsRjMpLE49bmV3IHhvKEksbyk7bD1OLnBsYW5lO2xldCBQPUMubG9uZ2l0dWRlLHY9ZS5zb3V0aDwwJiZlLm5vcnRoPjA/MDpDLmxhdGl0dWRlLEE9cmUuZnJvbVJhZGlhbnMoUCxlLm5vcnRoLG4sRDMpLHg9cmUuZnJvbVJhZGlhbnMoZS53ZXN0LGUubm9ydGgsbixCMyksTT1yZS5mcm9tUmFkaWFucyhlLndlc3QsdixuLFUzKSxGPXJlLmZyb21SYWRpYW5zKGUud2VzdCxlLnNvdXRoLG4sTDMpLFU9cmUuZnJvbVJhZGlhbnMoUCxlLnNvdXRoLG4sajMpLHo9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihBLHozKSxEPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oeCxrRSksRz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE0sRzMpLEg9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihGLHZFKSxPPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oVSxWMyksWj1OLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoeixIMyksb2U9Ti5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKEQsSzMpLGNlPU4ucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShHLHEzKSxkZT1OLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoSCxXMyksZWU9Ti5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKE8sWDMpO3JldHVybiByPU1hdGgubWluKG9lLngsY2UueCxkZS54KSxpPS1yLGQ9TWF0aC5tYXgob2UueSxaLnkpLGY9TWF0aC5taW4oZGUueSxlZS55KSx4LmhlaWdodD1GLmhlaWdodD10LEQ9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih4LGtFKSxIPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRix2RSksYz1NYXRoLm1pbihzbi5nZXRQb2ludERpc3RhbmNlKGwsRCksc24uZ2V0UG9pbnREaXN0YW5jZShsLEgpKSx1PW4sSUUoTi5vcmlnaW4sTi54QXhpcyxOLnlBeGlzLE4uekF4aXMscixpLGYsZCxjLHUsYSl9bGV0IGg9ZS5zb3V0aD4wLG09ZS5ub3J0aDwwLGI9aD9lLnNvdXRoOm0/ZS5ub3J0aDowLHA9U2UuY2VudGVyKGUsUEUpLmxvbmdpdHVkZSx5PXMuZnJvbVJhZGlhbnMocCxiLG4sbyxZMyk7eS56PTA7bGV0IF89TWF0aC5hYnMoeS54KTxrLkVQU0lMT04xMCYmTWF0aC5hYnMoeS55KTxrLkVQU0lMT04xMD9zLlVOSVRfWDpzLm5vcm1hbGl6ZSh5LEozKSxUPXMuVU5JVF9aLHc9cy5jcm9zcyhfLFQsWjMpO2w9c24uZnJvbVBvaW50Tm9ybWFsKHksXyxvUCk7bGV0IFI9cy5mcm9tUmFkaWFucyhwK2suUElfT1ZFUl9UV08sYixuLG8sUTMpO2k9cy5kb3Qoc24ucHJvamVjdFBvaW50T250b1BsYW5lKGwsUiwkMyksdykscj0taSxkPXMuZnJvbVJhZGlhbnMoMCxlLm5vcnRoLG0/dDpuLG8sZVApLnosZj1zLmZyb21SYWRpYW5zKDAsZS5zb3V0aCxoP3Q6bixvLHRQKS56O2xldCBTPXMuZnJvbVJhZGlhbnMoZS5lYXN0LGIsbixvLG5QKTtyZXR1cm4gYz1zbi5nZXRQb2ludERpc3RhbmNlKGwsUyksdT0wLElFKHksdyxULF8scixpLGYsZCxjLHUsYSl9O1V0LmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgVXQpLHQuY2VudGVyPSQuZ2V0VHJhbnNsYXRpb24oZSx0LmNlbnRlciksdC5oYWxmQXhlcz0kLmdldE1hdHJpeDMoZSx0LmhhbGZBeGVzKSx0LmhhbGZBeGVzPUoubXVsdGlwbHlCeVNjYWxhcih0LmhhbGZBeGVzLC41LHQuaGFsZkF4ZXMpLHR9O1V0LmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8ocy5jbG9uZShlLmNlbnRlcix0LmNlbnRlciksSi5jbG9uZShlLmhhbGZBeGVzLHQuaGFsZkF4ZXMpLHQpOm5ldyBVdChlLmNlbnRlcixlLmhhbGZBeGVzKX07VXQuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmNlbnRlcixvPXQubm9ybWFsLGE9ZS5oYWxmQXhlcyxyPW8ueCxpPW8ueSxmPW8ueixkPU1hdGguYWJzKHIqYVtKLkNPTFVNTjBST1cwXStpKmFbSi5DT0xVTU4wUk9XMV0rZiphW0ouQ09MVU1OMFJPVzJdKStNYXRoLmFicyhyKmFbSi5DT0xVTU4xUk9XMF0raSphW0ouQ09MVU1OMVJPVzFdK2YqYVtKLkNPTFVNTjFST1cyXSkrTWF0aC5hYnMociphW0ouQ09MVU1OMlJPVzBdK2kqYVtKLkNPTFVNTjJST1cxXStmKmFbSi5DT0xVTU4yUk9XMl0pLGM9cy5kb3QobyxuKSt0LmRpc3RhbmNlO3JldHVybiBjPD0tZD9Tbi5PVVRTSURFOmM+PWQ/U24uSU5TSURFOlNuLklOVEVSU0VDVElOR307QkU9bmV3IHMsVUU9bmV3IHMsTEU9bmV3IHMsYVA9bmV3IHMsRkU9bmV3IHMsclA9bmV3IHM7VXQuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24oZSx0KXtsZXQgbj1zLnN1YnRyYWN0KHQsZS5jZW50ZXIsREUpLG89ZS5oYWxmQXhlcyxhPUouZ2V0Q29sdW1uKG8sMCxCRSkscj1KLmdldENvbHVtbihvLDEsVUUpLGk9Si5nZXRDb2x1bW4obywyLExFKSxmPXMubWFnbml0dWRlKGEpLGQ9cy5tYWduaXR1ZGUociksYz1zLm1hZ25pdHVkZShpKSx1PSEwLGw9ITAsaD0hMDtmPjA/cy5kaXZpZGVCeVNjYWxhcihhLGYsYSk6dT0hMSxkPjA/cy5kaXZpZGVCeVNjYWxhcihyLGQscik6bD0hMSxjPjA/cy5kaXZpZGVCeVNjYWxhcihpLGMsaSk6aD0hMTtsZXQgbT0hdSshbCshaCxiLHAseTtpZihtPT09MSl7bGV0IHc9YTtiPXIscD1pLGw/aHx8KHc9aSxwPWEpOih3PXIsYj1hKSx5PXMuY3Jvc3MoYixwLEZFKSx3PT09YT9hPXk6dz09PXI/cj15Onc9PT1pJiYoaT15KX1lbHNlIGlmKG09PT0yKXtiPWEsbD9iPXI6aCYmKGI9aSk7bGV0IHc9cy5VTklUX1k7dy5lcXVhbHNFcHNpbG9uKGIsay5FUFNJTE9OMykmJih3PXMuVU5JVF9YKSxwPXMuY3Jvc3MoYix3LGFQKSxzLm5vcm1hbGl6ZShwLHApLHk9cy5jcm9zcyhiLHAsRkUpLHMubm9ybWFsaXplKHkseSksYj09PWE/KHI9cCxpPXkpOmI9PT1yPyhpPXAsYT15KTpiPT09aSYmKGE9cCxyPXkpfWVsc2UgbT09PTMmJihhPXMuVU5JVF9YLHI9cy5VTklUX1ksaT1zLlVOSVRfWik7bGV0IEU9clA7RS54PXMuZG90KG4sYSksRS55PXMuZG90KG4sciksRS56PXMuZG90KG4saSk7bGV0IF89MCxUO3JldHVybiBFLng8LWY/KFQ9RS54K2YsXys9VCpUKTpFLng+ZiYmKFQ9RS54LWYsXys9VCpUKSxFLnk8LWQ/KFQ9RS55K2QsXys9VCpUKTpFLnk+ZCYmKFQ9RS55LWQsXys9VCpUKSxFLno8LWM/KFQ9RS56K2MsXys9VCpUKTpFLno+YyYmKFQ9RS56LWMsXys9VCpUKSxffTtpUD1uZXcgcyxjUD1uZXcgcztVdC5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24oZSx0LG4sbyl7ZyhvKXx8KG89bmV3IEVvKTtsZXQgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1lLmNlbnRlcixmPWUuaGFsZkF4ZXMsZD1KLmdldENvbHVtbihmLDAsQkUpLGM9Si5nZXRDb2x1bW4oZiwxLFVFKSx1PUouZ2V0Q29sdW1uKGYsMixMRSksbD1zLmFkZChkLGMsaVApO3MuYWRkKGwsdSxsKSxzLmFkZChsLGksbCk7bGV0IGg9cy5zdWJ0cmFjdChsLHQsY1ApLG09cy5kb3QobixoKTtyZXR1cm4gYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxzLmFkZChpLGQsbCkscy5hZGQobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuYWRkKGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLmFkZChsLHUsbCkscy5zdWJ0cmFjdChsLHQsaCksbT1zLmRvdChuLGgpLGE9TWF0aC5taW4obSxhKSxyPU1hdGgubWF4KG0scikscy5hZGQoaSxkLGwpLHMuc3VidHJhY3QobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuc3VidHJhY3QoaSxkLGwpLHMuYWRkKGwsYyxsKSxzLmFkZChsLHUsbCkscy5zdWJ0cmFjdChsLHQsaCksbT1zLmRvdChuLGgpLGE9TWF0aC5taW4obSxhKSxyPU1hdGgubWF4KG0scikscy5zdWJ0cmFjdChpLGQsbCkscy5hZGQobCxjLGwpLHMuc3VidHJhY3QobCx1LGwpLHMuc3VidHJhY3QobCx0LGgpLG09cy5kb3QobixoKSxhPU1hdGgubWluKG0sYSkscj1NYXRoLm1heChtLHIpLHMuc3VidHJhY3QoaSxkLGwpLHMuc3VidHJhY3QobCxjLGwpLHMuYWRkKGwsdSxsKSxzLnN1YnRyYWN0KGwsdCxoKSxtPXMuZG90KG4saCksYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxzLnN1YnRyYWN0KGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLnN1YnRyYWN0KGwsdSxsKSxzLnN1YnRyYWN0KGwsdCxoKSxtPXMuZG90KG4saCksYT1NYXRoLm1pbihtLGEpLHI9TWF0aC5tYXgobSxyKSxvLnN0YXJ0PWEsby5zdG9wPXIsb307c1A9bmV3IHMsZlA9bmV3IHMsZFA9bmV3IHM7VXQuY29tcHV0ZUNvcm5lcnM9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1bbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHMsbmV3IHNdKTtsZXQgbj1lLmNlbnRlcixvPWUuaGFsZkF4ZXMsYT1KLmdldENvbHVtbihvLDAsc1ApLHI9Si5nZXRDb2x1bW4obywxLGZQKSxpPUouZ2V0Q29sdW1uKG8sMixkUCk7cmV0dXJuIHMuY2xvbmUobix0WzBdKSxzLnN1YnRyYWN0KHRbMF0sYSx0WzBdKSxzLnN1YnRyYWN0KHRbMF0scix0WzBdKSxzLnN1YnRyYWN0KHRbMF0saSx0WzBdKSxzLmNsb25lKG4sdFsxXSkscy5zdWJ0cmFjdCh0WzFdLGEsdFsxXSkscy5zdWJ0cmFjdCh0WzFdLHIsdFsxXSkscy5hZGQodFsxXSxpLHRbMV0pLHMuY2xvbmUobix0WzJdKSxzLnN1YnRyYWN0KHRbMl0sYSx0WzJdKSxzLmFkZCh0WzJdLHIsdFsyXSkscy5zdWJ0cmFjdCh0WzJdLGksdFsyXSkscy5jbG9uZShuLHRbM10pLHMuc3VidHJhY3QodFszXSxhLHRbM10pLHMuYWRkKHRbM10scix0WzNdKSxzLmFkZCh0WzNdLGksdFszXSkscy5jbG9uZShuLHRbNF0pLHMuYWRkKHRbNF0sYSx0WzRdKSxzLnN1YnRyYWN0KHRbNF0scix0WzRdKSxzLnN1YnRyYWN0KHRbNF0saSx0WzRdKSxzLmNsb25lKG4sdFs1XSkscy5hZGQodFs1XSxhLHRbNV0pLHMuc3VidHJhY3QodFs1XSxyLHRbNV0pLHMuYWRkKHRbNV0saSx0WzVdKSxzLmNsb25lKG4sdFs2XSkscy5hZGQodFs2XSxhLHRbNl0pLHMuYWRkKHRbNl0scix0WzZdKSxzLnN1YnRyYWN0KHRbNl0saSx0WzZdKSxzLmNsb25lKG4sdFs3XSkscy5hZGQodFs3XSxhLHRbN10pLHMuYWRkKHRbN10scix0WzddKSxzLmFkZCh0WzddLGksdFs3XSksdH07dVA9bmV3IEo7VXQuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3ICQpO2xldCBuPWUuY2VudGVyLG89Si5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlKGUuaGFsZkF4ZXMsMix1UCk7cmV0dXJuICQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obyxuLHQpfTtsUD1uZXcgZ2U7VXQuaXNPY2NsdWRlZD1mdW5jdGlvbihlLHQpe2xldCBuPWdlLmZyb21PcmllbnRlZEJvdW5kaW5nQm94KGUsbFApO3JldHVybiF0LmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKG4pfTtVdC5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFV0LmludGVyc2VjdFBsYW5lKHRoaXMsZSl9O1V0LnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbihlKXtyZXR1cm4gVXQuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyxlKX07VXQucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFV0LmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLGUsdCxuKX07VXQucHJvdG90eXBlLmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBVdC5jb21wdXRlQ29ybmVycyh0aGlzLGUpfTtVdC5wcm90b3R5cGUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBVdC5jb21wdXRlVHJhbnNmb3JtYXRpb24odGhpcyxlKX07VXQucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFV0LmlzT2NjbHVkZWQodGhpcyxlKX07VXQuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZzLmVxdWFscyhlLmNlbnRlcix0LmNlbnRlcikmJkouZXF1YWxzKGUuaGFsZkF4ZXMsdC5oYWxmQXhlcyl9O1V0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gVXQuY2xvbmUodGhpcyxlKX07VXQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gVXQuZXF1YWxzKHRoaXMsZSl9O3luPVV0fSk7ZnVuY3Rpb24gSEUoZSx0LG4sbyxhKXtsZXQgcj1zLnN1YnRyYWN0KGUsdCxoUCksaT1zLmRvdChuLHIpLGY9cy5kb3QobyxyKTtyZXR1cm4gWS5mcm9tRWxlbWVudHMoaSxmLGEpfXZhciBCZixoUCxqRSx6RSxHRSxWRSxncyxZcD1YKCgpPT57anQoKTtJZSgpO0RuKCk7d2koKTtCZj17fSxoUD1uZXcgcyxqRT1uZXcgcyx6RT1uZXcgcyxHRT1uZXcgcyxWRT1uZXcgeW47QmYudmFsaWRPdXRsaW5lPWZ1bmN0aW9uKGUpe2xldCBuPXluLmZyb21Qb2ludHMoZSxWRSkuaGFsZkF4ZXMsbz1KLmdldENvbHVtbihuLDAsakUpLGE9Si5nZXRDb2x1bW4obiwxLHpFKSxyPUouZ2V0Q29sdW1uKG4sMixHRSksaT1zLm1hZ25pdHVkZShvKSxmPXMubWFnbml0dWRlKGEpLGQ9cy5tYWduaXR1ZGUocik7cmV0dXJuIShpPT09MCYmKGY9PT0wfHxkPT09MCl8fGY9PT0wJiZkPT09MCl9O0JmLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cz1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT15bi5mcm9tUG9pbnRzKGUsVkUpLHI9YS5oYWxmQXhlcyxpPUouZ2V0Q29sdW1uKHIsMCxqRSksZj1KLmdldENvbHVtbihyLDEsekUpLGQ9Si5nZXRDb2x1bW4ociwyLEdFKSxjPXMubWFnbml0dWRlKGkpLHU9cy5tYWduaXR1ZGUoZiksbD1zLm1hZ25pdHVkZShkKSxoPU1hdGgubWluKGMsdSxsKTtpZihjPT09MCYmKHU9PT0wfHxsPT09MCl8fHU9PT0wJiZsPT09MClyZXR1cm4hMTtsZXQgbSxiO3JldHVybihoPT09dXx8aD09PWwpJiYobT1pKSxoPT09Yz9tPWY6aD09PWwmJihiPWYpLChoPT09Y3x8aD09PXUpJiYoYj1kKSxzLm5vcm1hbGl6ZShtLG4pLHMubm9ybWFsaXplKGIsbykscy5jbG9uZShhLmNlbnRlcix0KSwhMH07QmYuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe2xldCBhPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxvLmxlbmd0aDtyKyspYVtyXT1IRShvW3JdLGUsdCxuKTtyZXR1cm4gYX19O0JmLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIEhFKG8sZSx0LG4sYSl9fTtncz1CZn0pO3ZhciBtUCx3dCxoYz1YKCgpPT57bVA9e05PTkU6MCxHRU9ERVNJQzoxLFJIVU1COjJ9LHd0PU9iamVjdC5mcmVlemUobVApfSk7ZnVuY3Rpb24gWnAoZSx0LG4pe2lmKGU9PT0wKXJldHVybiB0Km47bGV0IG89ZSplLGE9bypvLHI9YSpvLGk9cipvLGY9aSpvLGQ9ZipvLGM9bix1PU1hdGguc2luKDIqYyksbD1NYXRoLnNpbig0KmMpLGg9TWF0aC5zaW4oNipjKSxtPU1hdGguc2luKDgqYyksYj1NYXRoLnNpbigxMCpjKSxwPU1hdGguc2luKDEyKmMpO3JldHVybiB0KigoMS1vLzQtMyphLzY0LTUqci8yNTYtMTc1KmkvMTYzODQtNDQxKmYvNjU1MzYtNDg1MSpkLzEwNDg1NzYpKmMtKDMqby84KzMqYS8zMis0NSpyLzEwMjQrMTA1KmkvNDA5NisyMjA1KmYvMTMxMDcyKzYyMzcqZC81MjQyODgpKnUrKDE1KmEvMjU2KzQ1KnIvMTAyNCs1MjUqaS8xNjM4NCsxNTc1KmYvNjU1MzYrMTU1OTI1KmQvODM4ODYwOCkqbC0oMzUqci8zMDcyKzE3NSppLzEyMjg4KzM2NzUqZi8yNjIxNDQrMTM0NzUqZC8xMDQ4NTc2KSpoKygzMTUqaS8xMzEwNzIrMjIwNSpmLzUyNDI4OCs0MzY1OSpkLzgzODg2MDgpKm0tKDY5MypmLzEzMTA3MjArNjIzNypkLzUyNDI4ODApKmIrMTAwMSpkLzgzODg2MDgqcCl9ZnVuY3Rpb24gYlAoZSx0LG4pe2xldCBvPWUvbjtpZih0PT09MClyZXR1cm4gbztsZXQgYT1vKm8scj1hKm8saT1yKm8sZj10LGQ9ZipmLGM9ZCpkLHU9YypkLGw9dSpkLGg9bCpkLG09aCpkLGI9TWF0aC5zaW4oMipvKSxwPU1hdGguY29zKDIqbykseT1NYXRoLnNpbig0Km8pLEU9TWF0aC5jb3MoNCpvKSxfPU1hdGguc2luKDYqbyksVD1NYXRoLmNvcyg2Km8pLHc9TWF0aC5zaW4oOCpvKSxSPU1hdGguY29zKDgqbyksUz1NYXRoLnNpbigxMCpvKSxDPU1hdGguY29zKDEwKm8pLEk9TWF0aC5zaW4oMTIqbyk7cmV0dXJuIG8rbypkLzQrNypvKmMvNjQrMTUqbyp1LzI1Nis1NzkqbypsLzE2Mzg0KzE1MTUqbypoLzY1NTM2KzE2ODM3Km8qbS8xMDQ4NTc2KygzKm8qYy8xNis0NSpvKnUvMjU2LW8qKDMyKmEtNTYxKSpsLzQwOTYtbyooMjMyKmEtMTY3NykqaC8xNjM4NCtvKigzOTk5ODUtOTA1NjAqYSs1MTIqaSkqbS81MjQyODgwKSpwKygyMSpvKnUvMjU2KzQ4MypvKmwvNDA5Ni1vKigyMjQqYS0xOTY5KSpoLzE2Mzg0LW8qKDMzMTUyKmEtMTEyNTk5KSptLzEwNDg1NzYpKkUrKDE1MSpvKmwvNDA5Nis0NjgxKm8qaC82NTUzNisxNDc5Km8qbS8xNjM4NC00NTMqciptLzMyNzY4KSpUKygxMDk3Km8qaC82NTUzNis0Mjc4MypvKm0vMTA0ODU3NikqUis4MDExKm8qbS8xMDQ4NTc2KkMrKDMqZC84KzMqYy8xNisyMTMqdS8yMDQ4LTMqYSp1LzY0KzI1NSpsLzQwOTYtMzMqYSpsLzUxMisyMDg2MSpoLzUyNDI4OC0zMyphKmgvNTEyK2kqaC8xMDI0KzI4MjczKm0vMTA0ODU3Ni00NzEqYSptLzgxOTIrOSppKm0vNDA5NikqYisoMjEqYy8yNTYrMjEqdS8yNTYrNTMzKmwvODE5Mi0yMSphKmwvNTEyKzE5NypoLzQwOTYtMzE1KmEqaC80MDk2KzU4NDAzOSptLzE2Nzc3MjE2LTEyNTE3KmEqbS8xMzEwNzIrNyppKm0vMjA0OCkqeSsoMTUxKnUvNjE0NCsxNTEqbC80MDk2KzUwMTkqaC8xMzEwNzItNDUzKmEqaC8xNjM4NCsyNjk2NSptLzc4NjQzMi04NjA3KmEqbS8xMzEwNzIpKl8rKDEwOTcqbC8xMzEwNzIrMTA5NypoLzY1NTM2KzIyNTc5NyptLzEwNDg1NzYwLTEwOTcqYSptLzY1NTM2KSp3Kyg4MDExKmgvMjYyMTQ0MCs4MDExKm0vMTA0ODU3NikqUysyOTMzOTMqbS8yNTE2NTgyNDAqSX1mdW5jdGlvbiBfcyhlLHQpe2lmKGU9PT0wKXJldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooay5QSV9PVkVSX1RXTyt0KSkpO2xldCBuPWUqTWF0aC5zaW4odCk7cmV0dXJuIE1hdGgubG9nKE1hdGgudGFuKC41KihrLlBJX09WRVJfVFdPK3QpKSktZS8yKk1hdGgubG9nKCgxK24pLygxLW4pKX1mdW5jdGlvbiBwUChlLHQsbixvLGEpe2xldCByPV9zKGUuX2VsbGlwdGljaXR5LG4pLGk9X3MoZS5fZWxsaXB0aWNpdHksYSk7cmV0dXJuIE1hdGguYXRhbjIoay5uZWdhdGl2ZVBpVG9QaShvLXQpLGktcil9ZnVuY3Rpb24gZ1AoZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS5faGVhZGluZyxkPXItbyxjPTA7aWYoay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGYpLGsuUElfT1ZFUl9UV08say5FUFNJTE9OOCkpaWYodD09PW4pYz10Kk1hdGguY29zKGEpKmsubmVnYXRpdmVQaVRvUGkoZCk7ZWxzZXtsZXQgdT1NYXRoLnNpbihhKTtjPXQqTWF0aC5jb3MoYSkqay5uZWdhdGl2ZVBpVG9QaShkKS9NYXRoLnNxcnQoMS1lLl9lbGxpcHRpY2l0eVNxdWFyZWQqdSp1KX1lbHNle2xldCB1PVpwKGUuX2VsbGlwdGljaXR5LHQsYSk7Yz0oWnAoZS5fZWxsaXB0aWNpdHksdCxpKS11KS9NYXRoLmNvcyhmKX1yZXR1cm4gTWF0aC5hYnMoYyl9ZnVuY3Rpb24gS0UoZSx0LG4sbyl7bGV0IGE9cy5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih0LEpwKSxfUCkscj1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sSnApLEpwKSxpPW8ubWF4aW11bVJhZGl1cyxmPW8ubWluaW11bVJhZGl1cyxkPWkqaSxjPWYqZjtlLl9lbGxpcHRpY2l0eVNxdWFyZWQ9KGQtYykvZCxlLl9lbGxpcHRpY2l0eT1NYXRoLnNxcnQoZS5fZWxsaXB0aWNpdHlTcXVhcmVkKSxlLl9zdGFydD1yZS5jbG9uZSh0LGUuX3N0YXJ0KSxlLl9zdGFydC5oZWlnaHQ9MCxlLl9lbmQ9cmUuY2xvbmUobixlLl9lbmQpLGUuX2VuZC5oZWlnaHQ9MCxlLl9oZWFkaW5nPXBQKGUsdC5sb25naXR1ZGUsdC5sYXRpdHVkZSxuLmxvbmdpdHVkZSxuLmxhdGl0dWRlKSxlLl9kaXN0YW5jZT1nUChlLG8ubWF4aW11bVJhZGl1cyxvLm1pbmltdW1SYWRpdXMsdC5sb25naXR1ZGUsdC5sYXRpdHVkZSxuLmxvbmdpdHVkZSxuLmxhdGl0dWRlKX1mdW5jdGlvbiBxRShlLHQsbixvLGEscil7aWYobj09PTApcmV0dXJuIHJlLmNsb25lKGUscik7bGV0IGk9YSphLGYsZCxjO2lmKE1hdGguYWJzKGsuUElfT1ZFUl9UV08tTWF0aC5hYnModCkpPmsuRVBTSUxPTjgpe2xldCB1PVpwKGEsbyxlLmxhdGl0dWRlKSxsPW4qTWF0aC5jb3ModCksaD11K2w7aWYoZD1iUChoLGEsbyksTWF0aC5hYnModCk8ay5FUFNJTE9OMTApZj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlKTtlbHNle2xldCBtPV9zKGEsZS5sYXRpdHVkZSksYj1fcyhhLGQpO2M9TWF0aC50YW4odCkqKGItbSksZj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlK2MpfX1lbHNle2Q9ZS5sYXRpdHVkZTtsZXQgdTtpZihhPT09MCl1PW8qTWF0aC5jb3MoZS5sYXRpdHVkZSk7ZWxzZXtsZXQgbD1NYXRoLnNpbihlLmxhdGl0dWRlKTt1PW8qTWF0aC5jb3MoZS5sYXRpdHVkZSkvTWF0aC5zcXJ0KDEtaSpsKmwpfWM9bi91LHQ+MD9mPWsubmVnYXRpdmVQaVRvUGkoZS5sb25naXR1ZGUrYyk6Zj1rLm5lZ2F0aXZlUGlUb1BpKGUubG9uZ2l0dWRlLWMpfXJldHVybiBnKHIpPyhyLmxvbmdpdHVkZT1mLHIubGF0aXR1ZGU9ZCxyLmhlaWdodD0wLHIpOm5ldyByZShmLGQsMCl9ZnVuY3Rpb24gVnIoZSx0LG4pe2xldCBvPW4/P3EuZGVmYXVsdDt0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdGFydD1uZXcgcmUsdGhpcy5fZW5kPW5ldyByZSx0aGlzLl9oZWFkaW5nPXZvaWQgMCx0aGlzLl9kaXN0YW5jZT12b2lkIDAsdGhpcy5fZWxsaXB0aWNpdHk9dm9pZCAwLHRoaXMuX2VsbGlwdGljaXR5U3F1YXJlZD12b2lkIDAsZyhlKSYmZyh0KSYmS0UodGhpcyxlLHQsbyl9dmFyIF9QLEpwLGVhLFVmPVgoKCk9PntJZSgpO0V0KCk7c2UoKTtxZSgpO0dlKCk7X1A9bmV3IHMsSnA9bmV3IHM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVnIucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZGluZ319fSk7VnIuZnJvbVN0YXJ0SGVhZGluZ0Rpc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9bz8/cS5kZWZhdWx0LGk9ci5tYXhpbXVtUmFkaXVzLGY9ci5taW5pbXVtUmFkaXVzLGQ9aSppLGM9ZipmLHU9TWF0aC5zcXJ0KChkLWMpL2QpO3Q9ay5uZWdhdGl2ZVBpVG9QaSh0KTtsZXQgbD1xRShlLHQsbixyLm1heGltdW1SYWRpdXMsdSk7cmV0dXJuIWcoYSl8fGcobykmJiFvLmVxdWFscyhhLmVsbGlwc29pZCk/bmV3IFZyKGUsbCxyKTooYS5zZXRFbmRQb2ludHMoZSxsKSxhKX07VnIucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbihlLHQpe0tFKHRoaXMsZSx0LHRoaXMuX2VsbGlwc29pZCl9O1ZyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKGUqdGhpcy5fZGlzdGFuY2UsdCl9O1ZyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFFKHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsZSx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSx0KX07VnIucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLGE9TWF0aC5hYnMobykscj10aGlzLl9zdGFydDtpZihlPWsubmVnYXRpdmVQaVRvUGkoZSksay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGUpLE1hdGguUEksay5FUFNJTE9OMTQpJiYoZT1rLnNpZ24oci5sb25naXR1ZGUpKk1hdGguUEkpLGcodCl8fCh0PW5ldyByZSksTWF0aC5hYnMoay5QSV9PVkVSX1RXTy1hKTw9ay5FUFNJTE9OOClyZXR1cm4gdC5sb25naXR1ZGU9ZSx0LmxhdGl0dWRlPXIubGF0aXR1ZGUsdC5oZWlnaHQ9MCx0O2lmKGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhrLlBJX09WRVJfVFdPLWEpLGsuUElfT1ZFUl9UV08say5FUFNJTE9OOCkpcmV0dXJuIGsuZXF1YWxzRXBzaWxvbihlLHIubG9uZ2l0dWRlLGsuRVBTSUxPTjEyKT92b2lkIDA6KHQubG9uZ2l0dWRlPWUsdC5sYXRpdHVkZT1rLlBJX09WRVJfVFdPKmsuc2lnbihrLlBJX09WRVJfVFdPLW8pLHQuaGVpZ2h0PTAsdCk7bGV0IGk9ci5sYXRpdHVkZSxmPW4qTWF0aC5zaW4oaSksZD1NYXRoLnRhbiguNSooay5QSV9PVkVSX1RXTytpKSkqTWF0aC5leHAoKGUtci5sb25naXR1ZGUpL01hdGgudGFuKG8pKSxjPSgxK2YpLygxLWYpLHU9ci5sYXRpdHVkZSxsO2Rve2w9dTtsZXQgaD1uKk1hdGguc2luKGwpLG09KDEraCkvKDEtaCk7dT0yKk1hdGguYXRhbihkKk1hdGgucG93KG0vYyxuLzIpKS1rLlBJX09WRVJfVFdPfXdoaWxlKCFrLmVxdWFsc0Vwc2lsb24odSxsLGsuRVBTSUxPTjEyKSk7cmV0dXJuIHQubG9uZ2l0dWRlPWUsdC5sYXRpdHVkZT11LHQuaGVpZ2h0PTAsdH07VnIucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTGF0aXR1ZGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLl9lbGxpcHRpY2l0eSxvPXRoaXMuX2hlYWRpbmcsYT10aGlzLl9zdGFydDtpZihrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMobyksay5QSV9PVkVSX1RXTyxrLkVQU0lMT044KSlyZXR1cm47bGV0IHI9X3MobixhLmxhdGl0dWRlKSxpPV9zKG4sZSksZj1NYXRoLnRhbihvKSooaS1yKSxkPWsubmVnYXRpdmVQaVRvUGkoYS5sb25naXR1ZGUrZik7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWQsdC5sYXRpdHVkZT1lLHQuaGVpZ2h0PTAsdCk6bmV3IHJlKGQsZSwwKX07ZWE9VnJ9KTtmdW5jdGlvbiB5UChlLHQpe3RoaXMucG9zaXRpb25zPWcoZSk/ZTpbXSx0aGlzLmhvbGVzPWcodCk/dDpbXX12YXIgV0UsWEU9WCgoKT0+e3NlKCk7V0U9eVB9KTtmdW5jdGlvbiBlMChlLHQsbj0yKXtsZXQgbz10JiZ0Lmxlbmd0aCxhPW8/dFswXSpuOmUubGVuZ3RoLHI9SkUoZSwwLGEsbiwhMCksaT1bXTtpZighcnx8ci5uZXh0PT09ci5wcmV2KXJldHVybiBpO2xldCBmLGQsYztpZihvJiYocj1SUChlLHQscixuKSksZS5sZW5ndGg+ODAqbil7Zj1lWzBdLGQ9ZVsxXTtsZXQgdT1mLGw9ZDtmb3IobGV0IGg9bjtoPGE7aCs9bil7bGV0IG09ZVtoXSxiPWVbaCsxXTttPGYmJihmPW0pLGI8ZCYmKGQ9YiksbT51JiYodT1tKSxiPmwmJihsPWIpfWM9TWF0aC5tYXgodS1mLGwtZCksYz1jIT09MD8zMjc2Ny9jOjB9cmV0dXJuIGpmKHIsaSxuLGYsZCxjLDApLGl9ZnVuY3Rpb24gSkUoZSx0LG4sbyxhKXtsZXQgcjtpZihhPT09RlAoZSx0LG4sbyk+MClmb3IobGV0IGk9dDtpPG47aSs9bylyPVlFKGkvb3wwLGVbaV0sZVtpKzFdLHIpO2Vsc2UgZm9yKGxldCBpPW4tbztpPj10O2ktPW8pcj1ZRShpL298MCxlW2ldLGVbaSsxXSxyKTtyZXR1cm4gciYmeXMocixyLm5leHQpJiYoR2Yocikscj1yLm5leHQpLHJ9ZnVuY3Rpb24gbWMoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgbj1lLG87ZG8gaWYobz0hMSwhbi5zdGVpbmVyJiYoeXMobixuLm5leHQpfHxqbihuLnByZXYsbixuLm5leHQpPT09MCkpe2lmKEdmKG4pLG49dD1uLnByZXYsbj09PW4ubmV4dClicmVhaztvPSEwfWVsc2Ugbj1uLm5leHQ7d2hpbGUob3x8biE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGpmKGUsdCxuLG8sYSxyLGkpe2lmKCFlKXJldHVybjshaSYmciYmTVAoZSxvLGEscik7bGV0IGY9ZTtmb3IoO2UucHJldiE9PWUubmV4dDspe2xldCBkPWUucHJldixjPWUubmV4dDtpZihyP3dQKGUsbyxhLHIpOkFQKGUpKXt0LnB1c2goZC5pLGUuaSxjLmkpLEdmKGUpLGU9Yy5uZXh0LGY9Yy5uZXh0O2NvbnRpbnVlfWlmKGU9YyxlPT09Zil7aT9pPT09MT8oZT1FUChtYyhlKSx0KSxqZihlLHQsbixvLGEsciwyKSk6aT09PTImJlRQKGUsdCxuLG8sYSxyKTpqZihtYyhlKSx0LG4sbyxhLHIsMSk7YnJlYWt9fX1mdW5jdGlvbiBBUChlKXtsZXQgdD1lLnByZXYsbj1lLG89ZS5uZXh0O2lmKGpuKHQsbixvKT49MClyZXR1cm4hMTtsZXQgYT10Lngscj1uLngsaT1vLngsZj10LnksZD1uLnksYz1vLnksdT1NYXRoLm1pbihhLHIsaSksbD1NYXRoLm1pbihmLGQsYyksaD1NYXRoLm1heChhLHIsaSksbT1NYXRoLm1heChmLGQsYyksYj1vLm5leHQ7Zm9yKDtiIT09dDspe2lmKGIueD49dSYmYi54PD1oJiZiLnk+PWwmJmIueTw9bSYmTGYoYSxmLHIsZCxpLGMsYi54LGIueSkmJmpuKGIucHJldixiLGIubmV4dCk+PTApcmV0dXJuITE7Yj1iLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gd1AoZSx0LG4sbyl7bGV0IGE9ZS5wcmV2LHI9ZSxpPWUubmV4dDtpZihqbihhLHIsaSk+PTApcmV0dXJuITE7bGV0IGY9YS54LGQ9ci54LGM9aS54LHU9YS55LGw9ci55LGg9aS55LG09TWF0aC5taW4oZixkLGMpLGI9TWF0aC5taW4odSxsLGgpLHA9TWF0aC5tYXgoZixkLGMpLHk9TWF0aC5tYXgodSxsLGgpLEU9UXAobSxiLHQsbixvKSxfPVFwKHAseSx0LG4sbyksVD1lLnByZXZaLHc9ZS5uZXh0Wjtmb3IoO1QmJlQuej49RSYmdyYmdy56PD1fOyl7aWYoVC54Pj1tJiZULng8PXAmJlQueT49YiYmVC55PD15JiZUIT09YSYmVCE9PWkmJkxmKGYsdSxkLGwsYyxoLFQueCxULnkpJiZqbihULnByZXYsVCxULm5leHQpPj0wfHwoVD1ULnByZXZaLHcueD49bSYmdy54PD1wJiZ3Lnk+PWImJncueTw9eSYmdyE9PWEmJnchPT1pJiZMZihmLHUsZCxsLGMsaCx3Lngsdy55KSYmam4ody5wcmV2LHcsdy5uZXh0KT49MCkpcmV0dXJuITE7dz13Lm5leHRafWZvcig7VCYmVC56Pj1FOyl7aWYoVC54Pj1tJiZULng8PXAmJlQueT49YiYmVC55PD15JiZUIT09YSYmVCE9PWkmJkxmKGYsdSxkLGwsYyxoLFQueCxULnkpJiZqbihULnByZXYsVCxULm5leHQpPj0wKXJldHVybiExO1Q9VC5wcmV2Wn1mb3IoO3cmJncuejw9Xzspe2lmKHcueD49bSYmdy54PD1wJiZ3Lnk+PWImJncueTw9eSYmdyE9PWEmJnchPT1pJiZMZihmLHUsZCxsLGMsaCx3Lngsdy55KSYmam4ody5wcmV2LHcsdy5uZXh0KT49MClyZXR1cm4hMTt3PXcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gRVAoZSx0KXtsZXQgbj1lO2Rve2xldCBvPW4ucHJldixhPW4ubmV4dC5uZXh0OyF5cyhvLGEpJiZRRShvLG4sbi5uZXh0LGEpJiZ6ZihvLGEpJiZ6ZihhLG8pJiYodC5wdXNoKG8uaSxuLmksYS5pKSxHZihuKSxHZihuLm5leHQpLG49ZT1hKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIG1jKG4pfWZ1bmN0aW9uIFRQKGUsdCxuLG8sYSxyKXtsZXQgaT1lO2Rve2xldCBmPWkubmV4dC5uZXh0O2Zvcig7ZiE9PWkucHJldjspe2lmKGkuaSE9PWYuaSYmUFAoaSxmKSl7bGV0IGQ9JEUoaSxmKTtpPW1jKGksaS5uZXh0KSxkPW1jKGQsZC5uZXh0KSxqZihpLHQsbixvLGEsciwwKSxqZihkLHQsbixvLGEsciwwKTtyZXR1cm59Zj1mLm5leHR9aT1pLm5leHR9d2hpbGUoaSE9PWUpfWZ1bmN0aW9uIFJQKGUsdCxuLG8pe2xldCBhPVtdO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKyl7bGV0IGY9dFtyXSpvLGQ9cjxpLTE/dFtyKzFdKm86ZS5sZW5ndGgsYz1KRShlLGYsZCxvLCExKTtjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxhLnB1c2goSVAoYykpfWEuc29ydCh4UCk7Zm9yKGxldCByPTA7cjxhLmxlbmd0aDtyKyspbj1PUChhW3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIHhQKGUsdCl7bGV0IG49ZS54LXQueDtpZihuPT09MCYmKG49ZS55LXQueSxuPT09MCkpe2xldCBvPShlLm5leHQueS1lLnkpLyhlLm5leHQueC1lLngpLGE9KHQubmV4dC55LXQueSkvKHQubmV4dC54LXQueCk7bj1vLWF9cmV0dXJuIG59ZnVuY3Rpb24gT1AoZSx0KXtsZXQgbj1TUChlLHQpO2lmKCFuKXJldHVybiB0O2xldCBvPSRFKG4sZSk7cmV0dXJuIG1jKG8sby5uZXh0KSxtYyhuLG4ubmV4dCl9ZnVuY3Rpb24gU1AoZSx0KXtsZXQgbj10LG89ZS54LGE9ZS55LHI9LTEvMCxpO2lmKHlzKGUsbikpcmV0dXJuIG47ZG97aWYoeXMoZSxuLm5leHQpKXJldHVybiBuLm5leHQ7aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe2xldCBsPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKGw8PW8mJmw+ciYmKHI9bCxpPW4ueDxuLm5leHQueD9uOm4ubmV4dCxsPT09bykpcmV0dXJuIGl9bj1uLm5leHR9d2hpbGUobiE9PXQpO2lmKCFpKXJldHVybiBudWxsO2xldCBmPWksZD1pLngsYz1pLnksdT0xLzA7bj1pO2Rve2lmKG8+PW4ueCYmbi54Pj1kJiZvIT09bi54JiZaRShhPGM/bzpyLGEsZCxjLGE8Yz9yOm8sYSxuLngsbi55KSl7bGV0IGw9TWF0aC5hYnMoYS1uLnkpLyhvLW4ueCk7emYobixlKSYmKGw8dXx8bD09PXUmJihuLng+aS54fHxuLng9PT1pLngmJkNQKGksbikpKSYmKGk9bix1PWwpfW49bi5uZXh0fXdoaWxlKG4hPT1mKTtyZXR1cm4gaX1mdW5jdGlvbiBDUChlLHQpe3JldHVybiBqbihlLnByZXYsZSx0LnByZXYpPDAmJmpuKHQubmV4dCxlLGUubmV4dCk8MH1mdW5jdGlvbiBNUChlLHQsbixvKXtsZXQgYT1lO2RvIGEuej09PTAmJihhLno9UXAoYS54LGEueSx0LG4sbykpLGEucHJldlo9YS5wcmV2LGEubmV4dFo9YS5uZXh0LGE9YS5uZXh0O3doaWxlKGEhPT1lKTthLnByZXZaLm5leHRaPW51bGwsYS5wcmV2Wj1udWxsLE5QKGEpfWZ1bmN0aW9uIE5QKGUpe2xldCB0LG49MTtkb3tsZXQgbz1lLGE7ZT1udWxsO2xldCByPW51bGw7Zm9yKHQ9MDtvOyl7dCsrO2xldCBpPW8sZj0wO2ZvcihsZXQgYz0wO2M8biYmKGYrKyxpPWkubmV4dFosISFpKTtjKyspO2xldCBkPW47Zm9yKDtmPjB8fGQ+MCYmaTspZiE9PTAmJihkPT09MHx8IWl8fG8uejw9aS56KT8oYT1vLG89by5uZXh0WixmLS0pOihhPWksaT1pLm5leHRaLGQtLSkscj9yLm5leHRaPWE6ZT1hLGEucHJldlo9cixyPWE7bz1pfXIubmV4dFo9bnVsbCxuKj0yfXdoaWxlKHQ+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gUXAoZSx0LG4sbyxhKXtyZXR1cm4gZT0oZS1uKSphfDAsdD0odC1vKSphfDAsZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIElQKGUpe2xldCB0PWUsbj1lO2RvKHQueDxuLnh8fHQueD09PW4ueCYmdC55PG4ueSkmJihuPXQpLHQ9dC5uZXh0O3doaWxlKHQhPT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBaRShlLHQsbixvLGEscixpLGYpe3JldHVybihhLWkpKih0LWYpPj0oZS1pKSooci1mKSYmKGUtaSkqKG8tZik+PShuLWkpKih0LWYpJiYobi1pKSooci1mKT49KGEtaSkqKG8tZil9ZnVuY3Rpb24gTGYoZSx0LG4sbyxhLHIsaSxmKXtyZXR1cm4hKGU9PT1pJiZ0PT09ZikmJlpFKGUsdCxuLG8sYSxyLGksZil9ZnVuY3Rpb24gUFAoZSx0KXtyZXR1cm4gZS5uZXh0LmkhPT10LmkmJmUucHJldi5pIT09dC5pJiYha1AoZSx0KSYmKHpmKGUsdCkmJnpmKHQsZSkmJnZQKGUsdCkmJihqbihlLnByZXYsZSx0LnByZXYpfHxqbihlLHQucHJldix0KSl8fHlzKGUsdCkmJmpuKGUucHJldixlLGUubmV4dCk+MCYmam4odC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBqbihlLHQsbil7cmV0dXJuKHQueS1lLnkpKihuLngtdC54KS0odC54LWUueCkqKG4ueS10LnkpfWZ1bmN0aW9uIHlzKGUsdCl7cmV0dXJuIGUueD09PXQueCYmZS55PT09dC55fWZ1bmN0aW9uIFFFKGUsdCxuLG8pe2xldCBhPWRoKGpuKGUsdCxuKSkscj1kaChqbihlLHQsbykpLGk9ZGgoam4obixvLGUpKSxmPWRoKGpuKG4sbyx0KSk7cmV0dXJuISEoYSE9PXImJmkhPT1mfHxhPT09MCYmZmgoZSxuLHQpfHxyPT09MCYmZmgoZSxvLHQpfHxpPT09MCYmZmgobixlLG8pfHxmPT09MCYmZmgobix0LG8pKX1mdW5jdGlvbiBmaChlLHQsbil7cmV0dXJuIHQueDw9TWF0aC5tYXgoZS54LG4ueCkmJnQueD49TWF0aC5taW4oZS54LG4ueCkmJnQueTw9TWF0aC5tYXgoZS55LG4ueSkmJnQueT49TWF0aC5taW4oZS55LG4ueSl9ZnVuY3Rpb24gZGgoZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfWZ1bmN0aW9uIGtQKGUsdCl7bGV0IG49ZTtkb3tpZihuLmkhPT1lLmkmJm4ubmV4dC5pIT09ZS5pJiZuLmkhPT10LmkmJm4ubmV4dC5pIT09dC5pJiZRRShuLG4ubmV4dCxlLHQpKXJldHVybiEwO249bi5uZXh0fXdoaWxlKG4hPT1lKTtyZXR1cm4hMX1mdW5jdGlvbiB6ZihlLHQpe3JldHVybiBqbihlLnByZXYsZSxlLm5leHQpPDA/am4oZSx0LGUubmV4dCk+PTAmJmpuKGUsZS5wcmV2LHQpPj0wOmpuKGUsdCxlLnByZXYpPDB8fGpuKGUsZS5uZXh0LHQpPDB9ZnVuY3Rpb24gdlAoZSx0KXtsZXQgbj1lLG89ITEsYT0oZS54K3QueCkvMixyPShlLnkrdC55KS8yO2RvIG4ueT5yIT1uLm5leHQueT5yJiZuLm5leHQueSE9PW4ueSYmYTwobi5uZXh0Lngtbi54KSooci1uLnkpLyhuLm5leHQueS1uLnkpK24ueCYmKG89IW8pLG49bi5uZXh0O3doaWxlKG4hPT1lKTtyZXR1cm4gb31mdW5jdGlvbiAkRShlLHQpe2xldCBuPSRwKGUuaSxlLngsZS55KSxvPSRwKHQuaSx0LngsdC55KSxhPWUubmV4dCxyPXQucHJldjtyZXR1cm4gZS5uZXh0PXQsdC5wcmV2PWUsbi5uZXh0PWEsYS5wcmV2PW4sby5uZXh0PW4sbi5wcmV2PW8sci5uZXh0PW8sby5wcmV2PXIsb31mdW5jdGlvbiBZRShlLHQsbixvKXtsZXQgYT0kcChlLHQsbik7cmV0dXJuIG8/KGEubmV4dD1vLm5leHQsYS5wcmV2PW8sby5uZXh0LnByZXY9YSxvLm5leHQ9YSk6KGEucHJldj1hLGEubmV4dD1hKSxhfWZ1bmN0aW9uIEdmKGUpe2UubmV4dC5wcmV2PWUucHJldixlLnByZXYubmV4dD1lLm5leHQsZS5wcmV2WiYmKGUucHJldloubmV4dFo9ZS5uZXh0WiksZS5uZXh0WiYmKGUubmV4dFoucHJldlo9ZS5wcmV2Wil9ZnVuY3Rpb24gJHAoZSx0LG4pe3JldHVybntpOmUseDp0LHk6bixwcmV2Om51bGwsbmV4dDpudWxsLHo6MCxwcmV2WjpudWxsLG5leHRaOm51bGwsc3RlaW5lcjohMX19ZnVuY3Rpb24gRlAoZSx0LG4sbyl7bGV0IGE9MDtmb3IobGV0IHI9dCxpPW4tbztyPG47cis9bylhKz0oZVtpXS1lW3JdKSooZVtyKzFdK2VbaSsxXSksaT1yO3JldHVybiBhfXZhciBlVD1YKCgpPT57fSk7dmFyIHVoLHZvLGJjPVgoKCk9PntvYygpO3VoPXtDTE9DS1dJU0U6UGUuQ1csQ09VTlRFUl9DTE9DS1dJU0U6UGUuQ0NXfTt1aC52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXVoLkNMT0NLV0lTRXx8ZT09PXVoLkNPVU5URVJfQ0xPQ0tXSVNFfTt2bz1PYmplY3QuZnJlZXplKHVoKX0pO3ZhciBEUCxCUCxFaSxhVCxyVCxpVCx0VCxuVCxvVCxIcixjVCxzVCxmVCxBcyxVUCxMUCxqUCx0MCxTdCxKYT1YKCgpPT57ZVQoKTtqdCgpO0llKCk7RXQoKTt2dCgpO3NlKCk7cWUoKTtVZigpOyR0KCk7ZW4oKTtHZSgpO2NuKCk7YmMoKTtEUD1uZXcgcyxCUD1uZXcgcyxFaT17fTtFaS5jb21wdXRlQXJlYTJEPWZ1bmN0aW9uKGUpe2xldCB0PWUubGVuZ3RoLG49MDtmb3IobGV0IG89dC0xLGE9MDthPHQ7bz1hKyspe2xldCByPWVbb10saT1lW2FdO24rPXIueCppLnktaS54KnIueX1yZXR1cm4gbiouNX07RWkuY29tcHV0ZVdpbmRpbmdPcmRlcjJEPWZ1bmN0aW9uKGUpe3JldHVybiBFaS5jb21wdXRlQXJlYTJEKGUpPjA/dm8uQ09VTlRFUl9DTE9DS1dJU0U6dm8uQ0xPQ0tXSVNFfTtFaS50cmlhbmd1bGF0ZT1mdW5jdGlvbihlLHQpe2xldCBuPVkucGFja0FycmF5KGUpO3JldHVybiBlMChuLHQsMil9O2FUPW5ldyBzLHJUPW5ldyBzLGlUPW5ldyBzLHRUPW5ldyBzLG5UPW5ldyBzLG9UPW5ldyBzLEhyPW5ldyBzLGNUPW5ldyBZLHNUPW5ldyBZLGZUPW5ldyBZLEFzPW5ldyBZO0VpLmNvbXB1dGVTdWJkaXZpc2lvbj1mdW5jdGlvbihlLHQsbixvLGEpe2E9YT8/ay5SQURJQU5TX1BFUl9ERUdSRUU7bGV0IHI9ZyhvKSxpPW4uc2xpY2UoMCksZixkPXQubGVuZ3RoLGM9bmV3IEFycmF5KGQqMyksdT1uZXcgQXJyYXkoZCoyKSxsPTAsaD0wO2ZvcihmPTA7ZjxkO2YrKyl7bGV0IFQ9dFtmXTtpZihjW2wrK109VC54LGNbbCsrXT1ULnksY1tsKytdPVQueixyKXtsZXQgdz1vW2ZdO3VbaCsrXT13LngsdVtoKytdPXcueX19bGV0IG09W10sYj17fSxwPWUubWF4aW11bVJhZGl1cyx5PWsuY2hvcmRMZW5ndGgoYSxwKSxFPXkqeTtmb3IoO2kubGVuZ3RoPjA7KXtsZXQgVD1pLnBvcCgpLHc9aS5wb3AoKSxSPWkucG9wKCksUz1zLmZyb21BcnJheShjLFIqMyxhVCksQz1zLmZyb21BcnJheShjLHcqMyxyVCksST1zLmZyb21BcnJheShjLFQqMyxpVCksTixQLHY7ciYmKE49WS5mcm9tQXJyYXkodSxSKjIsY1QpLFA9WS5mcm9tQXJyYXkodSx3KjIsc1QpLHY9WS5mcm9tQXJyYXkodSxUKjIsZlQpKTtsZXQgQT1zLm11bHRpcGx5QnlTY2FsYXIocy5ub3JtYWxpemUoUyx0VCkscCx0VCkseD1zLm11bHRpcGx5QnlTY2FsYXIocy5ub3JtYWxpemUoQyxuVCkscCxuVCksTT1zLm11bHRpcGx5QnlTY2FsYXIocy5ub3JtYWxpemUoSSxvVCkscCxvVCksRj1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChBLHgsSHIpKSxVPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KHgsTSxIcikpLHo9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoTSxBLEhyKSksRD1NYXRoLm1heChGLFUseiksRyxILE87RD5FP0Y9PT1EPyhHPWAke01hdGgubWluKFIsdyl9ICR7TWF0aC5tYXgoUix3KX1gLGY9YltHXSxnKGYpfHwoSD1zLmFkZChTLEMsSHIpLHMubXVsdGlwbHlCeVNjYWxhcihILC41LEgpLGMucHVzaChILngsSC55LEgueiksZj1jLmxlbmd0aC8zLTEsYltHXT1mLHImJihPPVkuYWRkKE4sUCxBcyksWS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUsTyksdS5wdXNoKE8ueCxPLnkpKSksaS5wdXNoKFIsZixUKSxpLnB1c2goZix3LFQpKTpVPT09RD8oRz1gJHtNYXRoLm1pbih3LFQpfSAke01hdGgubWF4KHcsVCl9YCxmPWJbR10sZyhmKXx8KEg9cy5hZGQoQyxJLEhyKSxzLm11bHRpcGx5QnlTY2FsYXIoSCwuNSxIKSxjLnB1c2goSC54LEgueSxILnopLGY9Yy5sZW5ndGgvMy0xLGJbR109ZixyJiYoTz1ZLmFkZChQLHYsQXMpLFkubXVsdGlwbHlCeVNjYWxhcihPLC41LE8pLHUucHVzaChPLngsTy55KSkpLGkucHVzaCh3LGYsUiksaS5wdXNoKGYsVCxSKSk6ej09PUQmJihHPWAke01hdGgubWluKFQsUil9ICR7TWF0aC5tYXgoVCxSKX1gLGY9YltHXSxnKGYpfHwoSD1zLmFkZChJLFMsSHIpLHMubXVsdGlwbHlCeVNjYWxhcihILC41LEgpLGMucHVzaChILngsSC55LEgueiksZj1jLmxlbmd0aC8zLTEsYltHXT1mLHImJihPPVkuYWRkKHYsTixBcyksWS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUsTyksdS5wdXNoKE8ueCxPLnkpKSksaS5wdXNoKFQsZix3KSxpLnB1c2goZixSLHcpKToobS5wdXNoKFIpLG0ucHVzaCh3KSxtLnB1c2goVCkpfWxldCBfPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX0saW5kaWNlczptLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfTtyZXR1cm4gciYmKF8uYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6dX0pKSxuZXcgdmUoXyl9O1VQPW5ldyByZSxMUD1uZXcgcmUsalA9bmV3IHJlLHQwPW5ldyByZTtFaS5jb21wdXRlUmh1bWJMaW5lU3ViZGl2aXNpb249ZnVuY3Rpb24oZSx0LG4sbyxhKXthPWE/P2suUkFESUFOU19QRVJfREVHUkVFO2xldCByPWcobyksaT1uLnNsaWNlKDApLGYsZD10Lmxlbmd0aCxjPW5ldyBBcnJheShkKjMpLHU9bmV3IEFycmF5KGQqMiksbD0wLGg9MDtmb3IoZj0wO2Y8ZDtmKyspe2xldCBSPXRbZl07aWYoY1tsKytdPVIueCxjW2wrK109Ui55LGNbbCsrXT1SLnoscil7bGV0IFM9b1tmXTt1W2grK109Uy54LHVbaCsrXT1TLnl9fWxldCBtPVtdLGI9e30scD1lLm1heGltdW1SYWRpdXMseT1rLmNob3JkTGVuZ3RoKGEscCksRT1uZXcgZWEodm9pZCAwLHZvaWQgMCxlKSxfPW5ldyBlYSh2b2lkIDAsdm9pZCAwLGUpLFQ9bmV3IGVhKHZvaWQgMCx2b2lkIDAsZSk7Zm9yKDtpLmxlbmd0aD4wOyl7bGV0IFI9aS5wb3AoKSxTPWkucG9wKCksQz1pLnBvcCgpLEk9cy5mcm9tQXJyYXkoYyxDKjMsYVQpLE49cy5mcm9tQXJyYXkoYyxTKjMsclQpLFA9cy5mcm9tQXJyYXkoYyxSKjMsaVQpLHYsQSx4O3ImJih2PVkuZnJvbUFycmF5KHUsQyoyLGNUKSxBPVkuZnJvbUFycmF5KHUsUyoyLHNUKSx4PVkuZnJvbUFycmF5KHUsUioyLGZUKSk7bGV0IE09ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhJLFVQKSxGPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTixMUCksVT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFAsalApO0Uuc2V0RW5kUG9pbnRzKE0sRik7bGV0IHo9RS5zdXJmYWNlRGlzdGFuY2U7Xy5zZXRFbmRQb2ludHMoRixVKTtsZXQgRD1fLnN1cmZhY2VEaXN0YW5jZTtULnNldEVuZFBvaW50cyhVLE0pO2xldCBHPVQuc3VyZmFjZURpc3RhbmNlLEg9TWF0aC5tYXgoeixELEcpLE8sWixvZSxjZSxkZTtIPnk/ej09PUg/KE89YCR7TWF0aC5taW4oQyxTKX0gJHtNYXRoLm1heChDLFMpfWAsZj1iW09dLGcoZil8fChaPUUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LHQwKSxvZT0oTS5oZWlnaHQrRi5oZWlnaHQpKi41LGNlPXMuZnJvbVJhZGlhbnMoWi5sb25naXR1ZGUsWi5sYXRpdHVkZSxvZSxlLEhyKSxjLnB1c2goY2UueCxjZS55LGNlLnopLGY9Yy5sZW5ndGgvMy0xLGJbT109ZixyJiYoZGU9WS5hZGQodixBLEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoZGUsLjUsZGUpLHUucHVzaChkZS54LGRlLnkpKSksaS5wdXNoKEMsZixSKSxpLnB1c2goZixTLFIpKTpEPT09SD8oTz1gJHtNYXRoLm1pbihTLFIpfSAke01hdGgubWF4KFMsUil9YCxmPWJbT10sZyhmKXx8KFo9Xy5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb24oLjUsdDApLG9lPShGLmhlaWdodCtVLmhlaWdodCkqLjUsY2U9cy5mcm9tUmFkaWFucyhaLmxvbmdpdHVkZSxaLmxhdGl0dWRlLG9lLGUsSHIpLGMucHVzaChjZS54LGNlLnksY2UueiksZj1jLmxlbmd0aC8zLTEsYltPXT1mLHImJihkZT1ZLmFkZChBLHgsQXMpLFkubXVsdGlwbHlCeVNjYWxhcihkZSwuNSxkZSksdS5wdXNoKGRlLngsZGUueSkpKSxpLnB1c2goUyxmLEMpLGkucHVzaChmLFIsQykpOkc9PT1IJiYoTz1gJHtNYXRoLm1pbihSLEMpfSAke01hdGgubWF4KFIsQyl9YCxmPWJbT10sZyhmKXx8KFo9VC5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb24oLjUsdDApLG9lPShVLmhlaWdodCtNLmhlaWdodCkqLjUsY2U9cy5mcm9tUmFkaWFucyhaLmxvbmdpdHVkZSxaLmxhdGl0dWRlLG9lLGUsSHIpLGMucHVzaChjZS54LGNlLnksY2UueiksZj1jLmxlbmd0aC8zLTEsYltPXT1mLHImJihkZT1ZLmFkZCh4LHYsQXMpLFkubXVsdGlwbHlCeVNjYWxhcihkZSwuNSxkZSksdS5wdXNoKGRlLngsZGUueSkpKSxpLnB1c2goUixmLFMpLGkucHVzaChmLEMsUykpOihtLnB1c2goQyksbS5wdXNoKFMpLG0ucHVzaChSKSl9bGV0IHc9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9O3JldHVybiByJiYody5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp1fSkpLG5ldyB2ZSh3KX07RWkuc2NhbGVUb0dlb2RldGljSGVpZ2h0PWZ1bmN0aW9uKGUsdCxuLG8pe249bj8/cS5kZWZhdWx0O2xldCBhPURQLHI9QlA7aWYodD10Pz8wLG89bz8/ITAsZyhlKSl7bGV0IGk9ZS5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxpO2YrPTMpcy5mcm9tQXJyYXkoZSxmLHIpLG8mJihyPW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLHIpKSx0IT09MCYmKGE9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocixhKSxzLm11bHRpcGx5QnlTY2FsYXIoYSx0LGEpLHMuYWRkKHIsYSxyKSksZVtmXT1yLngsZVtmKzFdPXIueSxlW2YrMl09ci56fXJldHVybiBlfTtTdD1FaX0pO2Z1bmN0aW9uIFRpKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fb2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPTB9dmFyIG4wLGRUPVgoKCk9PntPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaS5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19fSk7VGkucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dGhpcy5fYXJyYXkucHVzaChlKSx0aGlzLl9sZW5ndGgrK307VGkucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgZT10aGlzLl9hcnJheSx0PXRoaXMuX29mZnNldCxuPWVbdF07cmV0dXJuIGVbdF09dm9pZCAwLHQrKyx0PjEwJiZ0KjI+ZS5sZW5ndGgmJih0aGlzLl9hcnJheT1lLnNsaWNlKHQpLHQ9MCksdGhpcy5fb2Zmc2V0PXQsdGhpcy5fbGVuZ3RoLS0sbn07VGkucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGghPT0wKXJldHVybiB0aGlzLl9hcnJheVt0aGlzLl9vZmZzZXRdfTtUaS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FycmF5LmluZGV4T2YoZSkhPT0tMX07VGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fYXJyYXkubGVuZ3RoPXRoaXMuX29mZnNldD10aGlzLl9sZW5ndGg9MH07VGkucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oZSl7dGhpcy5fb2Zmc2V0PjAmJih0aGlzLl9hcnJheT10aGlzLl9hcnJheS5zbGljZSh0aGlzLl9vZmZzZXQpLHRoaXMuX29mZnNldD0wKSx0aGlzLl9hcnJheS5zb3J0KGUpfTtuMD1UaX0pO2Z1bmN0aW9uIGhUKGUsdCxuLG8pe3JldHVybiBZLnN1YnRyYWN0KHQsZSxwYyksWS5tdWx0aXBseUJ5U2NhbGFyKHBjLG4vbyxwYyksWS5hZGQoZSxwYyxwYyksW3BjLngscGMueV19ZnVuY3Rpb24gelAoZSx0LG4sbyl7cmV0dXJuIHMuc3VidHJhY3QodCxlLFJpKSxzLm11bHRpcGx5QnlTY2FsYXIoUmksbi9vLFJpKSxzLmFkZChlLFJpLFJpKSxbUmkueCxSaS55LFJpLnpdfWZ1bmN0aW9uIFlQKGUsdCxuKXtsZXQgbz1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsaGgpLGE9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LG1oKTtpZihNYXRoLnNpZ24oby5sYXRpdHVkZSk9PT1NYXRoLnNpZ24oYS5sYXRpdHVkZSkpcmV0dXJuO2xoLnNldEVuZFBvaW50cyhvLGEpO2xldCByPWxoLmZpbmRJbnRlcnNlY3Rpb25XaXRoTGF0aXR1ZGUoMCxYUCk7aWYoIWcocikpcmV0dXJuO2xldCBpPU1hdGgubWluKG8ubG9uZ2l0dWRlLGEubG9uZ2l0dWRlKSxmPU1hdGgubWF4KG8ubG9uZ2l0dWRlLGEubG9uZ2l0dWRlKTtpZihNYXRoLmFicyhmLWkpPmsuUEkpe2xldCBkPWk7aT1mLGY9ZH1pZighKHIubG9uZ2l0dWRlPGl8fHIubG9uZ2l0dWRlPmYpKXJldHVybiBuLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHIpfWZ1bmN0aW9uIEpQKGUsdCxuLG8pe2lmKG89PT13dC5SSFVNQilyZXR1cm4gWVAoZSx0LG4pO2xldCBhPW5vLmxpbmVTZWdtZW50UGxhbmUoZSx0LHNuLk9SSUdJTl9YWV9QTEFORSk7aWYoZyhhKSlyZXR1cm4gbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGEsYSl9ZnVuY3Rpb24gUVAoZSx0LG4pe2xldCBvPVtdLGEscixpLGYsZCxjPTA7Zm9yKDtjPGUubGVuZ3RoOyl7YT1lW2NdLHI9ZVsoYysxKSVlLmxlbmd0aF0saT1rLnNpZ24oYS56KSxmPWsuc2lnbihyLnopO2xldCB1PWw9PnQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobCxaUCkubG9uZ2l0dWRlO2lmKGk9PT0wKW8ucHVzaCh7cG9zaXRpb246Yyx0eXBlOmksdmlzaXRlZDohMSxuZXh0OmYsdGhldGE6dShhKX0pO2Vsc2UgaWYoZiE9PTApe2lmKGQ9SlAoYSxyLHQsbiksKytjLCFnKGQpKWNvbnRpbnVlO2Uuc3BsaWNlKGMsMCxkKSxvLnB1c2goe3Bvc2l0aW9uOmMsdHlwZTppLHZpc2l0ZWQ6ITEsbmV4dDpmLHRoZXRhOnUoZCl9KX0rK2N9cmV0dXJuIG99ZnVuY3Rpb24gbVQoZSx0LG4sbyxhLHIsaSl7bGV0IGY9W10sZD1yLGM9bD0+aD0+aC5wb3NpdGlvbj09PWwsdT1bXTtkb3tsZXQgbD1uW2RdO2YucHVzaChsKTtsZXQgaD1vLmZpbmRJbmRleChjKGQpKSxtPW9baF07aWYoIWcobSkpeysrZDtjb250aW51ZX1sZXR7dmlzaXRlZDpiLHR5cGU6cCxuZXh0Onl9PW07aWYobS52aXNpdGVkPSEwLHA9PT0wKXtpZih5PT09MCl7bGV0IHc9b1toLShpPzE6LTEpXTtpZih3Py5wb3NpdGlvbj09PWQrMSl3LnZpc2l0ZWQ9ITA7ZWxzZXsrK2Q7Y29udGludWV9fWlmKCFiJiZpJiZ5PjB8fHI9PT1kJiYhaSYmeTwwKXsrK2Q7Y29udGludWV9fWlmKCEoaT9wPj0wOnA8PTApKXsrK2Q7Y29udGludWV9Ynx8dS5wdXNoKGQpO2xldCBfPWgrKGk/MTotMSksVD1vW19dO2lmKCFnKFQpKXsrK2Q7Y29udGludWV9ZD1ULnBvc2l0aW9ufXdoaWxlKGQ8bi5sZW5ndGgmJmQ+PTAmJmQhPT1yJiZmLmxlbmd0aDxuLmxlbmd0aCk7ZS5zcGxpY2UodCxhLGYpO2ZvcihsZXQgbCBvZiB1KXQ9bVQoZSwrK3QsbixvLDAsbCwhaSk7cmV0dXJuIHR9dmFyIHhuLHBjLFJpLGhoLG1oLEdQLFZQLGxoLEhQLEtQLHFQLFdQLFhQLFpQLCRQLGVrLHRrLG5rLHVULGxULG9rLGFrLGx0LFZmPVgoKCk9PntoYygpO1hhKCk7anQoKTtJZSgpO0V0KCk7dnQoKTtzZSgpO3FlKCk7VWYoKTskdCgpO2VuKCk7dW4oKTtscigpO25uKCk7cGkoKTtHZSgpO0RuKCk7Z2koKTtYRSgpO0phKCk7Y24oKTtKbygpO2RUKCk7YmMoKTt4bj17fTt4bi5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoPWZ1bmN0aW9uKGUsdCl7bGV0IG49MCxvPVtlXTtmb3IoO28ubGVuZ3RoPjA7KXtsZXQgYT1vLnBvcCgpO2lmKCFnKGEpKWNvbnRpbnVlO24rPTI7bGV0IHI9YS5wb3NpdGlvbnMsaT1hLmhvbGVzO2lmKGcocikmJnIubGVuZ3RoPjAmJihuKz1yLmxlbmd0aCp0LnBhY2tlZExlbmd0aCksZyhpKSl7bGV0IGY9aS5sZW5ndGg7Zm9yKGxldCBkPTA7ZDxmOysrZClvLnB1c2goaVtkXSl9fXJldHVybiBufTt4bi5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT1bZV07Zm9yKDthLmxlbmd0aD4wOyl7bGV0IHI9YS5wb3AoKTtpZighZyhyKSljb250aW51ZTtsZXQgaT1yLnBvc2l0aW9ucyxmPXIuaG9sZXM7aWYodFtuKytdPWcoaSk/aS5sZW5ndGg6MCx0W24rK109ZyhmKT9mLmxlbmd0aDowLGcoaSkpe2xldCBkPWkubGVuZ3RoO2ZvcihsZXQgYz0wO2M8ZDsrK2Msbis9by5wYWNrZWRMZW5ndGgpby5wYWNrKGlbY10sdCxuKX1pZihnKGYpKXtsZXQgZD1mLmxlbmd0aDtmb3IobGV0IGM9MDtjPGQ7KytjKWEucHVzaChmW2NdKX19cmV0dXJuIG59O3huLnVucGFja1BvbHlnb25IaWVyYXJjaHk9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWVbdCsrXSxhPWVbdCsrXSxyPW5ldyBBcnJheShvKSxpPWE+MD9uZXcgQXJyYXkoYSk6dm9pZCAwO2ZvcihsZXQgZj0wO2Y8bzsrK2YsdCs9bi5wYWNrZWRMZW5ndGgpcltmXT1uLnVucGFjayhlLHQpO2ZvcihsZXQgZj0wO2Y8YTsrK2YpaVtmXT14bi51bnBhY2tQb2x5Z29uSGllcmFyY2h5KGUsdCxuKSx0PWlbZl0uc3RhcnRpbmdJbmRleCxkZWxldGUgaVtmXS5zdGFydGluZ0luZGV4O3JldHVybntwb3NpdGlvbnM6cixob2xlczppLHN0YXJ0aW5nSW5kZXg6dH19O3BjPW5ldyBZO1JpPW5ldyBzO3huLnN1YmRpdmlkZUxpbmVDb3VudD1mdW5jdGlvbihlLHQsbil7bGV0IGE9cy5kaXN0YW5jZShlLHQpL24scj1NYXRoLm1heCgwLE1hdGguY2VpbChrLmxvZzIoYSkpKTtyZXR1cm4gTWF0aC5wb3coMixyKX07aGg9bmV3IHJlLG1oPW5ldyByZSxHUD1uZXcgcmUsVlA9bmV3IHMsbGg9bmV3IGVhO3huLnN1YmRpdmlkZVJodW1iTGluZUNvdW50PWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxoaCkscj1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4sbWgpLGY9bmV3IGVhKGEscixlKS5zdXJmYWNlRGlzdGFuY2UvbyxkPU1hdGgubWF4KDAsTWF0aC5jZWlsKGsubG9nMihmKSkpO3JldHVybiBNYXRoLnBvdygyLGQpfTt4bi5zdWJkaXZpZGVUZXhjb29yZExpbmU9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPXhuLnN1YmRpdmlkZUxpbmVDb3VudChuLG8sYSksZj1ZLmRpc3RhbmNlKGUsdCksZD1mL2ksYz1yO2MubGVuZ3RoPWkqMjtsZXQgdT0wO2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldCBoPWhUKGUsdCxsKmQsZik7Y1t1KytdPWhbMF0sY1t1KytdPWhbMV19cmV0dXJuIGN9O3huLnN1YmRpdmlkZUxpbmU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9eG4uc3ViZGl2aWRlTGluZUNvdW50KGUsdCxuKSxyPXMuZGlzdGFuY2UoZSx0KSxpPXIvYTtnKG8pfHwobz1bXSk7bGV0IGY9bztmLmxlbmd0aD1hKjM7bGV0IGQ9MDtmb3IobGV0IGM9MDtjPGE7YysrKXtsZXQgdT16UChlLHQsYyppLHIpO2ZbZCsrXT11WzBdLGZbZCsrXT11WzFdLGZbZCsrXT11WzJdfXJldHVybiBmfTt4bi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZT1mdW5jdGlvbihlLHQsbixvLGEscixpKXtsZXQgZj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8saGgpLGQ9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhhLG1oKTtsaC5zZXRFbmRQb2ludHMoZixkKTtsZXQgYz1saC5zdXJmYWNlRGlzdGFuY2Uvcix1PU1hdGgubWF4KDAsTWF0aC5jZWlsKGsubG9nMihjKSkpLGw9TWF0aC5wb3coMix1KSxoPVkuZGlzdGFuY2UoZSx0KSxtPWgvbCxiPWk7Yi5sZW5ndGg9bCoyO2xldCBwPTA7Zm9yKGxldCB5PTA7eTxsO3krKyl7bGV0IEU9aFQoZSx0LHkqbSxoKTtiW3ArK109RVswXSxiW3ArK109RVsxXX1yZXR1cm4gYn07eG4uc3ViZGl2aWRlUmh1bWJMaW5lPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LGhoKSxpPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixtaCksZj1uZXcgZWEocixpLGUpO2lmKGcoYSl8fChhPVtdKSxmLnN1cmZhY2VEaXN0YW5jZTw9bylyZXR1cm4gYS5sZW5ndGg9MyxhWzBdPXQueCxhWzFdPXQueSxhWzJdPXQueixhO2xldCBkPWYuc3VyZmFjZURpc3RhbmNlL28sYz1NYXRoLm1heCgwLE1hdGguY2VpbChrLmxvZzIoZCkpKSx1PU1hdGgucG93KDIsYyksbD1mLnN1cmZhY2VEaXN0YW5jZS91LGg9YTtoLmxlbmd0aD11KjM7bGV0IG09MDtmb3IobGV0IGI9MDtiPHU7YisrKXtsZXQgcD1mLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoYipsLEdQKSx5PWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocCxWUCk7aFttKytdPXkueCxoW20rK109eS55LGhbbSsrXT15Lnp9cmV0dXJuIGh9O0hQPW5ldyBzLEtQPW5ldyBzLHFQPW5ldyBzLFdQPW5ldyBzO3huLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bz1vPz9xLmRlZmF1bHQ7bGV0IHI9SFAsaT1LUCxmPXFQLGQ9V1A7aWYoZyhlKSYmZyhlLmF0dHJpYnV0ZXMpJiZnKGUuYXR0cmlidXRlcy5wb3NpdGlvbikpe2xldCBjPWUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdT1jLmxlbmd0aC8yO2ZvcihsZXQgbD0wO2w8dTtsKz0zKXMuZnJvbUFycmF5KGMsbCxmKSxvLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLHIpLGQ9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGYsZCksaT1zLm11bHRpcGx5QnlTY2FsYXIocixuLGkpLGk9cy5hZGQoZCxpLGkpLGNbbCt1XT1pLngsY1tsKzErdV09aS55LGNbbCsyK3VdPWkueixhJiYoZD1zLmNsb25lKGYsZCkpLGk9cy5tdWx0aXBseUJ5U2NhbGFyKHIsdCxpKSxpPXMuYWRkKGQsaSxpKSxjW2xdPWkueCxjW2wrMV09aS55LGNbbCsyXT1pLnp9cmV0dXJuIGV9O3huLnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHk9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPVtdLGE9bmV3IG4wO2EuZW5xdWV1ZShlKTtsZXQgcixpLGY7Zm9yKDthLmxlbmd0aCE9PTA7KXtsZXQgZD1hLmRlcXVldWUoKSxjPWQucG9zaXRpb25zO2lmKHQpZm9yKGY9Yy5sZW5ndGgscj0wO3I8ZjtyKyspbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGNbcl0sY1tyXSk7aWYoYz1ObihjLHMuZXF1YWxzRXBzaWxvbiwhMCksYy5sZW5ndGg8Myljb250aW51ZTtsZXQgdT1kLmhvbGVzP2QuaG9sZXMubGVuZ3RoOjA7Zm9yKHI9MDtyPHU7cisrKXtsZXQgbD1kLmhvbGVzW3JdLGg9bC5wb3NpdGlvbnM7aWYodClmb3IoZj1oLmxlbmd0aCxpPTA7aTxmOysraSluLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoaFtpXSxoW2ldKTtpZihoPU5uKGgscy5lcXVhbHNFcHNpbG9uLCEwKSxoLmxlbmd0aDwzKWNvbnRpbnVlO28ucHVzaChoKTtsZXQgbT0wO2ZvcihnKGwuaG9sZXMpJiYobT1sLmhvbGVzLmxlbmd0aCksaT0wO2k8bTtpKyspYS5lbnF1ZXVlKGwuaG9sZXNbaV0pfW8ucHVzaChjKX1yZXR1cm4gb307WFA9bmV3IHJlO1pQPW5ldyByZTt4bi5zcGxpdFBvbHlnb25zT25FcXVhdG9yPWZ1bmN0aW9uKGUsdCxuLG8pe2cobyl8fChvPVtdKSxvLnNwbGljZSgwLDAsLi4uZSksby5sZW5ndGg9ZS5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8by5sZW5ndGg7KXtsZXQgcj1vW2FdLGk9ci5zbGljZSgpO2lmKHIubGVuZ3RoPDMpe29bYV09aSwrK2E7Y29udGludWV9bGV0IGY9UVAoaSx0LG4pO2lmKGkubGVuZ3RoPT09ci5sZW5ndGh8fGYubGVuZ3RoPD0xKXtvW2FdPWksKythO2NvbnRpbnVlfWYuc29ydCgoYyx1KT0+Yy50aGV0YS11LnRoZXRhKTtsZXQgZD1pWzBdLno+PTA7YT1tVChvLGEsaSxmLDEsMCxkKX1yZXR1cm4gb307eG4ucG9seWdvbnNGcm9tSGllcmFyY2h5PWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtsZXQgaT1bXSxmPVtdLGQ9bmV3IG4wO2QuZW5xdWV1ZShlKTtsZXQgYz1nKHIpO2Zvcig7ZC5sZW5ndGghPT0wOyl7bGV0IHU9ZC5kZXF1ZXVlKCksbD11LnBvc2l0aW9ucyxoPXUuaG9sZXMsbSxiO2lmKG8pZm9yKGI9bC5sZW5ndGgsbT0wO208YjttKyspYS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGxbbV0sbFttXSk7aWYodHx8KGw9Tm4obCxzLmVxdWFsc0Vwc2lsb24sITApKSxsLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBwPW4obCk7aWYoIWcocCkpY29udGludWU7bGV0IHk9W10sRT1TdC5jb21wdXRlV2luZGluZ09yZGVyMkQocCk7aWYoRT09PXZvLkNMT0NLV0lTRSYmKHAucmV2ZXJzZSgpLGw9bC5zbGljZSgpLnJldmVyc2UoKSksYyl7Yz0hMTtsZXQgUz1bbF07aWYoUz1yKFMsUyksUy5sZW5ndGg+MSl7Zm9yKGxldCBDIG9mIFMpZC5lbnF1ZXVlKG5ldyBXRShDLGgpKTtjb250aW51ZX19bGV0IF89bC5zbGljZSgpLFQ9ZyhoKT9oLmxlbmd0aDowLHc9W10sUjtmb3IobT0wO208VDttKyspe2xldCBTPWhbbV0sQz1TLnBvc2l0aW9ucztpZihvKWZvcihiPUMubGVuZ3RoLFI9MDtSPGI7KytSKWEuc2NhbGVUb0dlb2RldGljU3VyZmFjZShDW1JdLENbUl0pO2lmKHR8fChDPU5uKEMscy5lcXVhbHNFcHNpbG9uLCEwKSksQy5sZW5ndGg8Myljb250aW51ZTtsZXQgST1uKEMpO2lmKCFnKEkpKWNvbnRpbnVlO0U9U3QuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKEkpLEU9PT12by5DTE9DS1dJU0UmJihJLnJldmVyc2UoKSxDPUMuc2xpY2UoKS5yZXZlcnNlKCkpLHcucHVzaChDKSx5LnB1c2goXy5sZW5ndGgpLF89Xy5jb25jYXQoQykscD1wLmNvbmNhdChJKTtsZXQgTj0wO2ZvcihnKFMuaG9sZXMpJiYoTj1TLmhvbGVzLmxlbmd0aCksUj0wO1I8TjtSKyspZC5lbnF1ZXVlKFMuaG9sZXNbUl0pfWkucHVzaCh7b3V0ZXJSaW5nOmwsaG9sZXM6d30pLGYucHVzaCh7cG9zaXRpb25zOl8scG9zaXRpb25zMkQ6cCxob2xlczp5fSl9cmV0dXJue2hpZXJhcmNoeTppLHBvbHlnb25zOmZ9fTskUD1uZXcgWSxlaz1uZXcgcyx0az1uZXcgUWUsbms9bmV3IEo7eG4uY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9UWUuZnJvbUF4aXNBbmdsZShlLG8sdGspLGk9Si5mcm9tUXVhdGVybmlvbihyLG5rKSxmPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxkPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx1PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxsPW4ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8bDsrK2gpe2xldCBtPXMuY2xvbmUobltoXSxlayk7Si5tdWx0aXBseUJ5VmVjdG9yKGksbSxtKTtsZXQgYj10KG0sJFApO2coYikmJihmPU1hdGgubWluKGYsYi54KSxkPU1hdGgubWF4KGQsYi54KSxjPU1hdGgubWluKGMsYi55KSx1PU1hdGgubWF4KHUsYi55KSl9cmV0dXJuIGEueD1mLGEueT1jLGEud2lkdGg9ZC1mLGEuaGVpZ2h0PXUtYyxhfTt4bi5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSl7bGV0IGY9U3QudHJpYW5ndWxhdGUodC5wb3NpdGlvbnMyRCx0LmhvbGVzKTtmLmxlbmd0aDwzJiYoZj1bMCwxLDJdKTtsZXQgZD10LnBvc2l0aW9ucyxjPWcobiksdT1jP24ucG9zaXRpb25zOnZvaWQgMDtpZihhKXtsZXQgbD1kLmxlbmd0aCxoPW5ldyBBcnJheShsKjMpLG09MDtmb3IobGV0IHk9MDt5PGw7eSsrKXtsZXQgRT1kW3ldO2hbbSsrXT1FLngsaFttKytdPUUueSxoW20rK109RS56fWxldCBiPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KX0saW5kaWNlczpmLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTfTtjJiYoYi5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpZLnBhY2tBcnJheSh1KX0pKTtsZXQgcD1uZXcgdmUoYik7cmV0dXJuIHIubm9ybWFsP0h0LmNvbXB1dGVOb3JtYWwocCk6cH1pZihpPT09d3QuR0VPREVTSUMpcmV0dXJuIFN0LmNvbXB1dGVTdWJkaXZpc2lvbihlLGQsZix1LG8pO2lmKGk9PT13dC5SSFVNQilyZXR1cm4gU3QuY29tcHV0ZVJodW1iTGluZVN1YmRpdmlzaW9uKGUsZCxmLHUsbyl9O3VUPVtdLGxUPVtdLG9rPW5ldyBzLGFrPW5ldyBzO3huLmNvbXB1dGVXYWxsR2VvbWV0cnk9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpLGYsZCxjLHUsbCxoLG0sYixwPWUubGVuZ3RoLHk9MCxFPTAsXz1nKHQpLFQ9Xz90LnBvc2l0aW9uczp2b2lkIDA7aWYoYSlmb3IoZj1wKjMqMixpPW5ldyBBcnJheShmKjIpLF8mJihiPXAqMioyLG09bmV3IEFycmF5KGIqMikpLGQ9MDtkPHA7ZCsrKWM9ZVtkXSx1PWVbKGQrMSklcF0saVt5XT1pW3krZl09Yy54LCsreSxpW3ldPWlbeStmXT1jLnksKyt5LGlbeV09aVt5K2ZdPWMueiwrK3ksaVt5XT1pW3krZl09dS54LCsreSxpW3ldPWlbeStmXT11LnksKyt5LGlbeV09aVt5K2ZdPXUueiwrK3ksXyYmKGw9VFtkXSxoPVRbKGQrMSklcF0sbVtFXT1tW0UrYl09bC54LCsrRSxtW0VdPW1bRStiXT1sLnksKytFLG1bRV09bVtFK2JdPWgueCwrK0UsbVtFXT1tW0UrYl09aC55LCsrRSk7ZWxzZXtsZXQgST1rLmNob3JkTGVuZ3RoKG8sbi5tYXhpbXVtUmFkaXVzKSxOPTA7aWYocj09PXd0LkdFT0RFU0lDKWZvcihkPTA7ZDxwO2QrKylOKz14bi5zdWJkaXZpZGVMaW5lQ291bnQoZVtkXSxlWyhkKzEpJXBdLEkpO2Vsc2UgaWYocj09PXd0LlJIVU1CKWZvcihkPTA7ZDxwO2QrKylOKz14bi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChuLGVbZF0sZVsoZCsxKSVwXSxJKTtmb3IoZj0oTitwKSozLGk9bmV3IEFycmF5KGYqMiksXyYmKGI9KE4rcCkqMixtPW5ldyBBcnJheShiKjIpKSxkPTA7ZDxwO2QrKyl7Yz1lW2RdLHU9ZVsoZCsxKSVwXTtsZXQgUCx2O18mJihsPVRbZF0saD1UWyhkKzEpJXBdKSxyPT09d3QuR0VPREVTSUM/KFA9eG4uc3ViZGl2aWRlTGluZShjLHUsSSxsVCksXyYmKHY9eG4uc3ViZGl2aWRlVGV4Y29vcmRMaW5lKGwsaCxjLHUsSSx1VCkpKTpyPT09d3QuUkhVTUImJihQPXhuLnN1YmRpdmlkZVJodW1iTGluZShuLGMsdSxJLGxUKSxfJiYodj14bi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZShsLGgsbixjLHUsSSx1VCkpKTtsZXQgQT1QLmxlbmd0aDtmb3IobGV0IHg9MDt4PEE7Kyt4LCsreSlpW3ldPVBbeF0saVt5K2ZdPVBbeF07aWYoaVt5XT11LngsaVt5K2ZdPXUueCwrK3ksaVt5XT11LnksaVt5K2ZdPXUueSwrK3ksaVt5XT11LnosaVt5K2ZdPXUueiwrK3ksXyl7bGV0IHg9di5sZW5ndGg7Zm9yKGxldCBNPTA7TTx4OysrTSwrK0UpbVtFXT12W01dLG1bRStiXT12W01dO21bRV09aC54LG1bRStiXT1oLngsKytFLG1bRV09aC55LG1bRStiXT1oLnksKytFfX19cD1pLmxlbmd0aDtsZXQgdz1rZS5jcmVhdGVUeXBlZEFycmF5KHAvMyxwLWUubGVuZ3RoKjYpLFI9MDtmb3IocC89NixkPTA7ZDxwO2QrKyl7bGV0IEk9ZCxOPUkrMSxQPUkrcCx2PVArMTtjPXMuZnJvbUFycmF5KGksSSozLG9rKSx1PXMuZnJvbUFycmF5KGksTiozLGFrKSwhcy5lcXVhbHNFcHNpbG9uKGMsdSxrLkVQU0lMT04xMCxrLkVQU0lMT04xMCkmJih3W1IrK109SSx3W1IrK109UCx3W1IrK109Tix3W1IrK109Tix3W1IrK109UCx3W1IrK109dil9bGV0IFM9e2F0dHJpYnV0ZXM6bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX0pLGluZGljZXM6dyxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFU307cmV0dXJuIF8mJihTLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm19KSksbmV3IHZlKFMpfTtsdD14bn0pO2Z1bmN0aW9uIGdrKGUsdCxuLG8sYSxyLGksZixkKXtsZXQgYz1lLnBvc2l0aW9ucyx1PVN0LnRyaWFuZ3VsYXRlKGUucG9zaXRpb25zMkQsZS5ob2xlcyk7dS5sZW5ndGg8MyYmKHU9WzAsMSwyXSk7bGV0IGw9a2UuY3JlYXRlVHlwZWRBcnJheShjLmxlbmd0aCx1Lmxlbmd0aCk7bC5zZXQodSk7bGV0IGg9bWs7aWYobyE9PTApe2xldCB2PVFlLmZyb21BeGlzQW5nbGUoaSxvLGJUKTtpZihoPUouZnJvbVF1YXRlcm5pb24odixoKSx0LnRhbmdlbnR8fHQuYml0YW5nZW50KXt2PVFlLmZyb21BeGlzQW5nbGUoaSwtbyxiVCk7bGV0IEE9Si5mcm9tUXVhdGVybmlvbih2LGJrKTtmPXMubm9ybWFsaXplKEoubXVsdGlwbHlCeVZlY3RvcihBLGYsZiksZiksdC5iaXRhbmdlbnQmJihkPXMubm9ybWFsaXplKHMuY3Jvc3MoaSxmLGQpLGQpKX19ZWxzZSBoPUouY2xvbmUoSi5JREVOVElUWSxoKTtsZXQgbT1zazt0LnN0JiYobS54PW4ueCxtLnk9bi55KTtsZXQgYj1jLmxlbmd0aCxwPWIqMyx5PW5ldyBGbG9hdDY0QXJyYXkocCksRT10Lm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KHApOnZvaWQgMCxfPXQudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHApOnZvaWQgMCxUPXQuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocCk6dm9pZCAwLHc9dC5zdD9uZXcgRmxvYXQzMkFycmF5KGIqMik6dm9pZCAwLFI9MCxTPTAsQz0wLEk9MCxOPTA7Zm9yKGxldCB2PTA7djxiO3YrKyl7bGV0IEE9Y1t2XTtpZih5W1IrK109QS54LHlbUisrXT1BLnkseVtSKytdPUEueix0LnN0KWlmKGcoYSkmJmEucG9zaXRpb25zLmxlbmd0aD09PWIpd1tOKytdPWEucG9zaXRpb25zW3ZdLngsd1tOKytdPWEucG9zaXRpb25zW3ZdLnk7ZWxzZXtsZXQgeD1KLm11bHRpcGx5QnlWZWN0b3IoaCxBLHJrKSxNPXIoeCxjayk7WS5zdWJ0cmFjdChNLG0sTSk7bGV0IEY9ay5jbGFtcChNLngvbi53aWR0aCwwLDEpLFU9ay5jbGFtcChNLnkvbi5oZWlnaHQsMCwxKTt3W04rK109Rix3W04rK109VX10Lm5vcm1hbCYmKEVbUysrXT1pLngsRVtTKytdPWkueSxFW1MrK109aS56KSx0LnRhbmdlbnQmJihfW0krK109Zi54LF9bSSsrXT1mLnksX1tJKytdPWYueiksdC5iaXRhbmdlbnQmJihUW0MrK109ZC54LFRbQysrXT1kLnksVFtDKytdPWQueil9bGV0IFA9bmV3IG50O3JldHVybiB0LnBvc2l0aW9uJiYoUC5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnl9KSksdC5ub3JtYWwmJihQLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pKSx0LnRhbmdlbnQmJihQLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSksdC5iaXRhbmdlbnQmJihQLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pKSx0LnN0JiYoUC5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6d30pKSxuZXcgdmUoe2F0dHJpYnV0ZXM6UCxpbmRpY2VzOmwscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9KX1mdW5jdGlvbiBnYyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvbHlnb25IaWVyYXJjaHksbj1lLnRleHR1cmVDb29yZGluYXRlcyxvPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUO3RoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShvKSx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PXQsdGhpcy5fc3RSb3RhdGlvbj1lLnN0Um90YXRpb24/PzAsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUoZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnkiLHRoaXMuX3RleHR1cmVDb29yZGluYXRlcz1uLHRoaXMucGFja2VkTGVuZ3RoPWx0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgodCxzKStoZS5wYWNrZWRMZW5ndGgrcS5wYWNrZWRMZW5ndGgrKGcobik/bHQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChuLFkpOjEpKzJ9dmFyIHJrLGlrLGNrLHNrLGZrLGRrLHVrLEhmLGxrLGhrLGJULG1rLGJrLHBrLF9rLHlrLEFrLG8wLHBUPVgoKCk9PntYYSgpO0RmKCk7TXQoKTtqdCgpO0llKCk7dnQoKTtZcCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO2RjKCk7bHIoKTtubigpO0dlKCk7RG4oKTtWZigpO0phKCk7Y24oKTtKbygpO2tvKCk7cms9bmV3IHMsaWs9bmV3IFlhLGNrPW5ldyBZLHNrPW5ldyBZLGZrPW5ldyBzLGRrPW5ldyBzLHVrPW5ldyBzLEhmPW5ldyBzLGxrPW5ldyBzLGhrPW5ldyBzLGJUPW5ldyBRZSxtaz1uZXcgSixiaz1uZXcgSixwaz1uZXcgcztnYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6ZS5wb3NpdGlvbnN9LHZlcnRleEZvcm1hdDplLnZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOmUuc3RSb3RhdGlvbixlbGxpcHNvaWQ6ZS5lbGxpcHNvaWQsdGV4dHVyZUNvb3JkaW5hdGVzOmUudGV4dHVyZUNvb3JkaW5hdGVzfTtyZXR1cm4gbmV3IGdjKHQpfTtnYy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLG49bHQucGFja1BvbHlnb25IaWVyYXJjaHkoZS5fcG9seWdvbkhpZXJhcmNoeSx0LG4scykscS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksbis9aGUucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9zdFJvdGF0aW9uLGcoZS5fdGV4dHVyZUNvb3JkaW5hdGVzKT9uPWx0LnBhY2tQb2x5Z29uSGllcmFyY2h5KGUuX3RleHR1cmVDb29yZGluYXRlcyx0LG4sWSk6dFtuKytdPS0xLHRbbisrXT1lLnBhY2tlZExlbmd0aCx0fTtfaz1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLHlrPW5ldyBoZSxBaz17cG9seWdvbkhpZXJhcmNoeTp7fX07Z2MudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89bHQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQscyk7dD1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1xLnVucGFjayhlLHQsX2spO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhlLHQseWspO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3RdPT09LTE/dm9pZCAwOmx0LnVucGFja1BvbHlnb25IaWVyYXJjaHkoZSx0LFkpO2coZik/KHQ9Zi5zdGFydGluZ0luZGV4LGRlbGV0ZSBmLnN0YXJ0aW5nSW5kZXgpOnQrKztsZXQgZD1lW3QrK107cmV0dXJuIGcobil8fChuPW5ldyBnYyhBaykpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9cS5jbG9uZShhLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsbi5fdmVydGV4Rm9ybWF0KSxuLl9zdFJvdGF0aW9uPWksbi5fdGV4dHVyZUNvb3JkaW5hdGVzPWYsbi5wYWNrZWRMZW5ndGg9ZCxufTtnYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl92ZXJ0ZXhGb3JtYXQsbj1lLl9wb2x5Z29uSGllcmFyY2h5LG89ZS5fc3RSb3RhdGlvbixhPWUuX3RleHR1cmVDb29yZGluYXRlcyxyPWcoYSksaT1uLnBvc2l0aW9ucztpZihpPU5uKGkscy5lcXVhbHNFcHNpbG9uLCEwKSxpLmxlbmd0aDwzKXJldHVybjtsZXQgZj1mayxkPWRrLGM9dWssdT1sayxsPWhrO2lmKCFncy5jb21wdXRlUHJvamVjdFRvMkRBcmd1bWVudHMoaSxIZix1LGwpKXJldHVybjtpZihmPXMuY3Jvc3ModSxsLGYpLGY9cy5ub3JtYWxpemUoZixmKSwhcy5lcXVhbHNFcHNpbG9uKEhmLHMuWkVSTyxrLkVQU0lMT042KSl7bGV0IE49ZS5fZWxsaXBzb2lkLmdlb2RldGljU3VyZmFjZU5vcm1hbChIZixwayk7cy5kb3QoZixOKTwwJiYoZj1zLm5lZ2F0ZShmLGYpLHU9cy5uZWdhdGUodSx1KSl9bGV0IG09Z3MuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbihIZix1LGwpLGI9Z3MuY3JlYXRlUHJvamVjdFBvaW50VG8yREZ1bmN0aW9uKEhmLHUsbCk7dC50YW5nZW50JiYoZD1zLmNsb25lKHUsZCkpLHQuYml0YW5nZW50JiYoYz1zLmNsb25lKGwsYykpO2xldCBwPWx0LnBvbHlnb25zRnJvbUhpZXJhcmNoeShuLHIsbSwhMSkseT1wLmhpZXJhcmNoeSxFPXAucG9seWdvbnMsXz1mdW5jdGlvbihOKXtyZXR1cm4gTn0sVD1yP2x0LnBvbHlnb25zRnJvbUhpZXJhcmNoeShhLCEwLF8sITEpLnBvbHlnb25zOnZvaWQgMDtpZih5Lmxlbmd0aD09PTApcmV0dXJuO2k9eVswXS5vdXRlclJpbmc7bGV0IHc9Z2UuZnJvbVBvaW50cyhpKSxSPWx0LmNvbXB1dGVCb3VuZGluZ1JlY3RhbmdsZShmLGIsaSxvLGlrKSxTPVtdO2ZvcihsZXQgTj0wO048RS5sZW5ndGg7TisrKXtsZXQgUD1uZXcgcG8oe2dlb21ldHJ5OmdrKEVbTl0sdCxSLG8scj9UW05dOnZvaWQgMCxiLGYsZCxjKX0pO1MucHVzaChQKX1sZXQgQz1IdC5jb21iaW5lSW5zdGFuY2VzKFMpWzBdO0MuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9bmV3IEZsb2F0NjRBcnJheShDLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzKSxDLmluZGljZXM9a2UuY3JlYXRlVHlwZWRBcnJheShDLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLEMuaW5kaWNlcyk7bGV0IEk9Qy5hdHRyaWJ1dGVzO3JldHVybiB0LnBvc2l0aW9ufHxkZWxldGUgSS5wb3NpdGlvbixuZXcgdmUoe2F0dHJpYnV0ZXM6SSxpbmRpY2VzOkMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkMucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTp3fSl9O28wPWdjfSk7dmFyIGEwPXt9O3J0KGEwLHtkZWZhdWx0OigpPT5Fa30pO2Z1bmN0aW9uIHdrKGUsdCl7cmV0dXJuIGcodCkmJihlPW8wLnVucGFjayhlLHQpKSxvMC5jcmVhdGVHZW9tZXRyeShlKX12YXIgRWsscjA9WCgoKT0+e3BUKCk7c2UoKTtFaz13a30pO2Z1bmN0aW9uIFRrKGUpe2xldCB0PWUubGVuZ3RoLG49bmV3IEZsb2F0NjRBcnJheSh0KjMpLG89a2UuY3JlYXRlVHlwZWRBcnJheSh0LHQqMiksYT0wLHI9MDtmb3IobGV0IGY9MDtmPHQ7ZisrKXtsZXQgZD1lW2ZdO25bYSsrXT1kLngsblthKytdPWQueSxuW2ErK109ZC56LG9bcisrXT1mLG9bcisrXT0oZisxKSV0fWxldCBpPW5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpufSl9KTtyZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOmksaW5kaWNlczpvLHByaW1pdGl2ZVR5cGU6VWUuTElORVN9KX1mdW5jdGlvbiBfYyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvbHlnb25IaWVyYXJjaHk7dGhpcy5fcG9seWdvbkhpZXJhcmNoeT10LHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9bHQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aCh0LHMpKzF9dmFyIFJrLGkwLGdUPVgoKCk9PntYYSgpO010KCk7SWUoKTt2dCgpO1lwKCk7bXQoKTtzZSgpOyR0KCk7ZW4oKTt1bigpO2RjKCk7bHIoKTtubigpO1ZmKCk7Y24oKTtfYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6ZS5wb3NpdGlvbnN9fTtyZXR1cm4gbmV3IF9jKHQpfTtfYy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLG49bHQucGFja1BvbHlnb25IaWVyYXJjaHkoZS5fcG9seWdvbkhpZXJhcmNoeSx0LG4scyksdFtuXT1lLnBhY2tlZExlbmd0aCx0fTtSaz17cG9seWdvbkhpZXJhcmNoeTp7fX07X2MudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89bHQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQscyk7dD1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1lW3RdO3JldHVybiBnKG4pfHwobj1uZXcgX2MoUmspKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5wYWNrZWRMZW5ndGg9YSxufTtfYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb2x5Z29uSGllcmFyY2h5LG49dC5wb3NpdGlvbnM7aWYobj1ObihuLHMuZXF1YWxzRXBzaWxvbiwhMCksbi5sZW5ndGg8M3x8IWdzLnZhbGlkT3V0bGluZShuKSlyZXR1cm47bGV0IGE9bHQucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeSh0LCExKTtpZihhLmxlbmd0aD09PTApcmV0dXJuO2xldCByPVtdO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtsZXQgYz1uZXcgcG8oe2dlb21ldHJ5OlRrKGFbZF0pfSk7ci5wdXNoKGMpfWxldCBpPUh0LmNvbWJpbmVJbnN0YW5jZXMocilbMF0sZj1nZS5mcm9tUG9pbnRzKHQucG9zaXRpb25zKTtyZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOmkuYXR0cmlidXRlcyxpbmRpY2VzOmkuaW5kaWNlcyxwcmltaXRpdmVUeXBlOmkucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpmfSl9O2kwPV9jfSk7dmFyIGMwPXt9O3J0KGMwLHtkZWZhdWx0OigpPT5Pa30pO2Z1bmN0aW9uIHhrKGUsdCl7cmV0dXJuIGcodCkmJihlPWkwLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLGkwLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBPayxzMD1YKCgpPT57Z1QoKTtzZSgpO3FlKCk7T2s9eGt9KTt2YXIgU2ssaG4seWM9WCgoKT0+e1NrPXtST1VOREVEOjAsTUlURVJFRDoxLEJFVkVMRUQ6Mn0saG49T2JqZWN0LmZyZWV6ZShTayl9KTtmdW5jdGlvbiBDayhlKXtsZXQgdD1lLl91U3F1YXJlZCxuPWUuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLG89ZS5fZWxsaXBzb2lkLm1pbmltdW1SYWRpdXMsYT0obi1vKS9uLHI9TWF0aC5jb3MoZS5fc3RhcnRIZWFkaW5nKSxpPU1hdGguc2luKGUuX3N0YXJ0SGVhZGluZyksZj0oMS1hKSpNYXRoLnRhbihlLl9zdGFydC5sYXRpdHVkZSksZD0xL01hdGguc3FydCgxK2YqZiksYz1kKmYsdT1NYXRoLmF0YW4yKGYsciksbD1kKmksaD1sKmwsbT0xLWgsYj1NYXRoLnNxcnQobSkscD10LzQseT1wKnAsRT15KnAsXz15KnksVD0xK3AtMyp5LzQrNSpFLzQtMTc1Kl8vNjQsdz0xLXArMTUqeS84LTM1KkUvOCxSPTEtMypwKzM1KnkvNCxTPTEtNSpwLEM9VCp1LXcqTWF0aC5zaW4oMip1KSpwLzItUipNYXRoLnNpbig0KnUpKnkvMTYtUypNYXRoLnNpbig2KnUpKkUvNDgtTWF0aC5zaW4oOCp1KSo1Kl8vNTEyLEk9ZS5fY29uc3RhbnRzO0kuYT1uLEkuYj1vLEkuZj1hLEkuY29zaW5lSGVhZGluZz1yLEkuc2luZUhlYWRpbmc9aSxJLnRhblU9ZixJLmNvc2luZVU9ZCxJLnNpbmVVPWMsSS5zaWdtYT11LEkuc2luZUFscGhhPWwsSS5zaW5lU3F1YXJlZEFscGhhPWgsSS5jb3NpbmVTcXVhcmVkQWxwaGE9bSxJLmNvc2luZUFscGhhPWIsSS51Mk92ZXI0PXAsSS51NE92ZXIxNj15LEkudTZPdmVyNjQ9RSxJLnU4T3ZlcjI1Nj1fLEkuYTA9VCxJLmExPXcsSS5hMj1SLEkuYTM9UyxJLmRpc3RhbmNlUmF0aW89Q31mdW5jdGlvbiBNayhlLHQpe3JldHVybiBlKnQqKDQrZSooNC0zKnQpKS8xNn1mdW5jdGlvbiBfVChlLHQsbixvLGEscixpKXtsZXQgZj1NayhlLG4pO3JldHVybigxLWYpKmUqdCoobytmKmEqKGkrZipyKigyKmkqaS0xKSkpfWZ1bmN0aW9uIE5rKGUsdCxuLG8sYSxyLGkpe2xldCBmPSh0LW4pL3QsZD1yLW8sYz1NYXRoLmF0YW4oKDEtZikqTWF0aC50YW4oYSkpLHU9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKGkpKSxsPU1hdGguY29zKGMpLGg9TWF0aC5zaW4oYyksbT1NYXRoLmNvcyh1KSxiPU1hdGguc2luKHUpLHA9bCptLHk9bCpiLEU9aCpiLF89aCptLFQ9ZCx3PWsuVFdPX1BJLFI9TWF0aC5jb3MoVCksUz1NYXRoLnNpbihUKSxDLEksTixQLHY7ZG97Uj1NYXRoLmNvcyhUKSxTPU1hdGguc2luKFQpO2xldCBIPXktXypSO049TWF0aC5zcXJ0KG0qbSpTKlMrSCpIKSxJPUUrcCpSLEM9TWF0aC5hdGFuMihOLEkpO2xldCBPO049PT0wPyhPPTAsUD0xKTooTz1wKlMvTixQPTEtTypPKSx3PVQsdj1JLTIqRS9QLGlzRmluaXRlKHYpfHwodj0wKSxUPWQrX1QoZixPLFAsQyxOLEksdil9d2hpbGUoTWF0aC5hYnMoVC13KT5rLkVQU0lMT04xMik7bGV0IEE9UCoodCp0LW4qbikvKG4qbikseD0xK0EqKDQwOTYrQSooQSooMzIwLTE3NSpBKS03NjgpKS8xNjM4NCxNPUEqKDI1NitBKihBKig3NC00NypBKS0xMjgpKS8xMDI0LEY9dip2LFU9TSpOKih2K00qKEkqKDIqRi0xKS1NKnYqKDQqTipOLTMpKig0KkYtMykvNikvNCksej1uKngqKEMtVSksRD1NYXRoLmF0YW4yKG0qUyx5LV8qUiksRz1NYXRoLmF0YW4yKGwqUyx5KlItXyk7ZS5fZGlzdGFuY2U9eixlLl9zdGFydEhlYWRpbmc9RCxlLl9lbmRIZWFkaW5nPUcsZS5fdVNxdWFyZWQ9QX1mdW5jdGlvbiB5VChlLHQsbixvKXtsZXQgYT1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHQsZjApLElrKSxyPXMubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obixmMCksZjApO05rKGUsby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyx0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpLGUuX3N0YXJ0PXJlLmNsb25lKHQsZS5fc3RhcnQpLGUuX2VuZD1yZS5jbG9uZShuLGUuX2VuZCksZS5fc3RhcnQuaGVpZ2h0PTAsZS5fZW5kLmhlaWdodD0wLENrKGUpfWZ1bmN0aW9uIEtmKGUsdCxuKXtsZXQgbz1uPz9xLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IHJlLHRoaXMuX2VuZD1uZXcgcmUsdGhpcy5fY29uc3RhbnRzPXt9LHRoaXMuX3N0YXJ0SGVhZGluZz12b2lkIDAsdGhpcy5fZW5kSGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX3VTcXVhcmVkPXZvaWQgMCxnKGUpJiZnKHQpJiZ5VCh0aGlzLGUsdCxvKX12YXIgSWssZjAsYmgsZDA9WCgoKT0+e0llKCk7RXQoKTtzZSgpO3FlKCk7R2UoKTtJaz1uZXcgcyxmMD1uZXcgcztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLZi5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc3RhbmNlfX0sc3RhcnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH19LGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH19LHN0YXJ0SGVhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0SGVhZGluZ319LGVuZEhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmRIZWFkaW5nfX19KTtLZi5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKGUsdCl7eVQodGhpcyxlLHQsdGhpcy5fZWxsaXBzb2lkKX07S2YucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdGcmFjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UodGhpcy5fZGlzdGFuY2UqZSx0KX07S2YucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXtsZXQgbj10aGlzLl9jb25zdGFudHMsbz1uLmRpc3RhbmNlUmF0aW8rZS9uLmIsYT1NYXRoLmNvcygyKm8pLHI9TWF0aC5jb3MoNCpvKSxpPU1hdGguY29zKDYqbyksZj1NYXRoLnNpbigyKm8pLGQ9TWF0aC5zaW4oNCpvKSxjPU1hdGguc2luKDYqbyksdT1NYXRoLnNpbig4Km8pLGw9bypvLGg9bypsLG09bi51OE92ZXIyNTYsYj1uLnUyT3ZlcjQscD1uLnU2T3ZlcjY0LHk9bi51NE92ZXIxNixFPTIqaCptKmEvMytvKigxLWIrNyp5LzQtMTUqcC80KzU3OSptLzY0LSh5LTE1KnAvNCsxODcqbS8xNikqYS0oNSpwLzQtMTE1Km0vMTYpKnItMjkqbSppLzE2KSsoYi8yLXkrNzEqcC8zMi04NSptLzE2KSpmKyg1KnkvMTYtNSpwLzQrMzgzKm0vOTYpKmQtbCooKHAtMTEqbS8yKSpmKzUqbSpkLzIpKygyOSpwLzk2LTI5Km0vMTYpKmMrNTM5Km0qdS8xNTM2LF89TWF0aC5hc2luKE1hdGguc2luKEUpKm4uY29zaW5lQWxwaGEpLFQ9TWF0aC5hdGFuKG4uYS9uLmIqTWF0aC50YW4oXykpO0U9RS1uLnNpZ21hO2xldCB3PU1hdGguY29zKDIqbi5zaWdtYStFKSxSPU1hdGguc2luKEUpLFM9TWF0aC5jb3MoRSksQz1uLmNvc2luZVUqUyxJPW4uc2luZVUqUixQPU1hdGguYXRhbjIoUipuLnNpbmVIZWFkaW5nLEMtSSpuLmNvc2luZUhlYWRpbmcpLV9UKG4uZixuLnNpbmVBbHBoYSxuLmNvc2luZVNxdWFyZWRBbHBoYSxFLFIsUyx3KTtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9dGhpcy5fc3RhcnQubG9uZ2l0dWRlK1AsdC5sYXRpdHVkZT1ULHQuaGVpZ2h0PTAsdCk6bmV3IHJlKHRoaXMuX3N0YXJ0LmxvbmdpdHVkZStQLFQsMCl9O2JoPUtmfSk7ZnVuY3Rpb24gVFQoZSx0LG4pe2xldCBvPWwwO28ubGVuZ3RoPWU7bGV0IGE7aWYodD09PW4pe2ZvcihhPTA7YTxlO2ErKylvW2FdPXQ7cmV0dXJuIG99bGV0IGk9KG4tdCkvZTtmb3IoYT0wO2E8ZTthKyspe2xldCBmPXQrYSppO29bYV09Zn1yZXR1cm4gb31mdW5jdGlvbiBqayhlLHQsbixvLGEscixpLGYpe2xldCBkPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLGgwKSxjPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0LExrKSx1PUdvLm51bWJlck9mUG9pbnRzKGUsdCxuKSxsPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZCxnaCksaD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGMscGgpLG09VFQodSxhLHIpO3UwLnNldEVuZFBvaW50cyhsLGgpO2xldCBiPXUwLnN1cmZhY2VEaXN0YW5jZS91LHA9ZjtsLmhlaWdodD1hO2xldCB5PW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obCx4aSk7cy5wYWNrKHksaSxwKSxwKz0zO2ZvcihsZXQgRT0xO0U8dTtFKyspe2xldCBfPXUwLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoRSpiLHBoKTtfLmhlaWdodD1tW0VdLHk9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihfLHhpKSxzLnBhY2soeSxpLHApLHArPTN9cmV0dXJuIHB9ZnVuY3Rpb24gemsoZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsZ2gpLGM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LHBoKSx1PUdvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKGQsYyxuKTtkLmhlaWdodD0wLGMuaGVpZ2h0PTA7bGV0IGw9VFQodSxhLHIpO3FmLmVsbGlwc29pZC5lcXVhbHMobyl8fChxZj1uZXcgZWEodm9pZCAwLHZvaWQgMCxvKSkscWYuc2V0RW5kUG9pbnRzKGQsYyk7bGV0IGg9cWYuc3VyZmFjZURpc3RhbmNlL3UsbT1mO2QuaGVpZ2h0PWE7bGV0IGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihkLHhpKTtzLnBhY2soYixpLG0pLG0rPTM7Zm9yKGxldCBwPTE7cDx1O3ArKyl7bGV0IHk9cWYuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShwKmgscGgpO3kuaGVpZ2h0PWxbcF0sYj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHkseGkpLHMucGFjayhiLGksbSksbSs9M31yZXR1cm4gbX12YXIgR28sUGssa2ssdmssQVQsRmssd1QsRGssQmssVWssbDAsZ2gscGgseGksaDAsTGssdTAscWYsRVQsR2ssQW4sd3M9WCgoKT0+e0llKCk7RXQoKTtzZSgpO3FlKCk7ZDAoKTtVZigpO3BpKCk7R2UoKTtwbigpO2dpKCk7R289e307R28ubnVtYmVyT2ZQb2ludHM9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXMuZGlzdGFuY2UoZSx0KTtyZXR1cm4gTWF0aC5jZWlsKG8vbil9O0dvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1NYXRoLnBvdyhlLmxvbmdpdHVkZS10LmxvbmdpdHVkZSwyKStNYXRoLnBvdyhlLmxhdGl0dWRlLXQubGF0aXR1ZGUsMik7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKE1hdGguc3FydChvLyhuKm4pKSkpfTtQaz1uZXcgcmU7R28uZXh0cmFjdEhlaWdodHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKTtmb3IobGV0IGE9MDthPG47YSsrKXtsZXQgcj1lW2FdO29bYV09dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLFBrKS5oZWlnaHR9cmV0dXJuIG99O2trPW5ldyAkLHZrPW5ldyBzLEFUPW5ldyBzLEZrPW5ldyBzbihzLlVOSVRfWCwwKSx3VD1uZXcgcyxEaz1uZXcgc24ocy5VTklUX1gsMCksQms9bmV3IHMsVWs9bmV3IHMsbDA9W107Z2g9bmV3IHJlLHBoPW5ldyByZSx4aT1uZXcgcyxoMD1uZXcgcyxMaz1uZXcgcyx1MD1uZXcgYmgscWY9bmV3IGVhO0dvLndyYXBMb25naXR1ZGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1bXSxvPVtdO2lmKGcoZSkmJmUubGVuZ3RoPjApe3Q9dD8/JC5JREVOVElUWTtsZXQgYT0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbih0LGtrKSxyPSQubXVsdGlwbHlCeVBvaW50KGEscy5aRVJPLHZrKSxpPXMubm9ybWFsaXplKCQubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoYSxzLlVOSVRfWSxBVCksQVQpLGY9c24uZnJvbVBvaW50Tm9ybWFsKHIsaSxGayksZD1zLm5vcm1hbGl6ZSgkLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGEscy5VTklUX1gsd1QpLHdUKSxjPXNuLmZyb21Qb2ludE5vcm1hbChyLGQsRGspLHU9MTtuLnB1c2gocy5jbG9uZShlWzBdKSk7bGV0IGw9blswXSxoPWUubGVuZ3RoO2ZvcihsZXQgbT0xO208aDsrK20pe2xldCBiPWVbbV07aWYoc24uZ2V0UG9pbnREaXN0YW5jZShjLGwpPDB8fHNuLmdldFBvaW50RGlzdGFuY2UoYyxiKTwwKXtsZXQgcD1uby5saW5lU2VnbWVudFBsYW5lKGwsYixmLEJrKTtpZihnKHApKXtsZXQgeT1zLm11bHRpcGx5QnlTY2FsYXIoaSw1ZS05LFVrKTtzbi5nZXRQb2ludERpc3RhbmNlKGYsbCk8MCYmcy5uZWdhdGUoeSx5KSxuLnB1c2gocy5hZGQocCx5LG5ldyBzKSksby5wdXNoKHUrMSkscy5uZWdhdGUoeSx5KSxuLnB1c2gocy5hZGQocCx5LG5ldyBzKSksdT0xfX1uLnB1c2gocy5jbG9uZShlW21dKSksdSsrLGw9Yn1vLnB1c2godSl9cmV0dXJue3Bvc2l0aW9uczpuLGxlbmd0aHM6b319O0dvLmdlbmVyYXRlQXJjPWZ1bmN0aW9uKGUpe2coZSl8fChlPXt9KTtsZXQgdD1lLnBvc2l0aW9ucyxuPXQubGVuZ3RoLG89ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCxhPWUuaGVpZ2h0Pz8wLHI9QXJyYXkuaXNBcnJheShhKTtpZihuPDEpcmV0dXJuW107aWYobj09PTEpe2xldCBwPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0WzBdLGgwKTtpZihhPXI/YVswXTphLGEhPT0wKXtsZXQgeT1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChwLHhpKTtzLm11bHRpcGx5QnlTY2FsYXIoeSxhLHkpLHMuYWRkKHAseSxwKX1yZXR1cm5bcC54LHAueSxwLnpdfWxldCBpPWUubWluRGlzdGFuY2U7aWYoIWcoaSkpe2xldCBwPWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFO2k9ay5jaG9yZExlbmd0aChwLG8ubWF4aW11bVJhZGl1cyl9bGV0IGY9MCxkO2ZvcihkPTA7ZDxuLTE7ZCsrKWYrPUdvLm51bWJlck9mUG9pbnRzKHRbZF0sdFtkKzFdLGkpO2xldCBjPShmKzEpKjMsdT1uZXcgQXJyYXkoYyksbD0wO2ZvcihkPTA7ZDxuLTE7ZCsrKXtsZXQgcD10W2RdLHk9dFtkKzFdLEU9cj9hW2RdOmEsXz1yP2FbZCsxXTphO2w9amsocCx5LGksbyxFLF8sdSxsKX1sMC5sZW5ndGg9MDtsZXQgaD10W24tMV0sbT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGgsZ2gpO20uaGVpZ2h0PXI/YVtuLTFdOmE7bGV0IGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihtLHhpKTtyZXR1cm4gcy5wYWNrKGIsdSxjLTMpLHV9O0VUPW5ldyByZSxHaz1uZXcgcmU7R28uZ2VuZXJhdGVSaHVtYkFyYz1mdW5jdGlvbihlKXtnKGUpfHwoZT17fSk7bGV0IHQ9ZS5wb3NpdGlvbnMsbj10Lmxlbmd0aCxvPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsYT1lLmhlaWdodD8/MCxyPUFycmF5LmlzQXJyYXkoYSk7aWYobjwxKXJldHVybltdO2lmKG49PT0xKXtsZXQgRT1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodFswXSxoMCk7aWYoYT1yP2FbMF06YSxhIT09MCl7bGV0IF89by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRSx4aSk7cy5tdWx0aXBseUJ5U2NhbGFyKF8sYSxfKSxzLmFkZChFLF8sRSl9cmV0dXJuW0UueCxFLnksRS56XX1sZXQgaT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxmPTAsZCxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFswXSxFVCksdTtmb3IoZD0wO2Q8bi0xO2QrKyl1PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtkKzFdLEdrKSxmKz1Hby5udW1iZXJPZlBvaW50c1JodW1iTGluZShjLHUsaSksYz1yZS5jbG9uZSh1LEVUKTtsZXQgbD0oZisxKSozLGg9bmV3IEFycmF5KGwpLG09MDtmb3IoZD0wO2Q8bi0xO2QrKyl7bGV0IEU9dFtkXSxfPXRbZCsxXSxUPXI/YVtkXTphLHc9cj9hW2QrMV06YTttPXprKEUsXyxpLG8sVCx3LGgsbSl9bDAubGVuZ3RoPTA7bGV0IGI9dFtuLTFdLHA9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhiLGdoKTtwLmhlaWdodD1yP2Fbbi0xXTphO2xldCB5PW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocCx4aSk7cmV0dXJuIHMucGFjayh5LGgsbC0zKSxofTtHby5nZW5lcmF0ZUNhcnRlc2lhbkFyYz1mdW5jdGlvbihlKXtsZXQgdD1Hby5nZW5lcmF0ZUFyYyhlKSxuPXQubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCBhPTA7YTxuO2ErKylvW2FdPXMudW5wYWNrKHQsYSozKTtyZXR1cm4gb307R28uZ2VuZXJhdGVDYXJ0ZXNpYW5SaHVtYkFyYz1mdW5jdGlvbihlKXtsZXQgdD1Hby5nZW5lcmF0ZVJodW1iQXJjKGUpLG49dC5sZW5ndGgvMyxvPW5ldyBBcnJheShuKTtmb3IobGV0IGE9MDthPG47YSsrKW9bYV09cy51bnBhY2sodCxhKjMpO3JldHVybiBvfTtBbj1Hb30pO2Z1bmN0aW9uIFdmKGUsdCl7ZyhSVFtlXSl8fChSVFtlXT0hMCxjb25zb2xlLndhcm4odD8/ZSkpfXZhciBSVCxfaCxtMD1YKCgpPT57c2UoKTtSVD17fTtXZi5nZW9tZXRyeU91dGxpbmVzPSJFbnRpdHkgZ2VvbWV0cnkgb3V0bGluZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRlcnJhaW4uIE91dGxpbmVzIHdpbGwgYmUgZGlzYWJsZWQuIFRvIGVuYWJsZSBvdXRsaW5lcywgZGlzYWJsZSBnZW9tZXRyeSB0ZXJyYWluIGNsYW1waW5nIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyBoZWlnaHQgdG8gMC4iO1dmLmdlb21ldHJ5WkluZGV4PSJFbnRpdHkgZ2VvbWV0cnkgd2l0aCB6SW5kZXggYXJlIHVuc3VwcG9ydGVkIHdoZW4gaGVpZ2h0IG9yIGV4dHJ1ZGVkSGVpZ2h0IGFyZSBkZWZpbmVkLiAgekluZGV4IHdpbGwgYmUgaWdub3JlZCI7V2YuZ2VvbWV0cnlIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBoZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGhlaWdodC4gIGhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO1dmLmdlb21ldHJ5RXh0cnVkZWRIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBleHRydWRlZEhlaWdodFJlZmVyZW5jZSBtdXN0IGFsc28gaGF2ZSBhIGRlZmluZWQgZXh0cnVkZWRIZWlnaHQuICBleHRydWRlZEhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO19oPVdmfSk7ZnVuY3Rpb24gUWsoZSx0KXtsZXQgbj1uZXcgQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2IwPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYSxiMCksbltvXT1iMC5oZWlnaHQsZVtvXT10LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoYSxhKX1yZXR1cm4gbn1mdW5jdGlvbiBwMChlLHQsbixvKXtsZXQgYT1lWzBdLHI9ZVsxXSxpPXMuYW5nbGVCZXR3ZWVuKGEsciksZj1NYXRoLmNlaWwoaS9vKSxkPW5ldyBBcnJheShmKSxjO2lmKHQ9PT1uKXtmb3IoYz0wO2M8ZjtjKyspZFtjXT10O3JldHVybiBkLnB1c2gobiksZH1sZXQgbD0obi10KS9mO2ZvcihjPTE7YzxmO2MrKyl7bGV0IGg9dCtjKmw7ZFtjXT1ofXJldHVybiBkWzBdPXQsZC5wdXNoKG4pLGR9ZnVuY3Rpb24gJGsoZSx0LG4sbyl7bGV0IGE9bmV3IHhvKG4sbykscj1hLnByb2plY3RQb2ludE9udG9QbGFuZShzLmFkZChuLGUsQWgpLEFoKSxpPWEucHJvamVjdFBvaW50T250b1BsYW5lKHMuYWRkKG4sdCx3aCksd2gpLGY9WS5hbmdsZUJldHdlZW4ocixpKTtyZXR1cm4gaS54KnIueS1pLnkqci54Pj0wPy1mOmZ9ZnVuY3Rpb24gS3IoZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1vdixjPWF2O0FjPWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGUsYSxBYyksZD0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKEFjLGV2LGQpLGQ9cy5ub3JtYWxpemUoZCxkKTtsZXQgdT0kayhkLHQsZSxhKTtnMD1KLmZyb21Sb3RhdGlvbloodSxnMCkseFQuej1yLEFjPSQubXVsdGlwbHlUcmFuc2Zvcm1hdGlvbihBYywkLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKGcwLHhULHR2KSxBYyk7bGV0IGw9bnY7bFswXT1pO2ZvcihsZXQgaD0wO2g8ZjtoKyspZm9yKGxldCBtPTA7bTxuLmxlbmd0aDttKz0zKWM9cy5mcm9tQXJyYXkobixtLGMpLGM9Si5tdWx0aXBseUJ5VmVjdG9yKGwsYyxjKSxjPSQubXVsdGlwbHlCeVBvaW50KEFjLGMsYyksby5wdXNoKGMueCxjLnksYy56KTtyZXR1cm4gb31mdW5jdGlvbiBfMChlLHQsbixvLGEscixpKXtmb3IobGV0IGY9MDtmPGUubGVuZ3RoO2YrPTMpe2xldCBkPXMuZnJvbUFycmF5KGUsZixydik7bz1LcihkLHQsbixvLGEscltmLzNdLGksMSl9cmV0dXJuIG99ZnVuY3Rpb24gaXYoZSx0KXtsZXQgbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKjYpLGE9MCxyPXQueCt0LndpZHRoLzIsaT10LnkrdC5oZWlnaHQvMixmPWVbMF07b1thKytdPWYueC1yLG9bYSsrXT0wLG9bYSsrXT1mLnktaTtmb3IobGV0IGQ9MTtkPG47ZCsrKXtmPWVbZF07bGV0IGM9Zi54LXIsdT1mLnktaTtvW2ErK109YyxvW2ErK109MCxvW2ErK109dSxvW2ErK109YyxvW2ErK109MCxvW2ErK109dX1yZXR1cm4gZj1lWzBdLG9bYSsrXT1mLngtcixvW2ErK109MCxvW2ErK109Zi55LWksb31mdW5jdGlvbiBPVChlLHQpe2xldCBuPWUubGVuZ3RoLG89bmV3IEFycmF5KG4qMyksYT0wLHI9dC54K3Qud2lkdGgvMixpPXQueSt0LmhlaWdodC8yO2ZvcihsZXQgZj0wO2Y8bjtmKyspb1thKytdPWVbZl0ueC1yLG9bYSsrXT0wLG9bYSsrXT1lW2ZdLnktaTtyZXR1cm4gb31mdW5jdGlvbiBOVChlLHQsbixvLGEscixpLGYsZCxjKXtsZXQgdT1zLmFuZ2xlQmV0d2VlbihzLnN1YnRyYWN0KHQsZSxFcykscy5zdWJ0cmFjdChuLGUseWgpKSxsPW89PT1obi5CRVZFTEVEPzA6TWF0aC5jZWlsKHUvay50b1JhZGlhbnMoNSkpLGg7YT9oPUouZnJvbVF1YXRlcm5pb24oUWUuZnJvbUF4aXNBbmdsZShzLm5lZ2F0ZShlLEVzKSx1LyhsKzEpLFNUKSxNVCk6aD1KLmZyb21RdWF0ZXJuaW9uKFFlLmZyb21BeGlzQW5nbGUoZSx1LyhsKzEpLFNUKSxNVCk7bGV0IG0sYjtpZih0PXMuY2xvbmUodCxDVCksbD4wKXtsZXQgcD1jPzI6MTtmb3IobGV0IHk9MDt5PGw7eSsrKXQ9Si5tdWx0aXBseUJ5VmVjdG9yKGgsdCx0KSxtPXMuc3VidHJhY3QodCxlLEVzKSxtPXMubm9ybWFsaXplKG0sbSksYXx8KG09cy5uZWdhdGUobSxtKSksYj1yLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCx5aCksaT1LcihiLG0sZixpLHIsZCwxLHApfWVsc2UgbT1zLnN1YnRyYWN0KHQsZSxFcyksbT1zLm5vcm1hbGl6ZShtLG0pLGF8fChtPXMubmVnYXRlKG0sbSkpLGI9ci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQseWgpLGk9S3IoYixtLGYsaSxyLGQsMSwxKSxuPXMuY2xvbmUobixDVCksbT1zLnN1YnRyYWN0KG4sZSxFcyksbT1zLm5vcm1hbGl6ZShtLG0pLGF8fChtPXMubmVnYXRlKG0sbSkpLGI9ci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG4seWgpLGk9S3IoYixtLGYsaSxyLGQsMSwxKTtyZXR1cm4gaX12YXIgX28sVmssSGssS2sscWssV2ssWGssWWssSmssWmssRXMseWgsWGYsYjAsQWgsd2gsZXYsQWMsdHYsZzAsbnYsb3YsYXYseFQscnYsU1QsQ1QsTVQsY3Ysc3YsT2ksRWg9WCgoKT0+e2p0KCk7SWUoKTtnYSgpO0V0KCk7eWMoKTtwcygpO0dlKCk7RG4oKTtwbigpO3dzKCk7Sm8oKTtzcigpO20wKCk7X289W25ldyBzLG5ldyBzXSxWaz1uZXcgcyxIaz1uZXcgcyxLaz1uZXcgcyxxaz1uZXcgcyxXaz1uZXcgcyxYaz1uZXcgcyxZaz1uZXcgcyxKaz1uZXcgcyxaaz1uZXcgcyxFcz1uZXcgcyx5aD1uZXcgcyxYZj17fSxiMD1uZXcgcmU7QWg9bmV3IHMsd2g9bmV3IHM7ZXY9bmV3IHMoLTEsMCwwKSxBYz1uZXcgJCx0dj1uZXcgJCxnMD1uZXcgSixudj1KLklERU5USVRZLmNsb25lKCksb3Y9bmV3IHMsYXY9bmV3IGR0LHhUPW5ldyBzO3J2PW5ldyBzO1NUPW5ldyBRZSxDVD1uZXcgcyxNVD1uZXcgSjtYZi5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlPWZ1bmN0aW9uKGUpe2xldCB0PWUubGVuZ3RoLG49W107Zm9yKGxldCBvPXQtMSxhPTA7YTx0O289YSsrKXtsZXQgcj1lW29dLGk9ZVthXTtZLmVxdWFscyhyLGkpfHxuLnB1c2goaSl9cmV0dXJuIG59O1hmLmFuZ2xlSXNHcmVhdGVyVGhhblBpPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPW5ldyB4byhuLG8pLHI9YS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUocy5hZGQobixlLEFoKSxBaCksaT1hLnByb2plY3RQb2ludE9udG9QbGFuZShzLmFkZChuLHQsd2gpLHdoKTtyZXR1cm4gaS54KnIueS1pLnkqci54Pj0wfTtjdj1uZXcgcyxzdj1uZXcgcztYZi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9by5fZWxsaXBzb2lkLGk9UWsoZSxyKSxmPW8uX2dyYW51bGFyaXR5LGQ9by5fY29ybmVyVHlwZSxjPWE/aXYodCxuKTpPVCh0LG4pLHU9YT9PVCh0LG4pOnZvaWQgMCxsPW4uaGVpZ2h0LzIsaD1uLndpZHRoLzIsbT1lLmxlbmd0aCxiPVtdLHA9YT9bXTp2b2lkIDAseT1WayxFPUhrLF89S2ssVD1xayx3PVdrLFI9WGssUz1ZayxDPUprLEk9WmssTj1lWzBdLFA9ZVsxXTtUPXIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKE4sVCkseT1zLnN1YnRyYWN0KFAsTix5KSx5PXMubm9ybWFsaXplKHkseSksQz1zLmNyb3NzKFQseSxDKSxDPXMubm9ybWFsaXplKEMsQyk7bGV0IHY9aVswXSxBPWlbMV07YSYmKHA9S3IoTixDLHUscCxyLHYrbCwxLDEpKSxJPXMuY2xvbmUoTixJKSxOPVAsRT1zLm5lZ2F0ZSh5LEUpO2xldCB4LE07Zm9yKGxldCB6PTE7ejxtLTE7eisrKXtsZXQgRD1hPzI6MTtpZihQPWVbeisxXSxOLmVxdWFscyhQKSl7X2goIlBvc2l0aW9ucyBhcmUgdG9vIGNsb3NlIGFuZCBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHdpdGggcm91bmRpbmcgZXJyb3IuIik7Y29udGludWV9eT1zLnN1YnRyYWN0KFAsTix5KSx5PXMubm9ybWFsaXplKHkseSksVD1yLmdlb2RldGljU3VyZmFjZU5vcm1hbChOLFQpO2xldCBHPXMubXVsdGlwbHlCeVNjYWxhcihULHMuZG90KHksVCksY3YpO3Muc3VidHJhY3QoeSxHLEcpLHMubm9ybWFsaXplKEcsRyk7bGV0IEg9cy5tdWx0aXBseUJ5U2NhbGFyKFQscy5kb3QoRSxUKSxzdik7aWYocy5zdWJ0cmFjdChFLEgsSCkscy5ub3JtYWxpemUoSCxIKSwhay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKHMuZG90KEcsSCkpLDEsay5FUFNJTE9ONykpe189cy5hZGQoeSxFLF8pLF89cy5ub3JtYWxpemUoXyxfKSxfPXMuY3Jvc3MoXyxULF8pLF89cy5jcm9zcyhULF8sXyksXz1zLm5vcm1hbGl6ZShfLF8pO2xldCBaPTEvTWF0aC5tYXgoLjI1LHMubWFnbml0dWRlKHMuY3Jvc3MoXyxFLEVzKSkpLG9lPVhmLmFuZ2xlSXNHcmVhdGVyVGhhblBpKHksRSxOLHIpO29lPyh3PXMuYWRkKE4scy5tdWx0aXBseUJ5U2NhbGFyKF8sWipoLF8pLHcpLFI9cy5hZGQodyxzLm11bHRpcGx5QnlTY2FsYXIoQyxoLFIpLFIpLF9vWzBdPXMuY2xvbmUoSSxfb1swXSksX29bMV09cy5jbG9uZShSLF9vWzFdKSx4PXAwKF9vLHYrbCxBK2wsZiksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOl9vLGdyYW51bGFyaXR5OmYsZWxsaXBzb2lkOnJ9KSxiPV8wKE0sQyxjLGIscix4LDEpLEM9cy5jcm9zcyhULHksQyksQz1zLm5vcm1hbGl6ZShDLEMpLFM9cy5hZGQodyxzLm11bHRpcGx5QnlTY2FsYXIoQyxoLFMpLFMpLGQ9PT1obi5ST1VOREVEfHxkPT09aG4uQkVWRUxFRD9OVCh3LFIsUyxkLG9lLHIsYixjLEErbCxhKTooXz1zLm5lZ2F0ZShfLF8pLGI9S3IoTixfLGMsYixyLEErbCxaLEQpKSxJPXMuY2xvbmUoUyxJKSk6KHc9cy5hZGQoTixzLm11bHRpcGx5QnlTY2FsYXIoXyxaKmgsXyksdyksUj1zLmFkZCh3LHMubXVsdGlwbHlCeVNjYWxhcihDLC1oLFIpLFIpLF9vWzBdPXMuY2xvbmUoSSxfb1swXSksX29bMV09cy5jbG9uZShSLF9vWzFdKSx4PXAwKF9vLHYrbCxBK2wsZiksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOl9vLGdyYW51bGFyaXR5OmYsZWxsaXBzb2lkOnJ9KSxiPV8wKE0sQyxjLGIscix4LDEpLEM9cy5jcm9zcyhULHksQyksQz1zLm5vcm1hbGl6ZShDLEMpLFM9cy5hZGQodyxzLm11bHRpcGx5QnlTY2FsYXIoQywtaCxTKSxTKSxkPT09aG4uUk9VTkRFRHx8ZD09PWhuLkJFVkVMRUQ/TlQodyxSLFMsZCxvZSxyLGIsYyxBK2wsYSk6Yj1LcihOLF8sYyxiLHIsQStsLFosRCksST1zLmNsb25lKFMsSSkpLEU9cy5uZWdhdGUoeSxFKX1lbHNlIGI9S3IoSSxDLGMsYixyLHYrbCwxLDEpLEk9Tjt2PUEsQT1pW3orMV0sTj1QfV9vWzBdPXMuY2xvbmUoSSxfb1swXSksX29bMV09cy5jbG9uZShOLF9vWzFdKSx4PXAwKF9vLHYrbCxBK2wsZiksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOl9vLGdyYW51bGFyaXR5OmYsZWxsaXBzb2lkOnJ9KSxiPV8wKE0sQyxjLGIscix4LDEpLGEmJihwPUtyKE4sQyx1LHAscixBK2wsMSwxKSksbT1iLmxlbmd0aDtsZXQgRj1hP20rcC5sZW5ndGg6bSxVPW5ldyBGbG9hdDY0QXJyYXkoRik7cmV0dXJuIFUuc2V0KGIpLGEmJlUuc2V0KHAsbSksVX07T2k9WGZ9KTtmdW5jdGlvbiBUaChlLHQsbixvLGEpe2xldCByPXMuYW5nbGVCZXR3ZWVuKHMuc3VidHJhY3QodCxlLFRzKSxzLnN1YnRyYWN0KG4sZSxGVCkpLGk9bz09PWhuLkJFVkVMRUQ/MTpNYXRoLmNlaWwoci9rLnRvUmFkaWFucyg1KSkrMSxmPWkqMyxkPW5ldyBBcnJheShmKTtkW2YtM109bi54LGRbZi0yXT1uLnksZFtmLTFdPW4uejtsZXQgYzthP2M9Si5mcm9tUXVhdGVybmlvbihRZS5mcm9tQXhpc0FuZ2xlKHMubmVnYXRlKGUsVHMpLHIvaSxQVCksa1QpOmM9Si5mcm9tUXVhdGVybmlvbihRZS5mcm9tQXhpc0FuZ2xlKGUsci9pLFBUKSxrVCk7bGV0IHU9MDt0PXMuY2xvbmUodCxUcyk7Zm9yKGxldCBsPTA7bDxpO2wrKyl0PUoubXVsdGlwbHlCeVZlY3RvcihjLHQsdCksZFt1KytdPXQueCxkW3UrK109dC55LGRbdSsrXT10Lno7cmV0dXJuIGR9ZnVuY3Rpb24gZ3YoZSl7bGV0IHQ9RFQsbj1CVCxvPVVULGE9ZVsxXTtuPXMuZnJvbUFycmF5KGVbMV0sYS5sZW5ndGgtMyxuKSxvPXMuZnJvbUFycmF5KGVbMF0sMCxvKSx0PXMubWlkcG9pbnQobixvLHQpO2xldCByPVRoKHQsbixvLGhuLlJPVU5ERUQsITEpLGk9ZS5sZW5ndGgtMSxmPWVbaS0xXTthPWVbaV0sbj1zLmZyb21BcnJheShmLGYubGVuZ3RoLTMsbiksbz1zLmZyb21BcnJheShhLDAsbyksdD1zLm1pZHBvaW50KG4sbyx0KTtsZXQgZD1UaCh0LG4sbyxobi5ST1VOREVELCExKTtyZXR1cm5bcixkXX1mdW5jdGlvbiB2VChlLHQsbixvKXtsZXQgYT1UcztyZXR1cm4gbz9hPXMuYWRkKGUsdCxhKToodD1zLm5lZ2F0ZSh0LHQpLGE9cy5hZGQoZSx0LGEpKSxbYS54LGEueSxhLnosbi54LG4ueSxuLnpdfWZ1bmN0aW9uIHkwKGUsdCxuLG8pe2xldCBhPW5ldyBBcnJheShlLmxlbmd0aCkscj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9cy5tdWx0aXBseUJ5U2NhbGFyKHQsbixUcyksZj1zLm5lZ2F0ZShpLEZUKSxkPTAsYz1lLmxlbmd0aC0xO2ZvcihsZXQgdT0wO3U8ZS5sZW5ndGg7dSs9Myl7bGV0IGw9cy5mcm9tQXJyYXkoZSx1LGZ2KSxoPXMuYWRkKGwsZixJVCk7YVtkKytdPWgueCxhW2QrK109aC55LGFbZCsrXT1oLno7bGV0IG09cy5hZGQobCxpLElUKTtyW2MtLV09bS56LHJbYy0tXT1tLnkscltjLS1dPW0ueH1yZXR1cm4gby5wdXNoKGEsciksb312YXIgQTAsVHMsRlQsZnYsSVQsVm8sRFQsQlQsVVQsZHYsdXYsbHYsaHYsbXYsYnYscHYsUFQsa1QsX3YseXYsSnQsdzA9WCgoKT0+e0llKCk7eWMoKTtzZSgpO0dlKCk7RG4oKTt3cygpO0VoKCk7Sm8oKTtBMD17fSxUcz1uZXcgcyxGVD1uZXcgcyxmdj1uZXcgcyxJVD1uZXcgcyxWbz1bbmV3IHMsbmV3IHNdLERUPW5ldyBzLEJUPW5ldyBzLFVUPW5ldyBzLGR2PW5ldyBzLHV2PW5ldyBzLGx2PW5ldyBzLGh2PW5ldyBzLG12PW5ldyBzLGJ2PW5ldyBzLHB2PW5ldyBzLFBUPW5ldyBRZSxrVD1uZXcgSjtBMC5hZGRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9dC54LHI9dC55LGk9dC56O2cobikmJihlW25dPWEsZVtuKzFdPXIsZVtuKzJdPWkpLGcobykmJihlW29dPWksZVtvLTFdPXIsZVtvLTJdPWEpfTtfdj1uZXcgcyx5dj1uZXcgcztBMC5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKGUpe2xldCB0PWUuZ3JhbnVsYXJpdHksbj1lLnBvc2l0aW9ucyxvPWUuZWxsaXBzb2lkLGE9ZS53aWR0aC8yLHI9ZS5jb3JuZXJUeXBlLGk9ZS5zYXZlQXR0cmlidXRlcyxmPURULGQ9QlQsYz1VVCx1PWR2LGw9dXYsaD1sdixtPWh2LGI9bXYscD1idix5PXB2LEU9W10sXz1pP1tdOnZvaWQgMCxUPWk/W106dm9pZCAwLHc9blswXSxSPW5bMV07ZD1zLm5vcm1hbGl6ZShzLnN1YnRyYWN0KFIsdyxkKSxkKSxmPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHcsZiksdT1zLm5vcm1hbGl6ZShzLmNyb3NzKGYsZCx1KSx1KSxpJiYoXy5wdXNoKHUueCx1LnksdS56KSxULnB1c2goZi54LGYueSxmLnopKSxtPXMuY2xvbmUodyxtKSx3PVIsYz1zLm5lZ2F0ZShkLGMpO2xldCBTLEM9W10sSSxOPW4ubGVuZ3RoO2ZvcihJPTE7STxOLTE7SSsrKXtmPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHcsZiksUj1uW0krMV0sZD1zLm5vcm1hbGl6ZShzLnN1YnRyYWN0KFIsdyxkKSxkKTtsZXQgdj1zLm11bHRpcGx5QnlTY2FsYXIoZixzLmRvdChkLGYpLF92KTtzLnN1YnRyYWN0KGQsdix2KSxzLm5vcm1hbGl6ZSh2LHYpO2xldCBBPXMubXVsdGlwbHlCeVNjYWxhcihmLHMuZG90KGMsZikseXYpO2lmKHMuc3VidHJhY3QoYyxBLEEpLHMubm9ybWFsaXplKEEsQSksIWsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhzLmRvdCh2LEEpKSwxLGsuRVBTSUxPTjcpKXtsPXMubm9ybWFsaXplKHMuYWRkKGQsYyxsKSxsKSxsPXMuY3Jvc3MobCxmLGwpLGw9cy5jcm9zcyhmLGwsbCksbD1zLm5vcm1hbGl6ZShsLGwpO2xldCBNPWEvTWF0aC5tYXgoLjI1LHMubWFnbml0dWRlKHMuY3Jvc3MobCxjLFRzKSkpLEY9T2kuYW5nbGVJc0dyZWF0ZXJUaGFuUGkoZCxjLHcsbyk7bD1zLm11bHRpcGx5QnlTY2FsYXIobCxNLGwpLEY/KGI9cy5hZGQodyxsLGIpLHk9cy5hZGQoYixzLm11bHRpcGx5QnlTY2FsYXIodSxhLHkpLHkpLHA9cy5hZGQoYixzLm11bHRpcGx5QnlTY2FsYXIodSxhKjIscCkscCksVm9bMF09cy5jbG9uZShtLFZvWzBdKSxWb1sxXT1zLmNsb25lKHksVm9bMV0pLFM9QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpWbyxncmFudWxhcml0eTp0LGVsbGlwc29pZDpvfSksRT15MChTLHUsYSxFKSxpJiYoXy5wdXNoKHUueCx1LnksdS56KSxULnB1c2goZi54LGYueSxmLnopKSxoPXMuY2xvbmUocCxoKSx1PXMubm9ybWFsaXplKHMuY3Jvc3MoZixkLHUpLHUpLHA9cy5hZGQoYixzLm11bHRpcGx5QnlTY2FsYXIodSxhKjIscCkscCksbT1zLmFkZChiLHMubXVsdGlwbHlCeVNjYWxhcih1LGEsbSksbSkscj09PWhuLlJPVU5ERUR8fHI9PT1obi5CRVZFTEVEP0MucHVzaCh7bGVmdFBvc2l0aW9uczpUaChiLGgscCxyLEYpfSk6Qy5wdXNoKHtsZWZ0UG9zaXRpb25zOnZUKHcscy5uZWdhdGUobCxsKSxwLEYpfSkpOihwPXMuYWRkKHcsbCxwKSx5PXMuYWRkKHAscy5uZWdhdGUocy5tdWx0aXBseUJ5U2NhbGFyKHUsYSx5KSx5KSx5KSxiPXMuYWRkKHAscy5uZWdhdGUocy5tdWx0aXBseUJ5U2NhbGFyKHUsYSoyLGIpLGIpLGIpLFZvWzBdPXMuY2xvbmUobSxWb1swXSksVm9bMV09cy5jbG9uZSh5LFZvWzFdKSxTPUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6Vm8sZ3JhbnVsYXJpdHk6dCxlbGxpcHNvaWQ6b30pLEU9eTAoUyx1LGEsRSksaSYmKF8ucHVzaCh1LngsdS55LHUueiksVC5wdXNoKGYueCxmLnksZi56KSksaD1zLmNsb25lKGIsaCksdT1zLm5vcm1hbGl6ZShzLmNyb3NzKGYsZCx1KSx1KSxiPXMuYWRkKHAscy5uZWdhdGUocy5tdWx0aXBseUJ5U2NhbGFyKHUsYSoyLGIpLGIpLGIpLG09cy5hZGQocCxzLm5lZ2F0ZShzLm11bHRpcGx5QnlTY2FsYXIodSxhLG0pLG0pLG0pLHI9PT1obi5ST1VOREVEfHxyPT09aG4uQkVWRUxFRD9DLnB1c2goe3JpZ2h0UG9zaXRpb25zOlRoKHAsaCxiLHIsRil9KTpDLnB1c2goe3JpZ2h0UG9zaXRpb25zOnZUKHcsbCxiLEYpfSkpLGM9cy5uZWdhdGUoZCxjKX13PVJ9Zj1vLmdlb2RldGljU3VyZmFjZU5vcm1hbCh3LGYpLFZvWzBdPXMuY2xvbmUobSxWb1swXSksVm9bMV09cy5jbG9uZSh3LFZvWzFdKSxTPUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6Vm8sZ3JhbnVsYXJpdHk6dCxlbGxpcHNvaWQ6b30pLEU9eTAoUyx1LGEsRSksaSYmKF8ucHVzaCh1LngsdS55LHUueiksVC5wdXNoKGYueCxmLnksZi56KSk7bGV0IFA7cmV0dXJuIHI9PT1obi5ST1VOREVEJiYoUD1ndihFKSkse3Bvc2l0aW9uczpFLGNvcm5lcnM6QyxsZWZ0czpfLG5vcm1hbHM6VCxlbmRQb3NpdGlvbnM6UH19O0p0PUEwfSk7ZnVuY3Rpb24gSFQoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyllW25dPXQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlW25dLGVbbl0pO3JldHVybiBlfWZ1bmN0aW9uIFphKGUsdCxuLG8sYSxyKXtsZXQgaT1lLm5vcm1hbHMsZj1lLnRhbmdlbnRzLGQ9ZS5iaXRhbmdlbnRzLGM9cy5ub3JtYWxpemUocy5jcm9zcyhuLHQsU2kpLFNpKTtyLm5vcm1hbCYmSnQuYWRkQXR0cmlidXRlKGksdCxvLGEpLHIudGFuZ2VudCYmSnQuYWRkQXR0cmlidXRlKGYsYyxvLGEpLHIuYml0YW5nZW50JiZKdC5hZGRBdHRyaWJ1dGUoZCxuLG8sYSl9ZnVuY3Rpb24gS1QoZSx0LG4pe2xldCBvPWUucG9zaXRpb25zLGE9ZS5jb3JuZXJzLHI9ZS5lbmRQb3NpdGlvbnMsaT1lLmxlZnRzLGY9ZS5ub3JtYWxzLGQ9bmV3IG50LGMsdT0wLGw9MCxoLG09MCxiO2ZvcihoPTA7aDxvLmxlbmd0aDtoKz0yKWI9b1toXS5sZW5ndGgtMyx1Kz1iLG0rPWIqMixsKz1vW2grMV0ubGVuZ3RoLTM7Zm9yKHUrPTMsbCs9MyxoPTA7aDxhLmxlbmd0aDtoKyspe2M9YVtoXTtsZXQgZWU9YVtoXS5sZWZ0UG9zaXRpb25zO2coZWUpPyhiPWVlLmxlbmd0aCx1Kz1iLG0rPWIpOihiPWFbaF0ucmlnaHRQb3NpdGlvbnMubGVuZ3RoLGwrPWIsbSs9Yil9bGV0IHA9ZyhyKSx5O3AmJih5PXJbMF0ubGVuZ3RoLTMsdSs9eSxsKz15LHkvPTMsbSs9eSo2KTtsZXQgRT11K2wsXz1uZXcgRmxvYXQ2NEFycmF5KEUpLFQ9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShFKTp2b2lkIDAsdz10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShFKTp2b2lkIDAsUj10LmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KEUpOnZvaWQgMCxTPXtub3JtYWxzOlQsdGFuZ2VudHM6dyxiaXRhbmdlbnRzOlJ9LEM9MCxJPUUtMSxOLFAsdixBLHg9elQsTT1HVCxGLFUsej15LzIsRD1rZS5jcmVhdGVUeXBlZEFycmF5KEUvMyxtKSxHPTA7aWYocCl7VT1SaCxGPXhoO2xldCBlZT1yWzBdO2Zvcih4PXMuZnJvbUFycmF5KGYsMCx4KSxNPXMuZnJvbUFycmF5KGksMCxNKSxoPTA7aDx6O2grKylVPXMuZnJvbUFycmF5KGVlLCh6LTEtaCkqMyxVKSxGPXMuZnJvbUFycmF5KGVlLCh6K2gpKjMsRiksSnQuYWRkQXR0cmlidXRlKF8sRixDKSxKdC5hZGRBdHRyaWJ1dGUoXyxVLHZvaWQgMCxJKSxaYShTLHgsTSxDLEksdCksUD1DLzMsQT1QKzEsTj0oSS0yKS8zLHY9Ti0xLERbRysrXT1OLERbRysrXT1QLERbRysrXT12LERbRysrXT12LERbRysrXT1QLERbRysrXT1BLEMrPTMsSS09M31sZXQgSD0wLE89MCxaPW9bSCsrXSxvZT1vW0grK107Xy5zZXQoWixDKSxfLnNldChvZSxJLW9lLmxlbmd0aCsxKSxNPXMuZnJvbUFycmF5KGksTyxNKTtsZXQgY2UsZGU7Zm9yKGI9b2UubGVuZ3RoLTMsaD0wO2g8YjtoKz0zKWNlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KFosaCxTaSksU2kpLGRlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KG9lLGItaCxScyksUnMpLHg9cy5ub3JtYWxpemUocy5hZGQoY2UsZGUseCkseCksWmEoUyx4LE0sQyxJLHQpLFA9Qy8zLEE9UCsxLE49KEktMikvMyx2PU4tMSxEW0crK109TixEW0crK109UCxEW0crK109dixEW0crK109dixEW0crK109UCxEW0crK109QSxDKz0zLEktPTM7Zm9yKGNlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KFosYixTaSksU2kpLGRlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KG9lLGIsUnMpLFJzKSx4PXMubm9ybWFsaXplKHMuYWRkKGNlLGRlLHgpLHgpLE8rPTMsaD0wO2g8YS5sZW5ndGg7aCsrKXtsZXQgZWU7Yz1hW2hdO2xldCBtZT1jLmxlZnRQb3NpdGlvbnMsbGU9Yy5yaWdodFBvc2l0aW9ucyxiZSxmZSxhZT1WVCxSZT1SaCxOZT14aDtpZih4PXMuZnJvbUFycmF5KGYsTyx4KSxnKG1lKSl7Zm9yKFphKFMseCxNLHZvaWQgMCxJLHQpLEktPTMsYmU9QSxmZT12LGVlPTA7ZWU8bWUubGVuZ3RoLzM7ZWUrKylhZT1zLmZyb21BcnJheShtZSxlZSozLGFlKSxEW0crK109YmUsRFtHKytdPWZlLWVlLTEsRFtHKytdPWZlLWVlLEp0LmFkZEF0dHJpYnV0ZShfLGFlLHZvaWQgMCxJKSxSZT1zLmZyb21BcnJheShfLChmZS1lZS0xKSozLFJlKSxOZT1zLmZyb21BcnJheShfLGJlKjMsTmUpLE09cy5ub3JtYWxpemUocy5zdWJ0cmFjdChSZSxOZSxNKSxNKSxaYShTLHgsTSx2b2lkIDAsSSx0KSxJLT0zO2FlPXMuZnJvbUFycmF5KF8sYmUqMyxhZSksUmU9cy5zdWJ0cmFjdChzLmZyb21BcnJheShfLGZlKjMsUmUpLGFlLFJlKSxOZT1zLnN1YnRyYWN0KHMuZnJvbUFycmF5KF8sKGZlLWVlKSozLE5lKSxhZSxOZSksTT1zLm5vcm1hbGl6ZShzLmFkZChSZSxOZSxNKSxNKSxaYShTLHgsTSxDLHZvaWQgMCx0KSxDKz0zfWVsc2V7Zm9yKFphKFMseCxNLEMsdm9pZCAwLHQpLEMrPTMsYmU9dixmZT1BLGVlPTA7ZWU8bGUubGVuZ3RoLzM7ZWUrKylhZT1zLmZyb21BcnJheShsZSxlZSozLGFlKSxEW0crK109YmUsRFtHKytdPWZlK2VlLERbRysrXT1mZStlZSsxLEp0LmFkZEF0dHJpYnV0ZShfLGFlLEMpLFJlPXMuZnJvbUFycmF5KF8sYmUqMyxSZSksTmU9cy5mcm9tQXJyYXkoXywoZmUrZWUpKjMsTmUpLE09cy5ub3JtYWxpemUocy5zdWJ0cmFjdChSZSxOZSxNKSxNKSxaYShTLHgsTSxDLHZvaWQgMCx0KSxDKz0zO2FlPXMuZnJvbUFycmF5KF8sYmUqMyxhZSksUmU9cy5zdWJ0cmFjdChzLmZyb21BcnJheShfLChmZStlZSkqMyxSZSksYWUsUmUpLE5lPXMuc3VidHJhY3Qocy5mcm9tQXJyYXkoXyxmZSozLE5lKSxhZSxOZSksTT1zLm5vcm1hbGl6ZShzLm5lZ2F0ZShzLmFkZChOZSxSZSxNKSxNKSxNKSxaYShTLHgsTSx2b2lkIDAsSSx0KSxJLT0zfWZvcihaPW9bSCsrXSxvZT1vW0grK10sWi5zcGxpY2UoMCwzKSxvZS5zcGxpY2Uob2UubGVuZ3RoLTMsMyksXy5zZXQoWixDKSxfLnNldChvZSxJLW9lLmxlbmd0aCsxKSxiPW9lLmxlbmd0aC0zLE8rPTMsTT1zLmZyb21BcnJheShpLE8sTSksZWU9MDtlZTxvZS5sZW5ndGg7ZWUrPTMpY2U9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocy5mcm9tQXJyYXkoWixlZSxTaSksU2kpLGRlPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KG9lLGItZWUsUnMpLFJzKSx4PXMubm9ybWFsaXplKHMuYWRkKGNlLGRlLHgpLHgpLFphKFMseCxNLEMsSSx0KSxBPUMvMyxQPUEtMSx2PShJLTIpLzMsTj12KzEsRFtHKytdPU4sRFtHKytdPVAsRFtHKytdPXYsRFtHKytdPXYsRFtHKytdPVAsRFtHKytdPUEsQys9MyxJLT0zO0MtPTMsSSs9M31pZih4PXMuZnJvbUFycmF5KGYsZi5sZW5ndGgtMyx4KSxaYShTLHgsTSxDLEksdCkscCl7Qys9MyxJLT0zLFU9UmgsRj14aDtsZXQgZWU9clsxXTtmb3IoaD0wO2g8ejtoKyspVT1zLmZyb21BcnJheShlZSwoeS1oLTEpKjMsVSksRj1zLmZyb21BcnJheShlZSxoKjMsRiksSnQuYWRkQXR0cmlidXRlKF8sVSx2b2lkIDAsSSksSnQuYWRkQXR0cmlidXRlKF8sRixDKSxaYShTLHgsTSxDLEksdCksQT1DLzMsUD1BLTEsdj0oSS0yKS8zLE49disxLERbRysrXT1OLERbRysrXT1QLERbRysrXT12LERbRysrXT12LERbRysrXT1QLERbRysrXT1BLEMrPTMsSS09M31pZihkLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pLHQuc3Qpe2xldCBlZT1uZXcgRmxvYXQzMkFycmF5KEUvMyoyKSxtZSxsZSxiZT0wO2lmKHApe3UvPTMsbC89MztsZXQgZmU9TWF0aC5QSS8oeSsxKTtsZT0xLyh1LXkrMSksbWU9MS8obC15KzEpO2xldCBhZSxSZT15LzI7Zm9yKGg9UmUrMTtoPHkrMTtoKyspYWU9ay5QSV9PVkVSX1RXTytmZSpoLGVlW2JlKytdPW1lKigxK01hdGguY29zKGFlKSksZWVbYmUrK109LjUqKDErTWF0aC5zaW4oYWUpKTtmb3IoaD0xO2g8bC15KzE7aCsrKWVlW2JlKytdPWgqbWUsZWVbYmUrK109MDtmb3IoaD15O2g+UmU7aC0tKWFlPWsuUElfT1ZFUl9UV08taCpmZSxlZVtiZSsrXT0xLW1lKigxK01hdGguY29zKGFlKSksZWVbYmUrK109LjUqKDErTWF0aC5zaW4oYWUpKTtmb3IoaD1SZTtoPjA7aC0tKWFlPWsuUElfT1ZFUl9UV08tZmUqaCxlZVtiZSsrXT0xLWxlKigxK01hdGguY29zKGFlKSksZWVbYmUrK109LjUqKDErTWF0aC5zaW4oYWUpKTtmb3IoaD11LXk7aD4wO2gtLSllZVtiZSsrXT1oKmxlLGVlW2JlKytdPTE7Zm9yKGg9MTtoPFJlKzE7aCsrKWFlPWsuUElfT1ZFUl9UV08rZmUqaCxlZVtiZSsrXT1sZSooMStNYXRoLmNvcyhhZSkpLGVlW2JlKytdPS41KigxK01hdGguc2luKGFlKSl9ZWxzZXtmb3IodS89MyxsLz0zLGxlPTEvKHUtMSksbWU9MS8obC0xKSxoPTA7aDxsO2grKyllZVtiZSsrXT1oKm1lLGVlW2JlKytdPTA7Zm9yKGg9dTtoPjA7aC0tKWVlW2JlKytdPShoLTEpKmxlLGVlW2JlKytdPTF9ZC5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6ZWV9KX1yZXR1cm4gdC5ub3JtYWwmJihkLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Uy5ub3JtYWxzfSkpLHQudGFuZ2VudCYmKGQudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Uy50YW5nZW50c30pKSx0LmJpdGFuZ2VudCYmKGQuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpTLmJpdGFuZ2VudHN9KSkse2F0dHJpYnV0ZXM6ZCxpbmRpY2VzOkR9fWZ1bmN0aW9uIHd2KGUsdCl7aWYoIXQubm9ybWFsJiYhdC50YW5nZW50JiYhdC5iaXRhbmdlbnQmJiF0LnN0KXJldHVybiBlO2xldCBuPWUucG9zaXRpb24udmFsdWVzLG8sYTsodC5ub3JtYWx8fHQuYml0YW5nZW50KSYmKG89ZS5ub3JtYWwudmFsdWVzLGE9ZS5iaXRhbmdlbnQudmFsdWVzKTtsZXQgcj1lLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMTgsaT1yKjMsZj1yKjIsZD1pKjIsYztpZih0Lm5vcm1hbHx8dC5iaXRhbmdlbnR8fHQudGFuZ2VudCl7bGV0IHU9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShpKjYpOnZvaWQgMCxsPXQudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGkqNik6dm9pZCAwLGg9dC5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShpKjYpOnZvaWQgMCxtPXpULGI9R1QscD1SaCx5PXhoLEU9QXYsXz1WVCxUPWQ7Zm9yKGM9MDtjPGk7Yys9Myl7bGV0IHc9VCtkO209cy5mcm9tQXJyYXkobixjLG0pLGI9cy5mcm9tQXJyYXkobixjK2ksYikscD1zLmZyb21BcnJheShuLChjKzMpJWkscCksYj1zLnN1YnRyYWN0KGIsbSxiKSxwPXMuc3VidHJhY3QocCxtLHApLHk9cy5ub3JtYWxpemUocy5jcm9zcyhiLHAseSkseSksdC5ub3JtYWwmJihKdC5hZGRBdHRyaWJ1dGUodSx5LHcpLEp0LmFkZEF0dHJpYnV0ZSh1LHksdyszKSxKdC5hZGRBdHRyaWJ1dGUodSx5LFQpLEp0LmFkZEF0dHJpYnV0ZSh1LHksVCszKSksKHQudGFuZ2VudHx8dC5iaXRhbmdlbnQpJiYoXz1zLmZyb21BcnJheShvLGMsXyksdC5iaXRhbmdlbnQmJihKdC5hZGRBdHRyaWJ1dGUoaCxfLHcpLEp0LmFkZEF0dHJpYnV0ZShoLF8sdyszKSxKdC5hZGRBdHRyaWJ1dGUoaCxfLFQpLEp0LmFkZEF0dHJpYnV0ZShoLF8sVCszKSksdC50YW5nZW50JiYoRT1zLm5vcm1hbGl6ZShzLmNyb3NzKF8seSxFKSxFKSxKdC5hZGRBdHRyaWJ1dGUobCxFLHcpLEp0LmFkZEF0dHJpYnV0ZShsLEUsdyszKSxKdC5hZGRBdHRyaWJ1dGUobCxFLFQpLEp0LmFkZEF0dHJpYnV0ZShsLEUsVCszKSkpLFQrPTZ9aWYodC5ub3JtYWwpe2Zvcih1LnNldChvKSxjPTA7YzxpO2MrPTMpdVtjK2ldPS1vW2NdLHVbYytpKzFdPS1vW2MrMV0sdVtjK2krMl09LW9bYysyXTtlLm5vcm1hbC52YWx1ZXM9dX1lbHNlIGUubm9ybWFsPXZvaWQgMDtpZih0LmJpdGFuZ2VudD8oaC5zZXQoYSksaC5zZXQoYSxpKSxlLmJpdGFuZ2VudC52YWx1ZXM9aCk6ZS5iaXRhbmdlbnQ9dm9pZCAwLHQudGFuZ2VudCl7bGV0IHc9ZS50YW5nZW50LnZhbHVlcztsLnNldCh3KSxsLnNldCh3LGkpLGUudGFuZ2VudC52YWx1ZXM9bH19aWYodC5zdCl7bGV0IHU9ZS5zdC52YWx1ZXMsbD1uZXcgRmxvYXQzMkFycmF5KGYqNik7bC5zZXQodSksbC5zZXQodSxmKTtsZXQgaD1mKjI7Zm9yKGxldCBtPTA7bTwyO20rKyl7Zm9yKGxbaCsrXT11WzBdLGxbaCsrXT11WzFdLGM9MjtjPGY7Yys9Mil7bGV0IGI9dVtjXSxwPXVbYysxXTtsW2grK109YixsW2grK109cCxsW2grK109YixsW2grK109cH1sW2grK109dVswXSxsW2grK109dVsxXX1lLnN0LnZhbHVlcz1sfXJldHVybiBlfWZ1bmN0aW9uIEUwKGUsdCxuKXtuW3QrK109ZVswXSxuW3QrK109ZVsxXSxuW3QrK109ZVsyXTtmb3IobGV0IG89MztvPGUubGVuZ3RoO28rPTMpe2xldCBhPWVbb10scj1lW28rMV0saT1lW28rMl07blt0KytdPWEsblt0KytdPXIsblt0KytdPWksblt0KytdPWEsblt0KytdPXIsblt0KytdPWl9cmV0dXJuIG5bdCsrXT1lWzBdLG5bdCsrXT1lWzFdLG5bdCsrXT1lWzJdLG59ZnVuY3Rpb24gRXYoZSx0KXtsZXQgbj1uZXcgaGUoe3Bvc2l0aW9uOnQucG9zaXRpb24sbm9ybWFsOnQubm9ybWFsfHx0LmJpdGFuZ2VudHx8ZS5zaGFkb3dWb2x1bWUsdGFuZ2VudDp0LnRhbmdlbnQsYml0YW5nZW50OnQubm9ybWFsfHx0LmJpdGFuZ2VudCxzdDp0LnN0fSksbz1lLmVsbGlwc29pZCxhPUp0LmNvbXB1dGVQb3NpdGlvbnMoZSkscj1LVChhLG4sbyksaT1lLmhlaWdodCxmPWUuZXh0cnVkZWRIZWlnaHQsZD1yLmF0dHJpYnV0ZXMsYz1yLmluZGljZXMsdT1kLnBvc2l0aW9uLnZhbHVlcyxsPXUubGVuZ3RoLGg9bmV3IEZsb2F0NjRBcnJheShsKjYpLG09bmV3IEZsb2F0NjRBcnJheShsKTttLnNldCh1KTtsZXQgYj1uZXcgRmxvYXQ2NEFycmF5KGwqNCk7dT1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQodSxpLG8pLGI9RTAodSwwLGIpLG09U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KG0sZixvKSxiPUUwKG0sbCoyLGIpLGguc2V0KHUpLGguc2V0KG0sbCksaC5zZXQoYixsKjIpLGQucG9zaXRpb24udmFsdWVzPWgsZD13dihkLHQpO2xldCBwLHk9bC8zO2lmKGUuc2hhZG93Vm9sdW1lKXtsZXQgTj1kLm5vcm1hbC52YWx1ZXM7bD1OLmxlbmd0aDtsZXQgUD1uZXcgRmxvYXQzMkFycmF5KGwqNik7Zm9yKHA9MDtwPGw7cCsrKU5bcF09LU5bcF07UC5zZXQoTixsKSxQPUUwKE4sbCo0LFApLGQuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6UH0pLHQubm9ybWFsfHwoZC5ub3JtYWw9dm9pZCAwKX1pZihnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IE49bmV3IFVpbnQ4QXJyYXkoeSo2KTtpZihlLm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClOPU4uZmlsbCgxLDAseSkuZmlsbCgxLHkqMix5KjQpO2Vsc2V7bGV0IFA9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MTtOPU4uZmlsbChQKX1kLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOk59KX1sZXQgRT1jLmxlbmd0aCxfPXkreSxUPWtlLmNyZWF0ZVR5cGVkQXJyYXkoaC5sZW5ndGgvMyxFKjIrXyozKTtULnNldChjKTtsZXQgdz1FO2ZvcihwPTA7cDxFO3ArPTMpe2xldCBOPWNbcF0sUD1jW3ArMV0sdj1jW3ArMl07VFt3KytdPXYreSxUW3crK109UCt5LFRbdysrXT1OK3l9bGV0IFIsUyxDLEk7Zm9yKHA9MDtwPF87cCs9MilSPXArXyxTPVIrXyxDPVIrMSxJPVMrMSxUW3crK109UixUW3crK109UyxUW3crK109QyxUW3crK109QyxUW3crK109UyxUW3crK109STtyZXR1cm57YXR0cmlidXRlczpkLGluZGljZXM6VH19ZnVuY3Rpb24galQoZSx0LG4sbyxhLHIpe2xldCBpPXMuc3VidHJhY3QodCxlLExUKTtzLm5vcm1hbGl6ZShpLGkpO2xldCBmPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsWWYpLGQ9cy5jcm9zcyhpLGYsTFQpO3MubXVsdGlwbHlCeVNjYWxhcihkLG8sZCk7bGV0IGM9YS5sYXRpdHVkZSx1PWEubG9uZ2l0dWRlLGw9ci5sYXRpdHVkZSxoPXIubG9uZ2l0dWRlO3MuYWRkKGUsZCxZZiksbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhZZixTYSk7bGV0IG09U2EubGF0aXR1ZGUsYj1TYS5sb25naXR1ZGU7Yz1NYXRoLm1pbihjLG0pLHU9TWF0aC5taW4odSxiKSxsPU1hdGgubWF4KGwsbSksaD1NYXRoLm1heChoLGIpLHMuc3VidHJhY3QoZSxkLFlmKSxuLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFlmLFNhKSxtPVNhLmxhdGl0dWRlLGI9U2EubG9uZ2l0dWRlLGM9TWF0aC5taW4oYyxtKSx1PU1hdGgubWluKHUsYiksbD1NYXRoLm1heChsLG0pLGg9TWF0aC5tYXgoaCxiKSxhLmxhdGl0dWRlPWMsYS5sb25naXR1ZGU9dSxyLmxhdGl0dWRlPWwsci5sb25naXR1ZGU9aH1mdW5jdGlvbiBxVChlLHQsbixvLGEpe2U9SFQoZSx0KTtsZXQgcj1ObihlLHMuZXF1YWxzRXBzaWxvbiksaT1yLmxlbmd0aDtpZihpPDJ8fG48PTApcmV0dXJuIG5ldyBTZTtsZXQgZj1uKi41O3RhLmxhdGl0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx0YS5sb25naXR1ZGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG5hLmxhdGl0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxuYS5sb25naXR1ZGU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCBkLGM7aWYobz09PWhuLlJPVU5ERUQpe2xldCBoPXJbMF07cy5zdWJ0cmFjdChoLHJbMV0sT2EpLHMubm9ybWFsaXplKE9hLE9hKSxzLm11bHRpcGx5QnlTY2FsYXIoT2EsZixPYSkscy5hZGQoaCxPYSxKZiksdC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhKZixTYSksZD1TYS5sYXRpdHVkZSxjPVNhLmxvbmdpdHVkZSx0YS5sYXRpdHVkZT1NYXRoLm1pbih0YS5sYXRpdHVkZSxkKSx0YS5sb25naXR1ZGU9TWF0aC5taW4odGEubG9uZ2l0dWRlLGMpLG5hLmxhdGl0dWRlPU1hdGgubWF4KG5hLmxhdGl0dWRlLGQpLG5hLmxvbmdpdHVkZT1NYXRoLm1heChuYS5sb25naXR1ZGUsYyl9Zm9yKGxldCBoPTA7aDxpLTE7KytoKWpUKHJbaF0scltoKzFdLHQsZix0YSxuYSk7bGV0IHU9cltpLTFdO3Muc3VidHJhY3QodSxyW2ktMl0sT2EpLHMubm9ybWFsaXplKE9hLE9hKSxzLm11bHRpcGx5QnlTY2FsYXIoT2EsZixPYSkscy5hZGQodSxPYSxKZiksalQodSxKZix0LGYsdGEsbmEpLG89PT1obi5ST1VOREVEJiYodC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhKZixTYSksZD1TYS5sYXRpdHVkZSxjPVNhLmxvbmdpdHVkZSx0YS5sYXRpdHVkZT1NYXRoLm1pbih0YS5sYXRpdHVkZSxkKSx0YS5sb25naXR1ZGU9TWF0aC5taW4odGEubG9uZ2l0dWRlLGMpLG5hLmxhdGl0dWRlPU1hdGgubWF4KG5hLmxhdGl0dWRlLGQpLG5hLmxvbmdpdHVkZT1NYXRoLm1heChuYS5sb25naXR1ZGUsYykpO2xldCBsPWcoYSk/YTpuZXcgU2U7cmV0dXJuIGwubm9ydGg9bmEubGF0aXR1ZGUsbC5zb3V0aD10YS5sYXRpdHVkZSxsLmVhc3Q9bmEubG9uZ2l0dWRlLGwud2VzdD10YS5sb25naXR1ZGUsbH1mdW5jdGlvbiBXcihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvc2l0aW9ucyxuPWUud2lkdGgsbz1lLmhlaWdodD8/MCxhPWUuZXh0cnVkZWRIZWlnaHQ/P287dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUoZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCksdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUKSx0aGlzLl93aWR0aD1uLHRoaXMuX2hlaWdodD1NYXRoLm1heChvLGEpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sYSksdGhpcy5fY29ybmVyVHlwZT1lLmNvcm5lclR5cGU/P2huLlJPVU5ERUQsdGhpcy5fZ3JhbnVsYXJpdHk9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fc2hhZG93Vm9sdW1lPWUuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvckdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLnBhY2tlZExlbmd0aD0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCs3fXZhciB6VCxHVCxSaCx4aCxBdixWVCxTaSxScyxMVCxZZixTYSxPYSxKZix0YSxuYSxXVCxYVCxxcixUMCxZVD1YKCgpPT57WGEoKTtNdCgpO0llKCk7RXQoKTt2dCgpO3ljKCk7dzAoKTttdCgpO3NlKCk7cWUoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtKYSgpO2NuKCk7X24oKTtrbygpO3pUPW5ldyBzLEdUPW5ldyBzLFJoPW5ldyBzLHhoPW5ldyBzLEF2PW5ldyBzLFZUPW5ldyBzLFNpPW5ldyBzLFJzPW5ldyBzO0xUPW5ldyBzLFlmPW5ldyBzLFNhPW5ldyByZTtPYT1uZXcgcyxKZj1uZXcgcyx0YT1uZXcgcmUsbmE9bmV3IHJlO1dyLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbz1lLl9wb3NpdGlvbnMsYT1vLmxlbmd0aDt0W24rK109YTtmb3IobGV0IHI9MDtyPGE7KytyLG4rPXMucGFja2VkTGVuZ3RoKXMucGFjayhvW3JdLHQsbik7cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fd2lkdGgsdFtuKytdPWUuX2hlaWdodCx0W24rK109ZS5fZXh0cnVkZWRIZWlnaHQsdFtuKytdPWUuX2Nvcm5lclR5cGUsdFtuKytdPWUuX2dyYW51bGFyaXR5LHRbbisrXT1lLl9zaGFkb3dWb2x1bWU/MTowLHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTtXVD1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLFhUPW5ldyBoZSxxcj17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6V1QsdmVydGV4Rm9ybWF0OlhULHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtXci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1lW3QrK10sYT1uZXcgQXJyYXkobyk7Zm9yKGxldCBiPTA7YjxvOysrYix0Kz1zLnBhY2tlZExlbmd0aClhW2JdPXMudW5wYWNrKGUsdCk7bGV0IHI9cS51bnBhY2soZSx0LFdUKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgaT1oZS51bnBhY2soZSx0LFhUKTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0KytdPT09MSxtPWVbdF07cmV0dXJuIGcobik/KG4uX3Bvc2l0aW9ucz1hLG4uX2VsbGlwc29pZD1xLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWYsbi5faGVpZ2h0PWQsbi5fZXh0cnVkZWRIZWlnaHQ9YyxuLl9jb3JuZXJUeXBlPXUsbi5fZ3JhbnVsYXJpdHk9bCxuLl9zaGFkb3dWb2x1bWU9aCxuLl9vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLG4pOihxci5wb3NpdGlvbnM9YSxxci53aWR0aD1mLHFyLmhlaWdodD1kLHFyLmV4dHJ1ZGVkSGVpZ2h0PWMscXIuY29ybmVyVHlwZT11LHFyLmdyYW51bGFyaXR5PWwscXIuc2hhZG93Vm9sdW1lPWgscXIub2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSxuZXcgV3IocXIpKX07V3IuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbihlLHQpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCBuPWUucG9zaXRpb25zLG89ZS53aWR0aCxhPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQscj1lLmNvcm5lclR5cGU/P2huLlJPVU5ERUQ7cmV0dXJuIHFUKG4sYSxvLHIsdCl9O1dyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3Bvc2l0aW9ucyxuPWUuX3dpZHRoLG89ZS5fZWxsaXBzb2lkO3Q9SFQodCxvKTtsZXQgYT1Obih0LHMuZXF1YWxzRXBzaWxvbik7aWYoYS5sZW5ndGg8Mnx8bjw9MClyZXR1cm47bGV0IHI9ZS5faGVpZ2h0LGk9ZS5fZXh0cnVkZWRIZWlnaHQsZj0hay5lcXVhbHNFcHNpbG9uKHIsaSwwLGsuRVBTSUxPTjIpLGQ9ZS5fdmVydGV4Rm9ybWF0LGM9e2VsbGlwc29pZDpvLHBvc2l0aW9uczphLHdpZHRoOm4sY29ybmVyVHlwZTplLl9jb3JuZXJUeXBlLGdyYW51bGFyaXR5OmUuX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiEwfSx1O2lmKGYpYy5oZWlnaHQ9cixjLmV4dHJ1ZGVkSGVpZ2h0PWksYy5zaGFkb3dWb2x1bWU9ZS5fc2hhZG93Vm9sdW1lLGMub2Zmc2V0QXR0cmlidXRlPWUuX29mZnNldEF0dHJpYnV0ZSx1PUV2KGMsZCk7ZWxzZXtsZXQgbT1KdC5jb21wdXRlUG9zaXRpb25zKGMpO2lmKHU9S1QobSxkLG8pLHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscixvKSxnKGUuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBiPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLHA9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgseT1uZXcgVWludDhBcnJheShwLzMpLmZpbGwoYik7dS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnl9KX19bGV0IGw9dS5hdHRyaWJ1dGVzLGg9Z2UuZnJvbVZlcnRpY2VzKGwucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gZC5wb3NpdGlvbnx8KHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9dm9pZCAwKSxuZXcgdmUoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOnUuaW5kaWNlcyxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpoLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07V3IuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLl9ncmFudWxhcml0eSxhPWUuX2VsbGlwc29pZCxyPXQobyxhKSxpPW4obyxhKTtyZXR1cm4gbmV3IFdyKHtwb3NpdGlvbnM6ZS5fcG9zaXRpb25zLHdpZHRoOmUuX3dpZHRoLGNvcm5lclR5cGU6ZS5fY29ybmVyVHlwZSxlbGxpcHNvaWQ6YSxncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OnIsaGVpZ2h0OmksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPXFUKHRoaXMuX3Bvc2l0aW9ucyx0aGlzLl9lbGxpcHNvaWQsdGhpcy5fd2lkdGgsdGhpcy5fY29ybmVyVHlwZSkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVyblswLDAsMCwxLDEsMF19fX0pO1QwPVdyfSk7dmFyIFIwPXt9O3J0KFIwLHtkZWZhdWx0OigpPT5Sdn0pO2Z1bmN0aW9uIFR2KGUsdCl7cmV0dXJuIGcodCkmJihlPVQwLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLFQwLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBSdix4MD1YKCgpPT57WVQoKTtzZSgpO3FlKCk7UnY9VHZ9KTtmdW5jdGlvbiBPdihlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl09dC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbbl0sZVtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gUVQoZSx0KXtsZXQgbj1bXSxvPWUucG9zaXRpb25zLGE9ZS5jb3JuZXJzLHI9ZS5lbmRQb3NpdGlvbnMsaT1uZXcgbnQsZixkPTAsYz0wLHUsbD0wLGg7Zm9yKHU9MDt1PG8ubGVuZ3RoO3UrPTIpaD1vW3VdLmxlbmd0aC0zLGQrPWgsbCs9aC8zKjQsYys9b1t1KzFdLmxlbmd0aC0zO2ZvcihkKz0zLGMrPTMsdT0wO3U8YS5sZW5ndGg7dSsrKXtmPWFbdV07bGV0IEY9YVt1XS5sZWZ0UG9zaXRpb25zO2coRik/KGg9Ri5sZW5ndGgsZCs9aCxsKz1oLzMqMik6KGg9YVt1XS5yaWdodFBvc2l0aW9ucy5sZW5ndGgsYys9aCxsKz1oLzMqMil9bGV0IG09ZyhyKSxiO20mJihiPXJbMF0ubGVuZ3RoLTMsZCs9YixjKz1iLGIvPTMsbCs9Yio0KTtsZXQgcD1kK2MseT1uZXcgRmxvYXQ2NEFycmF5KHApLEU9MCxfPXAtMSxULHcsUixTLEMsSSxOPWIvMixQPWtlLmNyZWF0ZVR5cGVkQXJyYXkocC8zLGwrNCksdj0wO2lmKFBbdisrXT1FLzMsUFt2KytdPShfLTIpLzMsbSl7bi5wdXNoKEUvMyksST1KVCxDPVpUO2xldCBGPXJbMF07Zm9yKHU9MDt1PE47dSsrKUk9cy5mcm9tQXJyYXkoRiwoTi0xLXUpKjMsSSksQz1zLmZyb21BcnJheShGLChOK3UpKjMsQyksSnQuYWRkQXR0cmlidXRlKHksQyxFKSxKdC5hZGRBdHRyaWJ1dGUoeSxJLHZvaWQgMCxfKSx3PUUvMyxTPXcrMSxUPShfLTIpLzMsUj1ULTEsUFt2KytdPVQsUFt2KytdPVIsUFt2KytdPXcsUFt2KytdPVMsRSs9MyxfLT0zfWxldCBBPTAseD1vW0ErK10sTT1vW0ErK107Zm9yKHkuc2V0KHgsRSkseS5zZXQoTSxfLU0ubGVuZ3RoKzEpLGg9TS5sZW5ndGgtMyxuLnB1c2goRS8zLChfLTIpLzMpLHU9MDt1PGg7dSs9Myl3PUUvMyxTPXcrMSxUPShfLTIpLzMsUj1ULTEsUFt2KytdPVQsUFt2KytdPVIsUFt2KytdPXcsUFt2KytdPVMsRSs9MyxfLT0zO2Zvcih1PTA7dTxhLmxlbmd0aDt1Kyspe2xldCBGO2Y9YVt1XTtsZXQgVT1mLmxlZnRQb3NpdGlvbnMsej1mLnJpZ2h0UG9zaXRpb25zLEQsRz14djtpZihnKFUpKXtmb3IoXy09MyxEPVIsbi5wdXNoKFMpLEY9MDtGPFUubGVuZ3RoLzM7RisrKUc9cy5mcm9tQXJyYXkoVSxGKjMsRyksUFt2KytdPUQtRi0xLFBbdisrXT1ELUYsSnQuYWRkQXR0cmlidXRlKHksRyx2b2lkIDAsXyksXy09MztuLnB1c2goRC1NYXRoLmZsb29yKFUubGVuZ3RoLzYpKSx0PT09aG4uQkVWRUxFRCYmbi5wdXNoKChfLTIpLzMrMSksRSs9M31lbHNle2ZvcihFKz0zLEQ9UyxuLnB1c2goUiksRj0wO0Y8ei5sZW5ndGgvMztGKyspRz1zLmZyb21BcnJheSh6LEYqMyxHKSxQW3YrK109RCtGLFBbdisrXT1EK0YrMSxKdC5hZGRBdHRyaWJ1dGUoeSxHLEUpLEUrPTM7bi5wdXNoKEQrTWF0aC5mbG9vcih6Lmxlbmd0aC82KSksdD09PWhuLkJFVkVMRUQmJm4ucHVzaChFLzMtMSksXy09M31mb3IoeD1vW0ErK10sTT1vW0ErK10seC5zcGxpY2UoMCwzKSxNLnNwbGljZShNLmxlbmd0aC0zLDMpLHkuc2V0KHgsRSkseS5zZXQoTSxfLU0ubGVuZ3RoKzEpLGg9TS5sZW5ndGgtMyxGPTA7RjxNLmxlbmd0aDtGKz0zKVM9RS8zLHc9Uy0xLFI9KF8tMikvMyxUPVIrMSxQW3YrK109VCxQW3YrK109UixQW3YrK109dyxQW3YrK109UyxFKz0zLF8tPTM7RS09MyxfKz0zLG4ucHVzaChFLzMsKF8tMikvMyl9aWYobSl7RSs9MyxfLT0zLEk9SlQsQz1aVDtsZXQgRj1yWzFdO2Zvcih1PTA7dTxOO3UrKylJPXMuZnJvbUFycmF5KEYsKGItdS0xKSozLEkpLEM9cy5mcm9tQXJyYXkoRix1KjMsQyksSnQuYWRkQXR0cmlidXRlKHksSSx2b2lkIDAsXyksSnQuYWRkQXR0cmlidXRlKHksQyxFKSxTPUUvMyx3PVMtMSxSPShfLTIpLzMsVD1SKzEsUFt2KytdPVQsUFt2KytdPVIsUFt2KytdPXcsUFt2KytdPVMsRSs9MyxfLT0zO24ucHVzaChFLzMpfWVsc2Ugbi5wdXNoKEUvMywoXy0yKS8zKTtyZXR1cm4gUFt2KytdPUUvMyxQW3YrK109KF8tMikvMyxpLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eX0pLHthdHRyaWJ1dGVzOmksaW5kaWNlczpQLHdhbGxJbmRpY2VzOm59fWZ1bmN0aW9uIFN2KGUpe2xldCB0PWUuZWxsaXBzb2lkLG49SnQuY29tcHV0ZVBvc2l0aW9ucyhlKSxvPVFUKG4sZS5jb3JuZXJUeXBlKSxhPW8ud2FsbEluZGljZXMscj1lLmhlaWdodCxpPWUuZXh0cnVkZWRIZWlnaHQsZj1vLmF0dHJpYnV0ZXMsZD1vLmluZGljZXMsYz1mLnBvc2l0aW9uLnZhbHVlcyx1PWMubGVuZ3RoLGw9bmV3IEZsb2F0NjRBcnJheSh1KTtsLnNldChjKTtsZXQgaD1uZXcgRmxvYXQ2NEFycmF5KHUqMik7aWYoYz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYyxyLHQpLGw9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwsaSx0KSxoLnNldChjKSxoLnNldChsLHUpLGYucG9zaXRpb24udmFsdWVzPWgsdS89MyxnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IFQ9bmV3IFVpbnQ4QXJyYXkodSoyKTtpZihlLm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClUPVQuZmlsbCgxLDAsdSk7ZWxzZXtsZXQgdz1lLm9mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO1Q9VC5maWxsKHcpfWYuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6VH0pfWxldCBtLGI9ZC5sZW5ndGgscD1rZS5jcmVhdGVUeXBlZEFycmF5KGgubGVuZ3RoLzMsKGIrYS5sZW5ndGgpKjIpO3Auc2V0KGQpO2xldCB5PWI7Zm9yKG09MDttPGI7bSs9Mil7bGV0IFQ9ZFttXSx3PWRbbSsxXTtwW3krK109VCt1LHBbeSsrXT13K3V9bGV0IEUsXztmb3IobT0wO208YS5sZW5ndGg7bSsrKUU9YVttXSxfPUUrdSxwW3krK109RSxwW3krK109XztyZXR1cm57YXR0cmlidXRlczpmLGluZGljZXM6cH19ZnVuY3Rpb24gWmYoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbj1lLndpZHRoLG89ZS5oZWlnaHQ/PzAsYT1lLmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz10LHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX3dpZHRoPW4sdGhpcy5faGVpZ2h0PU1hdGgubWF4KG8sYSksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obyxhKSx0aGlzLl9jb3JuZXJUeXBlPWUuY29ybmVyVHlwZT8/aG4uUk9VTkRFRCx0aGlzLl9ncmFudWxhcml0eT1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTErdC5sZW5ndGgqcy5wYWNrZWRMZW5ndGgrcS5wYWNrZWRMZW5ndGgrNn12YXIgSlQsWlQseHYsJFQsQ2ksTzAsZTg9WCgoKT0+e1hhKCk7TXQoKTtJZSgpO3Z0KCk7eWMoKTt3MCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO3pvKCk7bm4oKTtHZSgpO0phKCk7Y24oKTtKVD1uZXcgcyxaVD1uZXcgcyx4dj1uZXcgcztaZi5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5fcG9zaXRpb25zLGE9by5sZW5ndGg7dFtuKytdPWE7Zm9yKGxldCByPTA7cjxhOysrcixuKz1zLnBhY2tlZExlbmd0aClzLnBhY2sob1tyXSx0LG4pO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX3dpZHRoLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9jb3JuZXJUeXBlLHRbbisrXT1lLl9ncmFudWxhcml0eSx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07JFQ9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxDaT17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6JFQsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtaZi51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1lW3QrK10sYT1uZXcgQXJyYXkobyk7Zm9yKGxldCBoPTA7aDxvOysraCx0Kz1zLnBhY2tlZExlbmd0aClhW2hdPXMudW5wYWNrKGUsdCk7bGV0IHI9cS51bnBhY2soZSx0LCRUKTt0Kz1xLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3QrK10sdT1lW3QrK10sbD1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9YSxuLl9lbGxpcHNvaWQ9cS5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5fd2lkdGg9aSxuLl9oZWlnaHQ9ZixuLl9leHRydWRlZEhlaWdodD1kLG4uX2Nvcm5lclR5cGU9YyxuLl9ncmFudWxhcml0eT11LG4uX29mZnNldEF0dHJpYnV0ZT1sPT09LTE/dm9pZCAwOmwsbik6KENpLnBvc2l0aW9ucz1hLENpLndpZHRoPWksQ2kuaGVpZ2h0PWYsQ2kuZXh0cnVkZWRIZWlnaHQ9ZCxDaS5jb3JuZXJUeXBlPWMsQ2kuZ3JhbnVsYXJpdHk9dSxDaS5vZmZzZXRBdHRyaWJ1dGU9bD09PS0xP3ZvaWQgMDpsLG5ldyBaZihDaSkpfTtaZi5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb3NpdGlvbnMsbj1lLl93aWR0aCxvPWUuX2VsbGlwc29pZDt0PU92KHQsbyk7bGV0IGE9Tm4odCxzLmVxdWFsc0Vwc2lsb24pO2lmKGEubGVuZ3RoPDJ8fG48PTApcmV0dXJuO2xldCByPWUuX2hlaWdodCxpPWUuX2V4dHJ1ZGVkSGVpZ2h0LGY9IWsuZXF1YWxzRXBzaWxvbihyLGksMCxrLkVQU0lMT04yKSxkPXtlbGxpcHNvaWQ6byxwb3NpdGlvbnM6YSx3aWR0aDpuLGNvcm5lclR5cGU6ZS5fY29ybmVyVHlwZSxncmFudWxhcml0eTplLl9ncmFudWxhcml0eSxzYXZlQXR0cmlidXRlczohMX0sYztpZihmKWQuaGVpZ2h0PXIsZC5leHRydWRlZEhlaWdodD1pLGQub2Zmc2V0QXR0cmlidXRlPWUuX29mZnNldEF0dHJpYnV0ZSxjPVN2KGQpO2Vsc2V7bGV0IGg9SnQuY29tcHV0ZVBvc2l0aW9ucyhkKTtpZihjPVFUKGgsZC5jb3JuZXJUeXBlKSxjLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChjLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHIsbyksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbT1jLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxiPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLHA9bmV3IFVpbnQ4QXJyYXkobS8zKS5maWxsKGIpO2MuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpwfSl9fWxldCB1PWMuYXR0cmlidXRlcyxsPWdlLmZyb21WZXJ0aWNlcyh1LnBvc2l0aW9uLnZhbHVlcyx2b2lkIDAsMyk7cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczp1LGluZGljZXM6Yy5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6bCxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O08wPVpmfSk7dmFyIFMwPXt9O3J0KFMwLHtkZWZhdWx0OigpPT5Ndn0pO2Z1bmN0aW9uIEN2KGUsdCl7cmV0dXJuIGcodCkmJihlPU8wLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLE8wLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBNdixDMD1YKCgpPT57ZTgoKTtzZSgpO3FlKCk7TXY9Q3Z9KTt2YXIgdDgsT2gsTTA9WCgoKT0+e0dlKCk7dDg9e307dDguY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPWUqLjUsaT0tcixmPW8rbyxkPWE/MipmOmYsYz1uZXcgRmxvYXQ2NEFycmF5KGQqMyksdSxsPTAsaD0wLG09YT9mKjM6MCxiPWE/KGYrbykqMzpvKjM7Zm9yKHU9MDt1PG87dSsrKXtsZXQgcD11L28qay5UV09fUEkseT1NYXRoLmNvcyhwKSxFPU1hdGguc2luKHApLF89eSpuLFQ9RSpuLHc9eSp0LFI9RSp0O2NbaCttXT1fLGNbaCttKzFdPVQsY1toK20rMl09aSxjW2grYl09dyxjW2grYisxXT1SLGNbaCtiKzJdPXIsaCs9MyxhJiYoY1tsKytdPV8sY1tsKytdPVQsY1tsKytdPWksY1tsKytdPXcsY1tsKytdPVIsY1tsKytdPXIpfXJldHVybiBjfTtPaD10OH0pO2Z1bmN0aW9uIFhyKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUubGVuZ3RoLG49ZS50b3BSYWRpdXMsbz1lLmJvdHRvbVJhZGl1cyxhPWUudmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxULHI9ZS5zbGljZXM/PzEyODt0aGlzLl9sZW5ndGg9dCx0aGlzLl90b3BSYWRpdXM9bix0aGlzLl9ib3R0b21SYWRpdXM9byx0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoYSksdGhpcy5fc2xpY2VzPXIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUN5bGluZGVyR2VvbWV0cnkifXZhciBOMCxOdixJdixQdixrdixuOCx4cyxJMCxRZixQMD1YKCgpPT57TXQoKTtqdCgpO0llKCk7dnQoKTtNMCgpO210KCk7c2UoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtjbigpO2tvKCk7TjA9bmV3IFksTnY9bmV3IHMsSXY9bmV3IHMsUHY9bmV3IHMsa3Y9bmV3IHM7WHIucGFja2VkTGVuZ3RoPWhlLnBhY2tlZExlbmd0aCs1O1hyLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX2xlbmd0aCx0W24rK109ZS5fdG9wUmFkaXVzLHRbbisrXT1lLl9ib3R0b21SYWRpdXMsdFtuKytdPWUuX3NsaWNlcyx0W25dPWUuX29mZnNldEF0dHJpYnV0ZT8/LTEsdH07bjg9bmV3IGhlLHhzPXt2ZXJ0ZXhGb3JtYXQ6bjgsbGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtYci51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1oZS51bnBhY2soZSx0LG44KTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGE9ZVt0KytdLHI9ZVt0KytdLGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0XTtyZXR1cm4gZyhuKT8obi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG8sbi5fdmVydGV4Rm9ybWF0KSxuLl9sZW5ndGg9YSxuLl90b3BSYWRpdXM9cixuLl9ib3R0b21SYWRpdXM9aSxuLl9zbGljZXM9ZixuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOih4cy5sZW5ndGg9YSx4cy50b3BSYWRpdXM9cix4cy5ib3R0b21SYWRpdXM9aSx4cy5zbGljZXM9Zix4cy5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBYcih4cykpfTtYci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9sZW5ndGgsbj1lLl90b3BSYWRpdXMsbz1lLl9ib3R0b21SYWRpdXMsYT1lLl92ZXJ0ZXhGb3JtYXQscj1lLl9zbGljZXM7aWYodDw9MHx8bjwwfHxvPDB8fG49PT0wJiZvPT09MClyZXR1cm47bGV0IGk9cityLGY9citpLGQ9aStpLGM9T2guY29tcHV0ZVBvc2l0aW9ucyh0LG4sbyxyLCEwKSx1PWEuc3Q/bmV3IEZsb2F0MzJBcnJheShkKjIpOnZvaWQgMCxsPWEubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoZCozKTp2b2lkIDAsaD1hLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShkKjMpOnZvaWQgMCxtPWEuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZCozKTp2b2lkIDAsYixwPWEubm9ybWFsfHxhLnRhbmdlbnR8fGEuYml0YW5nZW50O2lmKHApe2xldCBDPWEudGFuZ2VudHx8YS5iaXRhbmdlbnQsST0wLE49MCxQPTAsdj1NYXRoLmF0YW4yKG8tbix0KSxBPU52O0Euej1NYXRoLnNpbih2KTtsZXQgeD1NYXRoLmNvcyh2KSxNPVB2LEY9SXY7Zm9yKGI9MDtiPHI7YisrKXtsZXQgVT1iL3Iqay5UV09fUEksej14Kk1hdGguY29zKFUpLEQ9eCpNYXRoLnNpbihVKTtwJiYoQS54PXosQS55PUQsQyYmKE09cy5ub3JtYWxpemUocy5jcm9zcyhzLlVOSVRfWixBLE0pLE0pKSxhLm5vcm1hbCYmKGxbSSsrXT1BLngsbFtJKytdPUEueSxsW0krK109QS56LGxbSSsrXT1BLngsbFtJKytdPUEueSxsW0krK109QS56KSxhLnRhbmdlbnQmJihoW04rK109TS54LGhbTisrXT1NLnksaFtOKytdPU0ueixoW04rK109TS54LGhbTisrXT1NLnksaFtOKytdPU0ueiksYS5iaXRhbmdlbnQmJihGPXMubm9ybWFsaXplKHMuY3Jvc3MoQSxNLEYpLEYpLG1bUCsrXT1GLngsbVtQKytdPUYueSxtW1ArK109Ri56LG1bUCsrXT1GLngsbVtQKytdPUYueSxtW1ArK109Ri56KSl9Zm9yKGI9MDtiPHI7YisrKWEubm9ybWFsJiYobFtJKytdPTAsbFtJKytdPTAsbFtJKytdPS0xKSxhLnRhbmdlbnQmJihoW04rK109MSxoW04rK109MCxoW04rK109MCksYS5iaXRhbmdlbnQmJihtW1ArK109MCxtW1ArK109LTEsbVtQKytdPTApO2ZvcihiPTA7YjxyO2IrKylhLm5vcm1hbCYmKGxbSSsrXT0wLGxbSSsrXT0wLGxbSSsrXT0xKSxhLnRhbmdlbnQmJihoW04rK109MSxoW04rK109MCxoW04rK109MCksYS5iaXRhbmdlbnQmJihtW1ArK109MCxtW1ArK109MSxtW1ArK109MCl9bGV0IHk9MTIqci0xMixFPWtlLmNyZWF0ZVR5cGVkQXJyYXkoZCx5KSxfPTAsVD0wO2ZvcihiPTA7YjxyLTE7YisrKUVbXysrXT1ULEVbXysrXT1UKzIsRVtfKytdPVQrMyxFW18rK109VCxFW18rK109VCszLEVbXysrXT1UKzEsVCs9Mjtmb3IoRVtfKytdPWktMixFW18rK109MCxFW18rK109MSxFW18rK109aS0yLEVbXysrXT0xLEVbXysrXT1pLTEsYj0xO2I8ci0xO2IrKylFW18rK109aStiKzEsRVtfKytdPWkrYixFW18rK109aTtmb3IoYj0xO2I8ci0xO2IrKylFW18rK109ZixFW18rK109ZitiLEVbXysrXT1mK2IrMTtsZXQgdz0wO2lmKGEuc3Qpe2xldCBDPU1hdGgubWF4KG4sbyk7Zm9yKGI9MDtiPGQ7YisrKXtsZXQgST1zLmZyb21BcnJheShjLGIqMyxrdik7dVt3KytdPShJLngrQykvKDIqQyksdVt3KytdPShJLnkrQykvKDIqQyl9fWxldCBSPW5ldyBudDthLnBvc2l0aW9uJiYoUi5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KSksYS5ub3JtYWwmJihSLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bH0pKSxhLnRhbmdlbnQmJihSLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSksYS5iaXRhbmdlbnQmJihSLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxhLnN0JiYoUi5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6dX0pKSxOMC54PXQqLjUsTjAueT1NYXRoLm1heChvLG4pO2xldCBTPW5ldyBnZShzLlpFUk8sWS5tYWduaXR1ZGUoTjApKTtpZihnKGUuX29mZnNldEF0dHJpYnV0ZSkpe3Q9Yy5sZW5ndGg7bGV0IEM9ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuTk9ORT8wOjEsST1uZXcgVWludDhBcnJheSh0LzMpLmZpbGwoQyk7Ui5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpJfSl9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpSLGluZGljZXM6RSxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpTLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07WHIuZ2V0VW5pdEN5bGluZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGcoSTApfHwoSTA9WHIuY3JlYXRlR2VvbWV0cnkobmV3IFhyKHt0b3BSYWRpdXM6MSxib3R0b21SYWRpdXM6MSxsZW5ndGg6MSx2ZXJ0ZXhGb3JtYXQ6aGUuUE9TSVRJT05fT05MWX0pKSksSTB9O1FmPVhyfSk7dmFyIGswPXt9O3J0KGswLHtkZWZhdWx0OigpPT5Gdn0pO2Z1bmN0aW9uIHZ2KGUsdCl7cmV0dXJuIGcodCkmJihlPVFmLnVucGFjayhlLHQpKSxRZi5jcmVhdGVHZW9tZXRyeShlKX12YXIgRnYsdjA9WCgoKT0+e1AwKCk7c2UoKTtGdj12dn0pO2Z1bmN0aW9uIE9zKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUubGVuZ3RoLG49ZS50b3BSYWRpdXMsbz1lLmJvdHRvbVJhZGl1cyxhPWUuc2xpY2VzPz8xMjgscj1NYXRoLm1heChlLm51bWJlck9mVmVydGljYWxMaW5lcz8/MTYsMCk7dGhpcy5fbGVuZ3RoPXQsdGhpcy5fdG9wUmFkaXVzPW4sdGhpcy5fYm90dG9tUmFkaXVzPW8sdGhpcy5fc2xpY2VzPWEsdGhpcy5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPXIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5In12YXIgRjAsd2MsRDAsbzg9WCgoKT0+e010KCk7anQoKTtJZSgpO3Z0KCk7TTAoKTttdCgpO3NlKCk7JHQoKTtlbigpO3VuKCk7em8oKTtubigpO2NuKCk7RjA9bmV3IFk7T3MucGFja2VkTGVuZ3RoPTY7T3MucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZS5fbGVuZ3RoLHRbbisrXT1lLl90b3BSYWRpdXMsdFtuKytdPWUuX2JvdHRvbVJhZGl1cyx0W24rK109ZS5fc2xpY2VzLHRbbisrXT1lLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O3djPXtsZW5ndGg6dm9pZCAwLHRvcFJhZGl1czp2b2lkIDAsYm90dG9tUmFkaXVzOnZvaWQgMCxzbGljZXM6dm9pZCAwLG51bWJlck9mVmVydGljYWxMaW5lczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07T3MudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89ZVt0KytdLGE9ZVt0KytdLHI9ZVt0KytdLGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0XTtyZXR1cm4gZyhuKT8obi5fbGVuZ3RoPW8sbi5fdG9wUmFkaXVzPWEsbi5fYm90dG9tUmFkaXVzPXIsbi5fc2xpY2VzPWksbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTood2MubGVuZ3RoPW8sd2MudG9wUmFkaXVzPWEsd2MuYm90dG9tUmFkaXVzPXIsd2Muc2xpY2VzPWksd2MubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsd2Mub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgT3Mod2MpKX07T3MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fbGVuZ3RoLG49ZS5fdG9wUmFkaXVzLG89ZS5fYm90dG9tUmFkaXVzLGE9ZS5fc2xpY2VzLHI9ZS5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzO2lmKHQ8PTB8fG48MHx8bzwwfHxuPT09MCYmbz09PTApcmV0dXJuO2xldCBpPWEqMixmPU9oLmNvbXB1dGVQb3NpdGlvbnModCxuLG8sYSwhMSksZD1hKjIsYztpZihyPjApe2xldCBwPU1hdGgubWluKHIsYSk7Yz1NYXRoLnJvdW5kKGEvcCksZCs9cH1sZXQgdT1rZS5jcmVhdGVUeXBlZEFycmF5KGksZCoyKSxsPTAsaDtmb3IoaD0wO2g8YS0xO2grKyl1W2wrK109aCx1W2wrK109aCsxLHVbbCsrXT1oK2EsdVtsKytdPWgrMSthO2lmKHVbbCsrXT1hLTEsdVtsKytdPTAsdVtsKytdPWErYS0xLHVbbCsrXT1hLHI+MClmb3IoaD0wO2g8YTtoKz1jKXVbbCsrXT1oLHVbbCsrXT1oK2E7bGV0IG09bmV3IG50O20ucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpmfSksRjAueD10Ki41LEYwLnk9TWF0aC5tYXgobyxuKTtsZXQgYj1uZXcgZ2Uocy5aRVJPLFkubWFnbml0dWRlKEYwKSk7aWYoZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXt0PWYubGVuZ3RoO2xldCBwPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLHk9bmV3IFVpbnQ4QXJyYXkodC8zKS5maWxsKHApO20uYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6eX0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bSxpbmRpY2VzOnUscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpiLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07RDA9T3N9KTt2YXIgQjA9e307cnQoQjAse2RlZmF1bHQ6KCk9PkJ2fSk7ZnVuY3Rpb24gRHYoZSx0KXtyZXR1cm4gZyh0KSYmKGU9RDAudW5wYWNrKGUsdCkpLEQwLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBCdixVMD1YKCgpPT57bzgoKTtzZSgpO0J2PUR2fSk7dmFyIEwwPXt9O3J0KEwwLHtkZWZhdWx0OigpPT5Mdn0pO2Z1bmN0aW9uIFV2KGUsdCl7cmV0dXJuIGcodCkmJihlPXFhLnVucGFjayhlLHQpKSxlLl9jZW50ZXI9cy5jbG9uZShlLl9jZW50ZXIpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCkscWEuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIEx2LGowPVgoKCk9PntJZSgpO3NlKCk7anAoKTtxZSgpO0x2PVV2fSk7dmFyIHowPXt9O3J0KHowLHtkZWZhdWx0OigpPT56dn0pO2Z1bmN0aW9uIGp2KGUsdCl7cmV0dXJuIGcodCkmJihlPVdhLnVucGFjayhlLHQpKSxlLl9jZW50ZXI9cy5jbG9uZShlLl9jZW50ZXIpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksV2EuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHp2LEcwPVgoKCk9PntJZSgpO3NlKCk7SHAoKTtxZSgpO3p2PWp2fSk7ZnVuY3Rpb24gWXIoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5yYWRpaT8/V3Ysbj1lLmlubmVyUmFkaWk/P3Qsbz1lLm1pbmltdW1DbG9jaz8/MCxhPWUubWF4aW11bUNsb2NrPz9rLlRXT19QSSxyPWUubWluaW11bUNvbmU/PzAsaT1lLm1heGltdW1Db25lPz9rLlBJLGY9TWF0aC5yb3VuZChlLnN0YWNrUGFydGl0aW9ucz8/NjQpLGQ9TWF0aC5yb3VuZChlLnNsaWNlUGFydGl0aW9ucz8/NjQpLGM9ZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQ7dGhpcy5fcmFkaWk9cy5jbG9uZSh0KSx0aGlzLl9pbm5lclJhZGlpPXMuY2xvbmUobiksdGhpcy5fbWluaW11bUNsb2NrPW8sdGhpcy5fbWF4aW11bUNsb2NrPWEsdGhpcy5fbWluaW11bUNvbmU9cix0aGlzLl9tYXhpbXVtQ29uZT1pLHRoaXMuX3N0YWNrUGFydGl0aW9ucz1mLHRoaXMuX3NsaWNlUGFydGl0aW9ucz1kLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShjKSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRWxsaXBzb2lkR2VvbWV0cnkifXZhciBHdixWdixIdixLdixxdixXdixhOCxyOCxpOCxjOCxzOCxNaSxWMCxkYSxTaD1YKCgpPT57TXQoKTtqdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7cWUoKTskdCgpO2VuKCk7dW4oKTt6bygpO25uKCk7R2UoKTtjbigpO2tvKCk7R3Y9bmV3IHMsVnY9bmV3IHMsSHY9bmV3IHMsS3Y9bmV3IHMscXY9bmV3IHMsV3Y9bmV3IHMoMSwxLDEpLGE4PU1hdGguY29zLHI4PU1hdGguc2luO1lyLnBhY2tlZExlbmd0aD0yKnMucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCs3O1lyLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAscy5wYWNrKGUuX3JhZGlpLHQsbiksbis9cy5wYWNrZWRMZW5ndGgscy5wYWNrKGUuX2lubmVyUmFkaWksdCxuKSxuKz1zLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fbWluaW11bUNsb2NrLHRbbisrXT1lLl9tYXhpbXVtQ2xvY2ssdFtuKytdPWUuX21pbmltdW1Db25lLHRbbisrXT1lLl9tYXhpbXVtQ29uZSx0W24rK109ZS5fc3RhY2tQYXJ0aXRpb25zLHRbbisrXT1lLl9zbGljZVBhcnRpdGlvbnMsdFtuXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHR9O2k4PW5ldyBzLGM4PW5ldyBzLHM4PW5ldyBoZSxNaT17cmFkaWk6aTgsaW5uZXJSYWRpaTpjOCx2ZXJ0ZXhGb3JtYXQ6czgsbWluaW11bUNsb2NrOnZvaWQgMCxtYXhpbXVtQ2xvY2s6dm9pZCAwLG1pbmltdW1Db25lOnZvaWQgMCxtYXhpbXVtQ29uZTp2b2lkIDAsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O1lyLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPXMudW5wYWNrKGUsdCxpOCk7dCs9cy5wYWNrZWRMZW5ndGg7bGV0IGE9cy51bnBhY2soZSx0LGM4KTt0Kz1zLnBhY2tlZExlbmd0aDtsZXQgcj1oZS51bnBhY2soZSx0LHM4KTt0Kz1oZS5wYWNrZWRMZW5ndGg7bGV0IGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcmFkaWk9cy5jbG9uZShvLG4uX3JhZGlpKSxuLl9pbm5lclJhZGlpPXMuY2xvbmUoYSxuLl9pbm5lclJhZGlpKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX21pbmltdW1DbG9jaz1pLG4uX21heGltdW1DbG9jaz1mLG4uX21pbmltdW1Db25lPWQsbi5fbWF4aW11bUNvbmU9YyxuLl9zdGFja1BhcnRpdGlvbnM9dSxuLl9zbGljZVBhcnRpdGlvbnM9bCxuLl9vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLG4pOihNaS5taW5pbXVtQ2xvY2s9aSxNaS5tYXhpbXVtQ2xvY2s9ZixNaS5taW5pbXVtQ29uZT1kLE1pLm1heGltdW1Db25lPWMsTWkuc3RhY2tQYXJ0aXRpb25zPXUsTWkuc2xpY2VQYXJ0aXRpb25zPWwsTWkub2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuZXcgWXIoTWkpKX07WXIuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcmFkaWk7aWYodC54PD0wfHx0Lnk8PTB8fHQuejw9MClyZXR1cm47bGV0IG49ZS5faW5uZXJSYWRpaTtpZihuLng8PTB8fG4ueTw9MHx8bi56PD0wKXJldHVybjtsZXQgbz1lLl9taW5pbXVtQ2xvY2ssYT1lLl9tYXhpbXVtQ2xvY2sscj1lLl9taW5pbXVtQ29uZSxpPWUuX21heGltdW1Db25lLGY9ZS5fdmVydGV4Rm9ybWF0LGQ9ZS5fc2xpY2VQYXJ0aXRpb25zKzEsYz1lLl9zdGFja1BhcnRpdGlvbnMrMTtkPU1hdGgucm91bmQoZCpNYXRoLmFicyhhLW8pL2suVFdPX1BJKSxjPU1hdGgucm91bmQoYypNYXRoLmFicyhpLXIpL2suUEkpLGQ8MiYmKGQ9MiksYzwyJiYoYz0yKTtsZXQgdSxsLGg9MCxtPVtyXSxiPVtvXTtmb3IodT0wO3U8Yzt1KyspbS5wdXNoKHIrdSooaS1yKS8oYy0xKSk7Zm9yKG0ucHVzaChpKSxsPTA7bDxkO2wrKyliLnB1c2gobytsKihhLW8pLyhkLTEpKTtiLnB1c2goYSk7bGV0IHA9bS5sZW5ndGgseT1iLmxlbmd0aCxFPTAsXz0xLFQ9bi54IT09dC54fHxuLnkhPT10Lnl8fG4ueiE9PXQueix3PSExLFI9ITEsUz0hMTtUJiYoXz0yLHI+MCYmKHc9ITAsRSs9ZC0xKSxpPE1hdGguUEkmJihSPSEwLEUrPWQtMSksKGEtbyklay5UV09fUEk/KFM9ITAsRSs9KGMtMSkqMisxKTpFKz0xKTtsZXQgQz15KnAqXyxJPW5ldyBGbG9hdDY0QXJyYXkoQyozKSxOPW5ldyBBcnJheShDKS5maWxsKCExKSxQPW5ldyBBcnJheShDKS5maWxsKCExKSx2PWQqYypfLEE9NiooditFKzEtKGQrYykqXykseD1rZS5jcmVhdGVUeXBlZEFycmF5KHYsQSksTT1mLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KEMqMyk6dm9pZCAwLEY9Zi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoQyozKTp2b2lkIDAsVT1mLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KEMqMyk6dm9pZCAwLHo9Zi5zdD9uZXcgRmxvYXQzMkFycmF5KEMqMik6dm9pZCAwLEQ9bmV3IEFycmF5KHApLEc9bmV3IEFycmF5KHApO2Zvcih1PTA7dTxwO3UrKylEW3VdPXI4KG1bdV0pLEdbdV09YTgobVt1XSk7bGV0IEg9bmV3IEFycmF5KHkpLE89bmV3IEFycmF5KHkpO2ZvcihsPTA7bDx5O2wrKylPW2xdPWE4KGJbbF0pLEhbbF09cjgoYltsXSk7Zm9yKHU9MDt1PHA7dSsrKWZvcihsPTA7bDx5O2wrKylJW2grK109dC54KkRbdV0qT1tsXSxJW2grK109dC55KkRbdV0qSFtsXSxJW2grK109dC56KkdbdV07bGV0IFo9Qy8yO2lmKFQpZm9yKHU9MDt1PHA7dSsrKWZvcihsPTA7bDx5O2wrKylJW2grK109bi54KkRbdV0qT1tsXSxJW2grK109bi55KkRbdV0qSFtsXSxJW2grK109bi56KkdbdV0sTltaXT0hMCx1PjAmJnUhPT1wLTEmJmwhPT0wJiZsIT09eS0xJiYoUFtaXT0hMCksWisrO2g9MDtsZXQgb2UsY2U7Zm9yKHU9MTt1PHAtMjt1KyspZm9yKG9lPXUqeSxjZT0odSsxKSp5LGw9MTtsPHktMjtsKyspeFtoKytdPWNlK2wseFtoKytdPWNlK2wrMSx4W2grK109b2UrbCsxLHhbaCsrXT1jZStsLHhbaCsrXT1vZStsKzEseFtoKytdPW9lK2w7aWYoVCl7bGV0IHR0PXAqeTtmb3IodT0xO3U8cC0yO3UrKylmb3Iob2U9dHQrdSp5LGNlPXR0Kyh1KzEpKnksbD0xO2w8eS0yO2wrKyl4W2grK109Y2UrbCx4W2grK109b2UrbCx4W2grK109b2UrbCsxLHhbaCsrXT1jZStsLHhbaCsrXT1vZStsKzEseFtoKytdPWNlK2wrMX1sZXQgZGUsZWU7aWYoVCl7aWYodylmb3IoZWU9cCp5LHU9MTt1PHktMjt1KyspeFtoKytdPXUseFtoKytdPXUrMSx4W2grK109ZWUrdSsxLHhbaCsrXT11LHhbaCsrXT1lZSt1KzEseFtoKytdPWVlK3U7aWYoUilmb3IoZGU9cCp5LXksZWU9cCp5Kl8teSx1PTE7dTx5LTI7dSsrKXhbaCsrXT1kZSt1KzEseFtoKytdPWRlK3UseFtoKytdPWVlK3UseFtoKytdPWRlK3UrMSx4W2grK109ZWUrdSx4W2grK109ZWUrdSsxfWlmKFMpe2Zvcih1PTE7dTxwLTI7dSsrKWVlPXkqcCt5KnUsZGU9eSp1LHhbaCsrXT1lZSx4W2grK109ZGUreSx4W2grK109ZGUseFtoKytdPWVlLHhbaCsrXT1lZSt5LHhbaCsrXT1kZSt5O2Zvcih1PTE7dTxwLTI7dSsrKWVlPXkqcCt5Kih1KzEpLTEsZGU9eSoodSsxKS0xLHhbaCsrXT1kZSt5LHhbaCsrXT1lZSx4W2grK109ZGUseFtoKytdPWRlK3kseFtoKytdPWVlK3kseFtoKytdPWVlfWxldCBtZT1uZXcgbnQ7Zi5wb3NpdGlvbiYmKG1lLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6SX0pKTtsZXQgbGU9MCxiZT0wLGZlPTAsYWU9MCxSZT1DLzIsTmUsSmU9cS5mcm9tQ2FydGVzaWFuMyh0KSxXZT1xLmZyb21DYXJ0ZXNpYW4zKG4pO2lmKGYuc3R8fGYubm9ybWFsfHxmLnRhbmdlbnR8fGYuYml0YW5nZW50KXtmb3IodT0wO3U8Qzt1Kyspe05lPU5bdV0/V2U6SmU7bGV0IHR0PXMuZnJvbUFycmF5KEksdSozLEd2KSxYZT1OZS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodHQsVnYpO2lmKFBbdV0mJnMubmVnYXRlKFhlLFhlKSxmLnN0KXtsZXQgTGU9WS5uZWdhdGUoWGUscXYpO3pbbGUrK109TWF0aC5hdGFuMihMZS55LExlLngpL2suVFdPX1BJKy41LHpbbGUrK109TWF0aC5hc2luKFhlLnopL01hdGguUEkrLjV9aWYoZi5ub3JtYWwmJihNW2JlKytdPVhlLngsTVtiZSsrXT1YZS55LE1bYmUrK109WGUueiksZi50YW5nZW50fHxmLmJpdGFuZ2VudCl7bGV0IExlPUh2LGplPTAsaXQ7aWYoTlt1XSYmKGplPVJlKSwhdyYmdT49amUmJnU8amUreSoyP2l0PXMuVU5JVF9YOml0PXMuVU5JVF9aLHMuY3Jvc3MoaXQsWGUsTGUpLHMubm9ybWFsaXplKExlLExlKSxmLnRhbmdlbnQmJihGW2ZlKytdPUxlLngsRltmZSsrXT1MZS55LEZbZmUrK109TGUueiksZi5iaXRhbmdlbnQpe2xldCBZZT1zLmNyb3NzKFhlLExlLEt2KTtzLm5vcm1hbGl6ZShZZSxZZSksVVthZSsrXT1ZZS54LFVbYWUrK109WWUueSxVW2FlKytdPVllLnp9fX1mLnN0JiYobWUuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnp9KSksZi5ub3JtYWwmJihtZS5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk19KSksZi50YW5nZW50JiYobWUudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Rn0pKSxmLmJpdGFuZ2VudCYmKG1lLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VX0pKX1pZihnKGUuX29mZnNldEF0dHJpYnV0ZSkpe2xldCB0dD1JLmxlbmd0aCxYZT1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxMZT1uZXcgVWludDhBcnJheSh0dC8zKS5maWxsKFhlKTttZS5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpMZX0pfXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bWUsaW5kaWNlczp4LHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21FbGxpcHNvaWQoSmUpLG9mZnNldEF0dHJpYnV0ZTplLl9vZmZzZXRBdHRyaWJ1dGV9KX07WXIuZ2V0VW5pdEVsbGlwc29pZD1mdW5jdGlvbigpe3JldHVybiBnKFYwKXx8KFYwPVlyLmNyZWF0ZUdlb21ldHJ5KG5ldyBZcih7cmFkaWk6bmV3IHMoMSwxLDEpLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZfSkpKSxWMH07ZGE9WXJ9KTt2YXIgSDA9e307cnQoSDAse2RlZmF1bHQ6KCk9Pll2fSk7ZnVuY3Rpb24gWHYoZSx0KXtyZXR1cm4gZyh0KSYmKGU9ZGEudW5wYWNrKGUsdCkpLGRhLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBZdixLMD1YKCgpPT57c2UoKTtTaCgpO1l2PVh2fSk7ZnVuY3Rpb24gU3MoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5yYWRpaT8/SnYsbj1lLmlubmVyUmFkaWk/P3Qsbz1lLm1pbmltdW1DbG9jaz8/MCxhPWUubWF4aW11bUNsb2NrPz9rLlRXT19QSSxyPWUubWluaW11bUNvbmU/PzAsaT1lLm1heGltdW1Db25lPz9rLlBJLGY9TWF0aC5yb3VuZChlLnN0YWNrUGFydGl0aW9ucz8/MTApLGQ9TWF0aC5yb3VuZChlLnNsaWNlUGFydGl0aW9ucz8/OCksYz1NYXRoLnJvdW5kKGUuc3ViZGl2aXNpb25zPz8xMjgpO3RoaXMuX3JhZGlpPXMuY2xvbmUodCksdGhpcy5faW5uZXJSYWRpaT1zLmNsb25lKG4pLHRoaXMuX21pbmltdW1DbG9jaz1vLHRoaXMuX21heGltdW1DbG9jaz1hLHRoaXMuX21pbmltdW1Db25lPXIsdGhpcy5fbWF4aW11bUNvbmU9aSx0aGlzLl9zdGFja1BhcnRpdGlvbnM9Zix0aGlzLl9zbGljZVBhcnRpdGlvbnM9ZCx0aGlzLl9zdWJkaXZpc2lvbnM9Yyx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5In12YXIgSnYsQ2gsTWgsZjgsZDgsSnIsUWEscTA9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO3pvKCk7bm4oKTtHZSgpO2NuKCk7SnY9bmV3IHMoMSwxLDEpLENoPU1hdGguY29zLE1oPU1hdGguc2luO1NzLnBhY2tlZExlbmd0aD0yKnMucGFja2VkTGVuZ3RoKzg7U3MucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCxzLnBhY2soZS5fcmFkaWksdCxuKSxuKz1zLnBhY2tlZExlbmd0aCxzLnBhY2soZS5faW5uZXJSYWRpaSx0LG4pLG4rPXMucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9taW5pbXVtQ2xvY2ssdFtuKytdPWUuX21heGltdW1DbG9jayx0W24rK109ZS5fbWluaW11bUNvbmUsdFtuKytdPWUuX21heGltdW1Db25lLHRbbisrXT1lLl9zdGFja1BhcnRpdGlvbnMsdFtuKytdPWUuX3NsaWNlUGFydGl0aW9ucyx0W24rK109ZS5fc3ViZGl2aXNpb25zLHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTtmOD1uZXcgcyxkOD1uZXcgcyxKcj17cmFkaWk6ZjgsaW5uZXJSYWRpaTpkOCxtaW5pbXVtQ2xvY2s6dm9pZCAwLG1heGltdW1DbG9jazp2b2lkIDAsbWluaW11bUNvbmU6dm9pZCAwLG1heGltdW1Db25lOnZvaWQgMCxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDAsc3ViZGl2aXNpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtTcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1zLnVucGFjayhlLHQsZjgpO3QrPXMucGFja2VkTGVuZ3RoO2xldCBhPXMudW5wYWNrKGUsdCxkOCk7dCs9cy5wYWNrZWRMZW5ndGg7bGV0IHI9ZVt0KytdLGk9ZVt0KytdLGY9ZVt0KytdLGQ9ZVt0KytdLGM9ZVt0KytdLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcmFkaWk9cy5jbG9uZShvLG4uX3JhZGlpKSxuLl9pbm5lclJhZGlpPXMuY2xvbmUoYSxuLl9pbm5lclJhZGlpKSxuLl9taW5pbXVtQ2xvY2s9cixuLl9tYXhpbXVtQ2xvY2s9aSxuLl9taW5pbXVtQ29uZT1mLG4uX21heGltdW1Db25lPWQsbi5fc3RhY2tQYXJ0aXRpb25zPWMsbi5fc2xpY2VQYXJ0aXRpb25zPXUsbi5fc3ViZGl2aXNpb25zPWwsbi5fb2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuKTooSnIubWluaW11bUNsb2NrPXIsSnIubWF4aW11bUNsb2NrPWksSnIubWluaW11bUNvbmU9ZixKci5tYXhpbXVtQ29uZT1kLEpyLnN0YWNrUGFydGl0aW9ucz1jLEpyLnNsaWNlUGFydGl0aW9ucz11LEpyLnN1YmRpdmlzaW9ucz1sLEpyLm9mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbmV3IFNzKEpyKSl9O1NzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3JhZGlpO2lmKHQueDw9MHx8dC55PD0wfHx0Lno8PTApcmV0dXJuO2xldCBuPWUuX2lubmVyUmFkaWk7aWYobi54PD0wfHxuLnk8PTB8fG4uejw9MClyZXR1cm47bGV0IG89ZS5fbWluaW11bUNsb2NrLGE9ZS5fbWF4aW11bUNsb2NrLHI9ZS5fbWluaW11bUNvbmUsaT1lLl9tYXhpbXVtQ29uZSxmPWUuX3N1YmRpdmlzaW9ucyxkPXEuZnJvbUNhcnRlc2lhbjModCksYz1lLl9zbGljZVBhcnRpdGlvbnMrMSx1PWUuX3N0YWNrUGFydGl0aW9ucysxO2M9TWF0aC5yb3VuZChjKk1hdGguYWJzKGEtbykvay5UV09fUEkpLHU9TWF0aC5yb3VuZCh1Kk1hdGguYWJzKGktcikvay5QSSksYzwyJiYoYz0yKSx1PDImJih1PTIpO2xldCBsPTAsaD0xLG09bi54IT09dC54fHxuLnkhPT10Lnl8fG4ueiE9PXQueixiPSExLHA9ITE7bSYmKGg9MixyPjAmJihiPSEwLGwrPWMpLGk8TWF0aC5QSSYmKHA9ITAsbCs9YykpO2xldCB5PWYqaCoodStjKSxFPW5ldyBGbG9hdDY0QXJyYXkoeSozKSxfPTIqKHkrbC0oYyt1KSpoKSxUPWtlLmNyZWF0ZVR5cGVkQXJyYXkoeSxfKSx3LFIsUyxDLEk9MCxOPW5ldyBBcnJheSh1KSxQPW5ldyBBcnJheSh1KTtmb3Iodz0wO3c8dTt3KyspQz1yK3cqKGktcikvKHUtMSksTlt3XT1NaChDKSxQW3ddPUNoKEMpO2xldCB2PW5ldyBBcnJheShmKSxBPW5ldyBBcnJheShmKTtmb3Iodz0wO3c8Zjt3KyspUz1vK3cqKGEtbykvKGYtMSksdlt3XT1NaChTKSxBW3ddPUNoKFMpO2Zvcih3PTA7dzx1O3crKylmb3IoUj0wO1I8ZjtSKyspRVtJKytdPXQueCpOW3ddKkFbUl0sRVtJKytdPXQueSpOW3ddKnZbUl0sRVtJKytdPXQueipQW3ddO2lmKG0pZm9yKHc9MDt3PHU7dysrKWZvcihSPTA7UjxmO1IrKylFW0krK109bi54Kk5bd10qQVtSXSxFW0krK109bi55Kk5bd10qdltSXSxFW0krK109bi56KlBbd107Zm9yKE4ubGVuZ3RoPWYsUC5sZW5ndGg9Zix3PTA7dzxmO3crKylDPXIrdyooaS1yKS8oZi0xKSxOW3ddPU1oKEMpLFBbd109Q2goQyk7Zm9yKHYubGVuZ3RoPWMsQS5sZW5ndGg9Yyx3PTA7dzxjO3crKylTPW8rdyooYS1vKS8oYy0xKSx2W3ddPU1oKFMpLEFbd109Q2goUyk7Zm9yKHc9MDt3PGY7dysrKWZvcihSPTA7UjxjO1IrKylFW0krK109dC54Kk5bd10qQVtSXSxFW0krK109dC55Kk5bd10qdltSXSxFW0krK109dC56KlBbd107aWYobSlmb3Iodz0wO3c8Zjt3KyspZm9yKFI9MDtSPGM7UisrKUVbSSsrXT1uLngqTlt3XSpBW1JdLEVbSSsrXT1uLnkqTlt3XSp2W1JdLEVbSSsrXT1uLnoqUFt3XTtmb3IoST0wLHc9MDt3PHUqaDt3Kyspe2xldCBGPXcqZjtmb3IoUj0wO1I8Zi0xO1IrKylUW0krK109RitSLFRbSSsrXT1GK1IrMX1sZXQgeD11KmYqaDtmb3Iodz0wO3c8Yzt3KyspZm9yKFI9MDtSPGYtMTtSKyspVFtJKytdPXgrdytSKmMsVFtJKytdPXgrdysoUisxKSpjO2lmKG0pZm9yKHg9dSpmKmgrYypmLHc9MDt3PGM7dysrKWZvcihSPTA7UjxmLTE7UisrKVRbSSsrXT14K3crUipjLFRbSSsrXT14K3crKFIrMSkqYztpZihtKXtsZXQgRj11KmYqaCxVPUYrZipjO2lmKGIpZm9yKHc9MDt3PGM7dysrKVRbSSsrXT1GK3csVFtJKytdPVUrdztpZihwKWZvcihGKz1mKmMtYyxVKz1mKmMtYyx3PTA7dzxjO3crKylUW0krK109Rit3LFRbSSsrXT1VK3d9bGV0IE09bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KX0pO2lmKGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IEY9RS5sZW5ndGgsVT1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSx6PW5ldyBVaW50OEFycmF5KEYvMykuZmlsbChVKTtNLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnp9KX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOk0saW5kaWNlczpULHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbUVsbGlwc29pZChkKSxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O1FhPVNzfSk7dmFyIFcwPXt9O3J0KFcwLHtkZWZhdWx0OigpPT5Rdn0pO2Z1bmN0aW9uIFp2KGUsdCl7cmV0dXJuIGcoZS5idWZmZXIsdCkmJihlPVFhLnVucGFjayhlLHQpKSxRYS5jcmVhdGVHZW9tZXRyeShlKX12YXIgUXYsWDA9WCgoKT0+e3NlKCk7cTAoKTtRdj1adn0pO2Z1bmN0aW9uIENhKGUpe3RoaXMucGxhbmVzPWU/P1tdfXZhciAkZixOaSwkdix1OCxOaCxZMD1YKCgpPT57SWUoKTtnYSgpO3NlKCk7WmkoKTtnaSgpOyRmPVtuZXcgcyxuZXcgcyxuZXcgc107cy5jbG9uZShzLlVOSVRfWCwkZlswXSk7cy5jbG9uZShzLlVOSVRfWSwkZlsxXSk7cy5jbG9uZShzLlVOSVRfWiwkZlsyXSk7Tmk9bmV3IHMsJHY9bmV3IHMsdTg9bmV3IHNuKG5ldyBzKDEsMCwwKSwwKTtDYS5mcm9tQm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24oZSx0KXtnKHQpfHwodD1uZXcgQ2EpO2xldCBuPSRmLmxlbmd0aCxvPXQucGxhbmVzO28ubGVuZ3RoPTIqbjtsZXQgYT1lLmNlbnRlcixyPWUucmFkaXVzLGk9MDtmb3IobGV0IGY9MDtmPG47KytmKXtsZXQgZD0kZltmXSxjPW9baV0sdT1vW2krMV07ZyhjKXx8KGM9b1tpXT1uZXcgZHQpLGcodSl8fCh1PW9baSsxXT1uZXcgZHQpLHMubXVsdGlwbHlCeVNjYWxhcihkLC1yLE5pKSxzLmFkZChhLE5pLE5pKSxjLng9ZC54LGMueT1kLnksYy56PWQueixjLnc9LXMuZG90KGQsTmkpLHMubXVsdGlwbHlCeVNjYWxhcihkLHIsTmkpLHMuYWRkKGEsTmksTmkpLHUueD0tZC54LHUueT0tZC55LHUuej0tZC56LHUudz0tcy5kb3Qocy5uZWdhdGUoZCwkdiksTmkpLGkrPTJ9cmV0dXJuIHR9O0NhLnByb3RvdHlwZS5jb21wdXRlVmlzaWJpbGl0eT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLnBsYW5lcyxuPSExO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhOysrbyl7bGV0IHI9ZS5pbnRlcnNlY3RQbGFuZShzbi5mcm9tQ2FydGVzaWFuNCh0W29dLHU4KSk7aWYocj09PVNuLk9VVFNJREUpcmV0dXJuIFNuLk9VVFNJREU7cj09PVNuLklOVEVSU0VDVElORyYmKG49ITApfXJldHVybiBuP1NuLklOVEVSU0VDVElORzpTbi5JTlNJREV9O0NhLnByb3RvdHlwZS5jb21wdXRlVmlzaWJpbGl0eVdpdGhQbGFuZU1hc2s9ZnVuY3Rpb24oZSx0KXtpZih0PT09Q2EuTUFTS19PVVRTSURFfHx0PT09Q2EuTUFTS19JTlNJREUpcmV0dXJuIHQ7bGV0IG49Q2EuTUFTS19JTlNJREUsbz10aGlzLnBsYW5lcztmb3IobGV0IGE9MCxyPW8ubGVuZ3RoO2E8cjsrK2Epe2xldCBpPWE8MzE/MTw8YTowO2lmKGE8MzEmJih0JmkpPT09MCljb250aW51ZTtsZXQgZj1lLmludGVyc2VjdFBsYW5lKHNuLmZyb21DYXJ0ZXNpYW40KG9bYV0sdTgpKTtpZihmPT09U24uT1VUU0lERSlyZXR1cm4gQ2EuTUFTS19PVVRTSURFO2Y9PT1Tbi5JTlRFUlNFQ1RJTkcmJihufD1pKX1yZXR1cm4gbn07Q2EuTUFTS19PVVRTSURFPTQyOTQ5NjcyOTU7Q2EuTUFTS19JTlNJREU9MDtDYS5NQVNLX0lOREVURVJNSU5BVEU9MjE0NzQ4MzY0NztOaD1DYX0pO2Z1bmN0aW9uIGdyKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMubGVmdD1lLmxlZnQsdGhpcy5fbGVmdD12b2lkIDAsdGhpcy5yaWdodD1lLnJpZ2h0LHRoaXMuX3JpZ2h0PXZvaWQgMCx0aGlzLnRvcD1lLnRvcCx0aGlzLl90b3A9dm9pZCAwLHRoaXMuYm90dG9tPWUuYm90dG9tLHRoaXMuX2JvdHRvbT12b2lkIDAsdGhpcy5uZWFyPWUubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj1lLmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLl9jdWxsaW5nVm9sdW1lPW5ldyBOaCx0aGlzLl9vcnRob2dyYXBoaWNNYXRyaXg9bmV3ICR9ZnVuY3Rpb24gbDgoZSl7KGUudG9wIT09ZS5fdG9wfHxlLmJvdHRvbSE9PWUuX2JvdHRvbXx8ZS5sZWZ0IT09ZS5fbGVmdHx8ZS5yaWdodCE9PWUuX3JpZ2h0fHxlLm5lYXIhPT1lLl9uZWFyfHxlLmZhciE9PWUuX2ZhcikmJihlLl9sZWZ0PWUubGVmdCxlLl9yaWdodD1lLnJpZ2h0LGUuX3RvcD1lLnRvcCxlLl9ib3R0b209ZS5ib3R0b20sZS5fbmVhcj1lLm5lYXIsZS5fZmFyPWUuZmFyLGUuX29ydGhvZ3JhcGhpY01hdHJpeD0kLmNvbXB1dGVPcnRob2dyYXBoaWNPZmZDZW50ZXIoZS5sZWZ0LGUucmlnaHQsZS5ib3R0b20sZS50b3AsZS5uZWFyLGUuZmFyLGUuX29ydGhvZ3JhcGhpY01hdHJpeCkpfXZhciBlOSx0OSxuOSxKMCxoOCxtOD1YKCgpPT57SWUoKTtnYSgpO1kwKCk7bXQoKTtzZSgpO0dlKCk7cG4oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhnci5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBsOCh0aGlzKSx0aGlzLl9vcnRob2dyYXBoaWNNYXRyaXh9fX0pO2U5PW5ldyBzLHQ5PW5ldyBzLG45PW5ldyBzLEowPW5ldyBzO2dyLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbihlLHQsbil7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMsYT10aGlzLnRvcCxyPXRoaXMuYm90dG9tLGk9dGhpcy5yaWdodCxmPXRoaXMubGVmdCxkPXRoaXMubmVhcixjPXRoaXMuZmFyLHU9cy5jcm9zcyh0LG4sZTkpO3Mubm9ybWFsaXplKHUsdSk7bGV0IGw9dDk7cy5tdWx0aXBseUJ5U2NhbGFyKHQsZCxsKSxzLmFkZChlLGwsbCk7bGV0IGg9bjk7cy5tdWx0aXBseUJ5U2NhbGFyKHUsZixoKSxzLmFkZChsLGgsaCk7bGV0IG09b1swXTtyZXR1cm4gZyhtKXx8KG09b1swXT1uZXcgZHQpLG0ueD11LngsbS55PXUueSxtLno9dS56LG0udz0tcy5kb3QodSxoKSxzLm11bHRpcGx5QnlTY2FsYXIodSxpLGgpLHMuYWRkKGwsaCxoKSxtPW9bMV0sZyhtKXx8KG09b1sxXT1uZXcgZHQpLG0ueD0tdS54LG0ueT0tdS55LG0uej0tdS56LG0udz0tcy5kb3Qocy5uZWdhdGUodSxKMCksaCkscy5tdWx0aXBseUJ5U2NhbGFyKG4scixoKSxzLmFkZChsLGgsaCksbT1vWzJdLGcobSl8fChtPW9bMl09bmV3IGR0KSxtLng9bi54LG0ueT1uLnksbS56PW4ueixtLnc9LXMuZG90KG4saCkscy5tdWx0aXBseUJ5U2NhbGFyKG4sYSxoKSxzLmFkZChsLGgsaCksbT1vWzNdLGcobSl8fChtPW9bM109bmV3IGR0KSxtLng9LW4ueCxtLnk9LW4ueSxtLno9LW4ueixtLnc9LXMuZG90KHMubmVnYXRlKG4sSjApLGgpLG09b1s0XSxnKG0pfHwobT1vWzRdPW5ldyBkdCksbS54PXQueCxtLnk9dC55LG0uej10LnosbS53PS1zLmRvdCh0LGwpLHMubXVsdGlwbHlCeVNjYWxhcih0LGMsaCkscy5hZGQoZSxoLGgpLG09b1s1XSxnKG0pfHwobT1vWzVdPW5ldyBkdCksbS54PS10LngsbS55PS10LnksbS56PS10LnosbS53PS1zLmRvdChzLm5lZ2F0ZSh0LEowKSxoKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtnci5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bDgodGhpcyk7bGV0IHI9dGhpcy5yaWdodC10aGlzLmxlZnQsaT10aGlzLnRvcC10aGlzLmJvdHRvbSxmPW8qci9lLGQ9byppL3Q7cmV0dXJuIGEueD1mLGEueT1kLGF9O2dyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKXx8KGU9bmV3IGdyKSxlLmxlZnQ9dGhpcy5sZWZ0LGUucmlnaHQ9dGhpcy5yaWdodCxlLnRvcD10aGlzLnRvcCxlLmJvdHRvbT10aGlzLmJvdHRvbSxlLm5lYXI9dGhpcy5uZWFyLGUuZmFyPXRoaXMuZmFyLGUuX2xlZnQ9dm9pZCAwLGUuX3JpZ2h0PXZvaWQgMCxlLl90b3A9dm9pZCAwLGUuX2JvdHRvbT12b2lkIDAsZS5fbmVhcj12b2lkIDAsZS5fZmFyPXZvaWQgMCxlfTtnci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpJiZlIGluc3RhbmNlb2YgZ3ImJnRoaXMucmlnaHQ9PT1lLnJpZ2h0JiZ0aGlzLmxlZnQ9PT1lLmxlZnQmJnRoaXMudG9wPT09ZS50b3AmJnRoaXMuYm90dG9tPT09ZS5ib3R0b20mJnRoaXMubmVhcj09PWUubmVhciYmdGhpcy5mYXI9PT1lLmZhcn07Z3IucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09dGhpc3x8ZyhlKSYmZSBpbnN0YW5jZW9mIGdyJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5yaWdodCxlLnJpZ2h0LHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmxlZnQsZS5sZWZ0LHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLnRvcCxlLnRvcCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5ib3R0b20sZS5ib3R0b20sdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMubmVhcixlLm5lYXIsdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuZmFyLGUuZmFyLHQsbil9O2g4PWdyfSk7ZnVuY3Rpb24gb2EoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1QsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgaDgsdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuX3dpZHRoPXZvaWQgMCx0aGlzLmFzcGVjdFJhdGlvPWUuYXNwZWN0UmF0aW8sdGhpcy5fYXNwZWN0UmF0aW89dm9pZCAwLHRoaXMubmVhcj1lLm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9ZS5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXJ9ZnVuY3Rpb24gSWkoZSl7bGV0IHQ9ZS5fb2ZmQ2VudGVyRnJ1c3R1bTtpZihlLndpZHRoIT09ZS5fd2lkdGh8fGUuYXNwZWN0UmF0aW8hPT1lLl9hc3BlY3RSYXRpb3x8ZS5uZWFyIT09ZS5fbmVhcnx8ZS5mYXIhPT1lLl9mYXIpe2UuX2FzcGVjdFJhdGlvPWUuYXNwZWN0UmF0aW8sZS5fd2lkdGg9ZS53aWR0aCxlLl9uZWFyPWUubmVhcixlLl9mYXI9ZS5mYXI7bGV0IG49MS9lLmFzcGVjdFJhdGlvO3QucmlnaHQ9ZS53aWR0aCouNSx0LmxlZnQ9LXQucmlnaHQsdC50b3A9bip0LnJpZ2h0LHQuYm90dG9tPS10LnRvcCx0Lm5lYXI9ZS5uZWFyLHQuZmFyPWUuZmFyfX12YXIgRm8sWjA9WCgoKT0+e210KCk7c2UoKTtHZSgpO204KCk7b2EucGFja2VkTGVuZ3RoPTQ7b2EucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj8/MCx0W24rK109ZS53aWR0aCx0W24rK109ZS5hc3BlY3RSYXRpbyx0W24rK109ZS5uZWFyLHRbbl09ZS5mYXIsdH07b2EudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz8wLGcobil8fChuPW5ldyBvYSksbi53aWR0aD1lW3QrK10sbi5hc3BlY3RSYXRpbz1lW3QrK10sbi5uZWFyPWVbdCsrXSxuLmZhcj1lW3RdLG59O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9hLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIElpKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0ucHJvamVjdGlvbk1hdHJpeH19LG9mZkNlbnRlckZydXN0dW06e2dldDpmdW5jdGlvbigpe3JldHVybiBJaSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtfX19KTtvYS5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBJaSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNvbXB1dGVDdWxsaW5nVm9sdW1lKGUsdCxuKX07b2EucHJvdG90eXBlLmdldFBpeGVsRGltZW5zaW9ucz1mdW5jdGlvbihlLHQsbixvLGEpe3JldHVybiBJaSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmdldFBpeGVsRGltZW5zaW9ucyhlLHQsbixvLGEpfTtvYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSl8fChlPW5ldyBvYSksZS5hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLGUud2lkdGg9dGhpcy53aWR0aCxlLm5lYXI9dGhpcy5uZWFyLGUuZmFyPXRoaXMuZmFyLGUuX2FzcGVjdFJhdGlvPXZvaWQgMCxlLl93aWR0aD12b2lkIDAsZS5fbmVhcj12b2lkIDAsZS5fZmFyPXZvaWQgMCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNsb25lKGUuX29mZkNlbnRlckZydXN0dW0pLGV9O29hLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIWcoZSl8fCEoZSBpbnN0YW5jZW9mIG9hKT8hMTooSWkodGhpcyksSWkoZSksdGhpcy53aWR0aD09PWUud2lkdGgmJnRoaXMuYXNwZWN0UmF0aW89PT1lLmFzcGVjdFJhdGlvJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFscyhlLl9vZmZDZW50ZXJGcnVzdHVtKSl9O29hLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZyhlKXx8IShlIGluc3RhbmNlb2Ygb2EpPyExOihJaSh0aGlzKSxJaShlKSxrLmVxdWFsc0Vwc2lsb24odGhpcy53aWR0aCxlLndpZHRoLHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmFzcGVjdFJhdGlvLGUuYXNwZWN0UmF0aW8sdCxuKSYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHNFcHNpbG9uKGUuX29mZkNlbnRlckZydXN0dW0sdCxuKSl9O0ZvPW9hfSk7ZnVuY3Rpb24gX3IoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1QsdGhpcy5sZWZ0PWUubGVmdCx0aGlzLl9sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PWUucmlnaHQsdGhpcy5fcmlnaHQ9dm9pZCAwLHRoaXMudG9wPWUudG9wLHRoaXMuX3RvcD12b2lkIDAsdGhpcy5ib3R0b209ZS5ib3R0b20sdGhpcy5fYm90dG9tPXZvaWQgMCx0aGlzLm5lYXI9ZS5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPWUuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMuX2N1bGxpbmdWb2x1bWU9bmV3IE5oLHRoaXMuX3BlcnNwZWN0aXZlTWF0cml4PW5ldyAkLHRoaXMuX2luZmluaXRlUGVyc3BlY3RpdmU9bmV3ICR9ZnVuY3Rpb24gUTAoZSl7bGV0e3RvcDp0LGJvdHRvbTpuLHJpZ2h0Om8sbGVmdDphLG5lYXI6cixmYXI6aX09ZTsodCE9PWUuX3RvcHx8biE9PWUuX2JvdHRvbXx8YSE9PWUuX2xlZnR8fG8hPT1lLl9yaWdodHx8ciE9PWUuX25lYXJ8fGkhPT1lLl9mYXIpJiYoZS5fbGVmdD1hLGUuX3JpZ2h0PW8sZS5fdG9wPXQsZS5fYm90dG9tPW4sZS5fbmVhcj1yLGUuX2Zhcj1pLGUuX3BlcnNwZWN0aXZlTWF0cml4PSQuY29tcHV0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKGEsbyxuLHQscixpLGUuX3BlcnNwZWN0aXZlTWF0cml4KSxlLl9pbmZpbml0ZVBlcnNwZWN0aXZlPSQuY29tcHV0ZUluZmluaXRlUGVyc3BlY3RpdmVPZmZDZW50ZXIoYSxvLG4sdCxyLGUuX2luZmluaXRlUGVyc3BlY3RpdmUpKX12YXIgbzksYTkscjksaTksYjgscDg9WCgoKT0+e0llKCk7Z2EoKTtZMCgpO210KCk7c2UoKTtHZSgpO3BuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoX3IucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUTAodGhpcyksdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXh9fSxpbmZpbml0ZVByb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBRMCh0aGlzKSx0aGlzLl9pbmZpbml0ZVBlcnNwZWN0aXZlfX19KTtvOT1uZXcgcyxhOT1uZXcgcyxyOT1uZXcgcyxpOT1uZXcgcztfci5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXRoaXMuX2N1bGxpbmdWb2x1bWUucGxhbmVzLGE9dGhpcy50b3Ascj10aGlzLmJvdHRvbSxpPXRoaXMucmlnaHQsZj10aGlzLmxlZnQsZD10aGlzLm5lYXIsYz10aGlzLmZhcix1PXMuY3Jvc3ModCxuLG85KSxsPWE5O3MubXVsdGlwbHlCeVNjYWxhcih0LGQsbCkscy5hZGQoZSxsLGwpO2xldCBoPXI5O3MubXVsdGlwbHlCeVNjYWxhcih0LGMsaCkscy5hZGQoZSxoLGgpO2xldCBtPWk5O3MubXVsdGlwbHlCeVNjYWxhcih1LGYsbSkscy5hZGQobCxtLG0pLHMuc3VidHJhY3QobSxlLG0pLHMubm9ybWFsaXplKG0sbSkscy5jcm9zcyhtLG4sbSkscy5ub3JtYWxpemUobSxtKTtsZXQgYj1vWzBdO3JldHVybiBnKGIpfHwoYj1vWzBdPW5ldyBkdCksYi54PW0ueCxiLnk9bS55LGIuej1tLnosYi53PS1zLmRvdChtLGUpLHMubXVsdGlwbHlCeVNjYWxhcih1LGksbSkscy5hZGQobCxtLG0pLHMuc3VidHJhY3QobSxlLG0pLHMuY3Jvc3MobixtLG0pLHMubm9ybWFsaXplKG0sbSksYj1vWzFdLGcoYil8fChiPW9bMV09bmV3IGR0KSxiLng9bS54LGIueT1tLnksYi56PW0ueixiLnc9LXMuZG90KG0sZSkscy5tdWx0aXBseUJ5U2NhbGFyKG4scixtKSxzLmFkZChsLG0sbSkscy5zdWJ0cmFjdChtLGUsbSkscy5jcm9zcyh1LG0sbSkscy5ub3JtYWxpemUobSxtKSxiPW9bMl0sZyhiKXx8KGI9b1syXT1uZXcgZHQpLGIueD1tLngsYi55PW0ueSxiLno9bS56LGIudz0tcy5kb3QobSxlKSxzLm11bHRpcGx5QnlTY2FsYXIobixhLG0pLHMuYWRkKGwsbSxtKSxzLnN1YnRyYWN0KG0sZSxtKSxzLmNyb3NzKG0sdSxtKSxzLm5vcm1hbGl6ZShtLG0pLGI9b1szXSxnKGIpfHwoYj1vWzNdPW5ldyBkdCksYi54PW0ueCxiLnk9bS55LGIuej1tLnosYi53PS1zLmRvdChtLGUpLGI9b1s0XSxnKGIpfHwoYj1vWzRdPW5ldyBkdCksYi54PXQueCxiLnk9dC55LGIuej10LnosYi53PS1zLmRvdCh0LGwpLHMubmVnYXRlKHQsbSksYj1vWzVdLGcoYil8fChiPW9bNV09bmV3IGR0KSxiLng9bS54LGIueT1tLnksYi56PW0ueixiLnc9LXMuZG90KG0saCksdGhpcy5fY3VsbGluZ1ZvbHVtZX07X3IucHJvdG90eXBlLmdldFBpeGVsRGltZW5zaW9ucz1mdW5jdGlvbihlLHQsbixvLGEpe1EwKHRoaXMpO2xldCByPTEvdGhpcy5uZWFyLGk9dGhpcy50b3AqcixmPTIqbypuKmkvdDtpPXRoaXMucmlnaHQqcjtsZXQgZD0yKm8qbippL2U7cmV0dXJuIGEueD1kLGEueT1mLGF9O19yLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gZyhlKXx8KGU9bmV3IF9yKSxlLnJpZ2h0PXRoaXMucmlnaHQsZS5sZWZ0PXRoaXMubGVmdCxlLnRvcD10aGlzLnRvcCxlLmJvdHRvbT10aGlzLmJvdHRvbSxlLm5lYXI9dGhpcy5uZWFyLGUuZmFyPXRoaXMuZmFyLGUuX2xlZnQ9dm9pZCAwLGUuX3JpZ2h0PXZvaWQgMCxlLl90b3A9dm9pZCAwLGUuX2JvdHRvbT12b2lkIDAsZS5fbmVhcj12b2lkIDAsZS5fZmFyPXZvaWQgMCxlfTtfci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpJiZlIGluc3RhbmNlb2YgX3ImJnRoaXMucmlnaHQ9PT1lLnJpZ2h0JiZ0aGlzLmxlZnQ9PT1lLmxlZnQmJnRoaXMudG9wPT09ZS50b3AmJnRoaXMuYm90dG9tPT09ZS5ib3R0b20mJnRoaXMubmVhcj09PWUubmVhciYmdGhpcy5mYXI9PT1lLmZhcn07X3IucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPT09dGhpc3x8ZyhlKSYmZSBpbnN0YW5jZW9mIF9yJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5yaWdodCxlLnJpZ2h0LHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmxlZnQsZS5sZWZ0LHQsbikmJmsuZXF1YWxzRXBzaWxvbih0aGlzLnRvcCxlLnRvcCx0LG4pJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5ib3R0b20sZS5ib3R0b20sdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMubmVhcixlLm5lYXIsdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuZmFyLGUuZmFyLHQsbil9O2I4PV9yfSk7ZnVuY3Rpb24gYWEoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1QsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgYjgsdGhpcy5mb3Y9ZS5mb3YsdGhpcy5fZm92PXZvaWQgMCx0aGlzLl9mb3Z5PXZvaWQgMCx0aGlzLl9zc2VEZW5vbWluYXRvcj12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz1lLmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9ZS5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPWUuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMueE9mZnNldD1lLnhPZmZzZXQ/PzAsdGhpcy5feE9mZnNldD10aGlzLnhPZmZzZXQsdGhpcy55T2Zmc2V0PWUueU9mZnNldD8/MCx0aGlzLl95T2Zmc2V0PXRoaXMueU9mZnNldH1mdW5jdGlvbiAkYShlKXtpZighKGUuZm92IT09ZS5fZm92fHxlLmFzcGVjdFJhdGlvIT09ZS5fYXNwZWN0UmF0aW98fGUubmVhciE9PWUuX25lYXJ8fGUuZmFyIT09ZS5fZmFyfHxlLnhPZmZzZXQhPT1lLl94T2Zmc2V0fHxlLnlPZmZzZXQhPT1lLl95T2Zmc2V0KSlyZXR1cm47ZS5fYXNwZWN0UmF0aW89ZS5hc3BlY3RSYXRpbyxlLl9mb3Y9ZS5mb3YsZS5fZm92eT1lLmFzcGVjdFJhdGlvPD0xP2UuZm92Ok1hdGguYXRhbihNYXRoLnRhbihlLmZvdiouNSkvZS5hc3BlY3RSYXRpbykqMixlLl9uZWFyPWUubmVhcixlLl9mYXI9ZS5mYXIsZS5fc3NlRGVub21pbmF0b3I9MipNYXRoLnRhbiguNSplLl9mb3Z5KSxlLl94T2Zmc2V0PWUueE9mZnNldCxlLl95T2Zmc2V0PWUueU9mZnNldDtsZXQgbj1lLl9vZmZDZW50ZXJGcnVzdHVtO24udG9wPWUubmVhcipNYXRoLnRhbiguNSplLl9mb3Z5KSxuLmJvdHRvbT0tbi50b3Asbi5yaWdodD1lLmFzcGVjdFJhdGlvKm4udG9wLG4ubGVmdD0tbi5yaWdodCxuLm5lYXI9ZS5uZWFyLG4uZmFyPWUuZmFyLG4ucmlnaHQrPWUueE9mZnNldCxuLmxlZnQrPWUueE9mZnNldCxuLnRvcCs9ZS55T2Zmc2V0LG4uYm90dG9tKz1lLnlPZmZzZXR9dmFyIERvLCQwPVgoKCk9PnttdCgpO3NlKCk7R2UoKTtwOCgpO2FhLnBhY2tlZExlbmd0aD02O2FhLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsdFtuKytdPWUuZm92LHRbbisrXT1lLmFzcGVjdFJhdGlvLHRbbisrXT1lLm5lYXIsdFtuKytdPWUuZmFyLHRbbisrXT1lLnhPZmZzZXQsdFtuXT1lLnlPZmZzZXQsdH07YWEudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10Pz8wLGcobil8fChuPW5ldyBhYSksbi5mb3Y9ZVt0KytdLG4uYXNwZWN0UmF0aW89ZVt0KytdLG4ubmVhcj1lW3QrK10sbi5mYXI9ZVt0KytdLG4ueE9mZnNldD1lW3QrK10sbi55T2Zmc2V0PWVbdF0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYWEucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5pbmZpbml0ZVByb2plY3Rpb25NYXRyaXh9fSxmb3Z5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fZm92eX19LHNzZURlbm9taW5hdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fc3NlRGVub21pbmF0b3J9fSxvZmZDZW50ZXJGcnVzdHVtOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bX19fSk7YWEucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jb21wdXRlQ3VsbGluZ1ZvbHVtZShlLHQsbil9O2FhLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gJGEodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5nZXRQaXhlbERpbWVuc2lvbnMoZSx0LG4sbyxhKX07YWEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpfHwoZT1uZXcgYWEpLGUuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxlLmZvdj10aGlzLmZvdixlLm5lYXI9dGhpcy5uZWFyLGUuZmFyPXRoaXMuZmFyLGUuX2FzcGVjdFJhdGlvPXZvaWQgMCxlLl9mb3Y9dm9pZCAwLGUuX25lYXI9dm9pZCAwLGUuX2Zhcj12b2lkIDAsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jbG9uZShlLl9vZmZDZW50ZXJGcnVzdHVtKSxlfTthYS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiFnKGUpfHwhKGUgaW5zdGFuY2VvZiBhYSk/ITE6KCRhKHRoaXMpLCRhKGUpLHRoaXMuZm92PT09ZS5mb3YmJnRoaXMuYXNwZWN0UmF0aW89PT1lLmFzcGVjdFJhdGlvJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFscyhlLl9vZmZDZW50ZXJGcnVzdHVtKSl9O2FhLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZyhlKXx8IShlIGluc3RhbmNlb2YgYWEpPyExOigkYSh0aGlzKSwkYShlKSxrLmVxdWFsc0Vwc2lsb24odGhpcy5mb3YsZS5mb3YsdCxuKSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sZS5hc3BlY3RSYXRpbyx0LG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24oZS5fb2ZmQ2VudGVyRnJ1c3R1bSx0LG4pKX07RG89YWF9KTtmdW5jdGlvbiBFYyhlKXtsZXQgdD1lLmZydXN0dW0sbj1lLm9yaWVudGF0aW9uLG89ZS5vcmlnaW4sYT1lLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxyPWUuX2RyYXdOZWFyUGxhbmU/PyEwLGksZjt0IGluc3RhbmNlb2YgRG8/KGk9SWgsZj1Eby5wYWNrZWRMZW5ndGgpOnQgaW5zdGFuY2VvZiBGbyYmKGk9YzksZj1Gby5wYWNrZWRMZW5ndGgpLHRoaXMuX2ZydXN0dW1UeXBlPWksdGhpcy5fZnJ1c3R1bT10LmNsb25lKCksdGhpcy5fb3JpZ2luPXMuY2xvbmUobyksdGhpcy5fb3JpZW50YXRpb249UWUuY2xvbmUobiksdGhpcy5fZHJhd05lYXJQbGFuZT1yLHRoaXMuX3ZlcnRleEZvcm1hdD1hLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUZydXN0dW1HZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9MitmK3MucGFja2VkTGVuZ3RoK1FlLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGh9ZnVuY3Rpb24gQ3MoZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1lLzMqMjtmb3IobGV0IGM9MDtjPDQ7KytjKWcodCkmJih0W2VdPXIueCx0W2UrMV09ci55LHRbZSsyXT1yLnopLGcobikmJihuW2VdPWkueCxuW2UrMV09aS55LG5bZSsyXT1pLnopLGcobykmJihvW2VdPWYueCxvW2UrMV09Zi55LG9bZSsyXT1mLnopLGUrPTM7YVtkXT0wLGFbZCsxXT0wLGFbZCsyXT0xLGFbZCszXT0wLGFbZCs0XT0xLGFbZCs1XT0xLGFbZCs2XT0wLGFbZCs3XT0xfXZhciBJaCxjOSxzOSxmOSxkOSx1OSxsOSxoOSxtOSxlZyxnOCxfOCx5OCxiOSxwOSxnOSxQaSxlZCxBOCx0ZCx0Zz1YKCgpPT57TXQoKTtJZSgpO2dhKCk7dnQoKTtzZSgpOyR0KCk7ZW4oKTt1bigpO0RuKCk7cG4oKTtaMCgpOyQwKCk7Y24oKTtKbygpO2tvKCk7SWg9MCxjOT0xO0VjLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbz1lLl9mcnVzdHVtVHlwZSxhPWUuX2ZydXN0dW07cmV0dXJuIHRbbisrXT1vLG89PT1JaD8oRG8ucGFjayhhLHQsbiksbis9RG8ucGFja2VkTGVuZ3RoKTooRm8ucGFjayhhLHQsbiksbis9Rm8ucGFja2VkTGVuZ3RoKSxzLnBhY2soZS5fb3JpZ2luLHQsbiksbis9cy5wYWNrZWRMZW5ndGgsUWUucGFjayhlLl9vcmllbnRhdGlvbix0LG4pLG4rPVFlLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W25dPWUuX2RyYXdOZWFyUGxhbmU/MTowLHR9O3M5PW5ldyBEbyxmOT1uZXcgRm8sZDk9bmV3IFFlLHU5PW5ldyBzLGw5PW5ldyBoZTtFYy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1lW3QrK10sYTtvPT09SWg/KGE9RG8udW5wYWNrKGUsdCxzOSksdCs9RG8ucGFja2VkTGVuZ3RoKTooYT1Gby51bnBhY2soZSx0LGY5KSx0Kz1Gby5wYWNrZWRMZW5ndGgpO2xldCByPXMudW5wYWNrKGUsdCx1OSk7dCs9cy5wYWNrZWRMZW5ndGg7bGV0IGk9UWUudW5wYWNrKGUsdCxkOSk7dCs9UWUucGFja2VkTGVuZ3RoO2xldCBmPWhlLnVucGFjayhlLHQsbDkpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgZD1lW3RdPT09MTtpZighZyhuKSlyZXR1cm4gbmV3IEVjKHtmcnVzdHVtOmEsb3JpZ2luOnIsb3JpZW50YXRpb246aSx2ZXJ0ZXhGb3JtYXQ6ZixfZHJhd05lYXJQbGFuZTpkfSk7bGV0IGM9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPWEuY2xvbmUoYyksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49cy5jbG9uZShyLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249UWUuY2xvbmUoaSxuLl9vcmllbnRhdGlvbiksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGYsbi5fdmVydGV4Rm9ybWF0KSxuLl9kcmF3TmVhclBsYW5lPWQsbn07aDk9bmV3IEosbTk9bmV3ICQsZWc9bmV3ICQsZzg9bmV3IHMsXzg9bmV3IHMseTg9bmV3IHMsYjk9bmV3IHMscDk9bmV3IHMsZzk9bmV3IHMsUGk9bmV3IEFycmF5KDMpLGVkPW5ldyBBcnJheSg0KTtlZFswXT1uZXcgZHQoLTEsLTEsMSwxKTtlZFsxXT1uZXcgZHQoMSwtMSwxLDEpO2VkWzJdPW5ldyBkdCgxLDEsMSwxKTtlZFszXT1uZXcgZHQoLTEsMSwxLDEpO0E4PW5ldyBBcnJheSg0KTtmb3IobGV0IGU9MDtlPDQ7KytlKUE4W2VdPW5ldyBkdDtFYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXM9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1KLmZyb21RdWF0ZXJuaW9uKHQsaDkpLGM9cj8/ZzgsdT1pPz9fOCxsPWY/P3k4O2M9Si5nZXRDb2x1bW4oZCwwLGMpLHU9Si5nZXRDb2x1bW4oZCwxLHUpLGw9Si5nZXRDb2x1bW4oZCwyLGwpLHMubm9ybWFsaXplKGMsYykscy5ub3JtYWxpemUodSx1KSxzLm5vcm1hbGl6ZShsLGwpLHMubmVnYXRlKGMsYyk7bGV0IGg9JC5jb21wdXRlVmlldyhlLGwsdSxjLG05KSxtLGIscD1vLnByb2plY3Rpb25NYXRyaXg7aWYobj09PUloKXtsZXQgeT0kLm11bHRpcGx5KHAsaCxlZyk7Yj0kLmludmVyc2UoeSxlZyl9ZWxzZSBtPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGgsZWcpO2coYik/KFBpWzBdPW8ubmVhcixQaVsxXT1vLmZhcik6KFBpWzBdPTAsUGlbMV09by5uZWFyLFBpWzJdPW8uZmFyKTtmb3IobGV0IHk9MDt5PDI7Kyt5KWZvcihsZXQgRT0wO0U8NDsrK0Upe2xldCBfPWR0LmNsb25lKGVkW0VdLEE4W0VdKTtpZihnKGIpKXtfPSQubXVsdGlwbHlCeVZlY3RvcihiLF8sXyk7bGV0IFQ9MS9fLnc7cy5tdWx0aXBseUJ5U2NhbGFyKF8sVCxfKSxzLnN1YnRyYWN0KF8sZSxfKSxzLm5vcm1hbGl6ZShfLF8pO2xldCB3PXMuZG90KGwsXyk7cy5tdWx0aXBseUJ5U2NhbGFyKF8sUGlbeV0vdyxfKSxzLmFkZChfLGUsXyl9ZWxzZXtsZXQgVD1vLm9mZkNlbnRlckZydXN0dW07ZyhUKSYmKG89VCk7bGV0IHc9UGlbeV0sUj1QaVt5KzFdO18ueD0oXy54KihvLnJpZ2h0LW8ubGVmdCkrby5sZWZ0K28ucmlnaHQpKi41LF8ueT0oXy55KihvLnRvcC1vLmJvdHRvbSkrby5ib3R0b20rby50b3ApKi41LF8uej0oXy56Kih3LVIpLXctUikqLjUsXy53PTEsJC5tdWx0aXBseUJ5VmVjdG9yKG0sXyxfKX1hWzEyKnkrRSozXT1fLngsYVsxMip5K0UqMysxXT1fLnksYVsxMip5K0UqMysyXT1fLnp9fTtFYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9mcnVzdHVtVHlwZSxuPWUuX2ZydXN0dW0sbz1lLl9vcmlnaW4sYT1lLl9vcmllbnRhdGlvbixyPWUuX2RyYXdOZWFyUGxhbmUsaT1lLl92ZXJ0ZXhGb3JtYXQsZj1yPzY6NSxkPW5ldyBGbG9hdDY0QXJyYXkoNzIpO0VjLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLGEsdCxuLGQpO2xldCBjPTI0O2RbY109ZFsxMl0sZFtjKzFdPWRbMTNdLGRbYysyXT1kWzE0XSxkW2MrM109ZFswXSxkW2MrNF09ZFsxXSxkW2MrNV09ZFsyXSxkW2MrNl09ZFs5XSxkW2MrN109ZFsxMF0sZFtjKzhdPWRbMTFdLGRbYys5XT1kWzIxXSxkW2MrMTBdPWRbMjJdLGRbYysxMV09ZFsyM10sYys9MTIsZFtjXT1kWzE1XSxkW2MrMV09ZFsxNl0sZFtjKzJdPWRbMTddLGRbYyszXT1kWzNdLGRbYys0XT1kWzRdLGRbYys1XT1kWzVdLGRbYys2XT1kWzBdLGRbYys3XT1kWzFdLGRbYys4XT1kWzJdLGRbYys5XT1kWzEyXSxkW2MrMTBdPWRbMTNdLGRbYysxMV09ZFsxNF0sYys9MTIsZFtjXT1kWzNdLGRbYysxXT1kWzRdLGRbYysyXT1kWzVdLGRbYyszXT1kWzE1XSxkW2MrNF09ZFsxNl0sZFtjKzVdPWRbMTddLGRbYys2XT1kWzE4XSxkW2MrN109ZFsxOV0sZFtjKzhdPWRbMjBdLGRbYys5XT1kWzZdLGRbYysxMF09ZFs3XSxkW2MrMTFdPWRbOF0sYys9MTIsZFtjXT1kWzZdLGRbYysxXT1kWzddLGRbYysyXT1kWzhdLGRbYyszXT1kWzE4XSxkW2MrNF09ZFsxOV0sZFtjKzVdPWRbMjBdLGRbYys2XT1kWzIxXSxkW2MrN109ZFsyMl0sZFtjKzhdPWRbMjNdLGRbYys5XT1kWzldLGRbYysxMF09ZFsxMF0sZFtjKzExXT1kWzExXSxyfHwoZD1kLnN1YmFycmF5KDEyKSk7bGV0IHU9bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KX0pO2lmKGcoaS5ub3JtYWwpfHxnKGkudGFuZ2VudCl8fGcoaS5iaXRhbmdlbnQpfHxnKGkuc3QpKXtsZXQgaD1nKGkubm9ybWFsKT9uZXcgRmxvYXQzMkFycmF5KDEyKmYpOnZvaWQgMCxtPWcoaS50YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDEyKmYpOnZvaWQgMCxiPWcoaS5iaXRhbmdlbnQpP25ldyBGbG9hdDMyQXJyYXkoMTIqZik6dm9pZCAwLHA9ZyhpLnN0KT9uZXcgRmxvYXQzMkFycmF5KDgqZik6dm9pZCAwLHk9ZzgsRT1fOCxfPXk4LFQ9cy5uZWdhdGUoeSxiOSksdz1zLm5lZ2F0ZShFLHA5KSxSPXMubmVnYXRlKF8sZzkpO2M9MCxyJiYoQ3MoYyxoLG0sYixwLFIseSxFKSxjKz0xMiksQ3MoYyxoLG0sYixwLF8sVCxFKSxjKz0xMixDcyhjLGgsbSxiLHAsVCxSLEUpLGMrPTEyLENzKGMsaCxtLGIscCx3LFIsVCksYys9MTIsQ3MoYyxoLG0sYixwLHksXyxFKSxjKz0xMixDcyhjLGgsbSxiLHAsRSxfLFQpLGcoaCkmJih1Lm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxnKG0pJiYodS50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLGcoYikmJih1LmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pKSxnKHApJiYodS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6cH0pKX1sZXQgbD1uZXcgVWludDE2QXJyYXkoNipmKTtmb3IobGV0IGg9MDtoPGY7KytoKXtsZXQgbT1oKjYsYj1oKjQ7bFttXT1iLGxbbSsxXT1iKzEsbFttKzJdPWIrMixsW20rM109YixsW20rNF09YisyLGxbbSs1XT1iKzN9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczp1LGluZGljZXM6bCxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpnZS5mcm9tVmVydGljZXMoZCl9KX07dGQ9RWN9KTt2YXIgbmc9e307cnQobmcse2RlZmF1bHQ6KCk9Pnk5fSk7ZnVuY3Rpb24gXzkoZSx0KXtyZXR1cm4gZyh0KSYmKGU9dGQudW5wYWNrKGUsdCkpLHRkLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciB5OSxvZz1YKCgpPT57c2UoKTt0ZygpO3k5PV85fSk7ZnVuY3Rpb24gbmQoZSl7bGV0IHQ9ZS5mcnVzdHVtLG49ZS5vcmllbnRhdGlvbixvPWUub3JpZ2luLGE9ZS5fZHJhd05lYXJQbGFuZT8/ITAscixpO3QgaW5zdGFuY2VvZiBEbz8ocj1hZyxpPURvLnBhY2tlZExlbmd0aCk6dCBpbnN0YW5jZW9mIEZvJiYocj1BOSxpPUZvLnBhY2tlZExlbmd0aCksdGhpcy5fZnJ1c3R1bVR5cGU9cix0aGlzLl9mcnVzdHVtPXQuY2xvbmUoKSx0aGlzLl9vcmlnaW49cy5jbG9uZShvKSx0aGlzLl9vcmllbnRhdGlvbj1RZS5jbG9uZShuKSx0aGlzLl9kcmF3TmVhclBsYW5lPWEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9MitpK3MucGFja2VkTGVuZ3RoK1FlLnBhY2tlZExlbmd0aH12YXIgYWcsQTksdzksRTksVDksUjkscmcsdzg9WCgoKT0+e010KCk7SWUoKTt2dCgpO3NlKCk7dGcoKTskdCgpO2VuKCk7dW4oKTtaMCgpOyQwKCk7Y24oKTtKbygpO2FnPTAsQTk9MTtuZC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG89ZS5fZnJ1c3R1bVR5cGUsYT1lLl9mcnVzdHVtO3JldHVybiB0W24rK109byxvPT09YWc/KERvLnBhY2soYSx0LG4pLG4rPURvLnBhY2tlZExlbmd0aCk6KEZvLnBhY2soYSx0LG4pLG4rPUZvLnBhY2tlZExlbmd0aCkscy5wYWNrKGUuX29yaWdpbix0LG4pLG4rPXMucGFja2VkTGVuZ3RoLFFlLnBhY2soZS5fb3JpZW50YXRpb24sdCxuKSxuKz1RZS5wYWNrZWRMZW5ndGgsdFtuXT1lLl9kcmF3TmVhclBsYW5lPzE6MCx0fTt3OT1uZXcgRG8sRTk9bmV3IEZvLFQ5PW5ldyBRZSxSOT1uZXcgcztuZC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbz1lW3QrK10sYTtvPT09YWc/KGE9RG8udW5wYWNrKGUsdCx3OSksdCs9RG8ucGFja2VkTGVuZ3RoKTooYT1Gby51bnBhY2soZSx0LEU5KSx0Kz1Gby5wYWNrZWRMZW5ndGgpO2xldCByPXMudW5wYWNrKGUsdCxSOSk7dCs9cy5wYWNrZWRMZW5ndGg7bGV0IGk9UWUudW5wYWNrKGUsdCxUOSk7dCs9UWUucGFja2VkTGVuZ3RoO2xldCBmPWVbdF09PT0xO2lmKCFnKG4pKXJldHVybiBuZXcgbmQoe2ZydXN0dW06YSxvcmlnaW46cixvcmllbnRhdGlvbjppLF9kcmF3TmVhclBsYW5lOmZ9KTtsZXQgZD1vPT09bi5fZnJ1c3R1bVR5cGU/bi5fZnJ1c3R1bTp2b2lkIDA7cmV0dXJuIG4uX2ZydXN0dW09YS5jbG9uZShkKSxuLl9mcnVzdHVtVHlwZT1vLG4uX29yaWdpbj1zLmNsb25lKHIsbi5fb3JpZ2luKSxuLl9vcmllbnRhdGlvbj1RZS5jbG9uZShpLG4uX29yaWVudGF0aW9uKSxuLl9kcmF3TmVhclBsYW5lPWYsbn07bmQuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fZnJ1c3R1bVR5cGUsbj1lLl9mcnVzdHVtLG89ZS5fb3JpZ2luLGE9ZS5fb3JpZW50YXRpb24scj1lLl9kcmF3TmVhclBsYW5lLGk9bmV3IEZsb2F0NjRBcnJheSgyNCk7dGQuX2NvbXB1dGVOZWFyRmFyUGxhbmVzKG8sYSx0LG4saSk7bGV0IGY9bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX0pLGQsYyx1PXI/MjoxLGw9bmV3IFVpbnQxNkFycmF5KDgqKHUrMSkpLGg9cj8wOjE7Zm9yKDtoPDI7KytoKWQ9cj9oKjg6MCxjPWgqNCxsW2RdPWMsbFtkKzFdPWMrMSxsW2QrMl09YysxLGxbZCszXT1jKzIsbFtkKzRdPWMrMixsW2QrNV09YyszLGxbZCs2XT1jKzMsbFtkKzddPWM7Zm9yKGg9MDtoPDI7KytoKWQ9KHUraCkqOCxjPWgqNCxsW2RdPWMsbFtkKzFdPWMrNCxsW2QrMl09YysxLGxbZCszXT1jKzUsbFtkKzRdPWMrMixsW2QrNV09Yys2LGxbZCs2XT1jKzMsbFtkKzddPWMrNztyZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOmYsaW5kaWNlczpsLHByaW1pdGl2ZVR5cGU6VWUuTElORVMsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVZlcnRpY2VzKGkpfSl9O3JnPW5kfSk7dmFyIGlnPXt9O3J0KGlnLHtkZWZhdWx0OigpPT5POX0pO2Z1bmN0aW9uIHg5KGUsdCl7cmV0dXJuIGcodCkmJihlPXJnLnVucGFjayhlLHQpKSxyZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgTzksY2c9WCgoKT0+e3NlKCk7dzgoKTtPOT14OX0pO2Z1bmN0aW9uIGtpKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNULHRoaXMuX2VsbGlwc29pZD1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LHRoaXMuX3JlY3RhbmdsZT1lLnJlY3RhbmdsZT8/U2UuTUFYX1ZBTFVFLHRoaXMuX3Byb2plY3Rpb249bmV3IGlvKHRoaXMuX2VsbGlwc29pZCksdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g9ZS5udW1iZXJPZkxldmVsWmVyb1RpbGVzWD8/Mix0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWT1lLm51bWJlck9mTGV2ZWxaZXJvVGlsZXNZPz8xfXZhciBFOCxUOD1YKCgpPT57anQoKTttdCgpO3NlKCk7cWUoKTtrcigpO0dlKCk7X24oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhraS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHJlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlY3RhbmdsZX19LHByb2plY3Rpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9qZWN0aW9ufX19KTtraS5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWDw8ZX07a2kucHJvdG90eXBlLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k8PGV9O2tpLnByb3RvdHlwZS5yZWN0YW5nbGVUb05hdGl2ZVJlY3RhbmdsZT1mdW5jdGlvbihlLHQpe2xldCBuPWsudG9EZWdyZWVzKGUud2VzdCksbz1rLnRvRGVncmVlcyhlLnNvdXRoKSxhPWsudG9EZWdyZWVzKGUuZWFzdCkscj1rLnRvRGVncmVlcyhlLm5vcnRoKTtyZXR1cm4gZyh0KT8odC53ZXN0PW4sdC5zb3V0aD1vLHQuZWFzdD1hLHQubm9ydGg9cix0KTpuZXcgU2UobixvLGEscil9O2tpLnByb3RvdHlwZS50aWxlWFlUb05hdGl2ZVJlY3RhbmdsZT1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT10aGlzLnRpbGVYWVRvUmVjdGFuZ2xlKGUsdCxuLG8pO3JldHVybiBhLndlc3Q9ay50b0RlZ3JlZXMoYS53ZXN0KSxhLnNvdXRoPWsudG9EZWdyZWVzKGEuc291dGgpLGEuZWFzdD1rLnRvRGVncmVlcyhhLmVhc3QpLGEubm9ydGg9ay50b0RlZ3JlZXMoYS5ub3J0aCksYX07a2kucHJvdG90eXBlLnRpbGVYWVRvUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPXRoaXMuX3JlY3RhbmdsZSxyPXRoaXMuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKG4pLGk9dGhpcy5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWwobiksZj1hLndpZHRoL3IsZD1lKmYrYS53ZXN0LGM9KGUrMSkqZithLndlc3QsdT1hLmhlaWdodC9pLGw9YS5ub3J0aC10KnUsaD1hLm5vcnRoLSh0KzEpKnU7cmV0dXJuIGcobyl8fChvPW5ldyBTZShkLGgsYyxsKSksby53ZXN0PWQsby5zb3V0aD1oLG8uZWFzdD1jLG8ubm9ydGg9bCxvfTtraS5wcm90b3R5cGUucG9zaXRpb25Ub1RpbGVYWT1mdW5jdGlvbihlLHQsbil7bGV0IG89dGhpcy5fcmVjdGFuZ2xlO2lmKCFTZS5jb250YWlucyhvLGUpKXJldHVybjtsZXQgYT10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbCh0KSxyPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKHQpLGk9by53aWR0aC9hLGY9by5oZWlnaHQvcixkPWUubG9uZ2l0dWRlO28uZWFzdDxvLndlc3QmJihkKz1rLlRXT19QSSk7bGV0IGM9KGQtby53ZXN0KS9pfDA7Yz49YSYmKGM9YS0xKTtsZXQgdT0oby5ub3J0aC1lLmxhdGl0dWRlKS9mfDA7cmV0dXJuIHU+PXImJih1PXItMSksZyhuKT8obi54PWMsbi55PXUsbik6bmV3IFkoYyx1KX07RTg9a2l9KTtmdW5jdGlvbiBDOChlKXtyZS5mcm9tUmFkaWFucyhlLmVhc3QsZS5ub3J0aCwwLG9kWzBdKSxyZS5mcm9tUmFkaWFucyhlLndlc3QsZS5ub3J0aCwwLG9kWzFdKSxyZS5mcm9tUmFkaWFucyhlLmVhc3QsZS5zb3V0aCwwLG9kWzJdKSxyZS5mcm9tUmFkaWFucyhlLndlc3QsZS5zb3V0aCwwLG9kWzNdKTtsZXQgdD0wLG49MCxvPTAsYT0wLHI9cW4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWwsaTtmb3IoaT0wO2k8PXI7KytpKXtsZXQgZj0hMTtmb3IobGV0IGQ9MDtkPDQ7KytkKXtsZXQgYz1vZFtkXTtpZihDOS5wb3NpdGlvblRvVGlsZVhZKGMsaSxhZCksZD09PTApbz1hZC54LGE9YWQueTtlbHNlIGlmKG8hPT1hZC54fHxhIT09YWQueSl7Zj0hMDticmVha319aWYoZilicmVhazt0PW8sbj1hfWlmKGkhPT0wKXJldHVybnt4OnQseTpuLGxldmVsOmk+cj9yOmktMX19dmFyIFI4LHg4LE84LHNnLFM5LFM4LEM5LG9kLGFkLHFuLFBoLGZnPVgoKCk9PntNdCgpO3hsKCk7anQoKTtJZSgpO0V0KCk7c2UoKTtxZSgpO1Q4KCk7X24oKTtvcygpO1I4PW5ldyBzLHg4PW5ldyBzLE84PW5ldyByZSxzZz1uZXcgcyxTOT1uZXcgcyxTOD1uZXcgZ2UsQzk9bmV3IEU4LG9kPVtuZXcgcmUsbmV3IHJlLG5ldyByZSxuZXcgcmVdLGFkPW5ldyBZLHFuPXt9O3FuLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtsZXQgZT1xbi5faW5pdFByb21pc2U7cmV0dXJuIGcoZSl8fChlPUFhLmZldGNoSnNvbihpcigiQXNzZXRzL2FwcHJveGltYXRlVGVycmFpbkhlaWdodHMuanNvbiIpKS50aGVuKGZ1bmN0aW9uKHQpe3FuLl90ZXJyYWluSGVpZ2h0cz10fSkscW4uX2luaXRQcm9taXNlPWUpLGV9O3FuLmdldE1pbmltdW1NYXhpbXVtSGVpZ2h0cz1mdW5jdGlvbihlLHQpe3Q9dD8/cS5kZWZhdWx0O2xldCBuPUM4KGUpLG89cW4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0LGE9cW4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0O2lmKGcobikpe2xldCByPWAke24ubGV2ZWx9LSR7bi54fS0ke24ueX1gLGk9cW4uX3RlcnJhaW5IZWlnaHRzW3JdO2coaSkmJihvPWlbMF0sYT1pWzFdKSx0LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFNlLm5vcnRoZWFzdChlLE84KSxSOCksdC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihTZS5zb3V0aHdlc3QoZSxPOCkseDgpLHMubWlkcG9pbnQoeDgsUjgsc2cpO2xldCBmPXQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShzZyxTOSk7aWYoZyhmKSl7bGV0IGQ9cy5kaXN0YW5jZShzZyxmKTtvPU1hdGgubWluKG8sLWQpfWVsc2Ugbz1xbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHR9cmV0dXJuIG89TWF0aC5tYXgocW4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0LG8pLHttaW5pbXVtVGVycmFpbkhlaWdodDpvLG1heGltdW1UZXJyYWluSGVpZ2h0OmF9fTtxbi5nZXRCb3VuZGluZ1NwaGVyZT1mdW5jdGlvbihlLHQpe3Q9dD8/cS5kZWZhdWx0O2xldCBuPUM4KGUpLG89cW4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0O2lmKGcobikpe2xldCByPWAke24ubGV2ZWx9LSR7bi54fS0ke24ueX1gLGk9cW4uX3RlcnJhaW5IZWlnaHRzW3JdO2coaSkmJihvPWlbMV0pfWxldCBhPWdlLmZyb21SZWN0YW5nbGUzRChlLHQsMCk7cmV0dXJuIGdlLmZyb21SZWN0YW5nbGUzRChlLHQsbyxTOCksZ2UudW5pb24oYSxTOCxhKX07cW4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWw9Njtxbi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ9OWUzO3FuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodD0tMWU1O3FuLl90ZXJyYWluSGVpZ2h0cz12b2lkIDA7cW4uX2luaXRQcm9taXNlPXZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxbix7aW5pdGlhbGl6ZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHFuLl90ZXJyYWluSGVpZ2h0cyl9fX0pO1BoPXFufSk7ZnVuY3Rpb24gRmkoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnM7dGhpcy53aWR0aD1lLndpZHRoPz8xLHRoaXMuX3Bvc2l0aW9ucz10LHRoaXMuZ3JhbnVsYXJpdHk9ZS5ncmFudWxhcml0eT8/OTk5OSx0aGlzLmxvb3A9ZS5sb29wPz8hMSx0aGlzLmFyY1R5cGU9ZS5hcmNUeXBlPz93dC5HRU9ERVNJQyx0aGlzLl9lbGxpcHNvaWQ9cS5kZWZhdWx0LHRoaXMuX3Byb2plY3Rpb25JbmRleD0wLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkiLHRoaXMuX3NjZW5lM0RPbmx5PSExfWZ1bmN0aW9uIHBnKGUsdCxuLG8sYSl7bGV0IHI9SG8obyxlLDAsTjkpLGk9SG8obyxlLG4sTjgpLGY9SG8obyx0LDAsSTgpLGQ9WnIoaSxyLE44KSxjPVpyKGYscixJOCk7cmV0dXJuIHMuY3Jvc3MoYyxkLGEpLHMubm9ybWFsaXplKGEsYSl9ZnVuY3Rpb24gZGcoZSx0LG4sbyxhLHIsaSxmLGQsYyx1KXtpZihhPT09MClyZXR1cm47bGV0IGw7cj09PXd0LkdFT0RFU0lDP2w9bmV3IGJoKGUsdCxpKTpyPT09d3QuUkhVTUImJihsPW5ldyBlYShlLHQsaSkpO2xldCBoPWwuc3VyZmFjZURpc3RhbmNlO2lmKGg8YSlyZXR1cm47bGV0IG09cGcoZSx0LG8saSx2OSksYj1NYXRoLmNlaWwoaC9hKSxwPWgvYix5PXAsRT1iLTEsXz1mLmxlbmd0aDtmb3IobGV0IFQ9MDtUPEU7VCsrKXtsZXQgdz1sLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoeSxJOSksUj1IbyhpLHcsbixQOSksUz1IbyhpLHcsbyxrOSk7cy5wYWNrKG0sZixfKSxzLnBhY2soUixkLF8pLHMucGFjayhTLGMsXyksdS5wdXNoKHcubGF0aXR1ZGUpLHUucHVzaCh3LmxvbmdpdHVkZSksXys9Myx5Kz1wfX1mdW5jdGlvbiBIbyhlLHQsbixvKXtyZXR1cm4gcmUuY2xvbmUodCx1ZyksdWcuaGVpZ2h0PW4scmUudG9DYXJ0ZXNpYW4odWcsZSxvKX1mdW5jdGlvbiBacihlLHQsbil7cmV0dXJuIHMuc3VidHJhY3QoZSx0LG4pLHMubm9ybWFsaXplKG4sbiksbn1mdW5jdGlvbiBQOChlLHQsbixvKXtyZXR1cm4gbz1acihlLHQsbyksbz1zLmNyb3NzKG8sbixvKSxvPXMubm9ybWFsaXplKG8sbyksbz1zLmNyb3NzKG4sbyxvKSxvfWZ1bmN0aW9uIGxnKGUsdCxuLG8sYSl7bGV0IHI9WnIobix0LFo4KSxpPVA4KGUsdCxyLEY5KSxmPVA4KG8sdCxyLEQ5KTtpZihrLmVxdWFsc0Vwc2lsb24ocy5kb3QoaSxmKSxMOSxrLkVQU0lMT041KSlyZXR1cm4gYT1zLmNyb3NzKHIsaSxhKSxhPXMubm9ybWFsaXplKGEsYSksYTthPXMuYWRkKGYsaSxhKSxhPXMubm9ybWFsaXplKGEsYSk7bGV0IGQ9cy5jcm9zcyhyLGEsQjkpO3JldHVybiBzLmRvdChmLGQpPFU5JiYoYT1zLm5lZ2F0ZShhLGEpKSxhfWZ1bmN0aW9uIEY4KGUsdCxuLG8pe2xldCBhPVpyKG4sdCxLOSkscj1zLmRvdChhLGUpO2lmKHI+WDh8fHI8TTgpe2xldCBpPVpyKG8sbixaOCksZj1yPE04P2suUElfT1ZFUl9UV086LWsuUElfT1ZFUl9UV08sZD1RZS5mcm9tQXhpc0FuZ2xlKGksZixXOSksYz1KLmZyb21RdWF0ZXJuaW9uKGQscTkpO3JldHVybiBKLm11bHRpcGx5QnlWZWN0b3IoYyxlLGUpLCEwfXJldHVybiExfWZ1bmN0aW9uIHJkKGUsdCxuLG8sYSl7bGV0IHI9cmUudG9DYXJ0ZXNpYW4odCxlLl9lbGxpcHNvaWQsWDkpLGk9cy5hZGQocixuLEI4KSxmPSExLGQ9ZS5fZWxsaXBzb2lkLGM9ZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhpLEQ4KTtNYXRoLmFicyh0LmxvbmdpdHVkZS1jLmxvbmdpdHVkZSk+ay5QSV9PVkVSX1RXTyYmKGY9ITAsaT1zLnN1YnRyYWN0KHIsbixCOCksYz1kLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGksRDgpKSxjLmhlaWdodD0wO2xldCB1PWUucHJvamVjdChjLGEpO3JldHVybiBhPXMuc3VidHJhY3QodSxvLGEpLGEuej0wLGE9cy5ub3JtYWxpemUoYSxhKSxmJiZzLm5lZ2F0ZShhLGEpLGF9ZnVuY3Rpb24gTDgoZSx0LG4sbyxhLHIpe2xldCBpPXMuc3VidHJhY3QodCxlLFk5KTtzLm5vcm1hbGl6ZShpLGkpO2xldCBmPW4tWTgsZD1zLm11bHRpcGx5QnlTY2FsYXIoaSxmLFU4KTtzLmFkZChlLGQsYSk7bGV0IGM9by1KODtkPXMubXVsdGlwbHlCeVNjYWxhcihpLGMsVTgpLHMuYWRkKHQsZCxyKX1mdW5jdGlvbiBGaChlLHQpe2xldCBuPXNuLmdldFBvaW50RGlzdGFuY2UoRGgsZSksbz1zbi5nZXRQb2ludERpc3RhbmNlKERoLHQpLGE9Sjk7ay5lcXVhbHNFcHNpbG9uKG4sMCxrLkVQU0lMT04yKT8oYT1acih0LGUsYSkscy5tdWx0aXBseUJ5U2NhbGFyKGEsay5FUFNJTE9OMixhKSxzLmFkZChlLGEsZSkpOmsuZXF1YWxzRXBzaWxvbihvLDAsay5FUFNJTE9OMikmJihhPVpyKGUsdCxhKSxzLm11bHRpcGx5QnlTY2FsYXIoYSxrLkVQU0lMT04yLGEpLHMuYWRkKHQsYSx0KSl9ZnVuY3Rpb24gWjkoZSx0KXtsZXQgbj1NYXRoLmFicyhlLmxvbmdpdHVkZSksbz1NYXRoLmFicyh0LmxvbmdpdHVkZSk7aWYoay5lcXVhbHNFcHNpbG9uKG4say5QSSxrLkVQU0lMT04xMSkpe2xldCBhPWsuc2lnbih0LmxvbmdpdHVkZSk7cmV0dXJuIGUubG9uZ2l0dWRlPWEqKG4tay5FUFNJTE9OMTEpLDF9ZWxzZSBpZihrLmVxdWFsc0Vwc2lsb24obyxrLlBJLGsuRVBTSUxPTjExKSl7bGV0IGE9ay5zaWduKGUubG9uZ2l0dWRlKTtyZXR1cm4gdC5sb25naXR1ZGU9YSooby1rLkVQU0lMT04xMSksMn1yZXR1cm4gMH1mdW5jdGlvbiBwRihlLHQsbixvLGEscixpKXtsZXQgZixkLGM9dC5fZWxsaXBzb2lkLHU9bi5sZW5ndGgvMy0xLGw9dSo4LGg9bCo0LG09dSozNixiPWw+NjU1MzU/bmV3IFVpbnQzMkFycmF5KG0pOm5ldyBVaW50MTZBcnJheShtKSxwPW5ldyBGbG9hdDY0QXJyYXkobCozKSx5PW5ldyBGbG9hdDMyQXJyYXkoaCksRT1uZXcgRmxvYXQzMkFycmF5KGgpLF89bmV3IEZsb2F0MzJBcnJheShoKSxUPW5ldyBGbG9hdDMyQXJyYXkoaCksdz1uZXcgRmxvYXQzMkFycmF5KGgpLFIsUyxDLEk7aSYmKFI9bmV3IEZsb2F0MzJBcnJheShoKSxTPW5ldyBGbG9hdDMyQXJyYXkoaCksQz1uZXcgRmxvYXQzMkFycmF5KGgpLEk9bmV3IEZsb2F0MzJBcnJheShsKjIpKTtsZXQgTj1yLmxlbmd0aC8yLFA9MCx2PVE4O3YuaGVpZ2h0PTA7bGV0IEE9JDg7QS5oZWlnaHQ9MDtsZXQgeD1qOCxNPWhnO2lmKGkpZm9yKGQ9MCxmPTE7ZjxOO2YrKyl2LmxhdGl0dWRlPXJbZF0sdi5sb25naXR1ZGU9cltkKzFdLEEubGF0aXR1ZGU9cltkKzJdLEEubG9uZ2l0dWRlPXJbZCszXSx4PXQucHJvamVjdCh2LHgpLE09dC5wcm9qZWN0KEEsTSksUCs9cy5kaXN0YW5jZSh4LE0pLGQrPTI7bGV0IEY9by5sZW5ndGgvMztNPXMudW5wYWNrKG8sMCxNKTtsZXQgVT0wO2ZvcihkPTMsZj0xO2Y8RjtmKyspeD1zLmNsb25lKE0seCksTT1zLnVucGFjayhvLGQsTSksVSs9cy5kaXN0YW5jZSh4LE0pLGQrPTM7bGV0IHo7ZD0zO2xldCBEPTAsRz0wLEg9MCxPPTAsWj0hMSxvZT1zLnVucGFjayhuLDAsRzgpLGNlPXMudW5wYWNrKG8sMCxoZyksZGU9cy51bnBhY2soYSwwLFY4KTtpZihlKXtsZXQgTmU9cy51bnBhY2sobixuLmxlbmd0aC02LHo4KTtGOChkZSxOZSxvZSxjZSkmJihkZT1zLm5lZ2F0ZShkZSxkZSkpfWxldCBlZT0wLG1lPTAsbGU9MDtmb3IoZj0wO2Y8dTtmKyspe2xldCBOZT1zLmNsb25lKG9lLHo4KSxKZT1zLmNsb25lKGNlLGo4KSxXZT1zLmNsb25lKGRlLFE5KTtaJiYoV2U9cy5uZWdhdGUoV2UsV2UpKSxvZT1zLnVucGFjayhuLGQsRzgpLGNlPXMudW5wYWNrKG8sZCxoZyksZGU9cy51bnBhY2soYSxkLFY4KSxaPUY4KGRlLE5lLG9lLGNlKSx2LmxhdGl0dWRlPXJbRF0sdi5sb25naXR1ZGU9cltEKzFdLEEubGF0aXR1ZGU9cltEKzJdLEEubG9uZ2l0dWRlPXJbRCszXTtsZXQgdHQsWGUsTGUsamU7aWYoaSl7bGV0IHh0PVo5KHYsQSk7dHQ9dC5wcm9qZWN0KHYsckYpLFhlPXQucHJvamVjdChBLGlGKTtsZXQgT249WnIoWGUsdHQsSzgpO09uLnk9TWF0aC5hYnMoT24ueSksTGU9bWcsamU9YmcseHQ9PT0wfHxzLmRvdChPbixzLlVOSVRfWSk+WDg/KExlPXJkKHQsdixXZSx0dCxtZyksamU9cmQodCxBLGRlLFhlLGJnKSk6eHQ9PT0xPyhqZT1yZCh0LEEsZGUsWGUsYmcpLExlLng9MCxMZS55PWsuc2lnbih2LmxvbmdpdHVkZS1NYXRoLmFicyhBLmxvbmdpdHVkZSkpLExlLno9MCk6KExlPXJkKHQsdixXZSx0dCxtZyksamUueD0wLGplLnk9ay5zaWduKHYubG9uZ2l0dWRlLUEubG9uZ2l0dWRlKSxqZS56PTApfWxldCBpdD1zLmRpc3RhbmNlKEplLGNlKSxZZT1hYy5mcm9tQ2FydGVzaWFuKE5lLGxGKSxmdD1zLnN1YnRyYWN0KG9lLE5lLGNGKSxJdD1zLm5vcm1hbGl6ZShmdCxIOCksQ3Q9cy5zdWJ0cmFjdChKZSxOZSxzRik7Q3Q9cy5ub3JtYWxpemUoQ3QsQ3QpO2xldCBodD1zLmNyb3NzKEl0LEN0LEg4KTtodD1zLm5vcm1hbGl6ZShodCxodCk7bGV0IEt0PXMuY3Jvc3MoQ3QsV2UsZEYpO0t0PXMubm9ybWFsaXplKEt0LEt0KTtsZXQgUHQ9cy5zdWJ0cmFjdChjZSxvZSxmRik7UHQ9cy5ub3JtYWxpemUoUHQsUHQpO2xldCBMdD1zLmNyb3NzKGRlLFB0LHVGKTtMdD1zLm5vcm1hbGl6ZShMdCxMdCk7bGV0IEtlPWl0L1UsVmU9ZWUvVSxSdD0wLEZ0LHF0LFp0LG9uPTAsd249MDtpZihpKXtSdD1zLmRpc3RhbmNlKHR0LFhlKSxGdD1hYy5mcm9tQ2FydGVzaWFuKHR0LGhGKSxxdD1zLnN1YnRyYWN0KFhlLHR0LEs4KSxadD1zLm5vcm1hbGl6ZShxdCxtRik7bGV0IHh0PVp0Lng7WnQueD1adC55LFp0Lnk9LXh0LG9uPVJ0L1Asd249bWUvUH1mb3Ioej0wO3o8ODt6Kyspe2xldCB4dD1PK3oqNCxPbj1HK3oqMixrbj14dCszLEFvPXo8ND8xOi0xLEd0PXo9PT0yfHx6PT09M3x8ej09PTZ8fHo9PT03PzE6LTE7cy5wYWNrKFllLmhpZ2gseSx4dCkseVtrbl09ZnQueCxzLnBhY2soWWUubG93LEUseHQpLEVba25dPWZ0Lnkscy5wYWNrKEt0LF8seHQpLF9ba25dPWZ0Lnoscy5wYWNrKEx0LFQseHQpLFRba25dPUtlKkFvLHMucGFjayhodCx3LHh0KTtsZXQgZG49VmUqR3Q7ZG49PT0wJiZHdDwwJiYoZG49OSksd1trbl09ZG4saSYmKFJbeHRdPUZ0LmhpZ2gueCxSW3h0KzFdPUZ0LmhpZ2gueSxSW3h0KzJdPUZ0Lmxvdy54LFJbeHQrM109RnQubG93LnksQ1t4dF09LUxlLnksQ1t4dCsxXT1MZS54LENbeHQrMl09amUueSxDW3h0KzNdPS1qZS54LFNbeHRdPXF0LngsU1t4dCsxXT1xdC55LFNbeHQrMl09WnQueCxTW3h0KzNdPVp0LnksSVtPbl09b24qQW8sZG49d24qR3QsZG49PT0wJiZHdDwwJiYoZG49OSksSVtPbisxXT1kbil9bGV0IER0PW9GLGFuPWFGLHp0PXRGLGZuPW5GLFZuPVNlLmZyb21DYXJ0b2dyYXBoaWNBcnJheSgkOSxlRiksSG49UGguZ2V0TWluaW11bU1heGltdW1IZWlnaHRzKFZuLGMpLFBuPUhuLm1pbmltdW1UZXJyYWluSGVpZ2h0LHJvPUhuLm1heGltdW1UZXJyYWluSGVpZ2h0O2xlKz1NYXRoLmFicyhQbiksbGUrPU1hdGguYWJzKHJvKSxMOChOZSxKZSxQbixybyxEdCx6dCksTDgob2UsY2UsUG4scm8sYW4sZm4pO2xldCBrdD1zLm11bHRpcGx5QnlTY2FsYXIoaHQsay5FUFNJTE9ONSxxOCk7cy5hZGQoRHQsa3QsRHQpLHMuYWRkKGFuLGt0LGFuKSxzLmFkZCh6dCxrdCx6dCkscy5hZGQoZm4sa3QsZm4pLEZoKER0LGFuKSxGaCh6dCxmbikscy5wYWNrKER0LHAsSCkscy5wYWNrKGFuLHAsSCszKSxzLnBhY2soZm4scCxIKzYpLHMucGFjayh6dCxwLEgrOSksa3Q9cy5tdWx0aXBseUJ5U2NhbGFyKGh0LC0yKmsuRVBTSUxPTjUscTgpLHMuYWRkKER0LGt0LER0KSxzLmFkZChhbixrdCxhbikscy5hZGQoenQsa3QsenQpLHMuYWRkKGZuLGt0LGZuKSxGaChEdCxhbiksRmgoenQsZm4pLHMucGFjayhEdCxwLEgrMTIpLHMucGFjayhhbixwLEgrMTUpLHMucGFjayhmbixwLEgrMTgpLHMucGFjayh6dCxwLEgrMjEpLEQrPTIsZCs9MyxHKz0xNixIKz0yNCxPKz0zMixlZSs9aXQsbWUrPVJ0fWQ9MDtsZXQgYmU9MDtmb3IoZj0wO2Y8dTtmKyspe2Zvcih6PTA7ejxXODt6KyspYltkK3pdPWVSW3pdK2JlO2JlKz04LGQrPVc4fWxldCBmZT1iRjtnZS5mcm9tVmVydGljZXMobixzLlpFUk8sMyxmZVswXSksZ2UuZnJvbVZlcnRpY2VzKG8scy5aRVJPLDMsZmVbMV0pO2xldCBhZT1nZS5mcm9tQm91bmRpbmdTcGhlcmVzKGZlKTthZS5yYWRpdXMrPWxlLyh1KjIpO2xldCBSZT17cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLG5vcm1hbGl6ZTohMSx2YWx1ZXM6cH0pLHN0YXJ0SGlBbmRGb3J3YXJkT2Zmc2V0WDp2aSh5KSxzdGFydExvQW5kRm9yd2FyZE9mZnNldFk6dmkoRSksc3RhcnROb3JtYWxBbmRGb3J3YXJkT2Zmc2V0Wjp2aShfKSxlbmROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25YOnZpKFQpLHJpZ2h0Tm9ybWFsQW5kVGV4dHVyZUNvb3JkaW5hdGVOb3JtYWxpemF0aW9uWTp2aSh3KX07cmV0dXJuIGkmJihSZS5zdGFydEhpTG8yRD12aShSKSxSZS5vZmZzZXRBbmRSaWdodDJEPXZpKFMpLFJlLnN0YXJ0RW5kTm9ybWFsczJEPXZpKEMpLFJlLnRleGNvb3JkTm9ybWFsaXphdGlvbjJEPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLG5vcm1hbGl6ZTohMSx2YWx1ZXM6SX0pKSxuZXcgdmUoe2F0dHJpYnV0ZXM6UmUsaW5kaWNlczpiLGJvdW5kaW5nU3BoZXJlOmFlfSl9ZnVuY3Rpb24gdmkoZSl7cmV0dXJuIG5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LG5vcm1hbGl6ZTohMSx2YWx1ZXM6ZX0pfXZhciBnZyxNOSxYOCxNOCxZOCxKOCxOOSxOOCxJOCxJOSxQOSxrOSx2OSx1ZyxGOSxEOSxCOSxaOCxVOSxMOSxEaCxqOSx6OSxHOSxWOSxIOSxraCx2aCxrOCx2OCxLOSxxOSxXOSxEOCxYOSxCOCxZOSxVOCxKOSxROCwkOCxqOCxoZyx6OCxHOCxROSxWOCwkOSxlRix0RixuRixvRixhRixyRixpRixtZyxiZyxjRixzRixmRixIOCxkRix1RixsRixoRixLOCxtRixxOCxiRixlUixXOCxfZyx0Uj1YKCgpPT57ZmcoKTtoYygpO1hhKCk7TXQoKTtJZSgpO0V0KCk7dnQoKTttdCgpO3NlKCk7cWUoKTtkMCgpO1VmKCk7b3AoKTtrcigpOyR0KCk7ZW4oKTtwaSgpO0dlKCk7RG4oKTtnaSgpO0pvKCk7X24oKTt5aSgpO2dnPVtpbyxSbl0sTTk9Z2cubGVuZ3RoLFg4PU1hdGguY29zKGsudG9SYWRpYW5zKDMwKSksTTg9TWF0aC5jb3Moay50b1JhZGlhbnMoMTUwKSksWTg9MCxKOD0xZTM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmkucHJvdG90eXBlLHtwYWNrZWRMZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiAxK3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGgqMysxKzErMStxLnBhY2tlZExlbmd0aCsxKzF9fX0pO0ZpLnNldFByb2plY3Rpb25BbmRFbGxpcHNvaWQ9ZnVuY3Rpb24oZSx0KXtsZXQgbj0wO2ZvcihsZXQgbz0wO288TTk7bysrKWlmKHQgaW5zdGFuY2VvZiBnZ1tvXSl7bj1vO2JyZWFrfWUuX3Byb2plY3Rpb25JbmRleD1uLGUuX2VsbGlwc29pZD10LmVsbGlwc29pZH07Tjk9bmV3IHMsTjg9bmV3IHMsSTg9bmV3IHM7STk9bmV3IHJlLFA5PW5ldyBzLGs5PW5ldyBzLHY5PW5ldyBzO3VnPW5ldyByZTtGaS5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1uPz8wLGE9ZS5fcG9zaXRpb25zLHI9YS5sZW5ndGg7dFtvKytdPXI7Zm9yKGxldCBpPTA7aTxyOysraSl7bGV0IGY9YVtpXTtzLnBhY2soZix0LG8pLG8rPTN9cmV0dXJuIHRbbysrXT1lLmdyYW51bGFyaXR5LHRbbysrXT1lLmxvb3A/MTowLHRbbysrXT1lLmFyY1R5cGUscS5wYWNrKGUuX2VsbGlwc29pZCx0LG8pLG8rPXEucGFja2VkTGVuZ3RoLHRbbysrXT1lLl9wcm9qZWN0aW9uSW5kZXgsdFtvKytdPWUuX3NjZW5lM0RPbmx5PzE6MCx0fTtGaS51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQ/PzAsYT1lW28rK10scj1uZXcgQXJyYXkoYSk7Zm9yKGxldCBoPTA7aDxhO2grKylyW2hdPXMudW5wYWNrKGUsbyksbys9MztsZXQgaT1lW28rK10sZj1lW28rK109PT0xLGQ9ZVtvKytdLGM9cS51bnBhY2soZSxvKTtvKz1xLnBhY2tlZExlbmd0aDtsZXQgdT1lW28rK10sbD1lW28rK109PT0xO3JldHVybiBnKG4pfHwobj1uZXcgRmkoe3Bvc2l0aW9uczpyfSkpLG4uX3Bvc2l0aW9ucz1yLG4uZ3JhbnVsYXJpdHk9aSxuLmxvb3A9ZixuLmFyY1R5cGU9ZCxuLl9lbGxpcHNvaWQ9YyxuLl9wcm9qZWN0aW9uSW5kZXg9dSxuLl9zY2VuZTNET25seT1sLG59O0Y5PW5ldyBzLEQ5PW5ldyBzLEI5PW5ldyBzLFo4PW5ldyBzLFU5PTAsTDk9LTE7RGg9c24uZnJvbVBvaW50Tm9ybWFsKHMuWkVSTyxzLlVOSVRfWSksajk9bmV3IHMsejk9bmV3IHMsRzk9bmV3IHMsVjk9bmV3IHMsSDk9bmV3IHMsa2g9bmV3IHMsdmg9bmV3IHJlLGs4PW5ldyByZSx2OD1uZXcgcmU7RmkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9IWUuX3NjZW5lM0RPbmx5LG49ZS5sb29wLG89ZS5fZWxsaXBzb2lkLGE9ZS5ncmFudWxhcml0eSxyPWUuYXJjVHlwZSxpPW5ldyBnZ1tlLl9wcm9qZWN0aW9uSW5kZXhdKG8pLGY9WTgsZD1KOCxjLHUsbD1lLl9wb3NpdGlvbnMsaD1sLmxlbmd0aDtoPT09MiYmKG49ITEpO2xldCBtLGIscCx5LEU9bmV3IGVhKHZvaWQgMCx2b2lkIDAsbyksXyxULHcsUj1bbFswXV07Zm9yKHU9MDt1PGgtMTt1KyspbT1sW3VdLGI9bFt1KzFdLF89bm8ubGluZVNlZ21lbnRQbGFuZShtLGIsRGgsa2gpLGcoXykmJiFzLmVxdWFsc0Vwc2lsb24oXyxtLGsuRVBTSUxPTjcpJiYhcy5lcXVhbHNFcHNpbG9uKF8sYixrLkVQU0lMT043KSYmKGUuYXJjVHlwZT09PXd0LkdFT0RFU0lDP1IucHVzaChzLmNsb25lKF8pKTplLmFyY1R5cGU9PT13dC5SSFVNQiYmKHc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhfLHZoKS5sb25naXR1ZGUscD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG0sdmgpLHk9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhiLGs4KSxFLnNldEVuZFBvaW50cyhwLHkpLFQ9RS5maW5kSW50ZXJzZWN0aW9uV2l0aExvbmdpdHVkZSh3LHY4KSxfPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oVCxraCksZyhfKSYmIXMuZXF1YWxzRXBzaWxvbihfLG0say5FUFNJTE9ONykmJiFzLmVxdWFsc0Vwc2lsb24oXyxiLGsuRVBTSUxPTjcpJiZSLnB1c2gocy5jbG9uZShfKSkpKSxSLnB1c2goYik7biYmKG09bFtoLTFdLGI9bFswXSxfPW5vLmxpbmVTZWdtZW50UGxhbmUobSxiLERoLGtoKSxnKF8pJiYhcy5lcXVhbHNFcHNpbG9uKF8sbSxrLkVQU0lMT043KSYmIXMuZXF1YWxzRXBzaWxvbihfLGIsay5FUFNJTE9ONykmJihlLmFyY1R5cGU9PT13dC5HRU9ERVNJQz9SLnB1c2gocy5jbG9uZShfKSk6ZS5hcmNUeXBlPT09d3QuUkhVTUImJih3PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyx2aCkubG9uZ2l0dWRlLHA9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLHZoKSx5PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYixrOCksRS5zZXRFbmRQb2ludHMocCx5KSxUPUUuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUodyx2OCksXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFQsa2gpLGcoXykmJiFzLmVxdWFsc0Vwc2lsb24oXyxtLGsuRVBTSUxPTjcpJiYhcy5lcXVhbHNFcHNpbG9uKF8sYixrLkVQU0lMT043KSYmUi5wdXNoKHMuY2xvbmUoXykpKSkpO2xldCBTPVIubGVuZ3RoLEM9bmV3IEFycmF5KFMpO2Zvcih1PTA7dTxTO3UrKyl7bGV0IFo9cmUuZnJvbUNhcnRlc2lhbihSW3VdLG8pO1ouaGVpZ2h0PTAsQ1t1XT1afWlmKEM9Tm4oQyxyZS5lcXVhbHNFcHNpbG9uKSxTPUMubGVuZ3RoLFM8MilyZXR1cm47bGV0IEk9W10sTj1bXSxQPVtdLHY9W10sQT1qOSx4PXo5LE09RzksRj1WOSxVPUg5LHo9Q1swXSxEPUNbMV0sRz1DW1MtMV07Zm9yKEE9SG8obyxHLGYsQSksRj1IbyhvLEQsZixGKSx4PUhvKG8seixmLHgpLE09SG8obyx6LGQsTSksbj9VPWxnKEEseCxNLEYsVSk6VT1wZyh6LEQsZCxvLFUpLHMucGFjayhVLE4sMCkscy5wYWNrKHgsUCwwKSxzLnBhY2soTSx2LDApLEkucHVzaCh6LmxhdGl0dWRlKSxJLnB1c2goei5sb25naXR1ZGUpLGRnKHosRCxmLGQsYSxyLG8sTixQLHYsSSksdT0xO3U8Uy0xOysrdSl7QT1zLmNsb25lKHgsQSkseD1zLmNsb25lKEYseCk7bGV0IFo9Q1t1XTtIbyhvLFosZCxNKSxIbyhvLENbdSsxXSxmLEYpLGxnKEEseCxNLEYsVSksYz1OLmxlbmd0aCxzLnBhY2soVSxOLGMpLHMucGFjayh4LFAsYykscy5wYWNrKE0sdixjKSxJLnB1c2goWi5sYXRpdHVkZSksSS5wdXNoKFoubG9uZ2l0dWRlKSxkZyhDW3VdLENbdSsxXSxmLGQsYSxyLG8sTixQLHYsSSl9bGV0IEg9Q1tTLTFdLE89Q1tTLTJdO2lmKHg9SG8obyxILGYseCksTT1IbyhvLEgsZCxNKSxuKXtsZXQgWj1DWzBdO0E9SG8obyxPLGYsQSksRj1IbyhvLFosZixGKSxVPWxnKEEseCxNLEYsVSl9ZWxzZSBVPXBnKE8sSCxkLG8sVSk7aWYoYz1OLmxlbmd0aCxzLnBhY2soVSxOLGMpLHMucGFjayh4LFAsYykscy5wYWNrKE0sdixjKSxJLnB1c2goSC5sYXRpdHVkZSksSS5wdXNoKEgubG9uZ2l0dWRlKSxuKXtmb3IoZGcoSCx6LGYsZCxhLHIsbyxOLFAsdixJKSxjPU4ubGVuZ3RoLHU9MDt1PDM7Kyt1KU5bYyt1XT1OW3VdLFBbYyt1XT1QW3VdLHZbYyt1XT12W3VdO0kucHVzaCh6LmxhdGl0dWRlKSxJLnB1c2goei5sb25naXR1ZGUpfXJldHVybiBwRihuLGksUCx2LE4sSSx0KX07Szk9bmV3IHMscTk9bmV3IEosVzk9bmV3IFFlO0Q4PW5ldyByZSxYOT1uZXcgcyxCOD1uZXcgcztZOT1uZXcgcyxVOD1uZXcgcztKOT1uZXcgcztROD1uZXcgcmUsJDg9bmV3IHJlLGo4PW5ldyBzLGhnPW5ldyBzLHo4PW5ldyBzLEc4PW5ldyBzLFE5PW5ldyBzLFY4PW5ldyBzLCQ5PVtROCwkOF0sZUY9bmV3IFNlLHRGPW5ldyBzLG5GPW5ldyBzLG9GPW5ldyBzLGFGPW5ldyBzLHJGPW5ldyBzLGlGPW5ldyBzLG1nPW5ldyBzLGJnPW5ldyBzLGNGPW5ldyBzLHNGPW5ldyBzLGZGPW5ldyBzLEg4PW5ldyBzLGRGPW5ldyBzLHVGPW5ldyBzLGxGPW5ldyBhYyxoRj1uZXcgYWMsSzg9bmV3IHMsbUY9bmV3IHMscTg9bmV3IHMsYkY9W25ldyBnZSxuZXcgZ2VdLGVSPVswLDIsMSwwLDMsMiwwLDcsMywwLDQsNywwLDUsNCwwLDEsNSw1LDcsNCw1LDYsNyw1LDIsNiw1LDEsMiwzLDYsMiwzLDcsNl0sVzg9ZVIubGVuZ3RoO0ZpLl9wcm9qZWN0Tm9ybWFsPXJkO19nPUZpfSk7dmFyIHlnPXt9O3J0KHlnLHtkZWZhdWx0OigpPT5fRn0pO2Z1bmN0aW9uIGdGKGUsdCl7cmV0dXJuIFBoLmluaXRpYWxpemUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGcodCkmJihlPV9nLnVucGFjayhlLHQpKSxfZy5jcmVhdGVHZW9tZXRyeShlKX0pfXZhciBfRixBZz1YKCgpPT57ZmcoKTtzZSgpO3RSKCk7X0Y9Z0Z9KTtmdW5jdGlvbiBNcyhlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVDt0aGlzLl92ZXJ0ZXhGb3JtYXQ9dCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQbGFuZUdlb21ldHJ5In12YXIgblIseUYsQmgsVWgsd2csb1I9WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTskdCgpO2VuKCk7dW4oKTtjbigpO2tvKCk7TXMucGFja2VkTGVuZ3RoPWhlLnBhY2tlZExlbmd0aDtNcy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksdH07blI9bmV3IGhlLHlGPXt2ZXJ0ZXhGb3JtYXQ6blJ9O01zLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPWhlLnVucGFjayhlLHQsblIpO3JldHVybiBnKG4pPyhuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUobyxuLl92ZXJ0ZXhGb3JtYXQpLG4pOm5ldyBNcyh5Ril9O0JoPW5ldyBzKC0uNSwtLjUsMCksVWg9bmV3IHMoLjUsLjUsMCk7TXMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fdmVydGV4Rm9ybWF0LG49bmV3IG50LG8sYTtpZih0LnBvc2l0aW9uKXtpZihhPW5ldyBGbG9hdDY0QXJyYXkoMTIpLGFbMF09QmgueCxhWzFdPUJoLnksYVsyXT0wLGFbM109VWgueCxhWzRdPUJoLnksYVs1XT0wLGFbNl09VWgueCxhWzddPVVoLnksYVs4XT0wLGFbOV09QmgueCxhWzEwXT1VaC55LGFbMTFdPTAsbi5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmF9KSx0Lm5vcm1hbCl7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSgxMik7clswXT0wLHJbMV09MCxyWzJdPTEsclszXT0wLHJbNF09MCxyWzVdPTEscls2XT0wLHJbN109MCxyWzhdPTEscls5XT0wLHJbMTBdPTAsclsxMV09MSxuLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cn0pfWlmKHQuc3Qpe2xldCByPW5ldyBGbG9hdDMyQXJyYXkoOCk7clswXT0wLHJbMV09MCxyWzJdPTEsclszXT0wLHJbNF09MSxyWzVdPTEscls2XT0wLHJbN109MSxuLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpyfSl9aWYodC50YW5nZW50KXtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KDEyKTtyWzBdPTEsclsxXT0wLHJbMl09MCxyWzNdPTEscls0XT0wLHJbNV09MCxyWzZdPTEscls3XT0wLHJbOF09MCxyWzldPTEsclsxMF09MCxyWzExXT0wLG4udGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cn0pfWlmKHQuYml0YW5nZW50KXtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KDEyKTtyWzBdPTAsclsxXT0xLHJbMl09MCxyWzNdPTAscls0XT0xLHJbNV09MCxyWzZdPTAscls3XT0xLHJbOF09MCxyWzldPTAsclsxMF09MSxyWzExXT0wLG4uYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpyfSl9bz1uZXcgVWludDE2QXJyYXkoNiksb1swXT0wLG9bMV09MSxvWzJdPTIsb1szXT0wLG9bNF09MixvWzVdPTN9cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczpuLGluZGljZXM6byxwcmltaXRpdmVUeXBlOlVlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpuZXcgZ2Uocy5aRVJPLE1hdGguc3FydCgyKSl9KX07d2c9TXN9KTt2YXIgRWc9e307cnQoRWcse2RlZmF1bHQ6KCk9PndGfSk7ZnVuY3Rpb24gQUYoZSx0KXtyZXR1cm4gZyh0KSYmKGU9d2cudW5wYWNrKGUsdCkpLHdnLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciB3RixUZz1YKCgpPT57c2UoKTtvUigpO3dGPUFGfSk7ZnVuY3Rpb24gTnMoKXt0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeSJ9dmFyIERpLExoLFJnLGFSPVgoKCk9PntNdCgpO0llKCk7dnQoKTtzZSgpOyR0KCk7ZW4oKTt1bigpO2NuKCk7TnMucGFja2VkTGVuZ3RoPTA7TnMucGFjaz1mdW5jdGlvbihlLHQpe3JldHVybiB0fTtOcy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKG4pP246bmV3IE5zfTtEaT1uZXcgcygtLjUsLS41LDApLExoPW5ldyBzKC41LC41LDApO05zLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKCl7bGV0IGU9bmV3IG50LHQ9bmV3IFVpbnQxNkFycmF5KDgpLG49bmV3IEZsb2F0NjRBcnJheSgxMik7cmV0dXJuIG5bMF09RGkueCxuWzFdPURpLnksblsyXT1EaS56LG5bM109TGgueCxuWzRdPURpLnksbls1XT1EaS56LG5bNl09TGgueCxuWzddPUxoLnksbls4XT1EaS56LG5bOV09RGkueCxuWzEwXT1MaC55LG5bMTFdPURpLnosZS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm59KSx0WzBdPTAsdFsxXT0xLHRbMl09MSx0WzNdPTIsdFs0XT0yLHRbNV09Myx0WzZdPTMsdFs3XT0wLG5ldyB2ZSh7YXR0cmlidXRlczplLGluZGljZXM6dCxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOm5ldyBnZShzLlpFUk8sTWF0aC5zcXJ0KDIpKX0pfTtSZz1Oc30pO3ZhciB4Zz17fTtydCh4Zyx7ZGVmYXVsdDooKT0+VEZ9KTtmdW5jdGlvbiBFRihlLHQpe3JldHVybiBnKHQpJiYoZT1SZy51bnBhY2soZSx0KSksUmcuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIFRGLE9nPVgoKCk9PntzZSgpO2FSKCk7VEY9RUZ9KTtmdW5jdGlvbiB6bihlLHQpe3RoaXMucG9zaXRpb249ZSxnKHRoaXMucG9zaXRpb24pfHwodGhpcy5wb3NpdGlvbj1uZXcgWSksdGhpcy50YW5nZW50UGxhbmU9dCxnKHRoaXMudGFuZ2VudFBsYW5lKXx8KHRoaXMudGFuZ2VudFBsYW5lPXpuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORSl9dmFyIElzLFJGLHhGLE9GLFNGLHVhLHJSPVgoKCk9PntqdCgpO0llKCk7RXQoKTtzZSgpO3FlKCk7cHMoKTtwaSgpO0dlKCk7TmYoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh6bi5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFuZ2VudFBsYW5lLmVsbGlwc29pZH19LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLnh9fSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi55fX0sY29uZm9ybWFsTGF0aXR1ZGU6e2dldDpmdW5jdGlvbigpe2xldCBlPVkubWFnbml0dWRlKHRoaXMucG9zaXRpb24pLHQ9Mip0aGlzLmVsbGlwc29pZC5tYXhpbXVtUmFkaXVzO3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5wbGFuZS5ub3JtYWwueiooay5QSV9PVkVSX1RXTy0yKk1hdGguYXRhbjIoZSx0KSl9fSxsb25naXR1ZGU6e2dldDpmdW5jdGlvbigpe2xldCBlPWsuUElfT1ZFUl9UV08rTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gZT5NYXRoLlBJJiYoZS09ay5UV09fUEkpLGV9fX0pO0lzPW5ldyByZSxSRj1uZXcgczt6bi5wcm90b3R5cGUuZ2V0TGF0aXR1ZGU9ZnVuY3Rpb24oZSl7ZyhlKXx8KGU9cS5kZWZhdWx0KSxJcy5sYXRpdHVkZT10aGlzLmNvbmZvcm1hbExhdGl0dWRlLElzLmxvbmdpdHVkZT10aGlzLmxvbmdpdHVkZSxJcy5oZWlnaHQ9MDtsZXQgdD10aGlzLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihJcyxSRik7cmV0dXJuIGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxJcyksSXMubGF0aXR1ZGV9O3hGPW5ldyBkcixPRj1uZXcgcyxTRj1uZXcgczt6bi5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKGUsdCl7bGV0IG49ay5zaWduTm90WmVybyhlLnopLG89em4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FLGE9em4uU09VVEhfUE9MRTtuPDAmJihvPXpuLlNPVVRIX1BPTEVfVEFOR0VOVF9QTEFORSxhPXpuLk5PUlRIX1BPTEUpO2xldCByPXhGO3Iub3JpZ2luPW8uZWxsaXBzb2lkLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZShlLHIub3JpZ2luKSxyLmRpcmVjdGlvbj1zLnN1YnRyYWN0KHIub3JpZ2luLGEsT0YpLHMubm9ybWFsaXplKHIuZGlyZWN0aW9uLHIuZGlyZWN0aW9uKTtsZXQgaT1uby5yYXlQbGFuZShyLG8ucGxhbmUsU0YpLGY9cy5zdWJ0cmFjdChpLGEsaSksZD1zLmRvdChvLnhBeGlzLGYpLGM9bipzLmRvdChvLnlBeGlzLGYpO3JldHVybiBnKHQpPyh0LnBvc2l0aW9uPW5ldyBZKGQsYyksdC50YW5nZW50UGxhbmU9byx0KTpuZXcgem4obmV3IFkoZCxjKSxvKX07em4uZnJvbUNhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5sZW5ndGg7Zyh0KT90Lmxlbmd0aD1uOnQ9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjtvKyspdFtvXT16bi5mcm9tQ2FydGVzaWFuKGVbb10sdFtvXSk7cmV0dXJuIHR9O3puLmNsb25lPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC5wb3NpdGlvbj1lLnBvc2l0aW9uLHQudGFuZ2VudFBsYW5lPWUudGFuZ2VudFBsYW5lLHQpOm5ldyB6bihlLnBvc2l0aW9uLGUudGFuZ2VudFBsYW5lKX07em4uSEFMRl9VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyBxKC41LC41LC41KSk7em4uTk9SVEhfUE9MRT1PYmplY3QuZnJlZXplKG5ldyBzKDAsMCwuNSkpO3puLlNPVVRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgcygwLDAsLS41KSk7em4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IHhvKHpuLk5PUlRIX1BPTEUsem4uSEFMRl9VTklUX1NQSEVSRSkpO3puLlNPVVRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB4byh6bi5TT1VUSF9QT0xFLHpuLkhBTEZfVU5JVF9TUEhFUkUpKTt1YT16bn0pO2Z1bmN0aW9uIE1GKGUsdCxuLG8pe2xldCByPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxDRikuaGVpZ2h0LGk9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LGlSKTtpLmhlaWdodD1yLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oaSx0KTtsZXQgZj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4saVIpO2YuaGVpZ2h0PXItMTAwLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZixuKX1mdW5jdGlvbiBTZyhlKXtsZXQgdD1lLnZlcnRleEZvcm1hdCxuPWUuZ2VvbWV0cnksbz1lLnNoYWRvd1ZvbHVtZSxhPW4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj1nKG4uYXR0cmlidXRlcy5zdCk/bi5hdHRyaWJ1dGVzLnN0LnZhbHVlczp2b2lkIDAsaT1hLmxlbmd0aCxmPWUud2FsbCxkPWUudG9wfHxmLGM9ZS5ib3R0b218fGY7aWYodC5zdHx8dC5ub3JtYWx8fHQudGFuZ2VudHx8dC5iaXRhbmdlbnR8fG8pe2xldCB1PWUuYm91bmRpbmdSZWN0YW5nbGUsbD1lLnJvdGF0aW9uQXhpcyxoPWUucHJvamVjdFRvMmQsbT1lLmVsbGlwc29pZCxiPWUuc3RSb3RhdGlvbixwPWUucGVyUG9zaXRpb25IZWlnaHQseT1ERjt5Lng9dS54LHkueT11Lnk7bGV0IEU9dC5zdD9uZXcgRmxvYXQzMkFycmF5KDIqKGkvMykpOnZvaWQgMCxfO3Qubm9ybWFsJiYocCYmZCYmIWY/Xz1uLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlczpfPW5ldyBGbG9hdDMyQXJyYXkoaSkpO2xldCBUPXQudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGkpOnZvaWQgMCx3PXQuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoaSk6dm9pZCAwLFI9bz9uZXcgRmxvYXQzMkFycmF5KGkpOnZvaWQgMCxTPTAsQz0wLEk9SUYsTj1QRixQPWtGLHY9ITAsQT1MRix4PWpGO2lmKGIhPT0wKXtsZXQgVT1RZS5mcm9tQXhpc0FuZ2xlKGwsYixzUik7QT1KLmZyb21RdWF0ZXJuaW9uKFUsQSksVT1RZS5mcm9tQXhpc0FuZ2xlKGwsLWIsc1IpLHg9Si5mcm9tUXVhdGVybmlvbihVLHgpfWVsc2UgQT1KLmNsb25lKEouSURFTlRJVFksQSkseD1KLmNsb25lKEouSURFTlRJVFkseCk7bGV0IE09MCxGPTA7ZCYmYyYmKE09aS8yLEY9aS8zLGkvPTIpO2ZvcihsZXQgVT0wO1U8aTtVKz0zKXtsZXQgej1zLmZyb21BcnJheShhLFUsVUYpO2lmKHQuc3QmJiFnKHIpKXtsZXQgRD1KLm11bHRpcGx5QnlWZWN0b3IoQSx6LE5GKTtEPW0uc2NhbGVUb0dlb2RldGljU3VyZmFjZShELEQpO2xldCBHPWgoW0RdLEJGKVswXTtZLnN1YnRyYWN0KEcseSxHKTtsZXQgSD1rLmNsYW1wKEcueC91LndpZHRoLDAsMSksTz1rLmNsYW1wKEcueS91LmhlaWdodCwwLDEpO2MmJihFW1MrRl09SCxFW1MrMStGXT1PKSxkJiYoRVtTXT1ILEVbUysxXT1PKSxTKz0yfWlmKHQubm9ybWFsfHx0LnRhbmdlbnR8fHQuYml0YW5nZW50fHxvKXtsZXQgRD1DKzEsRz1DKzI7aWYoZil7aWYoVSszPGkpe2xldCBIPXMuZnJvbUFycmF5KGEsVSszLHZGKTtpZih2KXtsZXQgTz1zLmZyb21BcnJheShhLFUraSxGRik7cCYmTUYoeixILE8sbSkscy5zdWJ0cmFjdChILHosSCkscy5zdWJ0cmFjdChPLHosTyksST1zLm5vcm1hbGl6ZShzLmNyb3NzKE8sSCxJKSxJKSx2PSExfXMuZXF1YWxzRXBzaWxvbihILHosay5FUFNJTE9OMTApJiYodj0hMCl9KHQudGFuZ2VudHx8dC5iaXRhbmdlbnQpJiYoUD1tLmdlb2RldGljU3VyZmFjZU5vcm1hbCh6LFApLHQudGFuZ2VudCYmKE49cy5ub3JtYWxpemUocy5jcm9zcyhQLEksTiksTikpKX1lbHNlIEk9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoeixJKSwodC50YW5nZW50fHx0LmJpdGFuZ2VudCkmJihwJiYoamg9cy5mcm9tQXJyYXkoXyxDLGpoKSx5cj1zLmNyb3NzKHMuVU5JVF9aLGpoLHlyKSx5cj1zLm5vcm1hbGl6ZShKLm11bHRpcGx5QnlWZWN0b3IoeCx5cix5cikseXIpLHQuYml0YW5nZW50JiYoUHM9cy5ub3JtYWxpemUocy5jcm9zcyhqaCx5cixQcyksUHMpKSksTj1zLmNyb3NzKHMuVU5JVF9aLEksTiksTj1zLm5vcm1hbGl6ZShKLm11bHRpcGx5QnlWZWN0b3IoeCxOLE4pLE4pLHQuYml0YW5nZW50JiYoUD1zLm5vcm1hbGl6ZShzLmNyb3NzKEksTixQKSxQKSkpO3Qubm9ybWFsJiYoZS53YWxsPyhfW0MrTV09SS54LF9bRCtNXT1JLnksX1tHK01dPUkueik6YyYmKF9bQytNXT0tSS54LF9bRCtNXT0tSS55LF9bRytNXT0tSS56KSwoZCYmIXB8fGYpJiYoX1tDXT1JLngsX1tEXT1JLnksX1tHXT1JLnopKSxvJiYoZiYmKEk9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoeixJKSksUltDK01dPS1JLngsUltEK01dPS1JLnksUltHK01dPS1JLnopLHQudGFuZ2VudCYmKGUud2FsbD8oVFtDK01dPU4ueCxUW0QrTV09Ti55LFRbRytNXT1OLnopOmMmJihUW0MrTV09LU4ueCxUW0QrTV09LU4ueSxUW0crTV09LU4ueiksZCYmKHA/KFRbQ109eXIueCxUW0RdPXlyLnksVFtHXT15ci56KTooVFtDXT1OLngsVFtEXT1OLnksVFtHXT1OLnopKSksdC5iaXRhbmdlbnQmJihjJiYod1tDK01dPVAueCx3W0QrTV09UC55LHdbRytNXT1QLnopLGQmJihwPyh3W0NdPVBzLngsd1tEXT1Qcy55LHdbR109UHMueik6KHdbQ109UC54LHdbRF09UC55LHdbR109UC56KSkpLEMrPTN9fXQuc3QmJiFnKHIpJiYobi5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpLHQubm9ybWFsJiYobi5hdHRyaWJ1dGVzLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSx0LnRhbmdlbnQmJihuLmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pKSx0LmJpdGFuZ2VudCYmKG4uYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnd9KSksbyYmKG4uYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpSfSkpfWlmKGUuZXh0cnVkZSYmZyhlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCB1PWEubGVuZ3RoLzMsbD1uZXcgVWludDhBcnJheSh1KTtpZihlLm9mZnNldEF0dHJpYnV0ZT09PXN0LlRPUClkJiZjfHxmP2w9bC5maWxsKDEsMCx1LzIpOmQmJihsPWwuZmlsbCgxKSk7ZWxzZXtsZXQgaD1lLm9mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO2w9bC5maWxsKGgpfW4uYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpsfSl9cmV0dXJuIG59ZnVuY3Rpb24gekYoZSx0LG4sbyxhLHIsaSxmLGQsYyl7bGV0IHU9e3dhbGxzOltdfSxsO2lmKGl8fGYpe2xldCBfPWx0LmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyhlLHQsbixvLHIsZCxjKSxUPV8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdz1fLmluZGljZXMsUixTO2lmKGkmJmYpe2xldCBDPVQuY29uY2F0KFQpO1I9Qy5sZW5ndGgvMyxTPWtlLmNyZWF0ZVR5cGVkQXJyYXkoUix3Lmxlbmd0aCoyKSxTLnNldCh3KTtsZXQgST13Lmxlbmd0aCxOPVIvMjtmb3IobD0wO2w8STtsKz0zKXtsZXQgUD1TW2xdK04sdj1TW2wrMV0rTixBPVNbbCsyXStOO1NbbCtJXT1BLFNbbCsxK0ldPXYsU1tsKzIrSV09UH1pZihfLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPUMsciYmZC5ub3JtYWwpe2xldCBQPV8uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzO18uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoQy5sZW5ndGgpLF8uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLnNldChQKX1pZihkLnN0JiZnKG4pKXtsZXQgUD1fLmF0dHJpYnV0ZXMuc3QudmFsdWVzO18uYXR0cmlidXRlcy5zdC52YWx1ZXM9bmV3IEZsb2F0MzJBcnJheShSKjIpLF8uYXR0cmlidXRlcy5zdC52YWx1ZXM9UC5jb25jYXQoUCl9Xy5pbmRpY2VzPVN9ZWxzZSBpZihmKXtmb3IoUj1ULmxlbmd0aC8zLFM9a2UuY3JlYXRlVHlwZWRBcnJheShSLHcubGVuZ3RoKSxsPTA7bDx3Lmxlbmd0aDtsKz0zKVNbbF09d1tsKzJdLFNbbCsxXT13W2wrMV0sU1tsKzJdPXdbbF07Xy5pbmRpY2VzPVN9dS50b3BBbmRCb3R0b209bmV3IHBvKHtnZW9tZXRyeTpffSl9bGV0IGg9YS5vdXRlclJpbmcsbT14by5mcm9tUG9pbnRzKGgsZSksYj1tLnByb2plY3RQb2ludHNPbnRvUGxhbmUoaCxmUikscD1TdC5jb21wdXRlV2luZGluZ09yZGVyMkQoYik7cD09PXZvLkNMT0NLV0lTRSYmKGg9aC5zbGljZSgpLnJldmVyc2UoKSk7bGV0IHk9bHQuY29tcHV0ZVdhbGxHZW9tZXRyeShoLG4sZSxvLHIsYyk7dS53YWxscy5wdXNoKG5ldyBwbyh7Z2VvbWV0cnk6eX0pKTtsZXQgRT1hLmhvbGVzO2ZvcihsPTA7bDxFLmxlbmd0aDtsKyspe2xldCBfPUVbbF07Yj1tLnByb2plY3RQb2ludHNPbnRvUGxhbmUoXyxmUikscD1TdC5jb21wdXRlV2luZGluZ09yZGVyMkQoYikscD09PXZvLkNPVU5URVJfQ0xPQ0tXSVNFJiYoXz1fLnNsaWNlKCkucmV2ZXJzZSgpKSx5PWx0LmNvbXB1dGVXYWxsR2VvbWV0cnkoXyxuLGUsbyxyLGMpLHUud2FsbHMucHVzaChuZXcgcG8oe2dlb21ldHJ5Onl9KSl9cmV0dXJuIHV9ZnVuY3Rpb24gTmEoZSl7bGV0IHQ9ZS5wb2x5Z29uSGllcmFyY2h5LG49ZS52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQsbz1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LGE9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUscj1lLnN0Um90YXRpb24/PzAsaT1lLnRleHR1cmVDb29yZGluYXRlcyxmPWUucGVyUG9zaXRpb25IZWlnaHQ/PyExLGQ9ZiYmZyhlLmV4dHJ1ZGVkSGVpZ2h0KSxjPWUuaGVpZ2h0Pz8wLHU9ZS5leHRydWRlZEhlaWdodD8/YztpZighZCl7bGV0IGw9TWF0aC5tYXgoYyx1KTt1PU1hdGgubWluKGMsdSksYz1sfXRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShuKSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShvKSx0aGlzLl9ncmFudWxhcml0eT1hLHRoaXMuX3N0Um90YXRpb249cix0aGlzLl9oZWlnaHQ9Yyx0aGlzLl9leHRydWRlZEhlaWdodD11LHRoaXMuX2Nsb3NlVG9wPWUuY2xvc2VUb3A/PyEwLHRoaXMuX2Nsb3NlQm90dG9tPWUuY2xvc2VCb3R0b20/PyEwLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9dCx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1mLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1kLHRoaXMuX3NoYWRvd1ZvbHVtZT1lLnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWdvbkdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fYXJjVHlwZT1lLmFyY1R5cGU/P3d0LkdFT0RFU0lDLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPWksdGhpcy5wYWNrZWRMZW5ndGg9bHQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aCh0LHMpK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCsoaT9sdC5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGksWSk6MSkrMTJ9ZnVuY3Rpb24gZFIoZSx0LG4sbyxhLHIpe2xldCBpPWUubG9uZ2l0dWRlLGY9aT49MD9pOmkray5UV09fUEk7YS53ZXN0T3ZlcklkbD1NYXRoLm1pbihhLndlc3RPdmVySWRsLGYpLGEuZWFzdE92ZXJJZGw9TWF0aC5tYXgoYS5lYXN0T3ZlcklkbCxmKSxyLndlc3Q9TWF0aC5taW4oci53ZXN0LGkpLHIuZWFzdD1NYXRoLm1heChyLmVhc3QsaSk7bGV0IGQ9ZS5nZXRMYXRpdHVkZShuKSxjPWQ7aWYoci5zb3V0aD1NYXRoLm1pbihyLnNvdXRoLGQpLHIubm9ydGg9TWF0aC5tYXgoci5ub3J0aCxkKSxvIT09d3QuUkhVTUIpe2xldCBoPVkuc3VidHJhY3QodC5wb3NpdGlvbixlLnBvc2l0aW9uLEtGKSxtPVkuZG90KHQucG9zaXRpb24saCkvWS5kb3QoaCxoKTtpZihtPjAmJm08MSl7bGV0IGI9WS5hZGQodC5wb3NpdGlvbixZLm11bHRpcGx5QnlTY2FsYXIoaCwtbSxoKSxxRikscD11YS5jbG9uZSh0LFdGKTtwLnBvc2l0aW9uPWI7bGV0IHk9cC5nZXRMYXRpdHVkZShuKTtyLnNvdXRoPU1hdGgubWluKHIuc291dGgseSksci5ub3J0aD1NYXRoLm1heChyLm5vcnRoLHkpLE1hdGguYWJzKGQpPk1hdGguYWJzKHkpJiYoYz15KX19bGV0IHU9dC54KmUueS1lLngqdC55LGw9TWF0aC5zaWduKHUpO2whPT0wJiYobCo9WS5hbmdsZUJldHdlZW4odC5wb3NpdGlvbixlLnBvc2l0aW9uKSksYz49MCYmKGEubm9ydGhBbmdsZSs9bCksYzw9MCYmKGEuc291dGhBbmdsZSs9bCl9ZnVuY3Rpb24gSkYoZSx0LG4pe3JldHVybiBlLmhlaWdodD49ay5QSXx8ZS53aWR0aD49ay5QST91YS5mcm9tQ2FydGVzaWFuKHRbMF0sWUYpLnRhbmdlbnRQbGFuZTp4by5mcm9tUG9pbnRzKHQsbil9ZnVuY3Rpb24gWkYoZSx0LG4pe3JldHVybihvLGEpPT57aWYoZS5oZWlnaHQ+PWsuUEl8fGUud2lkdGg+PWsuUEkpe2lmKGUuc291dGg8MCYmZS5ub3J0aD4wKXtnKGEpfHwoYT1bXSk7Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDsrK2kpe2xldCBmPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMob1tpXSxsUik7YVtpXT1uZXcgWShmLmxvbmdpdHVkZS9rLlBJLGYubGF0aXR1ZGUvay5QSV9PVkVSX1RXTyl9cmV0dXJuIGEubGVuZ3RoPW8ubGVuZ3RoLGF9cmV0dXJuIHVhLmZyb21DYXJ0ZXNpYW5BcnJheShvLGEpfXJldHVybiB4by5mcm9tUG9pbnRzKHQsbikucHJvamVjdFBvaW50c09udG9QbGFuZShvLGEpfX1mdW5jdGlvbiBRRihlLHQsbil7aWYoZS5oZWlnaHQ+PWsuUEl8fGUud2lkdGg+PWsuUEkpcmV0dXJuKGEscik9PntpZihlLnNvdXRoPDAmJmUubm9ydGg+MCl7bGV0IGk9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhhLGxSKTtyZXR1cm4gZyhyKXx8KHI9bmV3IFkpLHIueD1pLmxvbmdpdHVkZS9rLlBJLHIueT1pLmxhdGl0dWRlL2suUElfT1ZFUl9UV08scn1yZXR1cm4gdWEuZnJvbUNhcnRlc2lhbihhLHIpfTtsZXQgbz14by5mcm9tUG9pbnRzKHQsbik7cmV0dXJuKGEscik9Pm8ucHJvamVjdFBvaW50c09udG9QbGFuZShhLHIpfWZ1bmN0aW9uICRGKGUsdCxuLG8pe3JldHVybihhLHIpPT4hbyYmKGUuaGVpZ2h0Pj1rLlBJX09WRVJfVFdPfHxlLndpZHRoPj0yKmsuUElfT1ZFUl9USFJFRSk/bHQuc3BsaXRQb2x5Z29uc09uRXF1YXRvcihhLHQsbixyKTphfWZ1bmN0aW9uIGVEKGUsdCxuLG8pe2lmKHQuaGVpZ2h0Pj1rLlBJfHx0LndpZHRoPj1rLlBJKXJldHVybiBZYS5mcm9tUmVjdGFuZ2xlKHQsdm9pZCAwLGNSKTtsZXQgYT1lLHI9eG8uZnJvbVBvaW50cyhhLG4pO3JldHVybiBsdC5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoci5wbGFuZS5ub3JtYWwsci5wcm9qZWN0UG9pbnRPbnRvUGxhbmUuYmluZChyKSxhLG8sY1IpfWZ1bmN0aW9uIHREKGUpe2xldCB0PS1lLl9zdFJvdGF0aW9uO2lmKHQ9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG49ZS5fZWxsaXBzb2lkLG89ZS5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnMsYT1lLnJlY3RhbmdsZTtyZXR1cm4gdmUuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMobyx0LG4sYSl9dmFyIENGLGlSLGNSLE5GLElGLFBGLGtGLHZGLEZGLGpoLHlyLFBzLERGLEJGLFVGLHNSLExGLGpGLGZSLEdGLFZGLEhGLEtGLHFGLFdGLHVSLFhGLE1hLFlGLGxSLENnLGhSPVgoKCk9PntoYygpO0RmKCk7TXQoKTtqdCgpO0llKCk7RXQoKTt2dCgpO210KCk7c2UoKTtxZSgpO3BzKCk7JHQoKTtlbigpO2RjKCk7em8oKTtscigpO25uKCk7R2UoKTtEbigpO1ZmKCk7SmEoKTtKbygpO19uKCk7clIoKTtrbygpO2JjKCk7Q0Y9bmV3IHJlLGlSPW5ldyByZTtjUj1uZXcgWWEsTkY9bmV3IHMsSUY9bmV3IHMsUEY9bmV3IHMsa0Y9bmV3IHMsdkY9bmV3IHMsRkY9bmV3IHMsamg9bmV3IHMseXI9bmV3IHMsUHM9bmV3IHMsREY9bmV3IFksQkY9bmV3IFksVUY9bmV3IHMsc1I9bmV3IFFlLExGPW5ldyBKLGpGPW5ldyBKO2ZSPVtdO05hLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczplLnBvc2l0aW9uc30saGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsdmVydGV4Rm9ybWF0OmUudmVydGV4Rm9ybWF0LHN0Um90YXRpb246ZS5zdFJvdGF0aW9uLGVsbGlwc29pZDplLmVsbGlwc29pZCxncmFudWxhcml0eTplLmdyYW51bGFyaXR5LHBlclBvc2l0aW9uSGVpZ2h0OmUucGVyUG9zaXRpb25IZWlnaHQsY2xvc2VUb3A6ZS5jbG9zZVRvcCxjbG9zZUJvdHRvbTplLmNsb3NlQm90dG9tLG9mZnNldEF0dHJpYnV0ZTplLm9mZnNldEF0dHJpYnV0ZSxhcmNUeXBlOmUuYXJjVHlwZSx0ZXh0dXJlQ29vcmRpbmF0ZXM6ZS50ZXh0dXJlQ29vcmRpbmF0ZXN9O3JldHVybiBuZXcgTmEodCl9O05hLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsbj1sdC5wYWNrUG9seWdvbkhpZXJhcmNoeShlLl9wb2x5Z29uSGllcmFyY2h5LHQsbixzKSxxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsaGUucGFjayhlLl92ZXJ0ZXhGb3JtYXQsdCxuKSxuKz1oZS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX2hlaWdodCx0W24rK109ZS5fZXh0cnVkZWRIZWlnaHQsdFtuKytdPWUuX2dyYW51bGFyaXR5LHRbbisrXT1lLl9zdFJvdGF0aW9uLHRbbisrXT1lLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU/MTowLHRbbisrXT1lLl9wZXJQb3NpdGlvbkhlaWdodD8xOjAsdFtuKytdPWUuX2Nsb3NlVG9wPzE6MCx0W24rK109ZS5fY2xvc2VCb3R0b20/MTowLHRbbisrXT1lLl9zaGFkb3dWb2x1bWU/MTowLHRbbisrXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHRbbisrXT1lLl9hcmNUeXBlLGcoZS5fdGV4dHVyZUNvb3JkaW5hdGVzKT9uPWx0LnBhY2tQb2x5Z29uSGllcmFyY2h5KGUuX3RleHR1cmVDb29yZGluYXRlcyx0LG4sWSk6dFtuKytdPS0xLHRbbisrXT1lLnBhY2tlZExlbmd0aCx0fTtHRj1xLmNsb25lKHEuVU5JVF9TUEhFUkUpLFZGPW5ldyBoZSxIRj17cG9seWdvbkhpZXJhcmNoeTp7fX07TmEudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89bHQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQscyk7dD1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1xLnVucGFjayhlLHQsR0YpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhlLHQsVkYpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3QrK10sdT1lW3QrK109PT0xLGw9ZVt0KytdPT09MSxoPWVbdCsrXT09PTEsbT1lW3QrK109PT0xLGI9ZVt0KytdPT09MSxwPWVbdCsrXSx5PWVbdCsrXSxFPWVbdF09PT0tMT92b2lkIDA6bHQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQsWSk7ZyhFKT8odD1FLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIEUuc3RhcnRpbmdJbmRleCk6dCsrO2xldCBfPWVbdCsrXTtyZXR1cm4gZyhuKXx8KG49bmV3IE5hKEhGKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocixuLl92ZXJ0ZXhGb3JtYXQpLG4uX2hlaWdodD1pLG4uX2V4dHJ1ZGVkSGVpZ2h0PWYsbi5fZ3JhbnVsYXJpdHk9ZCxuLl9zdFJvdGF0aW9uPWMsbi5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPXUsbi5fcGVyUG9zaXRpb25IZWlnaHQ9bCxuLl9jbG9zZVRvcD1oLG4uX2Nsb3NlQm90dG9tPW0sbi5fc2hhZG93Vm9sdW1lPWIsbi5fb2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuLl9hcmNUeXBlPXksbi5fdGV4dHVyZUNvb3JkaW5hdGVzPUUsbi5wYWNrZWRMZW5ndGg9XyxufTtLRj1uZXcgWSxxRj1uZXcgWSxXRj1uZXcgdWE7dVI9bmV3IHVhLFhGPW5ldyB1YSxNYT17bm9ydGhBbmdsZTowLHNvdXRoQW5nbGU6MCx3ZXN0T3ZlcklkbDowLGVhc3RPdmVySWRsOjB9O05hLmNvbXB1dGVSZWN0YW5nbGVGcm9tUG9zaXRpb25zPWZ1bmN0aW9uKGUsdCxuLG8pe2lmKGcobyl8fChvPW5ldyBTZSksZS5sZW5ndGg8MylyZXR1cm4gbztvLndlc3Q9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8uZWFzdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksby5zb3V0aD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksby5ub3J0aD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTWEubm9ydGhBbmdsZT0wLE1hLnNvdXRoQW5nbGU9MCxNYS53ZXN0T3ZlcklkbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTWEuZWFzdE92ZXJJZGw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCBhPWUubGVuZ3RoLHI9dWEuZnJvbUNhcnRlc2lhbihlWzBdLFhGKTtmb3IobGV0IGk9MTtpPGE7aSsrKXtsZXQgZj11YS5mcm9tQ2FydGVzaWFuKGVbaV0sdVIpO2RSKGYscix0LG4sTWEsbykscj11YS5jbG9uZShmLHIpfXJldHVybiBkUih1YS5mcm9tQ2FydGVzaWFuKGVbMF0sdVIpLHIsdCxuLE1hLG8pLG8uZWFzdC1vLndlc3Q+TWEuZWFzdE92ZXJJZGwtTWEud2VzdE92ZXJJZGwmJihvLndlc3Q9TWEud2VzdE92ZXJJZGwsby5lYXN0PU1hLmVhc3RPdmVySWRsLG8uZWFzdD5rLlBJJiYoby5lYXN0PW8uZWFzdC1rLlRXT19QSSksby53ZXN0PmsuUEkmJihvLndlc3Q9by53ZXN0LWsuVFdPX1BJKSksay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKE1hLm5vcnRoQW5nbGUpLGsuVFdPX1BJLGsuRVBTSUxPTjEwKSYmKG8ubm9ydGg9ay5QSV9PVkVSX1RXTyxvLmVhc3Q9ay5QSSxvLndlc3Q9LWsuUEkpLGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhNYS5zb3V0aEFuZ2xlKSxrLlRXT19QSSxrLkVQU0lMT04xMCkmJihvLnNvdXRoPS1rLlBJX09WRVJfVFdPLG8uZWFzdD1rLlBJLG8ud2VzdD0tay5QSSksb307WUY9bmV3IHVhO2xSPW5ldyByZTtOYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl92ZXJ0ZXhGb3JtYXQsbj1lLl9lbGxpcHNvaWQsbz1lLl9ncmFudWxhcml0eSxhPWUuX3N0Um90YXRpb24scj1lLl9wb2x5Z29uSGllcmFyY2h5LGk9ZS5fcGVyUG9zaXRpb25IZWlnaHQsZj1lLl9jbG9zZVRvcCxkPWUuX2Nsb3NlQm90dG9tLGM9ZS5fYXJjVHlwZSx1PWUuX3RleHR1cmVDb29yZGluYXRlcyxsPWcodSksaD1yLnBvc2l0aW9ucztpZihoLmxlbmd0aDwzKXJldHVybjtsZXQgbT1lLnJlY3RhbmdsZSxiPWx0LnBvbHlnb25zRnJvbUhpZXJhcmNoeShyLGwsWkYobSxoLG4pLCFpLG4sJEYobSxuLGMsaSkpLHA9Yi5oaWVyYXJjaHkseT1iLnBvbHlnb25zLEU9ZnVuY3Rpb24oTSl7cmV0dXJuIE19LF89bD9sdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkodSwhMCxFLCExLG4pLnBvbHlnb25zOnZvaWQgMDtpZihwLmxlbmd0aD09PTApcmV0dXJuO2xldCBUPXBbMF0ub3V0ZXJSaW5nLHc9ZUQoVCxtLG4sYSksUj1bXSxTPWUuX2hlaWdodCxDPWUuX2V4dHJ1ZGVkSGVpZ2h0LEk9ZS5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlfHwhay5lcXVhbHNFcHNpbG9uKFMsQywwLGsuRVBTSUxPTjIpLE49e3BlclBvc2l0aW9uSGVpZ2h0OmksdmVydGV4Rm9ybWF0OnQsZ2VvbWV0cnk6dm9pZCAwLHJvdGF0aW9uQXhpczpKRihtLFQsbikucGxhbmUubm9ybWFsLHByb2plY3RUbzJkOlFGKG0sVCxuKSxib3VuZGluZ1JlY3RhbmdsZTp3LGVsbGlwc29pZDpuLHN0Um90YXRpb246YSx0ZXh0dXJlQ29vcmRpbmF0ZXM6dm9pZCAwLGJvdHRvbTohMSx0b3A6ITAsd2FsbDohMSxleHRydWRlOiExLGFyY1R5cGU6Y30sUDtpZihJKWZvcihOLmV4dHJ1ZGU9ITAsTi50b3A9ZixOLmJvdHRvbT1kLE4uc2hhZG93Vm9sdW1lPWUuX3NoYWRvd1ZvbHVtZSxOLm9mZnNldEF0dHJpYnV0ZT1lLl9vZmZzZXRBdHRyaWJ1dGUsUD0wO1A8eS5sZW5ndGg7UCsrKXtsZXQgTT16RihuLHlbUF0sbD9fW1BdOnZvaWQgMCxvLHBbUF0saSxmLGQsdCxjKSxGO2YmJmQ/KEY9TS50b3BBbmRCb3R0b20sTi5nZW9tZXRyeT1sdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChGLmdlb21ldHJ5LFMsQyxuLGkpKTpmPyhGPU0udG9wQW5kQm90dG9tLEYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KEYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsUyxuLCFpKSxOLmdlb21ldHJ5PUYuZ2VvbWV0cnkpOmQmJihGPU0udG9wQW5kQm90dG9tLEYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KEYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsQyxuLCEwKSxOLmdlb21ldHJ5PUYuZ2VvbWV0cnkpLChmfHxkKSYmKE4ud2FsbD0hMSxGLmdlb21ldHJ5PVNnKE4pLFIucHVzaChGKSk7bGV0IFU9TS53YWxscztOLndhbGw9ITA7Zm9yKGxldCB6PTA7ejxVLmxlbmd0aDt6Kyspe2xldCBEPVVbel07Ti5nZW9tZXRyeT1sdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChELmdlb21ldHJ5LFMsQyxuLGkpLEQuZ2VvbWV0cnk9U2coTiksUi5wdXNoKEQpfX1lbHNlIGZvcihQPTA7UDx5Lmxlbmd0aDtQKyspe2xldCBNPW5ldyBwbyh7Z2VvbWV0cnk6bHQuY3JlYXRlR2VvbWV0cnlGcm9tUG9zaXRpb25zKG4seVtQXSxsP19bUF06dm9pZCAwLG8saSx0LGMpfSk7aWYoTS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoTS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxTLG4sIWkpLE4uZ2VvbWV0cnk9TS5nZW9tZXRyeSxNLmdlb21ldHJ5PVNnKE4pLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IEY9TS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsVT1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSx6PW5ldyBVaW50OEFycmF5KEYvMykuZmlsbChVKTtNLmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6en0pfVIucHVzaChNKX1sZXQgdj1IdC5jb21iaW5lSW5zdGFuY2VzKFIpWzBdO3YuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9bmV3IEZsb2F0NjRBcnJheSh2LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzKSx2LmluZGljZXM9a2UuY3JlYXRlVHlwZWRBcnJheSh2LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLHYuaW5kaWNlcyk7bGV0IEE9di5hdHRyaWJ1dGVzLHg9Z2UuZnJvbVZlcnRpY2VzKEEucG9zaXRpb24udmFsdWVzKTtyZXR1cm4gdC5wb3NpdGlvbnx8ZGVsZXRlIEEucG9zaXRpb24sbmV3IHZlKHthdHRyaWJ1dGVzOkEsaW5kaWNlczp2LmluZGljZXMscHJpbWl0aXZlVHlwZTp2LnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6eCxvZmZzZXRBdHRyaWJ1dGU6ZS5fb2Zmc2V0QXR0cmlidXRlfSl9O05hLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbihlLHQsbil7bGV0IG89ZS5fZ3JhbnVsYXJpdHksYT1lLl9lbGxpcHNvaWQscj10KG8sYSksaT1uKG8sYSk7cmV0dXJuIG5ldyBOYSh7cG9seWdvbkhpZXJhcmNoeTplLl9wb2x5Z29uSGllcmFyY2h5LGVsbGlwc29pZDphLHN0Um90YXRpb246ZS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLHBlclBvc2l0aW9uSGVpZ2h0OiExLGV4dHJ1ZGVkSGVpZ2h0OnIsaGVpZ2h0OmksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwLGFyY1R5cGU6ZS5fYXJjVHlwZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOYS5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7aWYoIWcodGhpcy5fcmVjdGFuZ2xlKSl7bGV0IGU9dGhpcy5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnM7dGhpcy5fcmVjdGFuZ2xlPU5hLmNvbXB1dGVSZWN0YW5nbGVGcm9tUG9zaXRpb25zKGUsdGhpcy5fZWxsaXBzb2lkLHRoaXMuX2FyY1R5cGUpfXJldHVybiB0aGlzLl9yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dEQodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO0NnPU5hfSk7dmFyIE1nPXt9O3J0KE1nLHtkZWZhdWx0OigpPT5vRH0pO2Z1bmN0aW9uIG5EKGUsdCl7cmV0dXJuIGcodCkmJihlPUNnLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLENnLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBvRCxOZz1YKCgpPT57c2UoKTtxZSgpO2hSKCk7b0Q9bkR9KTtmdW5jdGlvbiBhRChlLHQsbixvLGEpe2xldCBpPXhvLmZyb21Qb2ludHModCxlKS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKHQsbVIpO1N0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChpKT09PXZvLkNMT0NLV0lTRSYmKGkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7bGV0IGQsYyx1PXQubGVuZ3RoLGw9MDtpZihvKWZvcihkPW5ldyBGbG9hdDY0QXJyYXkodSoyKjMpLGM9MDtjPHU7YysrKXtsZXQgYj10W2NdLHA9dFsoYysxKSV1XTtkW2wrK109Yi54LGRbbCsrXT1iLnksZFtsKytdPWIueixkW2wrK109cC54LGRbbCsrXT1wLnksZFtsKytdPXAuen1lbHNle2xldCBiPTA7aWYoYT09PXd0LkdFT0RFU0lDKWZvcihjPTA7Yzx1O2MrKyliKz1sdC5zdWJkaXZpZGVMaW5lQ291bnQodFtjXSx0WyhjKzEpJXVdLG4pO2Vsc2UgaWYoYT09PXd0LlJIVU1CKWZvcihjPTA7Yzx1O2MrKyliKz1sdC5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChlLHRbY10sdFsoYysxKSV1XSxuKTtmb3IoZD1uZXcgRmxvYXQ2NEFycmF5KGIqMyksYz0wO2M8dTtjKyspe2xldCBwO2E9PT13dC5HRU9ERVNJQz9wPWx0LnN1YmRpdmlkZUxpbmUodFtjXSx0WyhjKzEpJXVdLG4semgpOmE9PT13dC5SSFVNQiYmKHA9bHQuc3ViZGl2aWRlUmh1bWJMaW5lKGUsdFtjXSx0WyhjKzEpJXVdLG4semgpKTtsZXQgeT1wLmxlbmd0aDtmb3IobGV0IEU9MDtFPHk7KytFKWRbbCsrXT1wW0VdfX11PWQubGVuZ3RoLzM7bGV0IGg9dSoyLG09a2UuY3JlYXRlVHlwZWRBcnJheSh1LGgpO2ZvcihsPTAsYz0wO2M8dS0xO2MrKyltW2wrK109YyxtW2wrK109YysxO3JldHVybiBtW2wrK109dS0xLG1bbCsrXT0wLG5ldyBwbyh7Z2VvbWV0cnk6bmV3IHZlKHthdHRyaWJ1dGVzOm5ldyBudCh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSl9KSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpVZS5MSU5FU30pfSl9ZnVuY3Rpb24gckQoZSx0LG4sbyxhKXtsZXQgaT14by5mcm9tUG9pbnRzKHQsZSkucHJvamVjdFBvaW50c09udG9QbGFuZSh0LG1SKTtTdC5jb21wdXRlV2luZGluZ09yZGVyMkQoaSk9PT12by5DTE9DS1dJU0UmJihpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCBkLGMsdT10Lmxlbmd0aCxsPW5ldyBBcnJheSh1KSxoPTA7aWYobylmb3IoZD1uZXcgRmxvYXQ2NEFycmF5KHUqMiozKjIpLGM9MDtjPHU7KytjKXtsW2NdPWgvMztsZXQgeT10W2NdLEU9dFsoYysxKSV1XTtkW2grK109eS54LGRbaCsrXT15LnksZFtoKytdPXkueixkW2grK109RS54LGRbaCsrXT1FLnksZFtoKytdPUUuen1lbHNle2xldCB5PTA7aWYoYT09PXd0LkdFT0RFU0lDKWZvcihjPTA7Yzx1O2MrKyl5Kz1sdC5zdWJkaXZpZGVMaW5lQ291bnQodFtjXSx0WyhjKzEpJXVdLG4pO2Vsc2UgaWYoYT09PXd0LlJIVU1CKWZvcihjPTA7Yzx1O2MrKyl5Kz1sdC5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChlLHRbY10sdFsoYysxKSV1XSxuKTtmb3IoZD1uZXcgRmxvYXQ2NEFycmF5KHkqMyoyKSxjPTA7Yzx1OysrYyl7bFtjXT1oLzM7bGV0IEU7YT09PXd0LkdFT0RFU0lDP0U9bHQuc3ViZGl2aWRlTGluZSh0W2NdLHRbKGMrMSkldV0sbix6aCk6YT09PXd0LlJIVU1CJiYoRT1sdC5zdWJkaXZpZGVSaHVtYkxpbmUoZSx0W2NdLHRbKGMrMSkldV0sbix6aCkpO2xldCBfPUUubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8XzsrK1QpZFtoKytdPUVbVF19fXU9ZC5sZW5ndGgvNjtsZXQgbT1sLmxlbmd0aCxiPSh1KjIrbSkqMixwPWtlLmNyZWF0ZVR5cGVkQXJyYXkodSttLGIpO2ZvcihoPTAsYz0wO2M8dTsrK2MpcFtoKytdPWMscFtoKytdPShjKzEpJXUscFtoKytdPWMrdSxwW2grK109KGMrMSkldSt1O2ZvcihjPTA7YzxtO2MrKyl7bGV0IHk9bFtjXTtwW2grK109eSxwW2grK109eSt1fXJldHVybiBuZXcgcG8oe2dlb21ldHJ5Om5ldyB2ZSh7YXR0cmlidXRlczpuZXcgbnQoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pfSksaW5kaWNlczpwLHByaW1pdGl2ZVR5cGU6VWUuTElORVN9KX0pfWZ1bmN0aW9uIFRjKGUpe2xldCB0PWUucG9seWdvbkhpZXJhcmNoeSxuPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsbz1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxhPWUucGVyUG9zaXRpb25IZWlnaHQ/PyExLHI9YSYmZyhlLmV4dHJ1ZGVkSGVpZ2h0KSxpPWUuYXJjVHlwZT8/d3QuR0VPREVTSUMsZj1lLmhlaWdodD8/MCxkPWUuZXh0cnVkZWRIZWlnaHQ/P2Y7aWYoIXIpe2xldCBjPU1hdGgubWF4KGYsZCk7ZD1NYXRoLm1pbihmLGQpLGY9Y310aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShuKSx0aGlzLl9ncmFudWxhcml0eT1vLHRoaXMuX2hlaWdodD1mLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PWQsdGhpcy5fYXJjVHlwZT1pLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9dCx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1hLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1yLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1lLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD1sdC5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKHQscykrcS5wYWNrZWRMZW5ndGgrOH12YXIgbVIsemgsaUQsY0QsSWcsYlI9WCgoKT0+e2hjKCk7TXQoKTtJZSgpO3Z0KCk7bXQoKTtzZSgpO3FlKCk7cHMoKTskdCgpO2VuKCk7dW4oKTtkYygpO3pvKCk7bHIoKTtubigpO0dlKCk7VmYoKTtKYSgpO2NuKCk7YmMoKTttUj1bXSx6aD1bXTtUYy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLG49bHQucGFja1BvbHlnb25IaWVyYXJjaHkoZS5fcG9seWdvbkhpZXJhcmNoeSx0LG4scykscS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9oZWlnaHQsdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9ncmFudWxhcml0eSx0W24rK109ZS5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPzE6MCx0W24rK109ZS5fcGVyUG9zaXRpb25IZWlnaHQ/MTowLHRbbisrXT1lLl9hcmNUeXBlLHRbbisrXT1lLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLHRbbl09ZS5wYWNrZWRMZW5ndGgsdH07aUQ9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxjRD17cG9seWdvbkhpZXJhcmNoeTp7fX07VGMudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXt0PXQ/PzA7bGV0IG89bHQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShlLHQscyk7dD1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1xLnVucGFjayhlLHQsaUQpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWVbdCsrXSxpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdCsrXT09PTEsYz1lW3QrK109PT0xLHU9ZVt0KytdLGw9ZVt0KytdLGg9ZVt0XTtyZXR1cm4gZyhuKXx8KG49bmV3IFRjKGNEKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD1xLmNsb25lKGEsbi5fZWxsaXBzb2lkKSxuLl9oZWlnaHQ9cixuLl9leHRydWRlZEhlaWdodD1pLG4uX2dyYW51bGFyaXR5PWYsbi5fcGVyUG9zaXRpb25IZWlnaHQ9YyxuLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9ZCxuLl9hcmNUeXBlPXUsbi5fb2Zmc2V0QXR0cmlidXRlPWw9PT0tMT92b2lkIDA6bCxuLnBhY2tlZExlbmd0aD1oLG59O1RjLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczplLnBvc2l0aW9uc30saGVpZ2h0OmUuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OmUuZXh0cnVkZWRIZWlnaHQsZWxsaXBzb2lkOmUuZWxsaXBzb2lkLGdyYW51bGFyaXR5OmUuZ3JhbnVsYXJpdHkscGVyUG9zaXRpb25IZWlnaHQ6ZS5wZXJQb3NpdGlvbkhlaWdodCxhcmNUeXBlOmUuYXJjVHlwZSxvZmZzZXRBdHRyaWJ1dGU6ZS5vZmZzZXRBdHRyaWJ1dGV9O3JldHVybiBuZXcgVGModCl9O1RjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX2VsbGlwc29pZCxuPWUuX2dyYW51bGFyaXR5LG89ZS5fcG9seWdvbkhpZXJhcmNoeSxhPWUuX3BlclBvc2l0aW9uSGVpZ2h0LHI9ZS5fYXJjVHlwZSxpPWx0LnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHkobywhYSx0KTtpZihpLmxlbmd0aD09PTApcmV0dXJuO2xldCBmLGQ9W10sYz1rLmNob3JkTGVuZ3RoKG4sdC5tYXhpbXVtUmFkaXVzKSx1PWUuX2hlaWdodCxsPWUuX2V4dHJ1ZGVkSGVpZ2h0LGg9ZS5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlfHwhay5lcXVhbHNFcHNpbG9uKHUsbCwwLGsuRVBTSUxPTjIpLG0sYjtpZihoKWZvcihiPTA7YjxpLmxlbmd0aDtiKyspe2lmKGY9ckQodCxpW2JdLGMsYSxyKSxmLmdlb21ldHJ5PWx0LnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkKGYuZ2VvbWV0cnksdSxsLHQsYSksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRT1mLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLF89bmV3IFVpbnQ4QXJyYXkoRSk7ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuVE9QP189Xy5maWxsKDEsMCxFLzIpOihtPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLF89Xy5maWxsKG0pKSxmLmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6X30pfWQucHVzaChmKX1lbHNlIGZvcihiPTA7YjxpLmxlbmd0aDtiKyspe2lmKGY9YUQodCxpW2JdLGMsYSxyKSxmLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChmLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHUsdCwhYSksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRT1mLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDttPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO2xldCBfPW5ldyBVaW50OEFycmF5KEUvMykuZmlsbChtKTtmLmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6X30pfWQucHVzaChmKX1sZXQgcD1IdC5jb21iaW5lSW5zdGFuY2VzKGQpWzBdLHk9Z2UuZnJvbVZlcnRpY2VzKHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpO3JldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6cC5hdHRyaWJ1dGVzLGluZGljZXM6cC5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6cC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnksb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtJZz1UY30pO3ZhciBQZz17fTtydChQZyx7ZGVmYXVsdDooKT0+ZkR9KTtmdW5jdGlvbiBzRChlLHQpe3JldHVybiBnKHQpJiYoZT1JZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxJZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgZkQsa2c9WCgoKT0+e3NlKCk7cWUoKTtiUigpO2ZEPXNEfSk7ZnVuY3Rpb24gdmcoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuKjY8MT9lKyh0LWUpKjYqbjpuKjI8MT90Om4qMzwyP2UrKHQtZSkqKDIvMy1uKSo2OmV9ZnVuY3Rpb24gVihlLHQsbixvKXt0aGlzLnJlZD1lPz8xLHRoaXMuZ3JlZW49dD8/MSx0aGlzLmJsdWU9bj8/MSx0aGlzLmFscGhhPW8/PzF9dmFyIEZnLERnLFFyLGRELHVELGxELGhELGV0LGtzPVgoKCk9PnttdCgpO3NlKCk7RmwoKTtHZSgpO1YuZnJvbUNhcnRlc2lhbjQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5yZWQ9ZS54LHQuZ3JlZW49ZS55LHQuYmx1ZT1lLnosdC5hbHBoYT1lLncsdCk6bmV3IFYoZS54LGUueSxlLnosZS53KX07Vi5mcm9tQnl0ZXM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gZT1WLmJ5dGVUb0Zsb2F0KGU/PzI1NSksdD1WLmJ5dGVUb0Zsb2F0KHQ/PzI1NSksbj1WLmJ5dGVUb0Zsb2F0KG4/PzI1NSksbz1WLmJ5dGVUb0Zsb2F0KG8/PzI1NSksZyhhKT8oYS5yZWQ9ZSxhLmdyZWVuPXQsYS5ibHVlPW4sYS5hbHBoYT1vLGEpOm5ldyBWKGUsdCxuLG8pfTtWLmZyb21BbHBoYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGcobik/KG4ucmVkPWUucmVkLG4uZ3JlZW49ZS5ncmVlbixuLmJsdWU9ZS5ibHVlLG4uYWxwaGE9dCxuKTpuZXcgVihlLnJlZCxlLmdyZWVuLGUuYmx1ZSx0KX07Y3Iuc3VwcG9ydHNUeXBlZEFycmF5cygpJiYoRmc9bmV3IEFycmF5QnVmZmVyKDQpLERnPW5ldyBVaW50MzJBcnJheShGZyksUXI9bmV3IFVpbnQ4QXJyYXkoRmcpKTtWLmZyb21SZ2JhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIERnWzBdPWUsVi5mcm9tQnl0ZXMoUXJbMF0sUXJbMV0sUXJbMl0sUXJbM10sdCl9O1YuZnJvbUhzbD1mdW5jdGlvbihlLHQsbixvLGEpe2U9KGU/PzApJTEsdD10Pz8wLG49bj8/MCxvPW8/PzE7bGV0IHI9bixpPW4sZj1uO2lmKHQhPT0wKXtsZXQgZDtuPC41P2Q9biooMSt0KTpkPW4rdC1uKnQ7bGV0IGM9MipuLWQ7cj12ZyhjLGQsZSsxLzMpLGk9dmcoYyxkLGUpLGY9dmcoYyxkLGUtMS8zKX1yZXR1cm4gZyhhKT8oYS5yZWQ9cixhLmdyZWVuPWksYS5ibHVlPWYsYS5hbHBoYT1vLGEpOm5ldyBWKHIsaSxmLG8pfTtWLmZyb21SYW5kb209ZnVuY3Rpb24oZSx0KXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgbj1lLnJlZDtpZighZyhuKSl7bGV0IGk9ZS5taW5pbXVtUmVkPz8wLGY9ZS5tYXhpbXVtUmVkPz8xO249aStrLm5leHRSYW5kb21OdW1iZXIoKSooZi1pKX1sZXQgbz1lLmdyZWVuO2lmKCFnKG8pKXtsZXQgaT1lLm1pbmltdW1HcmVlbj8/MCxmPWUubWF4aW11bUdyZWVuPz8xO289aStrLm5leHRSYW5kb21OdW1iZXIoKSooZi1pKX1sZXQgYT1lLmJsdWU7aWYoIWcoYSkpe2xldCBpPWUubWluaW11bUJsdWU/PzAsZj1lLm1heGltdW1CbHVlPz8xO2E9aStrLm5leHRSYW5kb21OdW1iZXIoKSooZi1pKX1sZXQgcj1lLmFscGhhO2lmKCFnKHIpKXtsZXQgaT1lLm1pbmltdW1BbHBoYT8/MCxmPWUubWF4aW11bUFscGhhPz8xO3I9aStrLm5leHRSYW5kb21OdW1iZXIoKSooZi1pKX1yZXR1cm4gZyh0KT8odC5yZWQ9bix0LmdyZWVuPW8sdC5ibHVlPWEsdC5hbHBoYT1yLHQpOm5ldyBWKG4sbyxhLHIpfTtkRD0vXiMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pPyQvaSx1RD0vXiMoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pPyQvaSxsRD0vXnJnYmE/XHMqXChccyooWzAtOS5dKyU/KVxzKlssXHNdK1xzKihbMC05Ll0rJT8pXHMqWyxcc10rXHMqKFswLTkuXSslPykoPzpccypbLFxzL10rXHMqKFswLTkuXSspKT9ccypcKSQvaSxoRD0vXmhzbGE/XHMqXChccyooWzAtOS5dKylccypbLFxzXStccyooWzAtOS5dKyUpXHMqWyxcc10rXHMqKFswLTkuXSslKSg/OlxzKlssXHMvXStccyooWzAtOS5dKykpP1xzKlwpJC9pO1YuZnJvbUNzc0NvbG9yU3RyaW5nPWZ1bmN0aW9uKGUsdCl7Zyh0KXx8KHQ9bmV3IFYpLGU9ZS50cmltKCk7bGV0IG49VltlLnRvVXBwZXJDYXNlKCldO2lmKGcobikpcmV0dXJuIFYuY2xvbmUobix0KSx0O2xldCBvPWRELmV4ZWMoZSk7cmV0dXJuIG8hPT1udWxsPyh0LnJlZD1wYXJzZUludChvWzFdLDE2KS8xNSx0LmdyZWVuPXBhcnNlSW50KG9bMl0sMTYpLzE1LHQuYmx1ZT1wYXJzZUludChvWzNdLDE2KS8xNSx0LmFscGhhPXBhcnNlSW50KG9bNF0/PyJmIiwxNikvMTUsdCk6KG89dUQuZXhlYyhlKSxvIT09bnVsbD8odC5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMjU1LHQuZ3JlZW49cGFyc2VJbnQob1syXSwxNikvMjU1LHQuYmx1ZT1wYXJzZUludChvWzNdLDE2KS8yNTUsdC5hbHBoYT1wYXJzZUludChvWzRdPz8iZmYiLDE2KS8yNTUsdCk6KG89bEQuZXhlYyhlKSxvIT09bnVsbD8odC5yZWQ9cGFyc2VGbG9hdChvWzFdKS8ob1sxXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLHQuZ3JlZW49cGFyc2VGbG9hdChvWzJdKS8ob1syXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLHQuYmx1ZT1wYXJzZUZsb2F0KG9bM10pLyhvWzNdLnN1YnN0cigtMSk9PT0iJSI/MTAwOjI1NSksdC5hbHBoYT1wYXJzZUZsb2F0KG9bNF0/PyIxLjAiKSx0KToobz1oRC5leGVjKGUpLG8hPT1udWxsP1YuZnJvbUhzbChwYXJzZUZsb2F0KG9bMV0pLzM2MCxwYXJzZUZsb2F0KG9bMl0pLzEwMCxwYXJzZUZsb2F0KG9bM10pLzEwMCxwYXJzZUZsb2F0KG9bNF0/PyIxLjAiKSx0KToodD12b2lkIDAsdCkpKSl9O1YucGFja2VkTGVuZ3RoPTQ7Vi5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPz8wLHRbbisrXT1lLnJlZCx0W24rK109ZS5ncmVlbix0W24rK109ZS5ibHVlLHRbbl09ZS5hbHBoYSx0fTtWLnVucGFjaz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dD8/MCxnKG4pfHwobj1uZXcgViksbi5yZWQ9ZVt0KytdLG4uZ3JlZW49ZVt0KytdLG4uYmx1ZT1lW3QrK10sbi5hbHBoYT1lW3RdLG59O1YuYnl0ZVRvRmxvYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fTtWLmZsb2F0VG9CeXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT8yNTU6ZSoyNTZ8MH07Vi5jbG9uZT1mdW5jdGlvbihlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQucmVkPWUucmVkLHQuZ3JlZW49ZS5ncmVlbix0LmJsdWU9ZS5ibHVlLHQuYWxwaGE9ZS5hbHBoYSx0KTpuZXcgVihlLnJlZCxlLmdyZWVuLGUuYmx1ZSxlLmFscGhhKX07Vi5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUucmVkPT09dC5yZWQmJmUuZ3JlZW49PT10LmdyZWVuJiZlLmJsdWU9PT10LmJsdWUmJmUuYWxwaGE9PT10LmFscGhhfTtWLmVxdWFsc0FycmF5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZWQ9PT10W25dJiZlLmdyZWVuPT09dFtuKzFdJiZlLmJsdWU9PT10W24rMl0mJmUuYWxwaGE9PT10W24rM119O1YucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBWLmNsb25lKHRoaXMsZSl9O1YucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gVi5lcXVhbHModGhpcyxlKX07Vi5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzPT09ZXx8ZyhlKSYmTWF0aC5hYnModGhpcy5yZWQtZS5yZWQpPD10JiZNYXRoLmFicyh0aGlzLmdyZWVuLWUuZ3JlZW4pPD10JiZNYXRoLmFicyh0aGlzLmJsdWUtZS5ibHVlKTw9dCYmTWF0aC5hYnModGhpcy5hbHBoYS1lLmFscGhhKTw9dH07Vi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5yZWR9LCAke3RoaXMuZ3JlZW59LCAke3RoaXMuYmx1ZX0sICR7dGhpcy5hbHBoYX0pYH07Vi5wcm90b3R5cGUudG9Dc3NDb2xvclN0cmluZz1mdW5jdGlvbigpe2xldCBlPVYuZmxvYXRUb0J5dGUodGhpcy5yZWQpLHQ9Vi5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKSxuPVYuZmxvYXRUb0J5dGUodGhpcy5ibHVlKTtyZXR1cm4gdGhpcy5hbHBoYT09PTE/YHJnYigke2V9LCR7dH0sJHtufSlgOmByZ2JhKCR7ZX0sJHt0fSwke259LCR7dGhpcy5hbHBoYX0pYH07Vi5wcm90b3R5cGUudG9Dc3NIZXhTdHJpbmc9ZnVuY3Rpb24oKXtsZXQgZT1WLmZsb2F0VG9CeXRlKHRoaXMucmVkKS50b1N0cmluZygxNik7ZS5sZW5ndGg8MiYmKGU9YDAke2V9YCk7bGV0IHQ9Vi5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKS50b1N0cmluZygxNik7dC5sZW5ndGg8MiYmKHQ9YDAke3R9YCk7bGV0IG49Vi5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLnRvU3RyaW5nKDE2KTtpZihuLmxlbmd0aDwyJiYobj1gMCR7bn1gKSx0aGlzLmFscGhhPDEpe2xldCBvPVYuZmxvYXRUb0J5dGUodGhpcy5hbHBoYSkudG9TdHJpbmcoMTYpO3JldHVybiBvLmxlbmd0aDwyJiYobz1gMCR7b31gKSxgIyR7ZX0ke3R9JHtufSR7b31gfXJldHVybmAjJHtlfSR7dH0ke259YH07Vi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbihlKXtsZXQgdD1WLmZsb2F0VG9CeXRlKHRoaXMucmVkKSxuPVYuZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbz1WLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSksYT1WLmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpO3JldHVybiBnKGUpPyhlWzBdPXQsZVsxXT1uLGVbMl09byxlWzNdPWEsZSk6W3QsbixvLGFdfTtWLmJ5dGVzVG9SZ2JhPWZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBRclswXT1lLFFyWzFdPXQsUXJbMl09bixRclszXT1vLERnWzBdfTtWLnByb3RvdHlwZS50b1JnYmE9ZnVuY3Rpb24oKXtyZXR1cm4gVi5ieXRlc1RvUmdiYShWLmZsb2F0VG9CeXRlKHRoaXMucmVkKSxWLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLFYuZmxvYXRUb0J5dGUodGhpcy5ibHVlKSxWLmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpKX07Vi5wcm90b3R5cGUuYnJpZ2h0ZW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0xLWUsdC5yZWQ9MS0oMS10aGlzLnJlZCkqZSx0LmdyZWVuPTEtKDEtdGhpcy5ncmVlbikqZSx0LmJsdWU9MS0oMS10aGlzLmJsdWUpKmUsdC5hbHBoYT10aGlzLmFscGhhLHR9O1YucHJvdG90eXBlLmRhcmtlbj1mdW5jdGlvbihlLHQpe3JldHVybiBlPTEtZSx0LnJlZD10aGlzLnJlZCplLHQuZ3JlZW49dGhpcy5ncmVlbiplLHQuYmx1ZT10aGlzLmJsdWUqZSx0LmFscGhhPXRoaXMuYWxwaGEsdH07Vi5wcm90b3R5cGUud2l0aEFscGhhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFYuZnJvbUFscGhhKHRoaXMsZSx0KX07Vi5hZGQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnJlZD1lLnJlZCt0LnJlZCxuLmdyZWVuPWUuZ3JlZW4rdC5ncmVlbixuLmJsdWU9ZS5ibHVlK3QuYmx1ZSxuLmFscGhhPWUuYWxwaGErdC5hbHBoYSxufTtWLnN1YnRyYWN0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQtdC5yZWQsbi5ncmVlbj1lLmdyZWVuLXQuZ3JlZW4sbi5ibHVlPWUuYmx1ZS10LmJsdWUsbi5hbHBoYT1lLmFscGhhLXQuYWxwaGEsbn07Vi5tdWx0aXBseT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4ucmVkPWUucmVkKnQucmVkLG4uZ3JlZW49ZS5ncmVlbip0LmdyZWVuLG4uYmx1ZT1lLmJsdWUqdC5ibHVlLG4uYWxwaGE9ZS5hbHBoYSp0LmFscGhhLG59O1YuZGl2aWRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQvdC5yZWQsbi5ncmVlbj1lLmdyZWVuL3QuZ3JlZW4sbi5ibHVlPWUuYmx1ZS90LmJsdWUsbi5hbHBoYT1lLmFscGhhL3QuYWxwaGEsbn07Vi5tb2Q9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnJlZD1lLnJlZCV0LnJlZCxuLmdyZWVuPWUuZ3JlZW4ldC5ncmVlbixuLmJsdWU9ZS5ibHVlJXQuYmx1ZSxuLmFscGhhPWUuYWxwaGEldC5hbHBoYSxufTtWLmxlcnA9ZnVuY3Rpb24oZSx0LG4sbyl7cmV0dXJuIG8ucmVkPWsubGVycChlLnJlZCx0LnJlZCxuKSxvLmdyZWVuPWsubGVycChlLmdyZWVuLHQuZ3JlZW4sbiksby5ibHVlPWsubGVycChlLmJsdWUsdC5ibHVlLG4pLG8uYWxwaGE9ay5sZXJwKGUuYWxwaGEsdC5hbHBoYSxuKSxvfTtWLm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnJlZD1lLnJlZCp0LG4uZ3JlZW49ZS5ncmVlbip0LG4uYmx1ZT1lLmJsdWUqdCxuLmFscGhhPWUuYWxwaGEqdCxufTtWLmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5yZWQ9ZS5yZWQvdCxuLmdyZWVuPWUuZ3JlZW4vdCxuLmJsdWU9ZS5ibHVlL3Qsbi5hbHBoYT1lLmFscGhhL3Qsbn07Vi5BTElDRUJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRjhGRiIpKTtWLkFOVElRVUVXSElURT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFFQkQ3IikpO1YuQVFVQT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO1YuQVFVQU1BUklORT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0ZGRkQ0IikpO1YuQVpVUkU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGRiIpKTtWLkJFSUdFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUY1REMiKSk7Vi5CSVNRVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRDNCIpKTtWLkJMQUNLPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwMDAiKSk7Vi5CTEFOQ0hFREFMTU9ORD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFQkNEIikpO1YuQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMEZGIikpO1YuQkxVRVZJT0xFVD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEEyQkUyIikpO1YuQlJPV049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0E1MkEyQSIpKTtWLkJVUkxZV09PRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREVCODg3IikpO1YuQ0FERVRCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM1RjlFQTAiKSk7Vi5DSEFSVFJFVVNFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGMDAiKSk7Vi5DSE9DT0xBVEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0QyNjkxRSIpKTtWLkNPUkFMPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjdGNTAiKSk7Vi5DT1JORkxPV0VSQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjQ5NUVEIikpO1YuQ09STlNJTEs9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjhEQyIpKTtWLkNSSU1TT049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0RDMTQzQyIpKTtWLkNZQU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkZGRiIpKTtWLkRBUktCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwOEIiKSk7Vi5EQVJLQ1lBTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4QjhCIikpO1YuREFSS0dPTERFTlJPRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjg4NjBCIikpO1YuREFSS0dSQVk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0E5QTlBOSIpKTtWLkRBUktHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA2NDAwIikpO1YuREFSS0dSRVk9Vi5EQVJLR1JBWTtWLkRBUktLSEFLST1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkRCNzZCIikpO1YuREFSS01BR0VOVEE9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDA4QiIpKTtWLkRBUktPTElWRUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM1NTZCMkYiKSk7Vi5EQVJLT1JBTkdFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjhDMDAiKSk7Vi5EQVJLT1JDSElEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5OTMyQ0MiKSk7Vi5EQVJLUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QjAwMDAiKSk7Vi5EQVJLU0FMTU9OPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFOTk2N0EiKSk7Vi5EQVJLU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzhGQkM4RiIpKTtWLkRBUktTTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzQ4M0Q4QiIpKTtWLkRBUktTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzJGNEY0RiIpKTtWLkRBUktTTEFURUdSRVk9Vi5EQVJLU0xBVEVHUkFZO1YuREFSS1RVUlFVT0lTRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBDRUQxIikpO1YuREFSS1ZJT0xFVD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTQwMEQzIikpO1YuREVFUFBJTks9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMTQ5MyIpKTtWLkRFRVBTS1lCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEJGRkYiKSk7Vi5ESU1HUkFZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2OTY5NjkiKSk7Vi5ESU1HUkVZPVYuRElNR1JBWTtWLkRPREdFUkJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzFFOTBGRiIpKTtWLkZJUkVCUklDSz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjIyMjIyIikpO1YuRkxPUkFMV0hJVEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFGMCIpKTtWLkZPUkVTVEdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyMjhCMjIiKSk7Vi5GVUNIU0lBPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwRkYiKSk7Vi5HQUlOU0JPUk89T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0RDRENEQyIpKTtWLkdIT1NUV0hJVEU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0Y4RjhGRiIpKTtWLkdPTEQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRDcwMCIpKTtWLkdPTERFTlJPRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREFBNTIwIikpO1YuR1JBWT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDgwIikpO1YuR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwODAwMCIpKTtWLkdSRUVOWUVMTE9XPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBREZGMkYiKSk7Vi5HUkVZPVYuR1JBWTtWLkhPTkVZREVXPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEZGRjAiKSk7Vi5IT1RQSU5LPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjY5QjQiKSk7Vi5JTkRJQU5SRUQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0NENUM1QyIpKTtWLklORElHTz1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNEIwMDgyIikpO1YuSVZPUlk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGMCIpKTtWLktIQUtJPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEU2OEMiKSk7Vi5MQVZFTkRFUj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRTZFNkZBIikpO1YuTEFWRU5EQVJfQkxVU0g9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjBGNSIpKTtWLkxBV05HUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0NGQzAwIikpO1YuTEVNT05DSElGRk9OPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZBQ0QiKSk7Vi5MSUdIVEJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0FERDhFNiIpKTtWLkxJR0hUQ09SQUw9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0YwODA4MCIpKTtWLkxJR0hUQ1lBTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRTBGRkZGIikpO1YuTElHSFRHT0xERU5ST0RZRUxMT1c9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRkFEMiIpKTtWLkxJR0hUR1JBWT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDNEM0QzIikpO1YuTElHSFRHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTBFRTkwIikpO1YuTElHSFRHUkVZPVYuTElHSFRHUkFZO1YuTElHSFRQSU5LPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkI2QzEiKSk7Vi5MSUdIVFNFQUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyMEIyQUEiKSk7Vi5MSUdIVFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzg3Q0VGQSIpKTtWLkxJR0hUU0xBVEVHUkFZPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Nzg4OTkiKSk7Vi5MSUdIVFNMQVRFR1JFWT1WLkxJR0hUU0xBVEVHUkFZO1YuTElHSFRTVEVFTEJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0IwQzRERSIpKTtWLkxJR0hUWUVMTE9XPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGRTAiKSk7Vi5MSU1FPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGMDAiKSk7Vi5MSU1FR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzMyQ0QzMiIpKTtWLkxJTkVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUYwRTYiKSk7Vi5NQUdFTlRBPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwRkYiKSk7Vi5NQVJPT049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzgwMDAwMCIpKTtWLk1FRElVTUFRVUFNQVJJTkU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzY2Q0RBQSIpKTtWLk1FRElVTUJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDBDRCIpKTtWLk1FRElVTU9SQ0hJRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkE1NUQzIikpO1YuTUVESVVNUFVSUExFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MzcwREIiKSk7Vi5NRURJVU1TRUFHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjM0NCMzcxIikpO1YuTUVESVVNU0xBVEVCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3QjY4RUUiKSk7Vi5NRURJVU1TUFJJTkdHUkVFTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGQTlBIikpO1YuTUVESVVNVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0OEQxQ0MiKSk7Vi5NRURJVU1WSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0M3MTU4NSIpKTtWLk1JRE5JR0hUQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMTkxOTcwIikpO1YuTUlOVENSRUFNPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUZGRkEiKSk7Vi5NSVNUWVJPU0U9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRFMSIpKTtWLk1PQ0NBU0lOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkU0QjUiKSk7Vi5OQVZBSk9XSElURT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZERUFEIikpO1YuTkFWWT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMDgwIikpO1YuT0xETEFDRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkRGNUU2IikpO1YuT0xJVkU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzgwODAwMCIpKTtWLk9MSVZFRFJBQj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNkI4RTIzIikpO1YuT1JBTkdFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkE1MDAiKSk7Vi5PUkFOR0VSRUQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNDUwMCIpKTtWLk9SQ0hJRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREE3MEQ2IikpO1YuUEFMRUdPTERFTlJPRD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRUVFOEFBIikpO1YuUEFMRUdSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5OEZCOTgiKSk7Vi5QQUxFVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBRkVFRUUiKSk7Vi5QQUxFVklPTEVUUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQjcwOTMiKSk7Vi5QQVBBWUFXSElQPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVGRDUiKSk7Vi5QRUFDSFBVRkY9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGREFCOSIpKTtWLlBFUlU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0NEODUzRiIpKTtWLlBJTks9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQzBDQiIpKTtWLlBMVU09T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0REQTBERCIpKTtWLlBPV0RFUkJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0IwRTBFNiIpKTtWLlBVUlBMRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDgwIikpO1YuUkVEPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwMDAiKSk7Vi5ST1NZQlJPV049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0JDOEY4RiIpKTtWLlJPWUFMQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDE2OUUxIikpO1YuU0FERExFQlJPV049T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzhCNDUxMyIpKTtWLlNBTE1PTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkE4MDcyIikpO1YuU0FORFlCUk9XTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjRBNDYwIikpO1YuU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzJFOEI1NyIpKTtWLlNFQVNIRUxMPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkY1RUUiKSk7Vi5TSUVOTkE9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0EwNTIyRCIpKTtWLlNJTFZFUj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzBDMEMwIikpO1YuU0tZQkxVRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUVCIikpO1YuU0xBVEVCTFVFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QTVBQ0QiKSk7Vi5TTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzcwODA5MCIpKTtWLlNMQVRFR1JFWT1WLlNMQVRFR1JBWTtWLlNOT1c9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFGQSIpKTtWLlNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGN0YiKSk7Vi5TVEVFTEJMVUU9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzQ2ODJCNCIpKTtWLlRBTj1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDJCNDhDIikpO1YuVEVBTD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDgwIikpO1YuVEhJU1RMRT1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDhCRkQ4IikpO1YuVE9NQVRPPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjYzNDciKSk7Vi5UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiIzQwRTBEMCIpKTtWLlZJT0xFVD1PYmplY3QuZnJlZXplKFYuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRUU4MkVFIikpO1YuV0hFQVQ9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1REVCMyIpKTtWLldISVRFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGRkYiKSk7Vi5XSElURVNNT0tFPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUY1RjUiKSk7Vi5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShWLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkYwMCIpKTtWLllFTExPV0dSRUVOPU9iamVjdC5mcmVlemUoVi5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5QUNEMzIiKSk7Vi5UUkFOU1BBUkVOVD1PYmplY3QuZnJlZXplKG5ldyBWKDAsMCwwLDApKTtldD1WfSk7ZnVuY3Rpb24gbUQoZSx0LG4sbyxhKXtsZXQgcj1BUjtyLmxlbmd0aD1hO2xldCBpLGY9bi5yZWQsZD1uLmdyZWVuLGM9bi5ibHVlLHU9bi5hbHBoYSxsPW8ucmVkLGg9by5ncmVlbixtPW8uYmx1ZSxiPW8uYWxwaGE7aWYoZXQuZXF1YWxzKG4sbykpe2ZvcihpPTA7aTxhO2krKylyW2ldPWV0LmNsb25lKG4pO3JldHVybiByfWxldCBwPShsLWYpL2EseT0oaC1kKS9hLEU9KG0tYykvYSxfPShiLXUpL2E7Zm9yKGk9MDtpPGE7aSsrKXJbaV09bmV3IGV0KGYraSpwLGQraSp5LGMraSpFLHUraSpfKTtyZXR1cm4gcn1mdW5jdGlvbiBpZChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvc2l0aW9ucyxuPWUuY29sb3JzLG89ZS53aWR0aD8/MSxhPWUuY29sb3JzUGVyVmVydGV4Pz8hMTt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9jb2xvcnM9bix0aGlzLl93aWR0aD1vLHRoaXMuX2NvbG9yc1BlclZlcnRleD1hLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShlLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCksdGhpcy5fYXJjVHlwZT1lLmFyY1R5cGU/P3d0LkdFT0RFU0lDLHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lR2VvbWV0cnkiO2xldCByPTErdC5sZW5ndGgqcy5wYWNrZWRMZW5ndGg7cis9ZyhuKT8xK24ubGVuZ3RoKmV0LnBhY2tlZExlbmd0aDoxLHRoaXMucGFja2VkTGVuZ3RoPXIrcS5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzR9dmFyIEFSLHdSLEVSLFJjLHBSLGdSLF9SLHlSLEJnLFRSPVgoKCk9PntoYygpO1hhKCk7TXQoKTtJZSgpO2tzKCk7dnQoKTttdCgpO3NlKCk7cWUoKTskdCgpO2VuKCk7dW4oKTtHbCgpO25uKCk7R2UoKTt3cygpO2NuKCk7a28oKTtBUj1bXTtpZC5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtuPW4/PzA7bGV0IG8sYT1lLl9wb3NpdGlvbnMscj1hLmxlbmd0aDtmb3IodFtuKytdPXIsbz0wO288cjsrK28sbis9cy5wYWNrZWRMZW5ndGgpcy5wYWNrKGFbb10sdCxuKTtsZXQgaT1lLl9jb2xvcnM7Zm9yKHI9ZyhpKT9pLmxlbmd0aDowLHRbbisrXT1yLG89MDtvPHI7KytvLG4rPWV0LnBhY2tlZExlbmd0aClldC5wYWNrKGlbb10sdCxuKTtyZXR1cm4gcS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksbis9aGUucGFja2VkTGVuZ3RoLHRbbisrXT1lLl93aWR0aCx0W24rK109ZS5fY29sb3JzUGVyVmVydGV4PzE6MCx0W24rK109ZS5fYXJjVHlwZSx0W25dPWUuX2dyYW51bGFyaXR5LHR9O3dSPXEuY2xvbmUocS5VTklUX1NQSEVSRSksRVI9bmV3IGhlLFJjPXtwb3NpdGlvbnM6dm9pZCAwLGNvbG9yczp2b2lkIDAsZWxsaXBzb2lkOndSLHZlcnRleEZvcm1hdDpFUix3aWR0aDp2b2lkIDAsY29sb3JzUGVyVmVydGV4OnZvaWQgMCxhcmNUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O2lkLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvLGE9ZVt0KytdLHI9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyx0Kz1zLnBhY2tlZExlbmd0aClyW29dPXMudW5wYWNrKGUsdCk7YT1lW3QrK107bGV0IGk9YT4wP25ldyBBcnJheShhKTp2b2lkIDA7Zm9yKG89MDtvPGE7KytvLHQrPWV0LnBhY2tlZExlbmd0aClpW29dPWV0LnVucGFjayhlLHQpO2xldCBmPXEudW5wYWNrKGUsdCx3Uik7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGQ9aGUudW5wYWNrKGUsdCxFUik7dCs9aGUucGFja2VkTGVuZ3RoO2xldCBjPWVbdCsrXSx1PWVbdCsrXT09PTEsbD1lW3QrK10saD1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9cixuLl9jb2xvcnM9aSxuLl9lbGxpcHNvaWQ9cS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGQsbi5fdmVydGV4Rm9ybWF0KSxuLl93aWR0aD1jLG4uX2NvbG9yc1BlclZlcnRleD11LG4uX2FyY1R5cGU9bCxuLl9ncmFudWxhcml0eT1oLG4pOihSYy5wb3NpdGlvbnM9cixSYy5jb2xvcnM9aSxSYy53aWR0aD1jLFJjLmNvbG9yc1BlclZlcnRleD11LFJjLmFyY1R5cGU9bCxSYy5ncmFudWxhcml0eT1oLG5ldyBpZChSYykpfTtwUj1uZXcgcyxnUj1uZXcgcyxfUj1uZXcgcyx5Uj1uZXcgcztpZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl93aWR0aCxuPWUuX3ZlcnRleEZvcm1hdCxvPWUuX2NvbG9ycyxhPWUuX2NvbG9yc1BlclZlcnRleCxyPWUuX2FyY1R5cGUsaT1lLl9ncmFudWxhcml0eSxmPWUuX2VsbGlwc29pZCxkLGMsdSxsPVtdLGg9Tm4oZS5fcG9zaXRpb25zLHMuZXF1YWxzRXBzaWxvbiwhMSxsKTtpZihnKG8pJiZsLmxlbmd0aD4wKXtsZXQgRj0wLFU9bFswXTtvPW8uZmlsdGVyKGZ1bmN0aW9uKHosRCl7bGV0IEc9ITE7cmV0dXJuIGE/Rz1EPT09VXx8RD09PTAmJlU9PT0xOkc9RCsxPT09VSxHPyhGKyssVT1sW0ZdLCExKTohMH0pfWxldCBtPWgubGVuZ3RoO2lmKG08Mnx8dDw9MClyZXR1cm47aWYocj09PXd0LkdFT0RFU0lDfHxyPT09d3QuUkhVTUIpe2xldCBGLFU7cj09PXd0LkdFT0RFU0lDPyhGPWsuY2hvcmRMZW5ndGgoaSxmLm1heGltdW1SYWRpdXMpLFU9QW4ubnVtYmVyT2ZQb2ludHMpOihGPWksVT1Bbi5udW1iZXJPZlBvaW50c1JodW1iTGluZSk7bGV0IHo9QW4uZXh0cmFjdEhlaWdodHMoaCxmKTtpZihnKG8pKXtsZXQgRD0xO2ZvcihkPTA7ZDxtLTE7KytkKUQrPVUoaFtkXSxoW2QrMV0sRik7bGV0IEc9bmV3IEFycmF5KEQpLEg9MDtmb3IoZD0wO2Q8bS0xOysrZCl7bGV0IE89aFtkXSxaPWhbZCsxXSxvZT1vW2RdLGNlPVUoTyxaLEYpO2lmKGEmJmQ8RCl7bGV0IGRlPW9bZCsxXSxlZT1tRChPLFosb2UsZGUsY2UpLG1lPWVlLmxlbmd0aDtmb3IoYz0wO2M8bWU7KytjKUdbSCsrXT1lZVtjXX1lbHNlIGZvcihjPTA7YzxjZTsrK2MpR1tIKytdPWV0LmNsb25lKG9lKX1HW0hdPWV0LmNsb25lKG9bby5sZW5ndGgtMV0pLG89RyxBUi5sZW5ndGg9MH1yPT09d3QuR0VPREVTSUM/aD1Bbi5nZW5lcmF0ZUNhcnRlc2lhbkFyYyh7cG9zaXRpb25zOmgsbWluRGlzdGFuY2U6RixlbGxpcHNvaWQ6ZixoZWlnaHQ6en0pOmg9QW4uZ2VuZXJhdGVDYXJ0ZXNpYW5SaHVtYkFyYyh7cG9zaXRpb25zOmgsZ3JhbnVsYXJpdHk6RixlbGxpcHNvaWQ6ZixoZWlnaHQ6en0pfW09aC5sZW5ndGg7bGV0IGI9bSo0LTQscD1uZXcgRmxvYXQ2NEFycmF5KGIqMykseT1uZXcgRmxvYXQ2NEFycmF5KGIqMyksRT1uZXcgRmxvYXQ2NEFycmF5KGIqMyksXz1uZXcgRmxvYXQzMkFycmF5KGIqMiksVD1uLnN0P25ldyBGbG9hdDMyQXJyYXkoYioyKTp2b2lkIDAsdz1nKG8pP25ldyBVaW50OEFycmF5KGIqNCk6dm9pZCAwLFI9MCxTPTAsQz0wLEk9MCxOO2ZvcihjPTA7YzxtOysrYyl7Yz09PTA/KE49cFIscy5zdWJ0cmFjdChoWzBdLGhbMV0sTikscy5hZGQoaFswXSxOLE4pKTpOPWhbYy0xXSxzLmNsb25lKE4sX1IpLHMuY2xvbmUoaFtjXSxnUiksYz09PW0tMT8oTj1wUixzLnN1YnRyYWN0KGhbbS0xXSxoW20tMl0sTikscy5hZGQoaFttLTFdLE4sTikpOk49aFtjKzFdLHMuY2xvbmUoTix5Uik7bGV0IEYsVTtnKHcpJiYoYyE9PTAmJiFhP0Y9b1tjLTFdOkY9b1tjXSxjIT09bS0xJiYoVT1vW2NdKSk7bGV0IHo9Yz09PTA/MjowLEQ9Yz09PW0tMT8yOjQ7Zm9yKHU9ejt1PEQ7Kyt1KXtzLnBhY2soZ1IscCxSKSxzLnBhY2soX1IseSxSKSxzLnBhY2soeVIsRSxSKSxSKz0zO2xldCBHPXUtMjwwPy0xOjE7aWYoX1tTKytdPTIqKHUlMiktMSxfW1MrK109Ryp0LG4uc3QmJihUW0MrK109Yy8obS0xKSxUW0MrK109TWF0aC5tYXgoX1tTLTJdLDApKSxnKHcpKXtsZXQgSD11PDI/RjpVO3dbSSsrXT1ldC5mbG9hdFRvQnl0ZShILnJlZCksd1tJKytdPWV0LmZsb2F0VG9CeXRlKEguZ3JlZW4pLHdbSSsrXT1ldC5mbG9hdFRvQnl0ZShILmJsdWUpLHdbSSsrXT1ldC5mbG9hdFRvQnl0ZShILmFscGhhKX19fWxldCBQPW5ldyBudDtQLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pLFAucHJldlBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eX0pLFAubmV4dFBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pLFAuZXhwYW5kQW5kV2lkdGg9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOl99KSxuLnN0JiYoUC5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pKSxnKHcpJiYoUC5jb2xvcj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LHZhbHVlczp3LG5vcm1hbGl6ZTohMH0pKTtsZXQgdj1rZS5jcmVhdGVUeXBlZEFycmF5KGIsbSo2LTYpLEE9MCx4PTAsTT1tLTE7Zm9yKGM9MDtjPE07KytjKXZbeCsrXT1BLHZbeCsrXT1BKzIsdlt4KytdPUErMSx2W3grK109QSsxLHZbeCsrXT1BKzIsdlt4KytdPUErMyxBKz00O3JldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6UCxpbmRpY2VzOnYscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6Z2UuZnJvbVBvaW50cyhoKSxnZW9tZXRyeVR5cGU6QnIuUE9MWUxJTkVTfSl9O0JnPWlkfSk7dmFyIFVnPXt9O3J0KFVnLHtkZWZhdWx0OigpPT5wRH0pO2Z1bmN0aW9uIGJEKGUsdCl7cmV0dXJuIGcodCkmJihlPUJnLnVucGFjayhlLHQpKSxlLl9lbGxpcHNvaWQ9cS5jbG9uZShlLl9lbGxpcHNvaWQpLEJnLmNyZWF0ZUdlb21ldHJ5KGUpfXZhciBwRCxMZz1YKCgpPT57c2UoKTtxZSgpO1RSKCk7cEQ9YkR9KTtmdW5jdGlvbiBnRChlLHQsbixvKXtsZXQgYT1uZXcgbnQ7by5wb3NpdGlvbiYmKGEucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplfSkpO2xldCByPXQubGVuZ3RoLGk9ZS5sZW5ndGgvMyxmPShpLXIqMikvKHIqMiksZD1TdC50cmlhbmd1bGF0ZSh0KSxjPShmLTEpKnIqNitkLmxlbmd0aCoyLHU9a2UuY3JlYXRlVHlwZWRBcnJheShpLGMpLGwsaCxtLGIscCx5LEU9cioyLF89MDtmb3IobD0wO2w8Zi0xO2wrKyl7Zm9yKGg9MDtoPHItMTtoKyspbT1oKjIrbCpyKjIseT1tK0UsYj1tKzEscD1iK0UsdVtfKytdPWIsdVtfKytdPW0sdVtfKytdPXAsdVtfKytdPXAsdVtfKytdPW0sdVtfKytdPXk7bT1yKjItMitsKnIqMixiPW0rMSxwPWIrRSx5PW0rRSx1W18rK109Yix1W18rK109bSx1W18rK109cCx1W18rK109cCx1W18rK109bSx1W18rK109eX1pZihvLnN0fHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXtsZXQgUj1uZXcgRmxvYXQzMkFycmF5KGkqMiksUz0xLyhmLTEpLEM9MS9uLmhlaWdodCxJPW4uaGVpZ2h0LzIsTixQLHY9MDtmb3IobD0wO2w8ZjtsKyspe2ZvcihOPWwqUyxQPUMqKHRbMF0ueStJKSxSW3YrK109TixSW3YrK109UCxoPTE7aDxyO2grKylQPUMqKHRbaF0ueStJKSxSW3YrK109TixSW3YrK109UCxSW3YrK109TixSW3YrK109UDtQPUMqKHRbMF0ueStJKSxSW3YrK109TixSW3YrK109UH1mb3IoaD0wO2g8cjtoKyspTj0wLFA9QyoodFtoXS55K0kpLFJbdisrXT1OLFJbdisrXT1QO2ZvcihoPTA7aDxyO2grKylOPShmLTEpKlMsUD1DKih0W2hdLnkrSSksUlt2KytdPU4sUlt2KytdPVA7YS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheShSKX0pfWxldCBUPWktcioyO2ZvcihsPTA7bDxkLmxlbmd0aDtsKz0zKXtsZXQgUj1kW2xdK1QsUz1kW2wrMV0rVCxDPWRbbCsyXStUO3VbXysrXT1SLHVbXysrXT1TLHVbXysrXT1DLHVbXysrXT1DK3IsdVtfKytdPVMrcix1W18rK109UityfWxldCB3PW5ldyB2ZSh7YXR0cmlidXRlczphLGluZGljZXM6dSxib3VuZGluZ1NwaGVyZTpnZS5mcm9tVmVydGljZXMoZSkscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9KTtpZihvLm5vcm1hbCYmKHc9SHQuY29tcHV0ZU5vcm1hbCh3KSksby50YW5nZW50fHxvLmJpdGFuZ2VudCl7dHJ5e3c9SHQuY29tcHV0ZVRhbmdlbnRBbmRCaXRhbmdlbnQodyl9Y2F0Y2h7X2goInBvbHlsaW5lLXZvbHVtZS10YW5nZW50LWJpdGFuZ2VudCIsIlVuYWJsZSB0byBjb21wdXRlIHRhbmdlbnRzIGFuZCBiaXRhbmdlbnRzIGZvciBwb2x5bGluZSB2b2x1bWUgZ2VvbWV0cnkiKX1vLnRhbmdlbnR8fCh3LmF0dHJpYnV0ZXMudGFuZ2VudD12b2lkIDApLG8uYml0YW5nZW50fHwody5hdHRyaWJ1dGVzLmJpdGFuZ2VudD12b2lkIDApLG8uc3R8fCh3LmF0dHJpYnV0ZXMuc3Q9dm9pZCAwKX1yZXR1cm4gd31mdW5jdGlvbiBzZChlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvbHlsaW5lUG9zaXRpb25zLG49ZS5zaGFwZVBvc2l0aW9uczt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX2Nvcm5lclR5cGU9ZS5jb3JuZXJUeXBlPz9obi5ST1VOREVELHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShlLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCksdGhpcy5fZ3JhbnVsYXJpdHk9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeSI7bGV0IG89MSt0Lmxlbmd0aCpzLnBhY2tlZExlbmd0aDtvKz0xK24ubGVuZ3RoKlkucGFja2VkTGVuZ3RoLHRoaXMucGFja2VkTGVuZ3RoPW8rcS5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzJ9dmFyIFJSLHhSLGNkLF9ELGpnLE9SPVgoKCk9PntYYSgpO0RmKCk7TXQoKTtqdCgpO0llKCk7dnQoKTt5YygpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO2xyKCk7bm4oKTtHZSgpO20wKCk7SmEoKTtFaCgpO2NuKCk7a28oKTtiYygpO3NkLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbyxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2Zvcih0W24rK109cixvPTA7bzxyOysrbyxuKz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSx0LG4pO2xldCBpPWUuX3NoYXBlO2ZvcihyPWkubGVuZ3RoLHRbbisrXT1yLG89MDtvPHI7KytvLG4rPVkucGFja2VkTGVuZ3RoKVkucGFjayhpW29dLHQsbik7cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W24rK109ZS5fY29ybmVyVHlwZSx0W25dPWUuX2dyYW51bGFyaXR5LHR9O1JSPXEuY2xvbmUocS5VTklUX1NQSEVSRSkseFI9bmV3IGhlLGNkPXtwb2x5bGluZVBvc2l0aW9uczp2b2lkIDAsc2hhcGVQb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpSUix2ZXJ0ZXhGb3JtYXQ6eFIsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtzZC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9WS5wYWNrZWRMZW5ndGgpaVtvXT1ZLnVucGFjayhlLHQpO2xldCBmPXEudW5wYWNrKGUsdCxSUik7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGQ9aGUudW5wYWNrKGUsdCx4Uik7dCs9aGUucGFja2VkTGVuZ3RoO2xldCBjPWVbdCsrXSx1PWVbdF07cmV0dXJuIGcobik/KG4uX3Bvc2l0aW9ucz1yLG4uX3NoYXBlPWksbi5fZWxsaXBzb2lkPXEuY2xvbmUoZixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShkLG4uX3ZlcnRleEZvcm1hdCksbi5fY29ybmVyVHlwZT1jLG4uX2dyYW51bGFyaXR5PXUsbik6KGNkLnBvbHlsaW5lUG9zaXRpb25zPXIsY2Quc2hhcGVQb3NpdGlvbnM9aSxjZC5jb3JuZXJUeXBlPWMsY2QuZ3JhbnVsYXJpdHk9dSxuZXcgc2QoY2QpKX07X0Q9bmV3IFlhO3NkLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3Bvc2l0aW9ucyxuPU5uKHQscy5lcXVhbHNFcHNpbG9uKSxvPWUuX3NoYXBlO2lmKG89T2kucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZShvKSxuLmxlbmd0aDwyfHxvLmxlbmd0aDwzKXJldHVybjtTdC5jb21wdXRlV2luZGluZ09yZGVyMkQobyk9PT12by5DTE9DS1dJU0UmJm8ucmV2ZXJzZSgpO2xldCBhPVlhLmZyb21Qb2ludHMobyxfRCkscj1PaS5jb21wdXRlUG9zaXRpb25zKG4sbyxhLGUsITApO3JldHVybiBnRChyLG8sYSxlLl92ZXJ0ZXhGb3JtYXQpfTtqZz1zZH0pO3ZhciB6Zz17fTtydCh6Zyx7ZGVmYXVsdDooKT0+QUR9KTtmdW5jdGlvbiB5RChlLHQpe3JldHVybiBnKHQpJiYoZT1qZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxqZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgQUQsR2c9WCgoKT0+e3NlKCk7cWUoKTtPUigpO0FEPXlEfSk7ZnVuY3Rpb24gd0QoZSx0KXtsZXQgbj1uZXcgbnQ7bi5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmV9KTtsZXQgbz10Lmxlbmd0aCxhPW4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLGk9ZS5sZW5ndGgvMy9vLGY9a2UuY3JlYXRlVHlwZWRBcnJheShhLDIqbyooaSsxKSksZCxjLHU9MDtkPTA7bGV0IGw9ZCpvO2ZvcihjPTA7YzxvLTE7YysrKWZbdSsrXT1jK2wsZlt1KytdPWMrbCsxO2ZvcihmW3UrK109by0xK2wsZlt1KytdPWwsZD1pLTEsbD1kKm8sYz0wO2M8by0xO2MrKylmW3UrK109YytsLGZbdSsrXT1jK2wrMTtmb3IoZlt1KytdPW8tMStsLGZbdSsrXT1sLGQ9MDtkPGktMTtkKyspe2xldCBtPW8qZCxiPW0rbztmb3IoYz0wO2M8bztjKyspZlt1KytdPWMrbSxmW3UrK109YytifXJldHVybiBuZXcgdmUoe2F0dHJpYnV0ZXM6bixpbmRpY2VzOmtlLmNyZWF0ZVR5cGVkQXJyYXkoYSxmKSxib3VuZGluZ1NwaGVyZTpnZS5mcm9tVmVydGljZXMoZSkscHJpbWl0aXZlVHlwZTpVZS5MSU5FU30pfWZ1bmN0aW9uIGRkKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9seWxpbmVQb3NpdGlvbnMsbj1lLnNoYXBlUG9zaXRpb25zO3RoaXMuX3Bvc2l0aW9ucz10LHRoaXMuX3NoYXBlPW4sdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUoZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdCksdGhpcy5fY29ybmVyVHlwZT1lLmNvcm5lclR5cGU/P2huLlJPVU5ERUQsdGhpcy5fZ3JhbnVsYXJpdHk9ZS5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVWb2x1bWVPdXRsaW5lR2VvbWV0cnkiO2xldCBvPTErdC5sZW5ndGgqcy5wYWNrZWRMZW5ndGg7bys9MStuLmxlbmd0aCpZLnBhY2tlZExlbmd0aCx0aGlzLnBhY2tlZExlbmd0aD1vK3EucGFja2VkTGVuZ3RoKzJ9dmFyIFNSLGZkLEVELFZnLENSPVgoKCk9PntYYSgpO0RmKCk7TXQoKTtqdCgpO0llKCk7dnQoKTt5YygpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO25uKCk7R2UoKTtKYSgpO0VoKCk7Y24oKTtiYygpO2RkLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbyxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2Zvcih0W24rK109cixvPTA7bzxyOysrbyxuKz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSx0LG4pO2xldCBpPWUuX3NoYXBlO2ZvcihyPWkubGVuZ3RoLHRbbisrXT1yLG89MDtvPHI7KytvLG4rPVkucGFja2VkTGVuZ3RoKVkucGFjayhpW29dLHQsbik7cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W24rK109ZS5fY29ybmVyVHlwZSx0W25dPWUuX2dyYW51bGFyaXR5LHR9O1NSPXEuY2xvbmUocS5VTklUX1NQSEVSRSksZmQ9e3BvbHlsaW5lUG9zaXRpb25zOnZvaWQgMCxzaGFwZVBvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOlNSLGhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtkZC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9WS5wYWNrZWRMZW5ndGgpaVtvXT1ZLnVucGFjayhlLHQpO2xldCBmPXEudW5wYWNrKGUsdCxTUik7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGQ9ZVt0KytdLGM9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcG9zaXRpb25zPXIsbi5fc2hhcGU9aSxuLl9lbGxpcHNvaWQ9cS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fY29ybmVyVHlwZT1kLG4uX2dyYW51bGFyaXR5PWMsbik6KGZkLnBvbHlsaW5lUG9zaXRpb25zPXIsZmQuc2hhcGVQb3NpdGlvbnM9aSxmZC5jb3JuZXJUeXBlPWQsZmQuZ3JhbnVsYXJpdHk9YyxuZXcgZGQoZmQpKX07RUQ9bmV3IFlhO2RkLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3Bvc2l0aW9ucyxuPU5uKHQscy5lcXVhbHNFcHNpbG9uKSxvPWUuX3NoYXBlO2lmKG89T2kucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZShvKSxuLmxlbmd0aDwyfHxvLmxlbmd0aDwzKXJldHVybjtTdC5jb21wdXRlV2luZGluZ09yZGVyMkQobyk9PT12by5DTE9DS1dJU0UmJm8ucmV2ZXJzZSgpO2xldCBhPVlhLmZyb21Qb2ludHMobyxFRCkscj1PaS5jb21wdXRlUG9zaXRpb25zKG4sbyxhLGUsITEpO3JldHVybiB3RChyLG8pfTtWZz1kZH0pO3ZhciBIZz17fTtydChIZyx7ZGVmYXVsdDooKT0+UkR9KTtmdW5jdGlvbiBURChlLHQpe3JldHVybiBnKHQpJiYoZT1WZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxWZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgUkQsS2c9WCgoKT0+e3NlKCk7cWUoKTtDUigpO1JEPVREfSk7ZnVuY3Rpb24gSVIoZSx0LG4sbyxhLHIsaSl7bGV0IGY9TWF0aC5jb3ModCksZD1vKmYsYz1uKmYsdT1NYXRoLnNpbih0KSxsPW8qdSxoPW4qdTt1ZC5fZWxsaXBzb2lkPXEuZGVmYXVsdCxJYT11ZC5wcm9qZWN0KGUsSWEpLElhPXMuc3VidHJhY3QoSWEsR2gsSWEpO2xldCBtPVFvLmZyb21Sb3RhdGlvbih0LE9EKTtJYT1Rby5tdWx0aXBseUJ5VmVjdG9yKG0sSWEsSWEpLElhPXMuYWRkKElhLEdoLElhKSxlPXVkLnVucHJvamVjdChJYSxlKSxyLT0xLGktPTE7bGV0IGI9ZS5sYXRpdHVkZSxwPWIrcipoLHk9Yi1kKmksRT1iLWQqaStyKmgsXz1NYXRoLm1heChiLHAseSxFKSxUPU1hdGgubWluKGIscCx5LEUpLHc9ZS5sb25naXR1ZGUsUj13K3IqYyxTPXcraSpsLEM9dytpKmwrcipjLEk9TWF0aC5tYXgodyxSLFMsQyksTj1NYXRoLm1pbih3LFIsUyxDKTtyZXR1cm57bm9ydGg6Xyxzb3V0aDpULGVhc3Q6SSx3ZXN0Ok4sZ3JhbllDb3M6ZCxncmFuWVNpbjpsLGdyYW5YQ29zOmMsZ3JhblhTaW46aCxud0Nvcm5lcjplfX12YXIgTVIsTlIseEQscWcsT0QsSWEsU0QsR2gsdWQsT28sV2c9WCgoKT0+e0llKCk7RXQoKTtzZSgpO3FlKCk7a3IoKTtHZSgpO1NmKCk7X24oKTtNUj1NYXRoLmNvcyxOUj1NYXRoLnNpbix4RD1NYXRoLnNxcnQscWc9e307cWcuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPXQucmFkaWlTcXVhcmVkLGQ9ZS5ud0Nvcm5lcixjPWUuYm91bmRpbmdSZWN0YW5nbGUsdT1kLmxhdGl0dWRlLWUuZ3JhbllDb3MqbythKmUuZ3JhblhTaW4sbD1NUih1KSxoPU5SKHUpLG09Zi56KmgsYj1kLmxvbmdpdHVkZStvKmUuZ3JhbllTaW4rYSplLmdyYW5YQ29zLHA9bCpNUihiKSx5PWwqTlIoYiksRT1mLngqcCxfPWYueSp5LFQ9eEQoRSpwK18qeSttKmgpO2lmKHIueD1FL1Qsci55PV8vVCxyLno9bS9ULG4pe2xldCB3PWUuc3ROd0Nvcm5lcjtnKHcpPyh1PXcubGF0aXR1ZGUtZS5zdEdyYW5ZQ29zKm8rYSplLnN0R3JhblhTaW4sYj13LmxvbmdpdHVkZStvKmUuc3RHcmFuWVNpbithKmUuc3RHcmFuWENvcyxpLng9KGItZS5zdFdlc3QpKmUubG9uU2NhbGFyLGkueT0odS1lLnN0U291dGgpKmUubGF0U2NhbGFyKTooaS54PShiLWMud2VzdCkqZS5sb25TY2FsYXIsaS55PSh1LWMuc291dGgpKmUubGF0U2NhbGFyKX19O09EPW5ldyBRbyxJYT1uZXcgcyxTRD1uZXcgcmUsR2g9bmV3IHMsdWQ9bmV3IGlvO3FnLmNvbXB1dGVPcHRpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGkpe2xldCBmPWUuZWFzdCxkPWUud2VzdCxjPWUubm9ydGgsdT1lLnNvdXRoLGw9ITEsaD0hMTtjPT09ay5QSV9PVkVSX1RXTyYmKGw9ITApLHU9PT0tay5QSV9PVkVSX1RXTyYmKGg9ITApO2xldCBtLGI9Yy11O2Q+Zj9tPWsuVFdPX1BJLWQrZjptPWYtZDtsZXQgcD1NYXRoLmNlaWwobS90KSsxLHk9TWF0aC5jZWlsKGIvdCkrMSxFPW0vKHAtMSksXz1iLyh5LTEpLFQ9U2Uubm9ydGh3ZXN0KGUsciksdz1TZS5jZW50ZXIoZSxTRCk7KG4hPT0wfHxvIT09MCkmJih3LmxvbmdpdHVkZTxULmxvbmdpdHVkZSYmKHcubG9uZ2l0dWRlKz1rLlRXT19QSSksdWQuX2VsbGlwc29pZD1xLmRlZmF1bHQsR2g9dWQucHJvamVjdCh3LEdoKSk7bGV0IFI9XyxTPUUsQz0wLEk9MCxOPVNlLmNsb25lKGUsYSksUD17Z3JhbllDb3M6UixncmFuWVNpbjpDLGdyYW5YQ29zOlMsZ3JhblhTaW46SSxud0Nvcm5lcjpULGJvdW5kaW5nUmVjdGFuZ2xlOk4sd2lkdGg6cCxoZWlnaHQ6eSxub3J0aENhcDpsLHNvdXRoQ2FwOmh9O2lmKG4hPT0wKXtsZXQgdj1JUihULG4sRSxfLHcscCx5KTtjPXYubm9ydGgsdT12LnNvdXRoLGY9di5lYXN0LGQ9di53ZXN0LFAuZ3JhbllDb3M9di5ncmFuWUNvcyxQLmdyYW5ZU2luPXYuZ3JhbllTaW4sUC5ncmFuWENvcz12LmdyYW5YQ29zLFAuZ3JhblhTaW49di5ncmFuWFNpbixOLm5vcnRoPWMsTi5zb3V0aD11LE4uZWFzdD1mLE4ud2VzdD1kfWlmKG8hPT0wKXtuPW4tbztsZXQgdj1TZS5ub3J0aHdlc3QoTixpKSxBPUlSKHYsbixFLF8sdyxwLHkpO1Auc3RHcmFuWUNvcz1BLmdyYW5ZQ29zLFAuc3RHcmFuWENvcz1BLmdyYW5YQ29zLFAuc3RHcmFuWVNpbj1BLmdyYW5ZU2luLFAuc3RHcmFuWFNpbj1BLmdyYW5YU2luLFAuc3ROd0Nvcm5lcj12LFAuc3RXZXN0PUEud2VzdCxQLnN0U291dGg9QS5zb3V0aH1yZXR1cm4gUH07T289cWd9KTtmdW5jdGlvbiBVUihlLHQpe2xldCBuPW5ldyB2ZSh7YXR0cmlidXRlczpuZXcgbnQscHJpbWl0aXZlVHlwZTpVZS5UUklBTkdMRVN9KTtyZXR1cm4gbi5hdHRyaWJ1dGVzLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dC5wb3NpdGlvbnN9KSxlLm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnQubm9ybWFsc30pKSxlLnRhbmdlbnQmJihuLmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dC50YW5nZW50c30pKSxlLmJpdGFuZ2VudCYmKG4uYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnQuYml0YW5nZW50c30pKSxufWZ1bmN0aW9uIElEKGUsdCxuLG8pe2xldCBhPWUubGVuZ3RoLHI9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShhKTp2b2lkIDAsaT10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShhKTp2b2lkIDAsZj10LmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGEpOnZvaWQgMCxkPTAsYz1EUix1PUZSLGw9dlI7aWYodC5ub3JtYWx8fHQudGFuZ2VudHx8dC5iaXRhbmdlbnQpZm9yKGxldCBoPTA7aDxhO2grPTMpe2xldCBtPXMuZnJvbUFycmF5KGUsaCxYZyksYj1kKzEscD1kKzI7bD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChtLGwpLCh0LnRhbmdlbnR8fHQuYml0YW5nZW50KSYmKHMuY3Jvc3Mocy5VTklUX1osbCx1KSxKLm11bHRpcGx5QnlWZWN0b3Iobyx1LHUpLHMubm9ybWFsaXplKHUsdSksdC5iaXRhbmdlbnQmJnMubm9ybWFsaXplKHMuY3Jvc3MobCx1LGMpLGMpKSx0Lm5vcm1hbCYmKHJbZF09bC54LHJbYl09bC55LHJbcF09bC56KSx0LnRhbmdlbnQmJihpW2RdPXUueCxpW2JdPXUueSxpW3BdPXUueiksdC5iaXRhbmdlbnQmJihmW2RdPWMueCxmW2JdPWMueSxmW3BdPWMueiksZCs9M31yZXR1cm4gVVIodCx7cG9zaXRpb25zOmUsbm9ybWFsczpyLHRhbmdlbnRzOmksYml0YW5nZW50czpmfSl9ZnVuY3Rpb24gUEQoZSx0LG4pe2xldCBvPWUubGVuZ3RoLGE9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAscj10LnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAsaT10LmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxmPTAsZD0wLGM9MCx1PSEwLGw9RFIsaD1GUixtPXZSO2lmKHQubm9ybWFsfHx0LnRhbmdlbnR8fHQuYml0YW5nZW50KWZvcihsZXQgYj0wO2I8bztiKz02KXtsZXQgcD1zLmZyb21BcnJheShlLGIsWGcpLHk9cy5mcm9tQXJyYXkoZSwoYis2KSVvLFlnKTtpZih1KXtsZXQgRT1zLmZyb21BcnJheShlLChiKzMpJW8sTFIpO3Muc3VidHJhY3QoeSxwLHkpLHMuc3VidHJhY3QoRSxwLEUpLG09cy5ub3JtYWxpemUocy5jcm9zcyhFLHksbSksbSksdT0hMX1zLmVxdWFsc0Vwc2lsb24oeSxwLGsuRVBTSUxPTjEwKSYmKHU9ITApLCh0LnRhbmdlbnR8fHQuYml0YW5nZW50KSYmKGw9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocCxsKSx0LnRhbmdlbnQmJihoPXMubm9ybWFsaXplKHMuY3Jvc3MobCxtLGgpLGgpKSksdC5ub3JtYWwmJihhW2YrK109bS54LGFbZisrXT1tLnksYVtmKytdPW0ueixhW2YrK109bS54LGFbZisrXT1tLnksYVtmKytdPW0ueiksdC50YW5nZW50JiYocltkKytdPWgueCxyW2QrK109aC55LHJbZCsrXT1oLnoscltkKytdPWgueCxyW2QrK109aC55LHJbZCsrXT1oLnopLHQuYml0YW5nZW50JiYoaVtjKytdPWwueCxpW2MrK109bC55LGlbYysrXT1sLnosaVtjKytdPWwueCxpW2MrK109bC55LGlbYysrXT1sLnopfXJldHVybiBVUih0LHtwb3NpdGlvbnM6ZSxub3JtYWxzOmEsdGFuZ2VudHM6cixiaXRhbmdlbnRzOml9KX1mdW5jdGlvbiBqUihlLHQpe2xldCBuPWUuX3ZlcnRleEZvcm1hdCxvPWUuX2VsbGlwc29pZCxhPXQuaGVpZ2h0LHI9dC53aWR0aCxpPXQubm9ydGhDYXAsZj10LnNvdXRoQ2FwLGQ9MCxjPWEsdT1hLGw9MDtpJiYoZD0xLHUtPTEsbCs9MSksZiYmKGMtPTEsdS09MSxsKz0xKSxsKz1yKnU7bGV0IGg9bi5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KGwqMyk6dm9pZCAwLG09bi5zdD9uZXcgRmxvYXQzMkFycmF5KGwqMik6dm9pZCAwLGI9MCxwPTAseT1YZyxFPUNELF89TnVtYmVyLk1BWF9WQUxVRSxUPU51bWJlci5NQVhfVkFMVUUsdz0tTnVtYmVyLk1BWF9WQUxVRSxSPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgQT1kO0E8YzsrK0EpZm9yKGxldCB4PTA7eDxyOysreClPby5jb21wdXRlUG9zaXRpb24odCxvLG4uc3QsQSx4LHksRSksaFtiKytdPXkueCxoW2IrK109eS55LGhbYisrXT15Lnosbi5zdCYmKG1bcCsrXT1FLngsbVtwKytdPUUueSxfPU1hdGgubWluKF8sRS54KSxUPU1hdGgubWluKFQsRS55KSx3PU1hdGgubWF4KHcsRS54KSxSPU1hdGgubWF4KFIsRS55KSk7aWYoaSYmKE9vLmNvbXB1dGVQb3NpdGlvbih0LG8sbi5zdCwwLDAseSxFKSxoW2IrK109eS54LGhbYisrXT15LnksaFtiKytdPXkueixuLnN0JiYobVtwKytdPUUueCxtW3ArK109RS55LF89RS54LFQ9RS55LHc9RS54LFI9RS55KSksZiYmKE9vLmNvbXB1dGVQb3NpdGlvbih0LG8sbi5zdCxhLTEsMCx5LEUpLGhbYisrXT15LngsaFtiKytdPXkueSxoW2JdPXkueixuLnN0JiYobVtwKytdPUUueCxtW3BdPUUueSxfPU1hdGgubWluKF8sRS54KSxUPU1hdGgubWluKFQsRS55KSx3PU1hdGgubWF4KHcsRS54KSxSPU1hdGgubWF4KFIsRS55KSkpLG4uc3QmJihfPDB8fFQ8MHx8dz4xfHxSPjEpKWZvcihsZXQgQT0wO0E8bS5sZW5ndGg7QSs9MiltW0FdPShtW0FdLV8pLyh3LV8pLG1bQSsxXT0obVtBKzFdLVQpLyhSLVQpO2xldCBTPUlEKGgsbixvLHQudGFuZ2VudFJvdGF0aW9uTWF0cml4KSxDPTYqKHItMSkqKHUtMSk7aSYmKEMrPTMqKHItMSkpLGYmJihDKz0zKihyLTEpKTtsZXQgST1rZS5jcmVhdGVUeXBlZEFycmF5KGwsQyksTj0wLFA9MCx2O2Zvcih2PTA7djx1LTE7Kyt2KXtmb3IobGV0IEE9MDtBPHItMTsrK0Epe2xldCB4PU4sTT14K3IsRj1NKzEsVT14KzE7SVtQKytdPXgsSVtQKytdPU0sSVtQKytdPVUsSVtQKytdPVUsSVtQKytdPU0sSVtQKytdPUYsKytOfSsrTn1pZihpfHxmKXtsZXQgQT1sLTEseD1sLTE7aSYmZiYmKEE9bC0yKTtsZXQgTSxGO2lmKE49MCxpKWZvcih2PTA7djxyLTE7disrKU09TixGPU0rMSxJW1ArK109QSxJW1ArK109TSxJW1ArK109RiwrK047aWYoZilmb3IoTj0odS0xKSpyLHY9MDt2PHItMTt2KyspTT1OLEY9TSsxLElbUCsrXT1NLElbUCsrXT14LElbUCsrXT1GLCsrTn1yZXR1cm4gUy5pbmRpY2VzPUksbi5zdCYmKFMuYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bX0pKSxTfWZ1bmN0aW9uIHZzKGUsdCxuLG8sYSl7cmV0dXJuIGVbdCsrXT1vW25dLGVbdCsrXT1vW24rMV0sZVt0KytdPW9bbisyXSxlW3QrK109YVtuXSxlW3QrK109YVtuKzFdLGVbdF09YVtuKzJdLGV9ZnVuY3Rpb24gRnMoZSx0LG4sbyl7cmV0dXJuIGVbdCsrXT1vW25dLGVbdCsrXT1vW24rMV0sZVt0KytdPW9bbl0sZVt0XT1vW24rMV0sZX1mdW5jdGlvbiBrRChlLHQpe2xldCBuPWUuX3NoYWRvd1ZvbHVtZSxvPWUuX29mZnNldEF0dHJpYnV0ZSxhPWUuX3ZlcnRleEZvcm1hdCxyPWUuX2V4dHJ1ZGVkSGVpZ2h0LGk9ZS5fc3VyZmFjZUhlaWdodCxmPWUuX2VsbGlwc29pZCxkPXQuaGVpZ2h0LGM9dC53aWR0aCx1O2lmKG4pe2xldCBqZT1oZS5jbG9uZShhLEpnKTtqZS5ub3JtYWw9ITAsZS5fdmVydGV4Rm9ybWF0PWplfWxldCBsPWpSKGUsdCk7biYmKGUuX3ZlcnRleEZvcm1hdD1hKTtsZXQgaD1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLGYsITEpO2g9bmV3IEZsb2F0NjRBcnJheShoKTtsZXQgbT1oLmxlbmd0aCxiPW0qMixwPW5ldyBGbG9hdDY0QXJyYXkoYik7cC5zZXQoaCk7bGV0IHk9U3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscixmKTtwLnNldCh5LG0pLGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9cDtsZXQgRT1hLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGIpOnZvaWQgMCxfPWEudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGIpOnZvaWQgMCxUPWEuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYik6dm9pZCAwLHc9YS5zdD9uZXcgRmxvYXQzMkFycmF5KGIvMyoyKTp2b2lkIDAsUixTO2lmKGEubm9ybWFsKXtmb3IoUz1sLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxFLnNldChTKSx1PTA7dTxtO3UrKylTW3VdPS1TW3VdO0Uuc2V0KFMsbSksbC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM9RX1pZihuKXtTPWwuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLGEubm9ybWFsfHwobC5hdHRyaWJ1dGVzLm5vcm1hbD12b2lkIDApO2xldCBqZT1uZXcgRmxvYXQzMkFycmF5KGIpO2Zvcih1PTA7dTxtO3UrKylTW3VdPS1TW3VdO2plLnNldChTLG0pLGwuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpqZX0pfWxldCBDLEk9ZyhvKTtpZihJKXtsZXQgamU9bS8zKjIsaXQ9bmV3IFVpbnQ4QXJyYXkoamUpO289PT1zdC5UT1A/aXQ9aXQuZmlsbCgxLDAsamUvMik6KEM9bz09PXN0Lk5PTkU/MDoxLGl0PWl0LmZpbGwoQykpLGwuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczppdH0pfWlmKGEudGFuZ2VudCl7bGV0IGplPWwuYXR0cmlidXRlcy50YW5nZW50LnZhbHVlcztmb3IoXy5zZXQoamUpLHU9MDt1PG07dSsrKWplW3VdPS1qZVt1XTtfLnNldChqZSxtKSxsLmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZXM9X31pZihhLmJpdGFuZ2VudCl7bGV0IGplPWwuYXR0cmlidXRlcy5iaXRhbmdlbnQudmFsdWVzO1Quc2V0KGplKSxULnNldChqZSxtKSxsLmF0dHJpYnV0ZXMuYml0YW5nZW50LnZhbHVlcz1UfWEuc3QmJihSPWwuYXR0cmlidXRlcy5zdC52YWx1ZXMsdy5zZXQoUiksdy5zZXQoUixtLzMqMiksbC5hdHRyaWJ1dGVzLnN0LnZhbHVlcz13KTtsZXQgTj1sLmluZGljZXMsUD1OLmxlbmd0aCx2PW0vMyxBPWtlLmNyZWF0ZVR5cGVkQXJyYXkoYi8zLFAqMik7Zm9yKEEuc2V0KE4pLHU9MDt1PFA7dSs9MylBW3UrUF09Tlt1KzJdK3YsQVt1KzErUF09Tlt1KzFdK3YsQVt1KzIrUF09Tlt1XSt2O2wuaW5kaWNlcz1BO2xldCB4PXQubm9ydGhDYXAsTT10LnNvdXRoQ2FwLEY9ZCxVPTIsej0wLEQ9NCxHPTQ7eCYmKFUtPTEsRi09MSx6Kz0xLEQtPTIsRy09MSksTSYmKFUtPTEsRi09MSx6Kz0xLEQtPTIsRy09MSkseis9VSpjKzIqRi1EO2xldCBIPSh6K0cpKjIsTz1uZXcgRmxvYXQ2NEFycmF5KEgqMyksWj1uP25ldyBGbG9hdDMyQXJyYXkoSCozKTp2b2lkIDAsb2U9ST9uZXcgVWludDhBcnJheShIKTp2b2lkIDAsY2U9YS5zdD9uZXcgRmxvYXQzMkFycmF5KEgqMik6dm9pZCAwLGRlPW89PT1zdC5UT1A7SSYmIWRlJiYoQz1vPT09c3QuQUxMPzE6MCxvZT1vZS5maWxsKEMpKTtsZXQgZWU9MCxtZT0wLGxlPTAsYmU9MCxmZT1jKkYsYWU7Zm9yKHU9MDt1PGZlO3UrPWMpYWU9dSozLE89dnMoTyxlZSxhZSxoLHkpLGVlKz02LGEuc3QmJihjZT1GcyhjZSxtZSx1KjIsUiksbWUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGRlJiYob2VbYmUrK109MSxiZSs9MSk7aWYoTSl7bGV0IGplPXg/ZmUrMTpmZTtmb3IoYWU9amUqMyx1PTA7dTwyO3UrKylPPXZzKE8sZWUsYWUsaCx5KSxlZSs9NixhLnN0JiYoY2U9RnMoY2UsbWUsamUqMixSKSxtZSs9NCksbiYmKGxlKz0zLFpbbGUrK109U1thZV0sWltsZSsrXT1TW2FlKzFdLFpbbGUrK109U1thZSsyXSksZGUmJihvZVtiZSsrXT0xLGJlKz0xKX1lbHNlIGZvcih1PWZlLWM7dTxmZTt1KyspYWU9dSozLE89dnMoTyxlZSxhZSxoLHkpLGVlKz02LGEuc3QmJihjZT1GcyhjZSxtZSx1KjIsUiksbWUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGRlJiYob2VbYmUrK109MSxiZSs9MSk7Zm9yKHU9ZmUtMTt1PjA7dS09YylhZT11KjMsTz12cyhPLGVlLGFlLGgseSksZWUrPTYsYS5zdCYmKGNlPUZzKGNlLG1lLHUqMixSKSxtZSs9NCksbiYmKGxlKz0zLFpbbGUrK109U1thZV0sWltsZSsrXT1TW2FlKzFdLFpbbGUrK109U1thZSsyXSksZGUmJihvZVtiZSsrXT0xLGJlKz0xKTtpZih4KXtsZXQgamU9ZmU7Zm9yKGFlPWplKjMsdT0wO3U8Mjt1KyspTz12cyhPLGVlLGFlLGgseSksZWUrPTYsYS5zdCYmKGNlPUZzKGNlLG1lLGplKjIsUiksbWUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGRlJiYob2VbYmUrK109MSxiZSs9MSl9ZWxzZSBmb3IodT1jLTE7dT49MDt1LS0pYWU9dSozLE89dnMoTyxlZSxhZSxoLHkpLGVlKz02LGEuc3QmJihjZT1GcyhjZSxtZSx1KjIsUiksbWUrPTQpLG4mJihsZSs9MyxaW2xlKytdPVNbYWVdLFpbbGUrK109U1thZSsxXSxaW2xlKytdPVNbYWUrMl0pLGRlJiYob2VbYmUrK109MSxiZSs9MSk7bGV0IFJlPVBEKE8sYSxmKTthLnN0JiYoUmUuYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Y2V9KSksbiYmKFJlLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Wn0pKSxJJiYoUmUuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpvZX0pKTtsZXQgTmU9a2UuY3JlYXRlVHlwZWRBcnJheShILHoqNiksSmUsV2UsdHQsWGU7bT1PLmxlbmd0aC8zO2xldCBMZT0wO2Zvcih1PTA7dTxtLTE7dSs9Mil7SmU9dSxYZT0oSmUrMiklbTtsZXQgamU9cy5mcm9tQXJyYXkoTyxKZSozLFlnKSxpdD1zLmZyb21BcnJheShPLFhlKjMsTFIpO3MuZXF1YWxzRXBzaWxvbihqZSxpdCxrLkVQU0lMT04xMCl8fChXZT0oSmUrMSklbSx0dD0oV2UrMiklbSxOZVtMZSsrXT1KZSxOZVtMZSsrXT1XZSxOZVtMZSsrXT1YZSxOZVtMZSsrXT1YZSxOZVtMZSsrXT1XZSxOZVtMZSsrXT10dCl9cmV0dXJuIFJlLmluZGljZXM9TmUsUmU9SHQuY29tYmluZUluc3RhbmNlcyhbbmV3IHBvKHtnZW9tZXRyeTpsfSksbmV3IHBvKHtnZW9tZXRyeTpSZX0pXSksUmVbMF19ZnVuY3Rpb24gWmcoZSx0LG4sbyxhKXtpZihuPT09MClyZXR1cm4gU2UuY2xvbmUoZSxhKTtsZXQgcj1Pby5jb21wdXRlT3B0aW9ucyhlLHQsbiwwLEJSLHpSKSxpPXIuaGVpZ2h0LGY9ci53aWR0aCxkPXZEO3JldHVybiBPby5jb21wdXRlUG9zaXRpb24ocixvLCExLDAsMCxkWzBdKSxPby5jb21wdXRlUG9zaXRpb24ocixvLCExLDAsZi0xLGRbMV0pLE9vLmNvbXB1dGVQb3NpdGlvbihyLG8sITEsaS0xLDAsZFsyXSksT28uY29tcHV0ZVBvc2l0aW9uKHIsbywhMSxpLTEsZi0xLGRbM10pLFNlLmZyb21DYXJ0ZXNpYW5BcnJheShkLG8sYSl9ZnVuY3Rpb24gQXIoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5yZWN0YW5nbGUsbj1lLmhlaWdodD8/MCxvPWUuZXh0cnVkZWRIZWlnaHQ/P247dGhpcy5fcmVjdGFuZ2xlPVNlLmNsb25lKHQpLHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1xLmNsb25lKGUuZWxsaXBzb2lkPz9xLmRlZmF1bHQpLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgobixvKSx0aGlzLl9yb3RhdGlvbj1lLnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249ZS5zdFJvdGF0aW9uPz8wLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShlLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obixvKSx0aGlzLl9zaGFkb3dWb2x1bWU9ZS5zaGFkb3dWb2x1bWU/PyExLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9ZS5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcm90YXRlZFJlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDB9ZnVuY3Rpb24gekQoZSl7aWYoZS5fc3RSb3RhdGlvbj09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgdD1TZS5jbG9uZShlLl9yZWN0YW5nbGUsa1IpLG49ZS5fZ3JhbnVsYXJpdHksbz1lLl9lbGxpcHNvaWQsYT1lLl9yb3RhdGlvbi1lLl9zdFJvdGF0aW9uLHI9WmcodCxuLGEsbyxrUiksaT1VRDtpWzBdLng9ci53ZXN0LGlbMF0ueT1yLnNvdXRoLGlbMV0ueD1yLndlc3QsaVsxXS55PXIubm9ydGgsaVsyXS54PXIuZWFzdCxpWzJdLnk9ci5zb3V0aDtsZXQgZj1lLnJlY3RhbmdsZSxkPVFvLmZyb21Sb3RhdGlvbihlLl9zdFJvdGF0aW9uLExEKSxjPVNlLmNlbnRlcihmLGpEKTtmb3IobGV0IGI9MDtiPDM7KytiKXtsZXQgcD1pW2JdO3AueC09Yy5sb25naXR1ZGUscC55LT1jLmxhdGl0dWRlLFFvLm11bHRpcGx5QnlWZWN0b3IoZCxwLHApLHAueCs9Yy5sb25naXR1ZGUscC55Kz1jLmxhdGl0dWRlLHAueD0ocC54LWYud2VzdCkvZi53aWR0aCxwLnk9KHAueS1mLnNvdXRoKS9mLmhlaWdodH1sZXQgdT1pWzBdLGw9aVsxXSxoPWlbMl0sbT1uZXcgQXJyYXkoNik7cmV0dXJuIFkucGFjayh1LG0pLFkucGFjayhsLG0sMiksWS5wYWNrKGgsbSw0KSxtfXZhciBYZyx2UixGUixEUixCUixDRCxNRCxORCxZZyxMUixKZyx2RCx6UixGRCxHUixWUixCaSxERCxQUixCRCxrUixVRCxMRCxqRCxRZyxIUj1YKCgpPT57TXQoKTtqdCgpO0llKCk7RXQoKTt2dCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO2RjKCk7em8oKTtscigpO25uKCk7R2UoKTtTZigpO0RuKCk7SmEoKTtjbigpO0pvKCk7X24oKTtXZygpO2tvKCk7WGc9bmV3IHMsdlI9bmV3IHMsRlI9bmV3IHMsRFI9bmV3IHMsQlI9bmV3IFNlLENEPW5ldyBZLE1EPW5ldyBnZSxORD1uZXcgZ2U7WWc9bmV3IHMsTFI9bmV3IHM7Smc9bmV3IGhlO3ZEPVtuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc10selI9bmV3IHJlLEZEPW5ldyByZTtBci5wYWNrZWRMZW5ndGg9U2UucGFja2VkTGVuZ3RoK3EucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCs3O0FyLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsU2UucGFjayhlLl9yZWN0YW5nbGUsdCxuKSxuKz1TZS5wYWNrZWRMZW5ndGgscS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLGhlLnBhY2soZS5fdmVydGV4Rm9ybWF0LHQsbiksbis9aGUucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9ncmFudWxhcml0eSx0W24rK109ZS5fc3VyZmFjZUhlaWdodCx0W24rK109ZS5fcm90YXRpb24sdFtuKytdPWUuX3N0Um90YXRpb24sdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbisrXT1lLl9zaGFkb3dWb2x1bWU/MTowLHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTtHUj1uZXcgU2UsVlI9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxCaT17cmVjdGFuZ2xlOkdSLGVsbGlwc29pZDpWUix2ZXJ0ZXhGb3JtYXQ6SmcsZ3JhbnVsYXJpdHk6dm9pZCAwLGhlaWdodDp2b2lkIDAscm90YXRpb246dm9pZCAwLHN0Um90YXRpb246dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O0FyLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPVNlLnVucGFjayhlLHQsR1IpO3QrPVNlLnBhY2tlZExlbmd0aDtsZXQgYT1xLnVucGFjayhlLHQsVlIpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhlLHQsSmcpO3QrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1lW3QrK10sZj1lW3QrK10sZD1lW3QrK10sYz1lW3QrK10sdT1lW3QrK10sbD1lW3QrK109PT0xLGg9ZVt0XTtyZXR1cm4gZyhuKT8obi5fcmVjdGFuZ2xlPVNlLmNsb25lKG8sbi5fcmVjdGFuZ2xlKSxuLl9lbGxpcHNvaWQ9cS5jbG9uZShhLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsbi5fdmVydGV4Rm9ybWF0KSxuLl9ncmFudWxhcml0eT1pLG4uX3N1cmZhY2VIZWlnaHQ9ZixuLl9yb3RhdGlvbj1kLG4uX3N0Um90YXRpb249YyxuLl9leHRydWRlZEhlaWdodD11LG4uX3NoYWRvd1ZvbHVtZT1sLG4uX29mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbik6KEJpLmdyYW51bGFyaXR5PWksQmkuaGVpZ2h0PWYsQmkucm90YXRpb249ZCxCaS5zdFJvdGF0aW9uPWMsQmkuZXh0cnVkZWRIZWlnaHQ9dSxCaS5zaGFkb3dWb2x1bWU9bCxCaS5vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLG5ldyBBcihCaSkpfTtBci5jb21wdXRlUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IG49ZS5yZWN0YW5nbGUsbz1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxhPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQscj1lLnJvdGF0aW9uPz8wO3JldHVybiBaZyhuLG8scixhLHQpfTtERD1uZXcgSixQUj1uZXcgUWUsQkQ9bmV3IHJlO0FyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2lmKGsuZXF1YWxzRXBzaWxvbihlLl9yZWN0YW5nbGUubm9ydGgsZS5fcmVjdGFuZ2xlLnNvdXRoLGsuRVBTSUxPTjEwKXx8ay5lcXVhbHNFcHNpbG9uKGUuX3JlY3RhbmdsZS5lYXN0LGUuX3JlY3RhbmdsZS53ZXN0LGsuRVBTSUxPTjEwKSlyZXR1cm47bGV0IHQ9ZS5fcmVjdGFuZ2xlLG49ZS5fZWxsaXBzb2lkLG89ZS5fcm90YXRpb24sYT1lLl9zdFJvdGF0aW9uLHI9ZS5fdmVydGV4Rm9ybWF0LGk9T28uY29tcHV0ZU9wdGlvbnModCxlLl9ncmFudWxhcml0eSxvLGEsQlIselIsRkQpLGY9REQ7aWYoYSE9PTB8fG8hPT0wKXtsZXQgbT1TZS5jZW50ZXIodCxCRCksYj1uLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYyhtLFlnKTtRZS5mcm9tQXhpc0FuZ2xlKGIsLWEsUFIpLEouZnJvbVF1YXRlcm5pb24oUFIsZil9ZWxzZSBKLmNsb25lKEouSURFTlRJVFksZik7bGV0IGQ9ZS5fc3VyZmFjZUhlaWdodCxjPWUuX2V4dHJ1ZGVkSGVpZ2h0LHU9IWsuZXF1YWxzRXBzaWxvbihkLGMsMCxrLkVQU0lMT04yKTtpLmxvblNjYWxhcj0xL2UuX3JlY3RhbmdsZS53aWR0aCxpLmxhdFNjYWxhcj0xL2UuX3JlY3RhbmdsZS5oZWlnaHQsaS50YW5nZW50Um90YXRpb25NYXRyaXg9ZjtsZXQgbCxoO2lmKHQ9ZS5fcmVjdGFuZ2xlLHUpe2w9a0QoZSxpKTtsZXQgbT1nZS5mcm9tUmVjdGFuZ2xlM0QodCxuLGQsTkQpLGI9Z2UuZnJvbVJlY3RhbmdsZTNEKHQsbixjLE1EKTtoPWdlLnVuaW9uKG0sYil9ZWxzZXtpZihsPWpSKGUsaSksbC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxkLG4sITEpLGcoZS5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IG09bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsYj1lLl9vZmZzZXRBdHRyaWJ1dGU9PT1zdC5OT05FPzA6MSxwPW5ldyBVaW50OEFycmF5KG0vMykuZmlsbChiKTtsLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfWg9Z2UuZnJvbVJlY3RhbmdsZTNEKHQsbixkKX1yZXR1cm4gci5wb3NpdGlvbnx8ZGVsZXRlIGwuYXR0cmlidXRlcy5wb3NpdGlvbixuZXcgdmUoe2F0dHJpYnV0ZXM6bC5hdHRyaWJ1dGVzLGluZGljZXM6bC5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6bC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmgsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTtBci5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUuX2dyYW51bGFyaXR5LGE9ZS5fZWxsaXBzb2lkLHI9dChvLGEpLGk9bihvLGEpO3JldHVybiBuZXcgQXIoe3JlY3RhbmdsZTplLl9yZWN0YW5nbGUscm90YXRpb246ZS5fcm90YXRpb24sZWxsaXBzb2lkOmEsc3RSb3RhdGlvbjplLl9zdFJvdGF0aW9uLGdyYW51bGFyaXR5Om8sZXh0cnVkZWRIZWlnaHQ6aSxoZWlnaHQ6cix2ZXJ0ZXhGb3JtYXQ6aGUuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITB9KX07a1I9bmV3IFNlLFVEPVtuZXcgWSxuZXcgWSxuZXcgWV0sTEQ9bmV3IFFvLGpEPW5ldyByZTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBci5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fcm90YXRlZFJlY3RhbmdsZSl8fCh0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlPVpnKHRoaXMuX3JlY3RhbmdsZSx0aGlzLl9ncmFudWxhcml0eSx0aGlzLl9yb3RhdGlvbix0aGlzLl9lbGxpcHNvaWQpKSx0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXpEKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtRZz1Bcn0pO3ZhciAkZz17fTtydCgkZyx7ZGVmYXVsdDooKT0+VkR9KTtmdW5jdGlvbiBHRChlLHQpe3JldHVybiBnKHQpJiYoZT1RZy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxlLl9yZWN0YW5nbGU9U2UuY2xvbmUoZS5fcmVjdGFuZ2xlKSxRZy5jcmVhdGVHZW9tZXRyeShlKX12YXIgVkQsZV89WCgoKT0+e3NlKCk7cWUoKTtfbigpO0hSKCk7VkQ9R0R9KTtmdW5jdGlvbiBLUihlLHQpe2xldCBuPWUuX2VsbGlwc29pZCxvPXQuaGVpZ2h0LGE9dC53aWR0aCxyPXQubm9ydGhDYXAsaT10LnNvdXRoQ2FwLGY9byxkPTIsYz0wLHU9NDtyJiYoZC09MSxmLT0xLGMrPTEsdS09MiksaSYmKGQtPTEsZi09MSxjKz0xLHUtPTIpLGMrPWQqYSsyKmYtdTtsZXQgbD1uZXcgRmxvYXQ2NEFycmF5KGMqMyksaD0wLG09MCxiLHA9cUQ7aWYocilPby5jb21wdXRlUG9zaXRpb24odCxuLCExLG0sMCxwKSxsW2grK109cC54LGxbaCsrXT1wLnksbFtoKytdPXAuejtlbHNlIGZvcihiPTA7YjxhO2IrKylPby5jb21wdXRlUG9zaXRpb24odCxuLCExLG0sYixwKSxsW2grK109cC54LGxbaCsrXT1wLnksbFtoKytdPXAuejtmb3IoYj1hLTEsbT0xO208bzttKyspT28uY29tcHV0ZVBvc2l0aW9uKHQsbiwhMSxtLGIscCksbFtoKytdPXAueCxsW2grK109cC55LGxbaCsrXT1wLno7aWYobT1vLTEsIWkpZm9yKGI9YS0yO2I+PTA7Yi0tKU9vLmNvbXB1dGVQb3NpdGlvbih0LG4sITEsbSxiLHApLGxbaCsrXT1wLngsbFtoKytdPXAueSxsW2grK109cC56O2ZvcihiPTAsbT1vLTI7bT4wO20tLSlPby5jb21wdXRlUG9zaXRpb24odCxuLCExLG0sYixwKSxsW2grK109cC54LGxbaCsrXT1wLnksbFtoKytdPXAuejtsZXQgeT1sLmxlbmd0aC8zKjIsRT1rZS5jcmVhdGVUeXBlZEFycmF5KGwubGVuZ3RoLzMseSksXz0wO2ZvcihsZXQgdz0wO3c8bC5sZW5ndGgvMy0xO3crKylFW18rK109dyxFW18rK109dysxO0VbXysrXT1sLmxlbmd0aC8zLTEsRVtfKytdPTA7bGV0IFQ9bmV3IHZlKHthdHRyaWJ1dGVzOm5ldyBudCxwcmltaXRpdmVUeXBlOlVlLkxJTkVTfSk7cmV0dXJuIFQuYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KSxULmluZGljZXM9RSxUfWZ1bmN0aW9uIFhEKGUsdCl7bGV0IG49ZS5fc3VyZmFjZUhlaWdodCxvPWUuX2V4dHJ1ZGVkSGVpZ2h0LGE9ZS5fZWxsaXBzb2lkLHI9S1IoZSx0KSxpPXQuaGVpZ2h0LGY9dC53aWR0aCxkPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLG4sYSwhMSksYz1kLmxlbmd0aCx1PW5ldyBGbG9hdDY0QXJyYXkoYyoyKTt1LnNldChkKTtsZXQgbD1TdC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxvLGEpO3Uuc2V0KGwsYyksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz11O2xldCBoPXQubm9ydGhDYXAsbT10LnNvdXRoQ2FwLGI9NDtoJiYoYi09MSksbSYmKGItPTEpO2xldCBwPSh1Lmxlbmd0aC8zK2IpKjIseT1rZS5jcmVhdGVUeXBlZEFycmF5KHUubGVuZ3RoLzMscCk7Yz11Lmxlbmd0aC82O2xldCBFPTA7Zm9yKGxldCBUPTA7VDxjLTE7VCsrKXlbRSsrXT1ULHlbRSsrXT1UKzEseVtFKytdPVQrYyx5W0UrK109VCtjKzE7eVtFKytdPWMtMSx5W0UrK109MCx5W0UrK109YytjLTEseVtFKytdPWMseVtFKytdPTAseVtFKytdPWM7bGV0IF87aWYoaClfPWktMTtlbHNle2xldCBUPWYtMTt5W0UrK109VCx5W0UrK109VCtjLF89ZitpLTJ9aWYoeVtFKytdPV8seVtFKytdPV8rYywhbSl7bGV0IFQ9ZitfLTE7eVtFKytdPVQseVtFXT1UK2N9cmV0dXJuIHIuaW5kaWNlcz15LHJ9ZnVuY3Rpb24gQnMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5yZWN0YW5nbGUsbj1lLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxvPWUuZWxsaXBzb2lkPz9xLmRlZmF1bHQsYT1lLnJvdGF0aW9uPz8wLHI9ZS5oZWlnaHQ/PzAsaT1lLmV4dHJ1ZGVkSGVpZ2h0Pz9yO3RoaXMuX3JlY3RhbmdsZT1TZS5jbG9uZSh0KSx0aGlzLl9ncmFudWxhcml0eT1uLHRoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgocixpKSx0aGlzLl9yb3RhdGlvbj1hLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHIsaSksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPWUub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIEhELEtELHFELFdELHFSLFdSLERzLFlELHRfLFhSPVgoKCk9PntNdCgpO0llKCk7RXQoKTt2dCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO3pvKCk7bm4oKTtHZSgpO0phKCk7Y24oKTtfbigpO1dnKCk7SEQ9bmV3IGdlLEtEPW5ldyBnZSxxRD1uZXcgcyxXRD1uZXcgU2U7QnMucGFja2VkTGVuZ3RoPVNlLnBhY2tlZExlbmd0aCtxLnBhY2tlZExlbmd0aCs1O0JzLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4/PzAsU2UucGFjayhlLl9yZWN0YW5nbGUsdCxuKSxuKz1TZS5wYWNrZWRMZW5ndGgscS5wYWNrKGUuX2VsbGlwc29pZCx0LG4pLG4rPXEucGFja2VkTGVuZ3RoLHRbbisrXT1lLl9ncmFudWxhcml0eSx0W24rK109ZS5fc3VyZmFjZUhlaWdodCx0W24rK109ZS5fcm90YXRpb24sdFtuKytdPWUuX2V4dHJ1ZGVkSGVpZ2h0LHRbbl09ZS5fb2Zmc2V0QXR0cmlidXRlPz8tMSx0fTtxUj1uZXcgU2UsV1I9cS5jbG9uZShxLlVOSVRfU1BIRVJFKSxEcz17cmVjdGFuZ2xlOnFSLGVsbGlwc29pZDpXUixncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O0JzLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvPVNlLnVucGFjayhlLHQscVIpO3QrPVNlLnBhY2tlZExlbmd0aDtsZXQgYT1xLnVucGFjayhlLHQsV1IpO3QrPXEucGFja2VkTGVuZ3RoO2xldCByPWVbdCsrXSxpPWVbdCsrXSxmPWVbdCsrXSxkPWVbdCsrXSxjPWVbdF07cmV0dXJuIGcobik/KG4uX3JlY3RhbmdsZT1TZS5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPXEuY2xvbmUoYSxuLl9lbGxpcHNvaWQpLG4uX3N1cmZhY2VIZWlnaHQ9aSxuLl9yb3RhdGlvbj1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PWQsbi5fb2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuKTooRHMuZ3JhbnVsYXJpdHk9cixEcy5oZWlnaHQ9aSxEcy5yb3RhdGlvbj1mLERzLmV4dHJ1ZGVkSGVpZ2h0PWQsRHMub2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuZXcgQnMoRHMpKX07WUQ9bmV3IHJlO0JzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe2xldCB0PWUuX3JlY3RhbmdsZSxuPWUuX2VsbGlwc29pZCxvPU9vLmNvbXB1dGVPcHRpb25zKHQsZS5fZ3JhbnVsYXJpdHksZS5fcm90YXRpb24sMCxXRCxZRCksYSxyO2lmKGsuZXF1YWxzRXBzaWxvbih0Lm5vcnRoLHQuc291dGgsay5FUFNJTE9OMTApfHxrLmVxdWFsc0Vwc2lsb24odC5lYXN0LHQud2VzdCxrLkVQU0lMT04xMCkpcmV0dXJuO2xldCBpPWUuX3N1cmZhY2VIZWlnaHQsZj1lLl9leHRydWRlZEhlaWdodCxkPSFrLmVxdWFsc0Vwc2lsb24oaSxmLDAsay5FUFNJTE9OMiksYztpZihkKXtpZihhPVhEKGUsbyksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgaD1hLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLG09bmV3IFVpbnQ4QXJyYXkoaCk7ZS5fb2Zmc2V0QXR0cmlidXRlPT09c3QuVE9QP209bS5maWxsKDEsMCxoLzIpOihjPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxLG09bS5maWxsKGMpKSxhLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bX0pfWxldCB1PWdlLmZyb21SZWN0YW5nbGUzRCh0LG4saSxLRCksbD1nZS5mcm9tUmVjdGFuZ2xlM0QodCxuLGYsSEQpO3I9Z2UudW5pb24odSxsKX1lbHNle2lmKGE9S1IoZSxvKSxhLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVN0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChhLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGksbiwhMSksZyhlLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1hLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtjPWUuX29mZnNldEF0dHJpYnV0ZT09PXN0Lk5PTkU/MDoxO2xldCBsPW5ldyBVaW50OEFycmF5KHUvMykuZmlsbChjKTthLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXI9Z2UuZnJvbVJlY3RhbmdsZTNEKHQsbixpKX1yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOmEuYXR0cmlidXRlcyxpbmRpY2VzOmEuaW5kaWNlcyxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOnIsb2Zmc2V0QXR0cmlidXRlOmUuX29mZnNldEF0dHJpYnV0ZX0pfTt0Xz1Cc30pO3ZhciBuXz17fTtydChuXyx7ZGVmYXVsdDooKT0+WkR9KTtmdW5jdGlvbiBKRChlLHQpe3JldHVybiBnKHQpJiYoZT10Xy51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxlLl9yZWN0YW5nbGU9U2UuY2xvbmUoZS5fcmVjdGFuZ2xlKSx0Xy5jcmVhdGVHZW9tZXRyeShlKX12YXIgWkQsb189WCgoKT0+e3NlKCk7cWUoKTtfbigpO1hSKCk7WkQ9SkR9KTtmdW5jdGlvbiBRRChlLHQsbixvLGEscixpKXtsZXQgZj1Bbi5udW1iZXJPZlBvaW50cyhlLHQsYSksZCxjPW4ucmVkLHU9bi5ncmVlbixsPW4uYmx1ZSxoPW4uYWxwaGEsbT1vLnJlZCxiPW8uZ3JlZW4scD1vLmJsdWUseT1vLmFscGhhO2lmKGV0LmVxdWFscyhuLG8pKXtmb3IoZD0wO2Q8ZjtkKyspcltpKytdPWV0LmZsb2F0VG9CeXRlKGMpLHJbaSsrXT1ldC5mbG9hdFRvQnl0ZSh1KSxyW2krK109ZXQuZmxvYXRUb0J5dGUobCkscltpKytdPWV0LmZsb2F0VG9CeXRlKGgpO3JldHVybiBpfWxldCBFPShtLWMpL2YsXz0oYi11KS9mLFQ9KHAtbCkvZix3PSh5LWgpL2YsUj1pO2ZvcihkPTA7ZDxmO2QrKylyW1IrK109ZXQuZmxvYXRUb0J5dGUoYytkKkUpLHJbUisrXT1ldC5mbG9hdFRvQnl0ZSh1K2QqXykscltSKytdPWV0LmZsb2F0VG9CeXRlKGwrZCpUKSxyW1IrK109ZXQuZmxvYXRUb0J5dGUoaCtkKncpO3JldHVybiBSfWZ1bmN0aW9uIGxkKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zLG49ZS5jb2xvcnMsbz1lLmNvbG9yc1BlclZlcnRleD8/ITE7dGhpcy5fcG9zaXRpb25zPXQsdGhpcy5fY29sb3JzPW4sdGhpcy5fY29sb3JzUGVyVmVydGV4PW8sdGhpcy5fYXJjVHlwZT1lLmFyY1R5cGU/P3d0LkdFT0RFU0lDLHRoaXMuX2dyYW51bGFyaXR5PWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNpbXBsZVBvbHlsaW5lR2VvbWV0cnkiO2xldCBhPTErdC5sZW5ndGgqcy5wYWNrZWRMZW5ndGg7YSs9ZyhuKT8xK24ubGVuZ3RoKmV0LnBhY2tlZExlbmd0aDoxLHRoaXMucGFja2VkTGVuZ3RoPWErcS5wYWNrZWRMZW5ndGgrM312YXIgVmgsSGgsJEQsYV8sWVI9WCgoKT0+e2hjKCk7TXQoKTtJZSgpO2tzKCk7dnQoKTttdCgpO3NlKCk7cWUoKTskdCgpO2VuKCk7dW4oKTtubigpO0dlKCk7d3MoKTtjbigpO2xkLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe249bj8/MDtsZXQgbyxhPWUuX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2Zvcih0W24rK109cixvPTA7bzxyOysrbyxuKz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSx0LG4pO2xldCBpPWUuX2NvbG9ycztmb3Iocj1nKGkpP2kubGVuZ3RoOjAsdFtuKytdPXIsbz0wO288cjsrK28sbis9ZXQucGFja2VkTGVuZ3RoKWV0LnBhY2soaVtvXSx0LG4pO3JldHVybiBxLnBhY2soZS5fZWxsaXBzb2lkLHQsbiksbis9cS5wYWNrZWRMZW5ndGgsdFtuKytdPWUuX2NvbG9yc1BlclZlcnRleD8xOjAsdFtuKytdPWUuX2FyY1R5cGUsdFtuXT1lLl9ncmFudWxhcml0eSx0fTtsZC51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpPWE+MD9uZXcgQXJyYXkoYSk6dm9pZCAwO2ZvcihvPTA7bzxhOysrbyx0Kz1ldC5wYWNrZWRMZW5ndGgpaVtvXT1ldC51bnBhY2soZSx0KTtsZXQgZj1xLnVucGFjayhlLHQpO3QrPXEucGFja2VkTGVuZ3RoO2xldCBkPWVbdCsrXT09PTEsYz1lW3QrK10sdT1lW3RdO3JldHVybiBnKG4pPyhuLl9wb3NpdGlvbnM9cixuLl9jb2xvcnM9aSxuLl9lbGxpcHNvaWQ9ZixuLl9jb2xvcnNQZXJWZXJ0ZXg9ZCxuLl9hcmNUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9dSxuKTpuZXcgbGQoe3Bvc2l0aW9uczpyLGNvbG9yczppLGVsbGlwc29pZDpmLGNvbG9yc1BlclZlcnRleDpkLGFyY1R5cGU6YyxncmFudWxhcml0eTp1fSl9O1ZoPW5ldyBBcnJheSgyKSxIaD1uZXcgQXJyYXkoMiksJEQ9e3Bvc2l0aW9uczpWaCxoZWlnaHQ6SGgsZWxsaXBzb2lkOnZvaWQgMCxtaW5EaXN0YW5jZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtsZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihlKXtsZXQgdD1lLl9wb3NpdGlvbnMsbj1lLl9jb2xvcnMsbz1lLl9jb2xvcnNQZXJWZXJ0ZXgsYT1lLl9hcmNUeXBlLHI9ZS5fZ3JhbnVsYXJpdHksaT1lLl9lbGxpcHNvaWQsZj1rLmNob3JkTGVuZ3RoKHIsaS5tYXhpbXVtUmFkaXVzKSxkPWcobikmJiFvLGMsdT10Lmxlbmd0aCxsLGgsbSxiLHA9MDtpZihhPT09d3QuR0VPREVTSUN8fGE9PT13dC5SSFVNQil7bGV0IHcsUixTO2E9PT13dC5HRU9ERVNJQz8odz1rLmNob3JkTGVuZ3RoKHIsaS5tYXhpbXVtUmFkaXVzKSxSPUFuLm51bWJlck9mUG9pbnRzLFM9QW4uZ2VuZXJhdGVBcmMpOih3PXIsUj1Bbi5udW1iZXJPZlBvaW50c1JodW1iTGluZSxTPUFuLmdlbmVyYXRlUmh1bWJBcmMpO2xldCBDPUFuLmV4dHJhY3RIZWlnaHRzKHQsaSksST0kRDtpZihhPT09d3QuR0VPREVTSUM/SS5taW5EaXN0YW5jZT1mOkkuZ3JhbnVsYXJpdHk9cixJLmVsbGlwc29pZD1pLGQpe2xldCBOPTA7Zm9yKGM9MDtjPHUtMTtjKyspTis9Uih0W2NdLHRbYysxXSx3KSsxO2w9bmV3IEZsb2F0NjRBcnJheShOKjMpLG09bmV3IFVpbnQ4QXJyYXkoTio0KSxJLnBvc2l0aW9ucz1WaCxJLmhlaWdodD1IaDtsZXQgUD0wO2ZvcihjPTA7Yzx1LTE7KytjKXtWaFswXT10W2NdLFZoWzFdPXRbYysxXSxIaFswXT1DW2NdLEhoWzFdPUNbYysxXTtsZXQgdj1TKEkpO2lmKGcobikpe2xldCBBPXYubGVuZ3RoLzM7Yj1uW2NdO2ZvcihsZXQgeD0wO3g8QTsrK3gpbVtQKytdPWV0LmZsb2F0VG9CeXRlKGIucmVkKSxtW1ArK109ZXQuZmxvYXRUb0J5dGUoYi5ncmVlbiksbVtQKytdPWV0LmZsb2F0VG9CeXRlKGIuYmx1ZSksbVtQKytdPWV0LmZsb2F0VG9CeXRlKGIuYWxwaGEpfWwuc2V0KHYscCkscCs9di5sZW5ndGh9fWVsc2UgaWYoSS5wb3NpdGlvbnM9dCxJLmhlaWdodD1DLGw9bmV3IEZsb2F0NjRBcnJheShTKEkpKSxnKG4pKXtmb3IobT1uZXcgVWludDhBcnJheShsLmxlbmd0aC8zKjQpLGM9MDtjPHUtMTsrK2Mpe2xldCBQPXRbY10sdj10W2MrMV0sQT1uW2NdLHg9bltjKzFdO3A9UUQoUCx2LEEseCxmLG0scCl9bGV0IE49blt1LTFdO21bcCsrXT1ldC5mbG9hdFRvQnl0ZShOLnJlZCksbVtwKytdPWV0LmZsb2F0VG9CeXRlKE4uZ3JlZW4pLG1bcCsrXT1ldC5mbG9hdFRvQnl0ZShOLmJsdWUpLG1bcCsrXT1ldC5mbG9hdFRvQnl0ZShOLmFscGhhKX19ZWxzZXtoPWQ/dSoyLTI6dSxsPW5ldyBGbG9hdDY0QXJyYXkoaCozKSxtPWcobik/bmV3IFVpbnQ4QXJyYXkoaCo0KTp2b2lkIDA7bGV0IHc9MCxSPTA7Zm9yKGM9MDtjPHU7KytjKXtsZXQgUz10W2NdO2lmKGQmJmM+MCYmKHMucGFjayhTLGwsdyksdys9MyxiPW5bYy0xXSxtW1IrK109ZXQuZmxvYXRUb0J5dGUoYi5yZWQpLG1bUisrXT1ldC5mbG9hdFRvQnl0ZShiLmdyZWVuKSxtW1IrK109ZXQuZmxvYXRUb0J5dGUoYi5ibHVlKSxtW1IrK109ZXQuZmxvYXRUb0J5dGUoYi5hbHBoYSkpLGQmJmM9PT11LTEpYnJlYWs7cy5wYWNrKFMsbCx3KSx3Kz0zLGcobikmJihiPW5bY10sbVtSKytdPWV0LmZsb2F0VG9CeXRlKGIucmVkKSxtW1IrK109ZXQuZmxvYXRUb0J5dGUoYi5ncmVlbiksbVtSKytdPWV0LmZsb2F0VG9CeXRlKGIuYmx1ZSksbVtSKytdPWV0LmZsb2F0VG9CeXRlKGIuYWxwaGEpKX19bGV0IHk9bmV3IG50O3kucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpsfSksZyhuKSYmKHkuY29sb3I9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6NCx2YWx1ZXM6bSxub3JtYWxpemU6ITB9KSksaD1sLmxlbmd0aC8zO2xldCBFPShoLTEpKjIsXz1rZS5jcmVhdGVUeXBlZEFycmF5KGgsRSksVD0wO2ZvcihjPTA7YzxoLTE7KytjKV9bVCsrXT1jLF9bVCsrXT1jKzE7cmV0dXJuIG5ldyB2ZSh7YXR0cmlidXRlczp5LGluZGljZXM6XyxwcmltaXRpdmVUeXBlOlVlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21Qb2ludHModCl9KX07YV89bGR9KTt2YXIgcl89e307cnQocl8se2RlZmF1bHQ6KCk9PnRCfSk7ZnVuY3Rpb24gZUIoZSx0KXtyZXR1cm4gZyh0KSYmKGU9YV8udW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCksYV8uY3JlYXRlR2VvbWV0cnkoZSl9dmFyIHRCLGlfPVgoKCk9PntzZSgpO3FlKCk7WVIoKTt0Qj1lQn0pO2Z1bmN0aW9uIFVzKGUpe2xldCB0PWUucmFkaXVzPz8xLG89e3JhZGlpOm5ldyBzKHQsdCx0KSxzdGFja1BhcnRpdGlvbnM6ZS5zdGFja1BhcnRpdGlvbnMsc2xpY2VQYXJ0aXRpb25zOmUuc2xpY2VQYXJ0aXRpb25zLHZlcnRleEZvcm1hdDplLnZlcnRleEZvcm1hdH07dGhpcy5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IGRhKG8pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNwaGVyZUdlb21ldHJ5In12YXIgbkIsVWksY18sSlI9WCgoKT0+e0llKCk7c2UoKTtTaCgpO2tvKCk7VXMucGFja2VkTGVuZ3RoPWRhLnBhY2tlZExlbmd0aDtVcy5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZGEucGFjayhlLl9lbGxpcHNvaWRHZW9tZXRyeSx0LG4pfTtuQj1uZXcgZGEsVWk9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IHMsdmVydGV4Rm9ybWF0Om5ldyBoZSxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDB9O1VzLnVucGFjaz1mdW5jdGlvbihlLHQsbil7bGV0IG89ZGEudW5wYWNrKGUsdCxuQik7cmV0dXJuIFVpLnZlcnRleEZvcm1hdD1oZS5jbG9uZShvLl92ZXJ0ZXhGb3JtYXQsVWkudmVydGV4Rm9ybWF0KSxVaS5zdGFja1BhcnRpdGlvbnM9by5fc3RhY2tQYXJ0aXRpb25zLFVpLnNsaWNlUGFydGl0aW9ucz1vLl9zbGljZVBhcnRpdGlvbnMsZyhuKT8ocy5jbG9uZShvLl9yYWRpaSxVaS5yYWRpaSksbi5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IGRhKFVpKSxuKTooVWkucmFkaXVzPW8uX3JhZGlpLngsbmV3IFVzKFVpKSl9O1VzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBkYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNvaWRHZW9tZXRyeSl9O2NfPVVzfSk7dmFyIHNfPXt9O3J0KHNfLHtkZWZhdWx0OigpPT5hQn0pO2Z1bmN0aW9uIG9CKGUsdCl7cmV0dXJuIGcodCkmJihlPWNfLnVucGFjayhlLHQpKSxjXy5jcmVhdGVHZW9tZXRyeShlKX12YXIgYUIsZl89WCgoKT0+e3NlKCk7SlIoKTthQj1vQn0pO2Z1bmN0aW9uIExzKGUpe2xldCB0PWUucmFkaXVzPz8xLG89e3JhZGlpOm5ldyBzKHQsdCx0KSxzdGFja1BhcnRpdGlvbnM6ZS5zdGFja1BhcnRpdGlvbnMsc2xpY2VQYXJ0aXRpb25zOmUuc2xpY2VQYXJ0aXRpb25zLHN1YmRpdmlzaW9uczplLnN1YmRpdmlzaW9uc307dGhpcy5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IFFhKG8pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeSJ9dmFyIHJCLHhjLGRfLFpSPVgoKCk9PntJZSgpO3NlKCk7cTAoKTtMcy5wYWNrZWRMZW5ndGg9UWEucGFja2VkTGVuZ3RoO0xzLnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBRYS5wYWNrKGUuX2VsbGlwc29pZEdlb21ldHJ5LHQsbil9O3JCPW5ldyBRYSx4Yz17cmFkaXVzOnZvaWQgMCxyYWRpaTpuZXcgcyxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDAsc3ViZGl2aXNpb25zOnZvaWQgMH07THMudW5wYWNrPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1RYS51bnBhY2soZSx0LHJCKTtyZXR1cm4geGMuc3RhY2tQYXJ0aXRpb25zPW8uX3N0YWNrUGFydGl0aW9ucyx4Yy5zbGljZVBhcnRpdGlvbnM9by5fc2xpY2VQYXJ0aXRpb25zLHhjLnN1YmRpdmlzaW9ucz1vLl9zdWJkaXZpc2lvbnMsZyhuKT8ocy5jbG9uZShvLl9yYWRpaSx4Yy5yYWRpaSksbi5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IFFhKHhjKSxuKTooeGMucmFkaXVzPW8uX3JhZGlpLngsbmV3IExzKHhjKSl9O0xzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3JldHVybiBRYS5jcmVhdGVHZW9tZXRyeShlLl9lbGxpcHNvaWRHZW9tZXRyeSl9O2RfPUxzfSk7dmFyIHVfPXt9O3J0KHVfLHtkZWZhdWx0OigpPT5jQn0pO2Z1bmN0aW9uIGlCKGUsdCl7cmV0dXJuIGcodCkmJihlPWRfLnVucGFjayhlLHQpKSxkXy5jcmVhdGVHZW9tZXRyeShlKX12YXIgY0IsbF89WCgoKT0+e3NlKCk7WlIoKTtjQj1pQn0pO3ZhciBoXz17fTtydChoXyx7ZGVmYXVsdDooKT0+U0J9KTtmdW5jdGlvbiB1QihlLHQsbixvLGEscixpKXtsZXQgZj1lLmxlbmd0aCxkPW5ldyBGbG9hdDY0QXJyYXkoZiozKTtmb3IobGV0IGM9MDtjPGY7KytjKXtsZXQgdT1lW2NdLGw9dFtjXSxoPW5bY10sbT1rLmxlcnAoby53ZXN0LG8uZWFzdCx1L2hkKSxiPWsubGVycChvLnNvdXRoLG8ubm9ydGgsbC9oZCkscD1rLmxlcnAoYSxyLGgvaGQpLHk9cmUuZnJvbVJhZGlhbnMobSxiLHAsZkIpLEU9aS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih5LGRCKTtzLnBhY2soRSxkLGMqMyl9cmV0dXJuIGR9ZnVuY3Rpb24gbEIoZSl7bGV0IHQ9ZS5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCsxKSxvPTA7Zm9yKGxldCBhPTA7YTx0OysrYSluW2FdPW8sbys9ZVthXTtyZXR1cm4gblt0XT1vLG59ZnVuY3Rpb24gYkIoZSx0LG4sbyl7bGV0IGE9by5sZW5ndGgscj1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KHIpLGY9aEIsZD1tQixjPTA7Zm9yKGxldCBsPTA7bDxhO2wrKyl7bGV0IGg9b1tsXSxtPWg7Zm9yKGxldCBiPTE7YjxoO2IrKyl7bGV0IHA9YytiLHk9cC0xO2QubG9uZ2l0dWRlPWVbcF0sZC5sYXRpdHVkZT10W3BdLGYubG9uZ2l0dWRlPWVbeV0sZi5sYXRpdHVkZT10W3ldLHJlLmVxdWFscyhkLGYpJiYobS0tLGlbeV09MSl9b1tsXT1tLGMrPWh9bGV0IHU9MDtmb3IobGV0IGw9MDtsPHI7bCsrKWlbbF0hPT0xJiYoZVt1XT1lW2xdLHRbdV09dFtsXSxuW3VdPW5bbF0sdSsrKX1mdW5jdGlvbiBueChlKXtsZXQgdD1lKjgsbj10KjMsbz10KjQ7dGhpcy5zdGFydEVsbGlwc29pZE5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShuKSx0aGlzLmVuZEVsbGlwc29pZE5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShuKSx0aGlzLnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLnZlcnRleEJhdGNoSWRzPW5ldyBVaW50MTZBcnJheSh0KSx0aGlzLmluZGljZXM9a2UuY3JlYXRlVHlwZWRBcnJheSh0LDM2KmUpLHRoaXMudmVjM09mZnNldD0wLHRoaXMudmVjNE9mZnNldD0wLHRoaXMuYmF0Y2hJZE9mZnNldD0wLHRoaXMuaW5kZXhPZmZzZXQ9MCx0aGlzLnZvbHVtZVN0YXJ0SW5kZXg9MH1mdW5jdGlvbiAkUihlLHQsbixvLGEpe2xldCByPXMuc3VidHJhY3Qobix0LHBCKSxpPXMuc3VidHJhY3QodCxlLFFSKTtyZXR1cm4gcy5ub3JtYWxpemUocixyKSxzLm5vcm1hbGl6ZShpLGkpLHMuZG90KHIsaSk8c0ImJihpPXMubXVsdGlwbHlCeVNjYWxhcihpLC0xLFFSKSkscy5hZGQocixpLGEpLHMuZXF1YWxzKGEscy5aRVJPKSYmKGE9cy5zdWJ0cmFjdChlLHQpKSxzLmNyb3NzKGEsbyxhKSxzLmNyb3NzKG8sYSxhKSxzLm5vcm1hbGl6ZShhLGEpLGF9ZnVuY3Rpb24gT0IoZSx0KXtsZXQgbj1uZXcgVWludDE2QXJyYXkoZS5wb3NpdGlvbnMpLG89bmV3IFVpbnQxNkFycmF5KGUud2lkdGhzKSxhPW5ldyBVaW50MzJBcnJheShlLmNvdW50cykscj1uZXcgVWludDE2QXJyYXkoZS5iYXRjaElkcyksaT13QixmPUVCLGQ9VEIsYz1uZXcgRmxvYXQ2NEFycmF5KGUucGFja2VkQnVmZmVyKSx1PTAsbD1jW3UrK10saD1jW3UrK107U2UudW5wYWNrKGMsdSxpKSx1Kz1TZS5wYWNrZWRMZW5ndGgscS51bnBhY2soYyx1LGYpLHUrPXEucGFja2VkTGVuZ3RoLHMudW5wYWNrKGMsdSxkKTtsZXQgbSxiPW4ubGVuZ3RoLzMscD1uLnN1YmFycmF5KDAsYikseT1uLnN1YmFycmF5KGIsMipiKSxFPW4uc3ViYXJyYXkoMipiLDMqYik7VnQuemlnWmFnRGVsdGFEZWNvZGUocCx5LEUpLGJCKHAseSxFLGEpO2xldCBfPWEubGVuZ3RoLFQ9MDtmb3IobT0wO208XzttKyspe2xldCB2PWFbbV07VCs9di0xfWxldCB3PW5ldyBueChUKSxSPXVCKHAseSxFLGksbCxoLGYsZCk7Yj1wLmxlbmd0aDtsZXQgUz1uZXcgRmxvYXQzMkFycmF5KGIqMyk7Zm9yKG09MDttPGI7KyttKVNbbSozXT1SW20qM10tZC54LFNbbSozKzFdPVJbbSozKzFdLWQueSxTW20qMysyXT1SW20qMysyXS1kLno7bGV0IEM9MCxJPTA7Zm9yKG09MDttPF87bSsrKXtsZXQgdj1hW21dLTEsQT1vW21dKi41LHg9clttXSxNPUM7Zm9yKGxldCBGPTA7Rjx2O0YrKyl7bGV0IFU9cy51bnBhY2soUyxDLFJCKSx6PXMudW5wYWNrKFMsQyszLHhCKSxEPUVbSV0sRz1FW0krMV07RD1rLmxlcnAobCxoLEQvaGQpLEc9ay5sZXJwKGwsaCxHL2hkKSxJKys7bGV0IEg9S2gsTz1xaDtpZihGPT09MCl7bGV0IFo9TSt2KjMsb2U9cy51bnBhY2soUyxaLEtoKTtpZihzLmVxdWFscyhvZSxVKSlzLnVucGFjayhTLFotMyxIKTtlbHNle2xldCBjZT1zLnN1YnRyYWN0KFUseixLaCk7SD1zLmFkZChjZSxVLEtoKX19ZWxzZSBzLnVucGFjayhTLEMtMyxIKTtpZihGPT09di0xKXtsZXQgWj1zLnVucGFjayhTLE0scWgpO2lmKHMuZXF1YWxzKFoseikpcy51bnBhY2soUyxNKzMsTyk7ZWxzZXtsZXQgb2U9cy5zdWJ0cmFjdCh6LFUscWgpO089cy5hZGQob2UseixxaCl9fWVsc2Ugcy51bnBhY2soUyxDKzYsTyk7dy5hZGRWb2x1bWUoSCxVLHosTyxELEcsQSx4LGQsZiksQys9M31DKz0zLEkrK31sZXQgTj13LmluZGljZXM7dC5wdXNoKHcuc3RhcnRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlciksdC5wdXNoKHcuZW5kRWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLHQucHVzaCh3LnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksdC5wdXNoKHcuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLmJ1ZmZlciksdC5wdXNoKHcuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksdC5wdXNoKHcuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMuYnVmZmVyKSx0LnB1c2gody52ZXJ0ZXhCYXRjaElkcy5idWZmZXIpLHQucHVzaChOLmJ1ZmZlcik7bGV0IFA9e2luZGV4RGF0YXR5cGU6Ti5CWVRFU19QRVJfRUxFTUVOVD09PTI/a2UuVU5TSUdORURfU0hPUlQ6a2UuVU5TSUdORURfSU5ULHN0YXJ0RWxsaXBzb2lkTm9ybWFsczp3LnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIsZW5kRWxsaXBzb2lkTm9ybWFsczp3LmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLHN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzOncuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyLHN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkczp3LnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIsZW5kUG9zaXRpb25BbmRIZWlnaHRzOncuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixlbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRoczp3LmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlcix2ZXJ0ZXhCYXRjaElkczp3LnZlcnRleEJhdGNoSWRzLmJ1ZmZlcixpbmRpY2VzOk4uYnVmZmVyfTtpZihlLmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgdj1sQihhKTt0LnB1c2goUi5idWZmZXIsdi5idWZmZXIpLFA9eWEoUCx7ZGVjb2RlZFBvc2l0aW9uczpSLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOnYuYnVmZmVyfSl9cmV0dXJuIFB9dmFyIGhkLHNCLGZCLGRCLGhCLG1CLFFSLHBCLG94LGV4LHR4LGdCLF9CLHlCLEFCLHdCLEVCLFRCLEtoLFJCLHhCLHFoLFNCLG1fPVgoKCk9PntVcigpO0llKCk7RXQoKTt1bCgpO3FlKCk7bm4oKTtHZSgpO19uKCk7VW4oKTtoZD0zMjc2NyxzQj1NYXRoLmNvcyhrLnRvUmFkaWFucygxNTApKSxmQj1uZXcgcmUsZEI9bmV3IHM7aEI9bmV3IHJlLG1CPW5ldyByZTtRUj1uZXcgcyxwQj1uZXcgcztveD1bMCwyLDYsMCw2LDQsMCwxLDMsMCwzLDIsMCw0LDUsMCw1LDEsNSwzLDEsNSw3LDMsNyw1LDQsNyw0LDYsNyw2LDIsNywyLDNdLGV4PW94Lmxlbmd0aCx0eD1uZXcgcyxnQj1uZXcgcyxfQj1uZXcgcyx5Qj1uZXcgcyxBQj1uZXcgcztueC5wcm90b3R5cGUuYWRkVm9sdW1lPWZ1bmN0aW9uKGUsdCxuLG8sYSxyLGksZixkLGMpe2xldCB1PXMuYWRkKHQsZCx0eCksbD1jLmdlb2RldGljU3VyZmFjZU5vcm1hbCh1LGdCKTt1PXMuYWRkKG4sZCx0eCk7bGV0IGg9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodSx5QiksbT0kUihlLHQsbixsLF9CKSxiPSRSKG8sbix0LGgsQUIpLHA9dGhpcy5zdGFydEVsbGlwc29pZE5vcm1hbHMseT10aGlzLmVuZEVsbGlwc29pZE5vcm1hbHMsRT10aGlzLnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLF89dGhpcy5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMsVD10aGlzLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cyx3PXRoaXMuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMsUj10aGlzLnZlcnRleEJhdGNoSWRzLFM9dGhpcy5iYXRjaElkT2Zmc2V0LEM9dGhpcy52ZWMzT2Zmc2V0LEk9dGhpcy52ZWM0T2Zmc2V0LE47Zm9yKE49MDtOPDg7TisrKXMucGFjayhsLHAsQykscy5wYWNrKGgseSxDKSxzLnBhY2sodCxFLEkpLEVbSSszXT1hLHMucGFjayhuLFQsSSksVFtJKzNdPXIscy5wYWNrKG0sXyxJKSxfW0krM109TixzLnBhY2soYix3LEkpLHdbSSszXT1pLFJbUysrXT1mLEMrPTMsSSs9NDt0aGlzLmJhdGNoSWRPZmZzZXQ9Uyx0aGlzLnZlYzNPZmZzZXQ9Qyx0aGlzLnZlYzRPZmZzZXQ9STtsZXQgUD10aGlzLmluZGljZXMsdj10aGlzLnZvbHVtZVN0YXJ0SW5kZXgsQT10aGlzLmluZGV4T2Zmc2V0O2ZvcihOPTA7TjxleDtOKyspUFtBK05dPW94W05dK3Y7dGhpcy52b2x1bWVTdGFydEluZGV4Kz04LHRoaXMuaW5kZXhPZmZzZXQrPWV4fTt3Qj1uZXcgU2UsRUI9bmV3IHEsVEI9bmV3IHMsS2g9bmV3IHMsUkI9bmV3IHMseEI9bmV3IHMscWg9bmV3IHM7U0I9QXQoT0IpfSk7ZnVuY3Rpb24gQ0IoZSl7dGhpcy5vZmZzZXQ9ZS5vZmZzZXQsdGhpcy5jb3VudD1lLmNvdW50LHRoaXMuY29sb3I9ZS5jb2xvcix0aGlzLmJhdGNoSWRzPWUuYmF0Y2hJZHN9dmFyIGF4LHJ4PVgoKCk9PntheD1DQn0pO3ZhciBiXz17fTtydChiXyx7ZGVmYXVsdDooKT0+R0J9KTtmdW5jdGlvbiBrQihlLHQpe2xldCBuPXQqTUIsbz1zLnVucGFjayhlLG4sWGgpO24rPXMucGFja2VkTGVuZ3RoO2xldCBhPSQudW5wYWNrKGUsbixQYS5tb2RlbE1hdHJpeCk7JC5tdWx0aXBseUJ5U2NhbGUoYSxvLGEpO2xldCByPVBhLmJvdW5kaW5nVm9sdW1lO3JldHVybiBzLmNsb25lKHMuWkVSTyxyLmNlbnRlciksci5yYWRpdXM9TWF0aC5zcXJ0KDMpLFBhfWZ1bmN0aW9uIHZCKGUsdCl7bGV0IG49dCpOQixvPWVbbisrXSxhPWVbbisrXSxyPXMuZnJvbUVsZW1lbnRzKG8sbyxhLFhoKSxpPSQudW5wYWNrKGUsbixQYS5tb2RlbE1hdHJpeCk7JC5tdWx0aXBseUJ5U2NhbGUoaSxyLGkpO2xldCBmPVBhLmJvdW5kaW5nVm9sdW1lO3JldHVybiBzLmNsb25lKHMuWkVSTyxmLmNlbnRlciksZi5yYWRpdXM9TWF0aC5zcXJ0KDIpLFBhfWZ1bmN0aW9uIEZCKGUsdCl7bGV0IG49dCpJQixvPXMudW5wYWNrKGUsbixYaCk7bis9cy5wYWNrZWRMZW5ndGg7bGV0IGE9JC51bnBhY2soZSxuLFBhLm1vZGVsTWF0cml4KTskLm11bHRpcGx5QnlTY2FsZShhLG8sYSk7bGV0IHI9UGEuYm91bmRpbmdWb2x1bWU7cmV0dXJuIHMuY2xvbmUocy5aRVJPLHIuY2VudGVyKSxyLnJhZGl1cz0xLFBhfWZ1bmN0aW9uIERCKGUsdCl7bGV0IG49dCpQQixvPWVbbisrXSxhPXMudW5wYWNrKGUsbixYaCkscj0kLmZyb21UcmFuc2xhdGlvbihhLFBhLm1vZGVsTWF0cml4KTskLm11bHRpcGx5QnlVbmlmb3JtU2NhbGUocixvLHIpO2xldCBpPVBhLmJvdW5kaW5nVm9sdW1lO3JldHVybiBzLmNsb25lKHMuWkVSTyxpLmNlbnRlciksaS5yYWRpdXM9MSxQYX1mdW5jdGlvbiBXaChlLHQsbixvLGEpe2lmKCFnKHQpKXJldHVybjtsZXQgcj1uLmxlbmd0aCxpPW8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsZj1vLmluZGljZXMsZD1lLnBvc2l0aW9ucyxjPWUudmVydGV4QmF0Y2hJZHMsdT1lLmluZGljZXMsbD1lLmJhdGNoSWRzLGg9ZS5iYXRjaFRhYmxlQ29sb3JzLG09ZS5iYXRjaGVkSW5kaWNlcyxiPWUuaW5kZXhPZmZzZXRzLHA9ZS5pbmRleENvdW50cyx5PWUuYm91bmRpbmdWb2x1bWVzLEU9ZS5tb2RlbE1hdHJpeCxfPWUuY2VudGVyLFQ9ZS5wb3NpdGlvbk9mZnNldCx3PWUuYmF0Y2hJZEluZGV4LFI9ZS5pbmRleE9mZnNldCxTPWUuYmF0Y2hlZEluZGljZXNPZmZzZXQ7Zm9yKGxldCBDPTA7QzxyOysrQyl7bGV0IEk9YSh0LEMpLE49SS5tb2RlbE1hdHJpeDskLm11bHRpcGx5KEUsTixOKTtsZXQgUD1uW0NdLHY9aS5sZW5ndGg7Zm9yKGxldCBNPTA7TTx2O00rPTMpe2xldCBGPXMudW5wYWNrKGksTSxCQik7JC5tdWx0aXBseUJ5UG9pbnQoTixGLEYpLHMuc3VidHJhY3QoRixfLEYpLHMucGFjayhGLGQsVCozK00pLGNbdysrXT1QfWxldCBBPWYubGVuZ3RoO2ZvcihsZXQgTT0wO008QTsrK00pdVtSK01dPWZbTV0rVDtsZXQgeD1DK1M7bVt4XT1uZXcgYXgoe29mZnNldDpSLGNvdW50OkEsY29sb3I6ZXQuZnJvbVJnYmEoaFtQXSksYmF0Y2hJZHM6W1BdfSksbFt4XT1QLGJbeF09UixwW3hdPUEseVt4XT1nZS50cmFuc2Zvcm0oSS5ib3VuZGluZ1ZvbHVtZSxOKSxUKz12LzMsUis9QX1lLnBvc2l0aW9uT2Zmc2V0PVQsZS5iYXRjaElkSW5kZXg9dyxlLmluZGV4T2Zmc2V0PVIsZS5iYXRjaGVkSW5kaWNlc09mZnNldCs9cn1mdW5jdGlvbiBVQihlKXtsZXQgdD1uZXcgRmxvYXQ2NEFycmF5KGUpLG49MDtzLnVucGFjayh0LG4saXgpLG4rPXMucGFja2VkTGVuZ3RoLCQudW5wYWNrKHQsbixjeCl9ZnVuY3Rpb24gTEIoZSl7bGV0IHQ9ZS5sZW5ndGgsbj0wO2ZvcihsZXQgbz0wO288dDsrK28pbis9ZXQucGFja2VkTGVuZ3RoKzMrZVtvXS5iYXRjaElkcy5sZW5ndGg7cmV0dXJuIG59ZnVuY3Rpb24gakIoZSx0LG4pe2xldCBvPW4ubGVuZ3RoLGE9MitvKmdlLnBhY2tlZExlbmd0aCsxK0xCKHQpLHI9bmV3IEZsb2F0NjRBcnJheShhKSxpPTA7cltpKytdPWUscltpKytdPW87Zm9yKGxldCBkPTA7ZDxvOysrZClnZS5wYWNrKG5bZF0scixpKSxpKz1nZS5wYWNrZWRMZW5ndGg7bGV0IGY9dC5sZW5ndGg7cltpKytdPWY7Zm9yKGxldCBkPTA7ZDxmOysrZCl7bGV0IGM9dFtkXTtldC5wYWNrKGMuY29sb3IscixpKSxpKz1ldC5wYWNrZWRMZW5ndGgscltpKytdPWMub2Zmc2V0LHJbaSsrXT1jLmNvdW50O2xldCB1PWMuYmF0Y2hJZHMsbD11Lmxlbmd0aDtyW2krK109bDtmb3IobGV0IGg9MDtoPGw7KytoKXJbaSsrXT11W2hdfXJldHVybiByfWZ1bmN0aW9uIHpCKGUsdCl7bGV0IG49ZyhlLmJveGVzKT9uZXcgRmxvYXQzMkFycmF5KGUuYm94ZXMpOnZvaWQgMCxvPWcoZS5ib3hCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KGUuYm94QmF0Y2hJZHMpOnZvaWQgMCxhPWcoZS5jeWxpbmRlcnMpP25ldyBGbG9hdDMyQXJyYXkoZS5jeWxpbmRlcnMpOnZvaWQgMCxyPWcoZS5jeWxpbmRlckJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkoZS5jeWxpbmRlckJhdGNoSWRzKTp2b2lkIDAsaT1nKGUuZWxsaXBzb2lkcyk/bmV3IEZsb2F0MzJBcnJheShlLmVsbGlwc29pZHMpOnZvaWQgMCxmPWcoZS5lbGxpcHNvaWRCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KGUuZWxsaXBzb2lkQmF0Y2hJZHMpOnZvaWQgMCxkPWcoZS5zcGhlcmVzKT9uZXcgRmxvYXQzMkFycmF5KGUuc3BoZXJlcyk6dm9pZCAwLGM9ZyhlLnNwaGVyZUJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkoZS5zcGhlcmVCYXRjaElkcyk6dm9pZCAwLHU9ZyhuKT9vLmxlbmd0aDowLGw9ZyhhKT9yLmxlbmd0aDowLGg9ZyhpKT9mLmxlbmd0aDowLG09ZyhkKT9jLmxlbmd0aDowLGI9RmYuZ2V0VW5pdEJveCgpLHA9UWYuZ2V0VW5pdEN5bGluZGVyKCkseT1kYS5nZXRVbml0RWxsaXBzb2lkKCksRT1iLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLF89cC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxUPXkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdz1FLmxlbmd0aCp1O3crPV8ubGVuZ3RoKmwsdys9VC5sZW5ndGgqKGgrbSk7bGV0IFI9Yi5pbmRpY2VzLFM9cC5pbmRpY2VzLEM9eS5pbmRpY2VzLEk9Ui5sZW5ndGgqdTtJKz1TLmxlbmd0aCpsLEkrPUMubGVuZ3RoKihoK20pO2xldCBOPW5ldyBGbG9hdDMyQXJyYXkodyksUD1uZXcgVWludDE2QXJyYXkody8zKSx2PWtlLmNyZWF0ZVR5cGVkQXJyYXkody8zLEkpLEE9dStsK2grbSx4PW5ldyBVaW50MTZBcnJheShBKSxNPW5ldyBBcnJheShBKSxGPW5ldyBVaW50MzJBcnJheShBKSxVPW5ldyBVaW50MzJBcnJheShBKSx6PW5ldyBBcnJheShBKTtVQihlLnBhY2tlZEJ1ZmZlcik7bGV0IEQ9e2JhdGNoVGFibGVDb2xvcnM6bmV3IFVpbnQzMkFycmF5KGUuYmF0Y2hUYWJsZUNvbG9ycykscG9zaXRpb25zOk4sdmVydGV4QmF0Y2hJZHM6UCxpbmRpY2VzOnYsYmF0Y2hJZHM6eCxiYXRjaGVkSW5kaWNlczpNLGluZGV4T2Zmc2V0czpGLGluZGV4Q291bnRzOlUsYm91bmRpbmdWb2x1bWVzOnoscG9zaXRpb25PZmZzZXQ6MCxiYXRjaElkSW5kZXg6MCxpbmRleE9mZnNldDowLGJhdGNoZWRJbmRpY2VzT2Zmc2V0OjAsbW9kZWxNYXRyaXg6Y3gsY2VudGVyOml4fTtXaChELG4sbyxiLGtCKSxXaChELGEscixwLHZCKSxXaChELGksZix5LEZCKSxXaChELGQsYyx5LERCKTtsZXQgRz1qQih2LkJZVEVTX1BFUl9FTEVNRU5ULE0seik7cmV0dXJuIHQucHVzaChOLmJ1ZmZlcixQLmJ1ZmZlcix2LmJ1ZmZlciksdC5wdXNoKHguYnVmZmVyLEYuYnVmZmVyLFUuYnVmZmVyKSx0LnB1c2goRy5idWZmZXIpLHtwb3NpdGlvbnM6Ti5idWZmZXIsdmVydGV4QmF0Y2hJZHM6UC5idWZmZXIsaW5kaWNlczp2LmJ1ZmZlcixpbmRleE9mZnNldHM6Ri5idWZmZXIsaW5kZXhDb3VudHM6VS5idWZmZXIsYmF0Y2hJZHM6eC5idWZmZXIscGFja2VkQnVmZmVyOkcuYnVmZmVyfX12YXIgWGgsTUIsTkIsSUIsUEIsUGEsQkIsaXgsY3gsR0IscF89WCgoKT0+e010KCk7Q3AoKTtJZSgpO2tzKCk7UDAoKTtzZSgpO1NoKCk7bm4oKTtwbigpO3J4KCk7VW4oKTtYaD1uZXcgcyxNQj0kLnBhY2tlZExlbmd0aCtzLnBhY2tlZExlbmd0aCxOQj0kLnBhY2tlZExlbmd0aCsyLElCPSQucGFja2VkTGVuZ3RoK3MucGFja2VkTGVuZ3RoLFBCPXMucGFja2VkTGVuZ3RoKzEsUGE9e21vZGVsTWF0cml4Om5ldyAkLGJvdW5kaW5nVm9sdW1lOm5ldyBnZX07QkI9bmV3IHM7aXg9bmV3IHMsY3g9bmV3ICQ7R0I9QXQoekIpfSk7dmFyIF9fPXt9O3J0KF9fLHtkZWZhdWx0OigpPT5XQn0pO2Z1bmN0aW9uIEtCKGUpe2U9bmV3IEZsb2F0NjRBcnJheShlKTtsZXQgdD0wO1loLm1pbj1lW3QrK10sWWgubWF4PWVbdCsrXSxTZS51bnBhY2soZSx0LHN4KSx0Kz1TZS5wYWNrZWRMZW5ndGgscS51bnBhY2soZSx0LGZ4KX1mdW5jdGlvbiBxQihlLHQpe2xldCBuPW5ldyBVaW50MTZBcnJheShlLnBvc2l0aW9ucyk7S0IoZS5wYWNrZWRCdWZmZXIpO2xldCBvPXN4LGE9Zngscj1ZaC5taW4saT1ZaC5tYXgsZj1uLmxlbmd0aC8zLGQ9bi5zdWJhcnJheSgwLGYpLGM9bi5zdWJhcnJheShmLDIqZiksdT1uLnN1YmFycmF5KDIqZiwzKmYpO1Z0LnppZ1phZ0RlbHRhRGVjb2RlKGQsYyx1KTtsZXQgbD1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGg9MDtoPGY7KytoKXtsZXQgbT1kW2hdLGI9Y1toXSxwPXVbaF0seT1rLmxlcnAoby53ZXN0LG8uZWFzdCxtL2dfKSxFPWsubGVycChvLnNvdXRoLG8ubm9ydGgsYi9nXyksXz1rLmxlcnAocixpLHAvZ18pLFQ9cmUuZnJvbVJhZGlhbnMoeSxFLF8sVkIpLHc9YS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihULEhCKTtzLnBhY2sodyxsLGgqMyl9cmV0dXJuIHQucHVzaChsLmJ1ZmZlcikse3Bvc2l0aW9uczpsLmJ1ZmZlcn19dmFyIGdfLFZCLEhCLHN4LGZ4LFloLFdCLHlfPVgoKCk9PntVcigpO0llKCk7RXQoKTtxZSgpO0dlKCk7X24oKTtVbigpO2dfPTMyNzY3LFZCPW5ldyByZSxIQj1uZXcgcyxzeD1uZXcgU2UsZng9bmV3IHEsWWg9e21pbjp2b2lkIDAsbWF4OnZvaWQgMH07V0I9QXQocUIpfSk7dmFyIEFfPXt9O3J0KEFfLHtkZWZhdWx0OigpPT5vVX0pO2Z1bmN0aW9uIFhCKGUpe2xldCB0PW5ldyBGbG9hdDY0QXJyYXkoZSksbj0wO2pzLmluZGV4Qnl0ZXNQZXJFbGVtZW50PXRbbisrXSxqcy5taW49dFtuKytdLGpzLm1heD10W24rK10scy51bnBhY2sodCxuLGh4KSxuKz1zLnBhY2tlZExlbmd0aCxxLnVucGFjayh0LG4sbXgpLG4rPXEucGFja2VkTGVuZ3RoLFNlLnVucGFjayh0LG4sYngpfWZ1bmN0aW9uIFlCKGUpe2xldCB0PWUubGVuZ3RoLG49MDtmb3IobGV0IG89MDtvPHQ7KytvKW4rPWV0LnBhY2tlZExlbmd0aCszK2Vbb10uYmF0Y2hJZHMubGVuZ3RoO3JldHVybiBufWZ1bmN0aW9uIEpCKGUsdCxuKXtsZXQgbz10Lmxlbmd0aCxhPTIrbyp5bi5wYWNrZWRMZW5ndGgrMStZQihuKSxyPW5ldyBGbG9hdDY0QXJyYXkoYSksaT0wO3JbaSsrXT1lLHJbaSsrXT1vO2ZvcihsZXQgZD0wO2Q8bzsrK2QpeW4ucGFjayh0W2RdLHIsaSksaSs9eW4ucGFja2VkTGVuZ3RoO2xldCBmPW4ubGVuZ3RoO3JbaSsrXT1mO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpe2xldCBjPW5bZF07ZXQucGFjayhjLmNvbG9yLHIsaSksaSs9ZXQucGFja2VkTGVuZ3RoLHJbaSsrXT1jLm9mZnNldCxyW2krK109Yy5jb3VudDtsZXQgdT1jLmJhdGNoSWRzLGw9dS5sZW5ndGg7cltpKytdPWw7Zm9yKGxldCBoPTA7aDxsOysraClyW2krK109dVtoXX1yZXR1cm4gcn1mdW5jdGlvbiBuVShlLHQpe1hCKGUucGFja2VkQnVmZmVyKTtsZXQgbjtqcy5pbmRleEJ5dGVzUGVyRWxlbWVudD09PTI/bj1uZXcgVWludDE2QXJyYXkoZS5pbmRpY2VzKTpuPW5ldyBVaW50MzJBcnJheShlLmluZGljZXMpO2xldCBhPW5ldyBVaW50MTZBcnJheShlLnBvc2l0aW9ucykscj1uZXcgVWludDMyQXJyYXkoZS5jb3VudHMpLGk9bmV3IFVpbnQzMkFycmF5KGUuaW5kZXhDb3VudHMpLGY9bmV3IFVpbnQzMkFycmF5KGUuYmF0Y2hJZHMpLGQ9bmV3IFVpbnQzMkFycmF5KGUuYmF0Y2hUYWJsZUNvbG9ycyksYz1uZXcgQXJyYXkoci5sZW5ndGgpLHU9aHgsbD1teCxoPWJ4LG09anMubWluLGI9anMubWF4LHA9ZS5taW5pbXVtSGVpZ2h0cyx5PWUubWF4aW11bUhlaWdodHM7ZyhwKSYmZyh5KSYmKHA9bmV3IEZsb2F0MzJBcnJheShwKSx5PW5ldyBGbG9hdDMyQXJyYXkoeSkpO2xldCBFLF8sVCx3PWEubGVuZ3RoLzIsUj1hLnN1YmFycmF5KDAsdyksUz1hLnN1YmFycmF5KHcsMip3KTtWdC56aWdaYWdEZWx0YURlY29kZShSLFMpO2xldCBDPW5ldyBGbG9hdDY0QXJyYXkodyozKTtmb3IoRT0wO0U8dzsrK0Upe2xldCBlZT1SW0VdLG1lPVNbRV0sbGU9ay5sZXJwKGgud2VzdCxoLmVhc3QsZWUvZHgpLGJlPWsubGVycChoLnNvdXRoLGgubm9ydGgsbWUvZHgpLGZlPXJlLmZyb21SYWRpYW5zKGxlLGJlLDAsbHgpLGFlPWwuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZmUsdXgpO3MucGFjayhhZSxDLEUqMyl9bGV0IEk9ci5sZW5ndGgsTj1uZXcgQXJyYXkoSSksUD1uZXcgQXJyYXkoSSksdj0wLEE9MDtmb3IoRT0wO0U8STsrK0UpTltFXT12LFBbRV09QSx2Kz1yW0VdLEErPWlbRV07bGV0IHg9bmV3IEZsb2F0MzJBcnJheSh3KjMqMiksTT1uZXcgVWludDE2QXJyYXkodyoyKSxGPW5ldyBVaW50MzJBcnJheShQLmxlbmd0aCksVT1uZXcgVWludDMyQXJyYXkoaS5sZW5ndGgpLHo9W10sRD17fTtmb3IoRT0wO0U8STsrK0UpVD1kW0VdLGcoRFtUXSk/KERbVF0ucG9zaXRpb25MZW5ndGgrPXJbRV0sRFtUXS5pbmRleExlbmd0aCs9aVtFXSxEW1RdLmJhdGNoSWRzLnB1c2goRSkpOkRbVF09e3Bvc2l0aW9uTGVuZ3RoOnJbRV0saW5kZXhMZW5ndGg6aVtFXSxvZmZzZXQ6MCxpbmRleE9mZnNldDowLGJhdGNoSWRzOltFXX07bGV0IEcsSD0wLE89MDtmb3IoVCBpbiBEKWlmKEQuaGFzT3duUHJvcGVydHkoVCkpe0c9RFtUXSxHLm9mZnNldD1ILEcuaW5kZXhPZmZzZXQ9TztsZXQgZWU9Ry5wb3NpdGlvbkxlbmd0aCoyLG1lPUcuaW5kZXhMZW5ndGgqMitHLnBvc2l0aW9uTGVuZ3RoKjY7SCs9ZWUsTys9bWUsRy5pbmRleExlbmd0aD1tZX1sZXQgWj1bXTtmb3IoVCBpbiBEKUQuaGFzT3duUHJvcGVydHkoVCkmJihHPURbVF0sWi5wdXNoKHtjb2xvcjpldC5mcm9tUmdiYShwYXJzZUludChUKSksb2Zmc2V0OkcuaW5kZXhPZmZzZXQsY291bnQ6Ry5pbmRleExlbmd0aCxiYXRjaElkczpHLmJhdGNoSWRzfSkpO2ZvcihFPTA7RTxJOysrRSl7VD1kW0VdLEc9RFtUXTtsZXQgZWU9Ry5vZmZzZXQsbWU9ZWUqMyxsZT1lZSxiZT1OW0VdLGZlPXJbRV0sYWU9ZltFXSxSZT1tLE5lPWI7ZyhwKSYmZyh5KSYmKFJlPXBbRV0sTmU9eVtFXSk7bGV0IEplPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxXZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksdHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFhlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IoXz0wO188ZmU7KytfKXtsZXQgWWU9cy51bnBhY2soQyxiZSozK18qMyx1eCk7bC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKFllLFllKTtsZXQgZnQ9bC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhZZSxseCksSXQ9ZnQubGF0aXR1ZGUsQ3Q9ZnQubG9uZ2l0dWRlO0plPU1hdGgubWluKEl0LEplKSxXZT1NYXRoLm1heChJdCxXZSksdHQ9TWF0aC5taW4oQ3QsdHQpLFhlPU1hdGgubWF4KEN0LFhlKTtsZXQgaHQ9bC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoWWUsWkIpLEt0PXMubXVsdGlwbHlCeVNjYWxhcihodCxSZSxRQiksUHQ9cy5hZGQoWWUsS3QsJEIpO0t0PXMubXVsdGlwbHlCeVNjYWxhcihodCxOZSxLdCk7bGV0IEx0PXMuYWRkKFllLEt0LGVVKTtzLnN1YnRyYWN0KEx0LHUsTHQpLHMuc3VidHJhY3QoUHQsdSxQdCkscy5wYWNrKEx0LHgsbWUpLHMucGFjayhQdCx4LG1lKzMpLE1bbGVdPWFlLE1bbGUrMV09YWUsbWUrPTYsbGUrPTJ9aD10VSxoLndlc3Q9dHQsaC5lYXN0PVhlLGguc291dGg9SmUsaC5ub3J0aD1XZSxjW0VdPXluLmZyb21SZWN0YW5nbGUoaCxtLGIsbCk7bGV0IExlPUcuaW5kZXhPZmZzZXQsamU9UFtFXSxpdD1pW0VdO2ZvcihGW0VdPUxlLF89MDtfPGl0O18rPTMpe2xldCBZZT1uW2plK19dLWJlLGZ0PW5bamUrXysxXS1iZSxJdD1uW2plK18rMl0tYmU7eltMZSsrXT1ZZSoyK2VlLHpbTGUrK109ZnQqMitlZSx6W0xlKytdPUl0KjIrZWUseltMZSsrXT1JdCoyKzErZWUseltMZSsrXT1mdCoyKzErZWUseltMZSsrXT1ZZSoyKzErZWV9Zm9yKF89MDtfPGZlOysrXyl7bGV0IFllPV8sZnQ9KF8rMSklZmU7eltMZSsrXT1ZZSoyKzErZWUseltMZSsrXT1mdCoyK2VlLHpbTGUrK109WWUqMitlZSx6W0xlKytdPVllKjIrMStlZSx6W0xlKytdPWZ0KjIrMStlZSx6W0xlKytdPWZ0KjIrZWV9Ry5vZmZzZXQrPWZlKjIsRy5pbmRleE9mZnNldD1MZSxVW0VdPUxlLUZbRV19ej1rZS5jcmVhdGVUeXBlZEFycmF5KHgubGVuZ3RoLzMseik7bGV0IG9lPVoubGVuZ3RoO2ZvcihsZXQgZWU9MDtlZTxvZTsrK2VlKXtsZXQgbWU9WltlZV0uYmF0Y2hJZHMsbGU9MCxiZT1tZS5sZW5ndGg7Zm9yKGxldCBmZT0wO2ZlPGJlOysrZmUpbGUrPVVbbWVbZmVdXTtaW2VlXS5jb3VudD1sZX1sZXQgY2U9ei5CWVRFU19QRVJfRUxFTUVOVD09PTI/a2UuVU5TSUdORURfU0hPUlQ6a2UuVU5TSUdORURfSU5ULGRlPUpCKGNlLGMsWik7cmV0dXJuIHQucHVzaCh4LmJ1ZmZlcix6LmJ1ZmZlcixGLmJ1ZmZlcixVLmJ1ZmZlcixNLmJ1ZmZlcixkZS5idWZmZXIpLHtwb3NpdGlvbnM6eC5idWZmZXIsaW5kaWNlczp6LmJ1ZmZlcixpbmRleE9mZnNldHM6Ri5idWZmZXIsaW5kZXhDb3VudHM6VS5idWZmZXIsYmF0Y2hJZHM6TS5idWZmZXIscGFja2VkQnVmZmVyOmRlLmJ1ZmZlcn19dmFyIGh4LG14LGJ4LGpzLGR4LHV4LFpCLFFCLCRCLGVVLGx4LHRVLG9VLHdfPVgoKCk9PntVcigpO0llKCk7RXQoKTtrcygpO3NlKCk7cWUoKTtubigpO0dlKCk7d2koKTtfbigpO1VuKCk7aHg9bmV3IHMsbXg9bmV3IHEsYng9bmV3IFNlLGpzPXttaW46dm9pZCAwLG1heDp2b2lkIDAsaW5kZXhCeXRlc1BlckVsZW1lbnQ6dm9pZCAwfTtkeD0zMjc2Nyx1eD1uZXcgcyxaQj1uZXcgcyxRQj1uZXcgcywkQj1uZXcgcyxlVT1uZXcgcyxseD1uZXcgcmUsdFU9bmV3IFNlO29VPUF0KG5VKX0pO2Z1bmN0aW9uIGlVKGUsdCxuLG8sYSl7bGV0IHI9ZS5sZW5ndGgvMyxpPWUuc3ViYXJyYXkoMCxyKSxmPWUuc3ViYXJyYXkociwyKnIpLGQ9ZS5zdWJhcnJheSgyKnIsMypyKTtWdC56aWdaYWdEZWx0YURlY29kZShpLGYsZCk7bGV0IGM9bmV3IEZsb2F0NjRBcnJheShlLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxyOysrdSl7bGV0IGw9aVt1XSxoPWZbdV0sbT1kW3VdLGI9ay5sZXJwKHQud2VzdCx0LmVhc3QsbC9FXykscD1rLmxlcnAodC5zb3V0aCx0Lm5vcnRoLGgvRV8pLHk9ay5sZXJwKG4sbyxtL0VfKSxFPXJlLmZyb21SYWRpYW5zKGIscCx5LGFVKSxfPWEuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRSxyVSk7cy5wYWNrKF8sYyx1KjMpfXJldHVybiBjfXZhciBFXyxhVSxyVSxweCxneD1YKCgpPT57VXIoKTtJZSgpO0V0KCk7R2UoKTtFXz0zMjc2NyxhVT1uZXcgcmUsclU9bmV3IHM7cHg9aVV9KTt2YXIgVF89e307cnQoVF8se2RlZmF1bHQ6KCk9PnVVfSk7ZnVuY3Rpb24gY1UoZSl7ZT1uZXcgRmxvYXQ2NEFycmF5KGUpO2xldCB0PTA7SmgubWluPWVbdCsrXSxKaC5tYXg9ZVt0KytdLFNlLnVucGFjayhlLHQsRXgpLHQrPVNlLnBhY2tlZExlbmd0aCxxLnVucGFjayhlLHQsVHgpLHQrPXEucGFja2VkTGVuZ3RoLHMudW5wYWNrKGUsdCxSeCl9ZnVuY3Rpb24gc1UoZSl7bGV0IHQ9ZS5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCsxKSxvPTA7Zm9yKGxldCBhPTA7YTx0OysrYSluW2FdPW8sbys9ZVthXTtyZXR1cm4gblt0XT1vLG59ZnVuY3Rpb24gZFUoZSx0KXtsZXQgbj1uZXcgVWludDE2QXJyYXkoZS5wb3NpdGlvbnMpLG89bmV3IFVpbnQxNkFycmF5KGUud2lkdGhzKSxhPW5ldyBVaW50MzJBcnJheShlLmNvdW50cykscj1uZXcgVWludDE2QXJyYXkoZS5iYXRjaElkcyk7Y1UoZS5wYWNrZWRCdWZmZXIpO2xldCBpPUV4LGY9VHgsZD1SeCxjPUpoLm1pbix1PUpoLm1heCxsPXB4KG4saSxjLHUsZiksaD1sLmxlbmd0aC8zLG09aCo0LTQsYj1uZXcgRmxvYXQzMkFycmF5KG0qMykscD1uZXcgRmxvYXQzMkFycmF5KG0qMykseT1uZXcgRmxvYXQzMkFycmF5KG0qMyksRT1uZXcgRmxvYXQzMkFycmF5KG0qMiksXz1uZXcgVWludDE2QXJyYXkobSksVD0wLHc9MCxSPTAsUyxDPTAsST1hLmxlbmd0aDtmb3IoUz0wO1M8STsrK1Mpe2xldCB4PWFbU10sTT1vW1NdLEY9cltTXTtmb3IobGV0IFU9MDtVPHg7KytVKXtsZXQgejtpZihVPT09MCl7bGV0IFo9cy51bnBhY2sobCxDKjMsX3gpLG9lPXMudW5wYWNrKGwsKEMrMSkqMyx5eCk7ej1zLnN1YnRyYWN0KFosb2UsQXgpLHMuYWRkKFoseix6KX1lbHNlIHo9cy51bnBhY2sobCwoQytVLTEpKjMsQXgpO2xldCBEPXMudW5wYWNrKGwsKEMrVSkqMyxmVSksRztpZihVPT09eC0xKXtsZXQgWj1zLnVucGFjayhsLChDK3gtMSkqMyxfeCksb2U9cy51bnBhY2sobCwoQyt4LTIpKjMseXgpO0c9cy5zdWJ0cmFjdChaLG9lLHd4KSxzLmFkZChaLEcsRyl9ZWxzZSBHPXMudW5wYWNrKGwsKEMrVSsxKSozLHd4KTtzLnN1YnRyYWN0KHosZCx6KSxzLnN1YnRyYWN0KEQsZCxEKSxzLnN1YnRyYWN0KEcsZCxHKTtsZXQgSD1VPT09MD8yOjAsTz1VPT09eC0xPzI6NDtmb3IobGV0IFo9SDtaPE87KytaKXtzLnBhY2soRCxiLFQpLHMucGFjayh6LHAsVCkscy5wYWNrKEcseSxUKSxUKz0zO2xldCBvZT1aLTI8MD8tMToxO0VbdysrXT0yKihaJTIpLTEsRVt3KytdPW9lKk0sX1tSKytdPUZ9fUMrPXh9bGV0IE49a2UuY3JlYXRlVHlwZWRBcnJheShtLGgqNi02KSxQPTAsdj0wO2ZvcihJPWgtMSxTPTA7UzxJOysrUylOW3YrK109UCxOW3YrK109UCsyLE5bdisrXT1QKzEsTlt2KytdPVArMSxOW3YrK109UCsyLE5bdisrXT1QKzMsUCs9NDt0LnB1c2goYi5idWZmZXIscC5idWZmZXIseS5idWZmZXIpLHQucHVzaChFLmJ1ZmZlcixfLmJ1ZmZlcixOLmJ1ZmZlcik7bGV0IEE9e2luZGV4RGF0YXR5cGU6Ti5CWVRFU19QRVJfRUxFTUVOVD09PTI/a2UuVU5TSUdORURfU0hPUlQ6a2UuVU5TSUdORURfSU5ULGN1cnJlbnRQb3NpdGlvbnM6Yi5idWZmZXIscHJldmlvdXNQb3NpdGlvbnM6cC5idWZmZXIsbmV4dFBvc2l0aW9uczp5LmJ1ZmZlcixleHBhbmRBbmRXaWR0aDpFLmJ1ZmZlcixiYXRjaElkczpfLmJ1ZmZlcixpbmRpY2VzOk4uYnVmZmVyfTtpZihlLmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgeD1zVShhKTt0LnB1c2gobC5idWZmZXIseC5idWZmZXIpLEE9eWEoQSx7ZGVjb2RlZFBvc2l0aW9uczpsLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOnguYnVmZmVyfSl9cmV0dXJuIEF9dmFyIEV4LFR4LFJ4LEpoLF94LHl4LEF4LGZVLHd4LHVVLFJfPVgoKCk9PntJZSgpO3VsKCk7Z3goKTtxZSgpO25uKCk7X24oKTtVbigpO0V4PW5ldyBTZSxUeD1uZXcgcSxSeD1uZXcgcyxKaD17bWluOnZvaWQgMCxtYXg6dm9pZCAwfTtfeD1uZXcgcyx5eD1uZXcgcyxBeD1uZXcgcyxmVT1uZXcgcyx3eD1uZXcgczt1VT1BdChkVSl9KTt2YXIgZnNlLHh4PVgoKCk9Pntmc2U9KGZ1bmN0aW9uKCl7dmFyIGU9ImI5SDc5VGViYmJlOW9rOUdldWV1OUdldWI5R2JiOUdydXV1dXV1dWV1OUd2dXV1dXVldTlHZHV1ZXU5R2x1dXV1ZXU5R3Z1dXV1dWI5R291dXV1dXViOUdsdXV1dWI5R2l1dXVldWlFOEFkaWx2ZW92ZW92cnJ3cnJyRERvRHJicXFiZWx2ZTlXZWlpdmllYmVvd2V1ZWM7RzpRZGtyOlBsQ285VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjltVzRXMmJlOEE5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVmJkOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjljOVY5MTlVOUtiaUU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OXdXVjc5UDlWOVVibFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVmJ2OEU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVjljOVY5MTlVOUtibzhBOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl3V1Y3OVA5VjlVYnJFOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl0V0c5MVc5VTlKV2J3YTlUVzc5TzlWOVd0OUZXOVU5SjlWOUtXNjlVOUtXOTQ5dFdHOTFXOVU5Slc5YzlWOTE5VTlLYkRMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWOXA5SnRicUs5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YmtMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWVDk0OVdieFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYm1FOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOXdXVnRXOTRKOUg5SjlPV2J6YTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0SjlIOUo5T1c5dHRWOVA5V2JIYTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0U1d0OUo5TzlzVzlUOUg5V2JPSzlUVzc5TzlWOVd0OUY3OVc5SHQ5UDlIMjl0OVZWdDlzVzlUOUg5V2JBbDc5SVY5UmJYRHdlYmNla2RLWXE6cDI4QWRiazpCaGRodWQ5OjhKampqamJjO3F3OVJncjhLampqamJjYmh3ZG5hZVRtYmFiY2J5ZDttOmtqamJhb2FvY2I5aUVnRGM6R2VWODZiYmFyYzthZGZjYmNqZHo6eGpqamI4QWRuYWlUbWJhcmM7YWRmYWRhbHo6d2pqamI4QWthcmM7YWJmYWxmY2JjYmNqZGFsOVJhbGNGZTBFejp4ampqYjhBYXJjO2FiZmFyYzthZGZhbHo6d2pqamI4QWFyY1VmOWNiODNpYmFyYzhXZjljYjgzaWJhcmN5ZjljYjgzaWJhcmNhZjljYjgzaWJhcmNLZjljYjgzaWJhcmN6ZjljYjgzaWJhcjljYjgzaXdhcjljYjgzaWJjajthYmFsOVVjO1dGYkdjamRhbGNhMEVocWRuYWljZDZtYmF2Y2Q5aW1iYURUbWJhZGNlZmhrYXFjaTJneGFsMmhtYXJjO2FsZmNsZmhQYXJjO3FsZmNlVmhzYXJjO3FvZmNsVmh6YXJjO3FvZmNLZmhIYXJjO3FvZmN6ZmhPY2JoQWluY2RoQ2NiaG9kbmF2Y2k2bWJhSDljYjgzaWJhTzljYjgzaWJhcjljYjgzaTt5b2FyOWNiODNpO3FvYWRhQWZnb3liYmhYY2JoUWluY2Jod2NiaExkbmluYW9hbGZoS2FveWJiZ1lhWDdhTFZoTGF3Y1AwbWVhS2hvYVloWGF3Y2VmZ3dhUWZhaTZtYmtrY2JoWGFyYztxb2Zod2luY3doOEFjd2hFZG5hTGFYOTNnb2NGZUdnM2NzMG1iY2xoRWEzY2kwbWJhM2NiOWhjZXRoRWtkbmFvY3c0Y0ZlR2czY3MwbWJjbGg4QWEzY2kwbWJhM2NiOWhjZXRoOEFrYThBYUVmaDNhd3lkYmg1Y3doOEFjd2hFZG5hb2N6NGNGZUdnOEVjczBtYmNsaEVhOEVjaTBtYmE4RWNiOWhjZXRoRWthM2E1ZmgzZG5hb2NGRkZGYjBtYmNsaDhBYW9jRkZGOEYwbWJhb2NGRkZyMGNldGg4QWthd2EzYUVmYThBZkJkYmF3Y2xmaHdhWGNlZmdYY3c5aG1ia2FLaG9hWWhYYVFjemZnUWFpNm1ia2NiaG9jZWh3YXpoTGluYXdhb2FMeWRiYXJjO3FvZmFvY2R0ZnlkYjZFaG9hTGNsZmhMYXdjZWZnd2N3OWhtYmtjaWhDa2NiaDNhcmM7cWxmY2JjamR6OnhqampiOEFhcmM7YWxmY3dmY2JCZGJhcjljYjgzaTthbGFvY2x0aDhGYWRoYWFxaGhha2g1aW5hcmM7cWxmYWRjYmEzY3VmZ29hb2EzMEVhbDJmYWx6OndqampiOEFhaWFoYWlhaDZFaGdkbmFxYWlhMzlSYTNhcWZhaTZFZ1ljc2ZjOVdHZ29hWTlubWJhcmM7cW9mYVlmY2Jhb2FZOVJ6OnhqampiOEFrYWRhM2FsMmZoOEpjYmg4S2luYThLYThGVmNsNGhRYXJjO2FsZmE4S2NkdGZoOExhQWg4TWNiaDhOaW5hOE5hQWZod2RuZG5kbmRuZG5kbmE4S1BsZGViaWRrYXNhOE1jOThHZ0xmaG9hNWFMZmg4QWFyYztxbGZhd2M5OEdnTGZSYmJoWGN3aHdpbmFvUmJiYXd0YVhWaFhhb2NlZmhvYXdjd2Znd2NhOWhtYmthWVRtbGE4TmNpdGg4RWE4SmFMZmhFY2JoS2luYUVSYmJoTGN3aG9hOEFod2luYXdSYmJhb3RhTFZoTGF3Y2VmaHdhb2N3ZmdvY2E5aG1ia2FyYztxb2ZhS2ZhTGFYN2FROTNhOEU0ODZiYmE4QWFsZmg4QWFFYWxmaEVhTGhYYUtjZWZnS2FZOWhtYnhsa2thWVRtaWE4TWM5Okdob2E4TmNpdGN3R2hFYXJjO3FsZmF3Y2VWZlJiYmN3dGFyYztxbGZhd2M5OkdmUmJiVmhMYXJjO3FvZmh3YWdoWGluYXdhNWFvZlJiYmN3dGFhYW9mUmJiVmc4QWFMOVJnTGNldGFMY3p0Y3o5MWNzNDdjRkZpR2FFNDg2YmJhb2FsZmhvYXdjZWZod2E4QWhMYTNhWGN1ZmdYOWhtYnhpa2thWVRtZGE4SmF3ZmhvYXJjO3FsZmF3ZlJiYmhMYXJjO3FvZmh3YWdoWGluYXdhb1JiYmc4QWFMOVJnTGNldGFMY0t0Y0s5MWNyNDc4NmJiYXdjZWZod2FvYWxmaG9hOEFoTGEzYVhjdWZnWDlobWJ4ZGtrYVlUbWVrYThMeWRiaEVjYmhLYXJjO3FvZmhvaW5jZGhMY2Jod2luYUxhb2F3ZlJiYmNiOWhmaExhd2NlZmd3Y3o5aG1ia2NsaFhjYmh3aW5hWGFvYXdmUmJiY2QwZmhYYXdjZWZnd2N6OWhtYmtjd2g4QWNiaHdpbmE4QWFvYXdmUmJiY1AwZmg4QWF3Y2VmZ3djejlobWJrYUxhWGFMYVg2RWd3YThBYXdhOEE2RWd3Y3phd2N6NkVhRWZoRWFvY3pmaG9hS2N6ZmdLYVk2bWJrYThMYUVCZGJrYThNY2VmaDhNYThOY2VmZzhOY2w5aG1ia2E4S2NlZmc4S2FDOWhtYmthYWFtZmhhYWhheGZoaGE1YW1maDVhM2F4ZmczYWk2bWJrY2Job2NlaHdhUGhMaW5hd2FvYUx5ZGJhcmM7YWxmYW9jZHRmeWRiNkVob2FMY2xmaExhd2NlZmdYaHdhQ2FYOWhtYmthcmFBY2Q0ZmE4RmNkVmFvYW9jZFNFODZiYmFBY2xmZ0FhbDZtYmtrYWJhZWZoOEthYmNlZmhvYWxjZDRnZWNiYURFaGthZGNlZmhPYXJjO2FiZmNlVmhIY2JobWRuZG5pbmFpYW05bm1lYXJjO3FvZmNiY2pkejp4ampqYjhBYThLYW85UmFrNm1kYWRhbWFsMmd3Zmh4Y2JoOEphT2F3Zmh6YW9jYmFrejp4ampqYmdoYWtmaDVhcWFpYW05UmFtYXFmYWk2RWdzY3NmZ29jbDRjaWZjZDRoQ2FvYzlXR2c4TFRoUGluZG5kbmRuZG5kbmRuZG5kbmRuZG5hRFRtYmFyYThKY2Q0ZlJiYmdMY2lHUGxiZWRsYmthc1RtZGF4YThKZmhvYXJjO2FiZmE4SmZSYmJoTGFyYztxb2Zod2FzaFhpbmF3YW9SYmJnOEFhTDlSZ0xjZXRhTGNLdGNLOTFjcjQ3ODZiYmF3Y2VmaHdhb2FsZmhvYThBaExhWGN1ZmdYbWJ4aWtrYXNUbWlhOEpjaXRjd0doRWFyYzthYmZhOEpjZVZmUmJiY3d0YXJjO2FiZmE4SmM5Okdnb2ZSYmJWaExheGFvZmhvYXJjO3FvZmh3YXNoWGluYXdhbzhWYmJnOEFhTDlSZ0xjZXRhTGN6dGN6OTFjczQ3Y0ZGaUdhRTQ4NmJiYXdjZWZod2FvYWxmaG9hOEFoTGFYY3VmZ1htYnhka2thSGE4SmM5OEdnRWZob2F6YUVmaDhBYXJjO2FiZmFFZlJiYmhYY3dod2luYW9SYmJhd3RhWFZoWGFvY2VmaG9hd2N3Zmd3Y2E5aG1ia2FzVG1iYUxjbDRoWWE4SmNpdGNLR2gzYXhhRWZoRWNiaEtpbmFFUmJiaExjd2hvYThBaHdpbmF3UmJiYW90YUxWaExhd2NlZmh3YW9jd2Znb2NhOWhtYmthcmM7cW9mYUtmYUxhWDdhWTkzYTM0ODZiYmE4QWFsZmg4QWFFYWxmaEVhTGhYYUtjZWZnS2FzOWhtYmtrYURtYmNiaG94bGthOExUbWJjYmhvZG5pbmFyYztxb2Zhb2Znd2N3ZjhQaWJhdzhQaWI6ZTlxVG1lYW9jemZnb2E4TDlwbWR4YmtrZG5hdm1iY2Vob3hpa2NiaEVhQ2hLYUNoWWluYXJjO3FvZmFFZmdvY3dmOFBpYmh5YW84UGliaDhQY2RoTGNiaHdpbmFMYW9hd2ZSYmJjYjloZmhMYXdjZWZnd2N6OWhtYmtjbGhYY2Jod2luYVhhb2F3ZlJiYmNkMGZoWGF3Y2VmZ3djejlobWJrY3doOEFjYmh3aW5hOEFhb2F3ZlJiYmNQMGZoOEFhd2NlZmd3Y3o5aG1ia2FMYVhhTGFYNkVnb2E4QWFvYThBNkVnb2N6YW9jejZFYVlmaFlhb2N1Y2JheWE4UDplOWNiOXNFZ3dhb2F3NkVhS2ZoS2FFY3pmZ0VhOEw5cG1keGJra2FoYThKY2Q0ZmdvYW9SYmJjZGE4SmNldGNvR3RWODZiYnhpa2RuYUthczZtYmFZYXM2bWJhaGE4SmNkNGZnb2FvUmJiY2lhOEpjZXRjb0d0Vjg2YmJhOEthNTlSYXM2bXJhNWFyYztxb2Zhc3o6d2pqamJhc2ZoNXhpa2FLYVk5cGhva2FoYThKY2Q0Zmd3YXdSYmJhb2E4SmNldGNvR3RWODZiYmthOEthNTlSYUM2bWxhNWNiYUN6OnhqampiZ0FhQ2ZoWWRuZG5hOExtYmFQaG94ZWtkbmE4S2FZOVJjSzlwbWJhUGhveGVrYW9jZHRjOnExampiZmNqMWpqYmFERWc1eWR4Z2djZXRjOzpGRkZlR2g4RmN1aDNjdWFndGN1N2NGZUdoYWNiaDhNYXJjO3FvZmhMaW5hcmM7cW9mYThNZmhRY3poRWRuZG5kbmFnUERiZWVlZWVlZWRla2N1Y2JhUWN3ZjhQaWJhUThQaWI6ZTljYjlzRWhFeGVrY2Job2E4RmhFaW5hRWFhYUxhb2ZSYmI5bmZoRWFvY2VmZ29jejlobWJra2NpaDhFY2JoOEFpbmN6aHdkbmRuZG5hNWE4QWNkdGZ5ZGJnS1BEYmVlZWVlZWVkZWtjdWNiYVFjd2Y4UGliYVE4UGliOmU5Y2I5c0Vod3hla2FLY2V0Yzs6RkZGZUdod2N1YUt0Y3U3Y0ZlR2hYY2Job2luYXdhWGFMYW9mUmJiOW5maHdhb2NlZmdvY3o5aG1ia2tkbmRuYXdhRTZtYmFLYTM5aG1lYXdhRTlobWVhNWE4RWNkdGZ5ZGJjd1NtZWthOEFoOEVhd2hFa2E4QWNlZmc4QWNpOWhtYmthQWE4TWNvNGZnb2FvUmJiYThFYThNY2k0Y29HdFY4NmJiZG5kbmRuYTVhOEVjZHRmeWRiZzNQRGRiYmJiYmJiZWJrZG5jd2EzOVRnOEVUbWJjdWEzdGN1N2h3ZG5kbmEzY2VTbWJjYmg4TmFMaFFpbmFRaG9hOEVoOEFjYmhYaW5hb1JiYmdFYXdjRmVHZ0thRWFLNkVhWGEzdFZoWGFvY2VmaG9hOEFjdWZnOEFtYmthWWFYODZiYmFRYThFZmhRYVljZWZoWWE4TmE4RWZnOE5jejZtYnhka2tjYmg4TmFMaFFpbmFRaG9hOEVoOEFjYmhYaW5hb1JiYmdFYXdjRmVHZ0thRWFLNkVhWGNldFZoWGFvY2VmaG9hOEFjdWZnOEFtYmthWWFYOlQ5Y0ZlOmQ5YzpjOnFqOmJ3OTo5YzpxO2MxOkkxZTpkOWM6YjpjOmUxejk6OWNhMTg4YmJhUWE4RWZoUWFZY2VmaFlhOE5hOEVmZzhOY3o2bWJra2NiaG9pbmFZYUxhb2ZSYmJnWDg2YmJhWWFYYXdjRmVHOXBmaFlhb2NlZmdvY3o5aG1ieGlra2RuYTNjZVNtYmluYVljYjg2YmJhWWNlZmhZeGJra2luYVljYjg2YmJhWWNlZmhZeGJra2FZYVE4UGJiODNiYmFZY3dmYVFjd2Y4UGJiODNiYmFZY3pmaFlrYThNY3pmZzhNYThMOXBnb21lYUxjemZoTGE4S2FZOVJjSzlwbWJra2FvVG1sYVloNWFZVG1sa2E4SmNlZmc4SmFsOWhtYmthcmM7YWJmYXhhc2N1ZmFsMmZhbHo6d2pqamI4QWFzYW1maG1hNWhvYTVtYmtjYmh3eGRrZG5hOEthbzlSYWthbGZnd2NLY2FhREVnTGF3YUwwRWdYOXBtYmNiaHd4ZGtkbmF3YUw5cG1iYW9jYmFYYXc5Umd3ejp4ampqYmF3Zmhva2FvYXJjO2FkZmFsejp3ampqYmFsZmhvZG5hRFRtYmFvYXJhZXo6d2pqamJhZWZob2thb2FiOVJod3hla2NiaHdrYXJjO3F3ZjhLampqamJhd2s1YmFiYWVhZGFpYWxjZGNieWQ7bTprampiejpiampqYms5cmVkdWFlY2Q0Z2RhZWZnaWNhYWljYTBFYWJjajthYmFlOVVjO1dGYkdjamRhZWNhMEVnaWZjdWZhaTlVYWUyYWlhZGZhaWNsNGNpZmNkNGYyZmNlZmttYmNiYWJCZDttOmtqamJrOkVzZTV1OEpqampqYmM7YWU5UmdsOEtqampqYmNiaHZkbmFpY2k5VWdvY0hmYWUwbWJhYmNieWQ7cTprampiZ3JjO0dlVjg2YmJhbGM7YWJmY0ZlY2plejp4ampqYjhBYWxjVWZndzljdTgzaWJhbGM4V2ZnRDljdTgzaWJhbGN5ZmdxOWN1ODNpYmFsY2FmZ2s5Y3U4M2liYWxjS2ZneDljdTgzaWJhbGN6ZmdtOWN1ODNpYmFsOWN1ODNpd2FsOWN1ODNpYmFiYWVmYzlXZmhQYWJjZWZnc2FvZmhlZG5haVRtYmNtY3NhcmNiOWtnekVoSGNiaE9jYmhBY2JoQ2NiaFhjYmhRaW5kbmFlYVA5bm1iY2Jodnhpa2FRY3VmaHZhZGFDY2R0ZmdMeWRiaEthTGN3ZnlkYmhZYUxjbGZ5ZGJoOEFjYmhFZG5kbmRuaW5hbGM7YWJmYXZjc0djaXRmZ295ZGxoM2RuZG5kbmFveWRiZ29hSzlobWJhM2E4QVNtZWtkbmFvYThBOWhtYmEzYVk5aG1iYUVjZWZoRXhla2FvYVk5aG1lYTNhSzlobWVhRWNkZmhFa2FFYzg3MG1kYVhjdWZodmFMYUVjaUdjeDJnb2M7aTFqamJmeWRiY2R0ZnlkYmgzYUxhb2M7ZTFqamJmeWRiY2R0ZnlkYmg4QWFMYW9jO2ExampiZnlkYmNkdGZ5ZGJoS2NiaG9kbmluZG5hbGF2Y3NHY2R0ZnlkYmEzOWhtYmFvaFl4ZGtjdWhZYXZjdWZodmFvY2VmZ29jejlobWJra2FPYTNhT1NndmFZY2U5aWFZYUg5b1Znb0dmaE9kbmRuZG5jYmNzYXZFYVlhb0VndmNzOWhtYmFyY2U5aW1iYTNhM2FBYTNjZWZhQVNndkVnQWNlZlNtZWNtY3NhdkVodmthc2F2YUVjZHRjO1dlR1Y4NmJiYXZjczlobWVhM2FBOVJndmNldGF2YzhGOTE3aHZpbmFlYXZjRmIwY3J0YXZjRmJHVjg2YmJhZWNlZmhlYXZjamU2aG9hdmNyNGh2YW9UbWJrYTNoQXh2a2NQaHZhc2FFY2R0Y1BWODZiYmEzaEFrYXZUbWlhdmFIOW9taWNkaG9jZWhFYVFoWXhsa2F2Y3VmaHZhRWNsZmdFYzthYjlobWJra2RuYUxjZWFZYU9TY2V0YThBYU9TRWN4Mmd2YzthMWpqYmZ5ZGJjZHRmeWRiZ0tUYUxhdmM7ZTFqamJmeWRiY2R0ZnlkYmc4QWNlU0dhTGF2YztpMWpqYmZ5ZGJjZHRmeWRiZzNjZFNHYU9jYjloR2F6R2c1Y2U5aG1iYXc5Y3U4M2liYUQ5Y3U4M2liYXE5Y3U4M2liYWs5Y3U4M2liYXg5Y3U4M2liYW05Y3U4M2liYWw5Y3U4M2l3YWw5Y3U4M2liY2JoT2tjYmhFYVhjdWZndmhvZG5pbmRuYWxhb2NzR2NkdGZ5ZGJhOEE5aG1iYUVoWXhka2N1aFlhb2N1ZmhvYUVjZWZnRWN6OWhtYmtrY2Job2RuaW5kbmFsYXZjc0djZHRmeWRiYTM5aG1iYW9oRXhka2N1aEVhdmN1Zmh2YW9jZWZnb2N6OWhtYmtrYU9hS2FPU2c4RWZoTGRuZG5hWWNtMG1iYVljZWZoWXhla2NiY3NhOEFhTFNndkVoWWFMYXZmaExrZG5kbmFFY20wbWJhRWNlZmhFeGVrY2Jjc2EzYUxTZ3ZFaEVhTGF2ZmhMa2M5OmN1YThFRWg4RmNiaHZhRWFZY2x0VmdhY0ZlR2hvZG5kbmRuaW5hdmM6VzFqamJmUmJiYW9TbWVhdmNlZmd2Y3o5aG1ieGRra2E1YUthTzloYXZjbTBWVm1iYXNhdmM7V2VWODZiYnhla2FzYThGODZiYmFlYWE4NmJiYWVjZWZoZWtkbmE4RW1iYUthQTlSZ3ZjZXRhdmM4RjkxN2h2aW5hZWF2Y0ZiMGdvY3J0YXZjRmJHVjg2YmJhdmNyNGh2YWVjZWZoZWFvbWJrYUtoQWtkbmFZY3M5aG1iYThBYUE5Umd2Y2V0YXZjOEY5MTdodmluYWVhdmNGYjBnb2NydGF2Y0ZiR1Y4NmJiYXZjcjRodmFlY2VmaGVhb21ia2E4QWhBa2RuYUVjczlobWJhM2FBOVJndmNldGF2YzhGOTE3aHZpbmFlYXZjRmIwZ29jcnRhdmNGYkdWODZiYmF2Y3I0aHZhZWNlZmhlYW9tYmthM2hBa2FsYVhjZHRmYUtCZGJhWGNlZmNzR2h2ZG5kbmFZUHpiZWVlZWVlZWVlZWVlZWViZWthbGF2Y2R0ZmE4QUJkYmFYY2RmY3NHaHZrZG5kbmFFUHpiZWVlZWVlZWVlZWVlZWViZWthbGF2Y2R0ZmEzQmRiYXZjZWZjc0dodmtjaWhvYWxjO2FiZmFRY2l0ZmdFYUtCZGxhRWE4QUJkYmFRY2VmY3NHaFljZGhFYXZoWGFMaE94ZWtjZGhvYWxhWGNkdGZhM0JkYmNlaEVhWGNlZmNzR2hYYVFoWWthbGM7YWJmYVljaXRmZ3ZhOEFCZGxhdmEzQmRiYWxjO2FiZmFRYUVmY3NHY2l0Zmd2YTNCZGxhdmFLQmRiYXNjZWZoc2FRYW9mY3NHaFFhQ2NpZmdDYWk2bWJra2RuYWVhUDlubWJjYmh2eGVrY2JodmluYWVhdmZhdmM6VzFqamJmUmJiODZiYmF2Y2VmZ3ZjejlobWJrYWVhYjlSYXZmaHZrYWxjO2FlZjhLampqamJhdmtaZWV1Y2JoZGRuaW5hZGNlZmdkYzhGMG1lY2VhZHRhZTZtYmtrYWRjcmZjRmVHY3I5VWNpMmNkZmFiY2k5VTJjSGZrbWJjYmFiQmQ7cTprampiazpBZGV3dThKampqamJjejlSaGxjYmh2ZG5haWN2ZmFlMG1iY2JodmFiY2JSYjtxOmtqamJjO3FlVjg2YmJhbDljYjgzaXdhYmNlZmhvYWJhZWZjOThmaHJkbmFpVG1iY2Jod2NiaERpbmRuYW9hcjZtYmNic2thZGFEY2R0ZnlkYmdxYWxjd2Zhd2FxYXY5Umd2YXZjOEY5MWd2N2F2OVJjNTA3Z3djZHRmZ2t5ZGI5Umd2YzhFOTFjOTpHYXZjZHQ3YXdWaHZpbmFvYXZjRmIwZ2VjcnRhdmNGYkdWODZiYmF2Y3I0aHZhb2NlZmhvYWVtYmtha2FxQmRiYXFodmFEY2VmZ0RhaTlobWJra2RuYW9hcjlubWJjYnNrYW9jYkJiYmFvYWI5UmNsZmh2a2F2a0JlZXVjYmhkZG5pbmFkY2VmZ2RjOEYwbWVjZWFkdGFlNm1ia2thZGN3ZmNGZUdjcjlVYWIyY3ZmazpidmxpOTlkdWk5OWx1ZG5hZVRtYmN1YWRjZXRjdWZ0Y3U3OlpodmRuZG5jdWFpY3VmdGN1NzpaZ29KYmJiWk1ncjpsSmJiYjlwOURUbWJhcjpPaHd4ZWtjampqajk0aHdrY2JoaWNiaERpbmFsY2xmSWRiZ3JKYmJiYkpiYmpaYWxJZGJncTpsYXI6bE1hbGN3ZklkYmdrOmxNZ3I6dmFySmJiYmI5QkVnck5oeGFxYXJOaHJkbmRuYWtKYmJiYjlHVG1iYXhocXhla0piYmpaYXI6bDp0Z3FhcTptYXhKYmJiYjlHRWhxSmJialpheDpsOnRneGF4Om1hckpiYmJiOUdFaHJrZG5kbmFsY3hmSWRiZ3hKYmJqOjtheEpiYmo6OzlHRWdrSmJialpha0piYmpaOUZFYXZOSmJiYlpKYmJiOjtheEpiYmJiOUdFTWd4OmxKYmJiOXA5RFRtYmF4Ok9obXhla2NqampqOTRobWtkbmRuYXFKYmJqOjthcUpiYmo6OzlHRWd4SmJialpheEpiYmpaOUZFYW9OSmJiYlpKYmJiOjthcUpiYmJiOUdFTWdxOmxKYmJiOXA5RFRtYmFxOk9oUHhla2NqampqOTRoUGtkbmRuYXJKYmJqOjthckpiYmo6OzlHRWdxSmJialphcUpiYmpaOUZFYW9OSmJiYlpKYmJiOjthckpiYmJiOUdFTWdyOmxKYmJiOXA5RFRtYmFyOk9oc3hla2NqampqOTRoc2tkbmRuYWRjbDlobWJhYmFpZmd6YXM4NmJiYXpjaWZhbTg2YmJhemNkZmF3ODZiYmF6Y2VmYVA4NmJieGVrYWJhRGZnemFzODdlYmF6Y29mYW04N2ViYXpjbGZhdzg3ZWJhemNkZmFQODdlYmthbGN6ZmhsYWljbGZoaWFEY3dmaERhZWN1ZmdlbWJra2s7aGxsZDk5ZXVkOTlldWRuYWVUbWJkbmRuY3VhaWN1ZnRjdTc6Wmd2SmJiYlpNZ286bEpiYmI5cDlEVG1iYW86T2hpeGVrY2pqamo5NGhpa2FpYzs4RmlHaHJpbmFiY29mY2ljZGFsY2xmSWRiOmxhbElkYjpsOUVnaWFsY3dmSWRiOmxhbGFpY2R0ZklkYjpsOUVFZ2lhbGN4ZklkYjpsYWxhaWNkdGZJZGI6bDlFRWdpYXJWODdlYmRuZG5KYmJqOjtKYmJqWmFsYWljZHRmSWRiSmJiYmI5REVnb2FsYWljZDdjZHRmSWRiSjtabDoxWk5OZ3dKYmJqOjthd0piYmo6OzlHRWdESmJialphREpiYmpaOUZFYXZOSmJiYlpKYmJiOjthd0piYmJiOUdFTWd3OmxKYmJiOXA5RFRtYmF3Ok9ocXhla2NqampqOTRocWthYmNkZmFxODdlYmRuZG5hbGFpY2VmY2lHY2R0ZklkYko7Wmw6MVpOYW9OZ3dKYmJqOjthd0piYmo6OzlHRWdESmJialphREpiYmpaOUZFYXZOSmJiYlpKYmJiOjthd0piYmJiOUdFTWd3OmxKYmJiOXA5RFRtYmF3Ok9ocXhla2NqampqOTRocWthYmFxODdlYmRuZG5hb2FsYWljdWZjaUdjZHRmSWRiSjtabDoxWk5OZ29KYmJqOjthb0piYmo6OzlHRWd3SmJialphd0piYmpaOUZFYXZOSmJiYlpKYmJiOjthb0piYmJiOUdFTWdvOmxKYmJiOXA5RFRtYmFvOk9oaXhla2NqampqOTRoaWthYmNsZmFpODdlYmFiY3dmaGJhbGN6ZmhsYWVjdWZnZW1ia2trOzN2aUR1ZTk5ZXU4SmpqampiY2pkOVJnbzhLampqamJhZGNkNGhyZG5kbmRuZG5hdmNkOWhtYmFkY2w2bWVhb2h3YXJoRGluYXdjOkN1QmRiYXdjbGZod2FEY3VmZ0RtYmthZVRtaWFkY2w2bWRhcmNkdGhxYWxoa2NiaHhpbmFvaHdha2hEYXJobWluYXdhd3lkYmdQY2JhRElkYmdzOjhjTDRjRmVHYzpjdWZhc0piYmJiOUJFZ3phUGF6OWtFQmRiYURjbGZoRGF3Y2xmaHdhbWN1ZmdtbWJrYWthcWZoa2F4Y2VmZ3hhZVNtaXhia2thZVRtZHhla2FlVG1la2FyY2R0aGthdmNlOWhocWFkY2w2aGRjYmh4aW5kbmRuZG5hcW1iYWRtZGM6Q3VoRGFsaHdhcmhtaW5hRGNiYXdJZGJnczo4Y0w0Y0ZlR2M6Y3VmYXNKYmJiYjlCRWdQYURhUDlrRWhEYXdjbGZod2FtY3VmZ21tYnhka2tjOkN1aERkbmRuYXZQbGVkZGJka2FkbWRhb2h3YWxobWFyaFBpbmF3Y2JhbUlkYmdzOjhjTDRjRmVHZ3pjOzpiYXpjOzpiMEVjOmN1ZmFzSmJiYmI5QkVCZGJhbWNsZmhtYXdjbGZod2FQY3VmZ1BtYnhka2thZG1lY2Jod2FyaG1pbmFvYXdmY2JhbGF3ZklkYmdzOjhjTDRjRmVHZ1BjOEFhUGM4QTBFYzpjdWZhc0piYmJiOUJFQmRiYXdjbGZod2FtY3VmZ21tYmtrYWRtYmNiaHdhcmhQaW5hRGhtZG5hdmNlU21iYW9hd2Z5ZGJobWtkbmRuYWxhd2ZJZGJnc2Nqamo7OGlhbWFpOVJjZWZnbWNMdDlSOjpOSmJiYlpKYmJiOjthc0piYmJiOUdFTWdzOmxKYmJiOXA5RFRtYmFzOk9oenhla2NqampqOTRoemthYmF3ZmF6Y0ZGRnJHYW1jS3RWQmRiYXdjbGZod2FQY3VmZ1BtYmtrYWJha2ZoYmFsYWtmaGxheGNlZmd4YWU5aG1ia2thb2NqZGY4S2pqampiazpZbHZkdWQ5OWR1ZTk5aXVkbmFlVG1iY2VhaWN1Zmd2dGhvY3VhaXRjdTc6WmhyY3VhdnRjdTc6Wmh3Y2JodmFkY2w5aGhEY2JocWluZG5kbmFsY3dmSWRiZ2tKYmJiYmFrSmJiYmI5R0Vna0piYmpaYWtKYmJqWjlGRWFyTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oaXhla2NqampqOTRoaWtkbmRuYWxJZGJna0piYmJiYWtKYmJiYjlHRWdrSmJialpha0piYmpaOUZFYXJOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hkeGVrY2pqamo5NGhka2FkYWk5UmNkOVRneGFpZmhpZG5kbmFsY2xmSWRiZ2tKYmJiYmFrSmJiYmI5R0Vna0piYmpaYWtKYmJqWjlGRWFyTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oZHhla2NqampqOTRoZGthZGFpOVJjZDlUaGRkbmRuYWxjeGZJZGJna0piYmJiYWtKYmJiYjlHRWdrSmJialpha0piYmpaOUZFYXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hteGVrY2pqamo5NGhta2FkYWlmaGlhb2FtVmhtZG5kbmFEbWJhYmF2ZmdQYWk4NmJiYVBjaWZhbTg2YmJhUGNkZmFkODZiYmFQY2VmYXg4NmJieGVrYWJhcWZnUGFpODdlYmFQY29mYW04N2ViYVBjbGZhZDg3ZWJhUGNkZmF4ODdlYmthbGN6ZmhsYXZjbGZodmFxY3dmaHFhZWN1ZmdlbWJra2s7WXFkWHVpOTk4SmpqampiYzpxZDlSZ3Y4S2pqampiYXZjOlNlZmNiYztLYno6eGpqamI4QWNiaG9kbmFkVG1iY2Job2FpVG1iZG5kbmFiYWVTbWJhZWhyeGVrYXZjdWFkY2R0Z3dhZGNGRkZGaTBFY2J5ZDt1OmtqamJIampqamJiZ3JCZDpTZWF2Y2VCZDptZGFyYWVhd3o6d2pqamI4QWthdmM6R2VmY3dmY2JCZGJhdjljYjgzaTpHZWF2YzpHZWZhcmFkYWlhdmM6U2VmejpwampqYmF2eWQ6R2VoRGFkY2k5VWdxY2J5ZDt1OmtqamJIampqamJiaGVhdmM6U2VmYXZ5ZDptZGdrY2R0ZmFlQmRiYXZha2NlZmd3QmQ6bWRhZWNiYXF6OnhqampiaHhhdmM6U2VmYXdjZHRmY3VhaWNkdGFpY0ZGRkZpMEVjYnlkO3U6a2pqYkhqampqYmJnbUJkYmF2YWtjZGZnUEJkOm1kYWxjO2ViZmhzYURoZWFtaHdpbmF3YWxJZGJhc2FleWRiZ3pjd2F6Y3c2RWNkdGZJZGJNVWRiYWVjbGZoZWF3Y2xmaHdhaWN1ZmdpbWJrYXZjOlNlZmFQY2R0ZmN1YXFjZHRhZGNGRkZGOTcwRWNieWQ7dTprampiSGpqampiYmdQQmRiZG5hZGNpNm1iYXJoZWFQaHdhcWhpaW5hd2FtYWV5ZGJjZHRmSWRiYW1hZWNsZnlkYmNkdGZJZGJNYW1hZWN3ZnlkYmNkdGZJZGJNVWRiYWVjeGZoZWF3Y2xmaHdhaWN1ZmdpbWJra2FrY2lmaG9hbGM7ZWJmaEhhdmM7cWJmaE9hdmhlYXZ5ZDpLZWhBYXZ5ZDpPZWhDY2JoemNiaHdjYmhYY2VoUWluYWVoTGNpaGthcmF3Y2kyZ0tjZHRmZ2V5ZGJoc2FlY2xmeWRiaGRhYmFYY3gyZmdpY3dmYWVjd2Z5ZGJnWUJkYmFpY2xmYWRCZGJhaWFzQmRiYXhhd2ZjZTg2YmJhT2FZQmR3YU9hZEJkbGFPYXNCZGJhUGF3Y2R0ZmNiQmRiZG5helRtYmNpaGthTGhpaW5hT2FrY2R0ZmFpeWRiZ2VCZGJha2FlYVk5aGFlYXM5aGFlYWQ5aEdHZmhrYWljbGZoaWF6Y3VmZ3ptYmtrYVhjZWZoWGNiaHppbmFDYUFhcmF6YUtmY2R0ZnlkYmNkdGdpZnlkYmNkdGZnWWhlYURhaWZnZHlkYmdzaGlkbmFzVG1iZG5pbmFleWRiYXdTbWVhZWNsZmhlYWljdWZnaVRtZHhia2thZWFZYXNjZHRmYzk4ZnlkYkJkYmFkYWR5ZGJjdWZCZGJrYXpjZWZnemNpOWhtYmtkbmRuYWtUbWJjdWh3SmJiYmJoOEFjYmhkYXZ5ZDpLZWhZYXZ5ZDpPZWhLaW5kbmRuYURhT2FkY2R0ZnlkYmNkdGd6ZnlkYmdlbWJhZGNlZmhkeGVrYWRjczBoaWFtYXpmZ3NJZGJoRWFzYWxjYmFkY2VmZ2RhaUVjZHRmSWRiYUhhZWN3YWVjdzZFY2R0ZklkYk1nM1VkYmEzYUU6dGgzYWVjZHRoaWFLYVlhemZ5ZGJjZHRmaGVpbmFQYWV5ZGJnemNkdGZnc2EzYXNJZGJNZ0VVZGJhRWE4QWE4QWFFOURnc0VoOEFhemF3YXNFaHdhZWNsZmhlYWljOThmZ2ltYmtrYWRhazlobWJrYXdjdTlobWVrYVFhcTlwbWRpbmRuYXhhUWZSYmJtYmFRaHd4ZGthcWFRY2VmZ1E5aG1ieGlra2FrY3pha2N6NkVoemFPaGVhTGhPYXdjdTlobWJra2FvY2R0YXZjOlNlZmZjOThmaGVkbmluYW9UbWVhZXlkYmNieWQ7eTprampiSDpiampqYmJhZWM5OGZoZWFvY3VmaG94YmtrYXZjOnFkZjhLampqamJrO0lsZXZ1Y3VhaWNkdGd2YWljRkZGRmkwRWdvY2J5ZDt1OmtqamJIampqamJiaHJhbGFseWQ5R2d3Y2R0ZmFyQmRiYWxhd2NlZkJkOUdhYmFyQmRiYW9jYnlkO3U6a2pqYkhqampqYmJocmFsYWx5ZDlHZ29jZHRmYXJCZGJhbGFvY2VmQmQ5R2FiYXJCZGxjdWFkY2R0YWRjRkZGRmkwRWNieWQ7dTprampiSGpqampiYmhyYWxhbHlkOUdnb2NkdGZhckJkYmFsYW9jZWZCZDlHYWJhckJkd2FieWRiY2Jhdno6eGpqamI4QWFkY2k5VWhEZG5hZFRtYmFieWRiaG9hZWhsYWRocmluYW9hbHlkYmNkdGZndmF2eWRiY2VmQmRiYWxjbGZobGFyY3VmZ3JtYmtrZG5haVRtYmFieWRiaGxhYnlkbGhyY2JodmFpaG9pbmFyYXZCZGJhcmNsZmhyYWx5ZGJhdmZodmFsY2xmaGxhb2N1ZmdvbWJra2RuYWRjaTZtYmFieWRsaHJhYnlkd2h2Y2JobGluYWVjd2Z5ZGJob2FlY2xmeWRiaGRhcmFleWRiY2R0Zmd3YXd5ZGJnd2NlZkJkYmF2YXdjZHRmYWxCZGJhcmFkY2R0ZmdkYWR5ZGJnZGNlZkJkYmF2YWRjZHRmYWxCZGJhcmFvY2R0ZmdvYW95ZGJnb2NlZkJkYmF2YW9jZHRmYWxCZGJhZWN4ZmhlYURhbGNlZmdsOWhtYmtrZG5haVRtYmFieWRsaGVhYnlkYmhsaW5hZWFleWRiYWx5ZGI5UkJkYmFsY2xmaGxhZWNsZmhlYWljdWZnaW1ia2trUWJhYmFlYWRhaWM7SzFqamJ6Om9qampia1FiYWJhZWFkYWljO206ampqYno6b2pqamJrOURlZXVhYmNGZWFpY2R0ejp4ampqYmhsY2JoYmRuYWRUbWJpbmRuYWxhZXlkYmNkdGZnaXlkYmN1OWhtYmFpYWJCZGJhYmNlZmhia2FlY2xmaGVhZGN1ZmdkbWJra2FiazpWdmlvdWQ5OmR1OEpqampqYmM7V2E5UmdsOEtqampqYmNiaHZhbGN4ZmNiYztLYno6eGpqamI4QWFsY3VhZGNpdGdvYWRjRkZGRmUwRWNieWQ7dTprampiSGpqampiYmdyQmR4YWxjZUJkMmFyYWVhZGFpY2V6TmpqamJhbGN1YW9hZGNqampqb0dFY2J5ZDt1OmtqamJIampqamJiZ3dCZHphZGNkdGhlZG5hZFRtYmFiaGlpbmFpYXZCZGJhaWNsZmhpYWRhdmNlZmd2OWhtYmtrYXdhZWZoRGFsYWJCZHdhbGF3QmRsOWNiaHFpbmRuYWRUbWJhcTljcTk6aGthcmh2YURoaWFkaGVpbmFpYXY4UGliYWsxOk5jRnJHODdlYmF2Y3dmaHZhaWNkZmhpYWVjdWZnZW1ia2thbGNsZmFxOk5jZUdjZHRmeWRiaHhhbGNsZmFxOWNlOThncTpOY2VHY2R0ZnlkYmhtYWxjO1diZmNiY2phejp4ampqYjhBYURodmFkaGlkbmFkVG1iaW5hbGM7V2JmYXY4VmViY2R0ZmdlYWV5ZGJjZWZCZGJhdmNkZmh2YWljdWZnaW1ia2tjYmh2Y2JoaWluYWxjO1diZmF2ZmdleWRiaG9hZWFpQmRiYW9haWZoaWF2Y2xmZ3ZjamE5aG1ia2FkaHZkbmRuYWRUbWJpbmFsYztXYmZhRGFteWRiZ2ljZXRmOFZlYmNkdGZnZWFleWRiZ2VjZWZCZGJheGFlY2R0ZmFpQmRiYW1jbGZobWF2Y3VmZ3ZtYmthcTljdjlzbWRjYmh2aW5hYmF3eWRiY2R0ZmF2QmRiYXdjbGZod2FkYXZjZWZndjlobWJ4ZGtrYXE5Y3Y5c21la2tjbGh2ZG5pbmF2Yzk4U21lYWxjeGZhdmZ5ZGJjYnlkO3k6a2pqYkg6YmpqamJiYXZjOThmaHZ4YmtrYWxjO1dhZjhLampqamJrOkp3bGl1bzk5aXVkOTpjYmh2OEpqampqYmNhOVJnb2N6ZmN3ZmNieWQ6ODprampiQmRiYW9jYjhQZDowOmtqamI4M2l6YW9jd2ZjYnlkO2k6a2pqYkJkYmFvY2I4UGQ7YTprampiODNpYmFpY2Q0aHJkbmRuYWRtYkpGRnVGaHdKRkZ1dWhESkZGdXVocUpGRnVGaGtKRkZ1dWh4SkZGdUZobXhla2FyY2R0aFBhZWhzaW5jYmhpaW5hb2N6ZmFpZmd6YXNhaWZJZGJnd2F6SWRiZ0RhRGF3OUVFVWRiYW9haWZnemF3YXpJZGJnRGFEYXc5REVVZGJhaWNsZmdpY3g5aG1ia2FzYVBmaHNhdmNlZmd2YWQ5aG1ia2FvSWRLaERhb0lkd2h3YW9JZENocWFvSWRsaGthb0lkemh4YW9JZGJobWtkbmFkVG1iSmJiYmJKYkZ1OWhKYmJiYmFtYXg6dGdtYW1KYmJiYjlERWdtYWthcTp0Z2tha2FtOURFZ2thd2FEOnRnd2F3YWs5REVndzp2YXdKYmJiYjlCRWh3ZG5hbG1iYXJjZHRob2luZG5kbmFlY2xmSWRiYXE6dGF3TkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oaXhla2NqampqOTRoaWthaTpTOWNDOmdoSGRuZG5hZUlkYmF4OnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYUhhaTpTOmVoSGRuZG5hZWN3ZklkYmFEOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhSGFpOlQ5Y3k6ZzplODNpYmFlYW9maGVhYmN3ZmhiYWRjdWZnZG1ieGRra2FyY2R0aG9pbmRuZG5hZUlkYmF4OnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWk6U2dIOWNhOmdhSDljejpnOWNqamo7NHM6ZDplYUg5Y0ZlOmQ6ZTljRjpiajs0OnBqO2FyOmQ5YzpiZDk6OWM6cDtHOmQ7NGo6RTthcjpkOWNIOTo5YztkO0g6Vzp5Om06ZztkO0hiOmQ5Y3Y5OjljO2o6S007ajpLTTtqOktkOmRoT2RuZG5hZWNsZklkYmFxOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWk6U2dIOWNhOmdhSDljejpnOWNqamo7NHM6ZDplYUg5Y0ZlOmQ6ZTljRjpiajs0OnBqO2FyOmQ5YzpiZDk6OWM6cDtHOmQ7NGo6RTthcjpkOWNIOTo5YztkO0g6Vzp5Om06ZztkO0hiOmQ5Y3E5OjljTTtqOktNO2o6S007amw6ZGFPOmVoT2RuZG5hZWN3ZklkYmFEOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhT2FpOlNnSDljYTpnYUg5Y3o6ZzljampqOzRzOmQ6ZWFIOWNGZTpkOmU5Y0Y6Ymo7NDpwajthcjpkOWM6YmQ5OjljOnA7RzpkOzRqOkU7YXI6ZDljSDk6OWM7ZDtIOlc6eTptOmc7ZDtIYjpkOWNDOTo5YzpLTTtqOktNO2o6S01EOmQ6ZTgzaWJhZWFvZmhlYWJjd2ZoYmFkY3VmZ2RtYmtrazl0ZWl1Y2JjYnlkO0M6a2pqYmdlYWJjaWZjOThHZmdiQmQ7QzprampiZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrO3RlZWV1ZG5kbmFlYWJWY2lHVG1iYWJoaXhla2RuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFleWRiQmRiYWlhZXlkbEJkbGFpYWV5ZHdCZHdhaWFleWR4QmR4YWVjemZoZWFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFleWRiQmRiYWVjbGZoZWFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlUmJiODZiYmFpY2VmaGlhZWNlZmhlYWRjdWZnZG1ia2thYms6M2VlZHVkbmRuYWJjaUdUbWJhYmhpeGVrYWVjRmVHYzpiOmM6ZXcyaGxkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhbEJkeGFpYWxCZHdhaWFsQmRsYWlhbEJkYmFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFsQmRiYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWU4NmJiYWljZWZoaWFkY3VmZ2RtYmtrYWJrOXRlaXVjYmNieWQ7QzprampiZ2VhYmNyZmM5NEdmZ2JCZDtDOmtqamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtUZWV1Y2JhYmNieWQ7QzprampiZ2U5UmNpZmM5OEdhZWZnYkJkO0M6a2pqYmRuYWJaYmN6dGdlOW5tYmFiYWU5UmNGRmlmY3o0bmI4QWtraztVZGRiY2p3azttZGJiYmJkYmJibGJiYndiYmJiYmJiZWJiYmRiYmJsYmJid2JiYmJiYmJiYmJiYmJiYmI0Omg5dzlOOTQ6UDpnVzpqOU86eWU5UGJiYmJiYmViYmJkYmJiZWJiYmRiYmJiYmJiZGJiYmJiYmJlYmJiYmJiYjpsMjloWjs2OTo5a1o7Tjs3Nlo7cmc5N1o7ejtvOXhaOEo7Qjg1Wjs6O3U5eVo7YjtrOUhaOjI7WjlEWjllOmw5bVo1OUE4S1o6cjtUM1o6QTp6WVo3OU9IWjtqNDo6ODo6WTpEOVY4OmJiYmI5czo0OTpaOFI6aEJaOU05TTtNODpMO3o7bzg6Ozg6UEc4OXE7eDpKODc4UjpoUTg6Ok06QjtlODdiYmJiYmJqWmJialpiYmpaOkU7VjtOODo6WTpEc1o5aTtIOzY4OnhkO1I4OjtoMDgzODo7VzpOb1piYmJiOldWOU84OnVmODg4OjlpO0g7Njg6OWM5RztMODk7bjttOW04OTtEOEtvODpiYmJiZjo4dFo5bTgzNlpTOjJBWkw7elBaWjgxOEVaOWU6bHhaO1U5OEY4OjgxOUU7Njg6RkZ1dUZGdXVGRnV1RkZ1RkZGdUZGRnVGYmM7bXFrQ2ViYmJlYmJiZWJiYmRiYmI5Rzp2YmIiLHQ9bmV3IFVpbnQ4QXJyYXkoWzMyLDAsNjUsMiwxLDEwNiwzNCwzMywzLDEyOCwxMSw0LDEzLDY0LDYsMjUzLDEwLDcsMTUsMTE2LDEyNyw1LDgsMTIsNDAsMTYsMTksNTQsMjAsOSwyNywyNTUsMTEzLDE3LDQyLDY3LDI0LDIzLDE0NiwxNDgsMTgsMTQsMjIsNDUsNzAsNjksNTYsMTE0LDEwMSwyMSwyNSw2Myw3NSwxMzYsMTA4LDI4LDExOCwyOSw3MywxMTVdKTtpZih0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiKXJldHVybntzdXBwb3J0ZWQ6ITF9O3ZhciBuLG89V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYShlKSx7fSkudGhlbihmdW5jdGlvbihtKXtuPW0uaW5zdGFuY2Usbi5leHBvcnRzLl9fd2FzbV9jYWxsX2N0b3JzKCksbi5leHBvcnRzLm1lc2hvcHRfZW5jb2RlVmVydGV4VmVyc2lvbigxKSxuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleFZlcnNpb24oMSl9KTtmdW5jdGlvbiBhKG0pe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShtLmxlbmd0aCkscD0wO3A8bS5sZW5ndGg7KytwKXt2YXIgeT1tLmNoYXJDb2RlQXQocCk7YltwXT15Pjk2P3ktOTc6eT42ND95LTM5OnkrNH1mb3IodmFyIEU9MCxwPTA7cDxtLmxlbmd0aDsrK3ApYltFKytdPWJbcF08NjA/dFtiW3BdXTooYltwXS02MCkqNjQrYlsrK3BdO3JldHVybiBiLmJ1ZmZlci5zbGljZSgwLEUpfWZ1bmN0aW9uIHIobSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaShtKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobS5idWZmZXIsbS5ieXRlT2Zmc2V0LG0uYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gZihtLGIscCx5KXt2YXIgRT1uLmV4cG9ydHMuc2JyayxfPUUoYi5sZW5ndGgqNCksVD1FKHAqNCksdz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlciksUj1pKGIpO3cuc2V0KFIsXykseSYmeShfLF8sYi5sZW5ndGgscCk7dmFyIFM9bShULF8sYi5sZW5ndGgscCk7dz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIEM9bmV3IFVpbnQzMkFycmF5KHApO25ldyBVaW50OEFycmF5KEMuYnVmZmVyKS5zZXQody5zdWJhcnJheShULFQrcCo0KSksUi5zZXQody5zdWJhcnJheShfLF8rYi5sZW5ndGgqNCkpLEUoXy1FKDApKTtmb3IodmFyIEk9MDtJPGIubGVuZ3RoOysrSSliW0ldPUNbYltJXV07cmV0dXJuW0MsU119ZnVuY3Rpb24gZChtLGIscCx5KXt2YXIgRT1uLmV4cG9ydHMuc2JyayxfPUUocCo0KSxUPUUocCp5KSx3PW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt3LnNldChpKGIpLFQpLG0oXyxULHAseSksdz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFI9bmV3IFVpbnQzMkFycmF5KHApO3JldHVybiBuZXcgVWludDhBcnJheShSLmJ1ZmZlcikuc2V0KHcuc3ViYXJyYXkoXyxfK3AqNCkpLEUoXy1FKDApKSxSfWZ1bmN0aW9uIGMobSxiLHAseSxFLF8sVCl7dmFyIHc9bi5leHBvcnRzLnNicmssUj13KGIpLFM9dyh5KkUpLEM9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0Muc2V0KGkocCksUyk7dmFyIEk9bShSLGIsUyx5LEUsXyxUKSxOPW5ldyBVaW50OEFycmF5KEkpO3JldHVybiBOLnNldChDLnN1YmFycmF5KFIsUitJKSksdyhSLXcoMCkpLE59ZnVuY3Rpb24gdShtKXtmb3IodmFyIGI9MCxwPTA7cDxtLmxlbmd0aDsrK3Ape3ZhciB5PW1bcF07Yj1iPHk/eTpifXJldHVybiBifWZ1bmN0aW9uIGwobSxiKXtpZihyKGI9PTJ8fGI9PTQpLGI9PTQpcmV0dXJuIG5ldyBVaW50MzJBcnJheShtLmJ1ZmZlcixtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoLzQpO3ZhciBwPW5ldyBVaW50MTZBcnJheShtLmJ1ZmZlcixtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoLzIpO3JldHVybiBuZXcgVWludDMyQXJyYXkocCl9ZnVuY3Rpb24gaChtLGIscCx5LEUsXyxUKXt2YXIgdz1uLmV4cG9ydHMuc2JyayxSPXcocCp5KSxTPXcocCpfKSxDPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtDLnNldChpKGIpLFMpLG0oUixwLHksRSxTLFQpO3ZhciBJPW5ldyBVaW50OEFycmF5KHAqeSk7cmV0dXJuIEkuc2V0KEMuc3ViYXJyYXkoUixSK3AqeSkpLHcoUi13KDApKSxJfXJldHVybntyZWFkeTpvLHN1cHBvcnRlZDohMCxyZW9yZGVyTWVzaDpmdW5jdGlvbihtLGIscCl7dmFyIHk9Yj9wP24uZXhwb3J0cy5tZXNob3B0X29wdGltaXplVmVydGV4Q2FjaGVTdHJpcDpuLmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleENhY2hlOnZvaWQgMDtyZXR1cm4gZihuLmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleEZldGNoUmVtYXAsbSx1KG0pKzEseSl9LHJlb3JkZXJQb2ludHM6ZnVuY3Rpb24obSxiKXtyZXR1cm4gcihtIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKG0ubGVuZ3RoJWI9PTApLHIoYj49MyksZChuLmV4cG9ydHMubWVzaG9wdF9zcGF0aWFsU29ydFJlbWFwLG0sbS5sZW5ndGgvYixiKjQpfSxlbmNvZGVWZXJ0ZXhCdWZmZXI6ZnVuY3Rpb24obSxiLHApe3IocD4wJiZwPD0yNTYpLHIocCU0PT0wKTt2YXIgeT1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVWZXJ0ZXhCdWZmZXJCb3VuZChiLHApO3JldHVybiBjKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlcix5LG0sYixwKX0sZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWw6ZnVuY3Rpb24obSxiLHAseSxFKXtyKHA+MCYmcDw9MjU2KSxyKHAlND09MCkscih5Pj0wJiZ5PD0zKSxyKEU9PT12b2lkIDB8fEU9PTB8fEU9PTEpO3ZhciBfPW4uZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlckJvdW5kKGIscCk7cmV0dXJuIGMobi5leHBvcnRzLm1lc2hvcHRfZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWwsXyxtLGIscCx5LEU9PT12b2lkIDA/LTE6RSl9LGVuY29kZUluZGV4QnVmZmVyOmZ1bmN0aW9uKG0sYixwKXtyKHA9PTJ8fHA9PTQpLHIoYiUzPT0wKTt2YXIgeT1sKG0scCksRT1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlckJvdW5kKGIsdSh5KSsxKTtyZXR1cm4gYyhuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlcixFLHksYiw0KX0sZW5jb2RlSW5kZXhTZXF1ZW5jZTpmdW5jdGlvbihtLGIscCl7cihwPT0yfHxwPT00KTt2YXIgeT1sKG0scCksRT1uLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleFNlcXVlbmNlQm91bmQoYix1KHkpKzEpO3JldHVybiBjKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUluZGV4U2VxdWVuY2UsRSx5LGIsNCl9LGVuY29kZUdsdGZCdWZmZXI6ZnVuY3Rpb24obSxiLHAseSxFKXt2YXIgXz17QVRUUklCVVRFUzp0aGlzLmVuY29kZVZlcnRleEJ1ZmZlckxldmVsLFRSSUFOR0xFUzp0aGlzLmVuY29kZUluZGV4QnVmZmVyLElORElDRVM6dGhpcy5lbmNvZGVJbmRleFNlcXVlbmNlfTtyZXR1cm4gcihfW3ldKSxfW3ldKG0sYixwLDIsRT09PXZvaWQgMD8wOkUpfSxlbmNvZGVGaWx0ZXJPY3Q6ZnVuY3Rpb24obSxiLHAseSl7cmV0dXJuIHIocD09NHx8cD09OCkscih5Pj0yJiZ5PD0xNiksaChuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJPY3QsbSxiLHAseSwxNil9LGVuY29kZUZpbHRlclF1YXQ6ZnVuY3Rpb24obSxiLHAseSl7cmV0dXJuIHIocD09OCkscih5Pj00JiZ5PD0xNiksaChuLmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJRdWF0LG0sYixwLHksMTYpfSxlbmNvZGVGaWx0ZXJFeHA6ZnVuY3Rpb24obSxiLHAseSxFKXtyKHA+MCYmcCU0PT0wKSxyKHk+PTEmJnk8PTI0KTt2YXIgXz17U2VwYXJhdGU6MCxTaGFyZWRWZWN0b3I6MSxTaGFyZWRDb21wb25lbnQ6MixDbGFtcGVkOjN9O3JldHVybiBoKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUZpbHRlckV4cCxtLGIscCx5LHAsRT9fW0VdOjEpfSxlbmNvZGVGaWx0ZXJDb2xvcjpmdW5jdGlvbihtLGIscCx5KXtyZXR1cm4gcihwPT00fHxwPT04KSxyKHk+PTImJnk8PTE2KSxoKG4uZXhwb3J0cy5tZXNob3B0X2VuY29kZUZpbHRlckNvbG9yLG0sYixwLHksMTYpfX19KSgpfSk7dmFyIHpzLE94PVgoKCk9Pnt6cz0oZnVuY3Rpb24oKXt2YXIgZT0iYjlINzlUZWJiYmU4RnY5R2JiOUd2dXV1dXVldTlHaXV1dWI5R2V1ZXU5R2l1dXVldWl4a2JlZWVkZGRkaWxsdmllYmVvd2V1ZWM6VzpPZGtyO05lcW85VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiOEE5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVmJlWTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXNjlVOUtXOTQ5YzkxOU05TVdWYmRFOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c2OVU5S1c5NDl0V0c5MVc5VTlKV2JpTDlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVjlwOUp0YmxLOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWOXI5MTlIdGJ2TDlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVlQ5NDlXYm9ZOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWSjlWMjlWVmJybDc5SVY5UmJ3cTtsWmtkYms7allpNXVkOTpkdThKampqamJjajtrYjlSZ3Y4S2pqampiYzk6aG9kbmFsVG1iY3Vob2FpUmJiZ3JjO1dlR2M6R2U5aG1iYXJjc0dnd2NlMG1iYzk6aG9hbGN1ZmFkY2Q0Y2Jhd0VnRGFkZmdyY0tjYWF3RWdxYXJhcTBFZ2s2bWJhaWNlZmh4Y2o7YWJhZDlVYztXRmJHY2pkYWRjYTBFaG1haWFsZmdQYXI5UmdvYWRmaHNhdmFvYWR6OmpqampiZ3pjZVZoSGNiaE9kbmRuaW5hZWFPOW5tZWFQYXg5UmFENm1kYW1hZWFPOVJhT2FtZmdvYWU2RWdBY3NmZ2xjOVdHaENhYmFPYWQyZmhYYUFjZXRoUWF4YURmaGlhT2FlYW9hZWFvNkU5UmhMYWxjbDRjaWZjZDRoS2F6Y2o7Y2JmYUFmaFljYmg4QWF6Y2pkZmhFYUhoM2luY2Job2RuYXdUbWJheGE4QWNkNGZSYmJob2thb2NGZUdoNWNiaDhFYXpjajtjYmZocWluYWloOEZkbmRuZG5kbmE1YThFY2V0NGNpR2dvYzk6ZlBkZWJka2FQYThGOVJhQTZtcmF6Y2o7Y2JmYThFYUEyZmE4RmFBejpqampqYjhBYThGYUFmaGl4ZGthemNqO2NiZmE4RWFBMmZjYmFBejprampqYjhBYThGaGl4ZWthUGE4RjlSYUs2bXZhOEZhS2ZoaWRuYUNUbWJhUGFpOVJjSzZtYmFvY2R0YzpxMWpqYmZjajFqamJhd0VoYWN6aHJjYmhsaW5hcmdvYzlXZmdoYXFmaHJkbmRuZG5kbmRuZG5hYWE4RmFoY280ZlJiYmFsY29HNGNpR2NkdGZ5ZGJQRGJlZHZpdnZ2bHZrYXI5Y2I4M2JiYXJjd2Y5Y2I4M2JieGxrYXJjYmFpUmJkYWk4WGJiOWM6Yzpxajpidzk6OWM6cTtjMTpJMWU6ZDljOmI6YzplMXo5OmdnOWNqampqano6ZGc4SjlxRTg2YmJhcWFvZmdyY0dmYWc5YzhGMTpOZ2hjS3RjOEY5MWFpY2RmYThKOWM4TjE6TmZnOEtSYmJHODZiYmFyY1ZmY2JhOEthaGNqZUdjcjRmZ2hSYmJhZzljampqampsOmRnOEo5cUU4NmJiYXJjN2ZjYmFoYThKOWM4TDE6TmZnaFJiYmFnOWNqampqamQ6ZGc4SjlxRTg2YmJhcmN0ZmNiYWhhOEo5YzhLMTpOZmdoUmJiYWc5Y2pqampqZTpkZzhKOXFFODZiYmFyYzkxZmNiYWhhOEo5YzhKMTpOZmdoUmJiYWc5Y2pqamo7YWI6ZGc4SjlxRTg2YmJhcmM0ZmNiYWhhOEo5Y2cxOk5mZ2hSYmJhZzljampqamE6ZGc4SjlxRTg2YmJhcmM5M2ZjYmFoYThKOWNoMTpOZmdoUmJiYWc5Y2pqamp6OmRnZzlxRTg2YmJhcmM5NGZjYmFoYWc5Y2ExOk5mZ2hSYmJhaThYYmU5YzpjOnFqOmJ3OTo5YzpxO2MxOkkxZTpkOWM6YjpjOmUxejk6Z2c5Y2pqampqejpkZzhKOXFFODZiYmFyYzk1ZmFnOWM4RjE6TmdpY0t0YzhGOTFhaGE4SjljOE4xOk5mZ2hSYmJHODZiYmFyYzk2ZmNiYWhhaWNqZUdjcjRmZ2lSYmJhZzljampqampsOmRnOEo5cUU4NmJiYXJjOTdmY2JhaWE4SjljOEwxOk5mZ2lSYmJhZzljampqampkOmRnOEo5cUU4NmJiYXJjOThmY2JhaWE4SjljOEsxOk5mZ2lSYmJhZzljampqamplOmRnOEo5cUU4NmJiYXJjOTlmY2JhaWE4SjljOEoxOk5mZ2lSYmJhZzljampqajthYjpkZzhKOXFFODZiYmFyYzk6ZmNiYWlhOEo5Y2cxOk5mZ2lSYmJhZzljampqamE6ZGc4SjlxRTg2YmJhcmN1ZmNiYWlhOEo5Y2gxOk5mZ2lSYmJhZzljampqano6ZGdnOXFFODZiYmFpYWc5Y2ExOk5maGl4aWthcmFpUmJsYWlSYmJnaGNvNGc4S2E4S2NpU2c4S0U4NmJiYXFhb2ZncmNHZmFpY2xmYThLZmc4S1JiYmFoY2w0Y2lHZzhMYThMY2lTZzhMRTg2YmJhcmNWZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjN2ZhOEthOExmZzhLUmJiYWhjaUdnaGFoY2lTZ2hFODZiYmFyY3RmYThLYWhmZzhLUmJiYWlSYmVnaGNvNGc4TGE4TGNpU2c4TEU4NmJiYXJjOTFmYThLYThMZmc4S1JiYmFoY2w0Y2lHZzhMYThMY2lTZzhMRTg2YmJhcmM0ZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjOTNmYThLYThMZmc4S1JiYmFoY2lHZ2hhaGNpU2doRTg2YmJhcmM5NGZhOEthaGZnOEtSYmJhaVJiZGdoY280ZzhMYThMY2lTZzhMRTg2YmJhcmM5NWZhOEthOExmZzhLUmJiYWhjbDRjaUdnOExhOExjaVNnOExFODZiYmFyYzk2ZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjOTdmYThLYThMZmc4S1JiYmFoY2lHZ2hhaGNpU2doRTg2YmJhcmM5OGZhOEthaGZnaFJiYmFpUmJpZ2ljbzRnOEthOEtjaVNnOEtFODZiYmFyYzk5ZmFoYThLZmdoUmJiYWljbDRjaUdnOEthOEtjaVNnOEtFODZiYmFyYzk6ZmFoYThLZmdoUmJiYWljZDRjaUdnOEthOEtjaVNnOEtFODZiYmFyY3VmYWhhOEtmZ3JSYmJhaWNpR2dpYWljaVNnaUU4NmJiYXJhaWZoaXhka2FyYWlSYndhaVJiYmdoY2w0ZzhLYThLY3NTZzhLRTg2YmJhcWFvZmdyY0dmYWljd2ZhOEtmZzhLUmJiYWhjc0dnaGFoY3NTZ2hFODZiYmFyY1ZmYThLYWhmZ2hSYmJhaVJiZWc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjN2ZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjdGZhaGE4S2ZnaFJiYmFpUmJkZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5MWZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjNGZhaGE4S2ZnaFJiYmFpUmJpZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5M2ZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjOTRmYWhhOEtmZ2hSYmJhaVJibGc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjOTVmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyYzk2ZmFoYThLZmdoUmJiYWlSYnZnOEtjbDRnOExhOExjc1NnOExFODZiYmFyYzk3ZmFoYThMZmdoUmJiYThLY3NHZzhLYThLY3NTZzhLRTg2YmJhcmM5OGZhaGE4S2ZnaFJiYmFpUmJvZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5OWZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjOTpmYWhhOEtmZ2hSYmJhaVJicmdpY2w0ZzhLYThLY3NTZzhLRTg2YmJhcmN1ZmFoYThLZmdyUmJiYWljc0dnaWFpY3NTZ2lFODZiYmFyYWlmaGl4ZWthcmFpOFBiYjgzYmJhcmN3ZmFpY3dmOFBiYjgzYmJhaWN6Zmhpa2RuYW9hQzlwbWJhbGNkZmhsYW9jemZocmFQYWk5UmNMMG1la2thb2FDNm1vYWltZXhva2FDbXZhOEZUbXZrYXFhQWZocWE4RWNlZmc4RWNsOWhtYmtkbmRuZG5kbmF3VG1iYXNhOEFjZDRmUmJiZ29jaUdQbGJlZHJia2FBVG1kYXphOEFmaDhGYXpjajtjYmZoaGNiaDhFYUVoYWluYThGUmJiaHJhYWhvY2JobGluYW9haGFsZlJiYmdxY2U0Y2JhcWNlRzlSN2FyZmdyODZiYmFvYWRmaG9hQWFsY2VmZ2w5aG1ia2FhY2VmaGFhOEZjZWZoOEZhaGFBZmhoYThFY2VmZzhFY2w5aG1ieGlra2FBVG1lYXphOEFmaGFhemNqO2NiZmhoY2Job2NlaDhFYVloOEZpbmFFYW9maGxhYThWYmJocmNiaG9pbmFsYThGYW9mUmJiY3d0YWhhb2ZSYmJncVZjOzpGaUdjZTRjYmFxY2VHOVI3YXJmZ3I4N2JiYWxhZGZobGFMYW9jZWZnb2ZtYmthOEZhUWZoOEZjZGhvYWFjZGZoYWFoYVFmaGhhOEVjZUdobGNiaDhFYWxtYnhka2thQVRtYmNiYW9jbDQ5Umg4RWF6YThBZlJiYmhxY3dob2EzaGxpbmFsUmJiYW90YXFWaHFhbGNlZmhsYW9jd2Znb2NhOWhtYmtjYmhoYUVoOEZhWWhhaW5hemNqO2NiZmFoZlJiYmhyY3dob2FhaGxpbmFsUmJiYW90YXJWaHJhbGFBZmhsYW9jd2Znb2NhOWhtYmthcmE4RTkzYXE3aHFjYmhvYThGaGxpbmFsYXFhbzQ4NmJiYWxjZWZobGFvY3dmZ29jYTlobWJrYThGYWRmaDhGYWFjZWZoYWFoY2VmZ2hhQTlobWJra2FFY2xmaEVhM2NsZmgzYThBY2xmZzhBYWQ2bWJrYVhhemNqZGZhQWFkMno6ampqamI4QWF6YXpjamRmYUFjdWZhZDJmYWR6OmpqampiOEFhQWFPZmhPYWloeGFpbWJrYzk6aG94ZGtjYmM5OWFQYXg5UmFrU0Vob3hla2M5Omhva2F2Y2o7a2JmOEtqampqYmFvazpYc2VIdThKampqamJjO2FlOVJndjhLampqamJjOTpob2RuYWVjaTlVZ3JjSGZhbDBtYmN1aG9haVJiYmd3YztXZUdjO0dlOWhtYmF3Y3NHZ0RjZTBtYmF2YzthYmZjRmVjamV6OmtqampiOEFhdmNVZjljdTgzaWJhdmM4V2Y5Y3U4M2liYXZjeWY5Y3U4M2liYXZjYWY5Y3U4M2liYXZjS2Y5Y3U4M2liYXZjemY5Y3U4M2liYXY5Y3U4M2l3YXY5Y3U4M2liYWlhbGZjOVdmaHFhaWNlZmd3YXJmaGxkbmFlVG1iY21jc2FEY2VTRWhrY2JoeGNiaG1jYmhyY2JoaWNiaG9pbmRuYWxhcTlubWJjOTpob3hpa2RuZG5hd1JiYmdEYztWZTBtYmF2YzthYmZhb2FEY3U3Z1BjbDRmY3NHY2l0ZmdzeWRsaHphc3lkYmhIZG5kbmFEY3NHZ3NhazlwbWJhdmFpYVBmY3NHY2R0ZnlkYmF4YXNFaERheGFzVGdPZmh4eGVrZG5kbmFzY3NTbWJjZWhPYXNjOTg3YXNhbWZmY2VmaER4ZWthbGNlZmhEYWw4U2JiZ3NjRmVHaFBkbmRuYXNjdTltbWJhRGhseGVrYWxjdmZobGFQY0ZiR2hQY3Joc2RuaW5hRDhTYmJnT2NGYkdhc3RhUFZoUGFPY3U5a21lYURjZWZoRGFzY3JmZ3NjOEo5aG1ieGRra2FEY2VmaGxrY2VoT2FQY2U0Y2JhUGNlRzlSN2FtZmhEa2FEaG1rYXZjO2FiZmFvY2l0ZmdzYURCZGJhc2F6QmRsYXZhaWNkdGZhREJkYmF2YzthYmZhb2NlZmNzR2NpdGZnc2FIQmRiYXNhREJkbGFvY2RmaG9hT2FpZmhpZG5hZGNkOWhtYmFiYXJjZXRmZ3NhSDg3ZWJhc2NsZmFEODdlYmFzY2RmYXo4N2VieGRrYWJhcmNkdGZnc2FIQmRiYXNjd2ZhREJkYmFzY2xmYXpCZGJ4ZWtkbmFEY3BlMG1iYXhjZWZnT2F2YWlhcWFEY3NHZlJiYmdzY2w0OVJjc0djZHRmeWRiYXNjejZnUEVoRGF2YWlhczlSY3NHY2R0ZnlkYmFPYVBmZ3phc2NzR2dPRWhzYU9UaE9kbmRuYWRjZDlobWJhYmFyY2V0ZmdIYXg4N2ViYUhjbGZhczg3ZWJhSGNkZmFEODdlYnhla2FiYXJjZHRmZ0hheEJkYmFIY3dmYXNCZGJhSGNsZmFEQmRia2F2YWljZHRmYXhCZGJhdmM7YWJmYW9jaXRmZ0hhREJkYmFIYXhCZGxhdmFpY2VmZ2ljc0djZHRmYURCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ0hhc0JkYmFIYURCZGxhdmFpYVBmZ2ljc0djZHRmYXNCZGJhdmM7YWJmYW9jZGZjc0djaXRmZ0RheEJkYmFEYXNCZGxhb2NpZmhvYWlhT2ZoaWF6YU9maHh4ZWtheGNiYWxSYmJnSEVnQWFEYzs6ZVNnRGZoemFIY3NHaENhSGNsNGhYZG5kbmFIY3MwbWJhemNlZmhPeGVrYXpoT2F2YWlhWDlSY3NHY2R0ZnlkYmh6a2RuZG5hQ21iYU9jZWZoeHhla2FPaHhhdmFpYUg5UmNzR2NkdGZ5ZGJoT2tkbmRuYURUbWJhbGNlZmhEeGVrYWxjZGZoRGFsOFNiZWdQY0ZlR2hzZG5hUGN1OWttYmFsY29maEFhc2NGYkdoc2NyaGxkbmluYUQ4U2JiZ1BjRmJHYWx0YXNWaHNhUGN1OWttZWFEY2VmaERhbGNyZmdsYzhKOWhtYmthQWhEeGVrYURjZWZoRGthc2NlNGNiYXNjZUc5UjdhbWZnbWhBa2RuZG5hWGNzU21iYURoc3hla2FEY2VmaHNhRDhTYmJnbGNGZUdoUGRuYWxjdTlrbWJhRGN2Zmh6YVBjRmJHaFBjcmhsZG5pbmFzOFNiYmdEY0ZiR2FsdGFQVmhQYURjdTlrbWVhc2NlZmhzYWxjcmZnbGM4SjlobWJrYXpoc3hla2FzY2VmaHNrYVBjZTRjYmFQY2VHOVI3YW1mZ21oemtkbmRuYUNjc1NtYmFzaGx4ZWthc2NlZmhsYXM4U2JiZ0RjRmVHaFBkbmFEY3U5a21iYXNjdmZoT2FQY0ZiR2hQY3JoRGRuaW5hbDhTYmJnc2NGYkdhRHRhUFZoUGFzY3U5a21lYWxjZWZobGFEY3JmZ0RjOEo5aG1ia2FPaGx4ZWthbGNlZmhsa2FQY2U0Y2JhUGNlRzlSN2FtZmdtaE9rZG5kbmFkY2Q5aG1iYWJhcmNldGZnRGFBODdlYmFEY2xmYU84N2ViYURjZGZhejg3ZWJ4ZWthYmFyY2R0ZmdEYUFCZGJhRGN3ZmFPQmRiYURjbGZhekJkYmthdmM7YWJmYW9jaXRmZ0RhekJkYmFEYUFCZGxhdmFpY2R0ZmFBQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdEYU9CZGJhRGF6QmRsYXZhaWNlZmdpY3NHY2R0ZmF6QmRiYXZjO2FiZmFvY2RmY3NHY2l0ZmdEYUFCZGJhRGFPQmRsYXZhaWFIY3o2YVhjc1NWZmdpY3NHY2R0ZmFPQmRiYWlhQ1RhQ2NzU1ZmaGlhb2NpZmhva2F3Y2VmaHdhb2NzR2hvYWljc0doaWFyY2lmZ3JhZTZtYmtrY2JjOTlhbGFxU0Vob2thdmM7YWVmOEtqampqYmFvazpjbGV2dThKampqamJjejlSaHZkbmFlY3ZmYWw5bm1iYzk6c2tkbmFpUmJiYzs6ZUdjO3FlU21iY3Vza2F2OWNiODNpd2FpY2VmaG9haWFsZmM5OGZocmRuYWVUbWJkbmFkY2RTbWJjYmh3aW5kbmFvYXI2bWJjOTpza2FvY2VmaGxhbzhTYmJnaWNGZUdoZGRuZG5haWN1OW1tYmFsaG94ZWthb2N2ZmhvYWRjRmJHaGRjcmhpZG5pbmFsOFNiYmdEY0ZiR2FpdGFkVmhkYURjdTlrbWVhbGNlZmhsYWljcmZnaWM4SjlobWJ4ZGtrYWxjZWZob2thYmF3Y2R0ZmFkYzhFdGM4RjkxYWRjZDQ3YXZjd2ZhZGNlR2NkdFZnbHlkYmZnaUJkYmFsYWlCZGJhd2NlZmd3YWU5aG1ieGRra2NiaHdpbmRuYW9hcjZtYmM5OnNrYW9jZWZobGFvOFNiYmdpY0ZlR2hkZG5kbmFpY3U5bW1iYWxob3hla2FvY3ZmaG9hZGNGYkdoZGNyaGlkbmluYWw4U2JiZ0RjRmJHYWl0YWRWaGRhRGN1OWttZWFsY2VmaGxhaWNyZmdpYzhKOWhtYnhka2thbGNlZmhva2FiYXdjZXRmYWRjOEV0YzhGOTFhZGNkNDdhdmN3ZmFkY2VHY2R0VmdseWRiZmdpODdlYmFsYWlCZGJhd2NlZmd3YWU5aG1ia2tjYmM5OWFvYXJTRWs6THZvZXVlOTlkdWQ5OWV1ZDk5ZG5kbmFkY2w5aG1iYWVUbWVpbmRuZG5hYmNkZmdkOFNiYjpZYWI4U2JiZ2k6WWdsOmw6dGFiY2VmZ3Y4U2JiZ286WWdyOmw6dGd3SmJiOzo5Y2F3YXdOSmJiYmJhd2F3SmJiYmI5R2dERWdxOm1na2FxYWljYjlpRWFsTWd3YXdOYWthcWFvY2I5aUVhck1ncWFxTk1NOnI6dmdsTkpiYmJaSmJiYjo7YURFTWdyOmxKYmJiOXA5RFRtYmFyOk9oaXhla2NqampqOTRoaWthZGFpODZiYmRuZG5hcWFsTkpiYmJaSmJiYjo7YXFKYmJiYjlHRU1ncTpsSmJiYjlwOURUbWJhcTpPaGR4ZWtjampqajk0aGRrYXZhZDg2YmJkbmRuYXdhbE5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hkeGVrY2pqamo5NGhka2FiYWQ4NmJiYWJjbGZoYmFlY3VmZ2VtYnhka2thZVRtYmluZG5kbmFiY2xmZ2Q4VWViOllhYjhVZWJnaTpZZ2w6bDp0YWJjZGZndjhVZWJnbzpZZ3I6bDp0Z3dKYjs6RlNhd2F3TkpiYmJiYXdhd0piYmJiOUdnREVncTptZ2thcWFpY2I5aUVhbE1nd2F3TmFrYXFhb2NiOWlFYXJNZ3FhcU5NTTpyOnZnbE5KYmJiWkpiYmI6O2FERU1ncjpsSmJiYjlwOURUbWJhcjpPaGl4ZWtjampqajk0aGlrYWRhaTg3ZWJkbmRuYXFhbE5KYmJiWkpiYmI6O2FxSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hkeGVrY2pqamo5NGhka2F2YWQ4N2ViZG5kbmF3YWxOSmJiYlpKYmJiOjthd0piYmJiOUdFTWd3OmxKYmJiOXA5RFRtYmF3Ok9oZHhla2NqampqOTRoZGthYmFkODdlYmFiY3dmaGJhZWN1ZmdlbWJra2s6OmlvaXVlOTlkdWQ5OWR1ZDk5ZG5hZVRtYmNiaGlhYmhsaW5kbmRuYWw4VWViZ3Y6WWdvSjpqaToxU2FsY29mOFVlYmdyY2lWZ3c6WTp2Z0ROSmJiYlpKYmJiOjthdmN1OWtFTWdxOmxKYmJiOXA5RFRtYmFxOk9oa3hla2NqampqOTRoa2thbGNsZjhVZWJodmFsY2RmOFVlYmh4YWJhaWFyY2VmY2lHZmNldGZhazg3ZWJkbmRuYXg6WWdxYUROSmJiYlpKYmJiOjtheGN1OWtFTWdtOmxKYmJiOXA5RFRtYmFtOk9oeHhla2NqampqOTRoeGthYmFpYXJjaUdmZ2tjZDdjZXRmYXg4N2ViZG5kbmF2OllnbWFETkpiYmJaSmJiYjo7YXZjdTlrRU1nUDpsSmJiYjlwOURUbWJhUDpPaHZ4ZWtjampqajk0aHZrYWJhaWFyY3VmY2lHZmNldGZhdjg3ZWJkbmRuYXdhdzI6WmdQYVBNYW9hb046dGFxYXFOOnRhbWFtTjp0Z29KYmJiYmFvSmJiYmI5R0U6cmFETkpiYmJaTWdEOmxKYmJiOXA5RFRtYmFEOk9ocnhla2NqampqOTRocmthYmFrY2V0ZmFyODdlYmFsY3dmaGxhaWNsZmhpYWVjdWZnZW1ia2trOW1iZG5hZGNkNGFlMmdkVG1iaW5hYmFieWRiZ2Vjd3RjdzkxOllhZWNlOTFjampqOThHY2pqajs4aWY6Ok5VZGJhYmNsZmhiYWRjdWZnZG1ia2trOlR2aXJ1ZDk5ZXVkbmRuYWRjbDlobWJhZVRtZWluZG5kbmFiUmJiZ2lhYmNlZmdsOFNiYmd2YWJjZGZnbzhTYmJncmY5UjpZSmJidUphYmNpZmd3UmJiZ2RjZTRhZFZnRGNkNGFEVmdEY2w0YURWZ0Q6Wjp2Z3FOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2h4eGVrY2pqamo5NGh4a2FvYXg4NmJiZG5kbmFyYWlmOllhcU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaG94ZWtjampqajk0aG9rYWxhbzg2YmJkbmRuYXZhaWZhcjlSOllhcU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhaTg2YmJkbmRuYURhZGNldEdhZGNlR1Y6WmFxTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthd2FkODZiYmFiY2xmaGJhZWN1ZmdlbWJ4ZGtrYWVUbWJpbmRuZG5hYjhWZWJnaWFiY2RmZ2w4VWViZ3ZhYmNsZmdvOFVlYmdyZjlSOllKYkZ1OWhhYmNvZmd3OFZlYmdkY2U0YWRWZ0RjZDRhRFZnRGNsNGFEVmdEY3c0YURWZ0Q6Wjp2Z3FOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2h4eGVrY2pqamo5NGh4a2FvYXg4N2ViZG5kbmFyYWlmOllhcU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaG94ZWtjampqajk0aG9rYWxhbzg3ZWJkbmRuYXZhaWZhcjlSOllhcU5KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWJhaTg3ZWJkbmRuYURhZGNldEdhZGNlR1Y6WmFxTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthd2FkODdlYmFiY3dmaGJhZWN1ZmdlbWJra2s5dGVpdWNiY2J5ZDpLMWpqYmdlYWJjaWZjOThHZmdiQmQ6SzFqamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWs7dGVlZXVkbmRuYWVhYlZjaUdUbWJhYmhpeGVrZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWV5ZGJCZGJhaWFleWRsQmRsYWlhZXlkd0Jkd2FpYWV5ZHhCZHhhZWN6ZmhlYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWVSYmI4NmJiYWljZWZoaWFlY2VmaGVhZGN1ZmdkbWJra2FiazozZWVkdWRuZG5hYmNpR1RtYmFiaGl4ZWthZWNGZUdjOmI6YzpldzJobGRuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFsQmR4YWlhbEJkd2FpYWxCZGxhaWFsQmRiYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWxCZGJhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZTg2YmJhaWNlZmhpYWRjdWZnZG1ia2thYmtrODFkYmNqd2s4S2JiYmJkYmJibGJiYndiYmJiYmJiZWJiYmRiYmJsYmJid2JiYmJjOkt3a2w4V05iYiIsdD0iYjlINzlUZWJiYmVLbDlHYmI5R3Z1dXV1dWV1OUdpdXV1YjlHZXVldWl4a2JiZWJlZWRkZGRpbHZlOVdlZWV2aWViZW93ZXVlYzpxOjZka3I7TmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXOXdXVnRXOTQ5YzkxOU05TVdWYmRZOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c2OVU5S1c5NDljOTE5TTlNV1ZibEU5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzY5VTlLVzk0OXRXRzkxVzlVOUpXYnZMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWOXA5SnRib0s5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YnJMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWVDk0OVdid1k5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYkRsNzlJVjlSYnFxOkN0a2xiemlrOTpldnU4SmpqampiY3o5UmhiY2JoZWluY2JoZGNiaGlpbmFiY3dmYWRmYWljanVhZWFkNGNlR2dsRTg2YmJhaWFsZmhpYWRjZWZnZGN3OWhtYmthZWM6cTp5ampiZmFpODZiYmFlY2l0YzpxMWpqYmZhYjhQaXc4M2liYWVjZWZnZWNqZDlobWJrazoxODNsWXVkOTdkdXI5NzhKampqamJjajtrYjlSZ3Y4S2pqampiYzk6aG9kbmFsVG1iY3Vob2FpUmJiZ3JjO1dlR2M6R2U5aG1iYXJjc0dnd2NlMG1iYzk6aG9hbGN1ZmFkY2Q0Y2Jhd0VnRGFkZmdyY0tjYWF3RWdxYXJhcTBFZ2s2bWJhaWNlZmh4YXZhaWFsZmdtYXI5UmdvYWQ7OHFiYmNqO2FiYWQ5VWM7V0ZiR2NqZGFkY2EwRWhQZG5kbmRuYWRUbWJhb2FkZmhzY2JoemluYWVhejlubWRhbWF4OVJhRDZtaWFiYXphZDJmaEhheGFEZmhPYVBhZWF6OVJhemFQZmFlNkVnQWNzZmdvY2w0Y2lmY2Q0aENhdmNqO2NiZmFvYzlXR2dYY2V0ZmhRYXZjajtjYmZhWGNpMmZoTGF2Y2o7Y2JmYVhmaEtjYmhZYW9jO2FiNmg4QWluY2Job2RuYXdUbWJheGFZY2Q0ZlJiYmhva2FvY0ZlR2hFY2JoM2F2Y2o7Y2JmaDVpbmRuZG5kbmRuYUVhM2NldDRjaUdnb2M5OmZQZGViZGthbWFPOVJhWDZtd2F2Y2o7Y2JmYTNhWDJmYU9hWDs4cWJiYU9hQWZoT3hka2F2Y2o7Y2JmYTNhWDJmY2JhWDs4a2J4ZWthbWFPOVJhQzZtb2FvY2xWY2Jhd0VocmFPYUNmaG9jYmhpZG5hOEFtYmFtYW85UmM7R2I2bWJjYmhsaW5hNWFsZmhpZG5kbmRuZG5kbmRuYU9hbGNvNGZSYmJncWNpR2FyZlBEYmVkaWJsZWRpYmthaXB4YmJiYmJiYmJiYmJiYmJiYnBrbGJ4bGthaWFvcGJibGFvcGJiYmc4RWNscDptZWE4RXBtYnplSGRPaUFsQ3ZYb1FyTGc4RWNkcDptZWE4RXBtYnplSGRPaUFsQ3ZYb1FyTHB4aWlpaWlpaWlpaWlpaWlpaXA5b2c4RnB4aWlpaWlpaWlpaWlpaWlpaXA4Smc4RXA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2FjaXRjOnExampiZnBiaWJhYWM6cTp5ampiZlJiYmdhcHNhOEVwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0YzpxMWpqYmZwYmlicDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhOEZhOEVwOXNwa2xiYWFhb2NsZmZhaGM6cTp5ampiZlJiYmZob3hpa2FpYW9wYmJ3YW9wYmJiZzhFY2xwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDlvZzhGcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZzhFcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nYWNpdGM6cTFqamJmcGJpYmFhYzpxOnlqamJmUmJiZ2Fwc2E4RXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2hjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGE4RmE4RXA5c3BrbGJhYWFvY3dmZmFoYzpxOnlqamJmUmJiZmhveGRrYWlhb3BiYmJwa2xiYW9jemZob3hla2FpYW9wYmJkYW9SYmJnYWNpdGM6cTFqamJmcGJpYmFhYzpxOnlqamJmUmJiZ2Fwc2FvUmJlZ2hjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrbGJhYWFvY2RmZmFoYzpxOnlqamJmUmJiZmhva2RuZG5kbmRuZG5kbmFxY2Q0Y2lHYXJmUERiZWRpYmxlZGlia2FpY3pmcHhiYmJiYmJiYmJiYmJiYmJicGtsYnhsa2FpY3pmYW9wYmJsYW9wYmJiZzhFY2xwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMZzhFY2RwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZzhGcHhpaWlpaWlpaWlpaWlpaWlpcDhKZzhFcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nYWNpdGM6cTFqamJmcGJpYmFhYzpxOnlqamJmUmJiZ2Fwc2E4RXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2hjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGE4RmE4RXA5c3BrbGJhYWFvY2xmZmFoYzpxOnlqamJmUmJiZmhveGlrYWljemZhb3BiYndhb3BiYmJnOEVjbHA6bWVhOEVwbWJ6ZUhkT2lBbEN2WG9RckxweHNzc3Nzc3Nzc3Nzc3Nzc3NwOW9nOEZweHNzc3Nzc3Nzc3Nzc3Nzc3NwOEpnOEVwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdhY2l0YzpxMWpqYmZwYmliYWFjOnE6eWpqYmZSYmJnYXBzYThFcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naGNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYThGYThFcDlzcGtsYmFhYW9jd2ZmYWhjOnE6eWpqYmZSYmJmaG94ZGthaWN6ZmFvcGJiYnBrbGJhb2N6ZmhveGVrYWljemZhb3BiYmRhb1JiYmdhY2l0YzpxMWpqYmZwYmliYWFjOnE6eWpqYmZSYmJnYXBzYW9SYmVnaGNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtsYmFhYW9jZGZmYWhjOnE6eWpqYmZSYmJmaG9rZG5kbmRuZG5kbmRuYXFjbDRjaUdhcmZQRGJlZGlibGVkaWJrYWljYWZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljYWZhb3BiYmxhb3BiYmJnOEVjbHA6bWVhOEVwbWJ6ZUhkT2lBbEN2WG9RckxnOEVjZHA6bWVhOEVwbWJ6ZUhkT2lBbEN2WG9RckxweGlpaWlpaWlpaWlpaWlpaWlwOW9nOEZweGlpaWlpaWlpaWlpaWlpaWlwOEpnOEVwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdhY2l0YzpxMWpqYmZwYmliYWFjOnE6eWpqYmZSYmJnYXBzYThFcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naGNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYThGYThFcDlzcGtsYmFhYW9jbGZmYWhjOnE6eWpqYmZSYmJmaG94aWthaWNhZmFvcGJid2FvcGJiYmc4RWNscDptZWE4RXBtYnplSGRPaUFsQ3ZYb1FyTHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A5b2c4RnB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A4Smc4RXA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2FjaXRjOnExampiZnBiaWJhYWM6cTp5ampiZlJiYmdhcHNhOEVwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdoY2l0YzpxMWpqYmZwYmlicDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhOEZhOEVwOXNwa2xiYWFhb2N3ZmZhaGM6cTp5ampiZlJiYmZob3hka2FpY2FmYW9wYmJicGtsYmFvY3pmaG94ZWthaWNhZmFvcGJiZGFvUmJiZ2FjaXRjOnExampiZnBiaWJhYWM6cTp5ampiZlJiYmdhcHNhb1JiZWdoY2l0YzpxMWpqYmZwYmlicDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBwa2xiYWFhb2NkZmZhaGM6cTp5ampiZlJiYmZob2tkbmRuZG5kbmRuZG5hcWNvNGFyZlBEYmVkaWJsZWRpYmthaWM4V2ZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljOFdmYW9wYmJsYW9wYmJiZzhFY2xwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMZzhFY2RwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZzhGcHhpaWlpaWlpaWlpaWlpaWlpcDhKZzhFcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naWNpdGM6cTFqamJmcGJpYmFpYzpxOnlqamJmUmJiZ2lwc2E4RXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ3FjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGE4RmE4RXA5c3BrbGJhaWFvY2xmZmFxYzpxOnlqamJmUmJiZmhveGlrYWljOFdmYW9wYmJ3YW9wYmJiZzhFY2xwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDlvZzhGcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZzhFcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naWNpdGM6cTFqamJmcGJpYmFpYzpxOnlqamJmUmJiZ2lwc2E4RXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ3FjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGE4RmE4RXA5c3BrbGJhaWFvY3dmZmFxYzpxOnlqamJmUmJiZmhveGRrYWljOFdmYW9wYmJicGtsYmFvY3pmaG94ZWthaWM4V2Zhb3BiYmRhb1JiYmdpY2l0YzpxMWpqYmZwYmliYWljOnE6eWpqYmZSYmJnaXBzYW9SYmVncWNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtsYmFpYW9jZGZmYXFjOnE6eWpqYmZSYmJmaG9rYWxjO2FiZmhpYWxjamVmYVgwbWVhaWhsYW1hbzlSYztGYjBtYmtrZG5haWFYOXBtYmFpY2k0aGxpbmFtYW85UmNLNm13YTVhaWZocWRuZG5kbmRuZG5kbmFPYWljbzRmUmJiYWxjb0c0Y2lHYXJmUERiZWRpYmxlZGlia2FxcHhiYmJiYmJiYmJiYmJiYmJicGtiYnhsa2FxYW9wYmJsYW9wYmJiZzhFY2xwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMZzhFY2RwOm1lYThFcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZzhGcHhpaWlpaWlpaWlpaWlpaWlpcDhKZzhFcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nYWNpdGM6cTFqamJmcGJpYmFhYzpxOnlqamJmUmJiZ2Fwc2E4RXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2hjaXRjOnExampiZnBiaWJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGE4RmE4RXA5c3BrYmJhYWFvY2xmZmFoYzpxOnlqamJmUmJiZmhveGlrYXFhb3BiYndhb3BiYmJnOEVjbHA6bWVhOEVwbWJ6ZUhkT2lBbEN2WG9RckxweHNzc3Nzc3Nzc3Nzc3Nzc3NwOW9nOEZweHNzc3Nzc3Nzc3Nzc3Nzc3NwOEpnOEVwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdhY2l0YzpxMWpqYmZwYmliYWFjOnE6eWpqYmZSYmJnYXBzYThFcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naGNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYThGYThFcDlzcGtiYmFhYW9jd2ZmYWhjOnE6eWpqYmZSYmJmaG94ZGthcWFvcGJiYnBrYmJhb2N6ZmhveGVrYXFhb3BiYmRhb1JiYmdhY2l0YzpxMWpqYmZwYmliYWFjOnE6eWpqYmZSYmJnYXBzYW9SYmVnaGNpdGM6cTFqamJmcGJpYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtiYmFhYW9jZGZmYWhjOnE6eWpqYmZSYmJmaG9rYWxjZGZobGFpY3pmZ2lhWDZtYmtrYW9oT2FvVG1va2E1YVhmaDVhM2NlZmczY2w5aG1ia2RuZG5kbmRuYXdUbWJhc2FZY2Q0ZlJiYmdsY2lHUGxiZWR3YmthWFRtZGF2Y2pkZmFZZmhsYXZhWWZwYmRiaGdjYmhvaW5hbGF2Y2o7Y2JmYW9mcGJsYmc4SmFLYW9mcGJsYmc4S3BtYnplSGRPaUFsQ3ZYb1FyTGc4TGFRYW9mcGJsYmc4TWFMYW9mcGJsYmc4TnBtYnplSGRPaUFsQ3ZYb1FyTGd5cG1iZXpIZGlPQWx2Q1hvclFMZzhFY2VwOVRhOEVweGVlZWVlZWVlZWVlZWVlZWVnOEZwOW9wOUhwOXJnOEVhZ3A5VWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG1sdm9ybHZvcmx2b3Jsdm9ycDlVZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnZ3A5QWJiYmFsYWRmZ2xhZ2E4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A5VWdncDlBYmJiYWxhZGZnbGFnYThMYXlwbXdES1lxazhBRXhtMzVQczhFOEZnOEVjZXA5VGE4RWE4RnA5b3A5SHA5cmc4RXA5VWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG1sdm9ybHZvcmx2b3Jsdm9ycDlVZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnZ3A5QWJiYmFsYWRmZ2xhZ2E4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A5VWdncDlBYmJiYWxhZGZnbGFnYThKYThLcG13S0RZcThBa0V4M201UDhFczhGZzhKYThNYThOcG13S0RZcThBa0V4M201UDhFczhGZzhLcG1iZXpIZGlPQWx2Q1hvclFMZzhFY2VwOVRhOEVhOEZwOW9wOUhwOXJnOEVwOVVnZ3A5QWJiYmFsYWRmZ2xhZ2E4RWE4RXBtbHZvcmx2b3Jsdm9ybHZvcnA5VWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG13RHFrd0Rxa3dEcWt3RHFrcDlVZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXhtUHN4bVBzeG1Qc3htUHNwOVVnZ3A5QWJiYmFsYWRmZ2xhZ2E4SmE4S3Btd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RWNlcDlUYThFYThGcDlvcDlIcDlyZzhFcDlVZzhGcDlBYmJiYWxhZGZnbGE4RmE4RWE4RXBtbHZvcmx2b3Jsdm9ybHZvcnA5VWc4RnA5QWJiYmFsYWRmZ2xhOEZhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnOEZwOUFiYmJhbGFkZmdsYThGYThFYThFcG14bVBzeG1Qc3htUHN4bVBzcDlVZ2dwOUFiYmJhbGFkZmhsYW9jemZnb2FYNm1ieGlra2FYVG1lYXZjamRmYVlmaGxhdmFZZnBiZGJoZ2NiaG9pbmFsYXZjajtjYmZhb2ZwYmxiZzhKYUthb2ZwYmxiZzhLcG1iemVIZE9pQWxDdlhvUXJMZzhMYVFhb2ZwYmxiZzhNYUxhb2ZwYmxiZzhOcG1iemVIZE9pQWxDdlhvUXJMZ3lwbWJlekhkaU9BbHZDWG9yUUxnOEVjZXA6bmVhOEVweGViZWJlYmViZWJlYmViZWJnOEZwOW9wOmJlcDlyZzhFYWdwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbWx2b3Jsdm9ybHZvcmx2b3JwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXhtUHN4bVBzeG1Qc3htUHNwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOExheXBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RWNlcDpuZWE4RWE4RnA5b3A6YmVwOXJnOEVwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbWx2b3Jsdm9ybHZvcmx2b3JwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEVhOEVwbXhtUHN4bVBzeG1Qc3htUHNwOm9lZ2dwOUFiYmJhbGFkZmdsYWdhOEphOEtwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOEphOE1hOE5wbXdLRFlxOEFrRXgzbTVQOEVzOEZnOEtwbWJlekhkaU9BbHZDWG9yUUxnOEVjZXA6bmVhOEVhOEZwOW9wOmJlcDlyZzhFcDpvZWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG1sdm9ybHZvcmx2b3Jsdm9ycDpvZWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG13RHFrd0Rxa3dEcWt3RHFrcDpvZWdncDlBYmJiYWxhZGZnbGFnYThFYThFcG14bVBzeG1Qc3htUHN4bVBzcDpvZWdncDlBYmJiYWxhZGZnbGFnYThKYThLcG13REtZcWs4QUV4bTM1UHM4RThGZzhFY2VwOm5lYThFYThGcDlvcDpiZXA5cmc4RXA6b2VnOEZwOUFiYmJhbGFkZmdsYThGYThFYThFcG1sdm9ybHZvcmx2b3Jsdm9ycDpvZWc4RnA5QWJiYmFsYWRmZ2xhOEZhOEVhOEVwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZzhGcDlBYmJiYWxhZGZnbGE4RmE4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A6b2VnZ3A5QWJiYmFsYWRmaGxhb2N6ZmdvYVg2bWJ4ZGtrYVhUbWJjYmhvY2JhbGNsNGdsOVJjOEZHaGlhdmNqZGZhWWZocmF2YVlmcGJkYmg4RmluYXJhdmNqO2NiZmFvZnBibGJnZ2FLYW9mcGJsYmc4SnBtYnplSGRPaUFsQ3ZYb1FyTGc4S2FRYW9mcGJsYmc4TGFMYW9mcGJsYmc4TXBtYnplSGRPaUFsQ3ZYb1FyTGc4TnBtYmV6SGRpT0FsdkNYb3JRTGc4RWFpcDpSZWE4RWFscDpTZXA5cWc4RWE4RnA5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhOEVhOEVwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnOEZwOUFiYmJhcmFkZmdyYThGYThFYThFcG13RHFrd0Rxa3dEcWt3RHFrcDlyZzhGcDlBYmJiYXJhZGZncmE4RmE4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhOEthOE5wbXdES1lxazhBRXhtMzVQczhFOEZnOEVhaXA6UmVhOEVhbHA6U2VwOXFnOEVwOXJnOEZwOUFiYmJhcmFkZmdyYThGYThFYThFcG1sdm9ybHZvcmx2b3Jsdm9ycDlyZzhGcDlBYmJiYXJhZGZncmE4RmE4RWE4RXBtd0Rxa3dEcWt3RHFrd0Rxa3A5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhOEVhOEVwbXhtUHN4bVBzeG1Qc3htUHNwOXJnOEZwOUFiYmJhcmFkZmdyYThGYWdhOEpwbXdLRFlxOEFrRXgzbTVQOEVzOEZnZ2E4TGE4TXBtd0tEWXE4QWtFeDNtNVA4RXM4Rmc4SnBtYmV6SGRpT0FsdkNYb3JRTGc4RWFpcDpSZWE4RWFscDpTZXA5cWc4RXA5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhOEVhOEVwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnOEZwOUFiYmJhcmFkZmdyYThGYThFYThFcG13RHFrd0Rxa3dEcWt3RHFrcDlyZzhGcDlBYmJiYXJhZGZncmE4RmE4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhZ2E4SnBtd0RLWXFrOEFFeG0zNVBzOEU4Rmc4RWFpcDpSZWE4RWFscDpTZXA5cWc4RXA5cmc4RnA5QWJiYmFyYWRmZ3JhOEZhOEVhOEVwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnOEZwOUFiYmJhcmFkZmdyYThGYThFYThFcG13RHFrd0Rxa3dEcWt3RHFrcDlyZzhGcDlBYmJiYXJhZGZncmE4RmE4RWE4RXBteG1Qc3htUHN4bVBzeG1Qc3A5cmc4RnA5QWJiYmFyYWRmaHJhb2N6ZmdvYVg2bWJra2FZY2xmZ1lhZDZtYmthSGF2Y2pkZmFBYWQyOzhxYmJhdmF2Y2pkZmFBY3VmYWQyZmFkOzhxYmJhQWF6Zmh6Yzk6aG9hT2h4YU9tYnhsa2thZVRtYmFEYWxmaHJjYmhvY3VobGluYXJhbGFEOVJnbGZhRDZtZGFQYWVhbzlSYW9hUGZhZTZFYW9mZ29hZTZtYmthaWFsOVJoeGtjYmM5OWFtYXg5UmFrU0Vob3hla2M5Omhva2F2Y2o7a2JmOEtqampqYmFva3diejpiampqYms6VHNlSHU4SmpqampiYzthZTlSZ3Y4S2pqampiYzk6aG9kbmFlY2k5VWdyY0hmYWwwbWJjdWhvYWlSYmJnd2M7V2VHYztHZTlobWJhd2NzR2dEY2UwbWJhdmM7YWJmY0ZlY2plOzhrYmF2Y1VmOWN1ODNpYmF2YzhXZjljdTgzaWJhdmN5ZjljdTgzaWJhdmNhZjljdTgzaWJhdmNLZjljdTgzaWJhdmN6ZjljdTgzaWJhdjljdTgzaXdhdjljdTgzaWJhaWFsZmM5V2ZocWFpY2VmZ3dhcmZobGRuYWVUbWJjbWNzYURjZVNFaGtjYmh4Y2JobWNiaHJjYmhpY2Job2luZG5hbGFxOW5tYmM5OmhveGlrZG5kbmF3UmJiZ0RjO1ZlMG1iYXZjO2FiZmFvYURjdTdnUGNsNGZjc0djaXRmZ3N5ZGxoemFzeWRiaEhkbmRuYURjc0dnc2FrOXBtYmF2YWlhUGZjc0djZHRmeWRiYXhhc0VoRGF4YXNUZ09maHh4ZWtkbmRuYXNjc1NtYmNlaE9hc2M5ODdhc2FtZmZjZWZoRHhla2FsY2VmaERhbDhTYmJnc2NGZUdoUGRuZG5hc2N1OW1tYmFEaGx4ZWthbGN2ZmhsYVBjRmJHaFBjcmhzZG5pbmFEOFNiYmdPY0ZiR2FzdGFQVmhQYU9jdTlrbWVhRGNlZmhEYXNjcmZnc2M4SjlobWJ4ZGtrYURjZWZobGtjZWhPYVBjZTRjYmFQY2VHOVI3YW1maERrYURobWthdmM7YWJmYW9jaXRmZ3NhREJkYmFzYXpCZGxhdmFpY2R0ZmFEQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdzYUhCZGJhc2FEQmRsYW9jZGZob2FPYWlmaGlkbmFkY2Q5aG1iYWJhcmNldGZnc2FIODdlYmFzY2xmYUQ4N2ViYXNjZGZhejg3ZWJ4ZGthYmFyY2R0ZmdzYUhCZGJhc2N3ZmFEQmRiYXNjbGZhekJkYnhla2RuYURjcGUwbWJheGNlZmdPYXZhaWFxYURjc0dmUmJiZ3NjbDQ5UmNzR2NkdGZ5ZGJhc2N6NmdQRWhEYXZhaWFzOVJjc0djZHRmeWRiYU9hUGZnemFzY3NHZ09FaHNhT1RoT2RuZG5hZGNkOWhtYmFiYXJjZXRmZ0hheDg3ZWJhSGNsZmFzODdlYmFIY2RmYUQ4N2VieGVrYWJhcmNkdGZnSGF4QmRiYUhjd2Zhc0JkYmFIY2xmYURCZGJrYXZhaWNkdGZheEJkYmF2YzthYmZhb2NpdGZnSGFEQmRiYUhheEJkbGF2YWljZWZnaWNzR2NkdGZhREJkYmF2YzthYmZhb2NlZmNzR2NpdGZnSGFzQmRiYUhhREJkbGF2YWlhUGZnaWNzR2NkdGZhc0JkYmF2YzthYmZhb2NkZmNzR2NpdGZnRGF4QmRiYURhc0JkbGFvY2lmaG9haWFPZmhpYXphT2ZoeHhla2F4Y2JhbFJiYmdIRWdBYURjOzplU2dEZmh6YUhjc0doQ2FIY2w0aFhkbmRuYUhjczBtYmF6Y2VmaE94ZWthemhPYXZhaWFYOVJjc0djZHRmeWRiaHprZG5kbmFDbWJhT2NlZmh4eGVrYU9oeGF2YWlhSDlSY3NHY2R0ZnlkYmhPa2RuZG5hRFRtYmFsY2VmaER4ZWthbGNkZmhEYWw4U2JlZ1BjRmVHaHNkbmFQY3U5a21iYWxjb2ZoQWFzY0ZiR2hzY3JobGRuaW5hRDhTYmJnUGNGYkdhbHRhc1Zoc2FQY3U5a21lYURjZWZoRGFsY3JmZ2xjOEo5aG1ia2FBaER4ZWthRGNlZmhEa2FzY2U0Y2Jhc2NlRzlSN2FtZmdtaEFrZG5kbmFYY3NTbWJhRGhzeGVrYURjZWZoc2FEOFNiYmdsY0ZlR2hQZG5hbGN1OWttYmFEY3ZmaHphUGNGYkdoUGNyaGxkbmluYXM4U2JiZ0RjRmJHYWx0YVBWaFBhRGN1OWttZWFzY2VmaHNhbGNyZmdsYzhKOWhtYmthemhzeGVrYXNjZWZoc2thUGNlNGNiYVBjZUc5UjdhbWZnbWh6a2RuZG5hQ2NzU21iYXNobHhla2FzY2VmaGxhczhTYmJnRGNGZUdoUGRuYURjdTlrbWJhc2N2ZmhPYVBjRmJHaFBjcmhEZG5pbmFsOFNiYmdzY0ZiR2FEdGFQVmhQYXNjdTlrbWVhbGNlZmhsYURjcmZnRGM4SjlobWJrYU9obHhla2FsY2VmaGxrYVBjZTRjYmFQY2VHOVI3YW1mZ21oT2tkbmRuYWRjZDlobWJhYmFyY2V0ZmdEYUE4N2ViYURjbGZhTzg3ZWJhRGNkZmF6ODdlYnhla2FiYXJjZHRmZ0RhQUJkYmFEY3dmYU9CZGJhRGNsZmF6QmRia2F2YzthYmZhb2NpdGZnRGF6QmRiYURhQUJkbGF2YWljZHRmYUFCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ0RhT0JkYmFEYXpCZGxhdmFpY2VmZ2ljc0djZHRmYXpCZGJhdmM7YWJmYW9jZGZjc0djaXRmZ0RhQUJkYmFEYU9CZGxhdmFpYUhjejZhWGNzU1ZmZ2ljc0djZHRmYU9CZGJhaWFDVGFDY3NTVmZoaWFvY2lmaG9rYXdjZWZod2FvY3NHaG9haWNzR2hpYXJjaWZncmFlNm1ia2tjYmM5OWFsYXFTRWhva2F2YzthZWY4S2pqampiYW9rOmNsZXZ1OEpqampqYmN6OVJodmRuYWVjdmZhbDlubWJjOTpza2RuYWlSYmJjOzplR2M7cWVTbWJjdXNrYXY5Y2I4M2l3YWljZWZob2FpYWxmYzk4ZmhyZG5hZVRtYmRuYWRjZFNtYmNiaHdpbmRuYW9hcjZtYmM5OnNrYW9jZWZobGFvOFNiYmdpY0ZlR2hkZG5kbmFpY3U5bW1iYWxob3hla2FvY3ZmaG9hZGNGYkdoZGNyaGlkbmluYWw4U2JiZ0RjRmJHYWl0YWRWaGRhRGN1OWttZWFsY2VmaGxhaWNyZmdpYzhKOWhtYnhka2thbGNlZmhva2FiYXdjZHRmYWRjOEV0YzhGOTFhZGNkNDdhdmN3ZmFkY2VHY2R0VmdseWRiZmdpQmRiYWxhaUJkYmF3Y2VmZ3dhZTlobWJ4ZGtrY2Jod2luZG5hb2FyNm1iYzk6c2thb2NlZmhsYW84U2JiZ2ljRmVHaGRkbmRuYWljdTltbWJhbGhveGVrYW9jdmZob2FkY0ZiR2hkY3JoaWRuaW5hbDhTYmJnRGNGYkdhaXRhZFZoZGFEY3U5a21lYWxjZWZobGFpY3JmZ2ljOEo5aG1ieGRra2FsY2VmaG9rYWJhd2NldGZhZGM4RXRjOEY5MWFkY2Q0N2F2Y3dmYWRjZUdjZHRWZ2x5ZGJmZ2k4N2ViYWxhaUJkYmF3Y2VmZ3dhZTlobWJra2NiYzk5YW9hclNFazoyUGxpdXI5N2V1ZTk3OEpqampqYmM4VzlSaGlhZWM5OEdobGRuZG5hZGNsOWhtYmRuYWxUbWJjYmh2YWJoZGluYWRhZHBiYmJnb2NLcDpSZWNLcDpTZXA7NmVncmFvY3dwOlJlY0twOlNlcDs2ZWFycDtHZWFvY3pwOlJlY0twOlNlcDs2ZWd3cDtHZXA7S2VwO0xlZ0RweGJiYmJiYmJiYmJiYmJiYmJwOjJlZ3FhcnB4YmJiamJiYmpiYmJqYmJiamdrcDlvcDlycDtLZWdycHhiYjs6OWNiYjs6OWNiYjs6OWNiYjs6OWNhcmFycDtNZWFEYURwO01lYXdhcWF3YWtwOW9wOXJwO0tlZ3JhcnA7TWVwO0tlcDtLZXA7SmVwO05lZ3dwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3FwO0tlcHhGYmJiRmJiYkZiYmJGYmJicDlvYW9weGJiYkZiYmJGYmJiRmJiYkZwOW9wOXFhcmF3cDtNZWFxcDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b3A5cWFEYXdwO01lYXFwO0tlY3pwOlJlcHhiYkZiYmJGYmJiRmJiYkZicDlvcDlxcGtiYmFkY3pmaGRhdmNsZmd2YWw2bWJra2FsYWVTbWVhaXB4YmJiYmJiYmJiYmJiYmJiYmdxcGtsYmFpYWJhbGNkdGZnZGFlY2lHZ2xjZHRndjs4cWJiZG5hbFRtYmFpYWlwYmxiZ29jS3A6UmVjS3A6U2VwOzZlZ3Jhb2N3cDpSZWNLcDpTZXA7NmVhcnA7R2Vhb2N6cDpSZWNLcDpTZXA7NmVnd3A7R2VwO0tlcDtMZWdEYXFwOjJlZ3FhcnB4YmJiamJiYmpiYmJqYmJiamdrcDlvcDlycDtLZWdycHhiYjs6OWNiYjs6OWNiYjs6OWNiYjs6OWNhcmFycDtNZWFEYURwO01lYXdhcWF3YWtwOW9wOXJwO0tlZ3JhcnA7TWVwO0tlcDtLZXA7SmVwO05lZ3dwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3FwO0tlcHhGYmJiRmJiYkZiYmJGYmJicDlvYW9weGJiYkZiYmJGYmJiRmJiYkZwOW9wOXFhcmF3cDtNZWFxcDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b3A5cWFEYXdwO01lYXFwO0tlY3pwOlJlcHhiYkZiYmJGYmJiRmJiYkZicDlvcDlxcGtsYmthZGFpYXY7OHFiYnNrYWlweEZ1YmJGdWJiRnViYkZ1YmJneHBrbGJkbmFsVG1iY2JodmFiaGRpbmFkY3pmZ21hbXBiYmJnb3B4YmJiYmJiRkZiYmJiYmJGRmdrcDlvYWRwYmJiZ0Rhb3BtYmVkaXdEcWt6SE9BS1k4QUVnd2N6cDpSZWN6cDpTZXA7NmVncmFpcGJsYmFEYW9wbWx2b3J4bVBzQ1hRTDM1OEU4RnA5b3A7NmVhd2N6cDpTZXA7NmVnd3A7R2VhcnA7R2VwO0tlcDtMZWdvcHhiYmJiYmJiYmJiYmJiYmJicDoyZWdxYXJweGJiYmpiYmJqYmJiamJiYmpnUHA5b3A5cnA7S2VncnB4Yjs6RlNiOzpGU2I7OkZTYjs6RlNhcmFycDtNZWFvYW9wO01lYXdhcWF3YVBwOW9wOXJwO0tlZ3JhcnA7TWVwO0tlcDtLZXA7SmVwO05lZ3dwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3FwO0tlcHhGRmJiRkZiYkZGYmJGRmJicDlvYW9hd3A7TWVhcXA7S2VjenA6UmVwOXFnb2FyYXdwO01lYXFwO0tlcHhGRmJiRkZiYkZGYmJGRmJicDlvZ3JwbXdES1lxazhBRXhtMzVQczhFOEZwOXFwa2JiYWRhRGFrcDlvYW9hcnBtYmV6SGRpT0FsdkNYb3JRTHA5cXBrYmJhZGNhZmhkYXZjbGZndmFsNm1ia2thbGFlU21iYWljemZweGJiYmJiYmJiYmJiYmJiYmJnb3BrbGJhaWFvcGtsYmFpYWJhbGNpdGZnZGFlY2lHZ2xjaXRndjs4cWJiYWlheHBrbGFkbmFsVG1iYWlhaXBibHpnb3B4YmJiYmJiRkZiYmJiYmJGRmdrcDlvYWlwYmxiZ0Rhb3BtYmVkaXdEcWt6SE9BS1k4QUVnd2N6cDpSZWN6cDpTZXA7NmVncmFpcGJsYWFEYW9wbWx2b3J4bVBzQ1hRTDM1OEU4RnA5b3A7NmVhd2N6cDpTZXA7NmVnd3A7R2VhcnA7R2VwO0tlcDtMZWdvcHhiYmJiYmJiYmJiYmJiYmJicDoyZWdxYXJweGJiYmpiYmJqYmJiamJiYmpnUHA5b3A5cnA7S2VncnB4Yjs6RlNiOzpGU2I7OkZTYjs6RlNhcmFycDtNZWFvYW9wO01lYXdhcWF3YVBwOW9wOXJwO0tlZ3JhcnA7TWVwO0tlcDtLZXA7SmVwO05lZ3dwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3FwO0tlcHhGRmJiRkZiYkZGYmJGRmJicDlvYW9hd3A7TWVhcXA7S2VjenA6UmVwOXFnb2FyYXdwO01lYXFwO0tlcHhGRmJiRkZiYkZGYmJGRmJicDlvZ3JwbXdES1lxazhBRXhtMzVQczhFOEZwOXFwa2x6YWlhRGFrcDlvYW9hcnBtYmV6SGRpT0FsdkNYb3JRTHA5cXBrbGJrYWRhaWF2OzhxYmJrazpJd2xsdWU5N2V1bzk3OEpqampqYmNhOVJoaWRuYWVjOThHZ2xUbWJjYmh2YWJob2luYW9jS2ZweDpqaToxUzpqaToxUzpqaToxUzpqaToxU2FvcGJiYmdyYW9jemZnd3BiYmJnRHBtbHZvcnhtUHNDWFFMMzU4RThGZ3FjenA6U2Vna3B4aWJiYmliYmJpYmJiaWJiYnA5cWd4cDs2ZXA7TmVnbWF4YXhwOjFlcDs3ZWd4YXhwO0tlYXJhRHBtYmVkaXdEcWt6SE9BS1k4QUVneGN6cDpSZWN6cDpTZXA7NmVncmFycDtNZWF4Y3pwOlNlcDs2ZWdEYURwO01lYXFjenA6UmVjenA6U2VwOzZlZ3FhcXA7TWVwO0tlcDtLZXA7TGVweGJiYmJiYmJiYmJiYmJiYmJwOjRlcDtKZXA7TWVweGJibjBiYm4wYmJuMGJibjBneHA7S2VweEZGYmJGRmJiRkZiYkZGYmJnUHA5b2FtYURwO01lYXhwO0tlY3pwOlJlcDlxZ0RhbWFycDtNZWF4cDtLZWFQcDlvYW1hcXA7TWVheHA7S2VjenA6UmVwOXFneHBtd0RLWXFrOEFFeG0zNVBzOEU4RmdycDVlYWtjbHA6UmVnbXBFaTpUOmo4M2liYXdhcnA1YmFtcEVkOlQ6ajgzaWJhb2N3ZmFEYXhwbWJlekhkaU9BbHZDWG9yUUxneHA1ZWFtcEVlOlQ6ajgzaWJhb2F4cDViYW1wRWI6VDpqODNpYmFvY2FmaG9hdmNsZmd2YWw2bWJra2RuYWxhZVNtYmFpY3pmcHhiYmJiYmJiYmJiYmJiYmJiZ21wa2xiYWlhbXBrbGJhaWFiYWxjaXRmZ29hZWNpR2d2Y2l0Z3c7OHFiYmRuYXZUbWJhaXB4OmppOjFTOmppOjFTOmppOjFTOmppOjFTYWlwYmxiZ3JhaXBibHpnRHBtbHZvcnhtUHNDWFFMMzU4RThGZ3FjenA6U2Vna3B4aWJiYmliYmJpYmJiaWJiYnA5cWd4cDs2ZXA7TmVnbWF4YXhwOjFlcDs3ZWd4YXhwO0tlYXJhRHBtYmVkaXdEcWt6SE9BS1k4QUVneGN6cDpSZWN6cDpTZXA7NmVncmFycDtNZWF4Y3pwOlNlcDs2ZWdEYURwO01lYXFjenA6UmVjenA6U2VwOzZlZ3FhcXA7TWVwO0tlcDtLZXA7TGVweGJiYmJiYmJiYmJiYmJiYmJwOjRlcDtKZXA7TWVweGJibjBiYm4wYmJuMGJibjBneHA7S2VweEZGYmJGRmJiRkZiYkZGYmJnUHA5b2FtYURwO01lYXhwO0tlY3pwOlJlcDlxZ0RhbWFycDtNZWF4cDtLZWFQcDlvYW1hcXA7TWVheHA7S2VjenA6UmVwOXFneHBtd0RLWXFrOEFFeG0zNVBzOEU4RmdycDVlYWtjbHA6UmVnbXBFaTpUOmo4M2lLYWlhcnA1YmFtcEVkOlQ6ajgzaXphaWFEYXhwbWJlekhkaU9BbHZDWG9yUUxneHA1ZWFtcEVlOlQ6ajgzaXdhaWF4cDViYW1wRWI6VDpqODNpYmthb2FpYXc7OHFiYmtrO3VkZGl1ZTk3OEpqampqYmM7YWI5UmhpZG5hZGNkNGFlMmdsYzk4R2d2VG1iY2JoZWFiaGRpbmFkYWRwYmJiZ29jd3A6UmVjd3A6U2VwOzZlYW9jZXA6U2VweGJiakZiYmpGYmJqRmJiakZwOW9weGJialpiYmpaYmJqWmJialpwOlVlcDtNZXBrYmJhZGN6ZmhkYWVjbGZnZWF2Nm1ia2tkbmF2YWxTbWJhaWM4V2ZweGJiYmJiYmJiYmJiYmJiYmJnb3BrbGJhaWNhZmFvcGtsYmFpY3pmYW9wa2xiYWlhb3BrbGJhaWFiYXZjZHRmZ2RhbGNpR2dlY2R0Z3Y7OHFiYmRuYWVUbWJhaWFpcGJsYmdvY3dwOlJlY3dwOlNlcDs2ZWFvY2VwOlNlcHhiYmpGYmJqRmJiakZiYmpGcDlvcHhiYmpaYmJqWmJialpiYmpacDpVZXA7TWVwa2xia2FkYWlhdjs4cWJia2s6Q1B2ZHVlOTdldXc5N2V1OEpqampqYmM4VzlSaGlhZWM5OEdobGRuZG5hZGNsOWhtYmFpcHhiYmJiYmJiYmJiYmJiYmJiZ3Zwa2xiZG5hbFRtYmNiaG9hYmhkaW5hZHBiYmJocmFkcHhiYnVKYmJ1SmJidUpiYnVKYWlwYmxiYXJjS3A6VGVwOXFnd2NlcDpTZWF3cDlxZ0RjZHA6U2VhRHA5cWdEY2xwOlNlYURwOXFncXA7NmVwO05lZ0RhcmN3cDpSZWNLcDpTZWdrYXJweEZiYmJGYmJiRmJiYkZiYmJneHA5b2dtcDpVZXA7NmVwO01lcHhiYm4wYmJuMGJibjBiYm4wZ1BwO0tlY3dwOlJlcHhiRmJiYkZiYmJGYmJiRmJicDlvYURhbWFrcDpYZWFyY3pwOlJlY0twOlNlZ3JwOlVlcDs2ZXA7TWVhUHA7S2VheHA5b3A5cWFEYW1ha2FycDpVZXA6WGVwOzZlcDtNZWFQcDtLZWN6cDpSZXB4YmJGYmJiRmJiYkZiYmJGYnA5b3A5cWFEYXFhd2NlcDpSZXA5b2F3cHhlYmJiZWJiYmViYmJlYmJicDlvcDlxcDs2ZXA7TWVhUHA7S2VjS3A6UmVwOXFwa2JiYWRjemZoZGFvY2xmZ29hbDZtYmtrYWxhZVNtZWFpYXZwa2xhYWljYWZhYmFsY2R0ZmdkYWVjaUdnbGNkdGdvOzhxYmJhaWF2cGtsYmRuYWxUbWJhaXBibGFocmFpcHhiYnVKYmJ1SmJidUpiYnVKYWlwYmxiYXJjS3A6VGVwOXFnd2NlcDpTZWF3cDlxZ0RjZHA6U2VhRHA5cWdEY2xwOlNlYURwOXFncXA7NmVwO05lZ0RhcmN3cDpSZWNLcDpTZWdrYXJweEZiYmJGYmJiRmJiYkZiYmJneHA5b2dtcDpVZXA7NmVwO01lcHhiYm4wYmJuMGJibjBiYm4wZ1BwO0tlY3dwOlJlcHhiRmJiYkZiYmJGYmJiRmJicDlvYURhbWFrcDpYZWFyY3pwOlJlY0twOlNlZ3JwOlVlcDs2ZXA7TWVhUHA7S2VheHA5b3A5cWFEYW1ha2FycDpVZXA6WGVwOzZlcDtNZWFQcDtLZWN6cDpSZXB4YmJGYmJiRmJiYkZiYmJGYnA5b3A5cWFEYXFhd2NlcDpSZXA5b2F3cHhlYmJiZWJiYmViYmJlYmJicDlvcDlxcDs2ZXA7TWVhUHA7S2VjS3A6UmVwOXFwa2xha2FkYWljYWZhbzs4cWJic2thaXB4YmJiYmJiYmJiYmJiYmJiYmd2cGtsYmRuYWxUbWJjYmhvYWJoZGluYWRjemZnc3B4YkZ1OWhiRnU5aGJGdTloYkZ1OWhhZHBiYmJnRGFzcGJiYmdQcG1sdm9yeG1Qc0NYUUwzNThFOEZnbWN6cDpUZWFpcGJsYnA5cWdyY2VwOlNlYXJwOXFnd2NkcDpTZWF3cDlxZ3djbHA6U2Vhd3A5cWd3Y3dwOlNlYXdwOXFncXA7NmVwO05lZ3dhRGFQcG1iZWRpd0Rxa3pIT0FLWThBRWdEcHhGRmJiRkZiYkZGYmJGRmJiZ1BwOW9na2FEY3pwOlNlZ3hwOlVlYW1jenA6UmVjenA6U2VnbXA6WGVwOzZlcDtNZXB4YmJuMGJibjBiYm4wYmJuMGdEcDtLZWFQcDlvYXdha2F4YW1wOlVlcDpYZXA7NmVwO01lYURwO0tlY3pwOlJlcDlxZ3hhd2FxYXJjZXA6UmVwOW9hcnB4ZWJiYmViYmJlYmJiZWJiYnA5b3A5cXA7NmVwO01lYURwO0tlY3pwOlJlYXdhbWFrcDpVZXA7NmVwO01lYURwO0tlYVBwOW9wOXFncnBtd0RLWXFrOEFFeG0zNVBzOEU4RnBrYmJhZGF4YXJwbWJlekhkaU9BbHZDWG9yUUxwa2JiYWRjYWZoZGFvY2xmZ29hbDZtYmtrYWxhZVNtYmFpY3pmcHhiYmJiYmJiYmJiYmJiYmJiZ3Jwa2xiYWlhcnBrbGJhaWFiYWxjaXRmZ2RhZWNpR2dsY2l0Z287OHFiYmFpYXZwa2xhZG5hbFRtYmFpcHhiRnU5aGJGdTloYkZ1OWhiRnU5aGFpcGJsYmdEYWlwYmx6Z1BwbWx2b3J4bVBzQ1hRTDM1OEU4RmdtY3pwOlRlYWlwYmxhcDlxZ3JjZXA6U2VhcnA5cWd3Y2RwOlNlYXdwOXFnd2NscDpTZWF3cDlxZ3djd3A6U2Vhd3A5cWdxcDs2ZXA7TmVnd2FEYVBwbWJlZGl3RHFrekhPQUtZOEFFZ0RweEZGYmJGRmJiRkZiYkZGYmJnUHA5b2drYURjenA6U2VneHA6VWVhbWN6cDpSZWN6cDpTZWdtcDpYZXA7NmVwO01lcHhiYm4wYmJuMGJibjBiYm4wZ0RwO0tlYVBwOW9hd2FrYXhhbXA6VWVwOlhlcDs2ZXA7TWVhRHA7S2VjenA6UmVwOXFneGF3YXFhcmNlcDpSZXA5b2FycHhlYmJiZWJiYmViYmJlYmJicDlvcDlxcDs2ZXA7TWVhRHA7S2VjenA6UmVhd2FtYWtwOlVlcDs2ZXA7TWVhRHA7S2VhUHA5b3A5cWdycG13REtZcWs4QUV4bTM1UHM4RThGcGtsemFpYXhhcnBtYmV6SGRpT0FsdkNYb3JRTHBrbGJrYWRhaWFvOzhxYmJrazl0ZWl1Y2JjYnlkajFqamJnZWFiY2lmYzk4R2ZnYkJkajFqamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtra2ViY2p3a2x6OkRiYiIsbj1uZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw0LDEsOTYsMCwwLDMsMywyLDAsMCw1LDMsMSwwLDEsMTIsMSwwLDEwLDIyLDIsMTIsMCw2NSwwLDY1LDAsNjUsMCwyNTIsMTAsMCwwLDExLDcsMCw2NSwwLDI1MywxNSwyNiwxMV0pLG89bmV3IFVpbnQ4QXJyYXkoWzMyLDAsNjUsMiwxLDEwNiwzNCwzMywzLDEyOCwxMSw0LDEzLDY0LDYsMjUzLDEwLDcsMTUsMTE2LDEyNyw1LDgsMTIsNDAsMTYsMTksNTQsMjAsOSwyNywyNTUsMTEzLDE3LDQyLDY3LDI0LDIzLDE0NiwxNDgsMTgsMTQsMjIsNDUsNzAsNjksNTYsMTE0LDEwMSwyMSwyNSw2Myw3NSwxMzYsMTA4LDI4LDExOCwyOSw3MywxMTVdKTtpZih0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiKXJldHVybntzdXBwb3J0ZWQ6ITF9O3ZhciBhPVdlYkFzc2VtYmx5LnZhbGlkYXRlKG4pP2YodCk6ZihlKSxyLGk9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYSx7fSkudGhlbihmdW5jdGlvbihFKXtyPUUuaW5zdGFuY2Usci5leHBvcnRzLl9fd2FzbV9jYWxsX2N0b3JzKCl9KTtmdW5jdGlvbiBmKEUpe2Zvcih2YXIgXz1uZXcgVWludDhBcnJheShFLmxlbmd0aCksVD0wO1Q8RS5sZW5ndGg7KytUKXt2YXIgdz1FLmNoYXJDb2RlQXQoVCk7X1tUXT13Pjk2P3ctOTc6dz42ND93LTM5OncrNH1mb3IodmFyIFI9MCxUPTA7VDxFLmxlbmd0aDsrK1QpX1tSKytdPV9bVF08NjA/b1tfW1RdXTooX1tUXS02MCkqNjQrX1srK1RdO3JldHVybiBfLmJ1ZmZlci5zbGljZSgwLFIpfWZ1bmN0aW9uIGQoRSxfLFQsdyxSLFMsQyl7dmFyIEk9RS5leHBvcnRzLnNicmssTj13KzMmLTQsUD1JKE4qUiksdj1JKFMubGVuZ3RoKSxBPW5ldyBVaW50OEFycmF5KEUuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtBLnNldChTLHYpO3ZhciB4PV8oUCx3LFIsdixTLmxlbmd0aCk7aWYoeD09MCYmQyYmQyhQLE4sUiksVC5zZXQoQS5zdWJhcnJheShQLFArdypSKSksSShQLUkoMCkpLHghPTApdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgYnVmZmVyIGRhdGE6ICIreCl9dmFyIGM9e05PTkU6IiIsT0NUQUhFRFJBTDoibWVzaG9wdF9kZWNvZGVGaWx0ZXJPY3QiLFFVQVRFUk5JT046Im1lc2hvcHRfZGVjb2RlRmlsdGVyUXVhdCIsRVhQT05FTlRJQUw6Im1lc2hvcHRfZGVjb2RlRmlsdGVyRXhwIixDT0xPUjoibWVzaG9wdF9kZWNvZGVGaWx0ZXJDb2xvciJ9LHU9e0FUVFJJQlVURVM6Im1lc2hvcHRfZGVjb2RlVmVydGV4QnVmZmVyIixUUklBTkdMRVM6Im1lc2hvcHRfZGVjb2RlSW5kZXhCdWZmZXIiLElORElDRVM6Im1lc2hvcHRfZGVjb2RlSW5kZXhTZXF1ZW5jZSJ9LGw9W10saD0wO2Z1bmN0aW9uIG0oRSl7dmFyIF89e29iamVjdDpuZXcgV29ya2VyKEUpLHBlbmRpbmc6MCxyZXF1ZXN0czp7fX07cmV0dXJuIF8ub2JqZWN0Lm9ubWVzc2FnZT1mdW5jdGlvbihUKXt2YXIgdz1ULmRhdGE7Xy5wZW5kaW5nLT13LmNvdW50LF8ucmVxdWVzdHNbdy5pZF1bdy5hY3Rpb25dKHcudmFsdWUpLGRlbGV0ZSBfLnJlcXVlc3RzW3cuaWRdfSxffWZ1bmN0aW9uIGIoRSl7Zm9yKHZhciBfPSJzZWxmLnJlYWR5ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobmV3IFVpbnQ4QXJyYXkoWyIrbmV3IFVpbnQ4QXJyYXkoYSkrIl0pLCB7fSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsgcmVzdWx0Lmluc3RhbmNlLmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKTsgcmV0dXJuIHJlc3VsdC5pbnN0YW5jZTsgfSk7c2VsZi5vbm1lc3NhZ2UgPSAiK3kubmFtZSsiOyIrZC50b1N0cmluZygpK3kudG9TdHJpbmcoKSxUPW5ldyBCbG9iKFtfXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLHc9VVJMLmNyZWF0ZU9iamVjdFVSTChUKSxSPWwubGVuZ3RoO1I8RTsrK1IpbFtSXT1tKHcpO2Zvcih2YXIgUj1FO1I8bC5sZW5ndGg7KytSKWxbUl0ub2JqZWN0LnBvc3RNZXNzYWdlKHt9KTtsLmxlbmd0aD1FLFVSTC5yZXZva2VPYmplY3RVUkwodyl9ZnVuY3Rpb24gcChFLF8sVCx3LFIpe2Zvcih2YXIgUz1sWzBdLEM9MTtDPGwubGVuZ3RoOysrQylsW0NdLnBlbmRpbmc8Uy5wZW5kaW5nJiYoUz1sW0NdKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxOKXt2YXIgUD1uZXcgVWludDhBcnJheShUKSx2PSsraDtTLnBlbmRpbmcrPUUsUy5yZXF1ZXN0c1t2XT17cmVzb2x2ZTpJLHJlamVjdDpOfSxTLm9iamVjdC5wb3N0TWVzc2FnZSh7aWQ6dixjb3VudDpFLHNpemU6Xyxzb3VyY2U6UCxtb2RlOncsZmlsdGVyOlJ9LFtQLmJ1ZmZlcl0pfSl9ZnVuY3Rpb24geShFKXt2YXIgXz1FLmRhdGE7aWYoIV8uaWQpcmV0dXJuIHNlbGYuY2xvc2UoKTtzZWxmLnJlYWR5LnRoZW4oZnVuY3Rpb24oVCl7dHJ5e3ZhciB3PW5ldyBVaW50OEFycmF5KF8uY291bnQqXy5zaXplKTtkKFQsVC5leHBvcnRzW18ubW9kZV0sdyxfLmNvdW50LF8uc2l6ZSxfLnNvdXJjZSxULmV4cG9ydHNbXy5maWx0ZXJdKSxzZWxmLnBvc3RNZXNzYWdlKHtpZDpfLmlkLGNvdW50Ol8uY291bnQsYWN0aW9uOiJyZXNvbHZlIix2YWx1ZTp3fSxbdy5idWZmZXJdKX1jYXRjaChSKXtzZWxmLnBvc3RNZXNzYWdlKHtpZDpfLmlkLGNvdW50Ol8uY291bnQsYWN0aW9uOiJyZWplY3QiLHZhbHVlOlJ9KX19KX1yZXR1cm57cmVhZHk6aSxzdXBwb3J0ZWQ6ITAsdXNlV29ya2VyczpmdW5jdGlvbihFKXtiKEUpfSxkZWNvZGVWZXJ0ZXhCdWZmZXI6ZnVuY3Rpb24oRSxfLFQsdyxSKXtkKHIsci5leHBvcnRzLm1lc2hvcHRfZGVjb2RlVmVydGV4QnVmZmVyLEUsXyxULHcsci5leHBvcnRzW2NbUl1dKX0sZGVjb2RlSW5kZXhCdWZmZXI6ZnVuY3Rpb24oRSxfLFQsdyl7ZChyLHIuZXhwb3J0cy5tZXNob3B0X2RlY29kZUluZGV4QnVmZmVyLEUsXyxULHcpfSxkZWNvZGVJbmRleFNlcXVlbmNlOmZ1bmN0aW9uKEUsXyxULHcpe2QocixyLmV4cG9ydHMubWVzaG9wdF9kZWNvZGVJbmRleFNlcXVlbmNlLEUsXyxULHcpfSxkZWNvZGVHbHRmQnVmZmVyOmZ1bmN0aW9uKEUsXyxULHcsUixTKXtkKHIsci5leHBvcnRzW3VbUl1dLEUsXyxULHcsci5leHBvcnRzW2NbU11dKX0sZGVjb2RlR2x0ZkJ1ZmZlckFzeW5jOmZ1bmN0aW9uKEUsXyxULHcsUil7cmV0dXJuIGwubGVuZ3RoPjA/cChFLF8sVCx1W3ddLGNbUl0pOmkudGhlbihmdW5jdGlvbigpe3ZhciBTPW5ldyBVaW50OEFycmF5KEUqXyk7cmV0dXJuIGQocixyLmV4cG9ydHNbdVt3XV0sUyxFLF8sVCxyLmV4cG9ydHNbY1tSXV0pLFN9KX19fSkoKX0pO3ZhciBsc2UsU3g9WCgoKT0+e2xzZT0oZnVuY3Rpb24oKXt2YXIgZT0iYjlINzlUZWJiYmU6NmVPOUdldWV1OUdldWI5R2JiOUdzdXV1dXV1dXV1dXV1OTl1dWV1OUd2dXV1dXViOUdydXV1dXV1dWI5R291dXV1dXVlOTk5R3Z1dXV1dWV1OUd6dXV1dXV1dXV1dXU5OXV1dXViOUdxdXV1dXV1dTk5dXVldTlHUHV1dXV1dXV1dXV1OTl1dWV1OUdxdXV1dXV1dXU5OXVldTlHcnV1dXV1dTk5ZXU5R3d1dXV1dXU5OXVldTlHaXV1dWU5OTlHbHV1dXVldTlHbHV1dXViOUdpdXV1ZXVpTFFkaWx2b3Jsd0RpcWt4bVBzemJISGJlbHZlOVdlaWl2aWViZW93ZXVlYzpHOlBka3I6QmR4bzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmJ6OVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1Ync4RTlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NTl4OVB0OU9jdHRWOVA5STkxdFc3YkQ4QTlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NTl4OVB0OU85djlXOUs5SHRXYnFROVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1OXQyOVY5VzlXOTVia1g5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5cVY5MTlVV2J4UTlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NTlxOVY5UDlVdDdibVg5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5dDlKOUgyV2JQYTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0U1d0OUo5TzlzVzlUOUg5V2JzNTlUVzc5TzlWOVd0OUY5Tlc5VVdWOUh0VzlxOVY3OVB0OVA5VjlVOXNXOVQ5SDlXYnpsNzlJVjlSYkhEd2ViY2VrZENYcU07WWVRZGJrO0ExZXIzdWU5OWV1RTk5UXVlOTpyOTk4SmpqampiY2o7c2I5UmdzOEtqampqYmNiaHphc2M6Q2VmY2JjO0tiejp0ampqYjhBZG5hYmFlU21iYWJhZWFkY2R0ek1qampiOEFrZG5hbWNkR1RtYmFsY3JmY2k0Y2J5ZDE6ampqYkhqampqYmJoSGFzYzpDZWZhc3lkOzhlZ2VjZHRmYUhCZGJhc2FlY2VmQmQ7OGVjYmhsY2JoZWRuYWRUbWJhYmhlYWRoT2luYUhhZXlkYmNpNGZjYjg2YmJhZWNsZmhlYU9jdWZnT21ia2NiaGxhYmhlYWRoT2luYUhhZXlkYmdBY2k0ZmdDYUNSYmJnQ2NlYUFjckdnQXRWODZiYmFDY3U3YUE0Y2VHYWxmaGxhZWNsZmhlYU9jdWZnT21ia2N1YWxjZHRhbGNGRkZGaTBFaGVrYWVjYnlkMTpqampiSGpqampiYmh6YXNjOkNlZmFzeWQ7OGVnZWNkdGZhekJkYmFzYWVjZWZCZDs4ZWFsY2Q0YWxmaE9jZWhIaW5hSGdlY2V0aEhhZWFPNm1ia2NiaFhjdWFlY2R0Z09hZWNGRkZGaTBFY2J5ZDE6ampqYkhqampqYmJoSGFzYzpDZWZhc3lkOzhlZ0FjZHRmYUhCZGJhc2FBY2VmQmQ7OGVhSGNGZWFPejp0ampqYmhRZG5hZFRtYmFlY3VmaExjYmhLaW5kbmRuYVFhYmFYY2R0ZmdZeWRiZ0FjOnY7dDtoO0V2MmFMR2dPY2R0ZmdDeWRiZ0hjdVNtYmNlaGVpbmF6YUhjZHRmeWRiYUFTbWRhT2FlZmhIYWVjZWZoZWFRYUhhTEdnT2NkdGZnQ3lkYmdIY3U5aG1ia2themFLY2R0ZmFBQmRiYUNhS0JkYmFLaEhhS2NlZmhLa2FZYUhCZGJhWGNlZmdYYWQ5aG1ia2thUWNieWQ6bTpqampiSDpiampqYmJhc2FzeWQ7OGVjdWZCZDs4ZWtjYmg4QWN1YWxjZWZnZWNkdGFlY0ZGRkZpMEVjYnlkMTpqampiSGpqampiYmhYYXNjOkNlZmFzeWQ7OGVnZWNkdGZhWEJkYmFzYVhCZE5lYXNhZWNlZkJkOzhlY3VhZGNpdGFkY0ZGRkZlMEVjYnlkMTpqampiSGpqampiYmhFYXNjOkNlZmFzeWQ7OGVnZWNkdGZhRUJkYmFzYUVCZDp5ZWFzYWVjZWZCZDs4ZWFzY05lZmFiYWRhbGNiejpjampqYmN1YWxjZHRnZWFsY0ZGRkZpMEVnM2NieWQxOmpqamJIampqamJiaEFhc2M6Q2VmYXN5ZDs4ZWdIY2R0ZmFBQmRiYXNhSGNlZkJkOzhlYTNjYnlkMTpqampiSGpqampiYmhLYXNjOkNlZmFzeWQ7OGVnSGNkdGZhS0JkYmFzYUhjZWZCZDs4ZWFBYUthaWFsYXZhemFzYzpDZWZ6OmRqampiYWxjYnlkMTpqampiSGpqampiYmg1YXNjOkNlZmFzeWQ7OGVnSGNkdGZhNUJkYmFzYUhjZWZCZDs4ZWEzY2J5ZDE6ampqYkhqampqYmJoSGFzYzpDZWZhc3lkOzhlZ09jZHRmYUhCZGJhc2FPY2VmQmQ7OGVhM2NieWQxOmpqamJIampqamJiaE9hc2M6Q2VmYXN5ZDs4ZWdDY2R0ZmFPQmRiYXNhQ2NlZkJkOzhlYUhjRmVhZXo6dGpqamJoOEVhT2NGZWFlejp0ampqYmg4RmRuYWxUbWJhRWN3ZmhhaW5kbmFYYThBZ09jZWZnOEFjZHRmeWRiZ0NhWGFPY2R0Z2VmeWRiZ0hTbWJhQ2FIOVJoaGFFYUhjaXRmaGdhOEZhZWZoOEphOEVhZWZoOEtjYmhRaW5kbmRuYWdhUWNpdGZ5ZGJnTGFPOWhtYmE4S2FPQmRiYThKYU9CZGJ4ZWtkbmFYYUxjZHRnOExmZ2VjbGZ5ZGJnSGFleWRiZ2VTbWJhRWFlY2l0Z0NmeWRiYU9TbWVhSGFlOVJoOE1hZWN1N2FIZmhZYWFhQ2ZoSGNiaGVpbmFZYWVTbWVhZWNlZmhlYUh5ZGJoQ2FIY3dmaEhhQ2FPOWhtYmthZWE4TTZtZWthOEZhOExmZ2VhT2FMYWV5ZGJjdVNFQmRiYThLYUxhT2E4S3lkYmN1U0VCZGJrYVFjZWZnUWFoOWhtYmtrYThBYWw5aG1ia2FBaEhhS2hPYThGaENhOEVoUWNiaGVpbmRuZG5hZWFIeWRiZ0w5aG1iZG5hZWFPeWRiZ0w5aG1iYVF5ZGJoTGRuYUN5ZGJnWWN1OWhtYmFMY3U5aG1iYTVhZWZjYjg2YmJ4aWtkbmFZY3VTbWJhTGN1U21iYWVhWVNtYmFBYVljZHRmeWRiYUFhTGNkdGZ5ZGI5aG1iYTVhZWZjZDg2YmJ4aWthNWFlZmg4S2RuYWVhWVNtYmFlYUxTbWJhOEtjZTg2YmJ4aWthOEtjbDg2YmJ4ZGtkbmFlYUthTGNkdGdZZnlkYjlobWJkbmFDeWRiZzhLY3VTbWJhZWE4S1NtYmFReWRiZ2hjdVNtYmFlYWhTbWJhOEZhWWZ5ZGJnZ2N1U21iYWdhTFNtYmE4RWFZZnlkYmdZY3VTbWJhWWFMU21iZG5hQWE4S2NkdGZ5ZGJnTGFBYVljZHRmeWRiOWhtYmFMYUFhaGNkdGZ5ZGJnWVNtYmFZYUFhZ2NkdGZ5ZGI5aG1iYTVhZWZjZDg2YmJ4bGthNWFlZmNsODZiYnhpa2E1YWVmY2w4NmJieGRrYTVhZWZjbDg2YmJ4ZWthNWFlZmE1YUxmUmJiODZiYmthSGNsZmhIYU9jbGZoT2FDY2xmaENhUWNsZmhRYWxhZWNlZmdlOWhtYmtkbmFtY2FHVG1iYUVjd2ZoOEpjYmg4TmluZG5kbmE1YThOZmd5UmJiZzhQYzk6ZlBpYmViZWtkbmRuZG5hQWE4TmNkdGZ5ZGJnZWE4TjlobWJkbmFxbWJjYmhneGRrZG5helRtYmNiaGdhOE5oZWluYWdhcWF6YWVjZHRnZWZ5ZGJmUmJiY2RHY2U0VmhnYUthZWZ5ZGJnZWE4TjlobWJ4aWtrY2JoZ2E4TmhlaW5hZ2FxYWVmUmJiY2RHY2U0VmhnYUthZWNkdGZ5ZGJnZWE4TjlobWJ4ZGtrYTVhZWZSYmJoZXhla2E4TmhlaW5kbmFYYWVjZHRnYWZnZWNsZnlkYmdIYWV5ZGJnZVNtYmFIYWU5Umg4QWFFYWVjaXRmaDhNYUFhYWZoOExjYmg4S2luYThNYThLY2l0ZnlkYmdZaGVkbmluZG5hWGFlY2R0Z0xmZ2VjbGZ5ZGJnSGFleWRiZ2VTbWJkbmFBYUVhZWNpdGdPZnlkYmNkdGZ5ZGJhOEx5ZGJnUTlobWJjZWhleGlrYUhhZTlSaGhhZWN1N2FIZmhDYThKYU9maEhjYmhlaW5hQ2FlU21lYWVjZWZoZWFIeWRiaE9hSGN3ZmhIYUFhT2NkdGZ5ZGJhUTlobWJrYWVhaDZoZXhka2FLYUxmeWRiZ2VhWTlobWJrY2JoZWthZ2FlY2U3VmhnYThLY2VmZzhLYThBOWhtYmtrYUthYWZ5ZGJnZWE4TjlobWJrYThQY2lhZ2NlR0VoZWtheWFlODZiYmthOE5jZWZnOE5hbDlobWJra2RuYXFUbWJkbmRuYXpUbWJhemhlYUFoSGFsaE9pbmRuYXFhZXlkYmZSYmJjZUdUbWJhNWFIeWRiZmNsODZiYmthZWNsZmhlYUhjbGZoSGFPY3VmZ09tYnhka2thcWhlYUFoSGFsaE9pbmRuYWVSYmJjZUdUbWJhNWFIeWRiZmNsODZiYmthZWNlZmhlYUhjbGZoSGFPY3VmZ09tYmtrYUFoZWFsaE9hNWhIaW5kbmE1YWV5ZGJmUmJiY2w5aG1iYUhjbDg2YmJrYWVjbGZoZWFIY2VmaEhhT2N1ZmdPbWJra2FtY2VHVG1iYTVoZWFsaEhpbmRuYWVSYmJjZTlobWJhZWNsODZiYmthZWNlZmhlYUhjdWZnSG1ia2tjYmhJY3VhbGN4MmFsYzt2OlE7djpRZTBFY2J5ZDE6ampqYkhqampqYmJoYWFzYzpDZWZhc3lkOzhlZ2VjZHRmYWFCZGJhc2FlY2VmQmQ7OGVhc2M6cWVmY2JCZGJhczljYjgzaTFlYWFhaWFsYXZhemFzYzFlZno6ZWpqamJoOFJkbmRuYURtYmNiaHljYmhDeGVrY2JoQ2F3aGVjYmhIaW5kbmFlSWRiSmJiYmI5RVRtYmFzYUNjZHRmYUhCZGJhQ2NlZmhDa2FlY2xmaGVhRGFIY2VmZ0g5aG1ia2N1YUNhbDJnZWNkdGFlY0ZGRkZpMEVjYnlkMTpqampiSGpqampiYmh5YXNjOkNlZmFzeWQ7OGVnZWNkdGZheUJkYmFzYWVjZWZCZDs4ZWFsVG1iZG5hQ21iY2JoQ3hla2FyY2Q0aDhLZG5helRtYmFDY2R0aGhjYmhYYXloWWluYW9hemFYY2R0ZnlkYmE4SzJjZHRmaExhc2hlYVloSGFDaE9pbmFIYUxhZXlkYmNkdGdRZklkYmF3YVFmSWRiTlVkYmFlY2xmaGVhSGNsZmhIYU9jdWZnT21ia2FZYWhmaFlhWGNlZmdYYWw5aG1ieGRra2FDY2R0aGhjYmhYYXloWWluYW9hWGE4SzJjZHRmaExhc2hlYVloSGFDaE9pbmFIYUxhZXlkYmNkdGdRZklkYmF3YVFmSWRiTlVkYmFlY2xmaGVhSGNsZmhIYU9jdWZnT21ia2FZYWhmaFlhWGNlZmdYYWw5aG1ia2tjdWFsYzhTMmdIYWxjO0Q7TztmOFUwRWdRY2J5ZDE6ampqYkhqampqYmJoZWFzYzpDZWZhc3lkOzhlZ09jZHRmYWVCZGJhc2FPY2VmQmQ7OGVhZWNiYUh6OnRqampiaDhTY2JoRGNiaDhLZG5hQ1RtYmNiaElhUWNieWQxOmpqamJIampqamJiaDhLYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOEtCZGJhc2FlY2VmQmQ7OGVhOEtjYmFIejp0ampqYjhBY3VhQ2FsMmdlY2x0Z0hhZWNGRkZGYjBFY2J5ZDE6ampqYkhqampqYmJoRGFzYzpDZWZhc3lkOzhlZ2VjZHRmYURCZGJhc2FlY2VmQmQ7OGVhRGNiYUh6OnRqampiOEFhbWNqampqZEdUbWJjdWFsY2x0Z2VhbGNGRkZGYjBFY2J5ZDE6ampqYkhqampqYmJoSWFzYzpDZWZhc3lkOzhlZ0hjZHRmYUlCZGJhc2FIY2VmQmQ7OGVhSWNiYWV6OnRqampiOEFrZG5hZFRtYmNiaExhYmhIaW5hYWFIY2xmeWRiZ1hjeDJmZ2VJZGJhYWFIeWRiZ1ljeDJmZ09JZGJnUjp0ZzhVYWFhSGN3ZnlkYmdoY3gyZmdRSWRsYU9JZGxnOFY6dGc4V05hUUlkYmFSOnRnOFhhZUlkbGE4Vjp0ZzhZTjp0ZzhaaDgwYWVJZHdhT0lkd2c4MTp0Z0JhOFhOYVFJZHdhODE6dGc4M2E4VU46dGdVaDhYYThZYTgzTmE4V2FCTjp0ZzhZaDhVZG5hOFphOFpOYThZYThZTmFVYVVOTU06cmdCSmJiYmI5RWdPVG1iYThaYUI6dmg4MGFVYUI6dmg4WGE4WWFCOnZoOFVrYThTYUFhWWNkdGZ5ZGJnUWM4UzJmZ2VhOFVhQjpyZzhXYThVTk5nODVhZUlkYk1VZGJhZWE4WGE4V2E4WE5nODZOZzg3YWVJZGxNVWRsYWVhODBhOFdhODBOZzgzTmc4OGFlSWR3TVVkd2FlYTg2YThVTmc4NmFlSWR4TVVkeGFlYTgzYThVTmc4OWFlSWR6TVVkemFlYTgzYThYTmc4OmFlSWRDTVVkQ2FlYThVYThXYTgwYTgxTmE4VWFSTmE4VmE4WE5NTTptZ1pOZzgzTmc4VWFlSWRLTVVkS2FlYThYYTgzTmc4WGFlSWQzTVVkM2FlYTgwYTgzTmc4MGFlSWRhTVVkYWFlYTgzYVpOZzgzYWVJZDhLTVVkOEthZWE4V2FlSWR5TVVkeWE4U2FBYVhjZHRmeWRiZ1hjOFMyZmdlYTg1YWVJZGJNVWRiYWVhODdhZUlkbE1VZGxhZWE4OGFlSWR3TVVkd2FlYTg2YWVJZHhNVWR4YWVhODlhZUlkek1VZHphZWE4OmFlSWRDTVVkQ2FlYThVYWVJZEtNVWRLYWVhOFhhZUlkM01VZDNhZWE4MGFlSWRhTVVkYWFlYTgzYWVJZDhLTVVkOEthZWE4V2FlSWR5TVVkeWE4U2FBYWhjZHRmeWRiZ1ljOFMyZmdlYTg1YWVJZGJNVWRiYWVhODdhZUlkbE1VZGxhZWE4OGFlSWR3TVVkd2FlYTg2YWVJZHhNVWR4YWVhODlhZUlkek1VZHphZWE4OmFlSWRDTVVkQ2FlYThVYWVJZEtNVWRLYWVhOFhhZUlkM01VZDNhZWE4MGFlSWRhTVVkYWFlYTgzYWVJZDhLTVVkOEthZWE4V2FlSWR5TVVkeWRuYUlUbWJkbmFPVG1iYThaYUI6dmg4WmFVYUI6dmhVYThZYUI6dmg4WWthSWFRY2x0ZmdlYUJKYmJiWk5nOFVhVU5nOFdhZUlkbE1VZGxhZWE4VWE4Wk5nOFhhZUlkd01VZHdhZWE4VWE4WU5nODBhZUlkYk1VZGJhZWE4VWFSOm1hOFlOYVVhOFZOOnRhODFhOFpOOnROZzhVYWVJZHhNVWR4YUlhWGNsdGZnZWE4V2FlSWRsTVVkbGFlYThYYWVJZHdNVWR3YWVhODBhZUlkYk1VZGJhZWE4VWFlSWR4TVVkeGFJYVljbHRmZ2VhOFdhZUlkbE1VZGxhZWE4WGFlSWR3TVVkd2FlYTgwYWVJZGJNVWRiYWVhOFVhZUlkeE1VZHhrYUhjeGZoSGFMY2lmZ0xhZDZtYmtrZG5hbFRtYko7bjttO204OUo6djo7O3c4WmFtY3pHRWg4WWNiaE9hQWhRYWFoSGE4U2hlaW5kbmFPYVF5ZGI5aG1iYWVjeGZnTGFMSWRiSmJiYmJNVWRiYWVjemZnTGFMSWRiSmJiYmJNVWRiYWVjQ2ZnTGFMSWRiSmJiYmJNVWRiYWVhOFlhZWN5ZmdMSWRiZzhaTmc4VWFlSWRiTVVkYmFlY2xmZ1hhOFVhWElkYk1VZGJhZWN3ZmdYYThVYVhJZGJNVWRiYWVjS2ZnWGFYSWRiYUhJZGJnOFhhOFVOOnRVZGJhSGN3ZklkYmg4V2FlYzNmZ1hhWElkYmE4VWFIY2xmSWRiZzgwTjp0VWRiYWVjYWZnWGFYSWRiYThVYThXTjp0VWRiYWVjOEtmZ1hJZGJoVWFMYThaYThVTVVkYmFYYVVhOFVhOFdhOFdOYThYYThYTmE4MGE4ME5NTU5NVWRia2FRY2xmaFFhSGN4ZmhIYWVjOFNmaGVhbGFPY2VmZ085aG1ia2tkbmFkVG1iY2JoaGFiaFlpbmFiYWhjZHRmaFhjYmhIaW5hNWFYYUhjOkcxampiZnlkYmNkdGZ5ZGJnT2ZSYmJoZWRuZG5hNWFZYUhmeWRiZ1FmUmJiZ0xjOTlmY0ZlR2NwZTBtYmFlYzk5ZmNGZUdjOzplNm1la2RuYUxjdWZjRmVHY2UwbWJhOEVhUWNkdGZ5ZGJhTzlobWVrZG5hZWN1ZmNGZUdjZTBtYmE4RmFPY2R0ZnlkYmFROWhtZWtKYmJhY0piYmFjSmJiYlphZWNGZUdjZVNFYUxjRmVHY2VTRWg4OGFhYU9jeDJmZ2VJZHdhYWFRY3gyZmdMSWR3Z0I6dGc4MDptaDg2YWVJZGxhTElkbGc4Mzp0ZzhaOm1oODlhZUlkYmFMSWRiZ1I6dGdVOm1oODpkbmFhYVhhSGM6SzFqamJmeWRiY2R0ZnlkYmN4MmZnZUlkd2FCOnRnOFZhODBhODBOYVVhVU5hOFphOFpOTU1nOFlOYThWYTgwTmFlSWRiYVI6dGc4MWFVTmE4WmFlSWRsYTgzOnRnODVOTU1nOFdhODBOOnRnOFhhOFhOYTgxYThZTmE4V2FVTjp0ZzhVYThVTmE4NWE4WU5hOFdhOFpOOnRnOFdhOFdOTU06cmc4N0piYmJiOUVUbWJhOFhhODc6dmg4WGE4V2E4Nzp2aDhXYThVYTg3OnZoOFVrYTg4YThZOnJOZzhZYThYYUJOYThVYVJOYTgzYThXTk1NOm1nWk5nODdhWk5oWmE4WGE4N05obmE4V2E4N05oY2E4VWE4N05oOWNhOFlhOFhOZzg3YThXTmhKYTg3YThVTmg5ZWE4WWE4V05nVGE4VU5oU2E4WGE4N05oODdhOFdhVE5oVGE4VWE4WWE4VU5OaDloZG5hVWE4NU5hODFhODlOTWc4WGE4WE5hOFphOFZOYTg1YTg2Tk1nOFVhOFVOYTgwYTgxTmE4VmE4Ok5NZzhXYThXTk1NOnJnODBKYmJiYjlFVG1iYThYYTgwOnZoOFhhOFdhODA6dmg4V2E4VWE4MDp2aDhVa2E4U2FBYVFjZHRmeWRiYzhTMmZnZWFlSWRiYTloYThVYTg4YTgwOnJOZzgwYThVTk5NZ1VNVWRiYWVhVGE4V2E4MGE4V05nOFZOTWc4MWFlSWRsTVVkbGFlYTg3YThYYTgwYThYTmc4Wk5NZzg1YWVJZHdNVWR3YWVhU2E4VmE4VU5NZzhWYWVJZHhNVWR4YWVhOWVhOFphOFVOTWc4N2FlSWR6TVVkemFlYUphOFphOFdOTWc4WmFlSWRDTVVkQ2FlYTljYThVYTgwYThYYUJOYThVYVJOYTgzYThXTk1NZ0I6bU5nODBOTWc4VWFlSWRLTVVkS2FlYWNhOFdhODBOTWc4V2FlSWQzTVVkM2FlYW5hOFhhODBOTWc4WGFlSWRhTVVkYWFlYVphQmE4ME46dGc4MGFlSWQ4S01VZDhLYWVhOFlKYmJiYk1nOFlhZUlkeU1VZHlhOFNhQWFPY2R0ZnlkYmM4UzJmZ2VhVWFlSWRiTVVkYmFlYTgxYWVJZGxNVWRsYWVhODVhZUlkd01VZHdhZWE4VmFlSWR4TVVkeGFlYTg3YWVJZHpNVWR6YWVhOFphZUlkQ01VZENhZWE4VWFlSWRLTVVkS2FlYThXYWVJZDNNVWQzYWVhOFhhZUlkYU1VZGFhZWE4MGFlSWQ4S01VZDhLYWVhOFlhZUlkeU1VZHlrYUhjbGZnSGN4OWhtYmthWWN4ZmhZYWhjaWZnaGFkNm1ia2FDVG1iY2JoWWluSmJiYmJoOFlhYWFiYVljZHRmZ2VjbGZ5ZGJnaGN4MmZnSElkd2FhYWV5ZGJnZ2N4MmZnT0lkd2c4MTp0ZzhXYThXTmFISWRiYU9JZGJnODU6dGc4WGE4WE5hSElkbGFPSWRsZzg3OnRnODBhODBOTU1nUmFhYWVjd2Z5ZGJnRWN4MmZnZUlkd2E4MTp0ZzhaTmE4V2E4V2E4Wk5hOFhhZUlkYmE4NTp0Z1VOYTgwYWVJZGxhODc6dGdCTk1NZzhVTjp0SmJiYmJKYmJqWmFSYThaYThaTmFVYVVOYUJhQk5NTWc4Vk5hOFVhOFVOOnRnODM6dmE4M0piYmJiOUJFZzgzTmg4OWE4VmE4V05hOFphOFVOOnRhODNOaDg6YVJhQk5hODBhOFVOOnRhODNOaFphOFZhODBOYUJhOFVOOnRhODNOaG5hUmFVTmE4WGE4VU46dGE4M05oY2E4VmE4WE5hVWE4VU46dGE4M05oOWNhOFhhQk5hVWE4ME46dGc4VWE4VU5hODBhOFpOYUJhOFdOOnRnOFVhOFVOYThXYVVOYThaYThYTjp0ZzhVYThVTk1NOnJKYmJiWk5oOFVheWFnYUMyZzhMY2R0ZmhIYXlhRWFDMmc4SmNkdGZoT2F5YWhhQzJnOEFjZHRmaFFhODE6bWhKYTg3Om1oOWVhODU6bWhUY2JoTGFDaFhKYmJiYmhCSmJiYmJoODNKYmJiYmhSSmJiYmJoOFZKYmJiYmg4MUpiYmJiaDg1SmJiYmJoODdKYmJiYmg4OEpiYmJiaDg2aW5hc2NqZGZhTGZnZWN3ZmE4VWE4OmFRSWRiYUhJZGJnOFo6dGc4ME5hODlhT0lkYmE4Wjp0Z1VOTWc4V05VZGJhZWNsZmE4VWFuYTgwTmFaYVVOTWc4WE5VZGJhZWE4VWE5Y2E4ME5hY2FVTk1nODBOVWRiYWVjeGZhOFVhSmE4V05hOWVhOFhOYThaYVRhODBOTU1NZzhaTlVkYmE4VWE4V2E4WE5OYThWTWg4VmE4VWE4V2E4ME5OYTgxTWg4MWE4VWE4WGE4ME5OYTg1TWg4NWE4VWE4WmE4Wk5OYThZTWg4WWE4VWE4V2E4Wk5OYUJNaEJhOFVhOFhhOFpOTmE4M01oODNhOFVhODBhOFpOTmFSTWhSYThVYThXYThXTk5hODdNaDg3YThVYThYYThYTk5hODhNaDg4YThVYTgwYTgwTk5hODZNaDg2YUhjbGZoSGFRY2xmaFFhT2NsZmhPYUxjemZoTGFYY3VmZ1htYmthOEthZ2M4UzJmZ2VhODZhZUlkYk1VZGJhZWE4OGFlSWRsTVVkbGFlYTg3YWVJZHdNVWR3YWVhODVhZUlkeE1VZHhhZWE4MWFlSWR6TVVkemFlYThWYWVJZENNVWRDYWVhUmFlSWRLTVVkS2FlYTgzYWVJZDNNVWQzYWVhQmFlSWRhTVVkYWFlYThZYWVJZDhLTVVkOEthZWE4VWFlSWR5TVVkeWE4S2FoYzhTMmZnZWE4NmFlSWRiTVVkYmFlYTg4YWVJZGxNVWRsYWVhODdhZUlkd01VZHdhZWE4NWFlSWR4TVVkeGFlYTgxYWVJZHpNVWR6YWVhOFZhZUlkQ01VZENhZWFSYWVJZEtNVWRLYWVhODNhZUlkM01VZDNhZWFCYWVJZGFNVWRhYWVhOFlhZUlkOEtNVWQ4S2FlYThVYWVJZHlNVWR5YThLYUVjOFMyZmdlYTg2YWVJZGJNVWRiYWVhODhhZUlkbE1VZGxhZWE4N2FlSWR3TVVkd2FlYTg1YWVJZHhNVWR4YWVhODFhZUlkek1VZHphZWE4VmFlSWRDTVVkQ2FlYVJhZUlkS01VZEthZWE4M2FlSWQzTVVkM2FlYUJhZUlkYU1VZGFhZWE4WWFlSWQ4S01VZDhLYWVhOFVhZUlkeU1VZHlhRGE4TGNsdGZoWGNiaEhhQ2hRaW5hWGFIZmdlYXNjamRmYUhmZ09JZGJhZUlkYk1VZGJhZWNsZmdMYU9jbGZJZGJhTElkYk1VZGJhZWN3ZmdMYU9jd2ZJZGJhTElkYk1VZGJhZWN4ZmdlYU9jeGZJZGJhZUlkYk1VZGJhSGN6ZmhIYVFjdWZnUW1ia2FEYThBY2x0ZmhYY2JoSGFDaFFpbmFYYUhmZ2Vhc2NqZGZhSGZnT0lkYmFlSWRiTVVkYmFlY2xmZ0xhT2NsZklkYmFMSWRiTVVkYmFlY3dmZ0xhT2N3ZklkYmFMSWRiTVVkYmFlY3hmZ2VhT2N4ZklkYmFlSWRiTVVkYmFIY3pmaEhhUWN1ZmdRbWJrYURhOEpjbHRmaFhjYmhIYUNoUWluYVhhSGZnZWFzY2pkZmFIZmdPSWRiYWVJZGJNVWRiYWVjbGZnTGFPY2xmSWRiYUxJZGJNVWRiYWVjd2ZnTGFPY3dmSWRiYUxJZGJNVWRiYWVjeGZnZWFPY3hmSWRiYWVJZGJNVWRiYUhjemZoSGFRY3VmZ1FtYmthWWNpZmdZYWQ2bWJra2NiaE9kbmRuYW1jd0dnOWltYkpiYmJiaFJjYmg2Y2JoOWtjYmgweGVrY2JoNmEzY2J5ZDE6ampqYkhqampqYmJoMGFzYzpDZWZhc3lkOzhlZ2VjZHRmYTBCZGJhc2FlY2VmQmQ7OGVjdWEwYWxhYmFkYUF6OmZqampiZ1FjbHRhUWNqampqaUdFY2J5ZDE6ampqYkhqampqYmJoOWthc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE5a0JkYmFzYWVjZWZCZDs4ZWE5a2FRYTBhYWFsejpnampqYkpGRnV1aFJhUVRtYmE5a2hlYVFoSGluYWVJZGJnOFVhUmFSYThVOUVFaFJhZWNsZmhlYUhjdWZnSG1ia2FRaDZrYXN5ZE5laDltZG5hbFRtYmE5bWNsZmhlYTlteWRiaFFhNWhIYWxoTGNiaE9pbmNiYWV5ZGJnWGFROVJhSFJiYmNwZUdFYU9maE9hSGNlZmhIYWVjbGZoZWFYaFFhTGN1ZmdMbWJrYU9jZTRoT2tjdWFkYU85UmNpZmc5bmN4MmE5bmM7djpRO3Y6UWUwRWNieWQxOmpqamJIampqamJiaDlvYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOW9CZGJhc2FlY2VmQmQ7OGVjdWE5bmNkdGE5bmNGRkZGaTBFY2J5ZDE6ampqYkhqampqYmJoOXBhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE5cEJkYmFzYWVjZWZCZDs4ZWEzY2J5ZDE6ampqYkhqampqYmJoOFBhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE4UEJkYmFzYWVjZWZCZDs4ZWFsY2J5ZDE6ampqYkhqampqYmJoOXFhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE5cUJkYmFzYWVjZWZCZDs4ZWF4YXhOYThSSmJialphbWNsR0VnbmFuTjp2aDg4SmJiYmJoODZkbmFkYWs5bm1iZG5hOW5jaTZtYmFzeWQ6eWVoOXJhQ2NsdGg5c2E5b2N3Zmg5dEpiYmJiaDg3SmJiYmJoODZpbmFzY05lZmFiYWRhbGFBejpjampqYmFiaGdjYmg4TmNiaDNpbmFiYTNjZHRmaDhMY2JoZWluZG5hQWFnYWVmeWRiZ09jZHRnaGZ5ZGJnUWFBYThMYWVjOlcxampiZnlkYmNkdGZ5ZGJnSGNkdGdFZnlkYmdMU21iYTVhSGZSYmJnWWN2MmE1YU9mUmJiZ1hmYzthMWpqYmZSYmJnOEFhWGN2MmFZZmc4SmM7YTFqamJmUmJiZzhNVmNGZUdUbWJkbmFMYVE5bm1iYThKYztHMWpqYmZSYmJjRmVHbWVrZG5hWGN1ZmNGZUdjZTBtYmFZVG1iYThFYWhmeWRiYUg5aG1la2RuYVhUbWJhWWN1ZmNGZUdjZTBtYmE4RmFFZnlkYmFPOWhtZWthOW9hOE5jeDJmZ1FhSGFPYThNY0ZlR2dMRUJkbGFRYU9hSGFMRUJkYmFRYUxhOEFHY2I5aEJkd2E4TmNlZmg4TmthZWNsZmdlY3g5aG1ia2RuYTNjaWZnM2FkOXBtYmFnY3hmaGdhOE5jaWZhOW45bm1la2thOE5UbWRjYmg4SmluYThTYUFhOW9hOEpjeDJmZ2h5ZGJnTGNkdGdRZnlkYmdnYzhTMmZnZUlkd2FhYWh5ZGxnWGN4MmZnSElkd2c4WE5hZUlkemFISWRiZzgwTmFlSWRhTWc4VWE4VU1NYThYTmFlSWRsYUhJZGxnOFpOYWVJZENhOFhOYWVJZDNNZzhVYThVTU1hOFpOYWVJZGJhODBOYWVJZHhhOFpOYWVJZEtNZzhVYThVTU1hODBOYWVJZDhLTU1NOmxoOFVKYmJiYkpiYmpaYWVJZHlnOFc6dmE4V0piYmJiOUJFaDhXZG5kbmFoeWR3ZzhMbWJKRkZ1dWg4M3hla0piYmJiSmJialphOFNhQWFYY2R0ZnlkYmM4UzJmZ2VJZHlnVTp2YVVKYmJiYjlCRWFlSWR3YWFhTGN4MmZnSElkd2dVTmFlSWR6YUhJZGJnOFlOYWVJZGFNZ0JhQk1NYVVOYWVJZGxhSElkbGdCTmFlSWRDYVVOYWVJZDNNZ1VhVU1NYUJOYWVJZGJhOFlOYWVJZHhhQk5hZUlkS01nVWFVTU1hOFlOYWVJZDhLTU1NOmxOaDgza2E4V2E4VU5oQmRuYUNUbWJhOEthTGM4UzJmZ09JZHdhOFhOYU9JZHphODBOYU9JZGFNZzhVYThVTU1hOFhOYU9JZGxhOFpOYU9JZENhOFhOYU9JZDNNZzhVYThVTU1hOFpOYU9JZGJhODBOYU9JZHhhOFpOYU9JZEtNZzhVYThVTU1hODBOYU9JZDhLTU1NaDhVYXlhWGFDMmdZY2R0ZmhIYURhTGFDMmdFY2x0ZmhlYU9JZHloVWFDaE9pbmFISWRiZzhXYThXYVVOYWVjeGZJZGJhOFhhZWN3ZklkYk5hODBhZUlkYk5hOFphZWNsZklkYk5NTU1nOFdhOFdNOnROYThVTWg4VWFIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2RuZG5hOExtYkpiYmJiaDhXeGVrYThLYVhjOFMyZmdPSWR3YWFhTGN4MmZnZUlkd2c4ME5hT0lkemFlSWRiZzhaTmFPSWRhTWc4V2E4V01NYTgwTmFPSWRsYWVJZGxnVU5hT0lkQ2E4ME5hT0lkM01nOFdhOFdNTWFVTmFPSWRiYThaTmFPSWR4YVVOYU9JZEtNZzhXYThXTU1hOFpOYU9JZDhLTU1NaDhXYXlhRWNkdGZoSGFEYVljbHRmaGVhT0lkeWg4WWFDaE9pbmFISWRiZzhYYThYYThZTmFlY3hmSWRiYTgwYWVjd2ZJZGJOYThaYWVJZGJOYVVhZWNsZklkYk5NTU1nOFhhOFhNOnROYThXTWg4V2FIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2E4VzpsaDhXa2FCYThVOmxNaEJhODNhOFdNaDgzZG5kbmRuYTVhTGZSYmJjOTpmUGRkYmVrYUthUWZ5ZGJnUWFMU21iYUFhWGNkdGZ5ZGJoRWluZG5kbmE4RWFRY2R0Z1lmeWRiZ2VjdVNtYmFBYWVjZHRmeWRiYUVTbWVrZG5hOEZhWWZ5ZGJnZWN1U21iYUFhZWNkdGZ5ZGJhRVNtZWthWGhla2E4S2FRYzhTMmZnT0lkd2FhYWVjeDJmZ0hJZHdnOFhOYU9JZHphSElkYmc4ME5hT0lkYU1nOFVhOFVNTWE4WE5hT0lkbGFISWRsZzhaTmFPSWRDYThYTmFPSWQzTWc4VWE4VU1NYThaTmFPSWRiYTgwTmFPSWR4YThaTmFPSWRLTWc4VWE4VU1NYTgwTmFPSWQ4S01NTWg4VWF5YWVhQzJjZHRmaEhhRGFRYUMyY2x0ZmhlYU9JZHloVWFDaE9pbmFISWRiZzhXYThXYVVOYWVjeGZJZGJhOFhhZWN3ZklkYk5hODBhZUlkYk5hOFphZWNsZklkYk5NTU1nOFdhOFdNOnROYThVTWg4VWFIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2FCYThVOmxNaEJhS2FZZnlkYmdRYUw5aG1ia2thNWFYZlJiYmNpOWhtZWE4TFRtZWFLYVhjZHRmeWRiZ1FhWFNtZWluZG5kbmE4RWFRY2R0Z1lmeWRiZ2VjdVNtYmFBYWVjZHRmeWRiYWdTbWVrZG5hOEZhWWZ5ZGJnZWN1U21iYUFhZWNkdGZ5ZGJhZ1NtZWthTGhla2E4S2FRYzhTMmZnT0lkd2FhYWVjeDJmZ0hJZHdnOFhOYU9JZHphSElkYmc4ME5hT0lkYU1nOFVhOFVNTWE4WE5hT0lkbGFISWRsZzhaTmFPSWRDYThYTmFPSWQzTWc4VWE4VU1NYThaTmFPSWRiYTgwTmFPSWR4YThaTmFPSWRLTWc4VWE4VU1NYTgwTmFPSWQ4S01NTWg4VWF5YWVhQzJjZHRmaEhhRGFRYUMyY2x0ZmhlYU9JZHloVWFDaE9pbmFISWRiZzhXYThXYVVOYWVjeGZJZGJhOFhhZWN3ZklkYk5hODBhZUlkYk5hOFphZWNsZklkYk5NTU1nOFdhOFdNOnROYThVTWg4VWFIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2E4M2E4VTpsTWg4M2FLYVlmeWRiZ1FhWDlobWJ4ZGtrZG5hOEZhOEVhOEVhUWZ5ZGJhWFNFYUthUWZ5ZGJnWWNkdGZ5ZGJnUWN1OWhtYmFLYVhjZHRmeWRiaFFrYThLYVljOFMyZmdPSWR3YWFhUWN4MmZnZUlkd2c4WE5hT0lkemFlSWRiZzgwTmFPSWRhTWc4VWE4VU1NYThYTmFPSWRsYWVJZGxnOFpOYU9JZENhOFhOYU9JZDNNZzhVYThVTU1hOFpOYU9JZGJhODBOYU9JZHhhOFpOYU9JZEtNZzhVYThVTU1hODBOYU9JZDhLTU1NaDhVYXlhUWFDMmdnY2R0ZmhIYURhWWFDMmdFY2x0ZmhlYU9JZHloVWFDaE9pbmFISWRiZzhXYThXYVVOYWVjeGZJZGJhOFhhZWN3ZklkYk5hODBhZUlkYk5hOFphZWNsZklkYk5NTU1nOFdhOFdNOnROYThVTWg4VWFIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2RuZG5hOExtYkpiYmJiaDhXeGVrYThLYVFjOFMyZmdPSWR3YWFhWWN4MmZnZUlkd2c4ME5hT0lkemFlSWRiZzhaTmFPSWRhTWc4V2E4V01NYTgwTmFPSWRsYWVJZGxnVU5hT0lkQ2E4ME5hT0lkM01nOFdhOFdNTWFVTmFPSWRiYThaTmFPSWR4YVVOYU9JZEtNZzhXYThXTU1hOFpOYU9JZDhLTU1NaDhXYXlhRWNkdGZoSGFEYWdjbHRmaGVhT0lkeWg4WWFDaE9pbmFISWRiZzhYYThYYThZTmFlY3hmSWRiYTgwYWVjd2ZJZGJOYThaYWVJZGJOYVVhZWNsZklkYk5NTU1nOFhhOFhNOnROYThXTWg4V2FIY2xmaEhhZWN6ZmhlYU9jdWZnT21ia2E4VzpsaDhXa2FCYThVOmxNaEJhODNhOFdNaDgza2FoYTgzYUJhODNhQjlEZ2VFVWR3YWhhTGFYYWVhOExjYjloR2dlRUJkbGFoYVhhTGFlRUJkYmE4SmNlZmc4SmE4TjlobWJrYXNjamRmY2JjajtxYno6dGpqamI4QWE5dGhlYThOaEhpbmFzY2pkZmFleWRiY0E0Y0Y4RkdnT2NGQWFPY0ZBNkVjZHRmZ09hT3lkYmNlZkJkYmFlY3hmaGVhSGN1ZmdIbWJrY2JoZWNiaEhpbmFzY2pkZmFlZmdPeWRiaFFhT2FIQmRiYVFhSGZoSGFlY2xmZ2VjajtxYjlobWJrY2JoZWE5dGhIaW5hc2NqZGZhSHlkYmNBNGNGOEZHZ09jRkFhT2NGQTZFY2R0ZmdPYU95ZGJnT2NlZkJkYmE5cGFPY2R0ZmFlQmRiYUhjeGZoSGE4TmFlY2VmZ2U5aG1ia2FkYWs5UmdPY2k5VWg5dWRuYWxUbWJjYmhlYThQaEhpbmFIYWVCZGJhSGNsZmhIYWxhZWNlZmdlOWhtYmtrY2JoOXZhOXFjYmFsejp0ampqYmg5d2FPY085VWg5eGE5dWNlNGg5eWNiaDNjYmg4QWRuaW5hOW9hOXBhOEFjZHRmeWRiY3gyZmc4Sklkd2c4VWE4ODlFbWVhM2E5dTlwbWVKRkZ1dWg4V2RuYTl5YThOOXBtYmE5b2E5cGE5eWNkdGZ5ZGJjeDJmSWR3SmJiO2FaTmg4V2tkbmE4VWE4VzlFVG1iYThVYTg2OUVUbWJhM2E5eDBtZGtkbmE5d2FBYThKeWRsZzhNY2R0Zzl6ZmdFeWRiZ1FmZzlBUmJiYTl3YUFhOEp5ZGJnZ2NkdGc5QmZ5ZGJnZWZnOUNSYmJWbWJhNWFnZlJiYmg5RGRuYTltYWVjZHRmZ0hjbGZ5ZGJnT2FIeWRiZ0hTbWJhT2FIOVJoTGFhYVFjeDJmaFlhYWFlY3gyZmhoYTlyYUhjaXRmaGVjYmhIY2VoOExkbmluZG5hOFBhZXlkYmNkdGZ5ZGJnT2FRU21iYThQYWVjbGZ5ZGJjZHRmeWRiZ1hhUVNtYmFPYVhTbWJhYWFYY3gyZmdYSWRiYWFhT2N4MmZnT0lkYmc4WDp0ZzhVYWhJZGxhT0lkbGc4MDp0ZzhZTmFoSWRiYThYOnRnQmFYSWRsYTgwOnRnOFdOOnRnOFphOFVhWUlkbGE4MDp0ZzgzTmFZSWRiYThYOnRnOFZhOFdOOnRnODBOYThXYWhJZHdhT0lkd2dVOnRnODFOYThZYVhJZHdhVTp0ZzhYTjp0ZzhZYThXYVlJZHdhVTp0Zzg1TmE4M2E4WE46dGc4V05hOFhhQk5hODFhOFVOOnRnVWE4WGE4Vk5hODVhOFVOOnRnOFVOTU1hOFphOFpOYThZYThZTmFVYVVOTU1hODBhODBOYThXYThXTmE4VWE4VU5NTU46ckpiYmo4Ok45Rm1ka2FlY3dmaGVhSGNlZmdIYUw2aDhMYUxhSDlobWJra2E4TGNlR1RtYmE5eWNlZmg5eXhla2RuZG5kbmRuYTlEYzk6ZlBkZWJka2FnaGVpbmFFeWRiaE9kbmRuYThFYWVjZHRnSGZ5ZGJnZWN1U21iYUFhZWNkdGZ5ZGJhT1NtZWtkbmE4RmFIZnlkYmdlY3VTbWJhQWFlY2R0ZnlkYmFPU21la2E4TWhla2E4UGFIZmFlQmRiYUthSGZ5ZGJnZWFnOWhtYnhpa2tkbmE4RmE4RWE4RWE5QmZ5ZGJhOE1TRWFLYTlCZnlkYmdnY2R0ZnlkYmdlY3U5aG1iYUthOXpmeWRiaGVrYThQYTlCZmE4TUJkYmFlaDhNa2E4UGFnY2R0ZmE4TUJkYmthOUNjZTg2YmJhOUFjZTg2YmJhOEpJZHdnOFVhODZhODZhOFU5REVoODZhOXZjZWZoOXZjZWNkYTlEY2VTRWEzZmgza2E4QWNlZmc4QWE4TjlobWJra2E5dlRtZGRuYWxUbWJjYmhYY2JoaGluZG5hOFBhaGNkdGdlZnlkYmdPYWhTbWJhQWFPY2R0ZnlkYmhnZG5haGFBYWVmeWRiOWhnRW1iYThTYWdjOFMyZmdlYThTYWhjOFMyZmdISWRiYWVJZGJNVWRiYWVhSElkbGFlSWRsTVVkbGFlYUhJZHdhZUlkd01VZHdhZWFISWR4YWVJZHhNVWR4YWVhSElkemFlSWR6TVVkemFlYUhJZENhZUlkQ01VZENhZWFISWRLYWVJZEtNVWRLYWVhSElkM2FlSWQzTVVkM2FlYUhJZGFhZUlkYU1VZGFhZWFISWQ4S2FlSWQ4S01VZDhLYWVhSElkeWFlSWR5TVVkeWFJVG1iYUlhZ2NsdGZnZWFJYWhjbHRmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhrYUNUbWJhOEthT2M4UzJmZ2VhOEthaGM4UzJnOExmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhhZWFISWR6YWVJZHpNVWR6YWVhSElkQ2FlSWRDTVVkQ2FlYUhJZEthZUlkS01VZEthZWFISWQzYWVJZDNNVWQzYWVhSElkYWFlSWRhTVVkYWFlYUhJZDhLYWVJZDhLTVVkOEthZWFISWR5YWVJZHlNVWR5YTlzYU8yaFlhRGhIYUNoUWluYUhhWWZnZWFIYVhmZ09JZGJhZUlkYk1VZGJhZWNsZmdMYU9jbGZJZGJhTElkYk1VZGJhZWN3ZmdMYU9jd2ZJZGJhTElkYk1VZGJhZWN4ZmdlYU9jeGZJZGJhZUlkYk1VZGJhSGN6ZmhIYVFjdWZnUW1ia2FFbWJKYmJiYkpiYmpaYThTYThMZmdlSWR5ZzhVOnZhOFVKYmJiYjlCRWFlSWR3YWFhZ2N4MmZnSElkd2c4VU5hZUlkemFISWRiZzhXTmFlSWRhTWc4WGE4WE1NYThVTmFlSWRsYUhJZGxnOFhOYWVJZENhOFVOYWVJZDNNZzhVYThVTU1hOFhOYWVJZGJhOFdOYWVJZHhhOFhOYWVJZEtNZzhVYThVTU1hOFdOYWVJZDhLTU1NOmxOZzhVYTg3YTg3YThVOURFaDg3a2FYYTlzZmhYYWhjZWZnaGFsOWhtYmtjYmhIYThFaGVpbmRuYWV5ZGJnT2N1U21iZG5hSGE4UGFPY2R0Z1FmeWRiZ085aG1iY3VoT2E4RWFRZnlkYmdRY3VTbWJhOFBhUWNkdGZ5ZGJoT2thZWFPQmRia2FlY2xmaGVhbGFIY2VmZ0g5aG1ia2NiaEhhOEZoZWluZG5hZXlkYmdPY3VTbWJkbmFIYThQYU9jZHRnUWZ5ZGJnTzlobWJjdWhPYThGYVFmeWRiZ1FjdVNtYmE4UGFRY2R0ZnlkYmhPa2FlYU9CZGJrYWVjbGZoZWFsYUhjZWZnSDlobWJra2E4N2E4NmFDRWg4N2NiaEhhYmhlY2JoT2luZG5hQWE4UGFleWRiY2R0ZnlkYmdYY2R0ZnlkYmdRYUFhOFBhZWNsZnlkYmNkdGZ5ZGJnWWNkdGZ5ZGJnTFNtYmFRYUFhOFBhZWN3ZnlkYmNkdGZ5ZGJnZ2NkdGZ5ZGJnaFNtYmFMYWhTbWJhYmFIY2R0ZmdRYVhCZGJhUWN3ZmFnQmRiYVFjbGZhWUJkYmFIY2lmaEhrYWVjeGZoZWFPY2lmZ09hZDZtYmtkbmRuYTlpbWJhSGhkeGVrZG5hSGFrMG1iYUhoZHhla2RuYVJhODc5Rm1iYUhoZHhla0pGRnV1aFJjYmhkYWJoZWNiaE9pbmRuYTlrYTBhZXlkYmdRY2R0ZnlkYmNkdGZJZGJnOFVhODc5RVRtYmFlY2xmOFBkYmg5RWFiYWRjZHRmZ0xhUUJkYmFMY2xmYTlFODNkYmE4VWFSYVJhOFU5RUVoUmFkY2lmaGRrYWVjeGZoZWFPY2lmZ09hSDZtYmtrYWRhazBtYnhka2thc2NOZWZhYmFkYWxhQXo6Y2pqamJrZG5kbmFkYWswbWJhZGhoeGVrZG5hOWltYmFkaGh4ZWtkbmFSYTg4OUZtYmFkaGh4ZWtjZWhMaW5hUkpiYjthWk5nOFVhODhhOFVhODg5REVoOFhKYmJiYmg4VWRuYTZUbWJhOWtoZWE2aEhpbmFlSWRiZzhXYThVYThXYThYOUZFYThVYThXYThVOUVFaDhVYWVjbGZoZWFIY3VmZ0htYmtrSkZGdXVoUmNiaGhhYmhlY2JoSGluZG5hOWthMGFleWRiZ09jZHRmeWRiY2R0ZklkYmc4V2E4WDlFVG1iYWVjbGY4UGRiaDlFYWJhaGNkdGZnUWFPQmRiYVFjbGZhOUU4M2RiYThXYVJhUmE4VzlFRWhSYWhjaWZoaGthZWN4ZmhlYUhjaWZnSGFkNm1ia2RuYUxhaGFkOWhWY2VHbWJhZGhoeGRrYThVYTg2YTg2YThVOURFaDg2YWhhazlubWVjYmhMYWhoZGFSYTg4OUZtYmtrZG5hbWNqampqZEdUbWJhOXFjYmFsejp0ampqYmg4TGRuYWhUbWJhYmhlYWhoSGluYThMYWV5ZGJnT2ZjZTg2YmJhOExhQWFPY2R0ZnlkYmZjZTg2YmJhZWNsZmhlYUhjdWZnSG1ia2thc2NOZWZhYmFoYWxhQXo6Y2pqamJkbmRuZG5hbFRtYmNiaFFhc3lkOnllaEVpbmRuYThMYVFmUmJiVG1iZG5hNWFRZlJiYmdlY2wwbWJjZWFldGNRR21la2RuYUFhUWNkdGdYZnlkYmdlYVFTbWJhYWFRY3gyZmdIYWFhZWN4MmZnZThQZGI4M2RiYUhjd2ZhZWN3ZnlkYkJkYnhla2E4U2FRYzhTMmZnTElkeWc5Y2E5Y0pMOjM7clVOZzhVTWg4OGFMSWR3ZzloYThVTWhSYUxJZGxneGE4VU1oOFZhTElkYmc5RmE4VU1oVWFMSWRhZzlHYThVYWFhUWN4MmZnZ0lkd2c4OU46dGg4MWFMSWQzZzlIYThVYWdJZGxnODpOOnRoODVhTElkS2c5SWFnSWRiZ1phOFVOOnRoOFlKYmJiYmhjYUxJZENnOUpKYmJiYk1oODdhTElkemc5S0piYmJiTWhCYUxJZHhnV0piYmJiTWg4M2RuZG5hQ1RtYmFRaE9pbkpiYmJiYTg4YThLYU9jOFMyZmdISWR5ZzhVOnZhOFVKYmJiYjlCRWg4VWFEYU9hQzJjbHRmaGVhSElkYWE4OE5hODFNaDgxYUhJZDNhODhOYTg1TWg4NWFISWRLYTg4TmE4WU1oOFlhSElkQ2E4OE5hODdNaDg3YUhJZHphODhOYUJNaEJhSElkeGE4OE5hODNNaDgzYUhJZHdhODhOYVJNaFJhSElkbGE4OE5hOFZNaDhWYUhJZGJhODhOYVVNaFVhQ2hIaW5hODFhZWN4ZklkYmc4WmFlY3dmSWRiZzhXTmE4VU46dGg4MWE4NWE4WmFlY2xmSWRiZzhYTmE4VU46dGg4NWE4N2E4V2E4WE5hOFVOOnRoODdhVWFlSWRiZzgwYTgwTmE4VU46dGhVYThZYThaYTgwTmE4VU46dGg4WWFCYThXYTgwTmE4VU46dGhCYTgzYThYYTgwTmE4VU46dGg4M2FSYThXYThXTmE4VU46dGhSYThWYThYYThYTmE4VU46dGg4VmFlY3pmaGVhSGN1ZmdIbWJrYUthT2NkdGZ5ZGJnT2FROWhtYmthSVRtYmFJYVFjbHRmZ2VJZHhoU2FlSWR3aEphZUlkbGg5ZWFlSWRiaDhVeGVrSmJiYmJoU0piYmJiaEpKYmJiYmg5ZUpiYmJiaDhVa2FCYVU6dmc4WGE4WU5hODE6dGE4N2FCYTgzYVU6dmc4V046dGc4MWE4VmE4M2E4V046dGc4Wjp2ZzgwYThXYThZTmE4NTp0ZzhWTjp0aDg1YUphOFVhOFhOOnRhOWVhOFVhOFdOOnRnODNhODBOOnRnODdhUmFCYThYTjp0YTgxYTgwTjp0Z0I6dmdSOm1oODFhODNhOFo6dmdKOm1oOWVkbkpiYmJiYThVYThVYVU6dmdUTjp0YTgzYUpOOnRhODdhUk46dGc4MzpsYTg4Sjo5ODM6ZzgxTmc4VTlFVG1iYTgxYTg1TmE5ZWE4Vk5hVGE4WU5hUzp0TU1hODM6dmhja2FVOmxhOFU5RVRtYmE4WjpsYThVOUVUbWJhQjpsYThVOUVUbWJhVDptYWNOYThYOm1hODFhY05hODVhQjp2TWdCTmE4VzptYTllYWNOYTgwOm1hQk5hOFZhOFo6dk1NZzg3TmE4WTptYVU6dk1NTWg4OGE5bWFYZmdlY2xmeWRiZ0hhZXlkYmdlOVJoWWFFYWVjaXRmaFhKYmJiYmg4VWRuYUhhZVNnOEptYkpiYmJiaDhVYVhoZWFZaE9pbmFhYWVjbGZ5ZGJjeDJmZ0hJZHdhODk6dGc4V2E4V05hSElkYmFaOnRnOFdhOFdOYUhJZGxhODo6dGc4V2E4V05NTWc4V2FhYWV5ZGJjeDJmZ0hJZHdhODk6dGc4WGE4WE5hSElkYmFaOnRnOFhhOFhOYUhJZGxhODo6dGc4WGE4WE5NTWc4WGE4VWE4VWE4WDlERWc4VWE4VWE4VzlERWg4VWFlY3dmaGVhT2N1ZmdPbWJra2FCYTg5OnRnOFdhOFdOYTg4YVo6dGc4V2E4V05hODdhODo6dGc4V2E4V05NTWE4VTpyZzhVYThVTjlFbWJhTElkOEtoY2RuYThKbWJjYmhPY2VoTGRuaW5hYWFYY2xmeWRiY3gyZmdlSWRiYWFhWHlkYmN4MmZnSElkYmc4WDp0ZzhVYTg6YUhJZGxnODA6dGc4WU5hWmE4WDp0ZzgzYWVJZGxhODA6dGc4V046dGc4WmE4VWE4N2E4MDp0Z1JOYTg4YThYOnRnOFZhOFdOOnRnODBOYThXYTg5YUhJZHdnVTp0ZzgxTmE4WWFlSWR3YVU6dGc4WE46dGc4WWE4V2FCYVU6dGc4NU5hUmE4WE46dGc4V05hOFhhODNOYTgxYThVTjp0Z1VhOFhhOFZOYTg1YThVTjp0ZzhVTk1NYThaYThaTmE4WWE4WU5hVWFVTk1NYTgwYTgwTmE4V2E4V05hOFVhOFVOTU1OOnJKYmJqODpOOUZtZWFYY3dmaFhhT2NlZmdPYVk2aExhWWFPOWhtYmtrYUxjZUdtZWtKYmJiYkpiYmpaYTljOnZhOWNKYmJiYjlCRWc4VWE5aGFCTmE5S2E4OE5hOUdNZzhXYThXTU1hQk5heGE4N05hOUphQk5hOUhNZzhXYThXTU1hODdOYTlGYTg4TmFXYTg3TmE5SU1nOFdhOFdNTWE4OE5hY01NTTpsTmE4VWE5aGE4OU5hOUthWk5hOUdNZzhXYThXTU1hODlOYXhhODpOYTlKYTg5TmE5SE1nOFdhOFdNTWE4Ok5hOUZhWk5hV2E4Ok5hOUlNZzhXYThXTU1hWk5hY01NTTpsTkpiYjthWk5KOjk4MzpnODFNOUVtYmFnYUJVZHdhZ2E4N1VkbGFnYTg4VWRia2FRY2VmZ1FhbDlobWJrYUNUbWVjYmhMaW5kbmE4TGFMZlJiYlRtYmFBYUxjZHRnZWZ5ZGJhTDlobWJhNWFMZmhFYWFhTGN4MmZoT2FLYWVmaDhKYXlhTGFDMmNkdGZoOEFjYmhnaW5jdWhRZG5hRVJiYmNpOWhtYmFMaFFhOEp5ZGJnZWFMU21iYXlhZ2NkdGdIZmhYYThBYUhmSWRiaDhVYUxoUWluYVFoSGN1aFFkbmFYYWVhQzJjZHRmSWRiYThVOUNtYmFIY3VTbWJhSGhRYThLYWVjOFMyZklkeWE4S2FIYzhTMmZJZHk5RVRtYmFlaFFrYUthZWNkdGZ5ZGJnZWFMOWhtYmtrYXlhZ2NkdGZoWGFEYWdjbHRmaFlhTGhlaW5hWGFlYUMyY2R0ZkpiYmJiSmJialphOEthZWFRYVFjdVNFZ0hjOFMyZklkeWc4VTp2YThVSmJiYmI5QkVhWWFIYUMyY2x0ZmdISWR3YU9JZHdOYUhJZGJhT0lkYk5hSElkbGFPSWRsTk1NYUhJZHhNTlVkYmFLYWVjZHRmeWRiZ2VhTDlobWJrYWdjZWZnZ2FDOWhtYmtrYUxjZWZnTGFsU21peGJra2FDbWVrY2JoQ2thaWF2YW9hcmF3YUNhbGFhYXlhemFzYThSYXNjMWVmYTVhOExhcXo6aGpqamJrZG5hbWNqampqbEdUbWJhem1iYWhUbWJjYmhRYWJoZWluYTVhZXlkYmdBZlJiYmMzdGhMYWVjd2ZnS3lkYmhIZG5kbmE4RWFBY2R0Z1lmeWRiYWVjbGZnWHlkYmdPU21iY2JoQ2E4RmFPY2R0ZnlkYmFBOWhtZWtjampqajk0aENrYWVhTGFDVmFBVkJkYmE1YU9mUmJiYzN0aExkbmRuYThFYU9jZHRmeWRiYUhTbWJjYmhDYThGYUhjZHRmeWRiYU85aG1la2NqampqOTRoQ2thWGFMYUNWYU9WQmRiYTVhSGZSYmJjM3RoQ2RuZG5hOEVhSGNkdGZ5ZGJhQVNtYmNiaE9hOEZhWWZ5ZGJhSDlobWVrY2pqamo5NGhPa2FLYUNhT1ZhSFZCZGJhZWN4ZmhlYVFjaWZnUWFoNm1ia2tkbmF6VG1iYWhUbWJhaGhlaW5hYmF6YWJ5ZGJjZHRmeWRiQmRiYWJjbGZoYmFlY3VmZ2VtYmtrZG5hUFRtYmFQYW5hODY6ck5VZGJrYXN5ZDs4ZWdlY2R0YXNjOkNlZmZjOThmaEhkbmluYWVUbWVhSHlkYmNieWQ6bTpqampiSDpiampqYmJhSGM5OGZoSGFlY3VmaGV4YmtrYXNjajtzYmY4S2pqampiYWhrO1lpZW91YWJ5ZGxodmFieWRiY2xmY2JhaWNkdHo6dGpqamJob2FkY2k5VWhyZG5hZFRtYmRuYWxUbWJhZWh3YWRoRGluYW9hbGF3eWRiY2R0ZnlkYmNkdGZncWFxeWRiY2VmQmRiYXdjbGZod2FEY3VmZ0RtYnhka2thZWh3YWRoRGluYW9hd3lkYmNkdGZncWFxeWRiY2VmQmRiYXdjbGZod2FEY3VmZ0RtYmtrZG5haVRtYmNiaERhb2h3aW5hd3lkYmhxYXdhREJkYmF3Y2xmaHdhcWFEZmhEYWljdWZnaW1ia2tkbmFkY2k2bWJpbmFlY3dmeWRiaHdhZWNsZnlkYmhEYWV5ZGJoaWRuYWxUbWJhbGF3Y2R0ZnlkYmh3YWxhRGNkdGZ5ZGJoRGFsYWljZHRmeWRiaGlrYXZhb2FpY2R0ZmdxeWRiY2l0ZmFEQmRiYXZhcXlkYmNpdGZhd0JkbGFxYXF5ZGJjZWZCZGJhdmFvYURjZHRmZ3F5ZGJjaXRmYXdCZGJhdmFxeWRiY2l0ZmFpQmRsYXFhcXlkYmNlZkJkYmF2YW9hd2NkdGZnd3lkYmNpdGZhaUJkYmF2YXd5ZGJjaXRmYURCZGxhd2F3eWRiY2VmQmRiYWVjeGZoZWFyY3VmZ3JtYmtrYWJ5ZGJjYkJkYms6dG9kRHVlOTlhaWNkNGFpZmhyY2Vod2luYXdnRGNldGh3YURhcjZtYmtjdWFEY2R0Z3JhRGNGRkZGaTBFY2J5ZDE6ampqYkhqampqYmJod2FvYW95ZDlHZ3FjZWZCZDlHYW9hcWNkdGZhd0JkYmF3Y0ZlYXJ6OnRqampiaGtkbmFpVG1iYWxjZDRobGFEY3VmaHhjYmhtaW5hbWhEZG5hdlRtYmF2YW1jZHRmeWRiaERrY2JhZGFEYWwyY2R0ZmdEeWRsZ3dhd2NqampqOTRTRWd3Y0g0YXc3YzpGOmI6REQyY2JhRHlkYmd3YXdjampqajk0U0Vnd2NINGF3N2M7RDtPOkI4SjI3Y2JhRHlkd2dEYURjampqajk0U0VnRGNINGFEN2M6M0Y7TjhOMjdheEdod2FtY2R0aFBkbmRuZG5hdlRtYmFrYXdjZHRmZ3J5ZGJnRGN1U21lYWRhdmFQZnlkYmFsMmNkdGZnc0lkYmh6Y2VocWluYXFocmRuYWRhdmFEY2R0ZnlkYmFsMmNkdGZncUlkYmF6OUNtYmFxSWRsYXNJZGw5Q21iYXFJZHdhc0lkdzlCbWxrYXJjZWZocWFrYXdhcmZheEdnd2NkdGZncnlkYmdEY3U5aG1ieGRra2FrYXdjZHRmZ3J5ZGJnRGN1U21iYWRhbWFsMmNkdGZnc0lkYmh6Y2VocWluYXFocmRuYWRhRGFsMmNkdGZncUlkYmF6OUNtYmFxSWRsYXNJZGw5Q21iYXFJZHdhc0lkdzlCbWlrYXJjZWZocWFrYXdhcmZheEdnd2NkdGZncnlkYmdEY3U5aG1ia2thcmFtQmRiYW1oRGthYmFQZmFEQmRiYW1jZWZnbWFpOWhtYmtrYWtjYnlkOm06ampqYkg6YmpqamJiYW9hb3lkOUdjdWZCZDlHZG5hZVRtYmFpVG1iY2JoRGFlaHdpbmF3YURCZGJhd2NsZmh3YWlhRGNlZmdEOWhtYmtjYmhEYWVod2luZG5hRGFieWRiZ3JTbWJhd2FlYXJjZHRmZ3J5ZGJCZGJhcmFEQmRia2F3Y2xmaHdhYmNsZmhiYWlhRGNlZmdEOWhtYmtrazpocmR2dXY5OThKampqamJjYTlSZ29jemZjd2ZjYnlkMTFqamJCZGJhb2NiOFBkajFqamI4M2l6YW9jd2ZjYnlkTjFqamJCZGJhb2NiOFBkOm0xampiODNpYmRuYWRUbWJhaWNkNGhyZG5hYm1iZG5hbFRtYmNiaHdpbmFlYWxhd2NkdGZ5ZGJhcjJjZHRmaERjYmhpaW5hb2N6ZmFpZmdxYURhaWZJZGJna2FxSWRiZ3hheGFrOUVFVWRiYW9haWZncWFrYXFJZGJneGF4YWs5REVVZGJhaWNsZmdpY3g5aG1ia2F3Y2VmZ3dhZDlobWJ4aWtrYXJjZHRod2NiaERpbmNiaGlpbmFvY3pmYWlmZ3FhZWFpZklkYmdrYXFJZGJneGF4YWs5RUVVZGJhb2FpZmdxYWthcUlkYmd4YXhhazlERVVkYmFpY2xmZ2ljeDlobWJrYWVhd2ZoZWFEY2VmZ0RhZDlobWJ4ZGtrZG5hbFRtYmNiaHdpbmFiYXdjeDJmZ2lhZWFsYXdjZHRmeWRiYXIyY2R0ZmdESWRiVWRiYWlhRElkbFVkbGFpYURJZHdVZHdjYmhpaW5hb2N6ZmFpZmdxYURhaWZJZGJna2FxSWRiZ3hheGFrOUVFVWRiYW9haWZncWFrYXFJZGJneGF4YWs5REVVZGJhaWNsZmdpY3g5aG1ia2F3Y2VmZ3dhZDlobWJ4ZGtrYXJjZHRobGNiaHdhZWhEaW5hYmF3Y3gyZmdpYWVhd2FyMmNkdGZncUlkYlVkYmFpYXFJZGxVZGxhaWFxSWR3VWR3Y2JoaWluYW9jemZhaWZncWFEYWlmSWRiZ2thcUlkYmd4YXhhazlFRVVkYmFvYWlmZ3Fha2FxSWRiZ3hheGFrOURFVWRiYWljbGZnaWN4OWhtYmthRGFsZmhEYXdjZWZnd2FkOWhtYmtrSmJiYmJhb0lkYmFvSWR6Z3g6dGdrYWtKYmJiYjlERWdrYW9JZGxhb0lkQ2dtOnRnUGFQYWs5REVna2FvSWR3YW9JZEtnUDp0Z3Nhc2FrOURFaHNkbmFiVG1iYWRUbWJKYmJiYkpiYmpaYXM6dmFzSmJiYmI5QkVoa2luYWJha2FiSWRiYXg6dE5VZGJhYmNsZmdvYWthb0lkYmFtOnROVWRiYWJjd2Znb2FrYW9JZGJhUDp0TlVkYmFiY3hmaGJhZGN1ZmdkbWJra2RuYXZUbWJhdmFQVWR3YXZhbVVkbGF2YXhVZGJrYXNrOlpsZXd1ZG5hZVRtYmNiaHZhYmhvaW5hb2F2QmRiYW9jbGZob2FlYXZjZWZndjlobWJra2RuYWlUbWJjYmhyaW5hZGFyY2R0Zmh3Y2JoRGluYWxhd2FEY2R0Z3ZjOkcxampiZnlkYmNkdGZ5ZGJjZHRmeWRiaG9kbmFiYWxhd2F2ZnlkYmNkdGZ5ZGJncWNkdGZna3lkYmd2YXFTbWJpbmFrYWJhdmdxY2R0Zmd4eWRiZ3ZCZGJheGhrYXFhdjlobWJra2RuYWJhb2NkdGZna3lkYmd2YW9TbWJpbmFrYWJhdmdvY2R0Zmd4eWRiZ3ZCZGJheGhrYW9hdjlobWJra2RuYXFhb1NtYmFiYXFhb2FxYW8wRWNkdGZhcWFvYXFhbzZFQmRia2FEY2VmZ0RjaTlobWJrYXJjaWZncmFpNm1ia2tkbmFlbWJjYnNrY2JoeGluZG5hbGF4Y2R0Z3ZmeWRiYXg5aG1iYXhob2RuYWJhdmZnRHlkYmd2YXhTbWJhRGhxaW5hcWFiYXZnb2NkdGZna3lkYmd2QmRiYWtocWFvYXY5aG1ia2thRGFvQmRia2F4Y2VmZ3hhZTlobWJrY2JodmFiaG9jYmhraW5kbmRuYXZhbHlkYmdxOWhtYmRuYXZhb3lkYmdxOWhtYmFvYWtCZGJha2NlZmhreGRrYW9hYmFxY2R0ZnlkYkJkYnhla2FvYWJhcWNkdGZ5ZGJCZGJrYW9jbGZob2FsY2xmaGxhZWF2Y2VmZ3Y5aG1ia2FraztKaWlsdWQ5OWR1YWJjYmFlY2x0ejp0ampqYmh2ZG5hbFRtYmFkaG9haWhyYWxod2luYXJjd2ZJZGJoRGFyY2xmSWRiaHFhdmFveWRiY2x0ZmdrYXJJZGJha0lkYk1VZGJha2NsZmd4YXFheElkYk1VZGJha2N3Zmd4YURheElkYk1VZGJha2N4ZmdrYWtJZGJKYmJqWk1VZGJhb2NsZmhvYXJjeGZocmF3Y3VmZ3dtYmtrZG5hZVRtYmF2aHJhZWhraW5hcmN4ZmdvSWRiaERhb2NiQmRiYXJhcklkYkpiYmJiSmJialphRDp2YURKYmJiYjlCRWdETlVkYmFyY2xmZ29hRGFvSWRiTlVkYmFyY3dmZ29hRGFvSWRiTlVkYmFyY3pmaHJha2N1ZmdrbWJra2RuYWxUbWJpbmF2YWR5ZGJjbHRmZ3JjeGZna2FpY3dmSWRiYXJjd2ZJZGI6dGdEYUROYWlJZGJhcklkYjp0Z0RhRE5haWNsZklkYmFyY2xmSWRiOnRnRGFETk1NZ0Rha0lkYmdxYXFhRDlERVVkYmFkY2xmaGRhaWN4ZmhpYWxjdWZnbG1ia2tkbmFlVG1iYXZjeGZocmluYWJhcklkYlVkYmFyY3pmaHJhYmNsZmhiYWVjdWZnZW1ia2trOm1vZXJ1ZG5hb1RtYmFlY2Q0aHpkbmF2VG1iYWljZDRoSGF2Y2R0aE9jYmhBaW5kbmFQYUFmUmJiVG1iYUFoZWRuYURUbWJhRGFBY2R0ZnlkYmhla2RuYXNUbWJhc2FlZlJiYmNlR21la2RuYW1hQWZSYmJjbFNtYmFiYWVhejJjZHRmZ2lhcmFBY3gyZmdDSWRiYWtOYXhJZGJNVWRiYWlhQ0lkbGFrTmF4SWRsTVVkbGFpYUNJZHdha05heElkd01VZHdrYWRhZWFIMmNkdGZoWGFxaGVhd2hpYXZoQ2luYVhhZXlkYmNkdGdRZmFpSWRiYWxhUWZJZGI6dlVkYmFlY2xmaGVhaWNsZmhpYUNjdWZnQ21ia2thd2FPZmh3YUFjZWZnQWFvOWhtYnhka2tkbmFzbWJjYmhlYURoaWluZG5hUGFlZlJiYlRtYmFlaENkbmFEVG1iYWl5ZGJoQ2thbWFlZlJiYmNsU21iYWJhQ2F6MmNkdGZnQ2FySWRiYWtOYXhJZGJNVWRiYUNhcmNsZklkYmFrTmF4SWRsTVVkbGFDYXJjd2ZJZGJha05heElkd01VZHdrYWljbGZoaWFyY3hmaHJhb2FlY2VmZ2U5aG1ieGRra2RuYURUbWJpbmRuYVBSYmJUbWJhc2FEeWRiZ2VmUmJiY2VHbWJhbVJiYmNsU21iYWJhZWF6MmNkdGZnZWFySWRiYWtOYXhJZGJNVWRiYWVhcmNsZklkYmFrTmF4SWRsTVVkbGFlYXJjd2ZJZGJha05heElkd01VZHdrYVBjZWZoUGFEY2xmaERhbWNlZmhtYXJjeGZocmFvY3VmZ29tYnhka2themNkdGhpY2JoZWluZG5hUGFlZlJiYlRtYmFzYWVmUmJiY2VHbWJhbWFlZlJiYmNsU21iYWJhcklkYmFrTmF4SWRiTVVkYmFiY2xmYXJjbGZJZGJha05heElkbE1VZGJhYmN3ZmFyY3dmSWRiYWtOYXhJZHdNVWRia2FyY3hmaHJhYmFpZmhiYW9hZWNlZmdlOWhtYmtrazhNYmFiYWVhZGFpYWxhdmNiY2JjYmNiY2Jhb2FyYXdhRHo6YmpqamJrOE1iYWJhZWFkYWlhbGF2YW9hcmF3YURhcWFrYXhhbWFQejpiampqYmtSYmFiYWJhZWFkYWlhbGF2YW9hcmF3YURhcWFrYXhjampqamRWYW16OmJqampiazpkOEtvcXVlOTlkdWU5OWR1cTk5OEpqampqYmM7V2I5UmdxOEtqampqYmNiaGthcWN4ZmNiYztLYno6dGpqamI4QWFxY3VhbGN4MmFsYzt2OlE7djpRZTBFY2J5ZDE6ampqYkhqampqYmJneEJkeGFxY2VCZDJheGFpYWxhdmNiY2J6OmVqampiOEFhcWN1YWxjZHRhbGNGRkZGaTBFZ21jYnlkMTpqampiSGpqampiYmdpQmR6YXFjZEJkMmRuZG5KRkY5NTllSmJialphd0piYmpaYXdKYmJqWjlERTp2YXdKOVZPOmQ4NjlERWd3OmxKYmJiOXA5RFRtYmF3Ok9oUHhla2NqampqOTRoUGthZGNpOVVoc2FyY285VWh6ZG5kbmFvbWJhUGNkOWltZWtkbmFsVG1iYVBjdWY6WWh3ZG5hb1RtYmNiaHZhaWhIYXhoT2luZG5kbmFvYXZmUmJiY2VHVG1iYXZjampqamxWaEF4ZWtkbmRuYU9jbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaEF4ZWtjampqajk0aEFrYUFjcXRoQWRuZG5hT2N3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthQWFYVmhBZG5kbmFPSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FBYVhjQ3RWaEFrYUhhQUJkYmFIY2xmaEhhT2N4ZmhPYWxhdmNlZmd2OWhtYnhka2theGh2YWloT2FsaEhpbmRuZG5hdklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oQXhla2NqampqOTRoQWthQWNDdGhBZG5kbmF2Y2xmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FYY3F0YUFWaEFkbmRuYXZjd2ZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYU9hQWFYVkJkYmF2Y3hmaHZhT2NsZmhPYUhjdWZnSG1ia2thZFRtYmNiaGthZWh2Y2JoT2luYWthaWF2Y2xmeWRiY2R0ZnlkYmdIYWlhdmN3ZnlkYmNkdGZ5ZGJnQTloYWlhdnlkYmNkdGZ5ZGJnWGFIOWhhWGFBOWhHR2Zoa2F2Y3hmaHZhT2NpZmdPYWQ2bWJra2FyY2k5VWhRZG5kbmF6Olo6ckpiYmJaTWd3OmxKYmJiOXA5RFRtYmF3Ok9odnhla2NqampqOTRodmthUTpaaExjYmhLYzpid2h6ZG5pbmFrYVE5cG1lYXphUDlSY2Q5aW1lYXZhemN1ZmF2YXo5aUVhUGNlZmF2YVA5a0VoWWRuYWxUbWJhWWN1ZjpZaHdkbmFvVG1iY2JoT2FpaEhheGh2aW5kbmRuYW9hT2ZSYmJjZUdUbWJhT2NqampqbFZoQXhla2RuZG5hdmNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oQXhla2NqampqOTRoQWthQWNxdGhBZG5kbmF2Y3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FBYVhWaEFkbmRuYXZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYUFhWGNDdFZoQWthSGFBQmRiYUhjbGZoSGF2Y3hmaHZhbGFPY2VmZ085aG1ieGRra2F4aHZhaWhPYWxoSGluZG5kbmF2SWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hBeGVrY2pqamo5NGhBa2FBY0N0aEFkbmRuYXZjbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYVhjcXRhQVZoQWRuZG5hdmN3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthT2FBYVhWQmRiYXZjeGZodmFPY2xmaE9hSGN1ZmdIbWJra2NiaE9kbmFkVG1iYWVodmNiaEhpbmFPYWlhdmNsZnlkYmNkdGZ5ZGJnQWFpYXZjd2Z5ZGJjZHRmeWRiZ1g5aGFpYXZ5ZGJjZHRmeWRiZ3JhQTloYXJhWDloR0dmaE9hdmN4Zmh2YUhjaWZnSGFkNm1ia2tKYmJiYmg4QWRuYXM6WmdDYUw6dGFZOllnd2F6Olk6dGdFTmFrOlpnM2FPOlpnNTp0TmEzYUw6dGF3YVA6WTp0ZzhFTmE1YUM6dE5NZzhGSmJiYmI5Qm1iYUNhMzp0YThFYUVhNWFMOnROTk5hOEY6dmg4QWtkbmRuYU9hUTBtYmFPaGthWWhQeGVrYU9oc2FZaHprZG5kbmFLY2wwbWJkbmE4QWF3TUpiYmJaTWd3OmxKYmJiOXA5RFRtYmF3Ok9odnhka2NqampqOTRodnhla2FQYXpmY2Q5VGh2a2FLY2VmZ0tjczlobWJra2RuZG5kbmFrbWJKYmJqWmh3Y2JoaWNkaHZhRG1leGRrYWxjZDRhbGZoSGNlaE9pbmFPZ3ZjZXRoT2F2YUg2bWJrY2JoT2FxY3VhdmNkdGdZYXZjRkZGRmkwRWNieWQxOmpqamJIampqamJiZ0tCZENhcWNpQmQyYXFhbWNieWQxOmpqamJIampqamJiZ3pCZEthcWNsQmQyZG5kbmRuZG5hbFRtYmFQY3VmOllod2FvVG1lY2JoT2FpaEFheGhIaW5kbmRuYW9hT2ZSYmJjZUdUbWJhT2NqampqbFZoWHhla2RuZG5hSGNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthWGNxdGhYZG5kbmFIY3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hyeGVrY2pqamo5NGhya2FYYXJWaFhkbmRuYUhJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaHJ4ZWtjampqajk0aHJrYVhhcmNDdFZoWGthQWFYQmRiYUFjbGZoQWFIY3hmaEhhbGFPY2VmZ085aG1ieGlra2FLY0ZlYVl6OnRqampiOEFjYmhQY2Jodnhka2F4aE9haWhIYWxoQWluZG5kbmFPSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FYY0N0aFhkbmRuYU9jbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaHJ4ZWtjampqajk0aHJrYXJjcXRhWFZoWGRuZG5hT2N3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9ocnhla2NqampqOTRocmthSGFYYXJWQmRiYU9jeGZoT2FIY2xmaEhhQWN1ZmdBbWJra2FLY0ZlYVl6OnRqampiaHJhdmN1ZmhvY2JoUGNiaFlpbmRuZG5kbmFyYWlhWWNkdGdLZnlkYmdBY200YUE3Yzp2O3Q7aDtFdjJndmNzNGF2N2FvR2dIY2R0ZmdYeWRiZ09jdVNtYmNlaHZpbmFpYU9jZHRnT2Z5ZGJhQVNtZGFIYXZmaE9hdmNlZmh2YXJhT2FvR2dIY2R0ZmdYeWRiZ09jdTlobWJra2FYYVlCZGJhUGh2YVBjZWZoUHhla2F6YU9meWRiaHZrYXphS2ZhdkJkYmFZY2VmZ1lhbDlobWJrY3VhUGM4UzJnT2FQYztEO087ZjhVMEVodmtjYmhyYXFhdmNieWQxOmpqamJIampqamJiZ3ZCZDNhcWN2QmQyYXZjYmFPejp0ampqYmhPZG5hZFRtYmFlaGlpbkpiYm5uSmJialphemFpeWRiZ0FjZHRmeWRiZ3ZhemFpY2xmeWRiZ0hjZHRmeWRiZ1lTYXZhemFpY3dmeWRiZ1hjZHRmeWRiZ0tTR2dvRWg4RWRuYXhhSGN4MmZnSElkYmF4YUFjeDJmZ0FJZGJnNTp0Z0NheGFYY3gyZmdYSWRsYUFJZGxnOEE6dGd3TmFYSWRiYTU6dGczYUhJZGxhOEE6dGc4Rk46dGdMYUxOYThGYVhJZHdhQUlkd2dFOnRnYU5hd2FISWR3YUU6dGc4Rk46dGd3YXdOYThGYTNOYWFhQ046dGdDYUNOTU06cmczSmJiYmI5RVRtYmFMYTM6dmhMYUNhMzp2aENhd2EzOnZod2thT2F2YzhTMmZndmF2SWRiYXdhOEVhMzpyTmczYXdOTmc4Rk1VZGJhdmFDYTNhQ05nYU5naGF2SWRsTVVkbGF2YUxhM2FMTmc4RU5nZ2F2SWR3TVVkd2F2YWFhd05nYWF2SWR4TVVkeGF2YThFYXdOZzhKYXZJZHpNVWR6YXZhOEVhQ05nOEVhdklkQ01VZENhdmF3YTNhTGFFTmF3YTVOYThBYUNOTU06bWc4QU5nNU5nd2F2SWRLTVVkS2F2YUNhNU5nQ2F2SWQzTVVkM2F2YUxhNU5nTGF2SWRhTVVkYWF2YTVhOEFOZzVhdklkOEtNVWQ4S2F2YTNhdklkeU1VZHlkbmFvbWJhT2FZYzhTMmZndmE4RmF2SWRiTVVkYmF2YWhhdklkbE1VZGxhdmFnYXZJZHdNVWR3YXZhYWF2SWR4TVVkeGF2YThKYXZJZHpNVWR6YXZhOEVhdklkQ01VZENhdmF3YXZJZEtNVWRLYXZhQ2F2SWQzTVVkM2F2YUxhdklkYU1VZGFhdmE1YXZJZDhLTVVkOEthdmEzYXZJZHlNVWR5YU9hS2M4UzJmZ3ZhOEZhdklkYk1VZGJhdmFoYXZJZGxNVWRsYXZhZ2F2SWR3TVVkd2F2YWFhdklkeE1VZHhhdmE4SmF2SWR6TVVkemF2YThFYXZJZENNVWRDYXZhd2F2SWRLTVVkS2F2YUNhdklkM01VZDNhdmFMYXZJZGFNVWRhYXZhNWF2SWQ4S01VZDhLYXZhM2F2SWR5TVVkeWthaWN4ZmhpYXJjaWZncmFkNm1ia2tjYmhBYXFjdWFQY2R0Z3ZhUGNGRkZGaTBFZ2ljYnlkMTpqampiSGpqampiYmdIQmRhYXFjb0JkMmFxYWljYnlkMTpqampiSGpqampiYmdpQmQ4S2FxY3JCZDJhSGNGZWF2ejp0ampqYmhZZG5hbFRtYmF6aEhpbkpiYmJiSmJialphT2FIeWRiZ1hjOFMyZmd2SWR5Z3c6dmF3SmJiYmI5QkVhdklkd2F4Y3dmSWRiZ3dOYXZJZHpheElkYmdDTmF2SWRhTWdMYUxNTWF3TmF2SWRsYXhjbGZJZGJnTE5hdklkQ2F3TmF2SWQzTWd3YXdNTWFMTmF2SWRiYUNOYXZJZHhhTE5hdklkS01nd2F3TU1hQ05hdklkOEtNTU06bE5od2RuZG5hWWFYY2R0Z3ZmZ1h5ZGJjdVNtYmFpYXZmSWRiYXc5RVRtZWthWGFBQmRiYWlhdmZhd1VkYmthSGNsZmhIYXhjeGZoeGFsYUFjZWZnQTlobWJra0piYmJiaHdkbmFQVG1iaW5haUlkYmdDYXdhd2FDOURFaHdhaWNsZmhpYVBjdWZnUG1ia2tha2NkNGFrZmhPY2VoaWluYWlndmNldGhpYXZhTzZtYmtjYmhpYXFjdWF2Y2R0Z09hdmNGRkZGaTBFY2J5ZDE6ampqYkhqampqYmJnSEJkeWFIY0ZlYU96OnRqampiaFhkbmFkVG1iYXZjdWZocmNiaFBjYmh4aW5kbmF6YWVheGNkdGZndnlkYmNkdGZ5ZGJnaWF6YXZjbGZ5ZGJjZHRmeWRiZ09TbWJhaWF6YXZjd2Z5ZGJjZHRmeWRiZ3ZTbWJhT2F2U21iYVlhdmNkdGZ5ZGJoQWRuZG5hWWFPY2R0ZnlkYmd2YVlhaWNkdGZ5ZGJnaTlwbWJhdmFBOXBtYmFBaGxhaWhvYXZoQXhla2RuYUFhaTlwbWJhQWF2OXBtYmFpaGxhdmhveGVrYXZobGFBaG9haWhBa2FiYVBjeDJmZ3ZhQUJkYmF2Y3dmYW9CZGJhdmNsZmFsQmRiZG5hWGFvYzozRjtOOE4yYWxjOkY6YjpERDI3YUFjO0Q7TzpCOEoyN2FyR2dPY2R0Zmd2eWRiZ2ljdVNtYmNlaEhpbmFIaHZkbmFiYWljeDJmZ2l5ZGJhQTlobWJhaXlkbGFsOWhtYmFpeWR3YW9TbWlrYXZjZWZoSGFYYU9hdmZhckdnT2NkdGZndnlkYmdpY3U5aG1ia2thdmFQQmRiYVBjZWZoUGtheGNpZmd4YWQ2bWJrYVBjaTJoaWtkbmFEbWJjd2h2eGRrYXc6cmh3Y3dodmthRGF3VWRia2F2Y2R0aHZkbmluYXZUbWVhdmM5OGZndmFxY3hmZnlkYmNieWQ6bTpqampiSDpiampqYmJ4YmtrYXFjO1diZjhLampqamJhaWs6Mmxkd3VlOTo4SmpqampiYztXYjlSZ3I4S2pqampiY2Jod2FyY3hmY2JjO0tiejp0ampqYjhBZG5hYmFlU21iYWJhZWFkY2R0ek1qampiOEFrYXJjdWFsY2R0YWxjRkZGRmkwRWdEY2J5ZDE6ampqYkhqampqYmJncUJkeGFyY2VCZDJhcWNiYWlhbGF2Y2JhcmN4Zno6ZGpqamJjdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpqampiSGpqampiYmhrYXJjeGZhcnlkMmd4Y2R0Z21mYWtCZGJhcmF4Y2VmZ1BCZDJha2FpYWxhdmNiY2J6OmVqampiOEFhcmN4ZmFQY2R0ZmFEY2J5ZDE6ampqYkhqampqYmJndkJkYmFyYXhjZGZnaUJkMmFyY3hmYWljZHRmY3VhdmFsYWVhZGFxejpmampqYmdlY2x0YWVjampqamlHRWNieWQxOmpqamJIampqamJiZ2lCZGJhaWFlYXZha2FsejpnampqYmRuYWRUbWJhb2FvTmhvY2Jod2FiaGxjYmhraW5kbmFpYXZhbHlkYmdlY2R0ZnlkYmNkdGZJZGJhbzlFVG1iYWxjbGY4UGRiaHNhYmF3Y2R0ZmdxYWVCZGJhcWNsZmFzODNkYmF3Y2lmaHdrYWxjeGZobGFrY2lmZ2thZDZtYmtrYXhjaWZobGFtYXJjeGZmY3dmaGtkbmluYWxUbWVha3lkYmNieWQ6bTpqampiSDpiampqYmJha2M5OGZoa2FsY3VmaGx4YmtrYXJjO1diZjhLampqamJhd2s6WENvRHVkOTl2dWU5OXZ1bzk5OEpqampqYmM7V2I5Umd3OEtqampqYmRuZG5hcm1iY2JoRHhla2F3Y3hmY2JjO0tiejp0ampqYjhBYXdjdWFkY3gyYWRjO3Y6UTt2OlFlMEVjYnlkMTpqampiSGpqampiYmdxQmR4YXdjZUJkMmFxYWVhZGFpY2JjYno6ZWpqamI4QWF3Y3VhZGNkdGFkY0ZGRkZpMEVna2NieWQxOmpqamJIampqamJiZ3hCZHphd2NkQmQyYWRjZDRhZGZobWNlaGVpbmFlZ2ljZXRoZWFpYW02bWJrY2JoUGF3Y3VhaWNkdGdzYWljRkZGRmkwRWNieWQxOmpqamJIampqamJiZ3pCZENhd2NpQmQyZG5kbmFyOlpnSDpySmJiYlpNZ086bEpiYmI5cDlEVG1iYU86T2hleGVrY2pqamo5NGhla2FpY3VmaEFjOmJ3aERjYmhDYWRoWGNiaFFpbmFlYURjdWZhZWFEOWlFYVBjZWZhZWFQOWtFaExkbmRuYWRUbWJhTGN1ZjpZaE9hcWhpYXhoZWFkaG1pbmRuZG5haUlkYmFPTkpiYmJaTWdLOmxKYmJiOXA5RFRtYmFLOk9oWXhla2NqampqOTRoWWthWWNDdGhZZG5kbmFpY2xmSWRiYU9OSmJiYlpNZ0s6bEpiYmI5cDlEVG1iYUs6T2g4QXhla2NqampqOTRoOEFrYThBY3F0YVlWaFlkbmRuYWljd2ZJZGJhT05KYmJiWk1nSzpsSmJiYjlwOURUbWJhSzpPaDhBeGVrY2pqamo5NGg4QWthZWFZYThBVkJkYmFpY3hmaGlhZWNsZmhlYW1jdWZnbW1ia2F6Y0ZlYXN6OnRqampiaEVjYmgzY2JoNWluZG5hRWF4YTVjZHRmeWRiZ1ljbTRhWTdjOnY7dDtoO0V2MmdpY3M0YWk3YUFHZ21jZHRmZzhBeWRiZ2VjdVNtYmFlYVlTbWJjZWhpaW5hRWFtYWlmYUFHZ21jZHRmZzhBeWRiZ2VjdVNtZWFpY2VmaGlhZWFZOWhtYmtrYThBYVlCZGJhM2FlY3VTZmgzYTVjZWZnNWFkOWhtYnhka2themNGZWFzejp0ampqYjhBY2JoM2tKYmJiYmg4RWRuYVg6WmdLYUg6dGFMOllnT2FEOlk6dGc4Rk5hQzpaZ2FhMzpaZ2g6dE5hYWFIOnRhT2FQOlk6dGdnTmFoYUs6dE5NZzhKSmJiYmI5Qm1iYUthYTp0YWdhOEZhaGFIOnROTk5hOEo6dmg4RWthUGFMYTNhcjBnaUVoUGFDYTNhaUVoQ2RuYTNhclNtYmFMYURhaUVnRGFQOVJjZDlpbWJkbmRuYVFjbDBtYmRuYThFYU9NSmJiYlpNZ086bEpiYmI5cDlEVG1iYU86T2hleGRrY2pqamo5NGhleGVrYVBhRGZjZDlUaGVrYTNhWGFpRWhYYVFjZWZnUWNzOWhtZWtrZG5kbmFDbWJjaWhpY2JoRHhla2NiaGlhd2FrY2J5ZDE6ampqYkhqampqYmJnNUJkS2F3Y2xCZDJhUGN1ZjpZaEtkbmRuYWRUbWJhcWhpYXhoZWFkaG1pbmRuZG5haUlkYmFLTkpiYmJaTWdPOmxKYmJiOXA5RFRtYmFPOk9oWXhla2NqampqOTRoWWthWWNDdGhZZG5kbmFpY2xmSWRiYUtOSmJiYlpNZ086bEpiYmI5cDlEVG1iYU86T2g4QXhla2NqampqOTRoOEFrYThBY3F0YVlWaFlkbmRuYWljd2ZJZGJhS05KYmJiWk1nTzpsSmJiYjlwOURUbWJhTzpPaDhBeGVrY2pqamo5NGg4QWthZWFZYThBVkJkYmFpY3hmaGlhZWNsZmhlYW1jdWZnbW1ia2F6Y0ZlYXN6OnRqampiaEVjYmhEY2JoM2luZG5kbmRuYUVheGEzY2R0Z0xmeWRiZ1ljbTRhWTdjOnY7dDtoO0V2MmdpY3M0YWk3YUFHZ21jZHRmZzhBeWRiZ2VjdVNtYmNlaGlpbmF4YWVjZHRnZWZ5ZGJhWVNtZGFtYWlmaGVhaWNlZmhpYUVhZWFBR2dtY2R0Zmc4QXlkYmdlY3U5aG1ia2thOEFhM0JkYmFEaGlhRGNlZmhEeGVrYTVhZWZ5ZGJoaWthNWFMZmFpQmRiYTNjZWZnM2FkOWhtYmtjdWFEYzMyZ2lhRGM7ajpLTTtqYjBFaGV4ZWthemNGZWFzejp0ampqYjhBY2JoRGNiaGVrYXdhZWNieWQxOmpqamJIampqamJiZ2VCZDNhd2N2QmQyYWVjYmFpejp0ampqYmg4QWF2Y2Q0aHhkbmFkVG1iZG5hbFRtYmF4Y2R0aEVhNWhZYXFoZWFsaG1hZGhBaW5hOEFhWXlkYmMzMmZnaWFlSWRiYWlJZGJNVWRiYWlhZWNsZklkYmFpSWRsTVVkbGFpYWVjd2ZJZGJhaUlkd01VZHdhaWFtSWRiYWlJZHhNVWR4YWlhbWNsZklkYmFpSWR6TVVkemFpYW1jd2ZJZGJhaUlkQ01VZENhaWFpSWRLSmJialpNVWRLYVljbGZoWWFlY3hmaGVhbWFFZmhtYUFjdWZnQW1ieGRra2E1aG1hcWhlYWRoWWluYThBYW15ZGJjMzJmZ2lhZUlkYmFpSWRiTVVkYmFpYWVjbGZJZGJhaUlkbE1VZGxhaWFlY3dmSWRiYWlJZHdNVWR3YWlhaUlkeEpiYmJiTVVkeGFpYWlJZHpKYmJiYk1VZHphaWFpSWRDSmJiYmJNVWRDYWlhaUlkS0piYmpaTVVkS2FtY2xmaG1hZWN4ZmhlYVljdWZnWW1ia2tkbmFEVG1iYThBaGlhRGhlaW5haWFpSWRiSmJiYmJKYmJqWmFpY0tmSWRiZ086dmFPSmJiYmI5QkVnT05VZGJhaWNsZmdtYU9hbUlkYk5VZGJhaWN3ZmdtYU9hbUlkYk5VZGJhaWN4ZmdtYU9hbUlkYk5VZGJhaWN6ZmdtYU9hbUlkYk5VZGJhaWNDZmdtYU9hbUlkYk5VZGJhaWMzZmhpYWVjdWZnZW1ia2tjYmhZYXdjdWFEY2R0Z0xhRGNGRkZGaTBFZ2ljYnlkMTpqampiSGpqampiYmdlQmRhYXdjb0JkMmF3YWljYnlkMTpqampiSGpqampiYmdFQmQ4S2FlY0ZlYUx6OnRqampiaDNkbmFkVG1iSmJialpKYmJqWmFLOnZhUGNlU0Vhb05nT2FPTmhLYXhjZHRoeGFsaGVpbmFLYWVjOzgxampiYWxFZ21JZHdhOEFhNXlkYmdBYzMyZmdpSWRDOnRnT2FPTmFtSWRiYWlJZHg6dGdPYU9OYW1JZGxhaUlkejp0Z09hT05NTU5hcWN3ZklkYmFpSWR3OnRnT2FPTmFxSWRiYWlJZGI6dGdPYU9OYXFjbGZJZGJhaUlkbDp0Z09hT05NTU1oT2RuZG5hM2FBY2R0Z2lmZ215ZGJjdVNtYmFFYWlmSWRiYU85RVRtZWthbWFZQmRiYUVhaWZhT1VkYmthNWNsZmg1YXFjeGZocWFlYXhmaGVhZGFZY2VmZ1k5aG1ia2thYmEzYUx6TWpqamI4QWNyaGlrYWljZHRoaWluYWlUbWVhaWM5OGZnaWF3Y3hmZnlkYmNieWQ6bTpqampiSDpiampqYmJ4YmtrYXdjO1diZjhLampqamJhRGs6WWRpZHVpOTlkdWNiaGk4SmpqampiY2E5UmdsY3pmY3dmY2J5ZDExampiQmRiYWxjYjhQZGoxampiODNpemFsY3dmY2J5ZE4xampiQmRiYWxjYjhQZDptMWpqYjgzaWJkbmRuYWVtYkpiYmpGaHZKYmJqRmhvSmJiakZocnhla2FkY2Q0Y2R0aHdpbmNiaGRpbmFsY3pmYWRmZ0RhYmFkZklkYmd2YURJZGJnb2FvYXY5RUVVZGJhbGFkZmdEYXZhRElkYmdvYW9hdjlERVVkYmFkY2xmZ2RjeDlobWJrYWJhd2ZoYmFpY2VmZ2lhZTlobWJrYWxJZHdhbElkSzp0aHJhbElkbGFsSWRDOnRob2FsSWRiYWxJZHo6dGh2a0piYmJiYXZhdkpiYmJiOURFZ3Zhb2FvYXY5REVndmFyYXJhdjlERWs5RGVldWFiY0ZlYWljZHR6OnRqampiaGxjYmhiZG5hZFRtYmluZG5hbGFleWRiY2R0ZmdpeWRiY3U5aG1iYWlhYkJkYmFiY2VmaGJrYWVjbGZoZWFkY3VmZ2RtYmtrYWJrOzdpZHF1aTk5OEpqampqYmM7V2I5UmdsOEtqampqYmFsY3hmY2JjO0tiejp0ampqYjhBYWRjZDRhZGZodmNlaG9pbmFvZ3JjZXRob2FyYXY2bWJrYWxjdWFyY2R0Z29hcmNGRkZGaTBFY2J5ZDE6ampqYkhqampqYmJndkJkeGF2Y0ZlYW96OnRqampiaHdkbmFkVG1iYWljZDRoRGFyY3VmaHFjYmhraW5kbmRuYXdjYmFlYWthRDJjZHRmZ3J5ZGxnaWFpY2pqamo5NFNFZ29jSDRhbzdjOkY6YjpERDJjYmFyeWRiZ3hheGNqampqOTRTRWdvY0g0YW83YztEO086QjhKMjdjYmFyeWR3Z21hbWNqampqOTRTRWdyY0g0YXI3YzozRjtOOE4yN2FxR2d2Y2R0ZmdyeWRiZ29jdVNtYmFtOjpoUGFpOjpoc2F4OjpoemNlaGlpbmFpaHJkbmFlYW9hRDJjZHRmZ2lJZGJhejlDbWJhaUlkbGFzOUNtYmFpSWR3YVA5Qm1pa2FyY2VmaGlhd2F2YXJmYXFHZ3ZjZHRmZ3J5ZGJnb2N1OWhtYmtrYXJha0JkYmFraG9rYWJha2NkdGZhb0JkYmFrY2VmZ2thZDlobWJra2NiaHJkbmluYXJjOThTbWVhbGN4ZmFyZnlkYmNieWQ6bTpqampiSDpiampqYmJhcmM5OGZocnhia2thbGM7V2JmOEtqampqYms5dGVpdWNiY2J5ZDpxOmpqamJnZWFiY2lmYzk4R2ZnYkJkOnE6ampqYmRuZG5hYlpiY3p0Z2Q5bm1iY3VoaWFiYWQ5UmNGRmlmY3o0bmJjdVNtZWthZWhpa2Fpazt0ZWVldWRuZG5hZWFiVmNpR1RtYmFiaGl4ZWtkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhZXlkYkJkYmFpYWV5ZGxCZGxhaWFleWR3QmR3YWlhZXlkeEJkeGFlY3pmaGVhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhZXlkYkJkYmFlY2xmaGVhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYWJrOjNlZWR1ZG5kbmFiY2lHVG1iYWJoaXhla2FlY0ZlR2M6YjpjOmV3MmhsZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWxCZHhhaWFsQmR3YWlhbEJkbGFpYWxCZGJhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhbEJkYmFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlODZiYmFpY2VmaGlhZGN1ZmdkbWJra2Fiazl0ZWl1Y2JjYnlkOnE6ampqYmdlYWJjcmZjOTRHZmdiQmQ6cTpqampiZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrVGVldWNiYWJjYnlkOnE6ampqYmdlOVJjaWZjOThHYWVmZ2JCZDpxOmpqamJkbmFiWmJjenRnZTlubWJhYmFlOVJjRkZpZmN6NG5iOEFra2s6SWVkYmNqd2sxZUZGdXVGRnV1RkZ1dUZGdUZGRnVGRkZ1RmJiYmJiYmJiZWJiYmRiYmJiYmJiZWJiYmViYmJkYmJiYmJiYmJiYmJlZWVlZWJlYmJlYmJlYmViYmJlZWJiYmJiYmJiYmJiYmVlZWVlZWJlYmJlZWViZWViYmJiZWJlYmJiYmJiYmJiYmJiYmJiYmJiYzFEa3hlYmJiZGJiYjpHTmJiIix0PW5ldyBVaW50OEFycmF5KFszMiwwLDY1LDIsMSwxMDYsMzQsMzMsMywxMjgsMTEsNCwxMyw2NCw2LDI1MywxMCw3LDE1LDExNiwxMjcsNSw4LDEyLDQwLDE2LDE5LDU0LDIwLDksMjcsMjU1LDExMywxNyw0Miw2NywyNCwyMywxNDYsMTQ4LDE4LDE0LDIyLDQ1LDcwLDY5LDU2LDExNCwxMDEsMjEsMjUsNjMsNzUsMTM2LDEwOCwyOCwxMTgsMjksNzMsMTE1XSk7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IilyZXR1cm57c3VwcG9ydGVkOiExfTt2YXIgbixvPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGEoZSkse30pLnRoZW4oZnVuY3Rpb24oXyl7bj1fLmluc3RhbmNlLG4uZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpfSk7ZnVuY3Rpb24gYShfKXtmb3IodmFyIFQ9bmV3IFVpbnQ4QXJyYXkoXy5sZW5ndGgpLHc9MDt3PF8ubGVuZ3RoOysrdyl7dmFyIFI9Xy5jaGFyQ29kZUF0KHcpO1Rbd109Uj45Nj9SLTk3OlI+NjQ/Ui0zOTpSKzR9Zm9yKHZhciBTPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KVRbUysrXT1UW3ddPDYwP3RbVFt3XV06KFRbd10tNjApKjY0K1RbKyt3XTtyZXR1cm4gVC5idWZmZXIuc2xpY2UoMCxTKX1mdW5jdGlvbiByKF8pe2lmKCFfKXRocm93IG5ldyBFcnJvcigiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkoXyl7cmV0dXJuIG5ldyBVaW50OEFycmF5KF8uYnVmZmVyLF8uYnl0ZU9mZnNldCxfLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGYoXyxULHcsUil7dmFyIFM9bi5leHBvcnRzLnNicmssQz1TKHcqNCksST1TKHcqUio0KSxOPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtOLnNldChpKFQpLEkpLF8oQyxJLHcsUio0KSxOPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt2YXIgUD1uZXcgVWludDMyQXJyYXkodyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFAuYnVmZmVyKS5zZXQoTi5zdWJhcnJheShDLEMrdyo0KSksUyhDLVMoMCkpLFB9ZnVuY3Rpb24gZChfLFQsdyl7dmFyIFI9bi5leHBvcnRzLnNicmssUz1SKFQubGVuZ3RoKjQpLEM9Uih3KjQpLEk9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpLE49aShUKTtJLnNldChOLFMpO3ZhciBQPV8oQyxTLFQubGVuZ3RoLHcpO0k9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciB2PW5ldyBVaW50MzJBcnJheSh3KTtuZXcgVWludDhBcnJheSh2LmJ1ZmZlcikuc2V0KEkuc3ViYXJyYXkoQyxDK3cqNCkpLE4uc2V0KEkuc3ViYXJyYXkoUyxTK1QubGVuZ3RoKjQpKSxSKFMtUigwKSk7Zm9yKHZhciBBPTA7QTxULmxlbmd0aDsrK0EpVFtBXT12W1RbQV1dO3JldHVyblt2LFBdfWZ1bmN0aW9uIGMoXyl7Zm9yKHZhciBUPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KXt2YXIgUj1fW3ddO1Q9VDxSP1I6VH1yZXR1cm4gVH1mdW5jdGlvbiB1KF8sVCx3LFIsUyxDLEksTixQKXt2YXIgdj1uLmV4cG9ydHMuc2JyayxBPXYoNCkseD12KHcqNCksTT12KFMqQyksRj12KHcqNCksVT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7VS5zZXQoaShSKSxNKSxVLnNldChpKFQpLEYpO3ZhciB6PV8oeCxGLHcsTSxTLEMsSSxOLFAsQSk7VT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIEQ9bmV3IFVpbnQzMkFycmF5KHopO2koRCkuc2V0KFUuc3ViYXJyYXkoeCx4K3oqNCkpO3ZhciBHPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGkoRykuc2V0KFUuc3ViYXJyYXkoQSxBKzQpKSx2KEEtdigwKSksW0QsR1swXV19ZnVuY3Rpb24gbChfLFQsdyxSLFMsQyxJLE4sUCx2LEEseCxNKXt2YXIgRj1uLmV4cG9ydHMuc2JyayxVPUYoNCksej1GKHcqNCksRD1GKFMqQyksRz1GKFMqTiksSD1GKFAubGVuZ3RoKjQpLE89Rih3KjQpLFo9dj9GKFMpOjAsb2U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO29lLnNldChpKFIpLEQpLG9lLnNldChpKEkpLEcpLG9lLnNldChpKFApLEgpLG9lLnNldChpKFQpLE8pLHYmJm9lLnNldChpKHYpLFopO3ZhciBjZT1fKHosTyx3LEQsUyxDLEcsTixILFAubGVuZ3RoLFosQSx4LE0sVSk7b2U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBkZT1uZXcgVWludDMyQXJyYXkoY2UpO2koZGUpLnNldChvZS5zdWJhcnJheSh6LHorY2UqNCkpO3ZhciBlZT1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKGVlKS5zZXQob2Uuc3ViYXJyYXkoVSxVKzQpKSxGKFUtRigwKSksW2RlLGVlWzBdXX1mdW5jdGlvbiBoKF8sVCx3LFIsUyxDLEksTixQLHYsQSx4LE0pe3ZhciBGPW4uZXhwb3J0cy5zYnJrLFU9Rig0KSx6PUYoUypDKSxEPUYoUypOKSxHPUYoUC5sZW5ndGgqNCksSD1GKHcqNCksTz12P0YoUyk6MCxaPW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtaLnNldChpKFIpLHopLFouc2V0KGkoSSksRCksWi5zZXQoaShQKSxHKSxaLnNldChpKFQpLEgpLHYmJlouc2V0KGkodiksTyk7dmFyIG9lPV8oSCx3LHosUyxDLEQsTixHLFAubGVuZ3RoLE8sQSx4LE0sVSk7Wj1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlciksaShUKS5zZXQoWi5zdWJhcnJheShILEgrb2UqNCkpLGkoUikuc2V0KFouc3ViYXJyYXkoeix6K1MqQykpLGkoSSkuc2V0KFouc3ViYXJyYXkoRCxEK1MqTikpO3ZhciBjZT1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKGNlKS5zZXQoWi5zdWJhcnJheShVLFUrNCkpLEYoVS1GKDApKSxbb2UsY2VbMF1dfWZ1bmN0aW9uIG0oXyxULHcsUil7dmFyIFM9bi5leHBvcnRzLnNicmssQz1TKHcqUiksST1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7SS5zZXQoaShUKSxDKTt2YXIgTj1fKEMsdyxSKTtyZXR1cm4gUyhDLVMoMCkpLE59ZnVuY3Rpb24gYihfLFQsdyxSLFMsQyxJLE4pe3ZhciBQPW4uZXhwb3J0cy5zYnJrLHY9UChOKjQpLEE9UCh3KlIpLHg9UCh3KkMpLE09bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO00uc2V0KGkoVCksQSksUyYmTS5zZXQoaShTKSx4KTt2YXIgRj1fKHYsQSx3LFIseCxDLEksTik7TT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFU9bmV3IFVpbnQzMkFycmF5KEYpO3JldHVybiBpKFUpLnNldChNLnN1YmFycmF5KHYsditGKjQpKSxQKHYtUCgwKSksVX1mdW5jdGlvbiBwKF8sVCx3LFIsUyxDLEksTixQKXt2YXIgdj1uLmV4cG9ydHMuc2JyayxBPXYoNCkseD12KHcqNCksTT12KFMqQyksRj12KHcqNCksVT1JP3YoUyk6MCx6PW5ldyBVaW50OEFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt6LnNldChpKFIpLE0pLHouc2V0KGkoVCksRiksSSYmei5zZXQoaShJKSxVKTt2YXIgRD1fKHgsRix3LE0sUyxDLFUsTixQLEEpO3o9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBHPW5ldyBVaW50MzJBcnJheShEKTtpKEcpLnNldCh6LnN1YmFycmF5KHgseCtEKjQpKTt2YXIgSD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKEgpLnNldCh6LnN1YmFycmF5KEEsQSs0KSksdihBLXYoMCkpLFtHLEhbMF1dfWZ1bmN0aW9uIHkoXyxULHcsUixTLEMsSSl7dmFyIE49bi5leHBvcnRzLnNicmssUD1OKHcqNCksdj1OKFMqQyksQT1OKHcqNCkseD1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7eC5zZXQoaShSKSx2KSx4LnNldChpKFQpLEEpO3ZhciBNPV8oUCxBLHcsdixTLEMsSSk7eD1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIEY9bmV3IFVpbnQzMkFycmF5KE0pO3JldHVybiBpKEYpLnNldCh4LnN1YmFycmF5KFAsUCtNKjQpKSxOKFAtTigwKSksRn12YXIgRT17TG9ja0JvcmRlcjoxLFNwYXJzZToyLEVycm9yQWJzb2x1dGU6NCxQcnVuZTo4LFJlZ3VsYXJpemU6MTYsUGVybWlzc2l2ZTozMixfSW50ZXJuYWxEZWJ1ZzoxPDwzMH07cmV0dXJue3JlYWR5Om8sc3VwcG9ydGVkOiEwLGNvbXBhY3RNZXNoOmZ1bmN0aW9uKF8pe3IoXyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgSW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxfIGluc3RhbmNlb2YgSW50MTZBcnJheSkscihfLmxlbmd0aCUzPT0wKTt2YXIgVD1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pO3JldHVybiBkKG4uZXhwb3J0cy5tZXNob3B0X29wdGltaXplVmVydGV4RmV0Y2hSZW1hcCxULGMoXykrMSl9LGdlbmVyYXRlUG9zaXRpb25SZW1hcDpmdW5jdGlvbihfLFQpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGglVD09MCkscihUPj0zKSxmKG4uZXhwb3J0cy5tZXNob3B0X2dlbmVyYXRlUG9zaXRpb25SZW1hcCxfLF8ubGVuZ3RoL1QsVCl9LHNpbXBsaWZ5OmZ1bmN0aW9uKF8sVCx3LFIsUyxDKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscihUIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKFQubGVuZ3RoJXc9PTApLHIodz49MykscihSPj0wJiZSPD1fLmxlbmd0aCkscihSJTM9PTApLHIoUz49MCk7Zm9yKHZhciBJPTAsTj0wO048KEM/Qy5sZW5ndGg6MCk7KytOKXIoQ1tOXWluIEUpLEl8PUVbQ1tOXV07dmFyIFA9Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSx2PXUobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnksUCxfLmxlbmd0aCxULFQubGVuZ3RoL3csdyo0LFIsUyxJKTtyZXR1cm4gdlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/dlswXTpuZXcgXy5jb25zdHJ1Y3Rvcih2WzBdKSx2fSxzaW1wbGlmeVdpdGhBdHRyaWJ1dGVzOmZ1bmN0aW9uKF8sVCx3LFIsUyxDLEksTixQLHYpe3IoXyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgSW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxfIGluc3RhbmNlb2YgSW50MTZBcnJheSkscihfLmxlbmd0aCUzPT0wKSxyKFQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoVC5sZW5ndGgldz09MCkscih3Pj0zKSxyKFIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoUi5sZW5ndGg9PVMqKFQubGVuZ3RoL3cpKSxyKFM+PTApLHIoST09bnVsbHx8SSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoST09bnVsbHx8SS5sZW5ndGg9PVQubGVuZ3RoL3cpLHIoTj49MCYmTjw9Xy5sZW5ndGgpLHIoTiUzPT0wKSxyKFA+PTApLHIoQXJyYXkuaXNBcnJheShDKSkscihTPj1DLmxlbmd0aCkscihDLmxlbmd0aDw9MzIpO2Zvcih2YXIgQT0wO0E8Qy5sZW5ndGg7KytBKXIoQ1tBXT49MCk7Zm9yKHZhciB4PTAsQT0wO0E8KHY/di5sZW5ndGg6MCk7KytBKXIodltBXWluIEUpLHh8PUVbdltBXV07dmFyIE09Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSxGPWwobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlXaXRoQXR0cmlidXRlcyxNLF8ubGVuZ3RoLFQsVC5sZW5ndGgvdyx3KjQsUixTKjQsbmV3IEZsb2F0MzJBcnJheShDKSxJLE4sUCx4KTtyZXR1cm4gRlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/RlswXTpuZXcgXy5jb25zdHJ1Y3RvcihGWzBdKSxGfSxzaW1wbGlmeVdpdGhVcGRhdGU6ZnVuY3Rpb24oXyxULHcsUixTLEMsSSxOLFAsdil7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIoVCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihULmxlbmd0aCV3PT0wKSxyKHc+PTMpLHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aD09UyooVC5sZW5ndGgvdykpLHIoUz49MCkscihJPT1udWxsfHxJIGluc3RhbmNlb2YgVWludDhBcnJheSkscihJPT1udWxsfHxJLmxlbmd0aD09VC5sZW5ndGgvdykscihOPj0wJiZOPD1fLmxlbmd0aCkscihOJTM9PTApLHIoUD49MCkscihBcnJheS5pc0FycmF5KEMpKSxyKFM+PUMubGVuZ3RoKSxyKEMubGVuZ3RoPD0zMik7Zm9yKHZhciBBPTA7QTxDLmxlbmd0aDsrK0EpcihDW0FdPj0wKTtmb3IodmFyIHg9MCxBPTA7QTwodj92Lmxlbmd0aDowKTsrK0Epcih2W0FdaW4gRSkseHw9RVt2W0FdXTt2YXIgTT1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLEY9aChuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVdpdGhVcGRhdGUsTSxfLmxlbmd0aCxULFQubGVuZ3RoL3csdyo0LFIsUyo0LG5ldyBGbG9hdDMyQXJyYXkoQyksSSxOLFAseCk7aWYoXyE9PU0pZm9yKHZhciBBPTA7QTxGWzBdOysrQSlfW0FdPU1bQV07cmV0dXJuIEZ9LGdldFNjYWxlOmZ1bmN0aW9uKF8sVCl7cmV0dXJuIHIoXyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihfLmxlbmd0aCVUPT0wKSxyKFQ+PTMpLG0obi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlTY2FsZSxfLF8ubGVuZ3RoL1QsVCo0KX0sc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oXyxULHcsUixTLEMpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGglVD09MCkscihUPj0zKSxyKHc+PTAmJnc8PV8ubGVuZ3RoL1QpLFI/KHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aCVTPT0wKSxyKFM+PTMpLHIoXy5sZW5ndGgvVD09Ui5sZW5ndGgvUyksYihuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBvaW50cyxfLF8ubGVuZ3RoL1QsVCo0LFIsUyo0LEMsdykpOmIobi5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlQb2ludHMsXyxfLmxlbmd0aC9ULFQqNCx2b2lkIDAsMCwwLHcpfSxzaW1wbGlmeVNsb3BweTpmdW5jdGlvbihfLFQsdyxSLFMsQyl7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIoVCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihULmxlbmd0aCV3PT0wKSxyKHc+PTMpLHIoUj09bnVsbHx8UiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoUj09bnVsbHx8Ui5sZW5ndGg9PVQubGVuZ3RoL3cpLHIoUz49MCYmUzw9Xy5sZW5ndGgpLHIoUyUzPT0wKSxyKEM+PTApO3ZhciBJPV8uQllURVNfUEVSX0VMRU1FTlQ9PTQ/XzpuZXcgVWludDMyQXJyYXkoXyksTj1wKG4uZXhwb3J0cy5tZXNob3B0X3NpbXBsaWZ5U2xvcHB5LEksXy5sZW5ndGgsVCxULmxlbmd0aC93LHcqNCxSLFMsQyk7cmV0dXJuIE5bMF09XyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P05bMF06bmV3IF8uY29uc3RydWN0b3IoTlswXSksTn0sc2ltcGxpZnlQcnVuZTpmdW5jdGlvbihfLFQsdyxSKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscihUIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKFQubGVuZ3RoJXc9PTApLHIodz49MykscihSPj0wKTt2YXIgUz1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLEM9eShuLmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBydW5lLFMsXy5sZW5ndGgsVCxULmxlbmd0aC93LHcqNCxSKTtyZXR1cm4gQz1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/QzpuZXcgXy5jb25zdHJ1Y3RvcihDKSxDfX19KSgpfSk7dmFyIG1zZSxDeD1YKCgpPT57bXNlPShmdW5jdGlvbigpe3ZhciBlPSJiOUg3OVRlYmJiZTk2eDlHZXVldTlHZXViOUdiYjlHaXV1dWV1OUdtdXV1dXV1dXV1dXU5OTk5ZXU5R291dXV1dXVldTlHcnV1dXV1dXViOUd4dXV1dXV1dXV1dXV1ZXU5R3h1dXV1dXV1dXV1dTk5ZXU5R1B1dXV1dXV1dXV1dXV1OTliOUdvdXV1dXV1YjlHbHV1dXViaUNBZGlsdm9yd0Rxb29xa2JpaWJlaWx2ZTlXZWlpdmllYmVvd2V1ZWNqOlBka3I7WmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3OWM5VjkxOVU5S2JlWTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3UzJXOTRiZDM5VFc3OU85VjlXdDlGOUk5MTlQMjlLOW5XNzlPMld0Nzl0OVc5SHQ5UDlIMmJvMzlUVzc5TzlWOVd0OUY5SjlWOVQ5VzkxdFdKMjkxN3RXVjljOVY5MTlVOUs3YnczOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0VzluVzc5TzJXdDljOVY5MTlVOUs3YnFFOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0Vzl0OVc5T1dWVzljOVY5MTlVOUs3YmtMOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOW5XNzlPMld0YnhsNzlJVjlSYm1Ed2ViY2VrZHpIcTpZOmJlQWRia0liYWJhZWM5OmZnZWZjdWZhZTlVZ2VhYmNpOVVhZGZjdWZhZDlVZ2JhZWFiMEVrO3o4SkRQdWU5OWV1eDk5ZHVlOTlldW85OWl1OEpqampqYmM6V0Q5UmdtOEtqampqYmRuZG5hbG1iY2JoUHhla2FtYzpDd2ZjYmM7S2J6OnBqampiOEFkbmRuYWxjYjlpbWJhb2FsOW5tYmFtY3Vhb2NkdGFvY0ZGRkZpMEVnc2NieWQ7MDFqamJIampqamJiZ3pCZDpDd2FtY2VCZDs4d2FtYXNjYnlkOzAxampiSGpqampiYmdIQmQ6R3dhbWNkQmQ7OHdhbWN1YWxjZHRhbGNGRkZGaTBFY2J5ZDswMWpqYkhqampqYmJnT0JkOkt3YW1jaUJkOzh3YWloc2FsaEFpbmF6YXN5ZGJjZHRmY2JCZGJhc2NsZmhzYUFjdWZnQW1ia2FpaHNhbGhBaW5hemFzeWRiY2R0ZmdDYUN5ZGJjZWZCZGJhc2NsZmhzYUFjdWZnQW1ia2FpaHNhbGhDY2JoWGluZG5hemFzeWRiY2R0Z1FmZ0F5ZGJjYjlpbWJhSGFRZmFYQmRiYUFhQXlkYmdRY2pqamo5NFZCZGJhUWFYZmhYa2FzY2xmaHNhQ2N1ZmdDbWJrYWxjaTlVaExkbmFsY2k2bWJjYmhzYWloQWluYUFjd2Z5ZGJoQ2FBY2xmeWRiaFhhSGFBeWRiY2R0ZmdRYVF5ZGJnUWNlZkJkYmFPYVFjZHRmYXNCZGJhSGFYY2R0ZmdYYVh5ZGJnWGNlZkJkYmFPYVhjZHRmYXNCZGJhSGFDY2R0ZmdDYUN5ZGJnQ2NlZkJkYmFPYUNjZHRmYXNCZGJhQWN4ZmhBYUxhc2NlZmdzOWhtYmtrYWloc2FsaEFpbmRuYXphc3lkYmNkdGdDZmdYeWRiZ1FjdTlrbWJhWGFRY0ZGRkZyR2dRQmRiYUhhQ2ZnQ2FDeWRiYVE5UkJkYmthc2NsZmhzYUFjdWZnQW1ieGRra2FtY3Vhb2NkdGdzYW9jRkZGRmkwRWdBY2J5ZDswMWpqYkhqampqYmJnekJkOkN3YW1jZUJkOzh3YW1hQWNieWQ7MDFqamJIampqamJiZ0hCZDpHd2FtY2RCZDs4d2FtY3VhbGNkdGFsY0ZGRkZpMEVjYnlkOzAxampiSGpqampiYmdPQmQ6S3dhbWNpQmQ7OHdhemNiYXN6OnBqampiaFhhbGNpOVVoTGFpaHNhbGhBaW5hWGFzeWRiY2R0ZmdDYUN5ZGJjZWZCZGJhc2NsZmhzYUFjdWZnQW1ia2RuYW9UbWJjYmhzYUhoQWFYaENhb2hRaW5hQWFzQmRiYUFjbGZoQWFDeWRiYXNmaHNhQ2NsZmhDYVFjdWZnUW1ia2tkbmFsY2k2bWJjYmhzYWloQWluYUFjd2Z5ZGJoQ2FBY2xmeWRiaFFhSGFBeWRiY2R0ZmdLYUt5ZGJnS2NlZkJkYmFPYUtjZHRmYXNCZGJhSGFRY2R0ZmdRYVF5ZGJnUWNlZkJkYmFPYVFjZHRmYXNCZGJhSGFDY2R0ZmdDYUN5ZGJnQ2NlZkJkYmFPYUNjZHRmYXNCZGJhQWN4ZmhBYUxhc2NlZmdzOWhtYmtrYW9UbWJjYmhzYW9oQWluYUhhc2ZnQ2FDeWRiYVhhc2Z5ZGI5UkJkYmFzY2xmaHNhQWN1ZmdBbWJra2FtYUxjYnlkOzAxampiSGpqampiYmdzQmQ6T3dhbWNsQmQ7OHdhc2NiYUx6OnBqampiaFlhbWN1YUxjSzJhbGNqampqZDBFY2J5ZDswMWpqYkhqampqYmJnOEFCZDpTd2FtY3ZCZDs4d0piYmJiaEVkbmFsY2k2ZzNtYmFyY2Q0aEthaWhBYThBaHNhTGhySmJiYmJoNWluYXZhQWNsZnlkYmFLMmNkdGZnQ0lkbGg4RWF2YUF5ZGJhSzJjZHRmZ1hJZGxoRWF2YUFjd2Z5ZGJhSzJjZHRmZ1FJZGxoOEZhQ0lkd2hhYVhJZHdoaGFRSWR3aGdhc2FDSWRiZzhKYVhJZGJnOEtNYVFJZGJnOExNSmJibm46dlVkYmFzY2xmYVhJZGxhQ0lkbE1hUUlkbE1KYmJubjp2VWRiYVFJZHdoOE1hQ0lkd2g4TmFYSWR3aHlhc2N4ZmE4RWFFOnRnOEVhZ2FoOnRnZ05hOEZhRTp0ZzhGYWFhaDp0Z2FOOnRnRUpiYmJiSmJialphOEphOEs6dGc4SmE4Rk5hOExhOEs6dGc4S2E4RU46dGdoYWhOYUVhRU5hYWE4S05hZ2E4Sk46dGdFYUVOTU06cmc4Szp2YThLSmJiYmI5QkVnOEVOVWRiYXNjemZhRWE4RU5VZGJhc2NDZmFoYThFTlVkYmFzY3dmYThNYXlhOE5NTUpiYm5uOnZVZGJhNWE4S01oNWFBY3hmaEFhc2NLZmhzYXJjdWZncm1ia2E1YUw6Wjp2SmJiYlpOaEVrYW1jdWFMY2R0YWxjRkZGRjk3MEVjYnlkOzAxampiSGpqampiYmdDQmQ6V3dhbWNvQmQ7OHdhcTpaaGhkbmEzbWJjYmhzYUNoQWluYUFhc0JkYmFBY2xmaEFhTGFzY2VmZ3M5aG1ia2thRWFoTmhoYW1jdWFMY2x0YWxjRkZGRmQwRWNieWQ7MDFqamJIampqamJiZzhQQmQ6MHdhbWNyQmQ7OHdjYmE4UGE4QWFDYUxjYno6ZGpqamI4QUpGRnV1aDhNSkZGdXVoOE5KRkZ1dWh5ZG5hbGNpNm1iSkZGdXVoeWE4QWhzYUxoQUpGRnV1aDhOSkZGdXVoOE1pbmFzY3dmSWRiZ0VhOE1hOE1hRTlFRWg4TWFzY2xmSWRiZ0VhOE5hOE5hRTlFRWg4TmFzSWRiZ0VheWF5YUU5RUVoeWFzY0tmaHNhQWN1ZmdBbWJra2FoOnJoRWFtYW9jZXRnc2N1YW9jdTlrRWNieWQ7MDFqamJIampqamJiZ0NCZDo0d2RuZG5hb2FsOW5tYmFpaHNhbGhBaW5hQ2FzeWRiY2V0ZmNGRmk4N2ViYXNjbGZoc2FBY3VmZ0FtYnhka2thQ2NGZWFzejpwampqYjhBa2FFSmJiYlpOaDhKY3VoSWRuYWxjaTZtYmNiaEFKRkZ1dWhFYThBaHNjdWhJaW5hc2N3ZklkYmE4TTp0Z2hhaE5hc0lkYmF5OnRnaGFoTmFzY2xmSWRiYThOOnRnaGFoTk1NOnJnaGFFYUljdVNhaGFFOURWZ1hFaEVhQWFJYVhFaElhc2NLZmhzYUxhQWNlZmdBOWhtYmtrYW1jemZjYmNqd3o6cGpqamI4QWFtY3dmOWNiODNpYmFtOWNiODNpYmE4SmF4Tmg4UkpiYmpaYWs6dGg4TGNiaDhTSmJiYmJoUkpiYmJiaDhVSmJiYmJoOFZKYmJiYmg4V0piYmJiaDhYSmJiYmJoOFljYmg4WmNiaFBpbkpiYmJiaEVkbmE4U1RtYkpiYmpaYThTOlo6dmhFa0piYmJiaGhkbmE4WWE4WU5hOFdhOFdOYThYYThYTk1NZzhLSmJiYmI5Qm1iSmJialphOEs6cjp2aGhrYThWYUVOaDhLYThVYUVOaDhFYVJhRU5oNWFJaExkbmRuZG5kbmRuYThTYVBWVG1iYW15ZHdnODBUbWVhOFlhaE5oOEZhOFhhaE5oYWE4V2FoTmhnYWVhbXlkYmNkdGZoODFjYmgzSkZGdXVoRWN2aFFjdWhMaW5kbmF6YTgxYTNjZHRmeWRiY2R0Z3NmeWRiZ3ZUbWJhT2FIYXNmeWRiY2R0ZmhBaW5kbmRuYUNhaWFBeWRiZ0tjeDJmZ3NjbGZ5ZGJncmNldGY4VmViY3M0YUNhc3lkYmdYY2V0ZjhWZWJjczRmYUNhc2N3ZnlkYmdsY2V0ZjhWZWJjczRmZ29tYmNiaHN4ZWtjZWhzYXphWGNkdGZ5ZGJnWGNlU21iY2Voc2F6YXJjZHRmeWRiZ3JjZVNtYmNlaHNhemFsY2R0ZnlkYmdsY2VTbWJkbmFyY2RTYVhjZFNmYWxjZFNmY2Q2bWJhb2NlZmhzeGVrYW9jZGZoc2tkbmFzYVE5a21iYThBYUtjSzJmZ1hJZHdhOEs6dGdoYWhOYVhJZGJhNTp0Z2hhaE5hWElkbGE4RTp0Z2hhaE5NTTpyYThKOnZhOExOSmJialpNSjlWTzpkODZKYmJqWmFYSWRDYThGTmFYSWR4YWdOYWFhWElkek5NTWFrTjp0Z2hhaEo5Vk86ZDg2OURFTmdoYUVhc2FRNmFoYUU5RFZnWEVoRWFLYUxhWEVoTGFzYVFhWEVoUWthQWNsZmhBYXZjdWZndm1ia2thM2NlZmczYTgwOWhtYmtrYUxjdTlobWVrYW1hOEtVZDpPRGFtYThFVWQ6S0RhbWE1VWQ6R0RhbWN1QmQ6cURhbWNGRkY7N3JCZGpEYThQY2JhOEFhWWFtYzpHRGZhbWM6cURmYW1jakRmejplampqYmFteWQ6cURoTGRuZG5heEpiYmJiOUVUbWJhOFNhRDZtYmFMY3VTbWVjZWgzYW1JZGpEYThSOUVtaXhka2FMY3U5aG1la2RuYThTVG1iYWJhUGNsdGZnemFtOFBpYjgzZGJhemN3ZmFtY3dmOFBpYjgzZGJhUGNlZmhQa2MzaHppbmF6Yzk4U212YW1jOkN3ZmF6ZnlkYmNieWQ7NDFqamJIOmJqampiYmF6Yzk4Zmh6eGJra2NiaDNhOFNhcTlwbWJhbXlkd2FDYWlhTGN4MmZnc3lkYmNldGY4VmViY3M0YUNhc2N3ZnlkYmNldGY4VmViY3M0ZmFDYXNjbGZ5ZGJjZXRmOFZlYmNzNGZmYXc5bm1la2NiaHNjYmhBZG5hOFpUbWJjYmhBYW1jemZoWGluYW1jemZhQWNkdGZhWHlkYmdRQmRiYVhjbGZoWGFBYVlhUWZSYmJUZmhBYThaY3VmZzhabWJra2FteWR3aGxhbXlkYmhYYW05Y3U4M2k6R0RhbTljdTgzaTpPRGFtOWN1ODNpOnFEYW05Y3U4M2k6eURhQWM7OGVhQWNsZmM6YmQ2RWg4WmluYW1jakRmYXNmY0ZGRjs3ckJkYmFzY2xmZ3NjejlobWJrYThaY2R0aDgwZG5hbFRtYmFlYVhjZHRmaG9jYmhyaW5kbmF6YW9hcmNkdGZ5ZGJjZHRnc2Z5ZGJndlRtYmFPYUhhc2Z5ZGJjZHRmaEFjdWhRY3Voc2luYXphaWFBeWRiZ0tjeDJmZ1hjbGZ5ZGJjZHRmeWRiYXphWHlkYmNkdGZ5ZGJmYXphWGN3ZnlkYmNkdGZ5ZGJmZ1hhc2FYYXM2Z1hFaHNhS2FRYVhFaFFhQWNsZmhBYXZjdWZndm1ia2FRY3VTbWJhOEFhUWNLMmZnQUlkd2E4TTp0Z0VhRU5hQUlkYmF5OnRnRWFFTmFBSWRsYThOOnRnRWFFTk1NOnJoRWNiaEFpbmRuZG5hc2FtYzpxRGZhQWZndnlkYmdYNm1iYXNhWDlobWVhRWFtY2pEZmFBZklkYjlGVG1la2F2YXNCZGJhbWM6R0RmYUFmYVFCZGJhbWNqRGZhQWZhRVVkYnhka2FBY2xmZ0FjejlobWJra2FyY2VmZ3JhbDlobWJra2FtY3pmYTgwZmhRY2Joc2NiaEFpbmRuYW1jOkdEZmFzZnlkYmdYY3VTbWJhUWFBY2R0ZmFYQmRiYUFjZWZoQWthc2NsZmdzY3o5aG1ia2FBYThaZmc4WlRtYkpGRnV1aGhjdWhLYW1jemZoc2E4Wmh2Y3VoUWluYThBYXN5ZGJnWGNLMmZnQUlkd2E4TTp0Z0VhRU5hQUlkYmF5OnRnRWFFTmFBSWRsYThOOnRnRWFFTk1NOnJoRWRuZG5hemFpYVhjeDJmZ0FjbGZ5ZGJjZHRmeWRiYXphQXlkYmNkdGZ5ZGJmYXphQWN3ZnlkYmNkdGZ5ZGJmZ0FhUTZtYmFBYVE5aG1lYUVhaDlEVG1la2FFaGhhQWhRYVhoS2thc2NsZmhzYXZjdWZndm1ia2FLY3VTbWJhS2hMa2RuYW1haWFMY3gyZmdyeWRiYXJjbGZ5ZGJhcmN3ZnlkYmFDYWJhZWFkYVBhd2FxYTN6OmZqampiVG1iYVBjZWZoUEpiYmJiaFJKYmJiYmg4VUpiYmJiaDhWSmJiYmJoOFdKYmJiYmg4WEpiYmJiaDhZa2NiaFhpbmFPYUhhcmFYY2R0ZnlkYmNkdGdBZnlkYmNkdGZnS2hzYXphQWZndnlkYmdRaEFkbmFRVG1iZG5pbmFzeWRiYUxTbWVhc2NsZmhzYUFjdWZnQVRtZHhia2thc2FLYVFjZHRmYzk4ZnlkYkJkYmF2YXZ5ZGJjdWZCZGJrYVhjZWZnWGNpOWhtYmthOEFhTGNLMmZnc0lkYmhFYXNJZGxoaGFzSWR3aDhLYXNJZHhoOEVhc0lkemg1YXNJZENoOEZhWWFMZmNlODZiYmE4WWE4Rk1oOFlhOFhhNU1oOFhhOFdhOEVNaDhXYThWYThLTWg4VmE4VWFoTWg4VWFSYUVNaFJhbXlkeGg4U3hia2thbWM6V0RmOEtqampqYmFQazpqb2l2dXY5OWx1OEpqampqYmNhOVJnbzhLampqamJkbmRuYWxjdzBtYmFpeWRiaHJhZWFiY2l0Zmd3YWxjZHRjaVZCZGxhd2FyQmRiZG5hbGNkNm1iYWljbGZocmFsY3VmaERhd2N4Zmh3aW5hcnlkYmhxYXdjdUJkYmF3Yzk4ZmFxQmRiYXdjd2Zod2FyY2xmaHJhRGN1ZmdEbWJra2FsYWJmaHd4ZWtjYmhxYW9jemZjd2ZjYkJkYmFvOWNiODNpemFvY3dmY2JCZGJhbzljYjgzaWJKYmJqWmhrSmJialpoeGluYWRhaWFxY2R0ZnlkYmNLMmZoRGNiaHdpbmFvY3pmYXdmZ3JhRGF3ZklkYmdtYXJJZGJnUDp0Z3NheE5hUE1nUFVkYmFvYXdmZ3Jhc2FtYVA6dE5hcklkYk1VZGJhd2NsZmd3Y3g5aG1ia0piYmpaYWtKYmJqWk1nazp2aHhhcWNlZmdxYWw5aG1ia2NiaHJhZGNiY2VjZGFvSWRsZ21hb0lkd2dQOUdFZ3dhb0lkYmdzYVA5R0Vhd2FzYW05R0VnemNkdGd3ZmhIYW9jemZhd2ZJZGJobWFpaHdhbGhEaW5haWFyY2R0ZmdxeWRiaE9hcWF3eWRiZ0FCZGJhd2FPQmRiYXdjbGZod2FyYUhhQWNLMmZJZGJhbTlEZmhyYURjdWZnRG1ia2RuZG5hcmN2Nm1iYXZjOFg5a21iYXJhbGM5OGY2bWVrYWl5ZGJocmFlYWJjaXRmZ3dhbGNkdGNpVkJkbGF3YXJCZGJhaWNsZmhyYWxjdWZoRGF3Y3hmaHdpbmFyeWRiaHFhd2N1QmRiYXdjOThmYXFCZGJhd2N3Zmh3YXJjbGZocmFEY3VmZ0RtYmthbGFiZmh3eGVrYWVhYmNpdGZnd2FtVWRiYXdhd3lkbGM5OEdhelZCZGxhYmNlZmFlYWRhaWFyYXZjZWZncXo6ZGpqamJoRGF3YXd5ZGxjaUdhRGFiY3U3ZmNkdFZCZGxhRGFlYWRhaWFyY2R0ZmFsYXI5UmFxejpkampqYmh3a2FvY2FmOEtqampqYmF3azt5ZGR2dWU5OWRuaW5hYmFlY2l0ZmdyeWRsZ3djbDZtZWRuYXdjaUdnRGNpOWhtYmFiYWVjaXRmaGJjYmhlY2VocWluZG5haWFieWRiZ0RmUmJibWJjYmhxYWRhRGNLMmZna0lkd2FsSWR3OnRneGF4TmFrSWRiYWxJZGI6dGd4YXhOYWtJZGxhbElkbDp0Z3hheE5NTTpyZ3hhb0lkYjlEVG1iYW9heFVkYmF2YURCZGJhcnlkbGh3a2FiY3dmaGJhZWNlZmdlYXdjZDQ2bWJrYXFjZUdUbWRhcmF3Y2lHQmRsc2tkbmFiY2Jhd2NkNGd3YWxhRGNkdGZJZGJhcklkYjp0Z3hKYmJiYjlGRWdrYXc3YWVjZWZnd2ZnZWNpdGZ5ZGxhYmFrYXdmZ3djaXRmeWRsVmNpMG1iYXJhREJkbGthYmF3YWRhaWFsYXZhb3o6ZWpqamJheDpsYW9JZGI5Rm1ia2tramxldnVkbmFieWR3Z3hhbGFkY2V0ZmdtOFZlYmNzNGFsYWVjZXRmZ1A4VmViZ3NjczRmYWxhaWNldGZnejhWZWJjczRmZmFEMGFieWR4YXE5cFZha1ZnRGNlOWhtYmF2YXdjbHRmZ3hhYjhQZGI4M2RiYXhjd2ZhYmN3Zmd4OFBkYjgzZGJhYnlkYmhxZG5heHlkYmdrVG1iYW9hcWNkdGZoeGFraHNpbmFsYXh5ZGJjZXRmY0ZGaTg3ZWJheGNsZmh4YXNjdWZnc21ia2thYmFxYWtmQmRiYWJ5ZHhoeGFiOWNiODNkd2FiYWJ5ZGxheGNpMmZCZGxhUDhWZWJoc2NiaHhrZG5hc2N6dGN6OTFjdTlrbWJhYmF4Y2VmQmR3YVBheDg3ZWJhb2FieWRiY2R0ZmF4Y2R0ZmFlQmRia2RuYW04VWViY3U5a21iYWJhYnlkd2d4Y2VmQmR3YW1heDg3ZWJhb2FieWRiY2R0ZmF4Y2R0ZmFkQmRia2RuYXo4VWViY3U5a21iYWJhYnlkd2d4Y2VmQmR3YXpheDg3ZWJhb2FieWRiY2R0ZmF4Y2R0ZmFpQmRia2FyYWJ5ZGxmYWJ5ZHhjaTJmYVBSYmI4NmJiYXJhYnlkbGZhYnlkeGNpMmZjZWZhbVJiYjg2YmJhcmFieWRsZmFieWR4Y2kyZmNkZmF6UmJiODZiYmFiYWJ5ZHhjZWZCZHhhRGs6elBySHVlOTlldWU5OWV1ZTk5ZXU4SmpqampiYztXO0diOVJneDhLampqamJkbmRuYWxtYmNiaG14ZWtjYmhQYXhjOm07R2JmY2JjO0tiejpwampqYjhBYXhjdWFsY2k5VWdzY2x0YXNjampqamlHRWNieWQ7MDFqamJIampqamJiZ3pCZDptOUdheGNlQmQ7UzlHYXhjdWFzY0syZ0hjS2ZhbGNwRkZGZTBFY2J5ZDswMWpqYkhqampqYmJnT0JkOnE5R2F4Y2RCZDtTOUdkbmFsY2k2Z0FtYmFyY2Q0aENhc2NkdGhYYU9oUWF6aExpbmF2YWlhUGN4MmZncnlkYmFDMmNkdGZoS2F2YXJjd2Z5ZGJhQzJjZHRmaFlhdmFyY2xmeWRiYUMyY2R0Zmg4QWNiaHJhTGhFaW5hUWFyZmdtYUthcmZnM0lkYmc1YThBYXJmZzhFSWRiZzhGYTVhOEY5REVnNVVkYmFtYVlhcmZnYUlkYmc4RmE1YThGYTU5REVnOEZVZGJhbWN4ZmdtYTNJZGJnNWE4RUlkYmdoYTVhaDlFRWc1VWRiYW1hYUlkYmdoYTVhaGE1OUVFZzVVZGJhRWE4RmE1TUpiYmJaTlVkYmFFYVhmaEVhcmNsZmdyY3g5aG1ia2FRY0tmaFFhTGNsZmhMYVBjZWZnUGFzOWhtYmtrYU9hSGZncjljYjgzZGJhcmN6ZjljYjgzZGJhcmN3ZjljYjgzZGJheGN1YXNjeDJncmFsYzpiampqbDBFY2J5ZDswMWpqYkhqampqYmJnQ0JkTjlHYXhjaUJkO1M5R2FzY2R0aGdhemFyZmh2YUNoSGF6aExjYmhQaW5heGNiY2o7R2J6OnBqampiaEVhUGFzMmNkdGhhZG5hQW1iYUxocmFzaDNpbmFFYXJ5ZGJnbWM4RjkxY2pqamo5NFZhbTdnbWNRNGN4MmZnOEVhOEV5ZHdjZWZCZHdhRWFtY2Q0Y0ZyR2N4MmZnOEVhOEV5ZGJjZWZCZGJhRWFtY3g0Y0ZyR2N4MmZnbWFteWRsY2VmQmRsYXJjbGZocmEzY3VmZzNtYmtrYXphYWZoOEFhQ2FhZmhYY2JobWNiaDNjYmg4RWNiaGFpbmFFYW1mZ3J5ZGJoUWFyYTNCZGJhcmN3ZmdLeWRiaFlhS2FhQmRiYXJjbGZncnlkYmhLYXJhOEVCZGJhUWEzZmgzYVlhYWZoYWFLYThFZmg4RWFtY3hmZ21jajtHYjlobWJrZG5hQW1iY2JocmF2aG1pbmFtYXJCZGJhbWNsZmhtYXNhcmNlZmdyOWhtYmthQW1iYXZocmFzaG1pbmFFYThBYXJ5ZGJnM2NkdGZ5ZGJnOEVjOEY5MWE4RTdjZDRjRnJHY3gyZmc4RWE4RXlkYmc4RWNlZkJkYmFYYThFY2R0ZmEzQmRiYXJjbGZocmFtY3VmZ21tYmthSGhyYXNobWluYUVhOEFhcnlkYmczY2R0ZnlkYmc4RWM4RjkxYThFN2N4NGNGckdjeDJmZzhFYThFeWRsZzhFY2VmQmRsYXZhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2F2aHJhc2htaW5hRWE4QWFyeWRiZzNjZHRmeWRiZzhFYzhGOTFjampqajk0VmE4RTdjUTRjeDJmZzhFYThFeWR3ZzhFY2VmQmR3YVhhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2thSGFnZmhIYUxhZ2ZoTGFQY2VmZ1BjaTlobWJrYUVhb2NldGdyY3Vhb2N1OWtFY2J5ZDswMWpqYkhqampqYmJnS0JkOnk5R2FFY2xCZDtTOUdkbmRuYW9hbDlubWJhaWhyYWxobWluYUthcnlkYmNldGZjRkZpODdlYmFyY2xmaHJhbWN1ZmdtbWJ4ZGtrYUtjRmVhcno6cGpqamI4QWtjYmhtYUVhc2NieWQ7MDFqamJIampqamJiZzhBQmQ6QzlHYU9hQ2FDYXNjZHRmYUNhc2NpdGZhOEFhc2NiYXphS2FpYXdhRGFxYWt6OmhqampiY2JoOEVkbmFsY2k2Z2FtYmNiaDhFYThBaHJhc2gzaW5hOEVhclJiYmZoOEVhcmNlZmhyYTNjdWZnM21ia2thRWN3ZjljYjgzaWJhRTljYjgzaWJhbGF3Yzk6ZmdyZmN1ZmFyOVVocmFzYURmY3VmYUQ5VWgzZG5hYW1iYXJhM2FyYTMwRWhZY2JocmE4RWhhY2JobWluY2JoM2RuYXJUbWJhOEFhcmZSYmJjZVNoM2thbWFFYWlhQ3lkYmN4MmZnUXlkYmFRY2xmeWRiYVFjd2Z5ZGJhS2FiYWVhZGFtYXdhcWEzYTNjZTdhOEVhWTluVmFhYW1mYVk2Vkd6OmZqampiZmhtYUNjbGZoQ2FhYThBYXJmUmJiOVJoYWFzYXJjZWZncjlobWJrYUV5ZHhUbWJhYmFtY2x0ZmdyYUU4UGliODNkYmFyY3dmYUVjd2Y4UGliODNkYmFtY2VmaG1rY3pocmluYXJjOThTbWVhRWM6bTtHYmZhcmZ5ZGJjYnlkOzQxampiSDpiampqYmJhcmM5OGZocnhia2theGM7VztHYmY4S2pqampiYW1rOllLRFF1ZTk5bHVlOTlpdWw5OmV1cjk5bHU4SmpqampiYztxYjlSZ1A4S2pqampiYXhoc2F4aHpkbmRuYXZheDBnSG1iZG5hdlRtYmNiaE9hZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmdYOFZlYmhRYXdhQ2NsZnlkYmNldGZnTDhWZWJoS2F3YUN5ZGJjZXRmZ0M4VmViaFlhWGNlODdlYmFMY2U4N2ViYUNjZTg3ZWJhT2FLY3M0YVljczRmYVFjczRmZmhPYXpjbGZoemFBY3VmZ0FtYmthZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmNGRmk4N2ViYXdhQ2NsZnlkYmNldGZjRkZpODdlYmF3YUN5ZGJjZXRmY0ZGaTg3ZWJhemNsZmh6YUFjdWZnQW1ia2NlaHphcWhzYU9hcTBtZWthbGNlODZiYmFsY2VmY2JhdmN1Zno6cGpqamI4QXhla2FQYWlCZHhhUGFkQmR3YVBhZUJkbGF2YWthcWNpOVVnOEFha2E4QWFrNkVhSEVnSzlSaEVheGFLOVJoM2FLY3VmaDVhS2NldGg4RWFLY2R0Z0NjOThmaDhGYXZjaXRnT2FDOVJhcmZjOThmaGFhc2N1ZmhoYXZjdWZoZ2FyYU9maDhKSmJialphczpZOnZoOEthcmF2Y2R0Z1lmYzk0Zmg4TGNiYXpjZWFrYXhTRWc4TWNkdGc4TjlSaHlKRkZ1dWg4UGN1aEljYmg4UmNiaDhTaW5hUGNsZmE4U2NkdGZ5ZGJoUWFQYzhXZmNLZmNiOFBkOnkxampiZ1I4M2liYVBjOFdmY3pmY2I4UGQ6cTFqamJnOFU4M2liYVBjOFdmY3dmY2I4UGQxMWpqYmc4VjgzaWJhUGNiOFBkajFqamJnOFc4M2k4V2FQY3pmY0tmYVI4M2liYVBjemZjemZhOFU4M2liYVBjemZjd2ZhOFY4M2liYVBhOFc4M2l6YVFhWWZoOFhjYmhYaW5hYmFRYVhjZHRnTGZ5ZGJjSzJmaEFjYmh6aW5hUGM4V2ZhemZnQ2FBYXpmZ09JZGJnOFlhQ0lkYmc4WmE4WWE4WjlERVVkYmFDY3pmZ0NhT2N4ZklkYmc4WWFDSWRiZzhaYThZYThaOUVFVWRiYXpjbGZnemN4OWhtYmthUElkbmFQSWQ4Vzp0ZzgwYVBJZDlpYVBJZFU6dGc4MU5oQmFiYThYYVhjdTdjZHRmeWRiY0syZmhBY2JoemFQSWQ4MGg4M2FQSWQ5ZWhVaW5hUGN6ZmF6ZmdDYUFhemZnT0lkYmc4WWFDSWRiZzhaYThZYThaOURFVWRiYUNjemZnQ2FPY3hmSWRiZzhZYUNJZGJnOFphOFlhOFo5RUVVZGJhemNsZmd6Y3g5aG1ia2FyYUxmZ3phVWE4Mzp0ZzhZYTgxTmE4MGE4WU5hQk1NVWRiYXphWWZhUElkOEthUElkQzp0ZzhZYVBJZHlhUElkSzp0ZzhaTmFQSWRhYVBJZHo6dGc4MGE4WU5hODBhOFpOTU1VZGJhWGNlZmdYYXY5aG1ia2NiaDg1ZG5hSG1iY2JoQWFRaHphOEpoQ2F2aFhpbmF3YURhenlkYmN4MmZnT2N3ZnlkYmNldGZnTDhWZWJoOFhhd2FPY2xmeWRiY2V0Zmc4NjhWZWJoODVhd2FPeWRiY2V0ZmdPOFZlYmg4N2FMY2U4N2ViYTg2Y2U4N2ViYU9jZTg3ZWJhQ2FBYTg1Y3M0YTg3Y3M0ZmE4WGNzNGZmZ0FCZGJhemNsZmh6YUNjbGZoQ2FYY3VmZ1htYmthdmhDaW5hd2FEYVF5ZGJjeDJmZ3pjd2Z5ZGJjZXRmY0ZGaTg3ZWJhd2F6Y2xmeWRiY2V0ZmNGRmk4N2ViYXdhenlkYmNldGZjRkZpODdlYmFRY2xmaFFhQ2N1ZmdDbWJrYThKaDg1a2RuZG5kbmRuZG5kbmRuZG5kbmRuYThFYXYwbWJhOEVheDBtZWF2YUs2bWRhNWFFOXBtRGNlaExhRWhYYTg1VG1seHJrYTVhZzlwbXdhOEVheDlubWR4bGtkbmF2YXZhSzlVZ3phSzI5UmF6YTMyMG1iYTVhRTlwbXdhODVUaDg4Y2VoODZhRWhMeHZrYTVhZzZtaXhya2E1YWc5cG1va2NiaExhZ2hYYTg1bWlrSkZGdXVoOFljYmhRYTVoemluZG5hemNlZmdDYUs2bWJhTGF2YUM5UmdPYUs2R21iYXJhemNkdGZJZGJnOFphQzpZTmE4TGF2YXo5UmNkdGZJZGJnODBhTzpZTk1nODFhOFk5RW1iZG5kbmE4S2FPYWhmOllOZ0I6bEpiYmI5cDlEVG1iYUI6T2hBeGVrY2pqamo5NGhBa2E4MGFzYUEyYU85UjpZTmg4MGRuZG5hOEthemFzZjpZTmdCOmxKYmJiOXA5RFRtYmFCOk9oT3hla2NqampqOTRoT2thbWFzYU8yYUM5UjpZYThaTmE4ME1OYTgxTWc4WmE4WWE4WmE4WTlEZ09FaDhZYUNhUWFPRWhRa2F6YThNZmd6YVg2bWJ4bGtrYTg1VGg4OGNiaDg2YWdoTGtKRkZ1dWg4WWNiaFFhRWhDYWFoQWE4RmhPYUtoemluZG5hemF6YUs5VWdYYUsyOVJhWGEzMjBtYmRuYTg2VG1iYUNhQ2FLOVVnWGFLMjlSYVhhMzIwbWVrYXJhT2ZJZGJnOFphejpZTmFBSWRiZzgwYUM6WU5NZzgxYThZOUVtYmF6aFhhQ2g4WGRuYTg4bWJhODVhT2Z5ZGJnWGg4WGtkbmRuYThLYThYYWhmOllOZ0I6bEpiYmI5cDlEVG1iYUI6T2g4N3hla2NqampqOTRoODdrYTgwYXNhODcyYThYOVI6WU5oODBkbmRuYThLYVhhaGY6WU5nQjpsSmJiYjlwOURUbWJhQjpPaDhYeGVrY2pqamo5NGg4WGthbWFzYThYMmFYOVI6WWE4Wk5hODBNTmE4MU1nOFphOFlhOFphOFk5RGdYRWg4WWF6YVFhWEVoUWthQ2E4TTlSaENhQWF5ZmhBYU9hOE5maE9hemE4TWZnemN1ZmFMNm1ieGRra0pGRnV1aDhZY2JoUWFFaENhYWhBYThGaE9hS2h6aW5kbmF6YUs2bWJhTGFDYUs2R21iYXJhT2ZJZGJnOFphejpZTmFBSWRiZzgwYUM6WU5NZzgxYThZOUVtYmRuZG5hOEthODVhT2Z5ZGJnOFhhaGY6WU5nQjpsSmJiYjlwOURUbWJhQjpPaDg2eGVrY2pqamo5NGg4NmthbWFzYTg2MmE4WDlSOllnQmE4Wk5hODBhQk5NTmE4MU1nOFphOFlhOFphOFk5RGc4WEVoOFlhemFRYThYRWhRa2FDYThNOVJoQ2FBYXlmaEFhT2E4TmZoT2F6YThNZmd6Y3VmYVg2bWJra2FRVG1iYThZYThQOURUbWJhOFloOFBhUWg4UmE4U2hJa2E4U2NlZmc4U2NpOWhtYmtkbmRuYW9jOFg5a21iYUljYjlvbWVrYThBY3VmaDg2Y2JoWWluZG5kbmRuYXZhWTlSYXhhWWF4ZmF2MEVnOFhUbWJjYmhBYWVhWWNkdGZnemhDYThYaFhpbmF3YURhQ3lkYmN4MmZnT2N3ZnlkYmNldGZnUThWZWJoYmF3YU9jbGZ5ZGJjZXRmZ0w4VmViaHJhd2FPeWRiY2V0ZmdPOFZlYmhLYVFjZTg3ZWJhTGNlODdlYmFPY2U4N2ViYUFhcmNzNGFLY3M0ZmFiY3M0ZmZoQWFDY2xmaENhWGN1ZmdYbWJrYThYaE9pbmF3YURhenlkYmN4MmZnQ2N3ZnlkYmNldGZjRkZpODdlYmF3YUNjbGZ5ZGJjZXRmY0ZGaTg3ZWJhd2FDeWRiY2V0ZmNGRmk4N2ViYXpjbGZoemFPY3VmZ09tYmthQWFxMG1la2FsYVlmZ3pjZTg2YmJhemNlZmNiYThYY3VmejpwampqYjhBeGVrYWxhWWZnemNlODZiYmF6Y2VmY2JhODZ6OnBqampiOEFhOEFoOFhrYThYYVlmZ1lhdjlwbWR4YmtrYXJhdmNkdGc4WGZoTGRuYThSVG1iYVBjbGZhSWNkdGZ5ZGJoemE4UmhDaW5hTGF6eWRiZmNiODZiYmF6Y2xmaHphQ2N1ZmdDbWJra2RuYXZhOFI5bm1iYVBjbGZhSWNkdGZ5ZGJhOFJjZHRmaHphdmE4UjlSaENpbmFMYXp5ZGJmY2U4NmJiYXpjbGZoemFDY3VmZ0NtYmtrY2JoWWluZG5hWWFJU21iY2JoemFyYVBjbGZhWWNkdGZ5ZGJnS2E4WHo6b2pqamJoQ2F2aFhhOFJoT2luYUthT2F6YUxhQ3lkYmdRZlJiYmdBRWNkdGZhUUJkYmFDY2xmaENhT2FBZmhPYXphQTlSY2VmaHphWGN1ZmdYbWJra2FZY2VmZ1ljaTlobWJrYWJhZWFkYWlhbGE4UmFvY2VmZ0NhcmF3YURhcWFrYXhhbXo6aGpqamJhYmFlYThSY2R0Z3pmYWRhemZhaWF6ZmFsYThSZmF2YThSOVJhQ2FyYXdhRGFxYWtheGFtejpoampqYmthUGM7cWJmOEtqampqYms7TmtvdnVkOTlldXY5OWV1bDk5OEpqampqYmM6VzthZTlSZ284S2pqampiZG5kbmFkVG1iYXZjZDRocmNiaHdjYmhEaW5kbmFpYWVjbGZ5ZGJhcjJjZHRmZ3ZJZGJhaWFleWRiYXIyY2R0ZmdxSWRiZ2s6dGd4YWlhZWN3ZnlkYmFyMmNkdGZnbUlkbGFxSWRsZ1A6dGdzTmFtSWRiYWs6dGd6YXZJZGxhUDp0Z1BOOnRna2FrTmFQYW1JZHdhcUlkd2dIOnRnT05hc2F2SWR3YUg6dGdITjp0Z1BhUE5hSGF6TmFPYXhOOnRneGF4Tk1NOnJnc0piYmJiOUJtYmFvYzpXOnFlZmF3Y3gyZmdBYWthczp2VWR3YUFheGFzOnZVZGxhQWFQYXM6dlVkYmFvYzhXZmF3YzhLMmZnQWFxOFBkYjgzZGJhQWF2OFBkYjgzZHhhQWFtOFBkYjgzZEthQWN3ZmFxY3dmeWRiQmRiYUFjQ2ZhdmN3ZnlkYkJkYmFBY2FmYW1jd2Z5ZGJCZGJhd2NlZmh3a2FlY3hmaGVhRGNpZmdEYWQ2bWJrYWI5Y2I4M2RiYWJjeWY5Y2I4M2RiYWJjYWY5Y2I4M2RiYWJjS2Y5Y2I4M2RiYWJjemY5Y2I4M2RiYWJjd2Y5Y2I4M2RiYXdUbWVhb2NiQmQ4U2FvOWNiODNpS2FvOWNiODNpemFvY3pmYW9jOFdmYXdjaTJjeGFvYzhTZmNiY3J6OmpqampiYW9JZEtoQ2FvSWRDaFhhb0lkemhRYW85Y2I4M2l3YW85Y2I4M2liYW9hb2M6VzpxZWZhd2N4YW9jOFNmY2JjaXo6ampqamJKYmJqWmhrYW9JZHdnUEpiYmJiSmJialphUGFQTmFvSWRiZ1BhUE5hb0lkbGdzYXNOTU06cmd4OnZheEpiYmJiOUJFZ3pOaHhhc2F6TmhzYVBhek5oemFvYzpXOnFlZmhlYXdodmluYWVjd2ZJZGJheE5hZUlkYmF6TmFzYWVjbGZJZGJOTU1nUGFrYVBhazlERWhrYWVjeGZoZWF2Y3VmZ3ZtYmthYmFDVWR3YWJhWFVkbGFiYVFVZGJhYmFvSWQzVWR4ZG5kbmFrSjtuO207bTg5OUZtYkpiYmJiaFBhb2M6VzpxZWZoZWFvYzhXZmh2aW5hQ2F2Y3dmSWRiOnRhZWN3ZklkYmdITmFRYXZJZGI6dGFlSWRiZ09OYVhhdmNsZklkYjp0YWVjbGZJZGJnTE5NTWF4YUhOYXphT05hc2FMTk1NOnZnSGFQYUhhUDlFRWhQYXZjOEtmaHZhZWN4ZmhlYXdjdWZnd21ia2FiYXhVZDhLYWJhc1VkYWFiYXpVZDNhYmFDYXhhUE46dFVkS2FiYVhhc2FQTjp0VWRDYWJhUWF6YVBOOnRVZHphYkpiYmpaYWtha046dDpyZ2tVZHlkbmRuYXhKYmJqOjtheEpiYmo6OzlHRWdQSmJialphUEpiYmpaOUZFSmJiOzo5Y05KYmJiWkpiYmI6O2F4SmJiYmI5R0VNZ1A6bEpiYmI5cDlEVG1iYVA6T2hleGVrY2pqamo5NGhla2FiYWU4NmI4VWRuZG5hc0piYmo6O2FzSmJiajo7OUdFZ1BKYmJqWmFQSmJialo5RkVKYmI7OjljTkpiYmJaSmJiYjo7YXNKYmJiYjlHRU1nUDpsSmJiYjlwOURUbWJhUDpPaHZ4ZWtjampqajk0aHZrYWJhdjg2YlJkbmRuYXpKYmJqOjthekpiYmo6OzlHRWdQSmJialphUEpiYmpaOUZFSmJiOzo5Y05KYmJiWkpiYmI6O2F6SmJiYmI5R0VNZ1A6bEpiYmI5cDlEVG1iYVA6T2hxeGVrY2pqamo5NGhxa2FiYXE4NmI4U2RuZG5hZWNLdGNLOTE6WUpiYjs6OWM6dmF4OnQ6bGF2Y0t0Y0s5MTpZSmJiOzo5Yzp2YXM6dDpsYXFjS3RjSzkxOllKYmI7OjljOnZhejp0Omxha01NTUpiYjs6OWNOSmJialpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hleGVrY2pqamo5NGhla2FlY0ZiYWVjRmI5aUVoZXhla2FiY2pqajs4aUJkeWNGYmhla2FiYWU4NmI4Vnhla2FiOWNiODNkYmFiY3lmOWNiODNkYmFiY2FmOWNiODNkYmFiY0tmOWNiODNkYmFiY3pmOWNiODNkYmFiY3dmOWNiODNkYmthb2M6VzthZWY4S2pqampiaztJd3d2dWw5OWl1ZDk5ZXVlOTlldWw5OThKampqamJjamU5UmdyOEtqampqYmF2Y2Q0aHdhaWNkNGhEZG5kbmFvVG1iYXJjO2FiZmNiYW9jZHRndno6cGpqamI4QWFyYztHYmZjYmF2ejpwampqYjhBYXJodmFyY2FmaGlhb2hxaW5hdmNGRkY5N0JkYmFpY0ZGRjs3ckJkYmFpY2xmaGlhdmNsZmh2YXFjdWZncW1ia2RuYWRUbWJjYmhraW5hZWFrYUQyY2R0Zmd2SWR3aHhhdklkbGhtYXZJZGJoUGFsYWthdzJjZHRmSWRiaHNhcmM7YWJmaHphcmhpYXJjO0diZmhIYXJjYWZocWM6RzFqamJodmFvaE9pbmFzYXZjd2ZJZGJheE5hdklkYmFQTmF2Y2xmSWRiYW1OTU1nQU1oQ2FraFhkbmFBYXM6dGdBYXFJZGJnUTlEZ0xtYmFIeWRiaFhrYUhhWEJkYmFraFhkbmFDYWlJZGJnSzlFbWJhenlkYmhYYUtoQ2themFYQmRiYWlhQ1VkYmFxYUFhUWFMRVVkYmF2Y3hmaHZhcWNsZmhxYUhjbGZoSGFpY2xmaGlhemNsZmh6YU9jdWZnT21ia2FrY2VmZ2thZDlobWJra2FkVGhrSmJiYmJoQ2NiaFhhcmM7YWJmaHZhcmM7R2JmaGljYmhxaW5hbGF2eWRiZ3phdzJjZHRmSWRiYWxhaXlkYmdIYXcyY2R0ZklkYmFlYXphRDJjZHRmZ3pJZHdhZWFIYUQyY2R0ZmdISWR3OnRnc2FzTmF6SWRiYUhJZGI6dGdzYXNOYXpJZGxhSElkbDp0Z3Nhc05NTTpyTU1nc2FDYXNhQzlFZ3pFaENhcWFYYXpFaFhhaWNsZmhpYXZjbGZodmFvYXFjZWZncTlobWJrYUNKYmJiWk5oS3hla2FkVGhrY2JoWEpiYmJiaEtrSmJiYmJoQ2RuYWVhcmM7YWJmYVhjZHRnaWZ5ZGJncWFEMmNkdGZndklkd2FlYXJjO0diZmFpZnlkYmd6YUQyY2R0ZmdpSWR3Z206dGdzYXNOYXZJZGJhaUlkYmdZOnRnQWFBTmF2SWRsYWlJZGxnUDp0Z1FhUU5NTTpyZ3hKYmJiYjlFVG1iYXhhbGFxYXcyY2R0ZklkYk1hbGF6YXcyY2R0ZklkYjp0YXhheE06dmhDa2FzYUNOYW1NaG1hUWFDTmFQTWhQYUFhQ05hWU1oWWRuYWttYmFEY2R0aHZhd2NkdGhpaW5kbmFsSWRiZzhBYWVjd2ZJZGJhbTp0Z0NhQ05hZUlkYmFZOnRnc2FzTmFlY2xmSWRiYVA6dGdBYUFOTU06cmdRTWdFYUs5RVRtYkpiYmJiaHhkbmFRSmJiYmI5RVRtYmFFYUs6dGFRYVFNOnZoeGtheGFDTmFtTWhtYXhhQU5hUE1oUGF4YXNOYVlNaFlhOEFhS2FRTU1KYmJiWk5oS2thZWF2ZmhlYWxhaWZobGFkY3VmZ2RtYmtrYWJhS1VkeGFiYW1VZHdhYmFQVWRsYWJhWVVkYmFyY2plZjhLampqamJramVlaXU4SmpqampiY2o4VzlSZ3I4S2pqampiYWljaTJod2RuYWlUbWJhd2NlYXdjZTBFaERhcmhpaW5haWFlYWRSYmJjZHRmeWRiQmRiYWRjZWZoZGFpY2xmaGlhRGN1ZmdEbWJra2FiYXJhd2FsYWRhb3oxampqYmFyY2o4V2Y4S2pqampiazpSZWVldThKampqamJjYTlSZ284S2pqampiYWI5Y2I4M2RiYWJjeWY5Y2I4M2RiYWJjYWY5Y2I4M2RiYWJjS2Y5Y2I4M2RiYWJjemY5Y2I4M2RiYWJjd2Y5Y2I4M2RiZG5hZFRtYmFvY2JCZDNhbzljYjgzaXdhbzljYjgzaWJhb2FlYWRhaWFsYW9jM2ZhbEVhdmNiYWxFY3J6OmpqampiYWJhbzhQaWI4M2RiYWJhbzhQaXc4M2R3a2FvY2FmOEtqampqYms6M2xlcXU4SmpqampiY2pQOVJnbDhLampqamJjYmh2YWxjanhmY2JhaXo6cGpqamI4QWRuZG5hZFRtYmNqZWhvYWVocmluY3Vod2FyaERjdWhxYXZoa2RuaW5hd2FrYW9hbGNqeGZhRGNlZlJiYmZSYmI5UmNGZUdjaTZhb2FsY2p4ZmFEUmJiZlJiYjlSY0ZlR2NpNmZhb2FsY2p4ZmFEY2RmUmJiZlJiYjlSY0ZlR2NpNmZneGFxOW1nbUVod2RuYW1tYmF4Y2UwbWRrYXhhcWF4YXE5a0VocWFEY2lmaERhZGFrY2VmZ2s5aG1ia2thZWF3Y2kyZmdEY2RmUmJiaHFhRGNlZlJiYmh4YURSYmJoa2FlYXZjaTJmZ0RjaWZhRGF3YXY5UmNpMnpNampqYjhBYWthbGNqeGZmYW9jZWZnbzg2YmJheGFsY2p4ZmZhbzg2YmJhRGNkZmFxODZiYmFEY2VmYXg4NmJiYURhazg2YmJhcWFsY2p4ZmZhbzg2YmJhcmNpZmhyYXZjZWZndmFkOWhtYmthbGNGZWFpY2V0ejpwampqYmhvYWRjaTJnRGNlYURjZTBFaHFjYmh4aW5kbmFvYWVSYmJna2NldGZndzhVZWJnRGN1OWttYmF3YXg4N2ViYW9jamxmYXhjZHRmYWJha2NkdGZ5ZGJCZGJheGhEYXhjZWZoeGthZWFEODZiYmFlY2VmaGVhcWN1ZmdxbWJrYXhjZHRoRHhla2NiaERrYWJhbGNqbGZhRHo6b2pqamI4QWFsY2pQZjhLampqamJrOXRlaXVjYmNieWQ7ODFqamJnZWFiY2lmYzk4R2ZnYkJkOzgxampiZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrO3RlZWV1ZG5kbmFlYWJWY2lHVG1iYWJoaXhla2RuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFleWRiQmRiYWlhZXlkbEJkbGFpYWV5ZHdCZHdhaWFleWR4QmR4YWVjemZoZWFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFleWRiQmRiYWVjbGZoZWFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlUmJiODZiYmFpY2VmaGlhZWNlZmhlYWRjdWZnZG1ia2thYms6M2VlZHVkbmRuYWJjaUdUbWJhYmhpeGVrYWVjRmVHYzpiOmM6ZXcyaGxkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhbEJkeGFpYWxCZHdhaWFsQmRsYWlhbEJkYmFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFsQmRiYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWU4NmJiYWljZWZoaWFkY3VmZ2RtYmtrYWJrOXRlaXVjYmNieWQ7ODFqamJnZWFiY3JmYzk0R2ZnYkJkOzgxampiZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrVGVldWNiYWJjYnlkOzgxampiZ2U5UmNpZmM5OEdhZWZnYkJkOzgxampiZG5hYlpiY3p0Z2U5bm1iYWJhZTlSY0ZGaWZjejRuYjhBa2s6O0RlbHVkbmRuZG5hZGNoOXBtYmFiYWVTbWRhZWFiYWRmZ2k5UmNiYWRjZXQ5UjBtZWthYmFlYWQ7OHFiYnhla2FlYWI3Y2lHaGxkbmRuZG5hYmFlOXBtYmRuYWxUbWJhZGh2YWJoaXhpa2RuYWJjaUdtYmFkaHZhYmhpeGRrYWRUbWlhYmFlUmJiODZiYmFkY3VmaHZkbmFiY2VmZ2ljaUdtYmFlY2VmaGV4ZGthdlRtaWFiYWVSYmU4NmJlYWRjOTpmaHZkbmFiY2RmZ2ljaUdtYmFlY2RmaGV4ZGthdlRtaWFiYWVSYmQ4NmJkYWRjOTlmaHZkbmFiY2lmZ2ljaUdtYmFlY2lmaGV4ZGthdlRtaWFiYWVSYmk4NmJpYWJjbGZoaWFlY2xmaGVhZGM5OGZodnhla2RuYWxtYmRuYWljaUdUbWJhZFRtbGFiYWRjdWZnaWZnbGFlYWlmUmJiODZiYmRuYWxjaUdtYmFpaGR4ZWthaVRtbGFiYWRjOTpmZ2lmZ2xhZWFpZlJiYjg2YmJkbmFsY2lHbWJhaWhkeGVrYWlUbWxhYmFkYzk5ZmdpZmdsYWVhaWZSYmI4NmJiZG5hbGNpR21iYWloZHhla2FpVG1sYWJhZGM5OGZnZGZhZWFkZlJiYjg2YmJrYWRjbDZtYmRuYWRjOThmZ29jZDRjZWZjaUdnaVRtYmFlYzk4ZmhsYWJjOThmaHZpbmF2YWRmYWxhZGZ5ZGJCZGJhZGM5OGZoZGFpY3VmZ2ltYmtrYW9jeDZtYmFlYzlXZmh2YWJjOVdmaG9pbmFvYWRmZ2ljeGZhdmFkZmdsY3hmeWRiQmRiYWljd2ZhbGN3ZnlkYkJkYmFpY2xmYWxjbGZ5ZGJCZGJhaWFseWRiQmRiYWRjOVdmZ2RjaTBtYmtrYWRUbWRhZGhpZG5hZGNpR2dsVG1iYWVjdWZodmFiY3VmaG9hZGhpaW5hb2FpZmF2YWlmUmJiODZiYmFpY3VmaGlhbGN1ZmdsbWJra2FkY2w2bWRhZWM5OGZobGFiYzk4Zmh2aW5hdmFpZmdlY2lmYWxhaWZnZGNpZlJiYjg2YmJhZWNkZmFkY2RmUmJiODZiYmFlY2VmYWRjZWZSYmI4NmJiYWVhZFJiYjg2YmJhaWM5OGZnaW1ieGlra2F2Y2w2bWJkbmF2Yzk4ZmdsY2Q0Y2VmY3JHZ2RUbWJhdmFkY2R0OVJodmluYWlhZXlkYkJkYmFlY2xmaGVhaWNsZmhpYWRjdWZnZG1ia2thbGMzNm1iaW5haWFleWRiQmRiYWlhZXlkbEJkbGFpYWV5ZHdCZHdhaWFleWR4QmR4YWlhZXlkekJkemFpYWV5ZENCZENhaWFleWRLQmRLYWlhZXlkM0JkM2FlY2FmaGVhaWNhZmhpYXZjOUdmZ3ZjaTBtYmtrYXZUbWJkbmRuYXZjckdnZG1iYXZobHhla2F2Yzk0R2hsaW5haWFlUmJiODZiYmFpY2VmaGlhZWNlZmhlYWRjdWZnZG1ia2thdmN3Nm1iaW5haWFlUmJiODZiYmFpYWVSYmU4NmJlYWlhZVJiZDg2YmRhaWFlUmJpODZiaWFpYWVSYmw4NmJsYWlhZVJidjg2YnZhaWFlUmJvODZib2FpYWVSYnI4NmJyYWljd2ZoaWFlY3dmaGVhbGM5NGZnbG1ia2thYmtrOm5lZGJjandrdEZGdXVGRnV1RkZ1dWJiYmJGRnVGRkZ1RkZGdUZiYmJiYmJqWmJiYmJiYmJiYmJiYmJialpiYmJiYmJiYmJiYmJiYmpaODY7bkFaODY7bkFaODY7bkFaODY7bkE6Ozg2O25BWjg2O25BWjg2O25BWjg2O25BOjs4NjtuQVo4NjtuQVo4NjtuQVo4NjtuQTo7YmM7MHdreGViYmJkYmJiak5iYiIsdD1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIG4sbz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhKGUpLHt9KS50aGVuKGZ1bmN0aW9uKHApe249cC5pbnN0YW5jZSxuLmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGEocCl7Zm9yKHZhciB5PW5ldyBVaW50OEFycmF5KHAubGVuZ3RoKSxFPTA7RTxwLmxlbmd0aDsrK0Upe3ZhciBfPXAuY2hhckNvZGVBdChFKTt5W0VdPV8+OTY/Xy05NzpfPjY0P18tMzk6Xys0fWZvcih2YXIgVD0wLEU9MDtFPHAubGVuZ3RoOysrRSl5W1QrK109eVtFXTw2MD90W3lbRV1dOih5W0VdLTYwKSo2NCt5WysrRV07cmV0dXJuIHkuYnVmZmVyLnNsaWNlKDAsVCl9ZnVuY3Rpb24gcihwKXtpZighcCl0aHJvdyBuZXcgRXJyb3IoIkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHApe3JldHVybiBuZXcgVWludDhBcnJheShwLmJ1ZmZlcixwLmJ5dGVPZmZzZXQscC5ieXRlTGVuZ3RoKX12YXIgZj00OCxkPTE2O2Z1bmN0aW9uIGMocCx5KXt2YXIgRT1wLm1lc2hsZXRzW3kqNCswXSxfPXAubWVzaGxldHNbeSo0KzFdLFQ9cC5tZXNobGV0c1t5KjQrMl0sdz1wLm1lc2hsZXRzW3kqNCszXTtyZXR1cm57dmVydGljZXM6cC52ZXJ0aWNlcy5zdWJhcnJheShFLEUrVCksdHJpYW5nbGVzOnAudHJpYW5nbGVzLnN1YmFycmF5KF8sXyt3KjMpfX1mdW5jdGlvbiB1KHAseSxFLF8sVCx3LFIsUyxDLEkpe3ZhciBOPW4uZXhwb3J0cy5zYnJrLFA9bi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0JvdW5kKHkubGVuZ3RoLHcsUiksdj1OKFAqZCksQT1OKHkubGVuZ3RoKjQpLHg9Tih5Lmxlbmd0aCksTT1OKHkuYnl0ZUxlbmd0aCksRj1OKEUuYnl0ZUxlbmd0aCksVT1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7VS5zZXQoaSh5KSxNKSxVLnNldChpKEUpLEYpO3ZhciB6PXAodixBLHgsTSx5Lmxlbmd0aCxGLF8sVCx3LFIsUyxDLEkpO1U9bmV3IFVpbnQ4QXJyYXkobi5leHBvcnRzLm1lbW9yeS5idWZmZXIpO2Zvcih2YXIgRD1VLnN1YmFycmF5KHYsdit6KmQpLEc9bmV3IFVpbnQzMkFycmF5KEQuYnVmZmVyLEQuYnl0ZU9mZnNldCxELmJ5dGVMZW5ndGgvNCkuc2xpY2UoKSxIPTA7SDx6OysrSCl7dmFyIE89R1tIKjQrMF0sWj1HW0gqNCsxXSxfPUdbSCo0KzJdLG9lPUdbSCo0KzNdO24uZXhwb3J0cy5tZXNob3B0X29wdGltaXplTWVzaGxldChBK08qNCx4K1osb2UsXyl9dmFyIGNlPUdbKHotMSkqNCswXSxkZT1HWyh6LTEpKjQrMV0sZWU9R1soei0xKSo0KzJdLG1lPUdbKHotMSkqNCszXSxsZT1jZStlZSxiZT1kZSttZSozLGZlPXttZXNobGV0czpHLHZlcnRpY2VzOm5ldyBVaW50MzJBcnJheShVLmJ1ZmZlcixBLGxlKS5zbGljZSgpLHRyaWFuZ2xlczpuZXcgVWludDhBcnJheShVLmJ1ZmZlcix4LGJlKjMpLnNsaWNlKCksbWVzaGxldENvdW50Onp9O3JldHVybiBOKHYtTigwKSksZmV9ZnVuY3Rpb24gbChwKXt2YXIgeT1uZXcgRmxvYXQzMkFycmF5KG4uZXhwb3J0cy5tZW1vcnkuYnVmZmVyLHAsZi80KTtyZXR1cm57Y2VudGVyWDp5WzBdLGNlbnRlclk6eVsxXSxjZW50ZXJaOnlbMl0scmFkaXVzOnlbM10sY29uZUFwZXhYOnlbNF0sY29uZUFwZXhZOnlbNV0sY29uZUFwZXhaOnlbNl0sY29uZUF4aXNYOnlbN10sY29uZUF4aXNZOnlbOF0sY29uZUF4aXNaOnlbOV0sY29uZUN1dG9mZjp5WzEwXX19ZnVuY3Rpb24gaChwLHksRSxfKXt2YXIgVD1uLmV4cG9ydHMuc2Jyayx3PVtdLFI9VCh5LmJ5dGVMZW5ndGgpLFM9VChwLnZlcnRpY2VzLmJ5dGVMZW5ndGgpLEM9VChwLnRyaWFuZ2xlcy5ieXRlTGVuZ3RoKSxJPVQoZiksTj1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7Ti5zZXQoaSh5KSxSKSxOLnNldChpKHAudmVydGljZXMpLFMpLE4uc2V0KGkocC50cmlhbmdsZXMpLEMpO2Zvcih2YXIgUD0wO1A8cC5tZXNobGV0Q291bnQ7KytQKXt2YXIgdj1wLm1lc2hsZXRzW1AqNCswXSxBPXAubWVzaGxldHNbUCo0KzArMV0seD1wLm1lc2hsZXRzW1AqNCswKzNdO24uZXhwb3J0cy5tZXNob3B0X2NvbXB1dGVNZXNobGV0Qm91bmRzKEksUyt2KjQsQytBLHgsUixFLF8pLHcucHVzaChsKEkpKX1yZXR1cm4gVChSLVQoMCkpLHd9ZnVuY3Rpb24gbShwLHksRSxfKXt2YXIgVD1uLmV4cG9ydHMuc2Jyayx3PVQoZiksUj1UKHAuYnl0ZUxlbmd0aCksUz1UKHkuYnl0ZUxlbmd0aCksQz1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7Qy5zZXQoaShwKSxSKSxDLnNldChpKHkpLFMpLG4uZXhwb3J0cy5tZXNob3B0X2NvbXB1dGVDbHVzdGVyQm91bmRzKHcsUixwLmxlbmd0aCxTLEUsXyk7dmFyIEk9bCh3KTtyZXR1cm4gVCh3LVQoMCkpLEl9ZnVuY3Rpb24gYihwLHksRSxfLFQpe3ZhciB3PW4uZXhwb3J0cy5zYnJrLFI9dyhmKSxTPXcocC5ieXRlTGVuZ3RoKSxDPV8/dyhfLmJ5dGVMZW5ndGgpOjAsST1uZXcgVWludDhBcnJheShuLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7SS5zZXQoaShwKSxTKSxfJiZJLnNldChpKF8pLEMpLG4uZXhwb3J0cy5tZXNob3B0X2NvbXB1dGVTcGhlcmVCb3VuZHMoUixTLHksRSxDLF8/VDowKTt2YXIgTj1sKFIpO3JldHVybiB3KFItdygwKSksTn1yZXR1cm57cmVhZHk6byxzdXBwb3J0ZWQ6ITAsYnVpbGRNZXNobGV0czpmdW5jdGlvbihwLHksRSxfLFQsdyl7cihwLmxlbmd0aCUzPT0wKSxyKHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoeS5sZW5ndGglRT09MCkscihFPj0zKSxyKF8+MCYmXzw9MjU2KSxyKFQ+PTEmJlQ8PTUxMiksdz13fHwwO3ZhciBSPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIHUobi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0ZsZXgsUix5LHkubGVuZ3RoL0UsRSo0LF8sVCxULHcsMCl9LGJ1aWxkTWVzaGxldHNGbGV4OmZ1bmN0aW9uKHAseSxFLF8sVCx3LFIsUyl7cihwLmxlbmd0aCUzPT0wKSxyKHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoeS5sZW5ndGglRT09MCkscihFPj0zKSxyKF8+MCYmXzw9MjU2KSxyKFQ+PTEmJnc8PTUxMikscihUPD13KSxSPVJ8fDAsUz1TfHwwO3ZhciBDPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIHUobi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0ZsZXgsQyx5LHkubGVuZ3RoL0UsRSo0LF8sVCx3LFIsUyl9LGJ1aWxkTWVzaGxldHNTcGF0aWFsOmZ1bmN0aW9uKHAseSxFLF8sVCx3LFIpe3IocC5sZW5ndGglMz09MCkscih5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHkubGVuZ3RoJUU9PTApLHIoRT49MykscihfPjAmJl88PTI1NikscihUPj0xJiZ3PD01MTIpLHIoVDw9dyksUj1SfHwwO3ZhciBTPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIHUobi5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c1NwYXRpYWwsUyx5LHkubGVuZ3RoL0UsRSo0LF8sVCx3LFIpfSxleHRyYWN0TWVzaGxldDpmdW5jdGlvbihwLHkpe3JldHVybiByKHk+PTAmJnk8cC5tZXNobGV0Q291bnQpLGMocCx5KX0sY29tcHV0ZUNsdXN0ZXJCb3VuZHM6ZnVuY3Rpb24ocCx5LEUpe3IocC5sZW5ndGglMz09MCkscihwLmxlbmd0aC8zPD01MTIpLHIoeSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih5Lmxlbmd0aCVFPT0wKSxyKEU+PTMpO3ZhciBfPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIG0oXyx5LHkubGVuZ3RoL0UsRSo0KX0sY29tcHV0ZU1lc2hsZXRCb3VuZHM6ZnVuY3Rpb24ocCx5LEUpe3JldHVybiByKHAubWVzaGxldENvdW50IT0wKSxyKHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoeS5sZW5ndGglRT09MCkscihFPj0zKSxoKHAseSx5Lmxlbmd0aC9FLEUqNCl9LGNvbXB1dGVTcGhlcmVCb3VuZHM6ZnVuY3Rpb24ocCx5LEUsXyl7cmV0dXJuIHIocCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihwLmxlbmd0aCV5PT0wKSxyKHk+PTMpLHIoIUV8fEUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoIUV8fEUubGVuZ3RoJV89PTApLHIoIUV8fF8+PTEpLHIoIUV8fHAubGVuZ3RoL3k9PUUubGVuZ3RoL18pLF89X3x8MCxiKHAscC5sZW5ndGgveSx5KjQsRSxfKjQpfX19KSgpfSk7dmFyIE14PVgoKCk9Pnt4eCgpO094KCk7U3goKTtDeCgpfSk7dmFyICRyLE54LEl4PVgoKCk9PntEbigpO3BuKCk7JHI9e1g6MCxZOjEsWjoyfTskci5ZX1VQX1RPX1pfVVA9JC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihKLmZyb21BcnJheShbMSwwLDAsMCwwLDEsMCwtMSwwXSkpOyRyLlpfVVBfVE9fWV9VUD0kLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKEouZnJvbUFycmF5KFsxLDAsMCwwLDAsLTEsMCwxLDBdKSk7JHIuWF9VUF9UT19aX1VQPSQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5mcm9tQXJyYXkoWzAsMCwxLDAsMSwwLC0xLDAsMF0pKTskci5aX1VQX1RPX1hfVVA9JC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihKLmZyb21BcnJheShbMCwwLC0xLDAsMSwwLDEsMCwwXSkpOyRyLlhfVVBfVE9fWV9VUD0kLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKEouZnJvbUFycmF5KFswLDEsMCwtMSwwLDAsMCwwLDFdKSk7JHIuWV9VUF9UT19YX1VQPSQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oSi5mcm9tQXJyYXkoWzAsLTEsMCwxLDAsMCwwLDAsMV0pKTskci5mcm9tTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gJHJbZV19O054PU9iamVjdC5mcmVlemUoJHIpfSk7ZnVuY3Rpb24gd3IoZSx0KXt0aGlzLl9lbGxpcHNvaWQ9ZSx0aGlzLl9jYW1lcmFQb3NpdGlvbj1uZXcgcyx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bmV3IHMsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD0wLGcodCkmJih0aGlzLmNhbWVyYVBvc2l0aW9uPXQpfWZ1bmN0aW9uIHZ4KGUsdCxuKXtpZihnKHQpJiZ0PDAmJmUubWluaW11bVJhZGl1cz4tdCl7bGV0IG89cy5mcm9tRWxlbWVudHMoZS5yYWRpaS54K3QsZS5yYWRpaS55K3QsZS5yYWRpaS56K3QsbVUpO2U9cS5mcm9tQ2FydGVzaWFuMyhvLG4pfXJldHVybiBlfWZ1bmN0aW9uIEZ4KGUsdCxuLG8pe2cobyl8fChvPW5ldyBzKTtsZXQgYT1MeChlLHQpLHI9MDtmb3IobGV0IGk9MCxmPW4ubGVuZ3RoO2k8ZjsrK2kpe2xldCBkPW5baV0sYz1CeChlLGQsYSk7aWYoYzwwKXJldHVybjtyPU1hdGgubWF4KHIsYyl9cmV0dXJuIFV4KGEscixvKX1mdW5jdGlvbiBEeChlLHQsbixvLGEscil7ZyhyKXx8KHI9bmV3IHMpLG89bz8/MyxhPWE/P3MuWkVSTztsZXQgaT1MeChlLHQpLGY9MDtmb3IobGV0IGQ9MCxjPW4ubGVuZ3RoO2Q8YztkKz1vKXtaaC54PW5bZF0rYS54LFpoLnk9bltkKzFdK2EueSxaaC56PW5bZCsyXSthLno7bGV0IHU9QngoZSxaaCxpKTtpZih1PDApcmV0dXJuO2Y9TWF0aC5tYXgoZix1KX1yZXR1cm4gVXgoaSxmLHIpfWZ1bmN0aW9uIE9fKGUsdCxuKXtsZXQgbz10LGE9bixyPXMuc3VidHJhY3QoZSxvLFB4KSxpPS1zLmRvdChyLG8pO3JldHVybiEoYTwwP2k+MDppPmEmJmkqaS9zLm1hZ25pdHVkZVNxdWFyZWQocik+YSl9ZnVuY3Rpb24gQngoZSx0LG4pe2xldCBvPWUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQsYlUpLGE9cy5tYWduaXR1ZGVTcXVhcmVkKG8pLHI9TWF0aC5zcXJ0KGEpLGk9cy5kaXZpZGVCeVNjYWxhcihvLHIscFUpO2E9TWF0aC5tYXgoMSxhKSxyPU1hdGgubWF4KDEscik7bGV0IGY9cy5kb3QoaSxuKSxkPXMubWFnbml0dWRlKHMuY3Jvc3MoaSxuLGkpKSxjPTEvcix1PU1hdGguc3FydChhLTEpKmM7cmV0dXJuIDEvKGYqYy1kKnUpfWZ1bmN0aW9uIFV4KGUsdCxuKXtpZighKHQ8PTB8fHQ9PT0xLzB8fHQhPT10KSlyZXR1cm4gcy5tdWx0aXBseUJ5U2NhbGFyKGUsdCxuKX1mdW5jdGlvbiBMeChlLHQpe3JldHVybiBzLmVxdWFscyh0LHMuWkVSTyk/dDooZS50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UodCx4Xykscy5ub3JtYWxpemUoeF8seF8pKX12YXIgUHgsbFUsa3gsaFUsbVUsWmgsYlUscFUseF8sRXIsR3M9WCgoKT0+e010KCk7SWUoKTtzZSgpO3FlKCk7X24oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3ci5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LGNhbWVyYVBvc2l0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FtZXJhUG9zaXRpb259LHNldDpmdW5jdGlvbihlKXtsZXQgbj10aGlzLl9lbGxpcHNvaWQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlKSxvPXMubWFnbml0dWRlU3F1YXJlZChuKS0xO3MuY2xvbmUoZSx0aGlzLl9jYW1lcmFQb3NpdGlvbiksdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlPW4sdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD1vfX19KTtQeD1uZXcgczt3ci5wcm90b3R5cGUuaXNQb2ludFZpc2libGU9ZnVuY3Rpb24oZSl7bGV0IG49dGhpcy5fZWxsaXBzb2lkLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLFB4KTtyZXR1cm4gT18obix0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCl9O3dyLnByb3RvdHlwZS5pc1NjYWxlZFNwYWNlUG9pbnRWaXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBPXyhlLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSx0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKX07bFU9bmV3IHM7d3IucHJvdG90eXBlLmlzU2NhbGVkU3BhY2VQb2ludFZpc2libGVQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKGUsdCl7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG8sYTtyZXR1cm4gZyh0KSYmdDwwJiZuLm1pbmltdW1SYWRpdXM+LXQ/KGE9bFUsYS54PXRoaXMuX2NhbWVyYVBvc2l0aW9uLngvKG4ucmFkaWkueCt0KSxhLnk9dGhpcy5fY2FtZXJhUG9zaXRpb24ueS8obi5yYWRpaS55K3QpLGEuej10aGlzLl9jYW1lcmFQb3NpdGlvbi56LyhuLnJhZGlpLnordCksbz1hLngqYS54K2EueSphLnkrYS56KmEuei0xKTooYT10aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2Usbz10aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKSxPXyhlLGEsbyl9O3dyLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEZ4KHRoaXMuX2VsbGlwc29pZCxlLHQsbil9O2t4PXEuY2xvbmUocS5VTklUX1NQSEVSRSk7d3IucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbihlLHQsbixvKXtsZXQgYT12eCh0aGlzLl9lbGxpcHNvaWQsbixreCk7cmV0dXJuIEZ4KGEsZSx0LG8pfTt3ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXM9ZnVuY3Rpb24oZSx0LG4sbyxhKXtyZXR1cm4gRHgodGhpcy5fZWxsaXBzb2lkLGUsdCxuLG8sYSl9O3dyLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24oZSx0LG4sbyxhLHIpe2xldCBpPXZ4KHRoaXMuX2VsbGlwc29pZCxhLGt4KTtyZXR1cm4gRHgoaSxlLHQsbixvLHIpfTtoVT1bXTt3ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1TZS5zdWJzYW1wbGUoZSx0LDAsaFUpLGE9Z2UuZnJvbVBvaW50cyhvKTtpZighKHMubWFnbml0dWRlKGEuY2VudGVyKTwuMSp0Lm1pbmltdW1SYWRpdXMpKXJldHVybiB0aGlzLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50KGEuY2VudGVyLG8sbil9O21VPW5ldyBzO1poPW5ldyBzO2JVPW5ldyBzLHBVPW5ldyBzO3hfPW5ldyBzO0VyPXdyfSk7dmFyIFFoLGdVLE9jLFNfPVgoKCk9PntJZSgpO0V0KCk7c2UoKTtRaD17fTtRaC5nZXRIZWlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybihlLW4pKnQrbn07Z1U9bmV3IHJlO1FoLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuLG8sYSl7bGV0IHI9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGdVKTtpZighZyhyKSlyZXR1cm4gcy5jbG9uZShlLGEpO2xldCBpPVFoLmdldEhlaWdodChyLmhlaWdodCxuLG8pO3JldHVybiBzLmZyb21SYWRpYW5zKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUsaSx0LGEpfTtPYz1RaH0pO3ZhciBfVSxrYSxqeD1YKCgpPT57X1U9e05PTkU6MCxCSVRTMTI6MX0sa2E9T2JqZWN0LmZyZWV6ZShfVSl9KTtmdW5jdGlvbiBTbyhlLHQsbixvLGEscixpLGYsZCxjKXtsZXQgdT1rYS5OT05FLGwsaDtpZihnKHQpJiZnKG4pJiZnKG8pJiZnKGEpKXtsZXQgbT10Lm1pbmltdW0sYj10Lm1heGltdW0scD1zLnN1YnRyYWN0KGIsbSx5VSkseT1vLW47TWF0aC5tYXgocy5tYXhpbXVtQ29tcG9uZW50KHApLHkpPEVVLTE/dT1rYS5CSVRTMTI6dT1rYS5OT05FO2xldCBfPSQuZnJvbVNjYWxlKHAsQVUpO189JC5zZXRUcmFuc2xhdGlvbihfLG0sXyk7bGV0IFQ9JC5mcm9tU2NhbGUocy5mcm9tRWxlbWVudHMoMS9wLngsMS9wLnksMS9wLnosbWQpLHdVKTtUPSQubXVsdGlwbHlCeVRyYW5zbGF0aW9uKFQscy5uZWdhdGUobSxtZCksVCksaD0kLmNsb25lKGEsbmV3ICQpO2xldCB3PSQuZ2V0VHJhbnNsYXRpb24oYSxtZCk7dz1zLnN1YnRyYWN0KHcsZSxtZCksaD0kLnNldFRyYW5zbGF0aW9uKGgsdyxoKSxoPSQubXVsdGlwbHkoaCxfLGgpLGw9JC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oYSxuZXcgJCksbD0kLm11bHRpcGx5KFQsbCxsKSxhPSQubXVsdGlwbHkoYSxfLG5ldyAkKX10aGlzLnF1YW50aXphdGlvbj11LHRoaXMubWluaW11bUhlaWdodD1uLHRoaXMubWF4aW11bUhlaWdodD1vLHRoaXMuY2VudGVyPXMuY2xvbmUoZSksdGhpcy50b1NjYWxlZEVOVT1sLHRoaXMuZnJvbVNjYWxlZEVOVT1hLHRoaXMubWF0cml4PWgsdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzPXI/PyExLHRoaXMuaGFzV2ViTWVyY2F0b3JUPWk/PyExLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1mPz8hMSx0aGlzLmV4YWdnZXJhdGlvbj1kPz8xLHRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ9Yz8/MCx0aGlzLnN0cmlkZT0wLHRoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbD0wLHRoaXMuX29mZnNldFZlcnRleE5vcm1hbD0wLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKX12YXIgbWQseVUsdmEsQVUsd1UsRVUsVFUsengsJGgsZW0scmEsVnM9WCgoKT0+e1VyKCk7anQoKTtJZSgpO3Z0KCk7c2UoKTtHZSgpO3BuKCk7U18oKTtqeCgpO21kPW5ldyBzLHlVPW5ldyBzLHZhPW5ldyBZLEFVPW5ldyAkLHdVPW5ldyAkLEVVPU1hdGgucG93KDIsMTIpO1NvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSxmKXtsZXQgZD1vLngsYz1vLnk7aWYodGhpcy5xdWFudGl6YXRpb249PT1rYS5CSVRTMTIpe249JC5tdWx0aXBseUJ5UG9pbnQodGhpcy50b1NjYWxlZEVOVSxuLG1kKSxuLng9ay5jbGFtcChuLngsMCwxKSxuLnk9ay5jbGFtcChuLnksMCwxKSxuLno9ay5jbGFtcChuLnosMCwxKTtsZXQgdT10aGlzLm1heGltdW1IZWlnaHQtdGhpcy5taW5pbXVtSGVpZ2h0LGw9ay5jbGFtcCgoYS10aGlzLm1pbmltdW1IZWlnaHQpL3UsMCwxKTtZLmZyb21FbGVtZW50cyhuLngsbi55LHZhKTtsZXQgaD1WdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh2YSk7WS5mcm9tRWxlbWVudHMobi56LGwsdmEpO2xldCBtPVZ0LmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHZhKTtZLmZyb21FbGVtZW50cyhkLGMsdmEpO2xldCBiPVZ0LmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHZhKTtpZihlW3QrK109aCxlW3QrK109bSxlW3QrK109Yix0aGlzLmhhc1dlYk1lcmNhdG9yVCl7WS5mcm9tRWxlbWVudHMoaSwwLHZhKTtsZXQgcD1WdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh2YSk7ZVt0KytdPXB9fWVsc2UgZVt0KytdPW4ueC10aGlzLmNlbnRlci54LGVbdCsrXT1uLnktdGhpcy5jZW50ZXIueSxlW3QrK109bi56LXRoaXMuY2VudGVyLnosZVt0KytdPWEsZVt0KytdPWQsZVt0KytdPWMsdGhpcy5oYXNXZWJNZXJjYXRvclQmJihlW3QrK109aSk7cmV0dXJuIHRoaXMuaGFzVmVydGV4Tm9ybWFscyYmKGVbdCsrXT1WdC5vY3RQYWNrRmxvYXQocikpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKGVbdCsrXT1mLngsZVt0KytdPWYueSxlW3QrK109Zi56KSx0fTtUVT1uZXcgcyx6eD1uZXcgcztTby5wcm90b3R5cGUuYWRkR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbz10aGlzLnN0cmlkZSxhPWUubGVuZ3RoL287dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSEwLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgcj10aGlzLnN0cmlkZTtmb3IobGV0IGk9MDtpPGE7aSsrKXtmb3IobGV0IHU9MDt1PG87dSsrKXtsZXQgbD1pKm8rdSxoPWkqcit1O3RbaF09ZVtsXX1sZXQgZj10aGlzLmRlY29kZVBvc2l0aW9uKHQsaSxUVSksZD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLHp4KSxjPWkqcit0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw7dFtjXT1kLngsdFtjKzFdPWQueSx0W2MrMl09ZC56fX07U28ucHJvdG90eXBlLnJlbW92ZUdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbj10aGlzLnN0cmlkZSxvPWUubGVuZ3RoL247dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSExLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgYT10aGlzLnN0cmlkZTtmb3IobGV0IHI9MDtyPG87cisrKWZvcihsZXQgaT0wO2k8YTtpKyspe2xldCBmPXIqbitpLGQ9ciphK2k7dFtkXT1lW2ZdfX07U28ucHJvdG90eXBlLmRlY29kZVBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXtpZihnKG4pfHwobj1uZXcgcyksdCo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT1rYS5CSVRTMTIpe2xldCBvPVZ0LmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoZVt0XSx2YSk7bi54PW8ueCxuLnk9by55O2xldCBhPVZ0LmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoZVt0KzFdLHZhKTtyZXR1cm4gbi56PWEueCwkLm11bHRpcGx5QnlQb2ludCh0aGlzLmZyb21TY2FsZWRFTlUsbixuKX1yZXR1cm4gbi54PWVbdF0sbi55PWVbdCsxXSxuLno9ZVt0KzJdLHMuYWRkKG4sdGhpcy5jZW50ZXIsbil9O1NvLnByb3RvdHlwZS5nZXRFeGFnZ2VyYXRlZFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXtuPXRoaXMuZGVjb2RlUG9zaXRpb24oZSx0LG4pO2xldCBvPXRoaXMuZXhhZ2dlcmF0aW9uLGE9dGhpcy5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodDtpZihvIT09MSYmdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXtsZXQgaT10aGlzLmRlY29kZUdlb2RldGljU3VyZmFjZU5vcm1hbChlLHQsengpLGY9dGhpcy5kZWNvZGVIZWlnaHQoZSx0KSxkPU9jLmdldEhlaWdodChmLG8sYSktZjtuLngrPWkueCpkLG4ueSs9aS55KmQsbi56Kz1pLnoqZH1yZXR1cm4gbn07U28ucHJvdG90eXBlLmRlY29kZVRleHR1cmVDb29yZGluYXRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGcobil8fChuPW5ldyBZKSx0Kj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PWthLkJJVFMxMj9WdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKGVbdCsyXSxuKTpZLmZyb21FbGVtZW50cyhlW3QrNF0sZVt0KzVdLG4pfTtTby5wcm90b3R5cGUuZGVjb2RlSGVpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09a2EuQklUUzEyP1Z0LmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoZVt0KzFdLHZhKS55Kih0aGlzLm1heGltdW1IZWlnaHQtdGhpcy5taW5pbXVtSGVpZ2h0KSt0aGlzLm1pbmltdW1IZWlnaHQ6ZVt0KzNdfTtTby5wcm90b3R5cGUuZGVjb2RlV2ViTWVyY2F0b3JUPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09a2EuQklUUzEyP1Z0LmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoZVt0KzNdLHZhKS54OmVbdCs2XX07U28ucHJvdG90eXBlLmdldE9jdEVuY29kZWROb3JtYWw9ZnVuY3Rpb24oZSx0LG4pe3Q9dCp0aGlzLnN0cmlkZSt0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw7bGV0IG89ZVt0XS8yNTYsYT1NYXRoLmZsb29yKG8pLHI9KG8tYSkqMjU2O3JldHVybiBZLmZyb21FbGVtZW50cyhhLHIsbil9O1NvLnByb3RvdHlwZS5kZWNvZGVOb3JtYWw9ZnVuY3Rpb24oZSx0LG4pe2xldCBvPXQ9dCp0aGlzLnN0cmlkZSt0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw7cmV0dXJuIFZ0Lm9jdERlY29kZUZsb2F0KGVbb10sbil9O1NvLnByb3RvdHlwZS5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsLG4ueD1lW3RdLG4ueT1lW3QrMV0sbi56PWVbdCsyXSxufTtTby5wcm90b3R5cGUuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHM9ZnVuY3Rpb24oKXtsZXQgZT0wO3RoaXMucXVhbnRpemF0aW9uPT09a2EuQklUUzEyP2UrPTM6ZSs9Nix0aGlzLmhhc1dlYk1lcmNhdG9yVCYmKGUrPTEpLHRoaXMuaGFzVmVydGV4Tm9ybWFscyYmKHRoaXMuX29mZnNldFZlcnRleE5vcm1hbD1lLGUrPTEpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKHRoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbD1lLGUrPTMpLHRoaXMuc3RyaWRlPWV9OyRoPXtwb3NpdGlvbjNEQW5kSGVpZ2h0OjAsdGV4dHVyZUNvb3JkQW5kRW5jb2RlZE5vcm1hbHM6MSxnZW9kZXRpY1N1cmZhY2VOb3JtYWw6Mn0sZW09e2NvbXByZXNzZWQwOjAsY29tcHJlc3NlZDE6MSxnZW9kZXRpY1N1cmZhY2VOb3JtYWw6Mn07U28ucHJvdG90eXBlLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oZSl7bGV0IHQ9bmUuRkxPQVQsbj1uZS5nZXRTaXplSW5CeXRlcyh0KSxvPXRoaXMuc3RyaWRlKm4sYT0wLHI9W107ZnVuY3Rpb24gaShmLGQpe3IucHVzaCh7aW5kZXg6Zix2ZXJ0ZXhCdWZmZXI6ZSxjb21wb25lbnREYXRhdHlwZTp0LGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6ZCxvZmZzZXRJbkJ5dGVzOmEsc3RyaWRlSW5CeXRlczpvfSksYSs9ZCpufWlmKHRoaXMucXVhbnRpemF0aW9uPT09a2EuTk9ORSl7aSgkaC5wb3NpdGlvbjNEQW5kSGVpZ2h0LDQpO2xldCBmPTI7Zis9dGhpcy5oYXNXZWJNZXJjYXRvclQ/MTowLGYrPXRoaXMuaGFzVmVydGV4Tm9ybWFscz8xOjAsaSgkaC50ZXh0dXJlQ29vcmRBbmRFbmNvZGVkTm9ybWFscyxmKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJmkoJGguZ2VvZGV0aWNTdXJmYWNlTm9ybWFsLDMpfWVsc2V7bGV0IGY9dGhpcy5oYXNXZWJNZXJjYXRvclR8fHRoaXMuaGFzVmVydGV4Tm9ybWFscyxkPXRoaXMuaGFzV2ViTWVyY2F0b3JUJiZ0aGlzLmhhc1ZlcnRleE5vcm1hbHM7aShlbS5jb21wcmVzc2VkMCxmPzQ6MyksZCYmaShlbS5jb21wcmVzc2VkMSwxKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJmkoZW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsLDMpfXJldHVybiByfTtTby5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVhbnRpemF0aW9uPT09a2EuTk9ORT8kaDplbX07U28uY2xvbmU9ZnVuY3Rpb24oZSx0KXtpZihnKGUpKXJldHVybiBnKHQpfHwodD1uZXcgU28pLHQucXVhbnRpemF0aW9uPWUucXVhbnRpemF0aW9uLHQubWluaW11bUhlaWdodD1lLm1pbmltdW1IZWlnaHQsdC5tYXhpbXVtSGVpZ2h0PWUubWF4aW11bUhlaWdodCx0LmNlbnRlcj1zLmNsb25lKGUuY2VudGVyKSx0LnRvU2NhbGVkRU5VPSQuY2xvbmUoZS50b1NjYWxlZEVOVSksdC5mcm9tU2NhbGVkRU5VPSQuY2xvbmUoZS5mcm9tU2NhbGVkRU5VKSx0Lm1hdHJpeD0kLmNsb25lKGUubWF0cml4KSx0Lmhhc1ZlcnRleE5vcm1hbHM9ZS5oYXNWZXJ0ZXhOb3JtYWxzLHQuaGFzV2ViTWVyY2F0b3JUPWUuaGFzV2ViTWVyY2F0b3JULHQuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1lLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMsdC5leGFnZ2VyYXRpb249ZS5leGFnZ2VyYXRpb24sdC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodD1lLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LHQuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKSx0fTtyYT1Tb30pO3ZhciB0bSxubSxDXz1YKCgpPT57dG09e01PUlBISU5HOjAsQ09MVU1CVVNfVklFVzoxLFNDRU5FMkQ6MixTQ0VORTNEOjN9O3RtLmdldE1vcnBoVGltZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRtLlNDRU5FM0Q/MTplPT09dG0uTU9SUEhJTkc/dm9pZCAwOjB9O25tPU9iamVjdC5mcmVlemUodG0pfSk7ZnVuY3Rpb24gUlUoKXtyZXR1cm4hMH1mdW5jdGlvbiB4VShlLHQpe3Q9dD8/IlRoaXMgb2JqZWN0IHdhcyBkZXN0cm95ZWQsIGkuZS4sIGRlc3Ryb3koKSB3YXMgY2FsbGVkLiI7ZnVuY3Rpb24gbigpe31mb3IobGV0IG8gaW4gZSl0eXBlb2YgZVtvXT09ImZ1bmN0aW9uIiYmKGVbb109bik7ZS5pc0Rlc3Ryb3llZD1SVX12YXIgR3gsVng9WCgoKT0+e0d4PXhVfSk7ZnVuY3Rpb24gS3goKXtpZighZyh5by5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcikpe2xldCBlPUlfKCJ0cmFuc2ZlclR5cGVkQXJyYXlUZXN0Iik7ZS5wb3N0TWVzc2FnZT1lLndlYmtpdFBvc3RNZXNzYWdlPz9lLnBvc3RNZXNzYWdlO2xldCB0PTk5LG49bmV3IEludDhBcnJheShbdF0pO3RyeXtlLnBvc3RNZXNzYWdlKHthcnJheTpufSxbbi5idWZmZXJdKX1jYXRjaHtyZXR1cm4geW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXI9ITEseW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXJ9eW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXI9bmV3IFByb21pc2Uobz0+e2Uub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2xldCByPWEuZGF0YS5hcnJheSxpPWcocikmJnJbMF09PT10O28oaSksZS50ZXJtaW5hdGUoKSx5by5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcj1pfX0pfXJldHVybiB5by5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcn1mdW5jdGlvbiBNXyhlKXtsZXQgdDt0cnl7dD1uZXcgQmxvYihbZV0se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSl9Y2F0Y2h7bGV0IGE9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIscj1uZXcgYTtyLmFwcGVuZChlKSx0PXIuZ2V0QmxvYigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfXJldHVybih3aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMKS5jcmVhdGVPYmplY3RVUkwodCl9ZnVuY3Rpb24gSV8oZSl7bGV0IHQ9bmV3IEh4LmRlZmF1bHQoZSksbj10LnNjaGVtZSgpLmxlbmd0aCE9PTAmJnQuZnJhZ21lbnQoKS5sZW5ndGg9PT0wLG89ZS5yZXBsYWNlKC9cLmpzJC8sIiIpLGE9e30scixpO2lmKF9mKGUpKWk9ZTtlbHNlIGlmKCFuKXtsZXQgZj1pcihgJHt5by5fd29ya2VyTW9kdWxlUHJlZml4fS8ke299LmpzYCk7X2YoZikmJihpPWYpfWlmKGkpe2xldCBmPWBpbXBvcnQgIiR7aX0iO2A7cmV0dXJuIHI9TV8oZiksYS50eXBlPSJtb2R1bGUiLG5ldyBXb3JrZXIocixhKX1pZighbiYmdHlwZW9mIENFU0lVTV9XT1JLRVJTPCJ1Iil7bGV0IGY9YAogICAgICBpbXBvcnRTY3JpcHRzKCIke01fKENFU0lVTV9XT1JLRVJTKX0iKTsKICAgICAgQ2VzaXVtV29ya2Vyc1siJHtvfSJdKCk7CiAgICBgO3JldHVybiByPU1fKGYpLG5ldyBXb3JrZXIocixhKX1pZihyPWUsbnx8KHI9aXIoYCR7eW8uX3dvcmtlck1vZHVsZVByZWZpeCtvfS5qc2ApKSwhY3Iuc3VwcG9ydHNFc21XZWJXb3JrZXJzKCkpdGhyb3cgbmV3IHV0KCJUaGlzIGJyb3dzZXIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIgdG8gY29udGludWUuIik7cmV0dXJuIGEudHlwZT0ibW9kdWxlIixuZXcgV29ya2VyKHIsYSl9YXN5bmMgZnVuY3Rpb24gT1UoZSx0KXtsZXQgbj17bW9kdWxlUGF0aDp2b2lkIDAsd2FzbUJpbmFyeUZpbGU6dm9pZCAwLHdhc21CaW5hcnk6dm9pZCAwfTtpZighY3Iuc3VwcG9ydHNXZWJBc3NlbWJseSgpKXtpZighZyh0LmZhbGxiYWNrTW9kdWxlUGF0aCkpdGhyb3cgbmV3IHV0KGBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXNzZW1ibHksIGFuZCBubyBiYWNrdXAgbW9kdWxlIHdhcyBwcm92aWRlZCBmb3IgJHtlLl93b3JrZXJQYXRofWApO3JldHVybiBuLm1vZHVsZVBhdGg9aXIodC5mYWxsYmFja01vZHVsZVBhdGgpLG59bi53YXNtQmluYXJ5RmlsZT1pcih0Lndhc21CaW5hcnlGaWxlKTtsZXQgbz1hd2FpdCBBYS5mZXRjaEFycmF5QnVmZmVyKHt1cmw6bi53YXNtQmluYXJ5RmlsZX0pO3JldHVybiBuLndhc21CaW5hcnk9byxufWZ1bmN0aW9uIHlvKGUsdCl7dGhpcy5fd29ya2VyUGF0aD1lLHRoaXMuX21heGltdW1BY3RpdmVUYXNrcz10Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdGhpcy5fYWN0aXZlVGFza3M9MCx0aGlzLl9uZXh0SUQ9MCx0aGlzLl93ZWJBc3NlbWJseVByb21pc2U9dm9pZCAwfWFzeW5jIGZ1bmN0aW9uIE1VKGUsdCxuKXtsZXQgbz1hd2FpdCBQcm9taXNlLnJlc29sdmUoS3goKSk7ZyhuKT9vfHwobi5sZW5ndGg9MCk6bj1DVTtsZXQgYT1lLl9uZXh0SUQrKyxyPW5ldyBQcm9taXNlKChpLGYpPT57ZS5fd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLFNVKGUuX3dvcmtlcixhLGksZikpfSk7cmV0dXJuIGUuX3dvcmtlci5wb3N0TWVzc2FnZSh7aWQ6YSxiYXNlVXJsOmlyLmdldENlc2l1bUJhc2VVcmwoKS51cmwscGFyYW1ldGVyczp0LGNhblRyYW5zZmVyQXJyYXlCdWZmZXI6b30sbikscn1hc3luYyBmdW5jdGlvbiBOVShlLHQsbil7KytlLl9hY3RpdmVUYXNrczt0cnl7bGV0IG89YXdhaXQgTVUoZSx0LG4pO3JldHVybi0tZS5fYWN0aXZlVGFza3Msb31jYXRjaChvKXt0aHJvdy0tZS5fYWN0aXZlVGFza3Msb319dmFyIEh4LE5fLFNVLENVLHF4LFd4PVgoKCk9PntIeD1jYSh1aSgpLDEpO3hsKCk7c2UoKTtWeCgpO0ppKCk7bGIoKTtGbCgpO3NiKCk7b3MoKTtqYSgpO05fPW5ldyBwbDtTVT0oZSx0LG4sbyk9PntsZXQgYT0oe2RhdGE6cn0pPT57aWYoci5pZD09PXQpe2lmKGcoci5lcnJvcikpe2xldCBpPXIuZXJyb3I7aS5uYW1lPT09IlJ1bnRpbWVFcnJvciI/KGk9bmV3IHV0KHIuZXJyb3IubWVzc2FnZSksaS5zdGFjaz1yLmVycm9yLnN0YWNrKTppLm5hbWU9PT0iRGV2ZWxvcGVyRXJyb3IiPyhpPW5ldyBXdChyLmVycm9yLm1lc3NhZ2UpLGkuc3RhY2s9ci5lcnJvci5zdGFjayk6aS5uYW1lPT09IkVycm9yIiYmKGk9bmV3IEVycm9yKHIuZXJyb3IubWVzc2FnZSksaS5zdGFjaz1yLmVycm9yLnN0YWNrKSxOXy5yYWlzZUV2ZW50KGkpLG8oaSl9ZWxzZSBOXy5yYWlzZUV2ZW50KCksbihyLnJlc3VsdCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKX19O3JldHVybiBhfSxDVT1bXTt5by5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKGUsdCl7aWYoZyh0aGlzLl93b3JrZXIpfHwodGhpcy5fd29ya2VyPUlfKHRoaXMuX3dvcmtlclBhdGgpKSwhKHRoaXMuX2FjdGl2ZVRhc2tzPj10aGlzLl9tYXhpbXVtQWN0aXZlVGFza3MpKXJldHVybiBOVSh0aGlzLGUsdCl9O3lvLnByb3RvdHlwZS5pbml0V2ViQXNzZW1ibHlNb2R1bGU9YXN5bmMgZnVuY3Rpb24oZSl7aWYoZyh0aGlzLl93ZWJBc3NlbWJseVByb21pc2UpKXJldHVybiB0aGlzLl93ZWJBc3NlbWJseVByb21pc2U7bGV0IHQ9YXN5bmMoKT0+e2xldCBuPXRoaXMuX3dvcmtlcj1JXyh0aGlzLl93b3JrZXJQYXRoKSxvPWF3YWl0IE9VKHRoaXMsZSksYT1hd2FpdCBQcm9taXNlLnJlc29sdmUoS3goKSkscixpPW8ud2FzbUJpbmFyeTtnKGkpJiZhJiYocj1baV0pO2xldCBmPW5ldyBQcm9taXNlKChkLGMpPT57bi5vbm1lc3NhZ2U9ZnVuY3Rpb24oe2RhdGE6dX0pe2codSk/ZCh1LnJlc3VsdCk6YyhuZXcgdXQoIkNvdWxkIG5vdCBjb25maWd1cmUgd2FzbSBtb2R1bGUiKSl9fSk7cmV0dXJuIG4ucG9zdE1lc3NhZ2Uoe2NhblRyYW5zZmVyQXJyYXlCdWZmZXI6YSxwYXJhbWV0ZXJzOnt3ZWJBc3NlbWJseUNvbmZpZzpvfX0sciksZn07cmV0dXJuIHRoaXMuX3dlYkFzc2VtYmx5UHJvbWlzZT10KCksdGhpcy5fd2ViQXNzZW1ibHlQcm9taXNlfTt5by5wcm90b3R5cGUuaXNEZXN0cm95ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX07eW8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl93b3JrZXIpJiZ0aGlzLl93b3JrZXIudGVybWluYXRlKCksR3godGhpcyl9O3lvLnRhc2tDb21wbGV0ZWRFdmVudD1OXzt5by5fZGVmYXVsdFdvcmtlck1vZHVsZVByZWZpeD0iV29ya2Vycy8iO3lvLl93b3JrZXJNb2R1bGVQcmVmaXg9eW8uX2RlZmF1bHRXb3JrZXJNb2R1bGVQcmVmaXg7eW8uX2NhblRyYW5zZmVyQXJyYXlCdWZmZXI9dm9pZCAwO3F4PXlvfSk7ZnVuY3Rpb24gdl8oZSx0LG4pe3RoaXMuX3ZlcnRpY2VzPWUsdGhpcy5faW5kaWNlcz10LHRoaXMuX2VuY29kaW5nPW4sdGhpcy5faW52ZXJzZVRyYW5zZm9ybT1uZXcgJCx0aGlzLl9uZWVkc1JlYnVpbGQ9ITAsdGhpcy5fcm9vdE5vZGU9bmV3IGtffWZ1bmN0aW9uIGtfKCl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy5sZXZlbD0wLHRoaXMuYWFiYj1YeCh0aGlzLngsdGhpcy55LHRoaXMubGV2ZWwpLHRoaXMuaW50ZXJzZWN0aW5nVHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSgwKSx0aGlzLmNoaWxkcmVuPVtdLHRoaXMuYnVpbGRpbmdDaGlsZHJlbj0hMX1mdW5jdGlvbiB2VShlLHQpeyQuaW52ZXJzZSh0LGUuX2ludmVyc2VUcmFuc2Zvcm0pLGUuX25lZWRzUmVidWlsZD0hMTtsZXQgbj1lLl9pbmRpY2VzLmxlbmd0aC8zLG89bmV3IFVpbnQzMkFycmF5KG4pO2ZvcihsZXQgYT0wO2E8bjsrK2Epb1thXT1hO2UuX3Jvb3ROb2RlLmludGVyc2VjdGluZ1RyaWFuZ2xlcz1vLGUuX3Jvb3ROb2RlLmNoaWxkcmVuLmxlbmd0aD0wfWZ1bmN0aW9uIFh4KGUsdCxuKXtsZXQgbz0xL01hdGgucG93KDIsbiksYT1zLmZyb21FbGVtZW50cyhlKm8tLjUsdCpvLS41LC0uNSxGVSkscj1zLmZyb21FbGVtZW50cygoZSsxKSpvLS41LCh0KzEpKm8tLjUsLjUsRFUpO3JldHVybiB1by5mcm9tQ29ybmVycyhhLHIpfWZ1bmN0aW9uIEJVKGUsdCxuLG8sYSl7cy5wYWNrKG5bMF0sZSw5KmEpLHMucGFjayhuWzFdLGUsOSphKzMpLHMucGFjayhuWzJdLGUsOSphKzYpLHRbYV09b31mdW5jdGlvbiBZeChlLHQsbil7bGV0IG89bm8ucmF5QXhpc0FsaWduZWRCb3VuZGluZ0JveCh0LGUuYWFiYixVVSk7aWYoIWcobykpcmV0dXJuO2lmKCFlLmNoaWxkcmVuLmxlbmd0aHx8ZS5idWlsZGluZ0NoaWxkcmVuKXtuLnB1c2goe25vZGU6ZSxpbnRlcnZhbDpuZXcgRW8oby5zdGFydCxvLnN0b3ApfSk7cmV0dXJufWZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKVl4KGUuY2hpbGRyZW5bcl0sdCxuKX1mdW5jdGlvbiBMVShlLHQsbixvLGEscil7bGV0IGk9dC5zb3J0KGZ1bmN0aW9uKGQsYyl7cmV0dXJuIGQuaW50ZXJ2YWwuc3RhcnQtYy5pbnRlcnZhbC5zdGFydH0pLGY9TnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGQ9MDtkPGkubGVuZ3RoO2QrKyl7bGV0IGM9aVtkXSx1PWpVKGUsbixjLm5vZGUsbyxhLHIpO2lmKGY9TWF0aC5taW4odSxmKSxmIT09TnVtYmVyLk1BWF9WQUxVRSlicmVha31pZihmIT09TnVtYmVyLk1BWF9WQUxVRSlyZXR1cm4gZHIuZ2V0UG9pbnQobixmKX1mdW5jdGlvbiBqVShlLHQsbixvLGEscil7bGV0IGk9TnVtYmVyLk1BWF9WQUxVRSxmPWUuX2VuY29kaW5nLGQ9ZS5faW5kaWNlcyxjPWUuX3ZlcnRpY2VzLHU9bi5pbnRlcnNlY3RpbmdUcmlhbmdsZXMubGVuZ3RoLGg9IShuLmxldmVsPj1JVSkmJiFuLmJ1aWxkaW5nQ2hpbGRyZW4sbSxiO2gmJihtPW5ldyBGbG9hdDY0QXJyYXkodSo5KSxiPW5ldyBVaW50MzJBcnJheSh1KSk7Zm9yKGxldCBwPTA7cDx1O3ArKyl7bGV0IHk9bi5pbnRlcnNlY3RpbmdUcmlhbmdsZXNbcF0sRT1QXyhmLGEscix0LGMsZFszKnldLG9tWzBdKSxfPVBfKGYsYSxyLHQsYyxkWzMqeSsxXSxvbVsxXSksVD1QXyhmLGEscix0LGMsZFszKnkrMl0sb21bMl0pLHc9bm8ucmF5VHJpYW5nbGVQYXJhbWV0cmljKHQsRSxfLFQsbyk7Zyh3KSYmdzxpJiZ3Pj0wJiYoaT13KSxoJiZCVShtLGIsb20seSxwKX1pZihoKXtmb3IobGV0IHA9MDtwPDQ7cCsrKW4uYWRkQ2hpbGQocCk7R1UoZS5faW52ZXJzZVRyYW5zZm9ybSxuLGIsbSl9cmV0dXJuIGl9ZnVuY3Rpb24gUF8oZSx0LG4sbyxhLHIsaSl7bGV0IGY9ZS5nZXRFeGFnZ2VyYXRlZFBvc2l0aW9uKGEscixpKTtpZih0PT09bm0uU0NFTkUzRClyZXR1cm4gZjtsZXQgYz1uLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhmLHpVKTtmPW4ucHJvamVjdChjLGkpLGY9cy5mcm9tRWxlbWVudHMoZi56LGYueCxmLnksaSk7bGV0IHU9ay5UV09fUEkqbi5lbGxpcHNvaWQubWF4aW11bVJhZGl1cyxsPU1hdGgucm91bmQoKG8ub3JpZ2luLnktZi55KS91KTtyZXR1cm4gZi55Kz1sKnUsZn1hc3luYyBmdW5jdGlvbiBHVShlLHQsbixvKXt0LmJ1aWxkaW5nQ2hpbGRyZW49ITA7bGV0IGE9bmV3IEZsb2F0NjRBcnJheSgxNik7JC5wYWNrKGUsYSwwKTtsZXQgcj1uZXcgRmxvYXQ2NEFycmF5KDI0KTtmb3IobGV0IHU9MDt1PDQ7dSsrKXMucGFjayh0LmNoaWxkcmVuW3VdLmFhYmIubWluaW11bSxyLHUqNikscy5wYWNrKHQuY2hpbGRyZW5bdV0uYWFiYi5tYXhpbXVtLHIsdSo2KzMpO2xldCBpPXthYWJiczpyLGludmVyc2VUcmFuc2Zvcm06YSx0cmlhbmdsZUluZGljZXM6bix0cmlhbmdsZVBvc2l0aW9uczpvfSxmPVtyLmJ1ZmZlcixhLmJ1ZmZlcixuLmJ1ZmZlcixvLmJ1ZmZlcl0sZD1QVS5zY2hlZHVsZVRhc2soaSxmKTtpZighZyhkKSl7dC5idWlsZGluZ0NoaWxkcmVuPSExO3JldHVybn0oYXdhaXQgZCkuaW50ZXJzZWN0aW5nVHJpYW5nbGVzQXJyYXlzLmZvckVhY2goKHUsbCk9PntnKHQuY2hpbGRyZW5bbF0pJiYodC5jaGlsZHJlbltsXS5pbnRlcnNlY3RpbmdUcmlhbmdsZXM9bmV3IFVpbnQzMkFycmF5KHUpKX0pLHQuaW50ZXJzZWN0aW5nVHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSgwKSx0LmJ1aWxkaW5nQ2hpbGRyZW49ITF9dmFyIElVLFBVLGtVLG9tLEZVLERVLFVVLHpVLEp4LFp4PVgoKCk9PntBaSgpO0llKCk7c2UoKTtwaSgpO3BuKCk7TmYoKTtXeCgpO0V0KCk7Q18oKTtsZigpO0dlKCk7SVU9MztQVT1uZXcgcXgoImluY3JlbWVudGFsbHlCdWlsZFRlcnJhaW5QaWNrZXIiKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2Xy5wcm90b3R5cGUse25lZWRzUmVidWlsZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lZWRzUmVidWlsZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX25lZWRzUmVidWlsZD1lfX19KTtrXy5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24oZSl7bGV0IHQ9bmV3IGtfO3QueD10aGlzLngqMisoZSYxKSx0Lnk9dGhpcy55KjIrKGU+PjEmMSksdC5sZXZlbD10aGlzLmxldmVsKzEsdC5hYWJiPVh4KHQueCx0LnksdC5sZXZlbCksdGhpcy5jaGlsZHJlbltlXT10fTtrVT1uZXcgZHIsb209W25ldyBzLG5ldyBzLG5ldyBzXTt2Xy5wcm90b3R5cGUucmF5SW50ZXJzZWN0PWZ1bmN0aW9uKGUsdCxuLG8sYSl7dGhpcy5fbmVlZHNSZWJ1aWxkJiZ2VSh0aGlzLHQpO2xldCByPXRoaXMuX2ludmVyc2VUcmFuc2Zvcm0saT1rVTtpLm9yaWdpbj0kLm11bHRpcGx5QnlQb2ludChyLGUub3JpZ2luLGkub3JpZ2luKSxpLmRpcmVjdGlvbj0kLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIsZS5kaXJlY3Rpb24saS5kaXJlY3Rpb24pO2xldCBmPVtdO3JldHVybiBZeCh0aGlzLl9yb290Tm9kZSxpLGYpLExVKHRoaXMsZixlLG4sbyxhKX07RlU9bmV3IHMsRFU9bmV3IHM7VVU9bmV3IEVvO3pVPW5ldyByZTtKeD12X30pO2Z1bmN0aW9uIGJkKGUsdCxuLG8sYSxyLGksZixkLGMsdSxsLGgsbSxiLHAseSl7dGhpcy5jZW50ZXI9ZSx0aGlzLnZlcnRpY2VzPXQsdGhpcy5zdHJpZGU9dT8/Nix0aGlzLmluZGljZXM9bix0aGlzLmluZGV4Q291bnRXaXRob3V0U2tpcnRzPW8sdGhpcy52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM9YSx0aGlzLm1pbmltdW1IZWlnaHQ9cix0aGlzLm1heGltdW1IZWlnaHQ9aSx0aGlzLnJlY3RhbmdsZT1mLHRoaXMuYm91bmRpbmdTcGhlcmUzRD1kLHRoaXMub2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U9Yyx0aGlzLm9yaWVudGVkQm91bmRpbmdCb3g9bCx0aGlzLmVuY29kaW5nPWgsdGhpcy53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aD1tLHRoaXMuc291dGhJbmRpY2VzRWFzdFRvV2VzdD1iLHRoaXMuZWFzdEluZGljZXNOb3J0aFRvU291dGg9cCx0aGlzLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q9eSx0aGlzLl90cmFuc2Zvcm09bmV3ICQsdGhpcy5fbGFzdFBpY2tTY2VuZU1vZGU9dm9pZCAwLHRoaXMuX3RlcnJhaW5QaWNrZXI9bmV3IEp4KHQsbixoKX1mdW5jdGlvbiBWVShlLHQpe2xldCBuPWUuZW5jb2RpbmcuZXhhZ2dlcmF0aW9uLG89ZS5lbmNvZGluZy5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxhPU9jLmdldEhlaWdodChlLm1pbmltdW1IZWlnaHQsbixvKSxyPU9jLmdldEhlaWdodChlLm1heGltdW1IZWlnaHQsbixvKSxpPXluLmZyb21SZWN0YW5nbGUoZS5yZWN0YW5nbGUsYSxyLHEuZGVmYXVsdCxlLm9yaWVudGVkQm91bmRpbmdCb3gpO3JldHVybiB5bi5jb21wdXRlVHJhbnNmb3JtYXRpb24oaSx0KSwkLmdldFNjYWxlKHQsRl8pLno8PWsuRVBTSUxPTjE2JiYoRl8uej0xLCQuc2V0U2NhbGUodCxGXyx0KSksdH1mdW5jdGlvbiBKVShlLHQsbil7bGV0IG89ZS5lbmNvZGluZy5leGFnZ2VyYXRpb24sYT1lLmVuY29kaW5nLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LHI9T2MuZ2V0SGVpZ2h0KGUubWluaW11bUhlaWdodCxvLGEpLGk9T2MuZ2V0SGVpZ2h0KGUubWF4aW11bUhlaWdodCxvLGEpLGY9dC5wcm9qZWN0KHJlLmZyb21SYWRpYW5zKGUucmVjdGFuZ2xlLndlc3QsZS5yZWN0YW5nbGUuc291dGgsMCxxVSksSFUpLGQ9dC5wcm9qZWN0KHJlLmZyb21SYWRpYW5zKGUucmVjdGFuZ2xlLmVhc3QsZS5yZWN0YW5nbGUubm9ydGgsMCxXVSksS1UpLGM9aS1yLHU9cy5mcm9tRWxlbWVudHMoZC54LWYueCxkLnktZi55LGM+MD9jOjEsWFUpLGw9cy5mcm9tRWxlbWVudHMoZi54K3UueCouNSxmLnkrdS55Ki41LHIrdS56Ki41LFlVKTtyZXR1cm4gJC5mcm9tVHJhbnNsYXRpb24obCxuKSwkLnNldFNjYWxlKG4sdSxuKSwkLm11bHRpcGx5KGNvLlNXSVpaTEVfM0RfVE9fMkRfTUFUUklYLG4sbiksbn12YXIgSFUsS1UscVUsV1UsWFUsWVUsRl8sRF8sUXg9WCgoKT0+e0NfKCk7SWUoKTtFdCgpO3NlKCk7cWUoKTtHZSgpO3BuKCk7d2koKTtaeCgpO3NyKCk7U18oKTtiZC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xhc3RQaWNrU2NlbmVNb2RlPT09ZT90aGlzLl90cmFuc2Zvcm06KHRoaXMuX3RlcnJhaW5QaWNrZXIubmVlZHNSZWJ1aWxkPSEwLCFnKGUpfHxlPT09bm0uU0NFTkUzRD9WVSh0aGlzLHRoaXMuX3RyYW5zZm9ybSk6SlUodGhpcyx0LHRoaXMuX3RyYW5zZm9ybSkpfTtIVT1uZXcgcyxLVT1uZXcgcyxxVT1uZXcgcmUsV1U9bmV3IHJlLFhVPW5ldyBzLFlVPW5ldyBzLEZfPW5ldyBzO2JkLnByb3RvdHlwZS5waWNrPWZ1bmN0aW9uKGUsdCxuLG8pe2xldCBhPXRoaXMuX3RlcnJhaW5QaWNrZXIucmF5SW50ZXJzZWN0KGUsdGhpcy5nZXRUcmFuc2Zvcm0obixvKSx0LG4sbyk7cmV0dXJuIHRoaXMuX2xhc3RQaWNrU2NlbmVNb2RlPW4sYX07YmQucHJvdG90eXBlLnVwZGF0ZUV4YWdnZXJhdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuX3RlcnJhaW5QaWNrZXIuX3ZlcnRpY2VzPXRoaXMudmVydGljZXMsdGhpcy5fdGVycmFpblBpY2tlci5uZWVkc1JlYnVpbGQ9ITAsdGhpcy5fbGFzdFBpY2tTY2VuZU1vZGU9dm9pZCAwfTtiZC5wcm90b3R5cGUudXBkYXRlU2NlbmVNb2RlPWZ1bmN0aW9uKGUpe3RoaXMuX3RlcnJhaW5QaWNrZXIubmVlZHNSZWJ1aWxkPSEwLHRoaXMuX2xhc3RQaWNrU2NlbmVNb2RlPXZvaWQgMH07RF89YmR9KTtmdW5jdGlvbiBXbigpe1d0LnRocm93SW5zdGFudGlhdGlvbkVycm9yKCl9ZnVuY3Rpb24gbk8oZSx0KXtsZXQgbj1uZXcgQXJyYXkodCksbz1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkodCkscj1uZXcgQXJyYXkoZSksaTtmb3IoaT0wO2k8ZTsrK2kpcltpXT1pLG9baV09ZSp0LTEtaTtmb3IoaT0wO2k8dDsrK2kpYVtpXT0oaSsxKSplLTEsbltpXT0odC1pLTEpKmU7cmV0dXJue3dlc3RJbmRpY2VzU291dGhUb05vcnRoOm4sc291dGhJbmRpY2VzRWFzdFRvV2VzdDpvLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOmEsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpyfX1mdW5jdGlvbiBvTyhlLHQsbixvKXtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8dC0xOysrcil7Zm9yKGxldCBpPTA7aTxlLTE7KytpKXtsZXQgZj1hLGQ9ZitlLGM9ZCsxLHU9ZisxO25bbysrXT1mLG5bbysrXT1kLG5bbysrXT11LG5bbysrXT11LG5bbysrXT1kLG5bbysrXT1jLCsrYX0rK2F9fWZ1bmN0aW9uIGFtKGUsdCxuLG8pe2xldCBhPWVbMF0scj1lLmxlbmd0aDtmb3IobGV0IGk9MTtpPHI7KytpKXtsZXQgZj1lW2ldO25bbysrXT1hLG5bbysrXT1mLG5bbysrXT10LG5bbysrXT10LG5bbysrXT1mLG5bbysrXT10KzEsYT1mLCsrdH1yZXR1cm4gb312YXIgJHgsZU8sdE8sTGksQl89WCgoKT0+e3NlKCk7SmkoKTtubigpO0dlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV24ucHJvdG90eXBlLHtlcnJvckV2ZW50OntnZXQ6V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGNyZWRpdDp7Z2V0Old0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfSx0aWxpbmdTY2hlbWU6e2dldDpXdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzV2F0ZXJNYXNrOntnZXQ6V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGhhc1ZlcnRleE5vcm1hbHM6e2dldDpXdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sYXZhaWxhYmlsaXR5OntnZXQ6V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9fSk7JHg9W107V24uZ2V0UmVndWxhckdyaWRJbmRpY2VzPWZ1bmN0aW9uKGUsdCl7bGV0IG49JHhbZV07ZyhuKXx8KCR4W2VdPW49W10pO2xldCBvPW5bdF07cmV0dXJuIGcobyl8fChlKnQ8ay5TSVhUWV9GT1VSX0tJTE9CWVRFUz9vPW5bdF09bmV3IFVpbnQxNkFycmF5KChlLTEpKih0LTEpKjYpOm89blt0XT1uZXcgVWludDMyQXJyYXkoKGUtMSkqKHQtMSkqNiksb08oZSx0LG8sMCkpLG99O2VPPVtdO1duLmdldFJlZ3VsYXJHcmlkSW5kaWNlc0FuZEVkZ2VJbmRpY2VzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZU9bZV07ZyhuKXx8KGVPW2VdPW49W10pO2xldCBvPW5bdF07aWYoIWcobykpe2xldCBhPVduLmdldFJlZ3VsYXJHcmlkSW5kaWNlcyhlLHQpLHI9bk8oZSx0KSxpPXIud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsZj1yLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsZD1yLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLGM9ci5ub3J0aEluZGljZXNXZXN0VG9FYXN0O289blt0XT17aW5kaWNlczphLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmksc291dGhJbmRpY2VzRWFzdFRvV2VzdDpmLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOmQsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpjfX1yZXR1cm4gb307dE89W107V24uZ2V0UmVndWxhckdyaWRBbmRTa2lydEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbihlLHQpe2xldCBuPXRPW2VdO2cobil8fCh0T1tlXT1uPVtdKTtsZXQgbz1uW3RdO2lmKCFnKG8pKXtsZXQgYT1lKnQscj0oZS0xKSoodC0xKSo2LGk9ZSoyK3QqMixmPU1hdGgubWF4KDAsaS00KSo2LGQ9YStpLGM9citmLHU9bk8oZSx0KSxsPXUud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsaD11LnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsbT11LmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLGI9dS5ub3J0aEluZGljZXNXZXN0VG9FYXN0LHA9a2UuY3JlYXRlVHlwZWRBcnJheShkLGMpO29PKGUsdCxwLDApLFduLmFkZFNraXJ0SW5kaWNlcyhsLGgsbSxiLGEscCxyKSxvPW5bdF09e2luZGljZXM6cCx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpsLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6aCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDptLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6YixpbmRleENvdW50V2l0aG91dFNraXJ0czpyfX1yZXR1cm4gb307V24uZ2V0U2tpcnRWZXJ0ZXhDb3VudD1mdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gZS5sZW5ndGgrdC5sZW5ndGgrbi5sZW5ndGgrby5sZW5ndGh9O1duLmdldFNraXJ0SW5kZXhDb3VudD1mdW5jdGlvbihlKXtyZXR1cm4oZS00KSoyKjN9O1duLmdldFNraXJ0SW5kZXhDb3VudFdpdGhGaWxsZWRDb3JuZXJzPWZ1bmN0aW9uKGUpe3JldHVybigoZS00KSoyKzQpKjN9O1duLmFkZFNraXJ0SW5kaWNlcz1mdW5jdGlvbihlLHQsbixvLGEscixpKXtsZXQgZj1hO2k9YW0oZSxmLHIsaSksZis9ZS5sZW5ndGgsaT1hbSh0LGYscixpKSxmKz10Lmxlbmd0aCxpPWFtKG4sZixyLGkpLGYrPW4ubGVuZ3RoLGFtKG8sZixyLGkpfTtXbi5hZGRTa2lydEluZGljZXNXaXRoRmlsbGVkQ29ybmVycz1mdW5jdGlvbihlLHQsbixvLGEscixpKXtXbi5hZGRTa2lydEluZGljZXMoZSx0LG4sbyxhLHIsaSk7bGV0IGY9V24uZ2V0U2tpcnRWZXJ0ZXhDb3VudChlLHQsbixvKSxkPVduLmdldFNraXJ0SW5kZXhDb3VudChmKSxjPWkrZCx1PWVbMF0sbD1vWzBdLGg9blswXSxtPXRbMF0sYj1hLHA9YitlLmxlbmd0aC0xLHk9cCsxLEU9eSt0Lmxlbmd0aC0xLF89RSsxLFQ9XytuLmxlbmd0aC0xLHc9VCsxLFI9dytvLmxlbmd0aC0xO3JbYyswXT11LHJbYysxXT1iLHJbYysyXT1FLHJbYyszXT1tLHJbYys0XT15LHJbYys1XT1ULHJbYys2XT1oLHJbYys3XT1fLHJbYys4XT1SLHJbYys5XT1sLHJbYysxMF09dyxyW2MrMTFdPXB9O1duLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5PS4yNTtXbi5nZXRFc3RpbWF0ZWRMZXZlbFplcm9HZW9tZXRyaWNFcnJvckZvckFIZWlnaHRtYXA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLm1heGltdW1SYWRpdXMqMipNYXRoLlBJKlduLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5Lyh0Km4pfTtXbi5wcm90b3R5cGUucmVxdWVzdFRpbGVHZW9tZXRyeT1XdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtXbi5wcm90b3R5cGUuZ2V0TGV2ZWxNYXhpbXVtR2VvbWV0cmljRXJyb3I9V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7V24ucHJvdG90eXBlLmdldFRpbGVEYXRhQXZhaWxhYmxlPVd0LnRocm93SW5zdGFudGlhdGlvbkVycm9yO1duLnByb3RvdHlwZS5sb2FkVGlsZURhdGFBdmFpbGFiaWxpdHk9V3QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7TGk9V259KTtmdW5jdGlvbiB6TChlKXtsZXQgdD1lLm1lc2hlc1swXS5wcmltaXRpdmVzWzBdLG49ZS5hY2Nlc3NvcnNbdC5hdHRyaWJ1dGVzLlBPU0lUSU9OXSxvPWUuYnVmZmVyVmlld3Nbbi5idWZmZXJWaWV3XSxhPW4uY291bnQscj1vLmV4dGVuc2lvbnM/by5leHRlbnNpb25zLkVYVF9tZXNob3B0X2NvbXByZXNzaW9uOnZvaWQgMDtpZihyPT09dm9pZCAwKXtsZXQgbT1lLmJ1ZmZlcnNbby5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlO3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG0uYnVmZmVyLG0uYnl0ZU9mZnNldCsoby5ieXRlT2Zmc2V0Pz8wKSsobi5ieXRlT2Zmc2V0Pz8wKSxhKjMpfWxldCBpPWUuYnVmZmVyc1tyLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2UsZj1uZXcgVWludDhBcnJheShpLmJ1ZmZlcixpLmJ5dGVPZmZzZXQrKHIuYnl0ZU9mZnNldD8/MCkrKG4uYnl0ZU9mZnNldD8/MCksci5ieXRlTGVuZ3RoKSxkPXIuYnl0ZVN0cmlkZSxjPWQ9PT00P1VpbnQ4QXJyYXk6VWludDE2QXJyYXksdT1uZXcgYyhhKjQpO3pzLmRlY29kZVZlcnRleEJ1ZmZlcihuZXcgVWludDhBcnJheSh1LmJ1ZmZlciksYSxkLGYpO2xldCBsPSgxPDx1LkJZVEVTX1BFUl9FTEVNRU5UKjgpLTEsaD1uZXcgRmxvYXQzMkFycmF5KGEqMyk7Zm9yKGxldCBtPTA7bTxhO20rKyloW20qMyswXT11W20qNCswXS9sLGhbbSozKzFdPXVbbSo0KzFdL2wsaFttKjMrMl09dVttKjQrMl0vbDtyZXR1cm4gaH1mdW5jdGlvbiBHTChlKXtsZXQgdD1lLm1lc2hlc1swXS5wcmltaXRpdmVzWzBdLG49ZS5hY2Nlc3NvcnNbdC5hdHRyaWJ1dGVzLk5PUk1BTF0sbz1lLmJ1ZmZlclZpZXdzW24uYnVmZmVyVmlld10sYT1uLmNvdW50LHI9by5leHRlbnNpb25zP28uZXh0ZW5zaW9ucy5FWFRfbWVzaG9wdF9jb21wcmVzc2lvbjp2b2lkIDA7aWYocj09PXZvaWQgMCl7bGV0IGw9ZS5idWZmZXJzW28uYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZTtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQrKG8uYnl0ZU9mZnNldD8/MCkrKG4uYnl0ZU9mZnNldD8/MCksYSozKX1sZXQgaT1lLmJ1ZmZlcnNbci5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlLGY9bmV3IFVpbnQ4QXJyYXkoaS5idWZmZXIsaS5ieXRlT2Zmc2V0KyhyLmJ5dGVPZmZzZXQ/PzApKyhuLmJ5dGVPZmZzZXQ/PzApLHIuYnl0ZUxlbmd0aCksZD1yLmJ5dGVTdHJpZGUsYz1uZXcgSW50OEFycmF5KGEqZCk7enMuZGVjb2RlVmVydGV4QnVmZmVyKG5ldyBVaW50OEFycmF5KGMuYnVmZmVyKSxhLGQsZik7bGV0IHU9bmV3IEZsb2F0MzJBcnJheShhKjMpO2ZvcihsZXQgbD0wO2w8YTtsKyspe2xldCBoPU1hdGgubWF4KGNbbCo0KzBdLzEyNywtMSksbT1NYXRoLm1heChjW2wqNCsxXS8xMjcsLTEpLGI9MS0oTWF0aC5hYnMoaCkrTWF0aC5hYnMobSkpO2lmKGI8MCl7bGV0IHk9aCxFPW07aD0oMS1NYXRoLmFicyhFKSkqay5zaWduTm90WmVybyh5KSxtPSgxLU1hdGguYWJzKHkpKSprLnNpZ25Ob3RaZXJvKEUpfWxldCBwPXBkO3AueD1oLHAueT1tLHAuej1iLHA9cy5ub3JtYWxpemUocCxwZCksdVtsKjMrMF09cC54LHVbbCozKzFdPXAueSx1W2wqMysyXT1wLnp9cmV0dXJuIHV9ZnVuY3Rpb24gVkwoZSl7bGV0IHQ9ZS5tZXNoZXNbMF0ucHJpbWl0aXZlc1swXSxuPWUuYWNjZXNzb3JzW3QuaW5kaWNlc10sbz1lLmJ1ZmZlclZpZXdzW24uYnVmZmVyVmlld10sYT1uLmNvdW50LHI9bi5jb21wb25lbnRUeXBlPT09bmUuVU5TSUdORURfU0hPUlQ/VWludDE2QXJyYXk6VWludDMyQXJyYXksaT1vLmV4dGVuc2lvbnM/by5leHRlbnNpb25zLkVYVF9tZXNob3B0X2NvbXByZXNzaW9uOnZvaWQgMDtpZihpPT09dm9pZCAwKXtsZXQgdT1lLmJ1ZmZlcnNbby5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlO3JldHVybiBuZXcgcih1LmJ1ZmZlcix1LmJ5dGVPZmZzZXQrKG8uYnl0ZU9mZnNldD8/MCkrKG4uYnl0ZU9mZnNldD8/MCksYSl9bGV0IGY9ZS5idWZmZXJzW2kuYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZSxkPW5ldyBVaW50OEFycmF5KGYuYnVmZmVyLGYuYnl0ZU9mZnNldCsoaS5ieXRlT2Zmc2V0Pz8wKSsobi5ieXRlT2Zmc2V0Pz8wKSxpLmJ5dGVMZW5ndGgpLGM9bmV3IHIoYSk7cmV0dXJuIHpzLmRlY29kZUluZGV4QnVmZmVyKG5ldyBVaW50OEFycmF5KGMuYnVmZmVyKSxhLGkuYnl0ZVN0cmlkZSxkKSxjfWZ1bmN0aW9uIGltKGUsdCl7bGV0IG49ZS5tZXNoZXNbMF0ucHJpbWl0aXZlc1swXSxvPWUuYWNjZXNzb3JzW24uZXh0ZW5zaW9ucy5DRVNJVU1fdGlsZV9lZGdlc1t0XV0sYT1lLmJ1ZmZlclZpZXdzW28uYnVmZmVyVmlld10scj1vLmNvdW50LGk9by5jb21wb25lbnRUeXBlPT09bmUuVU5TSUdORURfU0hPUlQ/VWludDE2QXJyYXk6VWludDMyQXJyYXksZj1hLmV4dGVuc2lvbnM/YS5leHRlbnNpb25zLkVYVF9tZXNob3B0X2NvbXByZXNzaW9uOnZvaWQgMDtpZihmPT09dm9pZCAwKXtsZXQgaD1lLmJ1ZmZlcnNbYS5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlO3JldHVybiBuZXcgaShoLmJ1ZmZlcixoLmJ5dGVPZmZzZXQrKGEuYnl0ZU9mZnNldD8/MCkrKG8uYnl0ZU9mZnNldD8/MCkscil9bGV0IGQ9ZS5idWZmZXJzW2YuYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZSxjPW5ldyBVaW50OEFycmF5KGQuYnVmZmVyLGQuYnl0ZU9mZnNldCsoZi5ieXRlT2Zmc2V0Pz8wKSsoby5ieXRlT2Zmc2V0Pz8wKSxmLmJ5dGVMZW5ndGgpLHU9bmV3IGkociksbD1mLmJ5dGVTdHJpZGU7cmV0dXJuIHpzLmRlY29kZUluZGV4U2VxdWVuY2UobmV3IFVpbnQ4QXJyYXkodS5idWZmZXIpLHIsbCxjKSx1fWZ1bmN0aW9uIEhMKGUsdCxuKXtyZXR1cm4gbi5wb3NpdGlvbnM9ekwoZSksbi5ub3JtYWxzPXQ/R0woZSk6dm9pZCAwLG4uaW5kaWNlcz1WTChlKSxuLmVkZ2VJbmRpY2VzV2VzdD1pbShlLCJsZWZ0Iiksbi5lZGdlSW5kaWNlc1NvdXRoPWltKGUsImJvdHRvbSIpLG4uZWRnZUluZGljZXNFYXN0PWltKGUsInJpZ2h0Iiksbi5lZGdlSW5kaWNlc05vcnRoPWltKGUsInRvcCIpLG59ZnVuY3Rpb24gZE8oZSx0LG4sbyxhLHIsaSxmKXtsZXR7ZW5jb2Rpbmc6ZH09ZSxjPWQuc3RyaWRlLHU9ZS52ZXJ0aWNlcyx7aGFzVmVydGV4Tm9ybWFsczpsLGhhc1dlYk1lcmNhdG9yVDpoLGV4YWdnZXJhdGlvbjptLGV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0OmJ9PWQseT1tIT09MSxFPWUudmVydGV4Q291bnRXaXRob3V0U2tpcnRzLF89RSpjLFQ9dS5sZW5ndGgvYyx3PVQtRSxSPWUuaW5kaWNlcyxTPWUuaW5kZXhDb3VudFdpdGhvdXRTa2lydHMsQz1lLndlc3RJbmRpY2VzU291dGhUb05vcnRoLEk9ZS5zb3V0aEluZGljZXNFYXN0VG9XZXN0LE49ZS5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxQPWUubm9ydGhJbmRpY2VzV2VzdFRvRWFzdDtMaS5hZGRTa2lydEluZGljZXNXaXRoRmlsbGVkQ29ybmVycyhDLEksTixQLEUsUixTKTtsZXQgdj0wLEE9ditDLmxlbmd0aCx4PUErSS5sZW5ndGgsTT14K04ubGVuZ3RoLEY9W0MsSSxOLFBdLFU9W3YsQSx4LE1dLHo9Wy0xLDAsMSwwXSxEPVswLC0xLDAsMV0sRz1zLmNsb25lKG8sQ0wpLEg9cy5jbG9uZShhLE1MKSxPPWUubWF4aW11bUhlaWdodCxaPWUubWluaW11bUhlaWdodC1mO2ZvcihsZXQgZGU9MDtkZTx3O2RlKyspe2xldCBlZT0wO2ZvcihlZT0wO2VlPDMmJiEoZGU8VVtlZSsxXSk7ZWUrKyk7bGV0IG1lPUZbZWVdW2RlLVVbZWVdXSxsZT1kLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyh1LG1lLHJPKSxiZT0xZS00LGZlPWxlLngreltlZV0qYmUsYWU9bGUueStEW2VlXSpiZSxSZT1rLmxlcnAodC53ZXN0LHQuZWFzdCxmZSksTmU9ay5jbGFtcChrLmxlcnAodC5zb3V0aCx0Lm5vcnRoLGFlKSwtay5QSV9PVkVSX1RXTywray5QSV9PVkVSX1RXTyksV2U9ZC5kZWNvZGVIZWlnaHQodSxtZSktZix0dD1yZS5mcm9tUmFkaWFucyhSZSxOZSxXZSxUTCksWGU9cmUudG9DYXJ0ZXNpYW4odHQsbixhTyksTGU7bCYmKExlPWQuZ2V0T2N0RW5jb2RlZE5vcm1hbCh1LG1lLGNPKSk7bGV0IGplO2gmJihqZT1kLmRlY29kZVdlYk1lcmNhdG9yVCh1LG1lKSk7bGV0IGl0O3kmJihpdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChYZSxzTykpLF89ZC5lbmNvZGUodSxfLFhlLGxlLFdlLExlLGplLGl0KTtsZXQgWWU9JC5tdWx0aXBseUJ5UG9pbnQoaSxYZSxPTCk7cy5taW5pbXVtQnlDb21wb25lbnQoWWUsRyxHKSxzLm1heGltdW1CeUNvbXBvbmVudChZZSxILEgpfWxldCBvZT11by5mcm9tQ29ybmVycyhHLEgsVUwpLGNlPW5ldyByYShkLmNlbnRlcixvZSxaLE8scixkLmhhc1ZlcnRleE5vcm1hbHMsZC5oYXNXZWJNZXJjYXRvclQseSxtLGIpO2lmKGQucXVhbnRpemF0aW9uIT09Y2UucXVhbnRpemF0aW9uKXtsZXQgZGU9Y2UsZWU9ZGUuc3RyaWRlLG1lPW5ldyBGbG9hdDMyQXJyYXkoVCplZSksbGU9MDtmb3IobGV0IGJlPTA7YmU8VDtiZSsrKWxlPWRlLmVuY29kZShtZSxsZSxkLmRlY29kZVBvc2l0aW9uKHUsYmUsYU8pLGQuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKHUsYmUsck8pLGQuZGVjb2RlSGVpZ2h0KHUsYmUpLGQuaGFzVmVydGV4Tm9ybWFscz9kLmdldE9jdEVuY29kZWROb3JtYWwodSxiZSxjTyk6dm9pZCAwLGQuaGFzV2ViTWVyY2F0b3JUP2QuZGVjb2RlV2ViTWVyY2F0b3JUKHUsYmUpOnZvaWQgMCxkLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM/ZC5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwodSxiZSxzTyk6dm9pZCAwKTtlLnZlcnRpY2VzPW1lLGUuc3RyaWRlPWVlLGUuZW5jb2Rpbmc9ZGV9cmV0dXJuIGV9ZnVuY3Rpb24gZk8oZSx0LG4sbyl7c3dpdGNoKG4pe2Nhc2UgTF86cmV0dXJuIGsuc2lnbihvLngtZS54KTtjYXNlIGpfOnJldHVybiBrLnNpZ24odC54LW8ueCk7Y2FzZSB6XzpyZXR1cm4gay5zaWduKG8ueS1lLnkpO2RlZmF1bHQ6cmV0dXJuIGsuc2lnbih0Lnktby55KX19ZnVuY3Rpb24gUUwoZSx0LG4sbyxhLHIpe2xldCBpLGYsZDtzd2l0Y2gobil7Y2FzZSBMXzppPShlLngtby54KS8oYS54LW8ueCksZj1lLngsZD1vLnkrKGEueS1vLnkpKmk7YnJlYWs7Y2FzZSBqXzppPSh0Lngtby54KS8oYS54LW8ueCksZj10LngsZD1vLnkrKGEueS1vLnkpKmk7YnJlYWs7Y2FzZSB6XzppPShlLnktby55KS8oYS55LW8ueSksZj1vLngrKGEueC1vLngpKmksZD1lLnk7YnJlYWs7ZGVmYXVsdDppPSh0Lnktby55KS8oYS55LW8ueSksZj1vLngrKGEueC1vLngpKmksZD10Lnk7YnJlYWt9cmV0dXJuIHMuZnJvbUVsZW1lbnRzKGYsZCxpLHIpfWZ1bmN0aW9uIGVqKGUsdCxuLG8sYSxyLGksZil7bGV0IGQ9MCxjPVlMLHU9WEwsbD0zLGg9Wkw7WS5jbG9uZShhLGhbMF0pLFkuY2xvbmUocixoWzFdKSxZLmNsb25lKGksaFsyXSk7bGV0IG09Skw7cy5mcm9tRWxlbWVudHMoMSwwLDAsbVswXSkscy5mcm9tRWxlbWVudHMoMCwxLDAsbVsxXSkscy5mcm9tRWxlbWVudHMoMCwwLDEsbVsyXSk7Zm9yKGxldCBiPTA7Yjx0O2IrKyl7bGV0IHA9KGUrYiklcUwseT1jLEU9dTtjPWgsdT1tLGQ9bCxoPXksbT1FLGw9MDtsZXQgXz1kLTEsVD1jW19dLHc9dVtfXSxSPWZPKG4sbyxwLFQpO2ZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWNbU10sST11W1NdLE49Zk8obixvLHAsQyk7aWYoUipOPT09LTEpe2xldCBQPVFMKG4sbyxwLFQsQyxXTCkse3g6dix5OkEsejp4fT1QLE09MS14LEY9dy54Kk0rSS54KngsVT13LnkqTStJLnkqeCx6PXcueipNK0kueip4O1kuZnJvbUVsZW1lbnRzKHYsQSxoW2xdKSxzLmZyb21FbGVtZW50cyhGLFUseixtW2xdKSxsKyt9Tj49MCYmKFkuY2xvbmUoQyxoW2xdKSxzLmNsb25lKEksbVtsXSksbCsrKSxfPVMsVD1DLHc9SSxSPU59aWYobD09PTApYnJlYWt9Zi5sZW5ndGg9bDtmb3IobGV0IGI9MDtiPGw7YisrKVkuY2xvbmUoaFtiXSxmLmNvb3JkaW5hdGVzW2JdKSxzLmNsb25lKG1bYl0sZi5iYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzW2JdKTtyZXR1cm4gZn1mdW5jdGlvbiB0aihlLHQsbixvLGEscixpLGYpe3JldHVybiBlaihlP3Q/el86TF86dD9qXzpLTCwyLG4sbyxhLHIsaSxmKX1mdW5jdGlvbiBvaihlLHQsbixvLGEscixpLGYsZCxjLHUsbCxoLG0sYil7bGV0IHA9e30seT1lPy41OjAsRT1lPzE6LjUsXz10Py41OjAsVD10PzE6LjUsdz1sTDt3Lng9eSx3Lnk9XztsZXQgUj1oTDtSLng9RSxSLnk9VDtsZXQgUz0wO2ZvcihsZXQgQz0wO0M8bjtDKz0zKXtsZXQgST1vW0MrMF0sTj1vW0MrMV0sUD1vW0MrMl0sdj1pLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhyLEksYkwpLEE9aS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXMocixOLHBMKSx4PWkuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKHIsUCxnTCksTT10aihlLHQsdyxSLHYsQSx4LCRMKSxGPU0ubGVuZ3RoO2lmKEY8Myljb250aW51ZTtsZXQgVT1tTDtmb3IobGV0IEg9MDtIPEY7SCsrKXtsZXQgTz1NLmJhcnljZW50cmljQ29vcmRpbmF0ZXNbSF0sWj1PLngsb2U9Ty55LGNlPU8ueixkZT1NYXRoLmNlaWwoWil8TWF0aC5jZWlsKG9lKTw8MXxNYXRoLmNlaWwoY2UpPDwyLGVlPW5qW2RlXSxtZSxsZT0hMTtpZihlZS5sZW5ndGg9PT0xKXtsZXQgYmU9ZWVbMF0sYWU9b1tDK2JlXTttZT1wW2FlXSxtZT09PXZvaWQgMCYmKGxlPSEwLG1lPVMrKyxwW2FlXT1tZSl9ZWxzZSBpZihlZS5sZW5ndGg9PT0yKXtsZXQgYmU9ZWVbMF0sZmU9ZWVbMV0sYWU9b1tDK2JlXSxSZT1vW0MrZmVdLE5lPU0uYmFyeWNlbnRyaWNDb29yZGluYXRlc1soSCtGLTEpJUZdLEplPU1hdGguY2VpbChOZS54KXxNYXRoLmNlaWwoTmUueSk8PDF8TWF0aC5jZWlsKE5lLnopPDwyLFdlPWRlPT09SmUsdHQ9TWF0aC5taW4oYWUsUmUpLFhlPU1hdGgubWF4KGFlLFJlKSxMZT1hKzIqKHR0KmErWGUpLGplPUxlKzAsaXQ9TGUrMSxZZT1wW2plXSxmdD1wW2l0XSxJdD0hV2U9PShZZT09PXZvaWQgMHx8ZnQ9PT12b2lkIDApO2lmKG1lPUl0P1llOmZ0LG1lPT09dm9pZCAwKXtsZT0hMCxtZT1TKys7bGV0IEN0PUl0P2plOml0O3BbQ3RdPW1lfX1lbHNlIGxlPSEwLG1lPVMrKztpZihVW0hdPW1lLGxlKXtsZXQgYmU9Qy8zO2gucHVzaChiZSk7bGV0IGZlPU0uY29vcmRpbmF0ZXNbSF0sYWU9KGZlLngteSkvKEUteSksUmU9KGZlLnktXykvKFQtXyk7Yi5wdXNoKGFlLFJlKSxtLnB1c2goWixvZSksYWU9PT0wP2QucHVzaChtZSk6YWU9PT0xJiZ1LnB1c2gobWUpLFJlPT09MD9jLnB1c2gobWUpOlJlPT09MSYmbC5wdXNoKG1lKX19bGV0IHo9VVswXSxEPVVbMV0sRz1VWzJdO2YucHVzaCh6LEQsRyk7Zm9yKGxldCBIPTM7SDxGO0grKylEPUcsRz1VW0hdLGYucHVzaCh6LEQsRyl9ZC5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbQyoyKzFdLWJbSSoyKzFdfSksYy5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbSSoyKzBdLWJbQyoyKzBdfSksdS5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbSSoyKzFdLWJbQyoyKzFdfSksbC5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbQyoyKzBdLWJbSSoyKzBdfSl9dmFyIFVfLFpVLFFVLCRVLGVMLHRMLG5MLG9MLGFMLHJMLGlMLGNMLHNMLHBkLGZMLGRMLHVMLHJtLGxMLGhMLG1MLGJMLHBMLGdMLF9MLHlMLEFMLHdMLEVMLFRMLFJMLGFPLHhMLE9MLFNMLENMLE1MLE5MLElMLFBMLGtMLHJPLHZMLEZMLERMLEJMLFVMLGlPLGNPLExMLHNPLGpMLExfLEtMLGpfLHpfLHFMLFdMLFhMLFlMLEpMLFpMLCRMLG5qLGNtLEdfPVgoKCk9PntNeCgpO1VyKCk7SXgoKTtBaSgpO25sKCk7TXQoKTtqdCgpO0llKCk7RXQoKTtHZSgpO3Z0KCk7cWUoKTtHcygpO210KCk7cG4oKTt3aSgpO19uKCk7VnMoKTtReCgpO0JfKCk7c3IoKTt5aSgpO1VfPXt9LFpVPXtwb3NpdGlvbnM6dm9pZCAwLG5vcm1hbHM6dm9pZCAwLGluZGljZXM6dm9pZCAwLGVkZ2VJbmRpY2VzV2VzdDp2b2lkIDAsZWRnZUluZGljZXNTb3V0aDp2b2lkIDAsZWRnZUluZGljZXNFYXN0OnZvaWQgMCxlZGdlSW5kaWNlc05vcnRoOnZvaWQgMH0sUVU9bmV3IHJlLCRVPW5ldyBzLGVMPW5ldyAkLHRMPW5ldyAkLG5MPW5ldyAkLG9MPW5ldyBzLGFMPW5ldyBzLHJMPW5ldyBzLGlMPW5ldyBzLGNMPW5ldyByZSxzTD1uZXcgWSxwZD1uZXcgcyxmTD1uZXcgWSxkTD1uZXcgcyx1TD1uZXcgcyxybT1mdW5jdGlvbihlLHQpe3JldHVybiBlLXR9O1VfLmNyZWF0ZU1lc2g9YXN5bmMgZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0e2V4YWdnZXJhdGlvbjp0PTEsZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ6bj0wLGhhc1ZlcnRleE5vcm1hbHM6byxoYXNXZWJNZXJjYXRvclQ6YSxnbHRmOnIsbWluaW11bUhlaWdodDppLG1heGltdW1IZWlnaHQ6Zixza2lydEhlaWdodDpkfT1lLHU9dCE9PTEsbD1nZS5jbG9uZShlLmJvdW5kaW5nU3BoZXJlLG5ldyBnZSksaD15bi5jbG9uZShlLm9yaWVudGVkQm91bmRpbmdCb3gsbmV3IHluKSxtPXMuY2xvbmUoZS5ob3Jpem9uT2NjbHVzaW9uUG9pbnQsbmV3IHMpLGI9cS5jbG9uZShlLmVsbGlwc29pZCxuZXcgcSkscD1TZS5jbG9uZShlLnJlY3RhbmdsZSxuZXcgU2UpO2F3YWl0KHIuZXh0ZW5zaW9uc1JlcXVpcmVkIT09dm9pZCAwJiZyLmV4dGVuc2lvbnNSZXF1aXJlZC5pbmRleE9mKCJFWFRfbWVzaG9wdF9jb21wcmVzc2lvbiIpIT09LTE/enMucmVhZHk6UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCkpO2xldCBfPXAud2VzdCxUPXAuc291dGgsdz1wLm5vcnRoLFI9cC53aWR0aCxTPXAuaGVpZ2h0LEM9U2UuY2VudGVyKHAsUVUpO0MuaGVpZ2h0PS41KihpK2YpO2xldCBJPXJlLnRvQ2FydGVzaWFuKEMsYiwkVSksTj1jby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShJLGIsZUwpLFA9JC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oTix0TCksdj0kLnVucGFjayhyLm5vZGVzWzBdLm1hdHJpeCwwLG5MKTt2PSQubXVsdGlwbHkoTnguWV9VUF9UT19aX1VQLHYsdik7bGV0IEE9SEwocixvLFpVKSx4PUxpLmdldFNraXJ0VmVydGV4Q291bnQoQS5lZGdlSW5kaWNlc1dlc3QsQS5lZGdlSW5kaWNlc1NvdXRoLEEuZWRnZUluZGljZXNFYXN0LEEuZWRnZUluZGljZXNOb3J0aCksTT1BLnBvc2l0aW9ucyxGPUEubm9ybWFscyxVPUEuaW5kaWNlcyx6PU0ubGVuZ3RoLzMsRD16K3gsRz1VLmxlbmd0aCxIPUxpLmdldFNraXJ0SW5kZXhDb3VudFdpdGhGaWxsZWRDb3JuZXJzKHgpLE89RDw9NjU1MzU/VWludDE2QXJyYXk6VWludDMyQXJyYXksWj1uZXcgTyhHK0gpO1ouc2V0KFUpO2xldCBvZT1uZXcgTyhBLmVkZ2VJbmRpY2VzV2VzdCksY2U9bmV3IE8oQS5lZGdlSW5kaWNlc1NvdXRoKSxkZT1uZXcgTyhBLmVkZ2VJbmRpY2VzRWFzdCksZWU9bmV3IE8oQS5lZGdlSW5kaWNlc05vcnRoKSxtZT1uZXcgTyhvZSkuc29ydCgpLGxlPW5ldyBPKGNlKS5zb3J0KCksYmU9bmV3IE8oZGUpLnNvcnQoKSxmZT1uZXcgTyhlZSkuc29ydCgpLGFlPVJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoVCksTmU9MS8oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSh3KS1hZSksSmU9cy5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksb0wpLFdlPXMuZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGFMKSx0dD1uZXcgcmEobC5jZW50ZXIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLG8sYSx1LHQsbiksWGU9dHQuc3RyaWRlLExlPW5ldyBGbG9hdDMyQXJyYXkoRCpYZSksamU9MDtmb3IobGV0IFllPTA7WWU8ejtZZSsrKXtsZXQgZnQ9cy51bnBhY2soTSxZZSozLHJMKSxJdD0kLm11bHRpcGx5QnlQb2ludCh2LGZ0LGlMKSxDdD1yZS5mcm9tQ2FydGVzaWFuKEl0LGIsY0wpLHtsb25naXR1ZGU6aHQsbGF0aXR1ZGU6S3QsaGVpZ2h0OlB0fT1DdCxMdD0oaHQtXykvUixLZT0oS3QtVCkvUztMdD1rLmNsYW1wKEx0LDAsMSksS2U9ay5jbGFtcChLZSwwLDEpLF9hKG1lLFllLHJtKT49MD9MdD0wOl9hKGJlLFllLHJtKT49MCYmKEx0PTEpLF9hKGxlLFllLHJtKT49MD9LZT0wOl9hKGZlLFllLHJtKT49MCYmKEtlPTEpO2xldCBWZT1ZLmZyb21FbGVtZW50cyhMdCxLZSxzTCksUnQ7aWYobyl7bGV0IG9uPXMudW5wYWNrKEYsWWUqMyxwZCk7b249JC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcih2LG9uLHBkKSxvbj1zLm5vcm1hbGl6ZShvbixwZCksUnQ9VnQub2N0RW5jb2RlKG9uLGZMKX1sZXQgRnQ7YSYmKEZ0PShSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEt0KS1hZSkqTmUpO2xldCBxdDt1JiYocXQ9Yi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSXQsZEwpKSxqZT10dC5lbmNvZGUoTGUsamUsSXQsVmUsUHQsUnQsRnQscXQpO2xldCBadD0kLm11bHRpcGx5QnlQb2ludChQLEl0LHVMKTtKZT1zLm1pbmltdW1CeUNvbXBvbmVudChadCxKZSxKZSksV2U9cy5tYXhpbXVtQnlDb21wb25lbnQoWnQsV2UsV2UpfWxldCBpdD1uZXcgRF8ocy5jbG9uZSh0dC5jZW50ZXIsbmV3IHMpLExlLFosRyx6LGksZixwLGdlLmNsb25lKGwsbmV3IGdlKSxzLmNsb25lKG0sbmV3IHMpLFhlLHluLmNsb25lKGgsbmV3IHluKSx0dCxvZSxjZSxkZSxlZSk7cmV0dXJuIGRPKGl0LHAsYixKZSxXZSxOLFAsZCksUHJvbWlzZS5yZXNvbHZlKGl0KX07bEw9bmV3IFksaEw9bmV3IFksbUw9bmV3IEFycmF5KDYpLGJMPW5ldyBZLHBMPW5ldyBZLGdMPW5ldyBZLF9MPW5ldyBzLHlMPW5ldyBzLEFMPW5ldyBzLHdMPW5ldyByZSxFTD1uZXcgcyxUTD1uZXcgcmUsUkw9bmV3IHJlLGFPPW5ldyBzLHhMPW5ldyBzLE9MPW5ldyBzLFNMPW5ldyBzLENMPW5ldyBzLE1MPW5ldyBzLE5MPW5ldyBzLElMPW5ldyBzLFBMPW5ldyAkLGtMPW5ldyAkLHJPPW5ldyBZLHZMPW5ldyBZLEZMPW5ldyBzLERMPW5ldyBnZSxCTD1uZXcgeW4sVUw9bmV3IHVvLGlPPW5ldyBzLGNPPW5ldyBZLExMPW5ldyBZLHNPPW5ldyBzLGpMPW5ldyBzO1VfLnVwc2FtcGxlTWVzaD1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXR7aXNFYXN0Q2hpbGQ6dCxpc05vcnRoQ2hpbGQ6bixwYXJlbnRNaW5pbXVtSGVpZ2h0Om8scGFyZW50TWF4aW11bUhlaWdodDphLHNraXJ0SGVpZ2h0OnJ9PWUsaT1lLnBhcmVudEluZGV4Q291bnRXaXRob3V0U2tpcnRzLGY9ZS5wYXJlbnRJbmRpY2VzLGQ9ZS5wYXJlbnRWZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsYz1lLnBhcmVudFZlcnRpY2VzLHU9cmEuY2xvbmUoZS5wYXJlbnRFbmNvZGluZyxuZXcgcmEpLGw9dS5oYXNWZXJ0ZXhOb3JtYWxzLGg9dS5oYXNXZWJNZXJjYXRvclQsbT11LmV4YWdnZXJhdGlvbixiPXUuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQseT1tIT09MSxFPVNlLmNsb25lKGUucmVjdGFuZ2xlLG5ldyBTZSksXz1xLmNsb25lKGUuZWxsaXBzb2lkKSxUPVtdLHc9W10sUj1bXSxTPVtdLEM9W10sST1bXSxOPVtdLFA9W107b2oodCxuLGksZixkLGMsdSxTLEMsSSxOLFAsVCxSLHcpO2xldCB2PVNlLmNlbnRlcihFLHdMKTt2LmhlaWdodD0uNSoobythKTtsZXQgQT1yZS50b0NhcnRlc2lhbih2LF8sRUwpLHg9VC5sZW5ndGgsTT1uZXcgcmEoQSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbCxoLHksbSxiKSxGPU0uc3RyaWRlLFU9TGkuZ2V0U2tpcnRWZXJ0ZXhDb3VudChDLEksTixQKSx6PXgrVSxEPVMubGVuZ3RoLEc9TGkuZ2V0U2tpcnRJbmRleENvdW50V2l0aEZpbGxlZENvcm5lcnMoVSksSD1EK0csTz16PD02NTUzNT9VaW50MTZBcnJheTpVaW50MzJBcnJheSxaPW5ldyBPKEgpO1ouc2V0KFMpO2xldCBvZT1uZXcgTyhDKSxjZT1uZXcgTyhJKSxkZT1uZXcgTyhOKSxlZT1uZXcgTyhQKSxtZT1uZXcgRmxvYXQzMkFycmF5KHoqRiksbGU9MCxiZT1jby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShBLF8sUEwpLGZlPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGJlLGtMKSxhZT1FLndlc3QsUmU9RS5lYXN0LE5lPUUuc291dGgsSmU9RS5ub3J0aCxXZT1Sbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKE5lKSxYZT0xLyhSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEplKS1XZSksTGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGplPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpdD1zLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOTCksWWU9cy5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksSUwpO2ZvcihsZXQgUHQ9MDtQdDx4O1B0Kyspe2xldCBMdD1UW1B0XSxLZT1mW0x0KjMrMF0sVmU9ZltMdCozKzFdLFJ0PWZbTHQqMysyXSxGdD12TDtGdC54PXdbUHQqMiswXSxGdC55PXdbUHQqMisxXTtsZXQgcXQ9RnQueCxadD1GdC55LG9uPVJbUHQqMiswXSx3bj1SW1B0KjIrMV0sRHQ9MS1vbi13bixhbj11LmRlY29kZUhlaWdodChjLEtlKSx6dD11LmRlY29kZUhlaWdodChjLFZlKSxmbj11LmRlY29kZUhlaWdodChjLFJ0KSxWbj1hbipvbit6dCp3bitmbipEdDtMZT1NYXRoLm1pbihWbixMZSksamU9TWF0aC5tYXgoVm4samUpO2xldCBIbj1rLmxlcnAoYWUsUmUscXQpLFBuPWsubGVycChOZSxKZSxadCkscm89cmUuZnJvbVJhZGlhbnMoSG4sUG4sVm4sUkwpLGt0PXJlLnRvQ2FydGVzaWFuKHJvLF8seEwpLHh0PSQubXVsdGlwbHlCeVBvaW50KGZlLGt0LFNMKTtpdD1zLm1pbmltdW1CeUNvbXBvbmVudCh4dCxpdCxpdCksWWU9cy5tYXhpbXVtQnlDb21wb25lbnQoeHQsWWUsWWUpO2xldCBPbjtpZihsKXtsZXQgR3Q9dS5kZWNvZGVOb3JtYWwoYyxLZSxfTCksZG49dS5kZWNvZGVOb3JtYWwoYyxWZSx5TCksQ289dS5kZWNvZGVOb3JtYWwoYyxSdCxBTCksdm49cy5mcm9tRWxlbWVudHMoR3QueCpvbitkbi54KnduK0NvLngqRHQsR3QueSpvbitkbi55KnduK0NvLnkqRHQsR3Queipvbitkbi56KnduK0NvLnoqRHQsaU8pO3ZuPXMubm9ybWFsaXplKHZuLGlPKSxPbj1WdC5vY3RFbmNvZGUodm4sTEwpfWxldCBrbjtoJiYoa249KFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoUG4pLVdlKSpYZSk7bGV0IEFvO3kmJihBbz1fLmdlb2RldGljU3VyZmFjZU5vcm1hbChrdCxqTCkpLGxlPU0uZW5jb2RlKG1lLGxlLGt0LEZ0LFZuLE9uLGtuLEFvKX1sZXQgZnQ9eW4uZnJvbVJlY3RhbmdsZShFLExlLGplLF8sQkwpLEl0PWdlLmZyb21WZXJ0aWNlcyhtZSxNLmNlbnRlcixGLERMKSxodD1uZXcgRXIoXykuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkKE0uY2VudGVyLG1lLEYsTS5jZW50ZXIsTGUsRkwpLEt0PW5ldyBEXyhzLmNsb25lKE0uY2VudGVyLG5ldyBzKSxtZSxaLEQseCxMZSxqZSxFLGdlLmNsb25lKEl0KSxzLmNsb25lKGh0KSxGLHluLmNsb25lKGZ0KSxNLG9lLGNlLGRlLGVlKTtyZXR1cm4gZE8oS3QsRSxfLGl0LFllLGJlLGZlLHIpLEt0fTtMXz0wLEtMPTEsal89Mix6Xz0zLHFMPTQsV0w9bmV3IHMsWEw9W25ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzXSxZTD1bbmV3IFksbmV3IFksbmV3IFksbmV3IFksbmV3IFksbmV3IFldLEpMPVtuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc10sWkw9W25ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZXTskTD17bGVuZ3RoOjAsY29vcmRpbmF0ZXM6W25ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZXSxiYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzOltuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc119O25qPVtbXSxbMF0sWzFdLFswLDFdLFsyXSxbMCwyXSxbMSwyXSxbMCwxLDJdXTtjbT1VX30pO3ZhciBWXz17fTtydChWXyx7ZGVmYXVsdDooKT0+cmp9KTtmdW5jdGlvbiBhaihlLHQpe3JldHVybiBjbS5jcmVhdGVNZXNoKGUpLnRoZW4oZnVuY3Rpb24obyl7bGV0IGE9by52ZXJ0aWNlcy5idWZmZXIscj1vLmluZGljZXMuYnVmZmVyLGk9by53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aC5idWZmZXIsZj1vLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QuYnVmZmVyLGQ9by5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aC5idWZmZXIsYz1vLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QuYnVmZmVyO3JldHVybiB0LnB1c2goYSxyLGksZixkLGMpLHt2ZXJ0aWNlc0J1ZmZlcjphLGluZGljZXNCdWZmZXI6cix2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6by52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6by5pbmRleENvdW50V2l0aG91dFNraXJ0cyxlbmNvZGluZzpvLmVuY29kaW5nLHdlc3RJbmRpY2VzQnVmZmVyOmksc291dGhJbmRpY2VzQnVmZmVyOmYsZWFzdEluZGljZXNCdWZmZXI6ZCxub3J0aEluZGljZXNCdWZmZXI6Y319KX12YXIgcmosSF89WCgoKT0+e0dfKCk7VW4oKTtyaj1BdChhail9KTt2YXIgcV89e307cnQocV8se2RlZmF1bHQ6KCk9PmhqfSk7ZnVuY3Rpb24gZ2QoZSx0LG4pe249bj8/aztsZXQgbz1lLmxlbmd0aDtmb3IobGV0IGE9MDthPG87KythKWlmKG4uZXF1YWxzRXBzaWxvbihlW2FdLHQsay5FUFNJTE9OMTIpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIHNqKGUsdCl7ZS5lbGxpcHNvaWQ9cS5jbG9uZShlLmVsbGlwc29pZCksZS5yZWN0YW5nbGU9U2UuY2xvbmUoZS5yZWN0YW5nbGUpO2xldCBuPWxqKGUuYnVmZmVyLGUucmVsYXRpdmVUb0NlbnRlcixlLmVsbGlwc29pZCxlLnJlY3RhbmdsZSxlLm5hdGl2ZVJlY3RhbmdsZSxlLmV4YWdnZXJhdGlvbixlLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LGUuc2tpcnRIZWlnaHQsZS5pbmNsdWRlV2ViTWVyY2F0b3JULGUubmVnYXRpdmVBbHRpdHVkZUV4cG9uZW50QmlhcyxlLm5lZ2F0aXZlRWxldmF0aW9uVGhyZXNob2xkKSxvPW4udmVydGljZXM7dC5wdXNoKG8uYnVmZmVyKTtsZXQgYT1uLmluZGljZXM7cmV0dXJuIHQucHVzaChhLmJ1ZmZlcikse3ZlcnRpY2VzOm8uYnVmZmVyLGluZGljZXM6YS5idWZmZXIsbnVtYmVyT2ZBdHRyaWJ1dGVzOm4uZW5jb2Rpbmcuc3RyaWRlLG1pbmltdW1IZWlnaHQ6bi5taW5pbXVtSGVpZ2h0LG1heGltdW1IZWlnaHQ6bi5tYXhpbXVtSGVpZ2h0LGJvdW5kaW5nU3BoZXJlM0Q6bi5ib3VuZGluZ1NwaGVyZTNELG9yaWVudGVkQm91bmRpbmdCb3g6bi5vcmllbnRlZEJvdW5kaW5nQm94LG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOm4ub2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2UsZW5jb2Rpbmc6bi5lbmNvZGluZyx2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6bi52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6bi5pbmRleENvdW50V2l0aG91dFNraXJ0cyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpuLndlc3RJbmRpY2VzU291dGhUb05vcnRoLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bi5zb3V0aEluZGljZXNFYXN0VG9XZXN0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOm4uZWFzdEluZGljZXNOb3J0aFRvU291dGgsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpuLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3R9fWZ1bmN0aW9uIGxqKGUsdCxuLG8sYSxyLGksZixkLGMsdSl7bGV0IGwsaCxtLGIscCx5O2cobyk/KGw9by53ZXN0LGg9by5zb3V0aCxtPW8uZWFzdCxiPW8ubm9ydGgscD1vLndpZHRoLHk9by5oZWlnaHQpOihsPWsudG9SYWRpYW5zKGEud2VzdCksaD1rLnRvUmFkaWFucyhhLnNvdXRoKSxtPWsudG9SYWRpYW5zKGEuZWFzdCksYj1rLnRvUmFkaWFucyhhLm5vcnRoKSxwPWsudG9SYWRpYW5zKG8ud2lkdGgpLHk9ay50b1JhZGlhbnMoby5oZWlnaHQpKTtsZXQgRT1baCxiXSxfPVtsLG1dLFQ9Y28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodCxuKSx3PSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKFQsdWopLFIsUztkJiYoUj1Sbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGgpLFM9MS8oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShiKS1SKSk7bGV0IEk9ciE9PTEsTj1uZXcgRGF0YVZpZXcoZSksUD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQT1majtBLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEEueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgeD1kajt4Lng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHgueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkseC56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgTT0wLEY9MCxVPTAseixEO2ZvcihEPTA7RDw0OysrRCl7bGV0IEtlPU07ej1OLmdldFVpbnQzMihLZSwhMCksS2UrPUtfO2xldCBWZT1rLnRvUmFkaWFucyhOLmdldEZsb2F0NjQoS2UsITApKjE4MCk7S2UrPVNjLGdkKF8sVmUpPT09LTEmJl8ucHVzaChWZSk7bGV0IFJ0PWsudG9SYWRpYW5zKE4uZ2V0RmxvYXQ2NChLZSwhMCkqMTgwKTtLZSs9U2MsZ2QoRSxSdCk9PT0tMSYmRS5wdXNoKFJ0KSxLZSs9MipTYztsZXQgRnQ9Ti5nZXRJbnQzMihLZSwhMCk7S2UrPXNtLEYrPUZ0LEZ0PU4uZ2V0SW50MzIoS2UsITApLFUrPUZ0KjMsTSs9eitLX31sZXQgRz1bXSxIPVtdLE89bmV3IEFycmF5KEYpLFo9bmV3IEFycmF5KEYpLG9lPW5ldyBBcnJheShGKSxjZT1kP25ldyBBcnJheShGKTpbXSxkZT1JP25ldyBBcnJheShGKTpbXSxlZT1uZXcgQXJyYXkoVSksbWU9W10sbGU9W10sYmU9W10sZmU9W10sYWU9MCxSZT0wO2ZvcihNPTAsRD0wO0Q8NDsrK0Qpe3o9Ti5nZXRVaW50MzIoTSwhMCksTSs9S187bGV0IEtlPU0sVmU9ay50b1JhZGlhbnMoTi5nZXRGbG9hdDY0KE0sITApKjE4MCk7TSs9U2M7bGV0IFJ0PWsudG9SYWRpYW5zKE4uZ2V0RmxvYXQ2NChNLCEwKSoxODApO00rPVNjO2xldCBGdD1rLnRvUmFkaWFucyhOLmdldEZsb2F0NjQoTSwhMCkqMTgwKSxxdD1GdCouNTtNKz1TYztsZXQgWnQ9ay50b1JhZGlhbnMoTi5nZXRGbG9hdDY0KE0sITApKjE4MCksb249WnQqLjU7TSs9U2M7bGV0IHduPU4uZ2V0SW50MzIoTSwhMCk7TSs9c207bGV0IER0PU4uZ2V0SW50MzIoTSwhMCk7TSs9c20sTSs9c207bGV0IGFuPW5ldyBBcnJheSh3bik7Zm9yKGxldCBmbj0wO2ZuPHduOysrZm4pe2xldCBWbj1WZStOLmdldFVpbnQ4KE0rKykqRnQ7Qm8ubG9uZ2l0dWRlPVZuO2xldCBIbj1SdCtOLmdldFVpbnQ4KE0rKykqWnQ7Qm8ubGF0aXR1ZGU9SG47bGV0IFBuPU4uZ2V0RmxvYXQzMihNLCEwKTtpZihNKz1jaixQbiE9PTAmJlBuPHUmJihQbio9LU1hdGgucG93KDIsYykpLFBuKj02MzcxMDEwLEJvLmhlaWdodD1QbixnZChfLFZuKSE9PS0xfHxnZChFLEhuKSE9PS0xKXtsZXQgT249Z2QoRyxCbyxyZSk7aWYoT249PT0tMSlHLnB1c2gocmUuY2xvbmUoQm8pKSxILnB1c2goYWUpO2Vsc2V7YW5bZm5dPUhbT25dO2NvbnRpbnVlfX1hbltmbl09YWUsTWF0aC5hYnMoVm4tbCk8cXQ/bWUucHVzaCh7aW5kZXg6YWUsY2FydG9ncmFwaGljOnJlLmNsb25lKEJvKX0pOk1hdGguYWJzKFZuLW0pPHF0P2JlLnB1c2goe2luZGV4OmFlLGNhcnRvZ3JhcGhpYzpyZS5jbG9uZShCbyl9KTpNYXRoLmFicyhIbi1oKTxvbj9sZS5wdXNoKHtpbmRleDphZSxjYXJ0b2dyYXBoaWM6cmUuY2xvbmUoQm8pfSk6TWF0aC5hYnMoSG4tYik8b24mJmZlLnB1c2goe2luZGV4OmFlLGNhcnRvZ3JhcGhpYzpyZS5jbG9uZShCbyl9KSxQPU1hdGgubWluKFBuLFApLHY9TWF0aC5tYXgoUG4sdiksb2VbYWVdPVBuO2xldCBybz1uLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEJvKTtpZihPW2FlXT1ybyxkJiYoY2VbYWVdPShSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEhuKS1SKSpTKSxJKXtsZXQgT249bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocm8pO2RlW2FlXT1Pbn0kLm11bHRpcGx5QnlQb2ludCh3LHJvLEhzKSxzLm1pbmltdW1CeUNvbXBvbmVudChIcyxBLEEpLHMubWF4aW11bUJ5Q29tcG9uZW50KEhzLHgseCk7bGV0IGt0PShWbi1sKS8obS1sKTtrdD1rLmNsYW1wKGt0LDAsMSk7bGV0IHh0PShIbi1oKS8oYi1oKTt4dD1rLmNsYW1wKHh0LDAsMSksWlthZV09bmV3IFkoa3QseHQpLCsrYWV9bGV0IHp0PUR0KjM7Zm9yKGxldCBmbj0wO2ZuPHp0OysrZm4sKytSZSllZVtSZV09YW5bTi5nZXRVaW50MTYoTSwhMCldLE0rPWlqO2lmKHohPT1NLUtlKXRocm93IG5ldyB1dCgiSW52YWxpZCB0ZXJyYWluIHRpbGUuIil9Ty5sZW5ndGg9YWUsWi5sZW5ndGg9YWUsb2UubGVuZ3RoPWFlLGQmJihjZS5sZW5ndGg9YWUpLEkmJihkZS5sZW5ndGg9YWUpO2xldCBOZT1hZSxKZT1SZSxXZT17aE1pbjpQLGxhc3RCb3JkZXJQb2ludDp2b2lkIDAsc2tpcnRIZWlnaHQ6Zix0b0VOVTp3LGVsbGlwc29pZDpuLG1pbmltdW06QSxtYXhpbXVtOnh9O21lLnNvcnQoZnVuY3Rpb24oS2UsVmUpe3JldHVybiBWZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtS2UuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksbGUuc29ydChmdW5jdGlvbihLZSxWZSl7cmV0dXJuIEtlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtVmUuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pLGJlLnNvcnQoZnVuY3Rpb24oS2UsVmUpe3JldHVybiBLZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtVmUuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksZmUuc29ydChmdW5jdGlvbihLZSxWZSl7cmV0dXJuIFZlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtS2UuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pO2xldCB0dD0xZS01O2lmKGZtKE8sb2UsWixjZSxkZSxlZSxXZSxtZSwtdHQqcCwhMCwtdHQqeSksZm0oTyxvZSxaLGNlLGRlLGVlLFdlLGxlLC10dCp5LCExKSxmbShPLG9lLFosY2UsZGUsZWUsV2UsYmUsdHQqcCwhMCx0dCp5KSxmbShPLG9lLFosY2UsZGUsZWUsV2UsZmUsdHQqeSwhMSksbWUubGVuZ3RoPjAmJmZlLmxlbmd0aD4wKXtsZXQgS2U9bWVbMF0uaW5kZXgsVmU9TmUsUnQ9ZmVbZmUubGVuZ3RoLTFdLmluZGV4LEZ0PU8ubGVuZ3RoLTE7ZWUucHVzaChSdCxGdCxWZSxWZSxLZSxSdCl9Rj1PLmxlbmd0aDtsZXQgWGU9Z2UuZnJvbVBvaW50cyhPKSxMZTtnKG8pJiYoTGU9eW4uZnJvbVJlY3RhbmdsZShvLFAsdixuKSk7bGV0IGl0PW5ldyBFcihuKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQodCxPLFApLFllPW5ldyB1byhBLHgsdCksZnQ9bmV3IHJhKHQsWWUsV2UuaE1pbix2LFQsITEsZCxJLHIsaSksSXQ9bmV3IEZsb2F0MzJBcnJheShGKmZ0LnN0cmlkZSksQ3Q9MDtmb3IobGV0IEtlPTA7S2U8RjsrK0tlKUN0PWZ0LmVuY29kZShJdCxDdCxPW0tlXSxaW0tlXSxvZVtLZV0sdm9pZCAwLGNlW0tlXSxkZVtLZV0pO2xldCBodD1tZS5tYXAoZnVuY3Rpb24oS2Upe3JldHVybiBLZS5pbmRleH0pLnJldmVyc2UoKSxLdD1sZS5tYXAoZnVuY3Rpb24oS2Upe3JldHVybiBLZS5pbmRleH0pLnJldmVyc2UoKSxQdD1iZS5tYXAoZnVuY3Rpb24oS2Upe3JldHVybiBLZS5pbmRleH0pLnJldmVyc2UoKSxMdD1mZS5tYXAoZnVuY3Rpb24oS2Upe3JldHVybiBLZS5pbmRleH0pLnJldmVyc2UoKTtyZXR1cm4gS3QudW5zaGlmdChQdFtQdC5sZW5ndGgtMV0pLEt0LnB1c2goaHRbMF0pLEx0LnVuc2hpZnQoaHRbaHQubGVuZ3RoLTFdKSxMdC5wdXNoKFB0WzBdKSx7dmVydGljZXM6SXQsaW5kaWNlczpuZXcgVWludDE2QXJyYXkoZWUpLG1heGltdW1IZWlnaHQ6dixtaW5pbXVtSGVpZ2h0OlAsZW5jb2Rpbmc6ZnQsYm91bmRpbmdTcGhlcmUzRDpYZSxvcmllbnRlZEJvdW5kaW5nQm94OkxlLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOml0LHZlcnRleENvdW50V2l0aG91dFNraXJ0czpOZSxpbmRleENvdW50V2l0aG91dFNraXJ0czpKZSx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpodCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Okt0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOlB0LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6THR9fWZ1bmN0aW9uIGZtKGUsdCxuLG8sYSxyLGksZixkLGMsdSl7bGV0IGw9Zi5sZW5ndGg7Zm9yKGxldCBoPTA7aDxsOysraCl7bGV0IG09ZltoXSxiPW0uY2FydG9ncmFwaGljLHA9bS5pbmRleCx5PWUubGVuZ3RoLEU9Yi5sb25naXR1ZGUsXz1iLmxhdGl0dWRlO189ay5jbGFtcChfLC1rLlBJX09WRVJfVFdPLGsuUElfT1ZFUl9UV08pO2xldCBUPWIuaGVpZ2h0LWkuc2tpcnRIZWlnaHQ7aS5oTWluPU1hdGgubWluKGkuaE1pbixUKSxyZS5mcm9tUmFkaWFucyhFLF8sVCxCbyksYyYmKEJvLmxvbmdpdHVkZSs9ZCksYz9oPT09bC0xP0JvLmxhdGl0dWRlKz11Omg9PT0wJiYoQm8ubGF0aXR1ZGUtPXUpOkJvLmxhdGl0dWRlKz1kO2xldCB3PWkuZWxsaXBzb2lkLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEJvKTtlLnB1c2godyksdC5wdXNoKFQpLG4ucHVzaChZLmNsb25lKG5bcF0pKSxvLmxlbmd0aD4wJiZvLnB1c2gob1twXSksYS5sZW5ndGg+MCYmYS5wdXNoKGFbcF0pLCQubXVsdGlwbHlCeVBvaW50KGkudG9FTlUsdyxIcyk7bGV0IFI9aS5taW5pbXVtLFM9aS5tYXhpbXVtO3MubWluaW11bUJ5Q29tcG9uZW50KEhzLFIsUikscy5tYXhpbXVtQnlDb21wb25lbnQoSHMsUyxTKTtsZXQgQz1pLmxhc3RCb3JkZXJQb2ludDtpZihnKEMpKXtsZXQgST1DLmluZGV4O3IucHVzaChJLHktMSx5LHkscCxJKX1pLmxhc3RCb3JkZXJQb2ludD1tfX12YXIgaWosc20sS18sY2osU2MsQm8sSHMsZmosZGosdWosaGosV189WCgoKT0+e0FpKCk7TXQoKTtqdCgpO0llKCk7RXQoKTtzZSgpO3FlKCk7R3MoKTtHZSgpO3BuKCk7d2koKTtfbigpO2phKCk7VnMoKTtzcigpO3lpKCk7VW4oKTtpaj1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxzbT1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULEtfPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULGNqPUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxTYz1GbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Qm89bmV3IHJlLEhzPW5ldyBzLGZqPW5ldyBzLGRqPW5ldyBzLHVqPW5ldyAkO2hqPUF0KHNqKX0pO3ZhciBtaix1TyxsTz1YKCgpPT57bWo9e05PTkU6MCxMRVJDOjF9LHVPPU9iamVjdC5mcmVlemUobWopfSk7dmFyIFRyLFhfLGJqLHBqLGdqLGhPLG1PPVgoKCk9PntBaSgpO010KCk7anQoKTtJZSgpO3NlKCk7cWUoKTtHcygpO0dlKCk7cG4oKTt3aSgpO19uKCk7VnMoKTtzcigpO3lpKCk7VHI9e307VHIuREVGQVVMVF9TVFJVQ1RVUkU9T2JqZWN0LmZyZWV6ZSh7aGVpZ2h0U2NhbGU6MSxoZWlnaHRPZmZzZXQ6MCxlbGVtZW50c1BlckhlaWdodDoxLHN0cmlkZToxLGVsZW1lbnRNdWx0aXBsaWVyOjI1Nixpc0JpZ0VuZGlhbjohMX0pO1hfPW5ldyBzLGJqPW5ldyAkLHBqPW5ldyBzLGdqPW5ldyBzO1RyLmNvbXB1dGVWZXJ0aWNlcz1mdW5jdGlvbihlKXtsZXQgdD1NYXRoLmNvcyxuPU1hdGguc2luLG89TWF0aC5zcXJ0LGE9TWF0aC5hdGFuLHI9TWF0aC5leHAsaT1rLlBJX09WRVJfVFdPLGY9ay50b1JhZGlhbnMsZD1lLmhlaWdodG1hcCxjPWUud2lkdGgsdT1lLmhlaWdodCxsPWUuc2tpcnRIZWlnaHQsaD1sPjAsbT1lLmlzR2VvZ3JhcGhpYz8/ITAsYj1lLmVsbGlwc29pZD8/cS5kZWZhdWx0LHA9MS9iLm1heGltdW1SYWRpdXMseT1TZS5jbG9uZShlLm5hdGl2ZVJlY3RhbmdsZSksRT1TZS5jbG9uZShlLnJlY3RhbmdsZSksXyxULHcsUjtnKEUpPyhfPUUud2VzdCxUPUUuc291dGgsdz1FLmVhc3QsUj1FLm5vcnRoKTptPyhfPWYoeS53ZXN0KSxUPWYoeS5zb3V0aCksdz1mKHkuZWFzdCksUj1mKHkubm9ydGgpKTooXz15Lndlc3QqcCxUPWktMiphKHIoLXkuc291dGgqcCkpLHc9eS5lYXN0KnAsUj1pLTIqYShyKC15Lm5vcnRoKnApKSk7bGV0IFM9ZS5yZWxhdGl2ZVRvQ2VudGVyLEM9ZyhTKTtTPUM/UzpzLlpFUk87bGV0IEk9ZS5pbmNsdWRlV2ViTWVyY2F0b3JUPz8hMSxOPWUuZXhhZ2dlcmF0aW9uPz8xLFA9ZS5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodD8/MCxBPU4hPT0xLHg9ZS5zdHJ1Y3R1cmU/P1RyLkRFRkFVTFRfU1RSVUNUVVJFLE09eC5oZWlnaHRTY2FsZT8/VHIuREVGQVVMVF9TVFJVQ1RVUkUuaGVpZ2h0U2NhbGUsRj14LmhlaWdodE9mZnNldD8/VHIuREVGQVVMVF9TVFJVQ1RVUkUuaGVpZ2h0T2Zmc2V0LFU9eC5lbGVtZW50c1BlckhlaWdodD8/VHIuREVGQVVMVF9TVFJVQ1RVUkUuZWxlbWVudHNQZXJIZWlnaHQsej14LnN0cmlkZT8/VHIuREVGQVVMVF9TVFJVQ1RVUkUuc3RyaWRlLEQ9eC5lbGVtZW50TXVsdGlwbGllcj8/VHIuREVGQVVMVF9TVFJVQ1RVUkUuZWxlbWVudE11bHRpcGxpZXIsRz14LmlzQmlnRW5kaWFuPz9Uci5ERUZBVUxUX1NUUlVDVFVSRS5pc0JpZ0VuZGlhbixIPVNlLmNvbXB1dGVXaWR0aCh5KSxPPVNlLmNvbXB1dGVIZWlnaHQoeSksWj1ILyhjLTEpLG9lPU8vKHUtMSk7bXx8KEgqPXAsTyo9cCk7bGV0IGNlPWIucmFkaWlTcXVhcmVkLGRlPWNlLngsZWU9Y2UueSxtZT1jZS56LGxlPTY1NTM2LGJlPS02NTUzNixmZT1jby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShTLGIpLGFlPSQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGZlLGJqKSxSZSxOZTtJJiYoUmU9Um4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShUKSxOZT0xLyhSbi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFIpLVJlKSk7bGV0IEplPXBqO0plLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEplLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEplLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBXZT1najtXZS54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxXZS55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxXZS56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgdHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFhlPWMqdSxMZT1sPjA/YyoyK3UqMjowLGplPVhlK0xlLGl0PW5ldyBBcnJheShqZSksWWU9bmV3IEFycmF5KGplKSxmdD1uZXcgQXJyYXkoamUpLEl0PUk/bmV3IEFycmF5KGplKTpbXSxDdD1BP25ldyBBcnJheShqZSk6W10saHQ9MCxLdD11LFB0PTAsTHQ9YztoJiYoLS1odCwrK0t0LC0tUHQsKytMdCk7bGV0IEtlPTFlLTU7Zm9yKGxldCBEdD1odDtEdDxLdDsrK0R0KXtsZXQgYW49RHQ7YW48MCYmKGFuPTApLGFuPj11JiYoYW49dS0xKTtsZXQgenQ9eS5ub3J0aC1vZSphbjttP3p0PWYoenQpOnp0PWktMiphKHIoLXp0KnApKTtsZXQgZm49KHp0LVQpLyhSLVQpO2ZuPWsuY2xhbXAoZm4sMCwxKTtsZXQgVm49RHQ9PT1odCxIbj1EdD09PUt0LTE7bD4wJiYoVm4/enQrPUtlKk86SG4mJih6dC09S2UqTykpO2xldCBQbj10KHp0KSxybz1uKHp0KSxrdD1tZSpybyx4dDtJJiYoeHQ9KFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoenQpLVJlKSpOZSk7Zm9yKGxldCBPbj1QdDtPbjxMdDsrK09uKXtsZXQga249T247a248MCYmKGtuPTApLGtuPj1jJiYoa249Yy0xKTtsZXQgQW89YW4qKGMqeikra24qeixHdDtpZihVPT09MSlHdD1kW0FvXTtlbHNle0d0PTA7bGV0IHdvO2lmKEcpZm9yKHdvPTA7d288VTsrK3dvKUd0PUd0KkQrZFtBbyt3b107ZWxzZSBmb3Iod289VS0xO3dvPj0wOy0td28pR3Q9R3QqRCtkW0FvK3dvXX1HdD1HdCpNK0YsYmU9TWF0aC5tYXgoYmUsR3QpLGxlPU1hdGgubWluKGxlLEd0KTtsZXQgZG49eS53ZXN0K1oqa247bT9kbj1mKGRuKTpkbj1kbipwO2xldCBDbz0oZG4tXykvKHctXyk7Q289ay5jbGFtcChDbywwLDEpO2xldCB2bj1hbipjK2tuO2lmKGw+MCl7bGV0IHdvPU9uPT09UHQsVWE9T249PT1MdC0xLHZjPVZufHxIbnx8d298fFVhO2lmKChWbnx8SG4pJiYod298fFVhKSljb250aW51ZTt2YyYmKEd0LT1sLHdvPyh2bj1YZSsodS1hbi0xKSxkbi09S2UqSCk6SG4/dm49WGUrdSsoYy1rbi0xKTpVYT8odm49WGUrdStjK2FuLGRuKz1LZSpIKTpWbiYmKHZuPVhlK3UrYyt1K2tuKSl9bGV0IFdvPVBuKnQoZG4pLERhPVBuKm4oZG4pLHppPWRlKldvLEdpPWVlKkRhLEJhPTEvbyh6aSpXbytHaSpEYStrdCpybyksYWk9emkqQmEsVmk9R2kqQmEsU3I9a3QqQmEsaG89bmV3IHM7aG8ueD1haStXbypHdCxoby55PVZpK0RhKkd0LGhvLno9U3Ircm8qR3QsJC5tdWx0aXBseUJ5UG9pbnQoYWUsaG8sWF8pLHMubWluaW11bUJ5Q29tcG9uZW50KFhfLEplLEplKSxzLm1heGltdW1CeUNvbXBvbmVudChYXyxXZSxXZSksdHQ9TWF0aC5taW4odHQsR3QpLGl0W3ZuXT1obyxmdFt2bl09bmV3IFkoQ28sZm4pLFllW3ZuXT1HdCxJJiYoSXRbdm5dPXh0KSxBJiYoQ3Rbdm5dPWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGhvKSl9fWxldCBWZT1nZS5mcm9tUG9pbnRzKGl0KSxSdDtnKEUpJiYoUnQ9eW4uZnJvbVJlY3RhbmdsZShFLGxlLGJlLGIpKTtsZXQgRnQ7QyYmKEZ0PW5ldyBFcihiKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQoUyxpdCxsZSkpO2xldCBxdD1uZXcgdW8oSmUsV2UsUyksWnQ9bmV3IHJhKFMscXQsdHQsYmUsZmUsITEsSSxBLE4sUCksb249bmV3IEZsb2F0MzJBcnJheShqZSpadC5zdHJpZGUpLHduPTA7Zm9yKGxldCBEdD0wO0R0PGplOysrRHQpd249WnQuZW5jb2RlKG9uLHduLGl0W0R0XSxmdFtEdF0sWWVbRHRdLHZvaWQgMCxJdFtEdF0sQ3RbRHRdKTtyZXR1cm57dmVydGljZXM6b24sbWF4aW11bUhlaWdodDpiZSxtaW5pbXVtSGVpZ2h0OmxlLGVuY29kaW5nOlp0LGJvdW5kaW5nU3BoZXJlM0Q6VmUsb3JpZW50ZWRCb3VuZGluZ0JveDpSdCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpGdH19O2hPPVRyfSk7dmFyIGJPPWVvKChEZGUsZG0pPT57LyogQ29weXJpZ2h0IDIwMTUtMjAxOCBFc3JpLiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEBwcmVzZXJ2ZSAqLyhmdW5jdGlvbigpe3ZhciBlPShmdW5jdGlvbigpe3ZhciBhPXt9O2EuZGVmYXVsdE5vRGF0YVZhbHVlPS0zNDAyNzk5OTM4NzkwMTQ4NGUyMixhLmRlY29kZT1mdW5jdGlvbih1LGwpe2w9bHx8e307dmFyIGg9bC5lbmNvZGVkTWFza0RhdGF8fGwuZW5jb2RlZE1hc2tEYXRhPT09bnVsbCxtPWQodSxsLmlucHV0T2Zmc2V0fHwwLGgpLGI9bC5ub0RhdGFWYWx1ZSE9PW51bGw/bC5ub0RhdGFWYWx1ZTphLmRlZmF1bHROb0RhdGFWYWx1ZSxwPXIobSxsLnBpeGVsVHlwZXx8RmxvYXQzMkFycmF5LGwuZW5jb2RlZE1hc2tEYXRhLGIsbC5yZXR1cm5NYXNrKSx5PXt3aWR0aDptLndpZHRoLGhlaWdodDptLmhlaWdodCxwaXhlbERhdGE6cC5yZXN1bHRQaXhlbHMsbWluVmFsdWU6cC5taW5WYWx1ZSxtYXhWYWx1ZTptLnBpeGVscy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpifTtyZXR1cm4gcC5yZXN1bHRNYXNrJiYoeS5tYXNrRGF0YT1wLnJlc3VsdE1hc2spLGwucmV0dXJuRW5jb2RlZE1hc2smJm0ubWFzayYmKHkuZW5jb2RlZE1hc2tEYXRhPW0ubWFzay5iaXRzZXQ/bS5tYXNrLmJpdHNldDpudWxsKSxsLnJldHVybkZpbGVJbmZvJiYoeS5maWxlSW5mbz1pKG0pLGwuY29tcHV0ZVVzZWRCaXREZXB0aHMmJih5LmZpbGVJbmZvLmJpdERlcHRocz1mKG0pKSkseX07dmFyIHI9ZnVuY3Rpb24odSxsLGgsbSxiKXt2YXIgcD0wLHk9dS5waXhlbHMubnVtQmxvY2tzWCxFPXUucGl4ZWxzLm51bUJsb2Nrc1ksXz1NYXRoLmZsb29yKHUud2lkdGgveSksVD1NYXRoLmZsb29yKHUuaGVpZ2h0L0UpLHc9Mip1Lm1heFpFcnJvcixSPU51bWJlci5NQVhfVkFMVUUsUztoPWh8fCh1Lm1hc2s/dS5tYXNrLmJpdHNldDpudWxsKTt2YXIgQyxJO0M9bmV3IGwodS53aWR0aCp1LmhlaWdodCksYiYmaCYmKEk9bmV3IFVpbnQ4QXJyYXkodS53aWR0aCp1LmhlaWdodCkpO2Zvcih2YXIgTj1uZXcgRmxvYXQzMkFycmF5KF8qVCksUCx2LEE9MDtBPD1FO0ErKyl7dmFyIHg9QSE9PUU/VDp1LmhlaWdodCVFO2lmKHghPT0wKWZvcih2YXIgTT0wO008PXk7TSsrKXt2YXIgRj1NIT09eT9fOnUud2lkdGgleTtpZihGIT09MCl7dmFyIFU9QSp1LndpZHRoKlQrTSpfLHo9dS53aWR0aC1GLEQ9dS5waXhlbHMuYmxvY2tzW3BdLEcsSCxPO0QuZW5jb2Rpbmc8Mj8oRC5lbmNvZGluZz09PTA/Rz1ELnJhd0RhdGE6KGMoRC5zdHVmZmVkRGF0YSxELmJpdHNQZXJQaXhlbCxELm51bVZhbGlkUGl4ZWxzLEQub2Zmc2V0LHcsTix1LnBpeGVscy5tYXhWYWx1ZSksRz1OKSxIPTApOkQuZW5jb2Rpbmc9PT0yP089MDpPPUQub2Zmc2V0O3ZhciBaO2lmKGgpZm9yKHY9MDt2PHg7disrKXtmb3IoVSY3JiYoWj1oW1U+PjNdLFo8PD1VJjcpLFA9MDtQPEY7UCsrKVUmN3x8KFo9aFtVPj4zXSksWiYxMjg/KEkmJihJW1VdPTEpLFM9RC5lbmNvZGluZzwyP0dbSCsrXTpPLFI9Uj5TP1M6UixDW1UrK109Uyk6KEkmJihJW1VdPTApLENbVSsrXT1tKSxaPDw9MTtVKz16fWVsc2UgaWYoRC5lbmNvZGluZzwyKWZvcih2PTA7djx4O3YrKyl7Zm9yKFA9MDtQPEY7UCsrKVM9R1tIKytdLFI9Uj5TP1M6UixDW1UrK109UztVKz16fWVsc2UgZm9yKFI9Uj5PP086Uix2PTA7djx4O3YrKyl7Zm9yKFA9MDtQPEY7UCsrKUNbVSsrXT1PO1UrPXp9aWYoRC5lbmNvZGluZz09PTEmJkghPT1ELm51bVZhbGlkUGl4ZWxzKXRocm93IkJsb2NrIGFuZCBNYXNrIGRvIG5vdCBtYXRjaCI7cCsrfX19cmV0dXJue3Jlc3VsdFBpeGVsczpDLHJlc3VsdE1hc2s6SSxtaW5WYWx1ZTpSfX0saT1mdW5jdGlvbih1KXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6dS5maWxlSWRlbnRpZmllclN0cmluZyxmaWxlVmVyc2lvbjp1LmZpbGVWZXJzaW9uLGltYWdlVHlwZTp1LmltYWdlVHlwZSxoZWlnaHQ6dS5oZWlnaHQsd2lkdGg6dS53aWR0aCxtYXhaRXJyb3I6dS5tYXhaRXJyb3IsZW9mT2Zmc2V0OnUuZW9mT2Zmc2V0LG1hc2s6dS5tYXNrP3tudW1CbG9ja3NYOnUubWFzay5udW1CbG9ja3NYLG51bUJsb2Nrc1k6dS5tYXNrLm51bUJsb2Nrc1ksbnVtQnl0ZXM6dS5tYXNrLm51bUJ5dGVzLG1heFZhbHVlOnUubWFzay5tYXhWYWx1ZX06bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6dS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOnUucGl4ZWxzLm51bUJsb2Nrc1ksbnVtQnl0ZXM6dS5waXhlbHMubnVtQnl0ZXMsbWF4VmFsdWU6dS5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6dS5ub0RhdGFWYWx1ZX19fSxmPWZ1bmN0aW9uKHUpe2Zvcih2YXIgbD11LnBpeGVscy5udW1CbG9ja3NYKnUucGl4ZWxzLm51bUJsb2Nrc1ksaD17fSxtPTA7bTxsO20rKyl7dmFyIGI9dS5waXhlbHMuYmxvY2tzW21dO2IuZW5jb2Rpbmc9PT0wP2guZmxvYXQzMj0hMDpiLmVuY29kaW5nPT09MT9oW2IuYml0c1BlclBpeGVsXT0hMDpoWzBdPSEwfXJldHVybiBPYmplY3Qua2V5cyhoKX0sZD1mdW5jdGlvbih1LGwsaCl7dmFyIG09e30sYj1uZXcgVWludDhBcnJheSh1LGwsMTApO2lmKG0uZmlsZUlkZW50aWZpZXJTdHJpbmc9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGIpLG0uZmlsZUlkZW50aWZpZXJTdHJpbmcudHJpbSgpIT09IkNudFpJbWFnZSIpdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK20uZmlsZUlkZW50aWZpZXJTdHJpbmc7bCs9MTA7dmFyIHA9bmV3IERhdGFWaWV3KHUsbCwyNCk7aWYobS5maWxlVmVyc2lvbj1wLmdldEludDMyKDAsITApLG0uaW1hZ2VUeXBlPXAuZ2V0SW50MzIoNCwhMCksbS5oZWlnaHQ9cC5nZXRVaW50MzIoOCwhMCksbS53aWR0aD1wLmdldFVpbnQzMigxMiwhMCksbS5tYXhaRXJyb3I9cC5nZXRGbG9hdDY0KDE2LCEwKSxsKz0yNCwhaClpZihwPW5ldyBEYXRhVmlldyh1LGwsMTYpLG0ubWFzaz17fSxtLm1hc2subnVtQmxvY2tzWT1wLmdldFVpbnQzMigwLCEwKSxtLm1hc2subnVtQmxvY2tzWD1wLmdldFVpbnQzMig0LCEwKSxtLm1hc2subnVtQnl0ZXM9cC5nZXRVaW50MzIoOCwhMCksbS5tYXNrLm1heFZhbHVlPXAuZ2V0RmxvYXQzMigxMiwhMCksbCs9MTYsbS5tYXNrLm51bUJ5dGVzPjApe3ZhciB5PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChtLndpZHRoKm0uaGVpZ2h0LzgpKTtwPW5ldyBEYXRhVmlldyh1LGwsbS5tYXNrLm51bUJ5dGVzKTt2YXIgRT1wLmdldEludDE2KDAsITApLF89MixUPTA7ZG97aWYoRT4wKWZvcig7RS0tOyl5W1QrK109cC5nZXRVaW50OChfKyspO2Vsc2V7dmFyIHc9cC5nZXRVaW50OChfKyspO2ZvcihFPS1FO0UtLTspeVtUKytdPXd9RT1wLmdldEludDE2KF8sITApLF8rPTJ9d2hpbGUoXzxtLm1hc2subnVtQnl0ZXMpO2lmKEUhPT0tMzI3Njh8fFQ8eS5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO20ubWFzay5iaXRzZXQ9eSxsKz1tLm1hc2subnVtQnl0ZXN9ZWxzZShtLm1hc2subnVtQnl0ZXN8bS5tYXNrLm51bUJsb2Nrc1l8bS5tYXNrLm1heFZhbHVlKT09PTAmJihtLm1hc2suYml0c2V0PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChtLndpZHRoKm0uaGVpZ2h0LzgpKSk7cD1uZXcgRGF0YVZpZXcodSxsLDE2KSxtLnBpeGVscz17fSxtLnBpeGVscy5udW1CbG9ja3NZPXAuZ2V0VWludDMyKDAsITApLG0ucGl4ZWxzLm51bUJsb2Nrc1g9cC5nZXRVaW50MzIoNCwhMCksbS5waXhlbHMubnVtQnl0ZXM9cC5nZXRVaW50MzIoOCwhMCksbS5waXhlbHMubWF4VmFsdWU9cC5nZXRGbG9hdDMyKDEyLCEwKSxsKz0xNjt2YXIgUj1tLnBpeGVscy5udW1CbG9ja3NYLFM9bS5waXhlbHMubnVtQmxvY2tzWSxDPVIrKG0ud2lkdGglUj4wPzE6MCksST1TKyhtLmhlaWdodCVTPjA/MTowKTttLnBpeGVscy5ibG9ja3M9bmV3IEFycmF5KEMqSSk7Zm9yKHZhciBOPTAsUD0wO1A8STtQKyspZm9yKHZhciB2PTA7djxDO3YrKyl7dmFyIEE9MCx4PXUuYnl0ZUxlbmd0aC1sO3A9bmV3IERhdGFWaWV3KHUsbCxNYXRoLm1pbigxMCx4KSk7dmFyIE09e307bS5waXhlbHMuYmxvY2tzW04rK109TTt2YXIgRj1wLmdldFVpbnQ4KDApO2lmKEErKyxNLmVuY29kaW5nPUYmNjMsTS5lbmNvZGluZz4zKXRocm93IkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrTS5lbmNvZGluZysiKSI7aWYoTS5lbmNvZGluZz09PTIpe2wrKztjb250aW51ZX1pZihGIT09MCYmRiE9PTIpe2lmKEY+Pj02LE0ub2Zmc2V0VHlwZT1GLEY9PT0yKU0ub2Zmc2V0PXAuZ2V0SW50OCgxKSxBKys7ZWxzZSBpZihGPT09MSlNLm9mZnNldD1wLmdldEludDE2KDEsITApLEErPTI7ZWxzZSBpZihGPT09MClNLm9mZnNldD1wLmdldEZsb2F0MzIoMSwhMCksQSs9NDtlbHNlIHRocm93IkludmFsaWQgYmxvY2sgb2Zmc2V0IHR5cGUiO2lmKE0uZW5jb2Rpbmc9PT0xKWlmKEY9cC5nZXRVaW50OChBKSxBKyssTS5iaXRzUGVyUGl4ZWw9RiY2MyxGPj49NixNLm51bVZhbGlkUGl4ZWxzVHlwZT1GLEY9PT0yKU0ubnVtVmFsaWRQaXhlbHM9cC5nZXRVaW50OChBKSxBKys7ZWxzZSBpZihGPT09MSlNLm51bVZhbGlkUGl4ZWxzPXAuZ2V0VWludDE2KEEsITApLEErPTI7ZWxzZSBpZihGPT09MClNLm51bVZhbGlkUGl4ZWxzPXAuZ2V0VWludDMyKEEsITApLEErPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIHZhbGlkIHBpeGVsIGNvdW50IHR5cGUifWlmKGwrPUEsTS5lbmNvZGluZyE9PTMpe3ZhciBVLHo7aWYoTS5lbmNvZGluZz09PTApe3ZhciBEPShtLnBpeGVscy5udW1CeXRlcy0xKS80O2lmKEQhPT1NYXRoLmZsb29yKEQpKXRocm93InVuY29tcHJlc3NlZCBibG9jayBoYXMgaW52YWxpZCBsZW5ndGgiO1U9bmV3IEFycmF5QnVmZmVyKEQqNCksej1uZXcgVWludDhBcnJheShVKSx6LnNldChuZXcgVWludDhBcnJheSh1LGwsRCo0KSk7dmFyIEc9bmV3IEZsb2F0MzJBcnJheShVKTtNLnJhd0RhdGE9RyxsKz1EKjR9ZWxzZSBpZihNLmVuY29kaW5nPT09MSl7dmFyIEg9TWF0aC5jZWlsKE0ubnVtVmFsaWRQaXhlbHMqTS5iaXRzUGVyUGl4ZWwvOCksTz1NYXRoLmNlaWwoSC80KTtVPW5ldyBBcnJheUJ1ZmZlcihPKjQpLHo9bmV3IFVpbnQ4QXJyYXkoVSksei5zZXQobmV3IFVpbnQ4QXJyYXkodSxsLEgpKSxNLnN0dWZmZWREYXRhPW5ldyBVaW50MzJBcnJheShVKSxsKz1IfX19cmV0dXJuIG0uZW9mT2Zmc2V0PWwsbX0sYz1mdW5jdGlvbih1LGwsaCxtLGIscCx5KXt2YXIgRT0oMTw8bCktMSxfPTAsVCx3PTAsUixTLEM9TWF0aC5jZWlsKCh5LW0pL2IpLEk9dS5sZW5ndGgqNC1NYXRoLmNlaWwobCpoLzgpO2Zvcih1W3UubGVuZ3RoLTFdPDw9OCpJLFQ9MDtUPGg7VCsrKXtpZih3PT09MCYmKFM9dVtfKytdLHc9MzIpLHc+PWwpUj1TPj4+dy1sJkUsdy09bDtlbHNle3ZhciBOPWwtdztSPShTJkUpPDxOJkUsUz11W18rK10sdz0zMi1OLFIrPVM+Pj53fXBbVF09UjxDP20rUipiOnl9cmV0dXJuIHB9O3JldHVybiBhfSkoKSx0PShmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT17dW5zdHVmZjpmdW5jdGlvbihkLGMsdSxsLGgsbSxiLHApe3ZhciB5PSgxPDx1KS0xLEU9MCxfLFQ9MCx3LFIsUyxDLEk9ZC5sZW5ndGgqNC1NYXRoLmNlaWwodSpsLzgpO2lmKGRbZC5sZW5ndGgtMV08PD04KkksaClmb3IoXz0wO188bDtfKyspVD09PTAmJihSPWRbRSsrXSxUPTMyKSxUPj11Pyh3PVI+Pj5ULXUmeSxULT11KTooUz11LVQsdz0oUiZ5KTw8UyZ5LFI9ZFtFKytdLFQ9MzItUyx3Kz1SPj4+VCksY1tfXT1oW3ddO2Vsc2UgZm9yKEM9TWF0aC5jZWlsKChwLW0pL2IpLF89MDtfPGw7XysrKVQ9PT0wJiYoUj1kW0UrK10sVD0zMiksVD49dT8odz1SPj4+VC11JnksVC09dSk6KFM9dS1ULHc9KFImeSk8PFMmeSxSPWRbRSsrXSxUPTMyLVMsdys9Uj4+PlQpLGNbX109dzxDP20rdypiOnB9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oZCxjLHUsbCxoLG0pe3ZhciBiPSgxPDxjKS0xLHA9MCx5PTAsRT0wLF89MCxUPTAsdyxSPVtdLFM9ZC5sZW5ndGgqNC1NYXRoLmNlaWwoYyp1LzgpO2RbZC5sZW5ndGgtMV08PD04KlM7dmFyIEM9TWF0aC5jZWlsKChtLWwpL2gpO2Zvcih5PTA7eTx1O3krKylfPT09MCYmKHc9ZFtwKytdLF89MzIpLF8+PWM/KFQ9dz4+Pl8tYyZiLF8tPWMpOihFPWMtXyxUPSh3JmIpPDxFJmIsdz1kW3ArK10sXz0zMi1FLFQrPXc+Pj5fKSxSW3ldPVQ8Qz9sK1QqaDptO3JldHVybiBSLnVuc2hpZnQobCksUn0sdW5zdHVmZjI6ZnVuY3Rpb24oZCxjLHUsbCxoLG0sYixwKXt2YXIgeT0oMTw8dSktMSxFPTAsXyxUPTAsdz0wLFIsUyxDO2lmKGgpZm9yKF89MDtfPGw7XysrKVQ9PT0wJiYoUz1kW0UrK10sVD0zMix3PTApLFQ+PXU/KFI9Uz4+PncmeSxULT11LHcrPXUpOihDPXUtVCxSPVM+Pj53JnksUz1kW0UrK10sVD0zMi1DLFJ8PShTJigxPDxDKS0xKTw8dS1DLHc9QyksY1tfXT1oW1JdO2Vsc2V7dmFyIEk9TWF0aC5jZWlsKChwLW0pL2IpO2ZvcihfPTA7XzxsO18rKylUPT09MCYmKFM9ZFtFKytdLFQ9MzIsdz0wKSxUPj11PyhSPVM+Pj53JnksVC09dSx3Kz11KTooQz11LVQsUj1TPj4+dyZ5LFM9ZFtFKytdLFQ9MzItQyxSfD0oUyYoMTw8QyktMSk8PHUtQyx3PUMpLGNbX109UjxJP20rUipiOnB9cmV0dXJuIGN9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGQsYyx1LGwsaCxtKXt2YXIgYj0oMTw8YyktMSxwPTAseT0wLEU9MCxfPTAsVD0wLHc9MCxSLFM9W10sQz1NYXRoLmNlaWwoKG0tbCkvaCk7Zm9yKHk9MDt5PHU7eSsrKV89PT0wJiYoUj1kW3ArK10sXz0zMix3PTApLF8+PWM/KFQ9Uj4+PncmYixfLT1jLHcrPWMpOihFPWMtXyxUPVI+Pj53JmIsUj1kW3ArK10sXz0zMi1FLFR8PShSJigxPDxFKS0xKTw8Yy1FLHc9RSksU1t5XT1UPEM/bCtUKmg6bTtyZXR1cm4gUy51bnNoaWZ0KGwpLFN9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihkLGMsdSxsKXt2YXIgaD0oMTw8dSktMSxtPTAsYixwPTAseSxFLF8sVD1kLmxlbmd0aCo0LU1hdGguY2VpbCh1KmwvOCk7Zm9yKGRbZC5sZW5ndGgtMV08PD04KlQsYj0wO2I8bDtiKyspcD09PTAmJihFPWRbbSsrXSxwPTMyKSxwPj11Pyh5PUU+Pj5wLXUmaCxwLT11KTooXz11LXAseT0oRSZoKTw8XyZoLEU9ZFttKytdLHA9MzItXyx5Kz1FPj4+cCksY1tiXT15O3JldHVybiBjfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGQsYyx1LGwpe3ZhciBoPSgxPDx1KS0xLG09MCxiLHA9MCx5PTAsRSxfLFQ7Zm9yKGI9MDtiPGw7YisrKXA9PT0wJiYoXz1kW20rK10scD0zMix5PTApLHA+PXU/KEU9Xz4+PnkmaCxwLT11LHkrPXUpOihUPXUtcCxFPV8+Pj55JmgsXz1kW20rK10scD0zMi1ULEV8PShfJigxPDxUKS0xKTw8dS1ULHk9VCksY1tiXT1FO3JldHVybiBjfX0scj17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihkKXtmb3IodmFyIGM9NjU1MzUsdT02NTUzNSxsPWQubGVuZ3RoLGg9TWF0aC5mbG9vcihsLzIpLG09MDtoOyl7dmFyIGI9aD49MzU5PzM1OTpoO2gtPWI7ZG8gYys9ZFttKytdPDw4LHUrPWMrPWRbbSsrXTt3aGlsZSgtLWIpO2M9KGMmNjU1MzUpKyhjPj4+MTYpLHU9KHUmNjU1MzUpKyh1Pj4+MTYpfXJldHVybiBsJjEmJih1Kz1jKz1kW21dPDw4KSxjPShjJjY1NTM1KSsoYz4+PjE2KSx1PSh1JjY1NTM1KSsodT4+PjE2KSwodTw8MTZ8Yyk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihkLGMpe3ZhciB1PWMucHRyLGw9bmV3IFVpbnQ4QXJyYXkoZCx1LDYpLGg9e307aWYoaC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbCksaC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK2guZmlsZUlkZW50aWZpZXJTdHJpbmc7dSs9Njt2YXIgbT1uZXcgRGF0YVZpZXcoZCx1LDgpLGI9bS5nZXRJbnQzMigwLCEwKTtoLmZpbGVWZXJzaW9uPWIsdSs9NCxiPj0zJiYoaC5jaGVja3N1bT1tLmdldFVpbnQzMig0LCEwKSx1Kz00KSxtPW5ldyBEYXRhVmlldyhkLHUsMTIpLGguaGVpZ2h0PW0uZ2V0VWludDMyKDAsITApLGgud2lkdGg9bS5nZXRVaW50MzIoNCwhMCksdSs9OCxiPj00PyhoLm51bURpbXM9bS5nZXRVaW50MzIoOCwhMCksdSs9NCk6aC5udW1EaW1zPTEsbT1uZXcgRGF0YVZpZXcoZCx1LDQwKSxoLm51bVZhbGlkUGl4ZWw9bS5nZXRVaW50MzIoMCwhMCksaC5taWNyb0Jsb2NrU2l6ZT1tLmdldEludDMyKDQsITApLGguYmxvYlNpemU9bS5nZXRJbnQzMig4LCEwKSxoLmltYWdlVHlwZT1tLmdldEludDMyKDEyLCEwKSxoLm1heFpFcnJvcj1tLmdldEZsb2F0NjQoMTYsITApLGguek1pbj1tLmdldEZsb2F0NjQoMjQsITApLGguek1heD1tLmdldEZsb2F0NjQoMzIsITApLHUrPTQwLGMuaGVhZGVySW5mbz1oLGMucHRyPXU7dmFyIHAseTtpZihiPj0zJiYoeT1iPj00PzUyOjQ4LHA9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGQsdS15LGguYmxvYlNpemUtMTQpKSxwIT09aC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGQsYyl7dmFyIHU9Yy5oZWFkZXJJbmZvLGw9dGhpcy5nZXREYXRhVHlwZUFycmF5KHUuaW1hZ2VUeXBlKSxoPXUubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZSh1LmltYWdlVHlwZSksbT10aGlzLnJlYWRTdWJBcnJheShkLGMucHRyLGwsaCksYj10aGlzLnJlYWRTdWJBcnJheShkLGMucHRyK2gsbCxoKTtjLnB0cis9MipoO3ZhciBwLHk9ITA7Zm9yKHA9MDtwPHUubnVtRGltcztwKyspaWYobVtwXSE9PWJbcF0pe3k9ITE7YnJlYWt9cmV0dXJuIHUubWluVmFsdWVzPW0sdS5tYXhWYWx1ZXM9Yix5fSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oZCxjLHUsbCl7dmFyIGg7aWYodT09PVVpbnQ4QXJyYXkpaD1uZXcgVWludDhBcnJheShkLGMsbCk7ZWxzZXt2YXIgbT1uZXcgQXJyYXlCdWZmZXIobCksYj1uZXcgVWludDhBcnJheShtKTtiLnNldChuZXcgVWludDhBcnJheShkLGMsbCkpLGg9bmV3IHUobSl9cmV0dXJuIGh9LHJlYWRNYXNrOmZ1bmN0aW9uKGQsYyl7dmFyIHU9Yy5wdHIsbD1jLmhlYWRlckluZm8saD1sLndpZHRoKmwuaGVpZ2h0LG09bC5udW1WYWxpZFBpeGVsLGI9bmV3IERhdGFWaWV3KGQsdSw0KSxwPXt9O2lmKHAubnVtQnl0ZXM9Yi5nZXRVaW50MzIoMCwhMCksdSs9NCwobT09PTB8fGg9PT1tKSYmcC5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgeSxFO2lmKG09PT0wKXk9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGgvOCkpLHAuYml0c2V0PXksRT1uZXcgVWludDhBcnJheShoKSxjLnBpeGVscy5yZXN1bHRNYXNrPUUsdSs9cC5udW1CeXRlcztlbHNlIGlmKHAubnVtQnl0ZXM+MCl7eT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoaC84KSksYj1uZXcgRGF0YVZpZXcoZCx1LHAubnVtQnl0ZXMpO3ZhciBfPWIuZ2V0SW50MTYoMCwhMCksVD0yLHc9MCxSPTA7ZG97aWYoXz4wKWZvcig7Xy0tOyl5W3crK109Yi5nZXRVaW50OChUKyspO2Vsc2UgZm9yKFI9Yi5nZXRVaW50OChUKyspLF89LV87Xy0tOyl5W3crK109UjtfPWIuZ2V0SW50MTYoVCwhMCksVCs9Mn13aGlsZShUPHAubnVtQnl0ZXMpO2lmKF8hPT0tMzI3Njh8fHc8eS5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO0U9bmV3IFVpbnQ4QXJyYXkoaCk7dmFyIFM9MCxDPTA7Zm9yKEM9MDtDPGg7QysrKUMmNz8oUz15W0M+PjNdLFM8PD1DJjcpOlM9eVtDPj4zXSxTJjEyOCYmKEVbQ109MSk7Yy5waXhlbHMucmVzdWx0TWFzaz1FLHAuYml0c2V0PXksdSs9cC5udW1CeXRlc31yZXR1cm4gYy5wdHI9dSxjLm1hc2s9cCwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihkLGMsdSl7dmFyIGw9Yy5wdHIsaD1jLmhlYWRlckluZm8sbT1oLm51bURpbXMsYj1oLndpZHRoKmguaGVpZ2h0LHA9aC5pbWFnZVR5cGUseT1oLm51bVZhbGlkUGl4ZWwqci5nZXREYXRhVHlwZVNpemUocCkqbSxFLF89Yy5waXhlbHMucmVzdWx0TWFzaztpZih1PT09VWludDhBcnJheSlFPW5ldyBVaW50OEFycmF5KGQsbCx5KTtlbHNle3ZhciBUPW5ldyBBcnJheUJ1ZmZlcih5KSx3PW5ldyBVaW50OEFycmF5KFQpO3cuc2V0KG5ldyBVaW50OEFycmF5KGQsbCx5KSksRT1uZXcgdShUKX1pZihFLmxlbmd0aD09PWIqbSljLnBpeGVscy5yZXN1bHRQaXhlbHM9RTtlbHNle2MucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgdShiKm0pO3ZhciBSPTAsUz0wLEM9MCxJPTA7aWYobT4xKWZvcihDPTA7QzxtO0MrKylmb3IoST1DKmIsUz0wO1M8YjtTKyspX1tTXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tJK1NdPUVbUisrXSk7ZWxzZSBmb3IoUz0wO1M8YjtTKyspX1tTXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tTXT1FW1IrK10pfXJldHVybiBsKz15LGMucHRyPWwsITB9LHJlYWRIdWZmbWFuVHJlZTpmdW5jdGlvbihkLGMpe3ZhciB1PXRoaXMuSFVGRk1BTl9MVVRfQklUU19NQVgsbD1uZXcgRGF0YVZpZXcoZCxjLnB0ciwxNik7Yy5wdHIrPTE2O3ZhciBoPWwuZ2V0SW50MzIoMCwhMCk7aWYoaDwyKXRocm93InVuc3VwcG9ydGVkIEh1ZmZtYW4gdmVyc2lvbiI7dmFyIG09bC5nZXRJbnQzMig0LCEwKSxiPWwuZ2V0SW50MzIoOCwhMCkscD1sLmdldEludDMyKDEyLCEwKTtpZihiPj1wKXJldHVybiExO3ZhciB5PW5ldyBVaW50MzJBcnJheShwLWIpO3IuZGVjb2RlQml0cyhkLGMseSk7dmFyIEU9W10sXyxULHcsUjtmb3IoXz1iO188cDtfKyspVD1fLShfPG0/MDptKSxFW1RdPXtmaXJzdDp5W18tYl0sc2Vjb25kOm51bGx9O3ZhciBTPWQuYnl0ZUxlbmd0aC1jLnB0cixDPU1hdGguY2VpbChTLzQpLEk9bmV3IEFycmF5QnVmZmVyKEMqNCksTj1uZXcgVWludDhBcnJheShJKTtOLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLFMpKTt2YXIgUD1uZXcgVWludDMyQXJyYXkoSSksdj0wLEEseD0wO2ZvcihBPVBbMF0sXz1iO188cDtfKyspVD1fLShfPG0/MDptKSxSPUVbVF0uZmlyc3QsUj4wJiYoRVtUXS5zZWNvbmQ9QTw8dj4+PjMyLVIsMzItdj49Uj8odis9Uix2PT09MzImJih2PTAseCsrLEE9UFt4XSkpOih2Kz1SLTMyLHgrKyxBPVBbeF0sRVtUXS5zZWNvbmR8PUE+Pj4zMi12KSk7dmFyIE09MCxGPTAsVT1uZXcgaTtmb3IoXz0wO188RS5sZW5ndGg7XysrKUVbX10hPT12b2lkIDAmJihNPU1hdGgubWF4KE0sRVtfXS5maXJzdCkpO00+PXU/Rj11OkY9TSxNPj0zMCYmY29uc29sZS5sb2coIldBUm5pbmcsIGxhcmdlIE5VTSBMVVQgQklUUyBJUyAiK00pO3ZhciB6PVtdLEQsRyxILE8sWixvZTtmb3IoXz1iO188cDtfKyspaWYoVD1fLShfPG0/MDptKSxSPUVbVF0uZmlyc3QsUj4wKWlmKEQ9W1IsVF0sUjw9Rilmb3IoRz1FW1RdLnNlY29uZDw8Ri1SLEg9MTw8Ri1SLHc9MDt3PEg7dysrKXpbR3x3XT1EO2Vsc2UgZm9yKEc9RVtUXS5zZWNvbmQsb2U9VSxPPVItMTtPPj0wO08tLSlaPUc+Pj5PJjEsWj8ob2UucmlnaHR8fChvZS5yaWdodD1uZXcgaSksb2U9b2UucmlnaHQpOihvZS5sZWZ0fHwob2UubGVmdD1uZXcgaSksb2U9b2UubGVmdCksTz09PTAmJiFvZS52YWwmJihvZS52YWw9RFsxXSk7cmV0dXJue2RlY29kZUx1dDp6LG51bUJpdHNMVVRRaWNrOkYsbnVtQml0c0xVVDpNLHRyZWU6VSxzdHVmZmVkRGF0YTpQLHNyY1B0cjp4LGJpdFBvczp2fX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oZCxjLHUpe3ZhciBsPWMuaGVhZGVySW5mbyxoPWwubnVtRGltcyxtPWMuaGVhZGVySW5mby5oZWlnaHQsYj1jLmhlYWRlckluZm8ud2lkdGgscD1iKm0seT10aGlzLnJlYWRIdWZmbWFuVHJlZShkLGMpLEU9eS5kZWNvZGVMdXQsXz15LnRyZWUsVD15LnN0dWZmZWREYXRhLHc9eS5zcmNQdHIsUj15LmJpdFBvcyxTPXkubnVtQml0c0xVVFFpY2ssQz15Lm51bUJpdHNMVVQsST1jLmhlYWRlckluZm8uaW1hZ2VUeXBlPT09MD8xMjg6MCxOLFAsdixBPWMucGl4ZWxzLnJlc3VsdE1hc2sseCxNLEYsVSx6LEQsRyxIPTA7Uj4wJiYodysrLFI9MCk7dmFyIE89VFt3XSxaPWMuZW5jb2RlTW9kZT09PTEsb2U9bmV3IHUocCpoKSxjZT1vZSxkZTtmb3IoZGU9MDtkZTxsLm51bURpbXM7ZGUrKyl7aWYoaD4xJiYoY2U9bmV3IHUob2UuYnVmZmVyLHAqZGUscCksSD0wKSxjLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWIqbSlmb3IoRD0wLFU9MDtVPG07VSsrKWZvcih6PTA7ejxiO3orKyxEKyspe2lmKFA9MCx4PU88PFI+Pj4zMi1TLE09eCwzMi1SPFMmJih4fD1UW3crMV0+Pj42NC1SLVMsTT14KSxFW01dKVA9RVtNXVsxXSxSKz1FW01dWzBdO2Vsc2UgZm9yKHg9Tzw8Uj4+PjMyLUMsTT14LDMyLVI8QyYmKHh8PVRbdysxXT4+PjY0LVItQyxNPXgpLE49XyxHPTA7RzxDO0crKylpZihGPXg+Pj5DLUctMSYxLE49Rj9OLnJpZ2h0Ok4ubGVmdCwhKE4ubGVmdHx8Ti5yaWdodCkpe1A9Ti52YWwsUj1SK0crMTticmVha31SPj0zMiYmKFItPTMyLHcrKyxPPVRbd10pLHY9UC1JLFo/KHo+MD92Kz1IOlU+MD92Kz1jZVtELWJdOnYrPUgsdiY9MjU1LGNlW0RdPXYsSD12KTpjZVtEXT12fWVsc2UgZm9yKEQ9MCxVPTA7VTxtO1UrKylmb3Ioej0wO3o8Yjt6KyssRCsrKWlmKEFbRF0pe2lmKFA9MCx4PU88PFI+Pj4zMi1TLE09eCwzMi1SPFMmJih4fD1UW3crMV0+Pj42NC1SLVMsTT14KSxFW01dKVA9RVtNXVsxXSxSKz1FW01dWzBdO2Vsc2UgZm9yKHg9Tzw8Uj4+PjMyLUMsTT14LDMyLVI8QyYmKHh8PVRbdysxXT4+PjY0LVItQyxNPXgpLE49XyxHPTA7RzxDO0crKylpZihGPXg+Pj5DLUctMSYxLE49Rj9OLnJpZ2h0Ok4ubGVmdCwhKE4ubGVmdHx8Ti5yaWdodCkpe1A9Ti52YWwsUj1SK0crMTticmVha31SPj0zMiYmKFItPTMyLHcrKyxPPVRbd10pLHY9UC1JLFo/KHo+MCYmQVtELTFdP3YrPUg6VT4wJiZBW0QtYl0/dis9Y2VbRC1iXTp2Kz1ILHYmPTI1NSxjZVtEXT12LEg9dik6Y2VbRF09dn1jLnB0cj1jLnB0cisodysxKSo0KyhSPjA/NDowKX1jLnBpeGVscy5yZXN1bHRQaXhlbHM9b2V9LGRlY29kZUJpdHM6ZnVuY3Rpb24oZCxjLHUsbCxoKXt7dmFyIG09Yy5oZWFkZXJJbmZvLGI9bS5maWxlVmVyc2lvbixwPTAseT1uZXcgRGF0YVZpZXcoZCxjLnB0ciw1KSxFPXkuZ2V0VWludDgoMCk7cCsrO3ZhciBfPUU+PjYsVD1fPT09MD80OjMtXyx3PShFJjMyKT4wLFI9RSYzMSxTPTA7aWYoVD09PTEpUz15LmdldFVpbnQ4KHApLHArKztlbHNlIGlmKFQ9PT0yKVM9eS5nZXRVaW50MTYocCwhMCkscCs9MjtlbHNlIGlmKFQ9PT00KVM9eS5nZXRVaW50MzIocCwhMCkscCs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIEM9MiptLm1heFpFcnJvcixJLE4sUCx2LEEseCxNLEYsVSx6LEQ9bS5udW1EaW1zPjE/bS5tYXhWYWx1ZXNbaF06bS56TWF4O2lmKHcpe2ZvcihjLmNvdW50ZXIubHV0KyssRj15LmdldFVpbnQ4KHApLFU9UixwKyssdj1NYXRoLmNlaWwoKEYtMSkqUi84KSxBPU1hdGguY2VpbCh2LzQpLE49bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShOKSxjLnB0cis9cCxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLHYpKSxNPW5ldyBVaW50MzJBcnJheShOKSxjLnB0cis9dix6PTA7Ri0xPj4+ejspeisrO3Y9TWF0aC5jZWlsKFMqei84KSxBPU1hdGguY2VpbCh2LzQpLE49bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShOKSxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLHYpKSxJPW5ldyBVaW50MzJBcnJheShOKSxjLnB0cis9dixiPj0zP3g9YS51bnN0dWZmTFVUMihNLFIsRi0xLGwsQyxEKTp4PWEudW5zdHVmZkxVVChNLFIsRi0xLGwsQyxEKSxiPj0zP2EudW5zdHVmZjIoSSx1LHosUyx4KTphLnVuc3R1ZmYoSSx1LHosUyx4KX1lbHNlIGMuY291bnRlci5iaXRzdHVmZmVyKyssej1SLGMucHRyKz1wLHo+MCYmKHY9TWF0aC5jZWlsKFMqei84KSxBPU1hdGguY2VpbCh2LzQpLE49bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShOKSxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLHYpKSxJPW5ldyBVaW50MzJBcnJheShOKSxjLnB0cis9dixiPj0zP2w9PW51bGw/YS5vcmlnaW5hbFVuc3R1ZmYyKEksdSx6LFMpOmEudW5zdHVmZjIoSSx1LHosUywhMSxsLEMsRCk6bD09bnVsbD9hLm9yaWdpbmFsVW5zdHVmZihJLHUseixTKTphLnVuc3R1ZmYoSSx1LHosUywhMSxsLEMsRCkpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGQsYyx1KXt2YXIgbD1jLmhlYWRlckluZm8saD1sLndpZHRoLG09bC5oZWlnaHQsYj1sLm1pY3JvQmxvY2tTaXplLHA9bC5pbWFnZVR5cGUseT1yLmdldERhdGFUeXBlU2l6ZShwKSxFPU1hdGguY2VpbChoL2IpLF89TWF0aC5jZWlsKG0vYik7Yy5waXhlbHMubnVtQmxvY2tzWT1fLGMucGl4ZWxzLm51bUJsb2Nrc1g9RSxjLnBpeGVscy5wdHI9MDt2YXIgVD0wLHc9MCxSPTAsUz0wLEM9MCxJPTAsTj0wLFA9MCx2PTAsQT0wLHg9MCxNPTAsRj0wLFU9MCx6PTAsRD0wLEcsSCxPLFosb2UsY2UsZGU9bmV3IHUoYipiKSxlZT1tJWJ8fGIsbWU9aCVifHxiLGxlLGJlLGZlPWwubnVtRGltcyxhZSxSZT1jLnBpeGVscy5yZXN1bHRNYXNrLE5lPWMucGl4ZWxzLnJlc3VsdFBpeGVscztmb3IoUj0wO1I8XztSKyspZm9yKEM9UiE9PV8tMT9iOmVlLFM9MDtTPEU7UysrKWZvcihJPVMhPT1FLTE/YjptZSx4PVIqaCpiK1MqYixNPWgtSSxhZT0wO2FlPGZlO2FlKyspe2lmKGZlPjEmJihOZT1uZXcgdShjLnBpeGVscy5yZXN1bHRQaXhlbHMuYnVmZmVyLGgqbSphZSp5LGgqbSkpLE49ZC5ieXRlTGVuZ3RoLWMucHRyLEc9bmV3IERhdGFWaWV3KGQsYy5wdHIsTWF0aC5taW4oMTAsTikpLEg9e30sRD0wLFA9Ry5nZXRVaW50OCgwKSxEKyssdj1QPj42JjI1NSxBPVA+PjImMTUsQSE9PShTKmI+PjMmMTUpKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoY2U9UCYzLGNlPjMpdGhyb3cgYy5wdHIrPUQsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrY2UrIikiO2lmKGNlPT09Mil7Yy5jb3VudGVyLmNvbnN0YW50KyssYy5wdHIrPUQ7Y29udGludWV9ZWxzZSBpZihjZT09PTApe2lmKGMuY291bnRlci51bmNvbXByZXNzZWQrKyxjLnB0cis9RCxGPUMqSSp5LFU9ZC5ieXRlTGVuZ3RoLWMucHRyLEY9RjxVP0Y6VSxPPW5ldyBBcnJheUJ1ZmZlcihGJXk9PT0wP0Y6Rit5LUYleSksWj1uZXcgVWludDhBcnJheShPKSxaLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLEYpKSxvZT1uZXcgdShPKSx6PTAsUmUpZm9yKFQ9MDtUPEM7VCsrKXtmb3Iodz0wO3c8STt3KyspUmVbeF0mJihOZVt4XT1vZVt6KytdKSx4Kys7eCs9TX1lbHNlIGZvcihUPTA7VDxDO1QrKyl7Zm9yKHc9MDt3PEk7dysrKU5lW3grK109b2VbeisrXTt4Kz1NfWMucHRyKz16Knl9ZWxzZSBpZihsZT1yLmdldERhdGFUeXBlVXNlZChwLHYpLGJlPXIuZ2V0T25lUGl4ZWwoSCxELGxlLEcpLEQrPXIuZ2V0RGF0YVR5cGVTaXplKGxlKSxjZT09PTMpaWYoYy5wdHIrPUQsYy5jb3VudGVyLmNvbnN0YW50b2Zmc2V0KyssUmUpZm9yKFQ9MDtUPEM7VCsrKXtmb3Iodz0wO3c8STt3KyspUmVbeF0mJihOZVt4XT1iZSkseCsrO3grPU19ZWxzZSBmb3IoVD0wO1Q8QztUKyspe2Zvcih3PTA7dzxJO3crKylOZVt4KytdPWJlO3grPU19ZWxzZSBpZihjLnB0cis9RCxyLmRlY29kZUJpdHMoZCxjLGRlLGJlLGFlKSxEPTAsUmUpZm9yKFQ9MDtUPEM7VCsrKXtmb3Iodz0wO3c8STt3KyspUmVbeF0mJihOZVt4XT1kZVtEKytdKSx4Kys7eCs9TX1lbHNlIGZvcihUPTA7VDxDO1QrKyl7Zm9yKHc9MDt3PEk7dysrKU5lW3grK109ZGVbRCsrXTt4Kz1NfX19LGZvcm1hdEZpbGVJbmZvOmZ1bmN0aW9uKGQpe3JldHVybntmaWxlSWRlbnRpZmllclN0cmluZzpkLmhlYWRlckluZm8uZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ZC5oZWFkZXJJbmZvLmZpbGVWZXJzaW9uLGltYWdlVHlwZTpkLmhlYWRlckluZm8uaW1hZ2VUeXBlLGhlaWdodDpkLmhlYWRlckluZm8uaGVpZ2h0LHdpZHRoOmQuaGVhZGVySW5mby53aWR0aCxudW1WYWxpZFBpeGVsOmQuaGVhZGVySW5mby5udW1WYWxpZFBpeGVsLG1pY3JvQmxvY2tTaXplOmQuaGVhZGVySW5mby5taWNyb0Jsb2NrU2l6ZSxibG9iU2l6ZTpkLmhlYWRlckluZm8uYmxvYlNpemUsbWF4WkVycm9yOmQuaGVhZGVySW5mby5tYXhaRXJyb3IscGl4ZWxUeXBlOnIuZ2V0UGl4ZWxUeXBlKGQuaGVhZGVySW5mby5pbWFnZVR5cGUpLGVvZk9mZnNldDpkLmVvZk9mZnNldCxtYXNrOmQubWFzaz97bnVtQnl0ZXM6ZC5tYXNrLm51bUJ5dGVzfTpudWxsLHBpeGVsczp7bnVtQmxvY2tzWDpkLnBpeGVscy5udW1CbG9ja3NYLG51bUJsb2Nrc1k6ZC5waXhlbHMubnVtQmxvY2tzWSxtYXhWYWx1ZTpkLmhlYWRlckluZm8uek1heCxtaW5WYWx1ZTpkLmhlYWRlckluZm8uek1pbixub0RhdGFWYWx1ZTpkLm5vRGF0YVZhbHVlfX19LGNvbnN0cnVjdENvbnN0YW50U3VyZmFjZTpmdW5jdGlvbihkKXt2YXIgYz1kLmhlYWRlckluZm8uek1heCx1PWQuaGVhZGVySW5mby5udW1EaW1zLGw9ZC5oZWFkZXJJbmZvLmhlaWdodCpkLmhlYWRlckluZm8ud2lkdGgsaD1sKnUsbT0wLGI9MCxwPTAseT1kLnBpeGVscy5yZXN1bHRNYXNrO2lmKHkpaWYodT4xKWZvcihtPTA7bTx1O20rKylmb3IocD1tKmwsYj0wO2I8bDtiKyspeVtiXSYmKGQucGl4ZWxzLnJlc3VsdFBpeGVsc1twK2JdPWMpO2Vsc2UgZm9yKGI9MDtiPGw7YisrKXlbYl0mJihkLnBpeGVscy5yZXN1bHRQaXhlbHNbYl09Yyk7ZWxzZSBpZihkLnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbClkLnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbChjKTtlbHNlIGZvcihiPTA7YjxoO2IrKylkLnBpeGVscy5yZXN1bHRQaXhlbHNbYl09Y30sZ2V0RGF0YVR5cGVBcnJheTpmdW5jdGlvbihkKXt2YXIgYztzd2l0Y2goZCl7Y2FzZSAwOmM9SW50OEFycmF5O2JyZWFrO2Nhc2UgMTpjPVVpbnQ4QXJyYXk7YnJlYWs7Y2FzZSAyOmM9SW50MTZBcnJheTticmVhaztjYXNlIDM6Yz1VaW50MTZBcnJheTticmVhaztjYXNlIDQ6Yz1JbnQzMkFycmF5O2JyZWFrO2Nhc2UgNTpjPVVpbnQzMkFycmF5O2JyZWFrO2Nhc2UgNjpjPUZsb2F0MzJBcnJheTticmVhaztjYXNlIDc6Yz1GbG9hdDY0QXJyYXk7YnJlYWs7ZGVmYXVsdDpjPUZsb2F0MzJBcnJheX1yZXR1cm4gY30sZ2V0UGl4ZWxUeXBlOmZ1bmN0aW9uKGQpe3ZhciBjO3N3aXRjaChkKXtjYXNlIDA6Yz0iUzgiO2JyZWFrO2Nhc2UgMTpjPSJVOCI7YnJlYWs7Y2FzZSAyOmM9IlMxNiI7YnJlYWs7Y2FzZSAzOmM9IlUxNiI7YnJlYWs7Y2FzZSA0OmM9IlMzMiI7YnJlYWs7Y2FzZSA1OmM9IlUzMiI7YnJlYWs7Y2FzZSA2OmM9IkYzMiI7YnJlYWs7Y2FzZSA3OmM9IkY2NCI7YnJlYWs7ZGVmYXVsdDpjPSJGMzIifXJldHVybiBjfSxpc1ZhbGlkUGl4ZWxWYWx1ZTpmdW5jdGlvbihkLGMpe2lmKGM9PW51bGwpcmV0dXJuITE7dmFyIHU7c3dpdGNoKGQpe2Nhc2UgMDp1PWM+PS0xMjgmJmM8PTEyNzticmVhaztjYXNlIDE6dT1jPj0wJiZjPD0yNTU7YnJlYWs7Y2FzZSAyOnU9Yz49LTMyNzY4JiZjPD0zMjc2NzticmVhaztjYXNlIDM6dT1jPj0wJiZjPD02NTUzNjticmVhaztjYXNlIDQ6dT1jPj0tMjE0NzQ4MzY0OCYmYzw9MjE0NzQ4MzY0NzticmVhaztjYXNlIDU6dT1jPj0wJiZjPD00Mjk0OTY3Mjk2O2JyZWFrO2Nhc2UgNjp1PWM+PS0zNDAyNzk5OTM4NzkwMTQ4NGUyMiYmYzw9MzQwMjc5OTkzODc5MDE0ODRlMjI7YnJlYWs7Y2FzZSA3OnU9Yz49NWUtMzI0JiZjPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDp1PSExfXJldHVybiB1fSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oZCl7dmFyIGM9MDtzd2l0Y2goZCl7Y2FzZSAwOmNhc2UgMTpjPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Yz00O2JyZWFrO2Nhc2UgNzpjPTg7YnJlYWs7ZGVmYXVsdDpjPWR9cmV0dXJuIGN9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihkLGMpe3ZhciB1PWQ7c3dpdGNoKGQpe2Nhc2UgMjpjYXNlIDQ6dT1kLWM7YnJlYWs7Y2FzZSAzOmNhc2UgNTp1PWQtMipjO2JyZWFrO2Nhc2UgNjpjPT09MD91PWQ6Yz09PTE/dT0yOnU9MTticmVhaztjYXNlIDc6Yz09PTA/dT1kOnU9ZC0yKmMrMTticmVhaztkZWZhdWx0OnU9ZDticmVha31yZXR1cm4gdX0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oZCxjLHUsbCl7dmFyIGg9MDtzd2l0Y2godSl7Y2FzZSAwOmg9bC5nZXRJbnQ4KGMpO2JyZWFrO2Nhc2UgMTpoPWwuZ2V0VWludDgoYyk7YnJlYWs7Y2FzZSAyOmg9bC5nZXRJbnQxNihjLCEwKTticmVhaztjYXNlIDM6aD1sLmdldFVpbnQxNihjLCEwKTticmVhaztjYXNlIDQ6aD1sLmdldEludDMyKGMsITApO2JyZWFrO2Nhc2UgNTpoPWwuZ2V0VUludDMyKGMsITApO2JyZWFrO2Nhc2UgNjpoPWwuZ2V0RmxvYXQzMihjLCEwKTticmVhaztjYXNlIDc6aD1sLmdldEZsb2F0NjQoYywhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIGh9fSxpPWZ1bmN0aW9uKGQsYyx1KXt0aGlzLnZhbD1kLHRoaXMubGVmdD1jLHRoaXMucmlnaHQ9dX0sZj17ZGVjb2RlOmZ1bmN0aW9uKGQsYyl7Yz1jfHx7fTt2YXIgdT1jLm5vRGF0YVZhbHVlLGw9MCxoPXt9O2lmKGgucHRyPWMuaW5wdXRPZmZzZXR8fDAsaC5waXhlbHM9e30sISFyLnJlYWRIZWFkZXJJbmZvKGQsaCkpe3ZhciBtPWguaGVhZGVySW5mbyxiPW0uZmlsZVZlcnNpb24scD1yLmdldERhdGFUeXBlQXJyYXkobS5pbWFnZVR5cGUpO3IucmVhZE1hc2soZCxoKSxtLm51bVZhbGlkUGl4ZWwhPT1tLndpZHRoKm0uaGVpZ2h0JiYhaC5waXhlbHMucmVzdWx0TWFzayYmKGgucGl4ZWxzLnJlc3VsdE1hc2s9Yy5tYXNrRGF0YSk7dmFyIHk9bS53aWR0aCptLmhlaWdodDtpZihoLnBpeGVscy5yZXN1bHRQaXhlbHM9bmV3IHAoeSptLm51bURpbXMpLGguY291bnRlcj17b25lc3dlZXA6MCx1bmNvbXByZXNzZWQ6MCxsdXQ6MCxiaXRzdHVmZmVyOjAsY29uc3RhbnQ6MCxjb25zdGFudG9mZnNldDowfSxtLm51bVZhbGlkUGl4ZWwhPT0wKWlmKG0uek1heD09PW0uek1pbilyLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShoKTtlbHNlIGlmKGI+PTQmJnIuY2hlY2tNaW5NYXhSYW5nZXMoZCxoKSlyLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShoKTtlbHNle3ZhciBFPW5ldyBEYXRhVmlldyhkLGgucHRyLDIpLF89RS5nZXRVaW50OCgwKTtpZihoLnB0cisrLF8pci5yZWFkRGF0YU9uZVN3ZWVwKGQsaCxwKTtlbHNlIGlmKGI+MSYmbS5pbWFnZVR5cGU8PTEmJk1hdGguYWJzKG0ubWF4WkVycm9yLS41KTwxZS01KXt2YXIgVD1FLmdldFVpbnQ4KDEpO2lmKGgucHRyKyssaC5lbmNvZGVNb2RlPVQsVD4yfHxiPDQmJlQ+MSl0aHJvdyJJbnZhbGlkIEh1ZmZtYW4gZmxhZyAiK1Q7VD9yLnJlYWRIdWZmbWFuKGQsaCxwKTpyLnJlYWRUaWxlcyhkLGgscCl9ZWxzZSByLnJlYWRUaWxlcyhkLGgscCl9aC5lb2ZPZmZzZXQ9aC5wdHI7dmFyIHc7Yy5pbnB1dE9mZnNldD8odz1oLmhlYWRlckluZm8uYmxvYlNpemUrYy5pbnB1dE9mZnNldC1oLnB0cixNYXRoLmFicyh3KT49MSYmKGguZW9mT2Zmc2V0PWMuaW5wdXRPZmZzZXQraC5oZWFkZXJJbmZvLmJsb2JTaXplKSk6KHc9aC5oZWFkZXJJbmZvLmJsb2JTaXplLWgucHRyLE1hdGguYWJzKHcpPj0xJiYoaC5lb2ZPZmZzZXQ9aC5oZWFkZXJJbmZvLmJsb2JTaXplKSk7dmFyIFI9e3dpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LHBpeGVsRGF0YTpoLnBpeGVscy5yZXN1bHRQaXhlbHMsbWluVmFsdWU6bS56TWluLG1heFZhbHVlOm0uek1heCx2YWxpZFBpeGVsQ291bnQ6bS5udW1WYWxpZFBpeGVsLGRpbUNvdW50Om0ubnVtRGltcyxkaW1TdGF0czp7bWluVmFsdWVzOm0ubWluVmFsdWVzLG1heFZhbHVlczptLm1heFZhbHVlc30sbWFza0RhdGE6aC5waXhlbHMucmVzdWx0TWFza307aWYoaC5waXhlbHMucmVzdWx0TWFzayYmci5pc1ZhbGlkUGl4ZWxWYWx1ZShtLmltYWdlVHlwZSx1KSl7dmFyIFM9aC5waXhlbHMucmVzdWx0TWFzaztmb3IobD0wO2w8eTtsKyspU1tsXXx8KFIucGl4ZWxEYXRhW2xdPXUpO1Iubm9EYXRhVmFsdWU9dX1yZXR1cm4gaC5ub0RhdGFWYWx1ZT11LGMucmV0dXJuRmlsZUluZm8mJihSLmZpbGVJbmZvPXIuZm9ybWF0RmlsZUluZm8oaCkpLFJ9fSxnZXRCYW5kQ291bnQ6ZnVuY3Rpb24oZCl7dmFyIGM9MCx1PTAsbD17fTtmb3IobC5wdHI9MCxsLnBpeGVscz17fTt1PGQuYnl0ZUxlbmd0aC01ODspci5yZWFkSGVhZGVySW5mbyhkLGwpLHUrPWwuaGVhZGVySW5mby5ibG9iU2l6ZSxjKyssbC5wdHI9dTtyZXR1cm4gY319O3JldHVybiBmfSkoKSxuPShmdW5jdGlvbigpe3ZhciBhPW5ldyBBcnJheUJ1ZmZlcig0KSxyPW5ldyBVaW50OEFycmF5KGEpLGk9bmV3IFVpbnQzMkFycmF5KGEpO3JldHVybiBpWzBdPTEsclswXT09PTF9KSgpLG89e2RlY29kZTpmdW5jdGlvbihhLHIpe2lmKCFuKXRocm93IkJpZyBlbmRpYW4gc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQuIjtyPXJ8fHt9O3ZhciBpPXIuaW5wdXRPZmZzZXR8fDAsZj1uZXcgVWludDhBcnJheShhLGksMTApLGQ9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGMsdTtpZihkLnRyaW0oKT09PSJDbnRaSW1hZ2UiKWM9ZSx1PTE7ZWxzZSBpZihkLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIiljPXQsdT0yO2Vsc2UgdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK2Q7Zm9yKHZhciBsPTAsaD1hLmJ5dGVMZW5ndGgtMTAsbSxiPVtdLHAseSxFPXt3aWR0aDowLGhlaWdodDowLHBpeGVsczpbXSxwaXhlbFR5cGU6ci5waXhlbFR5cGUsbWFzazpudWxsLHN0YXRpc3RpY3M6W119O2k8aDspe3ZhciBfPWMuZGVjb2RlKGEse2lucHV0T2Zmc2V0OmksZW5jb2RlZE1hc2tEYXRhOm0sbWFza0RhdGE6eSxyZXR1cm5NYXNrOmw9PT0wLHJldHVybkVuY29kZWRNYXNrOmw9PT0wLHJldHVybkZpbGVJbmZvOiEwLHBpeGVsVHlwZTpyLnBpeGVsVHlwZXx8bnVsbCxub0RhdGFWYWx1ZTpyLm5vRGF0YVZhbHVlfHxudWxsfSk7aT1fLmZpbGVJbmZvLmVvZk9mZnNldCxsPT09MCYmKG09Xy5lbmNvZGVkTWFza0RhdGEseT1fLm1hc2tEYXRhLEUud2lkdGg9Xy53aWR0aCxFLmhlaWdodD1fLmhlaWdodCxFLmRpbUNvdW50PV8uZGltQ291bnR8fDEsRS5waXhlbFR5cGU9Xy5waXhlbFR5cGV8fF8uZmlsZUluZm8ucGl4ZWxUeXBlLEUubWFzaz1fLm1hc2tEYXRhKSx1PjEmJl8uZmlsZUluZm8ubWFzayYmXy5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJmIucHVzaChfLm1hc2tEYXRhKSxsKyssRS5waXhlbHMucHVzaChfLnBpeGVsRGF0YSksRS5zdGF0aXN0aWNzLnB1c2goe21pblZhbHVlOl8ubWluVmFsdWUsbWF4VmFsdWU6Xy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpfLm5vRGF0YVZhbHVlLGRpbVN0YXRzOl8uZGltU3RhdHN9KX12YXIgVCx3LFI7aWYodT4xJiZiLmxlbmd0aD4xKXtmb3IoUj1FLndpZHRoKkUuaGVpZ2h0LEUuYmFuZE1hc2tzPWIseT1uZXcgVWludDhBcnJheShSKSx5LnNldChiWzBdKSxUPTE7VDxiLmxlbmd0aDtUKyspZm9yKHA9YltUXSx3PTA7dzxSO3crKyl5W3ddPXlbd10mcFt3XTtFLm1hc2tEYXRhPXl9cmV0dXJuIEV9fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBvfSk6dHlwZW9mIGRtPCJ1IiYmZG0uZXhwb3J0cz9kbS5leHBvcnRzPW86dGhpcy5MZXJjPW99KSgpfSk7dmFyIFlfPXt9O3J0KFlfLHtkZWZhdWx0OigpPT55an0pO2Z1bmN0aW9uIF9qKGUsdCl7aWYoZS5lbmNvZGluZz09PXVPLkxFUkMpe2xldCBhO3RyeXthPXBPLmRlZmF1bHQuZGVjb2RlKGUuaGVpZ2h0bWFwKX1jYXRjaChpKXt0aHJvdyBuZXcgdXQoaSl9aWYoYS5zdGF0aXN0aWNzWzBdLm1pblZhbHVlPT09TnVtYmVyLk1BWF9WQUxVRSl0aHJvdyBuZXcgdXQoIkludmFsaWQgdGlsZSBkYXRhIik7ZS5oZWlnaHRtYXA9YS5waXhlbHNbMF0sZS53aWR0aD1hLndpZHRoLGUuaGVpZ2h0PWEuaGVpZ2h0fWUuZWxsaXBzb2lkPXEuY2xvbmUoZS5lbGxpcHNvaWQpLGUucmVjdGFuZ2xlPVNlLmNsb25lKGUucmVjdGFuZ2xlKTtsZXQgbj1oTy5jb21wdXRlVmVydGljZXMoZSksbz1uLnZlcnRpY2VzO3JldHVybiB0LnB1c2goby5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6bi5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDpuLm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDpuLm1heGltdW1IZWlnaHQsZ3JpZFdpZHRoOmUud2lkdGgsZ3JpZEhlaWdodDplLmhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2Rpbmcsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX12YXIgcE8seWosSl89WCgoKT0+e3FlKCk7bE8oKTttTygpO19uKCk7amEoKTtwTz1jYShiTygpLDEpO1VuKCk7eWo9QXQoX2opfSk7dmFyIFFfPXt9O3J0KFFfLHtkZWZhdWx0OigpPT5Uan0pO2Z1bmN0aW9uIEVqKGUsdCl7bGV0IG49ZS5xdWFudGl6ZWRWZXJ0aWNlcyxvPW4ubGVuZ3RoLzMsYT1lLm9jdEVuY29kZWROb3JtYWxzLHI9ZS53ZXN0SW5kaWNlcy5sZW5ndGgrZS5lYXN0SW5kaWNlcy5sZW5ndGgrZS5zb3V0aEluZGljZXMubGVuZ3RoK2Uubm9ydGhJbmRpY2VzLmxlbmd0aCxpPWUuaW5jbHVkZVdlYk1lcmNhdG9yVCxmPWUuZXhhZ2dlcmF0aW9uLGQ9ZS5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCx1PWYhPT0xLGw9U2UuY2xvbmUoZS5yZWN0YW5nbGUpLGg9bC53ZXN0LG09bC5zb3V0aCxiPWwuZWFzdCxwPWwubm9ydGgseT1xLmNsb25lKGUuZWxsaXBzb2lkKSxFPWUubWluaW11bUhlaWdodCxfPWUubWF4aW11bUhlaWdodCxUPWUucmVsYXRpdmVUb0NlbnRlcix3PWNvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKFQseSksUj0kLmludmVyc2VUcmFuc2Zvcm1hdGlvbih3LG5ldyAkKSxTLEM7aSYmKFM9Um4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShtKSxDPTEvKFJuLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUocCktUykpO2xldCBJPW4uc3ViYXJyYXkoMCxvKSxOPW4uc3ViYXJyYXkobywyKm8pLFA9bi5zdWJhcnJheShvKjIsMypvKSx2PWcoYSksQT1uZXcgQXJyYXkobykseD1uZXcgQXJyYXkobyksTT1uZXcgQXJyYXkobyksRj1pP25ldyBBcnJheShvKTpbXSxVPXU/bmV3IEFycmF5KG8pOltdLHo9QWo7ei54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx6Lnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHouej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IEQ9d2o7RC54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxELnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLEQuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IEc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFo9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgVmU9MDtWZTxvOysrVmUpe2xldCBSdD1JW1ZlXSxGdD1OW1ZlXSxxdD1SdC9aXyxadD1GdC9aXyxvbj1rLmxlcnAoRSxfLFBbVmVdL1pfKTthby5sb25naXR1ZGU9ay5sZXJwKGgsYixxdCksYW8ubGF0aXR1ZGU9ay5sZXJwKG0scCxadCksYW8uaGVpZ2h0PW9uLEc9TWF0aC5taW4oYW8ubG9uZ2l0dWRlLEcpLEg9TWF0aC5tYXgoYW8ubG9uZ2l0dWRlLEgpLE89TWF0aC5taW4oYW8ubGF0aXR1ZGUsTyksWj1NYXRoLm1heChhby5sYXRpdHVkZSxaKTtsZXQgd249eS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihhbyk7QVtWZV09bmV3IFkocXQsWnQpLHhbVmVdPW9uLE1bVmVdPXduLGkmJihGW1ZlXT0oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShhby5sYXRpdHVkZSktUykqQyksdSYmKFVbVmVdPXkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHduKSksJC5tdWx0aXBseUJ5UG9pbnQoUix3bixfZCkscy5taW5pbXVtQnlDb21wb25lbnQoX2Qseix6KSxzLm1heGltdW1CeUNvbXBvbmVudChfZCxELEQpfWxldCBvZT1obShlLndlc3RJbmRpY2VzLGZ1bmN0aW9uKFZlLFJ0KXtyZXR1cm4gQVtWZV0ueS1BW1J0XS55fSksY2U9aG0oZS5lYXN0SW5kaWNlcyxmdW5jdGlvbihWZSxSdCl7cmV0dXJuIEFbUnRdLnktQVtWZV0ueX0pLGRlPWhtKGUuc291dGhJbmRpY2VzLGZ1bmN0aW9uKFZlLFJ0KXtyZXR1cm4gQVtSdF0ueC1BW1ZlXS54fSksZWU9aG0oZS5ub3J0aEluZGljZXMsZnVuY3Rpb24oVmUsUnQpe3JldHVybiBBW1ZlXS54LUFbUnRdLnh9KSxtZTtFPDAmJihtZT1uZXcgRXIoeSkuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKFQsTSxFKSk7bGV0IGxlPUU7bGU9TWF0aC5taW4obGUsdW0oZS53ZXN0SW5kaWNlcyxlLndlc3RTa2lydEhlaWdodCx4LEEsbCx5LFIseixEKSksbGU9TWF0aC5taW4obGUsdW0oZS5zb3V0aEluZGljZXMsZS5zb3V0aFNraXJ0SGVpZ2h0LHgsQSxsLHksUix6LEQpKSxsZT1NYXRoLm1pbihsZSx1bShlLmVhc3RJbmRpY2VzLGUuZWFzdFNraXJ0SGVpZ2h0LHgsQSxsLHksUix6LEQpKSxsZT1NYXRoLm1pbihsZSx1bShlLm5vcnRoSW5kaWNlcyxlLm5vcnRoU2tpcnRIZWlnaHQseCxBLGwseSxSLHosRCkpO2xldCBiZT1uZXcgdW8oeixELFQpLGZlPW5ldyByYShULGJlLGxlLF8sdyx2LGksdSxmLGQpLGFlPWZlLnN0cmlkZSxSZT1vKmFlK3IqYWUsTmU9bmV3IEZsb2F0MzJBcnJheShSZSksSmU9MDtmb3IobGV0IFZlPTA7VmU8bzsrK1ZlKXtpZih2KXtsZXQgUnQ9VmUqMjtLcy54PWFbUnRdLEtzLnk9YVtSdCsxXX1KZT1mZS5lbmNvZGUoTmUsSmUsTVtWZV0sQVtWZV0seFtWZV0sS3MsRltWZV0sVVtWZV0pfWxldCBXZT1NYXRoLm1heCgwLChyLTQpKjIpLHR0PWUuaW5kaWNlcy5sZW5ndGgrV2UqMyxYZT1rZS5jcmVhdGVUeXBlZEFycmF5KG8rcix0dCk7WGUuc2V0KGUuaW5kaWNlcywwKTtsZXQgTGU9MWUtNCxqZT0oSC1HKSpMZSxpdD0oWi1PKSpMZSxZZT0tamUsZnQ9MCxJdD1qZSxDdD0wLGh0PTAsS3Q9aXQsUHQ9MCxMdD0taXQsS2U9byphZTtyZXR1cm4gbG0oTmUsS2Usb2UsZmUseCxBLGEseSxsLGUud2VzdFNraXJ0SGVpZ2h0LFMsQyxZZSxmdCksS2UrPWUud2VzdEluZGljZXMubGVuZ3RoKmFlLGxtKE5lLEtlLGRlLGZlLHgsQSxhLHksbCxlLnNvdXRoU2tpcnRIZWlnaHQsUyxDLFB0LEx0KSxLZSs9ZS5zb3V0aEluZGljZXMubGVuZ3RoKmFlLGxtKE5lLEtlLGNlLGZlLHgsQSxhLHksbCxlLmVhc3RTa2lydEhlaWdodCxTLEMsSXQsQ3QpLEtlKz1lLmVhc3RJbmRpY2VzLmxlbmd0aCphZSxsbShOZSxLZSxlZSxmZSx4LEEsYSx5LGwsZS5ub3J0aFNraXJ0SGVpZ2h0LFMsQyxodCxLdCksTGkuYWRkU2tpcnRJbmRpY2VzKG9lLGRlLGNlLGVlLG8sWGUsZS5pbmRpY2VzLmxlbmd0aCksdC5wdXNoKE5lLmJ1ZmZlcixYZS5idWZmZXIpLHt2ZXJ0aWNlczpOZS5idWZmZXIsaW5kaWNlczpYZS5idWZmZXIsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6b2Usc291dGhJbmRpY2VzRWFzdFRvV2VzdDpkZSxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpjZSxub3J0aEluZGljZXNXZXN0VG9FYXN0OmVlLHZlcnRleFN0cmlkZTphZSxjZW50ZXI6VCxtaW5pbXVtSGVpZ2h0OkUsbWF4aW11bUhlaWdodDpfLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOm1lLGVuY29kaW5nOmZlLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOmUuaW5kaWNlcy5sZW5ndGh9fWZ1bmN0aW9uIHVtKGUsdCxuLG8sYSxyLGksZixkKXtsZXQgYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdT1hLm5vcnRoLGw9YS5zb3V0aCxoPWEuZWFzdCxtPWEud2VzdDtoPG0mJihoKz1rLlRXT19QSSk7bGV0IGI9ZS5sZW5ndGg7Zm9yKGxldCBwPTA7cDxiOysrcCl7bGV0IHk9ZVtwXSxFPW5beV0sXz1vW3ldO2FvLmxvbmdpdHVkZT1rLmxlcnAobSxoLF8ueCksYW8ubGF0aXR1ZGU9ay5sZXJwKGwsdSxfLnkpLGFvLmhlaWdodD1FLXQ7bGV0IFQ9ci5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihhbyxfZCk7JC5tdWx0aXBseUJ5UG9pbnQoaSxULFQpLHMubWluaW11bUJ5Q29tcG9uZW50KFQsZixmKSxzLm1heGltdW1CeUNvbXBvbmVudChULGQsZCksYz1NYXRoLm1pbihjLGFvLmhlaWdodCl9cmV0dXJuIGN9ZnVuY3Rpb24gbG0oZSx0LG4sbyxhLHIsaSxmLGQsYyx1LGwsaCxtKXtsZXQgYj1nKGkpLHA9ZC5ub3J0aCx5PWQuc291dGgsRT1kLmVhc3QsXz1kLndlc3Q7RTxfJiYoRSs9ay5UV09fUEkpO2xldCBUPW4ubGVuZ3RoO2ZvcihsZXQgdz0wO3c8VDsrK3cpe2xldCBSPW5bd10sUz1hW1JdLEM9cltSXTthby5sb25naXR1ZGU9ay5sZXJwKF8sRSxDLngpK2gsYW8ubGF0aXR1ZGU9ay5sZXJwKHkscCxDLnkpK20sYW8uaGVpZ2h0PVMtYztsZXQgST1mLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGFvLF9kKTtpZihiKXtsZXQgdj1SKjI7S3MueD1pW3ZdLEtzLnk9aVt2KzFdfWxldCBOO28uaGFzV2ViTWVyY2F0b3JUJiYoTj0oUm4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShhby5sYXRpdHVkZSktdSkqbCk7bGV0IFA7by5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYoUD1mLmdlb2RldGljU3VyZmFjZU5vcm1hbChJKSksdD1vLmVuY29kZShlLHQsSSxDLGFvLmhlaWdodCxLcyxOLFApfX1mdW5jdGlvbiBobShlLHQpe2xldCBuO3JldHVybiB0eXBlb2YgZS5zbGljZT09ImZ1bmN0aW9uIiYmKG49ZS5zbGljZSgpLHR5cGVvZiBuLnNvcnQhPSJmdW5jdGlvbiImJihuPXZvaWQgMCkpLGcobil8fChuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpKSxuLnNvcnQodCksbn12YXIgWl8sX2QsQWosd2osYW8sS3MsVGosJF89WCgoKT0+e0FpKCk7anQoKTtJZSgpO0V0KCk7c2UoKTtxZSgpO0dzKCk7bm4oKTtHZSgpO3BuKCk7X24oKTtWcygpO0JfKCk7c3IoKTt5aSgpO1VuKCk7Wl89MzI3NjcsX2Q9bmV3IHMsQWo9bmV3IHMsd2o9bmV3IHMsYW89bmV3IHJlLEtzPW5ldyBZO1RqPUF0KEVqKX0pO2Z1bmN0aW9uIFJqKGUsdCl7cmV0dXJuIGsuZXF1YWxzRXBzaWxvbihlLmxhdGl0dWRlLHQubGF0aXR1ZGUsay5FUFNJTE9OMTApJiZrLmVxdWFsc0Vwc2lsb24oZS5sb25naXR1ZGUsdC5sb25naXR1ZGUsay5FUFNJTE9OMTApfWZ1bmN0aW9uIFNqKGUsdCxuLG8pe3Q9Tm4odCxzLmVxdWFsc0Vwc2lsb24pO2xldCBhPXQubGVuZ3RoO2lmKGE8MilyZXR1cm47bGV0IHI9ZyhvKSxpPWcobiksZj1uZXcgQXJyYXkoYSksZD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT10WzBdO2ZbMF09dTtsZXQgbD1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHUseGopO2kmJihsLmhlaWdodD1uWzBdKSxkWzBdPWwuaGVpZ2h0LHI/Y1swXT1vWzBdOmNbMF09MDtsZXQgaD1kWzBdLG09Y1swXSxiPWg9PT1tLHA9MTtmb3IobGV0IHk9MTt5PGE7Kyt5KXtsZXQgRT10W3ldLF89ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhFLE9qKTtpJiYoXy5oZWlnaHQ9blt5XSksYj1iJiZfLmhlaWdodD09PTAsUmoobCxfKT9sLmhlaWdodDxfLmhlaWdodCYmKGRbcC0xXT1fLmhlaWdodCk6KGZbcF09RSxkW3BdPV8uaGVpZ2h0LHI/Y1twXT1vW3ldOmNbcF09MCxiPWImJmRbcF09PT1jW3BdLHJlLmNsb25lKF8sbCksKytwKX1pZighKGJ8fHA8MikpcmV0dXJuIGYubGVuZ3RoPXAsZC5sZW5ndGg9cCxjLmxlbmd0aD1wLHtwb3NpdGlvbnM6Zix0b3BIZWlnaHRzOmQsYm90dG9tSGVpZ2h0czpjfX12YXIgZ08seGosT2osQ2osTWosTmosbW0sZXk9WCgoKT0+e1hhKCk7SWUoKTtFdCgpO3NlKCk7R2UoKTt3cygpO2dPPXt9O3hqPW5ldyByZSxPaj1uZXcgcmU7Q2o9bmV3IEFycmF5KDIpLE1qPW5ldyBBcnJheSgyKSxOaj17cG9zaXRpb25zOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxlbGxpcHNvaWQ6dm9pZCAwfTtnTy5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtsZXQgaT1TaihlLHQsbixvKTtpZighZyhpKSlyZXR1cm47dD1pLnBvc2l0aW9ucyxuPWkudG9wSGVpZ2h0cyxvPWkuYm90dG9tSGVpZ2h0cztsZXQgZj10Lmxlbmd0aCxkPWYtMixjLHUsbD1rLmNob3JkTGVuZ3RoKGEsZS5tYXhpbXVtUmFkaXVzKSxoPU5qO2lmKGgubWluRGlzdGFuY2U9bCxoLmVsbGlwc29pZD1lLHIpe2xldCBtPTAsYjtmb3IoYj0wO2I8Zi0xO2IrKyltKz1Bbi5udW1iZXJPZlBvaW50cyh0W2JdLHRbYisxXSxsKSsxO2M9bmV3IEZsb2F0NjRBcnJheShtKjMpLHU9bmV3IEZsb2F0NjRBcnJheShtKjMpO2xldCBwPUNqLHk9TWo7aC5wb3NpdGlvbnM9cCxoLmhlaWdodD15O2xldCBFPTA7Zm9yKGI9MDtiPGYtMTtiKyspe3BbMF09dFtiXSxwWzFdPXRbYisxXSx5WzBdPW5bYl0seVsxXT1uW2IrMV07bGV0IF89QW4uZ2VuZXJhdGVBcmMoaCk7Yy5zZXQoXyxFKSx5WzBdPW9bYl0seVsxXT1vW2IrMV0sdS5zZXQoQW4uZ2VuZXJhdGVBcmMoaCksRSksRSs9Xy5sZW5ndGh9fWVsc2UgaC5wb3NpdGlvbnM9dCxoLmhlaWdodD1uLGM9bmV3IEZsb2F0NjRBcnJheShBbi5nZW5lcmF0ZUFyYyhoKSksaC5oZWlnaHQ9byx1PW5ldyBGbG9hdDY0QXJyYXkoQW4uZ2VuZXJhdGVBcmMoaCkpO3JldHVybntib3R0b21Qb3NpdGlvbnM6dSx0b3BQb3NpdGlvbnM6YyxudW1Db3JuZXJzOmR9fTttbT1nT30pO2Z1bmN0aW9uIENjKGUpe2U9ZT8/Q2UuRU1QVFlfT0JKRUNUO2xldCB0PWUucG9zaXRpb25zLG49ZS5tYXhpbXVtSGVpZ2h0cyxvPWUubWluaW11bUhlaWdodHMsYT1lLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxyPWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLGk9ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGEpLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fZWxsaXBzb2lkPXEuY2xvbmUoaSksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlV2FsbEdlb21ldHJ5IjtsZXQgZj0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoKzI7ZyhvKSYmKGYrPW8ubGVuZ3RoKSxnKG4pJiYoZis9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWYrcS5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzF9dmFyIHR5LGJtLElqLF9PLFBqLGtqLHZqLHlPLEFPLHlkLG55LHdPPVgoKCk9PntNdCgpO0llKCk7dnQoKTttdCgpO3NlKCk7cWUoKTskdCgpO2VuKCk7dW4oKTtubigpO0dlKCk7Y24oKTtrbygpO2V5KCk7dHk9bmV3IHMsYm09bmV3IHMsSWo9bmV3IHMsX089bmV3IHMsUGo9bmV3IHMsa2o9bmV3IHMsdmo9bmV3IHM7Q2MucGFjaz1mdW5jdGlvbihlLHQsbil7bj1uPz8wO2xldCBvLGE9ZS5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKHRbbisrXT1yLG89MDtvPHI7KytvLG4rPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLHQsbik7bGV0IGk9ZS5fbWluaW11bUhlaWdodHM7aWYocj1nKGkpP2kubGVuZ3RoOjAsdFtuKytdPXIsZyhpKSlmb3Iobz0wO288cjsrK28pdFtuKytdPWlbb107bGV0IGY9ZS5fbWF4aW11bUhlaWdodHM7aWYocj1nKGYpP2YubGVuZ3RoOjAsdFtuKytdPXIsZyhmKSlmb3Iobz0wO288cjsrK28pdFtuKytdPWZbb107cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCxoZS5wYWNrKGUuX3ZlcnRleEZvcm1hdCx0LG4pLG4rPWhlLnBhY2tlZExlbmd0aCx0W25dPWUuX2dyYW51bGFyaXR5LHR9O3lPPXEuY2xvbmUocS5VTklUX1NQSEVSRSksQU89bmV3IGhlLHlkPXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOnlPLHZlcnRleEZvcm1hdDpBTyxncmFudWxhcml0eTp2b2lkIDB9O0NjLnVucGFjaz1mdW5jdGlvbihlLHQsbil7dD10Pz8wO2xldCBvLGE9ZVt0KytdLHI9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyx0Kz1zLnBhY2tlZExlbmd0aClyW29dPXMudW5wYWNrKGUsdCk7YT1lW3QrK107bGV0IGk7aWYoYT4wKWZvcihpPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbylpW29dPWVbdCsrXTthPWVbdCsrXTtsZXQgZjtpZihhPjApZm9yKGY9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWZbb109ZVt0KytdO2xldCBkPXEudW5wYWNrKGUsdCx5Tyk7dCs9cS5wYWNrZWRMZW5ndGg7bGV0IGM9aGUudW5wYWNrKGUsdCxBTyk7dCs9aGUucGFja2VkTGVuZ3RoO2xldCB1PWVbdF07cmV0dXJuIGcobik/KG4uX3Bvc2l0aW9ucz1yLG4uX21pbmltdW1IZWlnaHRzPWksbi5fbWF4aW11bUhlaWdodHM9ZixuLl9lbGxpcHNvaWQ9cS5jbG9uZShkLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGMsbi5fdmVydGV4Rm9ybWF0KSxuLl9ncmFudWxhcml0eT11LG4pOih5ZC5wb3NpdGlvbnM9cix5ZC5taW5pbXVtSGVpZ2h0cz1pLHlkLm1heGltdW1IZWlnaHRzPWYseWQuZ3JhbnVsYXJpdHk9dSxuZXcgQ2MoeWQpKX07Q2MuZnJvbUNvbnN0YW50SGVpZ2h0cz1mdW5jdGlvbihlKXtlPWU/P0NlLkVNUFRZX09CSkVDVDtsZXQgdD1lLnBvc2l0aW9ucyxuLG8sYT1lLm1pbmltdW1IZWlnaHQscj1lLm1heGltdW1IZWlnaHQsaT1nKGEpLGY9ZyhyKTtpZihpfHxmKXtsZXQgYz10Lmxlbmd0aDtuPWk/bmV3IEFycmF5KGMpOnZvaWQgMCxvPWY/bmV3IEFycmF5KGMpOnZvaWQgMDtmb3IobGV0IHU9MDt1PGM7Kyt1KWkmJihuW3VdPWEpLGYmJihvW3VdPXIpfWxldCBkPXtwb3NpdGlvbnM6dCxtYXhpbXVtSGVpZ2h0czpvLG1pbmltdW1IZWlnaHRzOm4sZWxsaXBzb2lkOmUuZWxsaXBzb2lkLHZlcnRleEZvcm1hdDplLnZlcnRleEZvcm1hdH07cmV0dXJuIG5ldyBDYyhkKX07Q2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcG9zaXRpb25zLG49ZS5fbWluaW11bUhlaWdodHMsbz1lLl9tYXhpbXVtSGVpZ2h0cyxhPWUuX3ZlcnRleEZvcm1hdCxyPWUuX2dyYW51bGFyaXR5LGk9ZS5fZWxsaXBzb2lkLGY9bW0uY29tcHV0ZVBvc2l0aW9ucyhpLHQsbyxuLHIsITApO2lmKCFnKGYpKXJldHVybjtsZXQgZD1mLmJvdHRvbVBvc2l0aW9ucyxjPWYudG9wUG9zaXRpb25zLHU9Zi5udW1Db3JuZXJzLGw9Yy5sZW5ndGgsaD1sKjIsbT1hLnBvc2l0aW9uP25ldyBGbG9hdDY0QXJyYXkoaCk6dm9pZCAwLGI9YS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShoKTp2b2lkIDAscD1hLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShoKTp2b2lkIDAseT1hLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGgpOnZvaWQgMCxFPWEuc3Q/bmV3IEZsb2F0MzJBcnJheShoLzMqMik6dm9pZCAwLF89MCxUPTAsdz0wLFI9MCxTPTAsQz12aixJPWtqLE49UGosUD0hMDtsLz0zO2xldCB2LEE9MCx4PTEvKGwtdS0xKTtmb3Iodj0wO3Y8bDsrK3Ype2xldCBEPXYqMyxHPXMuZnJvbUFycmF5KGMsRCx0eSksSD1zLmZyb21BcnJheShkLEQsYm0pO2lmKGEucG9zaXRpb24mJihtW18rK109SC54LG1bXysrXT1ILnksbVtfKytdPUgueixtW18rK109Ry54LG1bXysrXT1HLnksbVtfKytdPUcueiksYS5zdCYmKEVbUysrXT1BLEVbUysrXT0wLEVbUysrXT1BLEVbUysrXT0xKSxhLm5vcm1hbHx8YS50YW5nZW50fHxhLmJpdGFuZ2VudCl7bGV0IE89cy5jbG9uZShzLlpFUk8sX08pLFo9cy5zdWJ0cmFjdChHLGkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEcsYm0pLGJtKTtpZih2KzE8bCYmKE89cy5mcm9tQXJyYXkoYyxEKzMsX08pKSxQKXtsZXQgb2U9cy5zdWJ0cmFjdChPLEcsSWopLGNlPXMuc3VidHJhY3QoWixHLHR5KTtDPXMubm9ybWFsaXplKHMuY3Jvc3MoY2Usb2UsQyksQyksUD0hMX1zLmVxdWFsc0Vwc2lsb24oRyxPLGsuRVBTSUxPTjEwKT9QPSEwOihBKz14LGEudGFuZ2VudCYmKEk9cy5ub3JtYWxpemUocy5zdWJ0cmFjdChPLEcsSSksSSkpLGEuYml0YW5nZW50JiYoTj1zLm5vcm1hbGl6ZShzLmNyb3NzKEMsSSxOKSxOKSkpLGEubm9ybWFsJiYoYltUKytdPUMueCxiW1QrK109Qy55LGJbVCsrXT1DLnosYltUKytdPUMueCxiW1QrK109Qy55LGJbVCsrXT1DLnopLGEudGFuZ2VudCYmKHBbUisrXT1JLngscFtSKytdPUkueSxwW1IrK109SS56LHBbUisrXT1JLngscFtSKytdPUkueSxwW1IrK109SS56KSxhLmJpdGFuZ2VudCYmKHlbdysrXT1OLngseVt3KytdPU4ueSx5W3crK109Ti56LHlbdysrXT1OLngseVt3KytdPU4ueSx5W3crK109Ti56KX19bGV0IE09bmV3IG50O2EucG9zaXRpb24mJihNLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxhLm5vcm1hbCYmKE0ubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLGEudGFuZ2VudCYmKE0udGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxhLmJpdGFuZ2VudCYmKE0uYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp5fSkpLGEuc3QmJihNLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpO2xldCBGPWgvMztoLT02Kih1KzEpO2xldCBVPWtlLmNyZWF0ZVR5cGVkQXJyYXkoRixoKSx6PTA7Zm9yKHY9MDt2PEYtMjt2Kz0yKXtsZXQgRD12LEc9disyLEg9cy5mcm9tQXJyYXkobSxEKjMsdHkpLE89cy5mcm9tQXJyYXkobSxHKjMsYm0pO2lmKHMuZXF1YWxzRXBzaWxvbihILE8say5FUFNJTE9OMTApKWNvbnRpbnVlO2xldCBaPXYrMSxvZT12KzM7VVt6KytdPVosVVt6KytdPUQsVVt6KytdPW9lLFVbeisrXT1vZSxVW3orK109RCxVW3orK109R31yZXR1cm4gbmV3IHZlKHthdHRyaWJ1dGVzOk0saW5kaWNlczpVLHByaW1pdGl2ZVR5cGU6VWUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOmdlLmZyb21WZXJ0aWNlcyhtKX0pfTtueT1DY30pO3ZhciBveT17fTtydChveSx7ZGVmYXVsdDooKT0+RGp9KTtmdW5jdGlvbiBGaihlLHQpe3JldHVybiBnKHQpJiYoZT1ueS51bnBhY2soZSx0KSksZS5fZWxsaXBzb2lkPXEuY2xvbmUoZS5fZWxsaXBzb2lkKSxueS5jcmVhdGVHZW9tZXRyeShlKX12YXIgRGosYXk9WCgoKT0+e3NlKCk7cWUoKTt3TygpO0RqPUZqfSk7ZnVuY3Rpb24gTWMoZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbj1lLm1heGltdW1IZWlnaHRzLG89ZS5taW5pbXVtSGVpZ2h0cyxhPWUuZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHI9ZS5lbGxpcHNvaWQ/P3EuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9dCx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fZ3JhbnVsYXJpdHk9YSx0aGlzLl9lbGxpcHNvaWQ9cS5jbG9uZShyKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5IjtsZXQgaT0xK3QubGVuZ3RoKnMucGFja2VkTGVuZ3RoKzI7ZyhvKSYmKGkrPW8ubGVuZ3RoKSxnKG4pJiYoaSs9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWkrcS5wYWNrZWRMZW5ndGgrMX12YXIgRU8sVE8sUk8sQWQscnkseE89WCgoKT0+e010KCk7SWUoKTt2dCgpO210KCk7c2UoKTtxZSgpOyR0KCk7ZW4oKTt1bigpO25uKCk7R2UoKTtjbigpO2V5KCk7RU89bmV3IHMsVE89bmV3IHM7TWMucGFjaz1mdW5jdGlvbihlLHQsbil7bj1uPz8wO2xldCBvLGE9ZS5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKHRbbisrXT1yLG89MDtvPHI7KytvLG4rPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLHQsbik7bGV0IGk9ZS5fbWluaW11bUhlaWdodHM7aWYocj1nKGkpP2kubGVuZ3RoOjAsdFtuKytdPXIsZyhpKSlmb3Iobz0wO288cjsrK28pdFtuKytdPWlbb107bGV0IGY9ZS5fbWF4aW11bUhlaWdodHM7aWYocj1nKGYpP2YubGVuZ3RoOjAsdFtuKytdPXIsZyhmKSlmb3Iobz0wO288cjsrK28pdFtuKytdPWZbb107cmV0dXJuIHEucGFjayhlLl9lbGxpcHNvaWQsdCxuKSxuKz1xLnBhY2tlZExlbmd0aCx0W25dPWUuX2dyYW51bGFyaXR5LHR9O1JPPXEuY2xvbmUocS5VTklUX1NQSEVSRSksQWQ9e3Bvc2l0aW9uczp2b2lkIDAsbWluaW11bUhlaWdodHM6dm9pZCAwLG1heGltdW1IZWlnaHRzOnZvaWQgMCxlbGxpcHNvaWQ6Uk8sZ3JhbnVsYXJpdHk6dm9pZCAwfTtNYy51bnBhY2s9ZnVuY3Rpb24oZSx0LG4pe3Q9dD8/MDtsZXQgbyxhPWVbdCsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sdCs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhlLHQpO2E9ZVt0KytdO2xldCBpO2lmKGE+MClmb3IoaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28paVtvXT1lW3QrK107YT1lW3QrK107bGV0IGY7aWYoYT4wKWZvcihmPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbylmW29dPWVbdCsrXTtsZXQgZD1xLnVucGFjayhlLHQsUk8pO3QrPXEucGFja2VkTGVuZ3RoO2xldCBjPWVbdF07cmV0dXJuIGcobik/KG4uX3Bvc2l0aW9ucz1yLG4uX21pbmltdW1IZWlnaHRzPWksbi5fbWF4aW11bUhlaWdodHM9ZixuLl9lbGxpcHNvaWQ9cS5jbG9uZShkLG4uX2VsbGlwc29pZCksbi5fZ3JhbnVsYXJpdHk9YyxuKTooQWQucG9zaXRpb25zPXIsQWQubWluaW11bUhlaWdodHM9aSxBZC5tYXhpbXVtSGVpZ2h0cz1mLEFkLmdyYW51bGFyaXR5PWMsbmV3IE1jKEFkKSl9O01jLmZyb21Db25zdGFudEhlaWdodHM9ZnVuY3Rpb24oZSl7ZT1lPz9DZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9ZS5wb3NpdGlvbnMsbixvLGE9ZS5taW5pbXVtSGVpZ2h0LHI9ZS5tYXhpbXVtSGVpZ2h0LGk9ZyhhKSxmPWcocik7aWYoaXx8Zil7bGV0IGM9dC5sZW5ndGg7bj1pP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCB1PTA7dTxjOysrdSlpJiYoblt1XT1hKSxmJiYob1t1XT1yKX1sZXQgZD17cG9zaXRpb25zOnQsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDplLmVsbGlwc29pZH07cmV0dXJuIG5ldyBNYyhkKX07TWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fcG9zaXRpb25zLG49ZS5fbWluaW11bUhlaWdodHMsbz1lLl9tYXhpbXVtSGVpZ2h0cyxhPWUuX2dyYW51bGFyaXR5LHI9ZS5fZWxsaXBzb2lkLGk9bW0uY29tcHV0ZVBvc2l0aW9ucyhyLHQsbyxuLGEsITEpO2lmKCFnKGkpKXJldHVybjtsZXQgZj1pLmJvdHRvbVBvc2l0aW9ucyxkPWkudG9wUG9zaXRpb25zLGM9ZC5sZW5ndGgsdT1jKjIsbD1uZXcgRmxvYXQ2NEFycmF5KHUpLGg9MDtjLz0zO2xldCBtO2ZvcihtPTA7bTxjOysrbSl7bGV0IF89bSozLFQ9cy5mcm9tQXJyYXkoZCxfLEVPKSx3PXMuZnJvbUFycmF5KGYsXyxUTyk7bFtoKytdPXcueCxsW2grK109dy55LGxbaCsrXT13LnosbFtoKytdPVQueCxsW2grK109VC55LGxbaCsrXT1ULnp9bGV0IGI9bmV3IG50KHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KX0pLHA9dS8zO3U9MipwLTQrcDtsZXQgeT1rZS5jcmVhdGVUeXBlZEFycmF5KHAsdSksRT0wO2ZvcihtPTA7bTxwLTI7bSs9Mil7bGV0IF89bSxUPW0rMix3PXMuZnJvbUFycmF5KGwsXyozLEVPKSxSPXMuZnJvbUFycmF5KGwsVCozLFRPKTtpZihzLmVxdWFsc0Vwc2lsb24odyxSLGsuRVBTSUxPTjEwKSljb250aW51ZTtsZXQgUz1tKzEsQz1tKzM7eVtFKytdPVMseVtFKytdPV8seVtFKytdPVMseVtFKytdPUMseVtFKytdPV8seVtFKytdPVR9cmV0dXJuIHlbRSsrXT1wLTIseVtFKytdPXAtMSxuZXcgdmUoe2F0dHJpYnV0ZXM6YixpbmRpY2VzOnkscHJpbWl0aXZlVHlwZTpVZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpnZS5mcm9tVmVydGljZXMobCl9KX07cnk9TWN9KTt2YXIgaXk9e307cnQoaXkse2RlZmF1bHQ6KCk9PlVqfSk7ZnVuY3Rpb24gQmooZSx0KXtyZXR1cm4gZyh0KSYmKGU9cnkudW5wYWNrKGUsdCkpLGUuX2VsbGlwc29pZD1xLmNsb25lKGUuX2VsbGlwc29pZCkscnkuY3JlYXRlR2VvbWV0cnkoZSl9dmFyIFVqLGN5PVgoKCk9PntzZSgpO3FlKCk7eE8oKTtVaj1Can0pO3ZhciBkeT1lbygod2QsZnkpPT57dmFyIEZlPUZlfHx7fTtGZS5zY29wZT17fTtGZS5hcnJheUl0ZXJhdG9ySW1wbD1mdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0PGUubGVuZ3RoP3tkb25lOiExLHZhbHVlOmVbdCsrXX06e2RvbmU6ITB9fX07RmUuYXJyYXlJdGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm57bmV4dDpGZS5hcnJheUl0ZXJhdG9ySW1wbChlKX19O0ZlLm1ha2VJdGVyYXRvcj1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLml0ZXJhdG9yJiZlW1N5bWJvbC5pdGVyYXRvcl07cmV0dXJuIHQ/dC5jYWxsKGUpOkZlLmFycmF5SXRlcmF0b3IoZSl9O0ZlLkFTU1VNRV9FUzU9ITE7RmUuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7RmUuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7RmUuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMTtGZS5JU09MQVRFX1BPTFlGSUxMUz0hMTtGZS5GT1JDRV9QT0xZRklMTF9QUk9NSVNFPSExO0ZlLkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OPSExO0ZlLmdldEdsb2JhbD1mdW5jdGlvbihlKXtlPVt0eXBlb2YgZ2xvYmFsVGhpcz09Im9iamVjdCImJmdsb2JhbFRoaXMsZSx0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LHR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZix0eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZVt0XTtpZihuJiZuLk1hdGg9PU1hdGgpcmV0dXJuIG59dGhyb3cgRXJyb3IoIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3QiKX07RmUuZ2xvYmFsPUZlLmdldEdsb2JhbCh3ZCk7RmUuZGVmaW5lUHJvcGVydHk9RmUuQVNTVU1FX0VTNXx8dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPT0iZnVuY3Rpb24iP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9PUFycmF5LnByb3RvdHlwZXx8ZT09T2JqZWN0LnByb3RvdHlwZXx8KGVbdF09bi52YWx1ZSksZX07RmUuSVNfU1lNQk9MX05BVElWRT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sKCJ4Iik9PSJzeW1ib2wiO0ZlLlRSVVNUX0VTNl9QT0xZRklMTFM9IUZlLklTT0xBVEVfUE9MWUZJTExTfHxGZS5JU19TWU1CT0xfTkFUSVZFO0ZlLnBvbHlmaWxscz17fTtGZS5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2w9e307RmUuUE9MWUZJTExfUFJFRklYPSIkanNjcCQiO0ZlLnBvbHlmaWxsPWZ1bmN0aW9uKGUsdCxuLG8pe3QmJihGZS5JU09MQVRFX1BPTFlGSUxMUz9GZS5wb2x5ZmlsbElzb2xhdGVkKGUsdCxuLG8pOkZlLnBvbHlmaWxsVW5pc29sYXRlZChlLHQsbixvKSl9O0ZlLnBvbHlmaWxsVW5pc29sYXRlZD1mdW5jdGlvbihlLHQsbixvKXtmb3Iobj1GZS5nbG9iYWwsZT1lLnNwbGl0KCIuIiksbz0wO288ZS5sZW5ndGgtMTtvKyspe3ZhciBhPWVbb107aWYoIShhIGluIG4pKXJldHVybjtuPW5bYV19ZT1lW2UubGVuZ3RoLTFdLG89bltlXSx0PXQobyksdCE9byYmdCE9bnVsbCYmRmUuZGVmaW5lUHJvcGVydHkobixlLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfTtGZS5wb2x5ZmlsbElzb2xhdGVkPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPWUuc3BsaXQoIi4iKTtlPWEubGVuZ3RoPT09MSxvPWFbMF0sbz0hZSYmbyBpbiBGZS5wb2x5ZmlsbHM/RmUucG9seWZpbGxzOkZlLmdsb2JhbDtmb3IodmFyIHI9MDtyPGEubGVuZ3RoLTE7cisrKXt2YXIgaT1hW3JdO2lmKCEoaSBpbiBvKSlyZXR1cm47bz1vW2ldfWE9YVthLmxlbmd0aC0xXSxuPUZlLklTX1NZTUJPTF9OQVRJVkUmJm49PT0iZXM2Ij9vW2FdOm51bGwsdD10KG4pLHQhPW51bGwmJihlP0ZlLmRlZmluZVByb3BlcnR5KEZlLnBvbHlmaWxscyxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnQhPT1uJiYoRmUucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2FdPT09dm9pZCAwJiYobj0xZTkqTWF0aC5yYW5kb20oKT4+PjAsRmUucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2FdPUZlLklTX1NZTUJPTF9OQVRJVkU/RmUuZ2xvYmFsLlN5bWJvbChhKTpGZS5QT0xZRklMTF9QUkVGSVgrbisiJCIrYSksRmUuZGVmaW5lUHJvcGVydHkobyxGZS5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbYV0se2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSkpKX07RmUucG9seWZpbGwoIlByb21pc2UiLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt0aGlzLmJhdGNoXz1udWxsfWZ1bmN0aW9uIG4oaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBhP2k6bmV3IGEoZnVuY3Rpb24oZixkKXtmKGkpfSl9aWYoZSYmKCEoRmUuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRXx8RmUuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRV9XSEVOX05PX1VOSEFORExFRF9SRUpFQ1RJT04mJnR5cGVvZiBGZS5nbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50PiJ1Iil8fCFGZS5nbG9iYWwuUHJvbWlzZXx8RmUuZ2xvYmFsLlByb21pc2UudG9TdHJpbmcoKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIik9PT0tMSkpcmV0dXJuIGU7dC5wcm90b3R5cGUuYXN5bmNFeGVjdXRlPWZ1bmN0aW9uKGkpe2lmKHRoaXMuYmF0Y2hfPT1udWxsKXt0aGlzLmJhdGNoXz1bXTt2YXIgZj10aGlzO3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXtmLmV4ZWN1dGVCYXRjaF8oKX0pfXRoaXMuYmF0Y2hfLnB1c2goaSl9O3ZhciBvPUZlLmdsb2JhbC5zZXRUaW1lb3V0O3QucHJvdG90eXBlLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uPWZ1bmN0aW9uKGkpe28oaSwwKX0sdC5wcm90b3R5cGUuZXhlY3V0ZUJhdGNoXz1mdW5jdGlvbigpe2Zvcig7dGhpcy5iYXRjaF8mJnRoaXMuYmF0Y2hfLmxlbmd0aDspe3ZhciBpPXRoaXMuYmF0Y2hfO3RoaXMuYmF0Y2hfPVtdO2Zvcih2YXIgZj0wO2Y8aS5sZW5ndGg7KytmKXt2YXIgZD1pW2ZdO2lbZl09bnVsbDt0cnl7ZCgpfWNhdGNoKGMpe3RoaXMuYXN5bmNUaHJvd18oYyl9fX10aGlzLmJhdGNoXz1udWxsfSx0LnByb3RvdHlwZS5hc3luY1Rocm93Xz1mdW5jdGlvbihpKXt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7dGhyb3cgaX0pfTt2YXIgYT1mdW5jdGlvbihpKXt0aGlzLnN0YXRlXz0wLHRoaXMucmVzdWx0Xz12b2lkIDAsdGhpcy5vblNldHRsZWRDYWxsYmFja3NfPVtdLHRoaXMuaXNSZWplY3Rpb25IYW5kbGVkXz0hMTt2YXIgZj10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e2koZi5yZXNvbHZlLGYucmVqZWN0KX1jYXRjaChkKXtmLnJlamVjdChkKX19O2EucHJvdG90eXBlLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShjKXtyZXR1cm4gZnVuY3Rpb24odSl7ZHx8KGQ9ITAsYy5jYWxsKGYsdSkpfX12YXIgZj10aGlzLGQ9ITE7cmV0dXJue3Jlc29sdmU6aSh0aGlzLnJlc29sdmVUb18pLHJlamVjdDppKHRoaXMucmVqZWN0Xyl9fSxhLnByb3RvdHlwZS5yZXNvbHZlVG9fPWZ1bmN0aW9uKGkpe2lmKGk9PT10aGlzKXRoaXMucmVqZWN0XyhuZXcgVHlwZUVycm9yKCJBIFByb21pc2UgY2Fubm90IHJlc29sdmUgdG8gaXRzZWxmIikpO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGEpdGhpcy5zZXR0bGVTYW1lQXNQcm9taXNlXyhpKTtlbHNle2U6c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6dmFyIGY9aSE9bnVsbDticmVhayBlO2Nhc2UiZnVuY3Rpb24iOmY9ITA7YnJlYWsgZTtkZWZhdWx0OmY9ITF9Zj90aGlzLnJlc29sdmVUb05vblByb21pc2VPYmpfKGkpOnRoaXMuZnVsZmlsbF8oaSl9fSxhLnByb3RvdHlwZS5yZXNvbHZlVG9Ob25Qcm9taXNlT2JqXz1mdW5jdGlvbihpKXt2YXIgZj12b2lkIDA7dHJ5e2Y9aS50aGVufWNhdGNoKGQpe3RoaXMucmVqZWN0XyhkKTtyZXR1cm59dHlwZW9mIGY9PSJmdW5jdGlvbiI/dGhpcy5zZXR0bGVTYW1lQXNUaGVuYWJsZV8oZixpKTp0aGlzLmZ1bGZpbGxfKGkpfSxhLnByb3RvdHlwZS5yZWplY3RfPWZ1bmN0aW9uKGkpe3RoaXMuc2V0dGxlXygyLGkpfSxhLnByb3RvdHlwZS5mdWxmaWxsXz1mdW5jdGlvbihpKXt0aGlzLnNldHRsZV8oMSxpKX0sYS5wcm90b3R5cGUuc2V0dGxlXz1mdW5jdGlvbihpLGYpe2lmKHRoaXMuc3RhdGVfIT0wKXRocm93IEVycm9yKCJDYW5ub3Qgc2V0dGxlKCIraSsiLCAiK2YrIik6IFByb21pc2UgYWxyZWFkeSBzZXR0bGVkIGluIHN0YXRlIit0aGlzLnN0YXRlXyk7dGhpcy5zdGF0ZV89aSx0aGlzLnJlc3VsdF89Zix0aGlzLnN0YXRlXz09PTImJnRoaXMuc2NoZWR1bGVVbmhhbmRsZWRSZWplY3Rpb25DaGVja18oKSx0aGlzLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfKCl9LGEucHJvdG90eXBlLnNjaGVkdWxlVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tfPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztvKGZ1bmN0aW9uKCl7aWYoaS5ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb25fKCkpe3ZhciBmPUZlLmdsb2JhbC5jb25zb2xlO3R5cGVvZiBmPCJ1IiYmZi5lcnJvcihpLnJlc3VsdF8pfX0sMSl9LGEucHJvdG90eXBlLm5vdGlmeVVuaGFuZGxlZFJlamVjdGlvbl89ZnVuY3Rpb24oKXtpZih0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF8pcmV0dXJuITE7dmFyIGk9RmUuZ2xvYmFsLkN1c3RvbUV2ZW50LGY9RmUuZ2xvYmFsLkV2ZW50LGQ9RmUuZ2xvYmFsLmRpc3BhdGNoRXZlbnQ7cmV0dXJuIHR5cGVvZiBkPiJ1Ij8hMDoodHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSgidW5oYW5kbGVkcmVqZWN0aW9uIix7Y2FuY2VsYWJsZTohMH0pOnR5cGVvZiBmPT0iZnVuY3Rpb24iP2k9bmV3IGYoInVuaGFuZGxlZHJlamVjdGlvbiIse2NhbmNlbGFibGU6ITB9KTooaT1GZS5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50IiksaS5pbml0Q3VzdG9tRXZlbnQoInVuaGFuZGxlZHJlamVjdGlvbiIsITEsITAsaSkpLGkucHJvbWlzZT10aGlzLGkucmVhc29uPXRoaXMucmVzdWx0XyxkKGkpKX0sYS5wcm90b3R5cGUuZXhlY3V0ZU9uU2V0dGxlZENhbGxiYWNrc189ZnVuY3Rpb24oKXtpZih0aGlzLm9uU2V0dGxlZENhbGxiYWNrc18hPW51bGwpe2Zvcih2YXIgaT0wO2k8dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLmxlbmd0aDsrK2kpci5hc3luY0V4ZWN1dGUodGhpcy5vblNldHRsZWRDYWxsYmFja3NfW2ldKTt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189bnVsbH19O3ZhciByPW5ldyB0O3JldHVybiBhLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNQcm9taXNlXz1mdW5jdGlvbihpKXt2YXIgZj10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7aS5jYWxsV2hlblNldHRsZWRfKGYucmVzb2x2ZSxmLnJlamVjdCl9LGEucHJvdG90eXBlLnNldHRsZVNhbWVBc1RoZW5hYmxlXz1mdW5jdGlvbihpLGYpe3ZhciBkPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTt0cnl7aS5jYWxsKGYsZC5yZXNvbHZlLGQucmVqZWN0KX1jYXRjaChjKXtkLnJlamVjdChjKX19LGEucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oaSxmKXtmdW5jdGlvbiBkKGgsbSl7cmV0dXJuIHR5cGVvZiBoPT0iZnVuY3Rpb24iP2Z1bmN0aW9uKGIpe3RyeXtjKGgoYikpfWNhdGNoKHApe3UocCl9fTptfXZhciBjLHUsbD1uZXcgYShmdW5jdGlvbihoLG0pe2M9aCx1PW19KTtyZXR1cm4gdGhpcy5jYWxsV2hlblNldHRsZWRfKGQoaSxjKSxkKGYsdSkpLGx9LGEucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGkpfSxhLnByb3RvdHlwZS5jYWxsV2hlblNldHRsZWRfPWZ1bmN0aW9uKGksZil7ZnVuY3Rpb24gZCgpe3N3aXRjaChjLnN0YXRlXyl7Y2FzZSAxOmkoYy5yZXN1bHRfKTticmVhaztjYXNlIDI6ZihjLnJlc3VsdF8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgc3RhdGU6ICIrYy5zdGF0ZV8pfX12YXIgYz10aGlzO3RoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz09bnVsbD9yLmFzeW5jRXhlY3V0ZShkKTp0aGlzLm9uU2V0dGxlZENhbGxiYWNrc18ucHVzaChkKSx0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF89ITB9LGEucmVzb2x2ZT1uLGEucmVqZWN0PWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgYShmdW5jdGlvbihmLGQpe2QoaSl9KX0sYS5yYWNlPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgYShmdW5jdGlvbihmLGQpe2Zvcih2YXIgYz1GZS5tYWtlSXRlcmF0b3IoaSksdT1jLm5leHQoKTshdS5kb25lO3U9Yy5uZXh0KCkpbih1LnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKGYsZCl9KX0sYS5hbGw9ZnVuY3Rpb24oaSl7dmFyIGY9RmUubWFrZUl0ZXJhdG9yKGkpLGQ9Zi5uZXh0KCk7cmV0dXJuIGQuZG9uZT9uKFtdKTpuZXcgYShmdW5jdGlvbihjLHUpe2Z1bmN0aW9uIGwoYil7cmV0dXJuIGZ1bmN0aW9uKHApe2hbYl09cCxtLS0sbT09MCYmYyhoKX19dmFyIGg9W10sbT0wO2RvIGgucHVzaCh2b2lkIDApLG0rKyxuKGQudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8obChoLmxlbmd0aC0xKSx1KSxkPWYubmV4dCgpO3doaWxlKCFkLmRvbmUpfSl9LGF9LCJlczYiLCJlczMiKTtGZS5vd25zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfTtGZS5hc3NpZ249RmUuVFJVU1RfRVM2X1BPTFlGSUxMUyYmdHlwZW9mIE9iamVjdC5hc3NpZ249PSJmdW5jdGlvbiI/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciBvPWFyZ3VtZW50c1tuXTtpZihvKWZvcih2YXIgYSBpbiBvKUZlLm93bnMobyxhKSYmKGVbYV09b1thXSl9cmV0dXJuIGV9O0ZlLnBvbHlmaWxsKCJPYmplY3QuYXNzaWduIixmdW5jdGlvbihlKXtyZXR1cm4gZXx8RmUuYXNzaWdufSwiZXM2IiwiZXMzIik7RmUuY2hlY2tTdHJpbmdBcmdzPWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSAndGhpcycgdmFsdWUgZm9yIFN0cmluZy5wcm90b3R5cGUuIituKyIgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQiKTtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuIituKyIgbXVzdCBub3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24iKTtyZXR1cm4gZSsiIn07RmUucG9seWZpbGwoIlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCIsZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKHQsbil7dmFyIG89RmUuY2hlY2tTdHJpbmdBcmdzKHRoaXMsdCwic3RhcnRzV2l0aCIpO3QrPSIiO3ZhciBhPW8ubGVuZ3RoLHI9dC5sZW5ndGg7bj1NYXRoLm1heCgwLE1hdGgubWluKG58MCxvLmxlbmd0aCkpO2Zvcih2YXIgaT0wO2k8ciYmbjxhOylpZihvW24rK10hPXRbaSsrXSlyZXR1cm4hMTtyZXR1cm4gaT49cn19LCJlczYiLCJlczMiKTtGZS5wb2x5ZmlsbCgiQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49TnVtYmVyKG4pLG49PT0xLzB8fG49PT0tMS8wP246bnwwfXJldHVybiBlfHxmdW5jdGlvbihuLG8sYSl7dmFyIHI9dGhpcy5sZW5ndGg7aWYobj10KG4pLG89dChvKSxhPWE9PT12b2lkIDA/cjp0KGEpLG49MD5uP01hdGgubWF4KHIrbiwwKTpNYXRoLm1pbihuLHIpLG89MD5vP01hdGgubWF4KHIrbywwKTpNYXRoLm1pbihvLHIpLGE9MD5hP01hdGgubWF4KHIrYSwwKTpNYXRoLm1pbihhLHIpLG48bylmb3IoO288YTspbyBpbiB0aGlzP3RoaXNbbisrXT10aGlzW28rK106KGRlbGV0ZSB0aGlzW24rK10sbysrKTtlbHNlIGZvcihhPU1hdGgubWluKGEscitvLW4pLG4rPWEtbzthPm87KS0tYSBpbiB0aGlzP3RoaXNbLS1uXT10aGlzW2FdOmRlbGV0ZSB0aGlzWy0tbl07cmV0dXJuIHRoaXN9fSwiZXM2IiwiZXMzIik7RmUudHlwZWRBcnJheUNvcHlXaXRoaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGlufTtGZS5wb2x5ZmlsbCgiSW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7RmUucG9seWZpbGwoIlVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtGZS5wb2x5ZmlsbCgiVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtGZS5wb2x5ZmlsbCgiSW50MTZBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJVaW50MTZBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJJbnQzMkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7RmUucG9seWZpbGwoIlVpbnQzMkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixGZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7RmUucG9seWZpbGwoIkZsb2F0MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsRmUudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0ZlLnBvbHlmaWxsKCJGbG9hdDY0QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEZlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTt2YXIgc3k9KGZ1bmN0aW9uKCl7dmFyIGU9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKGU9ZXx8X19maWxlbmFtZSksZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihqKXtyZXR1cm4gTy5sb2NhdGVGaWxlP08ubG9jYXRlRmlsZShqLGZlKTpmZStqfWZ1bmN0aW9uIG8oaixLLHRlKXt2YXIgTWU9Syt0ZTtmb3IodGU9SztqW3RlXSYmISh0ZT49TWUpOykrK3RlO2lmKDE2PHRlLUsmJmouYnVmZmVyJiZZZSlyZXR1cm4gWWUuZGVjb2RlKGouc3ViYXJyYXkoSyx0ZSkpO2ZvcihNZT0iIjtLPHRlOyl7dmFyIGN0PWpbSysrXTtpZihjdCYxMjgpe3ZhciBwdD1qW0srK10mNjM7aWYoKGN0JjIyNCk9PTE5MilNZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoY3QmMzEpPDw2fHB0KTtlbHNle3ZhciBOcj1qW0srK10mNjM7Y3Q9KGN0JjI0MCk9PTIyND8oY3QmMTUpPDwxMnxwdDw8NnxOcjooY3QmNyk8PDE4fHB0PDwxMnxOcjw8NnxqW0srK10mNjMsNjU1MzY+Y3Q/TWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoY3QpOihjdC09NjU1MzYsTWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Y3Q+PjEwLDU2MzIwfGN0JjEwMjMpKX19ZWxzZSBNZSs9U3RyaW5nLmZyb21DaGFyQ29kZShjdCl9cmV0dXJuIE1lfWZ1bmN0aW9uIGEoaixLKXtyZXR1cm4gaj9vKEl0LGosSyk6IiJ9ZnVuY3Rpb24gcigpe3ZhciBqPWplLmJ1ZmZlcjtPLkhFQVA4PWZ0PW5ldyBJbnQ4QXJyYXkoaiksTy5IRUFQMTY9bmV3IEludDE2QXJyYXkoaiksTy5IRUFQMzI9Q3Q9bmV3IEludDMyQXJyYXkoaiksTy5IRUFQVTg9SXQ9bmV3IFVpbnQ4QXJyYXkoaiksTy5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShqKSxPLkhFQVBVMzI9aHQ9bmV3IFVpbnQzMkFycmF5KGopLE8uSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGopLE8uSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGopfWZ1bmN0aW9uIGkoail7dGhyb3cgTy5vbkFib3J0JiZPLm9uQWJvcnQoaiksaj0iQWJvcnRlZCgiK2orIikiLFhlKGopLGl0PSEwLGo9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihqKyIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIiksb2Uoaiksan1mdW5jdGlvbiBmKGope3RyeXtpZihqPT1xdCYmTGUpcmV0dXJuIG5ldyBVaW50OEFycmF5KExlKTtpZihKZSlyZXR1cm4gSmUoaik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKEspe2koSyl9fWZ1bmN0aW9uIGQoKXtpZighTGUmJihtZXx8bGUpKXtpZih0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJiFxdC5zdGFydHNXaXRoKCJmaWxlOi8vIikpcmV0dXJuIGZldGNoKHF0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihqKXtpZighai5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK3F0KyInIjtyZXR1cm4gai5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZihxdCl9KTtpZihXZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaixLKXtXZShxdCxmdW5jdGlvbih0ZSl7aihuZXcgVWludDhBcnJheSh0ZSkpfSxLKX0pfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGYocXQpfSl9ZnVuY3Rpb24gYyhqKXtmb3IoOzA8ai5sZW5ndGg7KWouc2hpZnQoKShPKX1mdW5jdGlvbiB1KGope3RoaXMuZXhjUHRyPWosdGhpcy5wdHI9ai0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKEspe2h0W3RoaXMucHRyKzQ+PjJdPUt9LHRoaXMuZ2V0X3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gaHRbdGhpcy5wdHIrND4+Ml19LHRoaXMuc2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oSyl7aHRbdGhpcy5wdHIrOD4+Ml09S30sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBodFt0aGlzLnB0cis4Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oSyl7Q3RbdGhpcy5wdHI+PjJdPUt9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbihLKXtmdFt0aGlzLnB0cisxMj4+MF09Sz8xOjB9LHRoaXMuZ2V0X2NhdWdodD1mdW5jdGlvbigpe3JldHVybiBmdFt0aGlzLnB0cisxMj4+MF0hPTB9LHRoaXMuc2V0X3JldGhyb3duPWZ1bmN0aW9uKEspe2Z0W3RoaXMucHRyKzEzPj4wXT1LPzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gZnRbdGhpcy5wdHIrMTM+PjBdIT0wfSx0aGlzLmluaXQ9ZnVuY3Rpb24oSyx0ZSl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUoSyksdGhpcy5zZXRfZGVzdHJ1Y3Rvcih0ZSksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe0N0W3RoaXMucHRyPj4yXSs9MX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBLPUN0W3RoaXMucHRyPj4yXTtyZXR1cm4gQ3RbdGhpcy5wdHI+PjJdPUstMSxLPT09MX0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKEspe2h0W3RoaXMucHRyKzE2Pj4yXT1LfSx0aGlzLmdldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oKXtyZXR1cm4gaHRbdGhpcy5wdHIrMTY+PjJdfSx0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7aWYocXUodGhpcy5nZXRfdHlwZSgpKSlyZXR1cm4gaHRbdGhpcy5leGNQdHI+PjJdO3ZhciBLPXRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO3JldHVybiBLIT09MD9LOnRoaXMuZXhjUHRyfX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gaigpe2lmKCFkZiYmKGRmPSEwLE8uY2FsbGVkUnVuPSEwLCFpdCkpe2lmKEtlPSEwLGMoUHQpLFooTyksTy5vblJ1bnRpbWVJbml0aWFsaXplZCYmTy5vblJ1bnRpbWVJbml0aWFsaXplZCgpLE8ucG9zdFJ1bilmb3IodHlwZW9mIE8ucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKE8ucG9zdFJ1bj1bTy5wb3N0UnVuXSk7Ty5wb3N0UnVuLmxlbmd0aDspTHQudW5zaGlmdChPLnBvc3RSdW4uc2hpZnQoKSk7YyhMdCl9fWlmKCEoMDxWZSkpe2lmKE8ucHJlUnVuKWZvcih0eXBlb2YgTy5wcmVSdW49PSJmdW5jdGlvbiImJihPLnByZVJ1bj1bTy5wcmVSdW5dKTtPLnByZVJ1bi5sZW5ndGg7KUt0LnVuc2hpZnQoTy5wcmVSdW4uc2hpZnQoKSk7YyhLdCksMDxWZXx8KE8uc2V0U3RhdHVzPyhPLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5zZXRTdGF0dXMoIiIpfSwxKSxqKCl9LDEpKTpqKCkpfX1mdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIG0oail7cmV0dXJuKGp8fGgpLl9fY2FjaGVfX31mdW5jdGlvbiBiKGosSyl7dmFyIHRlPW0oSyksTWU9dGVbal07cmV0dXJuIE1lfHwoTWU9T2JqZWN0LmNyZWF0ZSgoS3x8aCkucHJvdG90eXBlKSxNZS5wdHI9aix0ZVtqXT1NZSl9ZnVuY3Rpb24gcChqKXtpZih0eXBlb2Ygaj09InN0cmluZyIpe2Zvcih2YXIgSz0wLHRlPTA7dGU8ai5sZW5ndGg7Kyt0ZSl7dmFyIE1lPWouY2hhckNvZGVBdCh0ZSk7MTI3Pj1NZT9LKys6MjA0Nz49TWU/Sys9Mjo1NTI5Njw9TWUmJjU3MzQzPj1NZT8oSys9NCwrK3RlKTpLKz0zfWlmKEs9QXJyYXkoSysxKSx0ZT0wLE1lPUsubGVuZ3RoLDA8TWUpe01lPXRlK01lLTE7Zm9yKHZhciBjdD0wO2N0PGoubGVuZ3RoOysrY3Qpe3ZhciBwdD1qLmNoYXJDb2RlQXQoY3QpO2lmKDU1Mjk2PD1wdCYmNTczNDM+PXB0KXt2YXIgTnI9ai5jaGFyQ29kZUF0KCsrY3QpO3B0PTY1NTM2KygocHQmMTAyMyk8PDEwKXxOciYxMDIzfWlmKDEyNz49cHQpe2lmKHRlPj1NZSlicmVhaztLW3RlKytdPXB0fWVsc2V7aWYoMjA0Nz49cHQpe2lmKHRlKzE+PU1lKWJyZWFrO0tbdGUrK109MTkyfHB0Pj42fWVsc2V7aWYoNjU1MzU+PXB0KXtpZih0ZSsyPj1NZSlicmVhaztLW3RlKytdPTIyNHxwdD4+MTJ9ZWxzZXtpZih0ZSszPj1NZSlicmVhaztLW3RlKytdPTI0MHxwdD4+MTgsS1t0ZSsrXT0xMjh8cHQ+PjEyJjYzfUtbdGUrK109MTI4fHB0Pj42JjYzfUtbdGUrK109MTI4fHB0JjYzfX1LW3RlXT0wfXJldHVybiBqPU90LmFsbG9jKEssZnQpLE90LmNvcHkoSyxmdCxqKSxqfXJldHVybiBqfWZ1bmN0aW9uIHkoail7aWYodHlwZW9mIGo9PSJvYmplY3QiKXt2YXIgSz1PdC5hbGxvYyhqLGZ0KTtyZXR1cm4gT3QuY29weShqLGZ0LEspLEt9cmV0dXJuIGp9ZnVuY3Rpb24gRSgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIF8oKXt0aGlzLnB0cj1hbigpLG0oXylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gVCgpe3RoaXMucHRyPVZuKCksbShUKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB3KCl7dGhpcy5wdHI9cm8oKSxtKHcpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFIoKXt0aGlzLnB0cj14dCgpLG0oUilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gUygpe3RoaXMucHRyPUdpKCksbShTKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBDKCl7dGhpcy5wdHI9aG8oKSxtKEMpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEkoKXt0aGlzLnB0cj1GYygpLG0oSSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTigpe3RoaXMucHRyPWlhKCksbShOKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBQKCl7dGhpcy5wdHI9QmMoKSxtKFApW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHYoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgU3RhdHVzLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIEEoKXt0aGlzLnB0cj12ZCgpLG0oQSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24geCgpe3RoaXMucHRyPVVjKCksbSh4KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBNKCl7dGhpcy5wdHI9JHMoKSxtKE0pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEYoKXt0aGlzLnB0cj1qYygpLG0oRilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gVSgpe3RoaXMucHRyPUdkKCksbShVKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB6KCl7dGhpcy5wdHI9S2QoKSxtKHopW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEQoKXt0aGlzLnB0cj1zaSgpLG0oRClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRygpe3RoaXMucHRyPVpkKCksbShHKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBIKCl7dGhpcy5wdHI9YWYoKSxtKEgpW3RoaXMucHRyXT10aGlzfXQ9dD09PXZvaWQgMD97fTp0O3ZhciBPPXR5cGVvZiB0PCJ1Ij90Ont9LFosb2U7Ty5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihqLEspe1o9aixvZT1LfSk7dmFyIGNlPSExLGRlPSExO08ub25SdW50aW1lSW5pdGlhbGl6ZWQ9ZnVuY3Rpb24oKXtjZT0hMCxkZSYmdHlwZW9mIE8ub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJk8ub25Nb2R1bGVMb2FkZWQoTyl9LE8ub25Nb2R1bGVQYXJzZWQ9ZnVuY3Rpb24oKXtkZT0hMCxjZSYmdHlwZW9mIE8ub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJk8ub25Nb2R1bGVMb2FkZWQoTyl9LE8uaXNWZXJzaW9uU3VwcG9ydGVkPWZ1bmN0aW9uKGope3JldHVybiB0eXBlb2YgaiE9InN0cmluZyI/ITE6KGo9ai5zcGxpdCgiLiIpLDI+ai5sZW5ndGh8fDM8ai5sZW5ndGg/ITE6alswXT09MSYmMDw9alsxXSYmNT49alsxXT8hMDohKGpbMF0hPTB8fDEwPGpbMV0pKX07dmFyIGVlPU9iamVjdC5hc3NpZ24oe30sTyksbWU9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsbGU9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsYmU9dHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PSJzdHJpbmciLGZlPSIiO2lmKGJlKXt2YXIgYWU9YmEoImZzIiksUmU9YmEoInBhdGgiKTtmZT1sZT9SZS5kaXJuYW1lKGZlKSsiLyI6X19kaXJuYW1lKyIvIjt2YXIgTmU9ZnVuY3Rpb24oaixLKXtyZXR1cm4gaj1qLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKGopOlJlLm5vcm1hbGl6ZShqKSxhZS5yZWFkRmlsZVN5bmMoaixLP3ZvaWQgMDoidXRmOCIpfSxKZT1mdW5jdGlvbihqKXtyZXR1cm4gaj1OZShqLCEwKSxqLmJ1ZmZlcnx8KGo9bmV3IFVpbnQ4QXJyYXkoaikpLGp9LFdlPWZ1bmN0aW9uKGosSyx0ZSl7aj1qLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKGopOlJlLm5vcm1hbGl6ZShqKSxhZS5yZWFkRmlsZShqLGZ1bmN0aW9uKE1lLGN0KXtNZT90ZShNZSk6SyhjdC5idWZmZXIpfSl9OzE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSxwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksTy5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn19ZWxzZShtZXx8bGUpJiYobGU/ZmU9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihmZT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksZSYmKGZlPWUpLGZlPWZlLmluZGV4T2YoImJsb2I6IikhPT0wP2ZlLnN1YnN0cigwLGZlLnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSk6IiIsTmU9ZnVuY3Rpb24oail7dmFyIEs9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBLLm9wZW4oIkdFVCIsaiwhMSksSy5zZW5kKG51bGwpLEsucmVzcG9uc2VUZXh0fSxsZSYmKEplPWZ1bmN0aW9uKGope3ZhciBLPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSy5vcGVuKCJHRVQiLGosITEpLEsucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsSy5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KEsucmVzcG9uc2UpfSksV2U9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9bmV3IFhNTEh0dHBSZXF1ZXN0O01lLm9wZW4oIkdFVCIsaiwhMCksTWUucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsTWUub25sb2FkPWZ1bmN0aW9uKCl7TWUuc3RhdHVzPT0yMDB8fE1lLnN0YXR1cz09MCYmTWUucmVzcG9uc2U/SyhNZS5yZXNwb25zZSk6dGUoKX0sTWUub25lcnJvcj10ZSxNZS5zZW5kKG51bGwpfSk7dmFyIHR0PU8ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksWGU9Ty5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihPLGVlKSxlZT1udWxsO3ZhciBMZTtPLndhc21CaW5hcnkmJihMZT1PLndhc21CaW5hcnkpLHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmkoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgamUsaXQ9ITEsWWU9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDAsZnQsSXQsQ3QsaHQsS3Q9W10sUHQ9W10sTHQ9W10sS2U9ITEsVmU9MCxSdD1udWxsLEZ0PW51bGwscXQ9ImRyYWNvX2RlY29kZXIud2FzbSI7cXQuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHwocXQ9bihxdCkpO3ZhciBadD0wLG9uPVtudWxsLFtdLFtdXSx3bj17YjpmdW5jdGlvbihqLEssdGUpe3Rocm93IG5ldyB1KGopLmluaXQoSyx0ZSksWnQrKyxqfSxhOmZ1bmN0aW9uKCl7aSgiIil9LGc6ZnVuY3Rpb24oaixLLHRlKXtJdC5jb3B5V2l0aGluKGosSyxLK3RlKX0sZTpmdW5jdGlvbihqKXt2YXIgSz1JdC5sZW5ndGg7aWYoaj4+Pj0wLDIxNDc0ODM2NDg8ailyZXR1cm4hMTtmb3IodmFyIHRlPTE7ND49dGU7dGUqPTIpe3ZhciBNZT1LKigxKy4yL3RlKTtNZT1NYXRoLm1pbihNZSxqKzEwMDY2MzI5Nik7dmFyIGN0PU1hdGg7TWU9TWF0aC5tYXgoaixNZSksY3Q9Y3QubWluLmNhbGwoY3QsMjE0NzQ4MzY0OCxNZSsoNjU1MzYtTWUlNjU1MzYpJTY1NTM2KTtlOntNZT1qZS5idWZmZXI7dHJ5e2plLmdyb3coY3QtTWUuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxyKCk7dmFyIHB0PTE7YnJlYWsgZX1jYXRjaHt9cHQ9dm9pZCAwfWlmKHB0KXJldHVybiEwfXJldHVybiExfSxmOmZ1bmN0aW9uKGope3JldHVybiA1Mn0sZDpmdW5jdGlvbihqLEssdGUsTWUsY3Qpe3JldHVybiA3MH0sYzpmdW5jdGlvbihqLEssdGUsTWUpe2Zvcih2YXIgY3Q9MCxwdD0wO3B0PHRlO3B0Kyspe3ZhciBOcj1odFtLPj4yXSxLYz1odFtLKzQ+PjJdO0srPTg7Zm9yKHZhciBCPTA7QjxLYztCKyspe3ZhciBMPUl0W05yK0JdLFc9b25bal07TD09PTB8fEw9PT0xMD8oKGo9PT0xP3R0OlhlKShvKFcsMCkpLFcubGVuZ3RoPTApOlcucHVzaChMKX1jdCs9S2N9cmV0dXJuIGh0W01lPj4yXT1jdCwwfX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaihjdCxwdCl7Ty5hc209Y3QuZXhwb3J0cyxqZT1PLmFzbS5oLHIoKSxQdC51bnNoaWZ0KE8uYXNtLmkpLFZlLS0sTy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZPLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoVmUpLFZlPT0wJiYoUnQhPT1udWxsJiYoY2xlYXJJbnRlcnZhbChSdCksUnQ9bnVsbCksRnQmJihjdD1GdCxGdD1udWxsLGN0KCkpKX1mdW5jdGlvbiBLKGN0KXtqKGN0Lmluc3RhbmNlKX1mdW5jdGlvbiB0ZShjdCl7cmV0dXJuIGQoKS50aGVuKGZ1bmN0aW9uKHB0KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUocHQsTWUpfSkudGhlbihmdW5jdGlvbihwdCl7cmV0dXJuIHB0fSkudGhlbihjdCxmdW5jdGlvbihwdCl7WGUoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrcHQpLGkocHQpfSl9dmFyIE1lPXthOndufTtpZihWZSsrLE8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmTy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFZlKSxPLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIE8uaW5zdGFudGlhdGVXYXNtKE1lLGopfWNhdGNoKGN0KXtYZSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitjdCksb2UoY3QpfXJldHVybihmdW5jdGlvbigpe3JldHVybiBMZXx8dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIT0iZnVuY3Rpb24ifHxxdC5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil8fHF0LnN0YXJ0c1dpdGgoImZpbGU6Ly8iKXx8YmV8fHR5cGVvZiBmZXRjaCE9ImZ1bmN0aW9uIj90ZShLKTpmZXRjaChxdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oY3Qpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhjdCxNZSkudGhlbihLLGZ1bmN0aW9uKHB0KXtyZXR1cm4gWGUoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3B0KSxYZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSx0ZShLKX0pfSl9KSgpLmNhdGNoKG9lKSx7fX0pKCk7dmFyIER0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRHQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1PLmFzbS5rKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGFuPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0RlY29kZXJCdWZmZXJfMD1mdW5jdGlvbigpe3JldHVybihhbj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9EZWNvZGVyQnVmZmVyXzA9Ty5hc20ubCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6dD1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9Jbml0XzI9ZnVuY3Rpb24oKXtyZXR1cm4oenQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfSW5pdF8yPU8uYXNtLm0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZm49Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihmbj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9fX2Rlc3Ryb3lfX18wPU8uYXNtLm4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVm49Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFZuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1PLmFzbS5vKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX3RyYW5zZm9ybV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSG49Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfdHJhbnNmb3JtX3R5cGVfMD1PLmFzbS5wKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFBuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUG49Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfX19kZXN0cm95X19fMD1PLmFzbS5xKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHJvPU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHJvPU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPU8uYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa3Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oa3Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9Ty5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4dD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1mdW5jdGlvbigpe3JldHVybih4dD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1PLmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE9uPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oT249Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3NpemVfMD1PLmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4oa249Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX0dldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1PLmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEFvPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEFvPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPU8uYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR3Q9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2RhdGFfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEd0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9kYXRhX3R5cGVfMD1PLmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGRuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKGRuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPU8uYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ289Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX25vcm1hbGl6ZWRfMD1mdW5jdGlvbigpe3JldHVybihDbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbm9ybWFsaXplZF8wPU8uYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdm49Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4odm49Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9Ty5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1mdW5jdGlvbigpe3JldHVybihXbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1PLmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERhPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV91bmlxdWVfaWRfMD1mdW5jdGlvbigpe3JldHVybihEYT1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfdW5pcXVlX2lkXzA9Ty5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6aT1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih6aT1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1PLmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4oR2k9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fMD1PLmFzbS5FKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9pPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybihvaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9Ty5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCYT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQmE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPU8uYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9taW5fdmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihhaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX21pbl92YWx1ZV8xPU8uYXNtLkgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVmk9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9yYW5nZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFZpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcmFuZ2VfMD1PLmFzbS5JKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFNyPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihTcj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9Ty5hc20uSikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxobz1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4oaG89Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV8wPU8uYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sd289Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybih3bz1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPU8uYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1mdW5jdGlvbigpe3JldHVybihVYT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPU8uYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmM9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih2Yz1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPU8uYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmM9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfUG9pbnRDbG91ZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX1BvaW50Q2xvdWRfMD1PLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9hdHRyaWJ1dGVzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oS249Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX2F0dHJpYnV0ZXNfMD1PLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LENyPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9wb2ludHNfMD1mdW5jdGlvbigpe3JldHVybihDcj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fcG9pbnRzXzA9Ty5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCdD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEJ0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX19fZGVzdHJveV9fXzA9Ty5hc20uUikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpYT1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9NZXNoXzA9ZnVuY3Rpb24oKXtyZXR1cm4oaWE9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfTWVzaF8wPU8uYXNtLlMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9Ty5hc20uVCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fYXR0cmlidXRlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKE5kPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9hdHRyaWJ1dGVzXzA9Ty5hc20uVSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fcG9pbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX3BvaW50c18wPU8uYXNtLlYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRGM9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihEYz1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9fX2Rlc3Ryb3lfX18wPU8uYXNtLlcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmM9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQmM9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9Ty5hc20uWCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxacz1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihacz1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1PLmFzbS5ZKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFBkPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFBkPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPU8uYXNtLlopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUXM9Ty5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19va18wPWZ1bmN0aW9uKCl7cmV0dXJuKFFzPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfb2tfMD1PLmFzbS5fKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHJpPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfZXJyb3JfbXNnXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocmk9Ty5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19lcnJvcl9tc2dfMD1PLmFzbS4kKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtkPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihrZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX19fZGVzdHJveV9fXzA9Ty5hc20uYWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4odmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9Ty5hc20uYmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oRmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9Ty5hc20uY2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihpaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfc2l6ZV8wPU8uYXNtLmRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGNpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLmVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFVjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFVjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPU8uYXNtLmZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKERkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLmdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X3NpemVfMD1PLmFzbS5oYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMYT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihMYT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5pYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkcz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0RyYWNvVUludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKCRzPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfRHJhY29VSW50OEFycmF5XzA9Ty5hc20uamEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZWY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKGVmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5rYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihMYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1PLmFzbS5sYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLm1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGpjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfRHJhY29JbnQxNkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oamM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9EcmFjb0ludDE2QXJyYXlfMD1PLmFzbS5uYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oTGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLm9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPU8uYXNtLnBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih6ZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20ucWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfRHJhY29VSW50MTZBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEdkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0RyYWNvVUludDE2QXJyYXlfMD1PLmFzbS5yYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFZkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0dldFZhbHVlXzE9Ty5hc20uc2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEhkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X3NpemVfMD1PLmFzbS50YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Zj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHRmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20udWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9EcmFjb0ludDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihLZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0RyYWNvSW50MzJBcnJheV8wPU8uYXNtLnZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihxZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0dldFZhbHVlXzE9Ty5hc20ud2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oV2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9Ty5hc20ueGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFhkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS55YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9EcmFjb1VJbnQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oc2k9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfRHJhY29VSW50MzJBcnJheV8wPU8uYXNtLnphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFlkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oWWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5BYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxKZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfc2l6ZV8wPU8uYXNtLkJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSGk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5DYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxaZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX01ldGFkYXRhUXVlcmllcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKFpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTWV0YWRhdGFRdWVyaWVyXzA9Ty5hc20uRGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9IYXNFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKFFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfSGFzRW50cnlfMj1PLmFzbS5FYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsYT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4obGE9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeV8yPU8uYXNtLkZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5mPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKG5mPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPU8uYXNtLkdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCRkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RG91YmxlRW50cnlfMj1mdW5jdGlvbigpe3JldHVybigkZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldERvdWJsZUVudHJ5XzI9Ty5hc20uSGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZXU9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRTdHJpbmdFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGV1PU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0U3RyaW5nRW50cnlfMj1PLmFzbS5JYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0dT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1mdW5jdGlvbigpe3JldHVybih0dT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1PLmFzbS5KYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYbz1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEVudHJ5TmFtZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKFhvPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RW50cnlOYW1lXzI9Ty5hc20uS2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sb2Y9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKG9mPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfX19kZXN0cm95X19fMD1PLmFzbS5MYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhZj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYWY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2Rlcl8wPU8uYXNtLk1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9Qb2ludENsb3VkXzM9ZnVuY3Rpb24oKXtyZXR1cm4oS2k9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWRfMz1PLmFzbS5OYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxudT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKG51PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9NZXNoXzM9Ty5hc20uT2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0semM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRfMj1mdW5jdGlvbigpe3JldHVybih6Yz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZF8yPU8uYXNtLlBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG91PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlOYW1lXzI9ZnVuY3Rpb24oKXtyZXR1cm4ob3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU5hbWVfMj1PLmFzbS5RYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxyZj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeV8zPWZ1bmN0aW9uKCl7cmV0dXJuKHJmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5XzM9Ty5hc20uUmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY2Y9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9ZnVuY3Rpb24oKXtyZXR1cm4oY2Y9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9Ty5hc20uU2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlQnlVbmlxdWVJZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGF1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUJ5VW5pcXVlSWRfMj1PLmFzbS5UYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxydT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRNZXRhZGF0YV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHJ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldE1ldGFkYXRhXzE9Ty5hc20uVWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR2M9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlTWV0YWRhdGFfMj1mdW5jdGlvbigpe3JldHVybihHYz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVNZXRhZGF0YV8yPU8uYXNtLlZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1vPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKE1vPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPU8uYXNtLldhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2hfMj1mdW5jdGlvbigpe3JldHVybihWYz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoXzI9Ty5hc20uWGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDE2QXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihpdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MTZBcnJheV8zPU8uYXNtLllhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGN1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQzMkFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oY3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDMyQXJyYXlfMz1PLmFzbS5aYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdF8zPWZ1bmN0aW9uKCl7cmV0dXJuKHN1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0XzM9Ty5hc20uX2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihoYT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50c18zPU8uYXNtLiRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKGZ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPU8uYXNtLmFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGR1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihkdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzXzM9Ty5hc20uYmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybih1dT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50c18zPU8uYXNtLmNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHFpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4ocWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHNfMz1PLmFzbS5kYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihsdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1PLmFzbS5lYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNcj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKE1yPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzXzM9Ty5hc20uZmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oaHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9Ty5hc20uZ2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9ZnVuY3Rpb24oKXtyZXR1cm4obXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9Ty5hc20uaGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybV8xPWZ1bmN0aW9uKCl7cmV0dXJuKGJ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX1NraXBBdHRyaWJ1dGVUcmFuc2Zvcm1fMT1PLmFzbS5pYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1mdW5jdGlvbigpe3JldHVybihwdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1PLmFzbS5qYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxndT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1mdW5jdGlvbigpe3JldHVybihndT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1PLmFzbS5rYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxfdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1mdW5jdGlvbigpe3JldHVybihfdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1PLmFzbS5sYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx5dT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHl1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX19fZGVzdHJveV9fXzA9Ty5hc20ubWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKEF1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1PLmFzbS5uYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx3dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKHd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9OT19UUkFOU0ZPUk09Ty5hc20ub2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4oRXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09Ty5hc20ucGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKFR1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1PLmFzbS5xYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9JTlZBTElEPWZ1bmN0aW9uKCl7cmV0dXJuKGZpPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0lOVkFMSUQ9Ty5hc20ucmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049ZnVuY3Rpb24oKXtyZXR1cm4oUnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049Ty5hc20uc2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfTk9STUFMPWZ1bmN0aW9uKCl7cmV0dXJuKHh1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX05PUk1BTD1PLmFzbS50YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1mdW5jdGlvbigpe3JldHVybihXaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1PLmFzbS51YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIYz1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9URVhfQ09PUkQ9ZnVuY3Rpb24oKXtyZXR1cm4oSGM9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfVEVYX0NPT1JEPU8uYXNtLnZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE91PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0dFTkVSSUM9ZnVuY3Rpb24oKXtyZXR1cm4oT3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfR0VORVJJQz1PLmFzbS53YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzZj1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9JTlZBTElEX0dFT01FVFJZX1RZUEU9ZnVuY3Rpb24oKXtyZXR1cm4oc2Y9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfSU5WQUxJRF9HRU9NRVRSWV9UWVBFPU8uYXNtLnhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPWZ1bmN0aW9uKCl7cmV0dXJuKFN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPU8uYXNtLnliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1RSSUFOR1VMQVJfTUVTSD1mdW5jdGlvbigpe3JldHVybihDdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9UUklBTkdVTEFSX01FU0g9Ty5hc20uemIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9Ty5hc20uQWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9ZnVuY3Rpb24oKXtyZXR1cm4oTnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9Ty5hc20uQmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ4PWZ1bmN0aW9uKCl7cmV0dXJuKEl1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UOD1PLmFzbS5DYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4oUHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDE2PU8uYXNtLkRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGt1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4oa3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQxNj1PLmFzbS5FYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4odnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDMyPU8uYXNtLkZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZmPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4oZmY9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQzMj1PLmFzbS5HYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oRnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDY0PU8uYXNtLkhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LER1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oRHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ2ND1PLmFzbS5JYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1mdW5jdGlvbigpe3JldHVybihCdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1PLmFzbS5KYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1mdW5jdGlvbigpe3JldHVybihVdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1PLmFzbS5LYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1mdW5jdGlvbigpe3JldHVybihMdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1PLmFzbS5MYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVFlQRVNfQ09VTlQ9ZnVuY3Rpb24oKXtyZXR1cm4oanU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1RZUEVTX0NPVU5UPU8uYXNtLk1iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHp1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPWZ1bmN0aW9uKCl7cmV0dXJuKHp1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPU8uYXNtLk5iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFhpPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKFhpPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPU8uYXNtLk9iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKEd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPU8uYXNtLlBiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPWZ1bmN0aW9uKCl7cmV0dXJuKFZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPU8uYXNtLlFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEh1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOU1VQUE9SVEVEX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oSHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5TVVBQT1JURURfVkVSU0lPTj1PLmFzbS5SYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTktOT1dOX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oS3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5LTk9XTl9WRVJTSU9OPU8uYXNtLlNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O08uX21hbGxvYz1mdW5jdGlvbigpe3JldHVybihPLl9tYWxsb2M9Ty5hc20uVGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTy5fZnJlZT1mdW5jdGlvbigpe3JldHVybihPLl9mcmVlPU8uYXNtLlViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBxdT1mdW5jdGlvbigpe3JldHVybihxdT1PLmFzbS5WYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtPLl9fX3N0YXJ0X2VtX2pzPTE1ODU2LE8uX19fc3RvcF9lbV9qcz0xNTk1NDt2YXIgZGY7aWYoRnQ9ZnVuY3Rpb24gaigpe2RmfHxsKCksZGZ8fChGdD1qKX0sTy5wcmVJbml0KWZvcih0eXBlb2YgTy5wcmVJbml0PT0iZnVuY3Rpb24iJiYoTy5wcmVJbml0PVtPLnByZUluaXRdKTswPE8ucHJlSW5pdC5sZW5ndGg7KU8ucHJlSW5pdC5wb3AoKSgpO2woKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oLGgucHJvdG90eXBlLl9fY2xhc3NfXz1oLGguX19jYWNoZV9fPXt9LE8uV3JhcHBlck9iamVjdD1oLE8uZ2V0Q2FjaGU9bSxPLndyYXBQb2ludGVyPWIsTy5jYXN0T2JqZWN0PWZ1bmN0aW9uKGosSyl7cmV0dXJuIGIoai5wdHIsSyl9LE8uTlVMTD1iKDApLE8uZGVzdHJveT1mdW5jdGlvbihqKXtpZighai5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7ai5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBtKGouX19jbGFzc19fKVtqLnB0cl19LE8uY29tcGFyZT1mdW5jdGlvbihqLEspe3JldHVybiBqLnB0cj09PUsucHRyfSxPLmdldFBvaW50ZXI9ZnVuY3Rpb24oail7cmV0dXJuIGoucHRyfSxPLmdldENsYXNzPWZ1bmN0aW9uKGope3JldHVybiBqLl9fY2xhc3NfX307dmFyIE90PXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKE90Lm5lZWRlZCl7Zm9yKHZhciBqPTA7ajxPdC50ZW1wcy5sZW5ndGg7aisrKU8uX2ZyZWUoT3QudGVtcHNbal0pO090LnRlbXBzLmxlbmd0aD0wLE8uX2ZyZWUoT3QuYnVmZmVyKSxPdC5idWZmZXI9MCxPdC5zaXplKz1PdC5uZWVkZWQsT3QubmVlZGVkPTB9T3QuYnVmZmVyfHwoT3Quc2l6ZSs9MTI4LE90LmJ1ZmZlcj1PLl9tYWxsb2MoT3Quc2l6ZSksT3QuYnVmZmVyfHxpKHZvaWQgMCkpLE90LnBvcz0wfSxhbGxvYzpmdW5jdGlvbihqLEspe3JldHVybiBPdC5idWZmZXJ8fGkodm9pZCAwKSxqPWoubGVuZ3RoKksuQllURVNfUEVSX0VMRU1FTlQsaj1qKzcmLTgsT3QucG9zK2o+PU90LnNpemU/KDA8anx8aSh2b2lkIDApLE90Lm5lZWRlZCs9aixLPU8uX21hbGxvYyhqKSxPdC50ZW1wcy5wdXNoKEspKTooSz1PdC5idWZmZXIrT3QucG9zLE90LnBvcys9aiksS30sY29weTpmdW5jdGlvbihqLEssdGUpe3N3aXRjaCh0ZT4+Pj0wLEsuQllURVNfUEVSX0VMRU1FTlQpe2Nhc2UgMjp0ZT4+Pj0xO2JyZWFrO2Nhc2UgNDp0ZT4+Pj0yO2JyZWFrO2Nhc2UgODp0ZT4+Pj0zfWZvcih2YXIgTWU9MDtNZTxqLmxlbmd0aDtNZSsrKUtbdGUrTWVdPWpbTWVdfX07cmV0dXJuIEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRS5wcm90b3R5cGUuX19jbGFzc19fPUUsRS5fX2NhY2hlX189e30sTy5Wb2lkUHRyPUUsRS5wcm90b3R5cGUuX19kZXN0cm95X189RS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtEdCh0aGlzLnB0cil9LF8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLF8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPV8sXy5wcm90b3R5cGUuX19jbGFzc19fPV8sXy5fX2NhY2hlX189e30sTy5EZWNvZGVyQnVmZmVyPV8sXy5wcm90b3R5cGUuSW5pdD1fLnByb3RvdHlwZS5Jbml0PWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO090LnByZXBhcmUoKSx0eXBlb2Ygaj09Im9iamVjdCImJihqPXkoaikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHp0KHRlLGosSyl9LF8ucHJvdG90eXBlLl9fZGVzdHJveV9fPV8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7Zm4odGhpcy5wdHIpfSxULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxULnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ULFQucHJvdG90eXBlLl9fY2xhc3NfXz1ULFQuX19jYWNoZV9fPXt9LE8uQXR0cmlidXRlVHJhbnNmb3JtRGF0YT1ULFQucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPVQucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIEhuKHRoaXMucHRyKX0sVC5wcm90b3R5cGUuX19kZXN0cm95X189VC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtQbih0aGlzLnB0cil9LHcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLHcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXcsdy5wcm90b3R5cGUuX19jbGFzc19fPXcsdy5fX2NhY2hlX189e30sTy5HZW9tZXRyeUF0dHJpYnV0ZT13LHcucHJvdG90eXBlLl9fZGVzdHJveV9fPXcucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7a3QodGhpcy5wdHIpfSxSLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxSLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9fY2xhc3NfXz1SLFIuX19jYWNoZV9fPXt9LE8uUG9pbnRBdHRyaWJ1dGU9UixSLnByb3RvdHlwZS5zaXplPVIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT24odGhpcy5wdHIpfSxSLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPVIucHJvdG90eXBlLkdldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gYihrbih0aGlzLnB0ciksVCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPVIucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIEFvKHRoaXMucHRyKX0sUi5wcm90b3R5cGUuZGF0YV90eXBlPVIucHJvdG90eXBlLmRhdGFfdHlwZT1mdW5jdGlvbigpe3JldHVybiBHdCh0aGlzLnB0cil9LFIucHJvdG90eXBlLm51bV9jb21wb25lbnRzPVIucHJvdG90eXBlLm51bV9jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKHRoaXMucHRyKX0sUi5wcm90b3R5cGUubm9ybWFsaXplZD1SLnByb3RvdHlwZS5ub3JtYWxpemVkPWZ1bmN0aW9uKCl7cmV0dXJuISFDbyh0aGlzLnB0cil9LFIucHJvdG90eXBlLmJ5dGVfc3RyaWRlPVIucHJvdG90eXBlLmJ5dGVfc3RyaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKHRoaXMucHRyKX0sUi5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9Ui5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gV28odGhpcy5wdHIpfSxSLnByb3RvdHlwZS51bmlxdWVfaWQ9Ui5wcm90b3R5cGUudW5pcXVlX2lkPWZ1bmN0aW9uKCl7cmV0dXJuIERhKHRoaXMucHRyKX0sUi5wcm90b3R5cGUuX19kZXN0cm95X189Ui5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt6aSh0aGlzLnB0cil9LFMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLFMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVMsUy5wcm90b3R5cGUuX19jbGFzc19fPVMsUy5fX2NhY2hlX189e30sTy5BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm09UyxTLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1TLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksISFvaShLLGopfSxTLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1TLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1mdW5jdGlvbigpe3JldHVybiBCYSh0aGlzLnB0cil9LFMucHJvdG90eXBlLm1pbl92YWx1ZT1TLnByb3RvdHlwZS5taW5fdmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLGFpKEssail9LFMucHJvdG90eXBlLnJhbmdlPVMucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIFZpKHRoaXMucHRyKX0sUy5wcm90b3R5cGUuX19kZXN0cm95X189Uy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtTcih0aGlzLnB0cil9LEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUMsQy5wcm90b3R5cGUuX19jbGFzc19fPUMsQy5fX2NhY2hlX189e30sTy5BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtPUMsQy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9Qy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLCEhd28oSyxqKX0sQy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9Qy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gVWEodGhpcy5wdHIpfSxDLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1DLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3ZjKHRoaXMucHRyKX0sSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksSS5wcm90b3R5cGUuY29uc3RydWN0b3I9SSxJLnByb3RvdHlwZS5fX2NsYXNzX189SSxJLl9fY2FjaGVfXz17fSxPLlBvaW50Q2xvdWQ9SSxJLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1JLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBLbih0aGlzLnB0cil9LEkucHJvdG90eXBlLm51bV9wb2ludHM9SS5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBDcih0aGlzLnB0cil9LEkucHJvdG90eXBlLl9fZGVzdHJveV9fPUkucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7QnQodGhpcy5wdHIpfSxOLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxOLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1OLE4ucHJvdG90eXBlLl9fY2xhc3NfXz1OLE4uX19jYWNoZV9fPXt9LE8uTWVzaD1OLE4ucHJvdG90eXBlLm51bV9mYWNlcz1OLnByb3RvdHlwZS5udW1fZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gTWQodGhpcy5wdHIpfSxOLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1OLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBOZCh0aGlzLnB0cil9LE4ucHJvdG90eXBlLm51bV9wb2ludHM9Ti5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBJZCh0aGlzLnB0cil9LE4ucHJvdG90eXBlLl9fZGVzdHJveV9fPU4ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7RGModGhpcy5wdHIpfSxQLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAucHJvdG90eXBlLl9fY2xhc3NfXz1QLFAuX19jYWNoZV9fPXt9LE8uTWV0YWRhdGE9UCxQLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1QLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1pzKHRoaXMucHRyKX0sdi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksdi5wcm90b3R5cGUuY29uc3RydWN0b3I9dix2LnByb3RvdHlwZS5fX2NsYXNzX189dix2Ll9fY2FjaGVfXz17fSxPLlN0YXR1cz12LHYucHJvdG90eXBlLmNvZGU9di5wcm90b3R5cGUuY29kZT1mdW5jdGlvbigpe3JldHVybiBQZCh0aGlzLnB0cil9LHYucHJvdG90eXBlLm9rPXYucHJvdG90eXBlLm9rPWZ1bmN0aW9uKCl7cmV0dXJuISFRcyh0aGlzLnB0cil9LHYucHJvdG90eXBlLmVycm9yX21zZz12LnByb3RvdHlwZS5lcnJvcl9tc2c9ZnVuY3Rpb24oKXtyZXR1cm4gYShyaSh0aGlzLnB0cikpfSx2LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz12LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2tkKHRoaXMucHRyKX0sQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxBLnByb3RvdHlwZS5fX2NsYXNzX189QSxBLl9fY2FjaGVfXz17fSxPLkRyYWNvRmxvYXQzMkFycmF5PUEsQS5wcm90b3R5cGUuR2V0VmFsdWU9QS5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEZkKEssail9LEEucHJvdG90eXBlLnNpemU9QS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBpaSh0aGlzLnB0cil9LEEucHJvdG90eXBlLl9fZGVzdHJveV9fPUEucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7Y2kodGhpcy5wdHIpfSx4LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlLl9fY2xhc3NfXz14LHguX19jYWNoZV9fPXt9LE8uRHJhY29JbnQ4QXJyYXk9eCx4LnByb3RvdHlwZS5HZXRWYWx1ZT14LnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksRGQoSyxqKX0seC5wcm90b3R5cGUuc2l6ZT14LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEJkKHRoaXMucHRyKX0seC5wcm90b3R5cGUuX19kZXN0cm95X189eC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtMYSh0aGlzLnB0cil9LE0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLE0ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU0sTS5wcm90b3R5cGUuX19jbGFzc19fPU0sTS5fX2NhY2hlX189e30sTy5EcmFjb1VJbnQ4QXJyYXk9TSxNLnByb3RvdHlwZS5HZXRWYWx1ZT1NLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksZWYoSyxqKX0sTS5wcm90b3R5cGUuc2l6ZT1NLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMucHRyKX0sTS5wcm90b3R5cGUuX19kZXN0cm95X189TS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtVZCh0aGlzLnB0cil9LEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRi5wcm90b3R5cGUuX19jbGFzc19fPUYsRi5fX2NhY2hlX189e30sTy5EcmFjb0ludDE2QXJyYXk9RixGLnByb3RvdHlwZS5HZXRWYWx1ZT1GLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksTGQoSyxqKX0sRi5wcm90b3R5cGUuc2l6ZT1GLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIGpkKHRoaXMucHRyKX0sRi5wcm90b3R5cGUuX19kZXN0cm95X189Ri5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt6ZCh0aGlzLnB0cil9LFUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLFUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVUsVS5wcm90b3R5cGUuX19jbGFzc19fPVUsVS5fX2NhY2hlX189e30sTy5EcmFjb1VJbnQxNkFycmF5PVUsVS5wcm90b3R5cGUuR2V0VmFsdWU9VS5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLFZkKEssail9LFUucHJvdG90eXBlLnNpemU9VS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBIZCh0aGlzLnB0cil9LFUucHJvdG90eXBlLl9fZGVzdHJveV9fPVUucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7dGYodGhpcy5wdHIpfSx6LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16LHoucHJvdG90eXBlLl9fY2xhc3NfXz16LHouX19jYWNoZV9fPXt9LE8uRHJhY29JbnQzMkFycmF5PXosei5wcm90b3R5cGUuR2V0VmFsdWU9ei5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLHFkKEssail9LHoucHJvdG90eXBlLnNpemU9ei5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBXZCh0aGlzLnB0cil9LHoucHJvdG90eXBlLl9fZGVzdHJveV9fPXoucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WGQodGhpcy5wdHIpfSxELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxELnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ELEQucHJvdG90eXBlLl9fY2xhc3NfXz1ELEQuX19jYWNoZV9fPXt9LE8uRHJhY29VSW50MzJBcnJheT1ELEQucHJvdG90eXBlLkdldFZhbHVlPUQucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxZZChLLGopfSxELnByb3RvdHlwZS5zaXplPUQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gSmQodGhpcy5wdHIpfSxELnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1ELnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0hpKHRoaXMucHRyKX0sRy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxHLnByb3RvdHlwZS5fX2NsYXNzX189RyxHLl9fY2FjaGVfXz17fSxPLk1ldGFkYXRhUXVlcmllcj1HLEcucHJvdG90eXBlLkhhc0VudHJ5PUcucHJvdG90eXBlLkhhc0VudHJ5PWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBPdC5wcmVwYXJlKCksaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6cChLKSwhIVFkKHRlLGosSyl9LEcucHJvdG90eXBlLkdldEludEVudHJ5PUcucHJvdG90eXBlLkdldEludEVudHJ5PWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBPdC5wcmVwYXJlKCksaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6cChLKSxsYSh0ZSxqLEspfSxHLnByb3RvdHlwZS5HZXRJbnRFbnRyeUFycmF5PUcucHJvdG90eXBlLkdldEludEVudHJ5QXJyYXk9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7T3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLG5mKE1lLGosSyx0ZSl9LEcucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PUcucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBPdC5wcmVwYXJlKCksaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6cChLKSwkZCh0ZSxqLEspfSxHLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1HLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksYShldSh0ZSxqLEspKX0sRy5wcm90b3R5cGUuTnVtRW50cmllcz1HLnByb3RvdHlwZS5OdW1FbnRyaWVzPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSx0dShLLGopfSxHLnByb3RvdHlwZS5HZXRFbnRyeU5hbWU9Ry5wcm90b3R5cGUuR2V0RW50cnlOYW1lPWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxhKFhvKHRlLGosSykpfSxHLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1HLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe29mKHRoaXMucHRyKX0sSC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksSC5wcm90b3R5cGUuY29uc3RydWN0b3I9SCxILnByb3RvdHlwZS5fX2NsYXNzX189SCxILl9fY2FjaGVfXz17fSxPLkRlY29kZXI9SCxILnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1ILnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLHR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9eShqKSksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLGIoS2koTWUsaixLLHRlKSx2KX0sSC5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9SC5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIE90LnByZXBhcmUoKSx0eXBlb2Ygaj09Im9iamVjdCImJihqPXkoaikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxiKG51KE1lLGosSyx0ZSksdil9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx6Yyh0ZSxqLEspfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gT3QucHJlcGFyZSgpLGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOnAoSyksb3UodGUsaixLKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIE90LnByZXBhcmUoKSxqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpwKEspLHRlPXRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiP3RlLnB0cjpwKHRlKSxyZihNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGU9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlPWZ1bmN0aW9uKGosSyl7dmFyIHRlPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxiKGNmKHRlLGosSyksUil9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQ9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZD1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksYihhdSh0ZSxqLEspLFIpfSxILnByb3RvdHlwZS5HZXRNZXRhZGF0YT1ILnByb3RvdHlwZS5HZXRNZXRhZGF0YT1mdW5jdGlvbihqKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksYihydShLLGopLFApfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksYihHYyh0ZSxqLEspLFApfSxILnByb3RvdHlwZS5HZXRGYWNlRnJvbU1lc2g9SC5wcm90b3R5cGUuR2V0RmFjZUZyb21NZXNoPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFNbyhNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoPUgucHJvdG90eXBlLkdldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2g9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLFZjKHRlLGosSyl9LEgucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PUgucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFpdShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1ILnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhY3UoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIXN1KE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFoYShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHM9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFmdShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIWR1KE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKGosSyx0ZSl7dmFyIE1lPXRoaXMucHRyO3JldHVybiBqJiZ0eXBlb2Ygaj09Im9iamVjdCImJihqPWoucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISF1dShNZSxqLEssdGUpfSxILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhcWkoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzPUgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihqLEssdGUpe3ZhciBNZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhbHUoTWUsaixLLHRlKX0sSC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9SC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIU1yKE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlKXt2YXIgTWU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIWh1KE1lLGosSyx0ZSl9LEgucHJvdG90eXBlLkdldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50cz1ILnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHM9ZnVuY3Rpb24oaixLLHRlLE1lLGN0KXt2YXIgcHQ9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxNZSYmdHlwZW9mIE1lPT0ib2JqZWN0IiYmKE1lPU1lLnB0ciksY3QmJnR5cGVvZiBjdD09Im9iamVjdCImJihjdD1jdC5wdHIpLCEhbXUocHQsaixLLHRlLE1lLGN0KX0sSC5wcm90b3R5cGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybT1ILnByb3RvdHlwZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtPWZ1bmN0aW9uKGope3ZhciBLPXRoaXMucHRyO2omJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLGJ1KEssail9LEgucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZD1ILnByb3RvdHlwZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oail7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLHB1KEssail9LEgucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZD1ILnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQ9ZnVuY3Rpb24oaixLKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIGomJnR5cGVvZiBqPT0ib2JqZWN0IiYmKGo9ai5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLGIoZ3UodGUsaixLKSx2KX0sSC5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9NZXNoPUgucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvTWVzaD1mdW5jdGlvbihqLEspe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gaiYmdHlwZW9mIGo9PSJvYmplY3QiJiYoaj1qLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksYihfdSh0ZSxqLEspLHYpfSxILnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1ILnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3l1KHRoaXMucHRyKX0sKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaigpe08uQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPUF1KCksTy5BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPXd1KCksTy5BVFRSSUJVVEVfUVVBTlRJWkFUSU9OX1RSQU5TRk9STT1FdSgpLE8uQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPVR1KCksTy5JTlZBTElEPWZpKCksTy5QT1NJVElPTj1SdSgpLE8uTk9STUFMPXh1KCksTy5DT0xPUj1XaSgpLE8uVEVYX0NPT1JEPUhjKCksTy5HRU5FUklDPU91KCksTy5JTlZBTElEX0dFT01FVFJZX1RZUEU9c2YoKSxPLlBPSU5UX0NMT1VEPVN1KCksTy5UUklBTkdVTEFSX01FU0g9Q3UoKSxPLkRUX0lOVkFMSUQ9TXUoKSxPLkRUX0lOVDg9TnUoKSxPLkRUX1VJTlQ4PUl1KCksTy5EVF9JTlQxNj1QdSgpLE8uRFRfVUlOVDE2PWt1KCksTy5EVF9JTlQzMj12dSgpLE8uRFRfVUlOVDMyPWZmKCksTy5EVF9JTlQ2ND1GdSgpLE8uRFRfVUlOVDY0PUR1KCksTy5EVF9GTE9BVDMyPUJ1KCksTy5EVF9GTE9BVDY0PVV1KCksTy5EVF9CT09MPUx1KCksTy5EVF9UWVBFU19DT1VOVD1qdSgpLE8uT0s9enUoKSxPLkRSQUNPX0VSUk9SPVhpKCksTy5JT19FUlJPUj1HdSgpLE8uSU5WQUxJRF9QQVJBTUVURVI9VnUoKSxPLlVOU1VQUE9SVEVEX1ZFUlNJT049SHUoKSxPLlVOS05PV05fVkVSU0lPTj1LdSgpfUtlP2ooKTpQdC51bnNoaWZ0KGopfSkoKSx0eXBlb2YgTy5vbk1vZHVsZVBhcnNlZD09ImZ1bmN0aW9uIiYmTy5vbk1vZHVsZVBhcnNlZCgpLE8uRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZT1mdW5jdGlvbihqKXtpZihqLl9fY2xhc3NfXyYmai5fX2NsYXNzX189PT1PLkRlY29kZXJCdWZmZXIpcmV0dXJuIE8uRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkKGopO2lmKDg+ai5ieXRlTGVuZ3RoKXJldHVybiBPLklOVkFMSURfR0VPTUVUUllfVFlQRTtzd2l0Y2goals3XSl7Y2FzZSAwOnJldHVybiBPLlBPSU5UX0NMT1VEO2Nhc2UgMTpyZXR1cm4gTy5UUklBTkdVTEFSX01FU0g7ZGVmYXVsdDpyZXR1cm4gTy5JTlZBTElEX0dFT01FVFJZX1RZUEV9fSx0LnJlYWR5fX0pKCk7dHlwZW9mIHdkPT0ib2JqZWN0IiYmdHlwZW9mIGZ5PT0ib2JqZWN0Ij9meS5leHBvcnRzPXN5OnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHN5fSk6dHlwZW9mIHdkPT0ib2JqZWN0IiYmKHdkLkRyYWNvRGVjb2Rlck1vZHVsZT1zeSl9KTt2YXIgbHk9e307cnQobHkse2RlZmF1bHQ6KCk9PldqfSk7ZnVuY3Rpb24gTGooZSx0KXtsZXQgbj1lLm51bV9wb2ludHMoKSxvPWUubnVtX2ZhY2VzKCksYT1uZXcgTnQuRHJhY29JbnQzMkFycmF5LHI9byozLGk9a2UuY3JlYXRlVHlwZWRBcnJheShuLHIpLGY9MDtmb3IobGV0IGQ9MDtkPG87KytkKXQuR2V0RmFjZUZyb21NZXNoKGUsZCxhKSxpW2YrMF09YS5HZXRWYWx1ZSgwKSxpW2YrMV09YS5HZXRWYWx1ZSgxKSxpW2YrMl09YS5HZXRWYWx1ZSgyKSxmKz0zO3JldHVybiBOdC5kZXN0cm95KGEpLHt0eXBlZEFycmF5OmksbnVtYmVyT2ZJbmRpY2VzOnJ9fWZ1bmN0aW9uIGpqKGUsdCxuLG8sYSl7bGV0IHIsaTtvLnF1YW50aXphdGlvbkJpdHM8PTg/KGk9bmV3IE50LkRyYWNvVUludDhBcnJheSxyPW5ldyBVaW50OEFycmF5KGEpLHQuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMoZSxuLGkpKTpvLnF1YW50aXphdGlvbkJpdHM8PTE2PyhpPW5ldyBOdC5EcmFjb1VJbnQxNkFycmF5LHI9bmV3IFVpbnQxNkFycmF5KGEpLHQuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKGUsbixpKSk6KGk9bmV3IE50LkRyYWNvRmxvYXQzMkFycmF5LHI9bmV3IEZsb2F0MzJBcnJheShhKSx0LkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKGUsbixpKSk7Zm9yKGxldCBmPTA7ZjxhOysrZilyW2ZdPWkuR2V0VmFsdWUoZik7cmV0dXJuIE50LmRlc3Ryb3koaSkscn1mdW5jdGlvbiB6aihlLHQsbixvKXtsZXQgYSxyO3N3aXRjaChuLmRhdGFfdHlwZSgpKXtjYXNlIDE6Y2FzZSAxMTpyPW5ldyBOdC5EcmFjb0ludDhBcnJheSxhPW5ldyBJbnQ4QXJyYXkobyksdC5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKGUsbixyKTticmVhaztjYXNlIDI6cj1uZXcgTnQuRHJhY29VSW50OEFycmF5LGE9bmV3IFVpbnQ4QXJyYXkobyksdC5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyhlLG4scik7YnJlYWs7Y2FzZSAzOnI9bmV3IE50LkRyYWNvSW50MTZBcnJheSxhPW5ldyBJbnQxNkFycmF5KG8pLHQuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHMoZSxuLHIpO2JyZWFrO2Nhc2UgNDpyPW5ldyBOdC5EcmFjb1VJbnQxNkFycmF5LGE9bmV3IFVpbnQxNkFycmF5KG8pLHQuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKGUsbixyKTticmVhaztjYXNlIDU6Y2FzZSA3OnI9bmV3IE50LkRyYWNvSW50MzJBcnJheSxhPW5ldyBJbnQzMkFycmF5KG8pLHQuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHMoZSxuLHIpO2JyZWFrO2Nhc2UgNjpjYXNlIDg6cj1uZXcgTnQuRHJhY29VSW50MzJBcnJheSxhPW5ldyBVaW50MzJBcnJheShvKSx0LkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyhlLG4scik7YnJlYWs7Y2FzZSA5OmNhc2UgMTA6cj1uZXcgTnQuRHJhY29GbG9hdDMyQXJyYXksYT1uZXcgRmxvYXQzMkFycmF5KG8pLHQuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHMoZSxuLHIpO2JyZWFrfWZvcihsZXQgaT0wO2k8bzsrK2kpYVtpXT1yLkdldFZhbHVlKGkpO3JldHVybiBOdC5kZXN0cm95KHIpLGF9ZnVuY3Rpb24gT08oZSx0LG4pe2xldCBvPWUubnVtX3BvaW50cygpLGE9bi5udW1fY29tcG9uZW50cygpLHIsaT1uZXcgTnQuQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtO2lmKGkuSW5pdEZyb21BdHRyaWJ1dGUobikpe2xldCB1PW5ldyBBcnJheShhKTtmb3IobGV0IGw9MDtsPGE7KytsKXVbbF09aS5taW5fdmFsdWUobCk7cj17cXVhbnRpemF0aW9uQml0czppLnF1YW50aXphdGlvbl9iaXRzKCksbWluVmFsdWVzOnUscmFuZ2U6aS5yYW5nZSgpLG9jdEVuY29kZWQ6ITF9fU50LmRlc3Ryb3koaSksaT1uZXcgTnQuQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybSxpLkluaXRGcm9tQXR0cmlidXRlKG4pJiYocj17cXVhbnRpemF0aW9uQml0czppLnF1YW50aXphdGlvbl9iaXRzKCksb2N0RW5jb2RlZDohMH0pLE50LmRlc3Ryb3koaSk7bGV0IGY9byphLGQ7ZyhyKT9kPWpqKGUsdCxuLHIsZik6ZD16aihlLHQsbixmKTtsZXQgYz1uZS5mcm9tVHlwZWRBcnJheShkKTtyZXR1cm57YXJyYXk6ZCxkYXRhOntjb21wb25lbnRzUGVyQXR0cmlidXRlOmEsY29tcG9uZW50RGF0YXR5cGU6YyxieXRlT2Zmc2V0Om4uYnl0ZV9vZmZzZXQoKSxieXRlU3RyaWRlOm5lLmdldFNpemVJbkJ5dGVzKGMpKmEsbm9ybWFsaXplZDpuLm5vcm1hbGl6ZWQoKSxxdWFudGl6YXRpb246cn19fWZ1bmN0aW9uIEdqKGUpe2xldCB0PW5ldyBOdC5EZWNvZGVyO2UuZGVxdWFudGl6ZUluU2hhZGVyJiYodC5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKE50LlBPU0lUSU9OKSx0LlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTnQuTk9STUFMKSk7bGV0IG49bmV3IE50LkRlY29kZXJCdWZmZXI7aWYobi5Jbml0KGUuYnVmZmVyLGUuYnVmZmVyLmxlbmd0aCksdC5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pIT09TnQuUE9JTlRfQ0xPVUQpdGhyb3cgbmV3IHV0KCJEcmFjbyBnZW9tZXRyeSB0eXBlIG11c3QgYmUgUE9JTlRfQ0xPVUQuIik7bGV0IGE9bmV3IE50LlBvaW50Q2xvdWQscj10LkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZChuLGEpO2lmKCFyLm9rKCl8fGEucHRyPT09MCl0aHJvdyBuZXcgdXQoYEVycm9yIGRlY29kaW5nIGRyYWNvIHBvaW50IGNsb3VkOiAke3IuZXJyb3JfbXNnKCl9YCk7TnQuZGVzdHJveShuKTtsZXQgaT17fSxmPWUucHJvcGVydGllcztmb3IobGV0IGQgaW4gZilpZihmLmhhc093blByb3BlcnR5KGQpKXtsZXQgYztpZihkPT09IlBPU0lUSU9OInx8ZD09PSJOT1JNQUwiKXtsZXQgdT10LkdldEF0dHJpYnV0ZUlkKGEsTnRbZF0pO2M9dC5HZXRBdHRyaWJ1dGUoYSx1KX1lbHNle2xldCB1PWZbZF07Yz10LkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQoYSx1KX1pW2RdPU9PKGEsdCxjKX1yZXR1cm4gTnQuZGVzdHJveShhKSxOdC5kZXN0cm95KHQpLGl9ZnVuY3Rpb24gVmooZSl7bGV0IHQ9bmV3IE50LkRlY29kZXI7aWYoZS5kZXF1YW50aXplSW5TaGFkZXIpZm9yKGxldCB1PTA7dTxlLmF0dHJpYnV0ZXNUb1NraXBUcmFuc2Zvcm0ubGVuZ3RoOysrdSl0LlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTnRbZS5hdHRyaWJ1dGVzVG9Ta2lwVHJhbnNmb3JtW3VdXSk7bGV0IG49ZS5idWZmZXJWaWV3LG89bmV3IE50LkRlY29kZXJCdWZmZXI7aWYoby5Jbml0KGUuYXJyYXksbi5ieXRlTGVuZ3RoKSx0LkdldEVuY29kZWRHZW9tZXRyeVR5cGUobykhPT1OdC5UUklBTkdVTEFSX01FU0gpdGhyb3cgbmV3IHV0KCJVbnN1cHBvcnRlZCBkcmFjbyBtZXNoIGdlb21ldHJ5IHR5cGUuIik7bGV0IHI9bmV3IE50Lk1lc2gsaT10LkRlY29kZUJ1ZmZlclRvTWVzaChvLHIpO2lmKCFpLm9rKCl8fHIucHRyPT09MCl0aHJvdyBuZXcgdXQoYEVycm9yIGRlY29kaW5nIGRyYWNvIG1lc2ggZ2VvbWV0cnk6ICR7aS5lcnJvcl9tc2coKX1gKTtOdC5kZXN0cm95KG8pO2xldCBmPXt9LGQ9ZS5jb21wcmVzc2VkQXR0cmlidXRlcztmb3IobGV0IHUgaW4gZClpZihkLmhhc093blByb3BlcnR5KHUpKXtsZXQgbD1kW3VdLGg9dC5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKHIsbCk7Zlt1XT1PTyhyLHQsaCl9bGV0IGM9e2luZGV4QXJyYXk6TGoocix0KSxhdHRyaWJ1dGVEYXRhOmZ9O3JldHVybiBOdC5kZXN0cm95KHIpLE50LmRlc3Ryb3kodCksY31hc3luYyBmdW5jdGlvbiBIaihlLHQpe3JldHVybiBnKGUuYnVmZmVyVmlldyk/VmooZSk6R2ooZSl9YXN5bmMgZnVuY3Rpb24gS2ooZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBnKG4pJiZnKG4ud2FzbUJpbmFyeUZpbGUpP050PWF3YWl0KDAsdXkuZGVmYXVsdCkobik6TnQ9YXdhaXQoMCx1eS5kZWZhdWx0KSgpLCEwfWFzeW5jIGZ1bmN0aW9uIHFqKGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyhuKT9LaihlLHQpOkhqKGUsdCl9dmFyIHV5LE50LFdqLGh5PVgoKCk9Pnt2dCgpO3NlKCk7bm4oKTtqYSgpO1VuKCk7dXk9Y2EoZHkoKSwxKTtXaj1BdChxail9KTtmdW5jdGlvbiBteShlLHQpe2lmKG15LnBhc3NUaHJvdWdoRGF0YUZvclRlc3RpbmcpcmV0dXJuIHQ7bGV0IG49ZS5ieXRlTGVuZ3RoO2lmKG49PT0wfHxuJTQhPT0wKXRocm93IG5ldyB1dCgiVGhlIGxlbmd0aCBvZiBrZXkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYSBtdWx0aXBsZSBvZiA0LiIpO2xldCBvPW5ldyBEYXRhVmlldyh0KSxhPW8uZ2V0VWludDMyKDAsITApO2lmKGE9PT1Yanx8YT09PVlqKXJldHVybiB0O2xldCByPW5ldyBEYXRhVmlldyhlKSxpPTAsZj10LmJ5dGVMZW5ndGgsZD1mLWYlOCxjPW4sdSxsPTg7Zm9yKDtpPGQ7KWZvcihsPShsKzgpJTI0LHU9bDtpPGQmJnU8Yzspby5zZXRVaW50MzIoaSxvLmdldFVpbnQzMihpLCEwKV5yLmdldFVpbnQzMih1LCEwKSwhMCksby5zZXRVaW50MzIoaSs0LG8uZ2V0VWludDMyKGkrNCwhMCleci5nZXRVaW50MzIodSs0LCEwKSwhMCksaSs9OCx1Kz0yNDtpZihpPGYpZm9yKHU+PWMmJihsPShsKzgpJTI0LHU9bCk7aTxmOylvLnNldFVpbnQ4KGksby5nZXRVaW50OChpKV5yLmdldFVpbnQ4KHUpKSxpKyssdSsrfXZhciBYaixZaixTTyxDTz1YKCgpPT57amEoKTtYaj0xOTUzMDI5ODA1LFlqPTI5MTcwMzQxMDA7bXkucGFzc1Rocm91Z2hEYXRhRm9yVGVzdGluZz0hMTtTTz1teX0pO2Z1bmN0aW9uIEpqKGUsdCl7cmV0dXJuKGUmdCkhPT0wfXZhciBxcyxNTz1YKCgpPT57cXM9Smp9KTtmdW5jdGlvbiBScihlLHQsbixvLGEscil7dGhpcy5fYml0cz1lLHRoaXMuY25vZGVWZXJzaW9uPXQsdGhpcy5pbWFnZXJ5VmVyc2lvbj1uLHRoaXMudGVycmFpblZlcnNpb249byx0aGlzLmltYWdlcnlQcm92aWRlcj1hLHRoaXMudGVycmFpblByb3ZpZGVyPXIsdGhpcy5hbmNlc3Rvckhhc1RlcnJhaW49ITEsdGhpcy50ZXJyYWluU3RhdGU9dm9pZCAwfXZhciBaaixOTyxRaiwkaixlNCxJTyxQTz1YKCgpPT57c2UoKTtNTygpO1pqPVsxLDIsNCw4XSxOTz0xNSxRaj0xNiwkaj02NCxlND0xMjg7UnIuY2xvbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyh0KT8odC5fYml0cz1lLl9iaXRzLHQuY25vZGVWZXJzaW9uPWUuY25vZGVWZXJzaW9uLHQuaW1hZ2VyeVZlcnNpb249ZS5pbWFnZXJ5VmVyc2lvbix0LnRlcnJhaW5WZXJzaW9uPWUudGVycmFpblZlcnNpb24sdC5pbWFnZXJ5UHJvdmlkZXI9ZS5pbWFnZXJ5UHJvdmlkZXIsdC50ZXJyYWluUHJvdmlkZXI9ZS50ZXJyYWluUHJvdmlkZXIpOnQ9bmV3IFJyKGUuX2JpdHMsZS5jbm9kZVZlcnNpb24sZS5pbWFnZXJ5VmVyc2lvbixlLnRlcnJhaW5WZXJzaW9uLGUuaW1hZ2VyeVByb3ZpZGVyLGUudGVycmFpblByb3ZpZGVyKSx0LmFuY2VzdG9ySGFzVGVycmFpbj1lLmFuY2VzdG9ySGFzVGVycmFpbix0LnRlcnJhaW5TdGF0ZT1lLnRlcnJhaW5TdGF0ZSx0fTtSci5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKGUpe3RoaXMuYW5jZXN0b3JIYXNUZXJyYWluPWUuYW5jZXN0b3JIYXNUZXJyYWlufHx0aGlzLmhhc1RlcnJhaW4oKX07UnIucHJvdG90eXBlLmhhc1N1YnRyZWU9ZnVuY3Rpb24oKXtyZXR1cm4gcXModGhpcy5fYml0cyxRail9O1JyLnByb3RvdHlwZS5oYXNJbWFnZXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHFzKHRoaXMuX2JpdHMsJGopfTtSci5wcm90b3R5cGUuaGFzVGVycmFpbj1mdW5jdGlvbigpe3JldHVybiBxcyh0aGlzLl9iaXRzLGU0KX07UnIucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHFzKHRoaXMuX2JpdHMsTk8pfTtSci5wcm90b3R5cGUuaGFzQ2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHFzKHRoaXMuX2JpdHMsWmpbZV0pfTtSci5wcm90b3R5cGUuZ2V0Q2hpbGRCaXRtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JpdHMmTk99O0lPPVJyfSk7dmFyIHZPPWVvKChhbGUsa08pPT57InVzZSBzdHJpY3QiO3ZhciB0ND0oZSx0LG4sbyk9PntsZXQgYT1lJjY1NTM1fDAscj1lPj4+MTYmNjU1MzV8MCxpPTA7Zm9yKDtuIT09MDspe2k9bj4yZTM/MmUzOm4sbi09aTtkbyBhPWErdFtvKytdfDAscj1yK2F8MDt3aGlsZSgtLWkpO2ElPTY1NTIxLHIlPTY1NTIxfXJldHVybiBhfHI8PDE2fDB9O2tPLmV4cG9ydHM9dDR9KTt2YXIgRE89ZW8oKHJsZSxGTyk9PnsidXNlIHN0cmljdCI7dmFyIG40PSgpPT57bGV0IGUsdD1bXTtmb3IodmFyIG49MDtuPDI1NjtuKyspe2U9bjtmb3IodmFyIG89MDtvPDg7bysrKWU9ZSYxPzM5ODgyOTIzODReZT4+PjE6ZT4+PjE7dFtuXT1lfXJldHVybiB0fSxvND1uZXcgVWludDMyQXJyYXkobjQoKSksYTQ9KGUsdCxuLG8pPT57bGV0IGE9bzQscj1vK247ZV49LTE7Zm9yKGxldCBpPW87aTxyO2krKyllPWU+Pj44XmFbKGVedFtpXSkmMjU1XTtyZXR1cm4gZV4tMX07Rk8uZXhwb3J0cz1hNH0pO3ZhciBVTz1lbygoaWxlLEJPKT0+eyJ1c2Ugc3RyaWN0IjtCTy5leHBvcnRzPWZ1bmN0aW9uKHQsbil7bGV0IG8sYSxyLGksZixkLGMsdSxsLGgsbSxiLHAseSxFLF8sVCx3LFIsUyxDLEksTixQLHY9dC5zdGF0ZTtvPXQubmV4dF9pbixOPXQuaW5wdXQsYT1vKyh0LmF2YWlsX2luLTUpLHI9dC5uZXh0X291dCxQPXQub3V0cHV0LGk9ci0obi10LmF2YWlsX291dCksZj1yKyh0LmF2YWlsX291dC0yNTcpLGQ9di5kbWF4LGM9di53c2l6ZSx1PXYud2hhdmUsbD12LnduZXh0LGg9di53aW5kb3csbT12LmhvbGQsYj12LmJpdHMscD12LmxlbmNvZGUseT12LmRpc3Rjb2RlLEU9KDE8PHYubGVuYml0cyktMSxfPSgxPDx2LmRpc3RiaXRzKS0xO2U6ZG97YjwxNSYmKG0rPU5bbysrXTw8YixiKz04LG0rPU5bbysrXTw8YixiKz04KSxUPXBbbSZFXTt0OmZvcig7Oyl7aWYodz1UPj4+MjQsbT4+Pj13LGItPXcsdz1UPj4+MTYmMjU1LHc9PT0wKVBbcisrXT1UJjY1NTM1O2Vsc2UgaWYodyYxNil7Uj1UJjY1NTM1LHcmPTE1LHcmJihiPHcmJihtKz1OW28rK108PGIsYis9OCksUis9bSYoMTw8dyktMSxtPj4+PXcsYi09dyksYjwxNSYmKG0rPU5bbysrXTw8YixiKz04LG0rPU5bbysrXTw8YixiKz04KSxUPXlbbSZfXTtuOmZvcig7Oyl7aWYodz1UPj4+MjQsbT4+Pj13LGItPXcsdz1UPj4+MTYmMjU1LHcmMTYpe2lmKFM9VCY2NTUzNSx3Jj0xNSxiPHcmJihtKz1OW28rK108PGIsYis9OCxiPHcmJihtKz1OW28rK108PGIsYis9OCkpLFMrPW0mKDE8PHcpLTEsUz5kKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHYubW9kZT0xNjIwOTticmVhayBlfWlmKG0+Pj49dyxiLT13LHc9ci1pLFM+dyl7aWYodz1TLXcsdz51JiZ2LnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsdi5tb2RlPTE2MjA5O2JyZWFrIGV9aWYoQz0wLEk9aCxsPT09MCl7aWYoQys9Yy13LHc8Uil7Ui09dztkbyBQW3IrK109aFtDKytdO3doaWxlKC0tdyk7Qz1yLVMsST1QfX1lbHNlIGlmKGw8dyl7aWYoQys9YytsLXcsdy09bCx3PFIpe1ItPXc7ZG8gUFtyKytdPWhbQysrXTt3aGlsZSgtLXcpO2lmKEM9MCxsPFIpe3c9bCxSLT13O2RvIFBbcisrXT1oW0MrK107d2hpbGUoLS13KTtDPXItUyxJPVB9fX1lbHNlIGlmKEMrPWwtdyx3PFIpe1ItPXc7ZG8gUFtyKytdPWhbQysrXTt3aGlsZSgtLXcpO0M9ci1TLEk9UH1mb3IoO1I+MjspUFtyKytdPUlbQysrXSxQW3IrK109SVtDKytdLFBbcisrXT1JW0MrK10sUi09MztSJiYoUFtyKytdPUlbQysrXSxSPjEmJihQW3IrK109SVtDKytdKSl9ZWxzZXtDPXItUztkbyBQW3IrK109UFtDKytdLFBbcisrXT1QW0MrK10sUFtyKytdPVBbQysrXSxSLT0zO3doaWxlKFI+Mik7UiYmKFBbcisrXT1QW0MrK10sUj4xJiYoUFtyKytdPVBbQysrXSkpfX1lbHNlIGlmKCh3JjY0KT09PTApe1Q9eVsoVCY2NTUzNSkrKG0mKDE8PHcpLTEpXTtjb250aW51ZSBufWVsc2V7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsdi5tb2RlPTE2MjA5O2JyZWFrIGV9YnJlYWt9fWVsc2UgaWYoKHcmNjQpPT09MCl7VD1wWyhUJjY1NTM1KSsobSYoMTw8dyktMSldO2NvbnRpbnVlIHR9ZWxzZSBpZih3JjMyKXt2Lm1vZGU9MTYxOTE7YnJlYWsgZX1lbHNle3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHYubW9kZT0xNjIwOTticmVhayBlfWJyZWFrfX13aGlsZShvPGEmJnI8Zik7Uj1iPj4zLG8tPVIsYi09Ujw8MyxtJj0oMTw8YiktMSx0Lm5leHRfaW49byx0Lm5leHRfb3V0PXIsdC5hdmFpbF9pbj1vPGE/NSsoYS1vKTo1LShvLWEpLHQuYXZhaWxfb3V0PXI8Zj8yNTcrKGYtcik6MjU3LShyLWYpLHYuaG9sZD1tLHYuYml0cz1ifX0pO3ZhciBqTz1lbygoY2xlLExPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcjQ9bmV3IFVpbnQxNkFycmF5KFszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0pLGk0PW5ldyBVaW50OEFycmF5KFsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0pLGM0PW5ldyBVaW50MTZBcnJheShbMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0pLHM0PW5ldyBVaW50OEFycmF5KFsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0pLGY0PShlLHQsbixvLGEscixpLGYpPT57bGV0IGQ9Zi5iaXRzLGM9MCx1PTAsbD0wLGg9MCxtPTAsYj0wLHA9MCx5PTAsRT0wLF89MCxULHcsUixTLEMsST1udWxsLE4sUD1uZXcgVWludDE2QXJyYXkoMTYpLHY9bmV3IFVpbnQxNkFycmF5KDE2KSxBPW51bGwseCxNLEY7Zm9yKGM9MDtjPD0xNTtjKyspUFtjXT0wO2Zvcih1PTA7dTxvO3UrKylQW3Rbbit1XV0rKztmb3IobT1kLGg9MTU7aD49MSYmUFtoXT09PTA7aC0tKTtpZihtPmgmJihtPWgpLGg9PT0wKXJldHVybiBhW3IrK109MTw8MjR8NjQ8PDE2fDAsYVtyKytdPTE8PDI0fDY0PDwxNnwwLGYuYml0cz0xLDA7Zm9yKGw9MTtsPGgmJlBbbF09PT0wO2wrKyk7Zm9yKG08bCYmKG09bCkseT0xLGM9MTtjPD0xNTtjKyspaWYoeTw8PTEseS09UFtjXSx5PDApcmV0dXJuLTE7aWYoeT4wJiYoZT09PTB8fGghPT0xKSlyZXR1cm4tMTtmb3IodlsxXT0wLGM9MTtjPDE1O2MrKyl2W2MrMV09dltjXStQW2NdO2Zvcih1PTA7dTxvO3UrKyl0W24rdV0hPT0wJiYoaVt2W3Rbbit1XV0rK109dSk7aWYoZT09PTA/KEk9QT1pLE49MjApOmU9PT0xPyhJPXI0LEE9aTQsTj0yNTcpOihJPWM0LEE9czQsTj0wKSxfPTAsdT0wLGM9bCxDPXIsYj1tLHA9MCxSPS0xLEU9MTw8bSxTPUUtMSxlPT09MSYmRT44NTJ8fGU9PT0yJiZFPjU5MilyZXR1cm4gMTtmb3IoOzspe3g9Yy1wLGlbdV0rMTxOPyhNPTAsRj1pW3VdKTppW3VdPj1OPyhNPUFbaVt1XS1OXSxGPUlbaVt1XS1OXSk6KE09OTYsRj0wKSxUPTE8PGMtcCx3PTE8PGIsbD13O2RvIHctPVQsYVtDKyhfPj5wKSt3XT14PDwyNHxNPDwxNnxGfDA7d2hpbGUodyE9PTApO2ZvcihUPTE8PGMtMTtfJlQ7KVQ+Pj0xO2lmKFQhPT0wPyhfJj1ULTEsXys9VCk6Xz0wLHUrKywtLVBbY109PT0wKXtpZihjPT09aClicmVhaztjPXRbbitpW3VdXX1pZihjPm0mJihfJlMpIT09Uil7Zm9yKHA9PT0wJiYocD1tKSxDKz1sLGI9Yy1wLHk9MTw8YjtiK3A8aCYmKHktPVBbYitwXSwhKHk8PTApKTspYisrLHk8PD0xO2lmKEUrPTE8PGIsZT09PTEmJkU+ODUyfHxlPT09MiYmRT41OTIpcmV0dXJuIDE7Uj1fJlMsYVtSXT1tPDwyNHxiPDwxNnxDLXJ8MH19cmV0dXJuIF8hPT0wJiYoYVtDK19dPWMtcDw8MjR8NjQ8PDE2fDApLGYuYml0cz1tLDB9O0xPLmV4cG9ydHM9ZjR9KTt2YXIgcG09ZW8oKHNsZSx6Tyk9PnsidXNlIHN0cmljdCI7ek8uZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX01FTV9FUlJPUjotNCxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0pO3ZhciBFMj1lbygoZmxlLGVyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQXk9dk8oKSx4cj1ETygpLGQ0PVVPKCksRWQ9ak8oKSx1ND0wLGgyPTEsbTI9Mix7Wl9GSU5JU0g6R08sWl9CTE9DSzpsNCxaX1RSRUVTOmdtLFpfT0s6TmMsWl9TVFJFQU1fRU5EOmg0LFpfTkVFRF9ESUNUOm00LFpfU1RSRUFNX0VSUk9SOkZhLFpfREFUQV9FUlJPUjpiMixaX01FTV9FUlJPUjp3eSxaX0JVRl9FUlJPUjpiNCxaX0RFRkxBVEVEOlZPfT1wbSgpLHdtPTE2MTgwLEhPPTE2MTgxLEtPPTE2MTgyLHFPPTE2MTgzLFdPPTE2MTg0LFhPPTE2MTg1LFlPPTE2MTg2LEpPPTE2MTg3LFpPPTE2MTg4LFFPPTE2MTg5LEFtPTE2MTkwLGVpPTE2MTkxLGJ5PTE2MTkyLCRPPTE2MTkzLHB5PTE2MTk0LGUyPTE2MTk1LHQyPTE2MTk2LG4yPTE2MTk3LG8yPTE2MTk4LF9tPTE2MTk5LHltPTE2MjAwLGEyPTE2MjAxLHIyPTE2MjAyLGkyPTE2MjAzLGMyPTE2MjA0LHMyPTE2MjA1LGd5PTE2MjA2LGYyPTE2MjA3LGQyPTE2MjA4LEluPTE2MjA5LEV5PTE2MjEwLHAyPTE2MjExLHA0PTg1MixnND01OTIsXzQ9MTUseTQ9XzQsdTI9ZT0+KGU+Pj4yNCYyNTUpKyhlPj4+OCY2NTI4MCkrKChlJjY1MjgwKTw8OCkrKChlJjI1NSk8PDI0KTtmdW5jdGlvbiBBNCgpe3RoaXMuc3RybT1udWxsLHRoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgVWludDE2QXJyYXkoMzIwKSx0aGlzLndvcms9bmV3IFVpbnQxNkFycmF5KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfXZhciBJYz1lPT57aWYoIWUpcmV0dXJuIDE7bGV0IHQ9ZS5zdGF0ZTtyZXR1cm4hdHx8dC5zdHJtIT09ZXx8dC5tb2RlPHdtfHx0Lm1vZGU+cDI/MTowfSxnMj1lPT57aWYoSWMoZSkpcmV0dXJuIEZhO2xldCB0PWUuc3RhdGU7cmV0dXJuIGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPSIiLHQud3JhcCYmKGUuYWRsZXI9dC53cmFwJjEpLHQubW9kZT13bSx0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5mbGFncz0tMSx0LmRtYXg9MzI3NjgsdC5oZWFkPW51bGwsdC5ob2xkPTAsdC5iaXRzPTAsdC5sZW5jb2RlPXQubGVuZHluPW5ldyBJbnQzMkFycmF5KHA0KSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgSW50MzJBcnJheShnNCksdC5zYW5lPTEsdC5iYWNrPS0xLE5jfSxfMj1lPT57aWYoSWMoZSkpcmV0dXJuIEZhO2xldCB0PWUuc3RhdGU7cmV0dXJuIHQud3NpemU9MCx0LndoYXZlPTAsdC53bmV4dD0wLGcyKGUpfSx5Mj0oZSx0KT0+e2xldCBuO2lmKEljKGUpKXJldHVybiBGYTtsZXQgbz1lLnN0YXRlO3JldHVybiB0PDA/KG49MCx0PS10KToobj0odD4+NCkrNSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHx0PjE1KT9GYTooby53aW5kb3chPT1udWxsJiZvLndiaXRzIT09dCYmKG8ud2luZG93PW51bGwpLG8ud3JhcD1uLG8ud2JpdHM9dCxfMihlKSl9LEEyPShlLHQpPT57aWYoIWUpcmV0dXJuIEZhO2xldCBuPW5ldyBBNDtlLnN0YXRlPW4sbi5zdHJtPWUsbi53aW5kb3c9bnVsbCxuLm1vZGU9d207bGV0IG89eTIoZSx0KTtyZXR1cm4gbyE9PU5jJiYoZS5zdGF0ZT1udWxsKSxvfSx3ND1lPT5BMihlLHk0KSxsMj0hMCxfeSx5eSxFND1lPT57aWYobDIpe195PW5ldyBJbnQzMkFycmF5KDUxMikseXk9bmV3IEludDMyQXJyYXkoMzIpO2xldCB0PTA7Zm9yKDt0PDE0NDspZS5sZW5zW3QrK109ODtmb3IoO3Q8MjU2OyllLmxlbnNbdCsrXT05O2Zvcig7dDwyODA7KWUubGVuc1t0KytdPTc7Zm9yKDt0PDI4ODspZS5sZW5zW3QrK109ODtmb3IoRWQoaDIsZS5sZW5zLDAsMjg4LF95LDAsZS53b3JrLHtiaXRzOjl9KSx0PTA7dDwzMjspZS5sZW5zW3QrK109NTtFZChtMixlLmxlbnMsMCwzMix5eSwwLGUud29yayx7Yml0czo1fSksbDI9ITF9ZS5sZW5jb2RlPV95LGUubGVuYml0cz05LGUuZGlzdGNvZGU9eXksZS5kaXN0Yml0cz01fSx3Mj0oZSx0LG4sbyk9PntsZXQgYSxyPWUuc3RhdGU7cmV0dXJuIHIud2luZG93PT09bnVsbCYmKHIud3NpemU9MTw8ci53Yml0cyxyLnduZXh0PTAsci53aGF2ZT0wLHIud2luZG93PW5ldyBVaW50OEFycmF5KHIud3NpemUpKSxvPj1yLndzaXplPyhyLndpbmRvdy5zZXQodC5zdWJhcnJheShuLXIud3NpemUsbiksMCksci53bmV4dD0wLHIud2hhdmU9ci53c2l6ZSk6KGE9ci53c2l6ZS1yLnduZXh0LGE+byYmKGE9byksci53aW5kb3cuc2V0KHQuc3ViYXJyYXkobi1vLG4tbythKSxyLnduZXh0KSxvLT1hLG8/KHIud2luZG93LnNldCh0LnN1YmFycmF5KG4tbyxuKSwwKSxyLnduZXh0PW8sci53aGF2ZT1yLndzaXplKTooci53bmV4dCs9YSxyLnduZXh0PT09ci53c2l6ZSYmKHIud25leHQ9MCksci53aGF2ZTxyLndzaXplJiYoci53aGF2ZSs9YSkpKSwwfSxUND0oZSx0KT0+e2xldCBuLG8sYSxyLGksZixkLGMsdSxsLGgsbSxiLHAseT0wLEUsXyxULHcsUixTLEMsSSxOPW5ldyBVaW50OEFycmF5KDQpLFAsdixBPW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSk7aWYoSWMoZSl8fCFlLm91dHB1dHx8IWUuaW5wdXQmJmUuYXZhaWxfaW4hPT0wKXJldHVybiBGYTtuPWUuc3RhdGUsbi5tb2RlPT09ZWkmJihuLm1vZGU9YnkpLGk9ZS5uZXh0X291dCxhPWUub3V0cHV0LGQ9ZS5hdmFpbF9vdXQscj1lLm5leHRfaW4sbz1lLmlucHV0LGY9ZS5hdmFpbF9pbixjPW4uaG9sZCx1PW4uYml0cyxsPWYsaD1kLEk9TmM7ZTpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSB3bTppZihuLndyYXA9PT0wKXtuLm1vZGU9Ynk7YnJlYWt9Zm9yKDt1PDE2Oyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYobi53cmFwJjImJmM9PT0zNTYxNSl7bi53Yml0cz09PTAmJihuLndiaXRzPTE1KSxuLmNoZWNrPTAsTlswXT1jJjI1NSxOWzFdPWM+Pj44JjI1NSxuLmNoZWNrPXhyKG4uY2hlY2ssTiwyLDApLGM9MCx1PTAsbi5tb2RlPUhPO2JyZWFrfWlmKG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKG4ud3JhcCYxKXx8KCgoYyYyNTUpPDw4KSsoYz4+OCkpJTMxKXtlLm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPUluO2JyZWFrfWlmKChjJjE1KSE9PVZPKXtlLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLG4ubW9kZT1JbjticmVha31pZihjPj4+PTQsdS09NCxDPShjJjE1KSs4LG4ud2JpdHM9PT0wJiYobi53Yml0cz1DKSxDPjE1fHxDPm4ud2JpdHMpe2UubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9SW47YnJlYWt9bi5kbWF4PTE8PG4ud2JpdHMsbi5mbGFncz0wLGUuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1jJjUxMj9RTzplaSxjPTAsdT0wO2JyZWFrO2Nhc2UgSE86Zm9yKDt1PDE2Oyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYobi5mbGFncz1jLChuLmZsYWdzJjI1NSkhPT1WTyl7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9SW47YnJlYWt9aWYobi5mbGFncyY1NzM0NCl7ZS5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsbi5tb2RlPUluO2JyZWFrfW4uaGVhZCYmKG4uaGVhZC50ZXh0PWM+PjgmMSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoTlswXT1jJjI1NSxOWzFdPWM+Pj44JjI1NSxuLmNoZWNrPXhyKG4uY2hlY2ssTiwyLDApKSxjPTAsdT0wLG4ubW9kZT1LTztjYXNlIEtPOmZvcig7dTwzMjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC50aW1lPWMpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKE5bMF09YyYyNTUsTlsxXT1jPj4+OCYyNTUsTlsyXT1jPj4+MTYmMjU1LE5bM109Yz4+PjI0JjI1NSxuLmNoZWNrPXhyKG4uY2hlY2ssTiw0LDApKSxjPTAsdT0wLG4ubW9kZT1xTztjYXNlIHFPOmZvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9YyYyNTUsbi5oZWFkLm9zPWM+PjgpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKE5bMF09YyYyNTUsTlsxXT1jPj4+OCYyNTUsbi5jaGVjaz14cihuLmNoZWNrLE4sMiwwKSksYz0wLHU9MCxuLm1vZGU9V087Y2FzZSBXTzppZihuLmZsYWdzJjEwMjQpe2Zvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fW4ubGVuZ3RoPWMsbi5oZWFkJiYobi5oZWFkLmV4dHJhX2xlbj1jKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihOWzBdPWMmMjU1LE5bMV09Yz4+PjgmMjU1LG4uY2hlY2s9eHIobi5jaGVjayxOLDIsMCkpLGM9MCx1PTB9ZWxzZSBuLmhlYWQmJihuLmhlYWQuZXh0cmE9bnVsbCk7bi5tb2RlPVhPO2Nhc2UgWE86aWYobi5mbGFncyYxMDI0JiYobT1uLmxlbmd0aCxtPmYmJihtPWYpLG0mJihuLmhlYWQmJihDPW4uaGVhZC5leHRyYV9sZW4tbi5sZW5ndGgsbi5oZWFkLmV4dHJhfHwobi5oZWFkLmV4dHJhPW5ldyBVaW50OEFycmF5KG4uaGVhZC5leHRyYV9sZW4pKSxuLmhlYWQuZXh0cmEuc2V0KG8uc3ViYXJyYXkocixyK20pLEMpKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPXhyKG4uY2hlY2ssbyxtLHIpKSxmLT1tLHIrPW0sbi5sZW5ndGgtPW0pLG4ubGVuZ3RoKSlicmVhayBlO24ubGVuZ3RoPTAsbi5tb2RlPVlPO2Nhc2UgWU86aWYobi5mbGFncyYyMDQ4KXtpZihmPT09MClicmVhayBlO209MDtkbyBDPW9bcittKytdLG4uaGVhZCYmQyYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShDKSk7d2hpbGUoQyYmbTxmKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPXhyKG4uY2hlY2ssbyxtLHIpKSxmLT1tLHIrPW0sQylicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9Sk87Y2FzZSBKTzppZihuLmZsYWdzJjQwOTYpe2lmKGY9PT0wKWJyZWFrIGU7bT0wO2RvIEM9b1tyK20rK10sbi5oZWFkJiZDJiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEMpKTt3aGlsZShDJiZtPGYpO2lmKG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKG4uY2hlY2s9eHIobi5jaGVjayxvLG0scikpLGYtPW0scis9bSxDKWJyZWFrIGV9ZWxzZSBuLmhlYWQmJihuLmhlYWQuY29tbWVudD1udWxsKTtuLm1vZGU9Wk87Y2FzZSBaTzppZihuLmZsYWdzJjUxMil7Zm9yKDt1PDE2Oyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYobi53cmFwJjQmJmMhPT0obi5jaGVjayY2NTUzNSkpe2UubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9SW47YnJlYWt9Yz0wLHU9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT1laTticmVhaztjYXNlIFFPOmZvcig7dTwzMjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWUuYWRsZXI9bi5jaGVjaz11MihjKSxjPTAsdT0wLG4ubW9kZT1BbTtjYXNlIEFtOmlmKG4uaGF2ZWRpY3Q9PT0wKXJldHVybiBlLm5leHRfb3V0PWksZS5hdmFpbF9vdXQ9ZCxlLm5leHRfaW49cixlLmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPXUsbTQ7ZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWVpO2Nhc2UgZWk6aWYodD09PWw0fHx0PT09Z20pYnJlYWsgZTtjYXNlIGJ5OmlmKG4ubGFzdCl7Yz4+Pj11JjcsdS09dSY3LG4ubW9kZT1neTticmVha31mb3IoO3U8Mzspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fXN3aXRjaChuLmxhc3Q9YyYxLGM+Pj49MSx1LT0xLGMmMyl7Y2FzZSAwOm4ubW9kZT0kTzticmVhaztjYXNlIDE6aWYoRTQobiksbi5tb2RlPV9tLHQ9PT1nbSl7Yz4+Pj0yLHUtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6bi5tb2RlPXQyO2JyZWFrO2Nhc2UgMzplLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9SW59Yz4+Pj0yLHUtPTI7YnJlYWs7Y2FzZSAkTzpmb3IoYz4+Pj11JjcsdS09dSY3O3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZigoYyY2NTUzNSkhPT0oYz4+PjE2XjY1NTM1KSl7ZS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLG4ubW9kZT1JbjticmVha31pZihuLmxlbmd0aD1jJjY1NTM1LGM9MCx1PTAsbi5tb2RlPXB5LHQ9PT1nbSlicmVhayBlO2Nhc2UgcHk6bi5tb2RlPWUyO2Nhc2UgZTI6aWYobT1uLmxlbmd0aCxtKXtpZihtPmYmJihtPWYpLG0+ZCYmKG09ZCksbT09PTApYnJlYWsgZTthLnNldChvLnN1YmFycmF5KHIscittKSxpKSxmLT1tLHIrPW0sZC09bSxpKz1tLG4ubGVuZ3RoLT1tO2JyZWFrfW4ubW9kZT1laTticmVhaztjYXNlIHQyOmZvcig7dTwxNDspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKG4ubmxlbj0oYyYzMSkrMjU3LGM+Pj49NSx1LT01LG4ubmRpc3Q9KGMmMzEpKzEsYz4+Pj01LHUtPTUsbi5uY29kZT0oYyYxNSkrNCxjPj4+PTQsdS09NCxuLm5sZW4+Mjg2fHxuLm5kaXN0PjMwKXtlLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLG4ubW9kZT1JbjticmVha31uLmhhdmU9MCxuLm1vZGU9bjI7Y2FzZSBuMjpmb3IoO24uaGF2ZTxuLm5jb2RlOyl7Zm9yKDt1PDM7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLmxlbnNbQVtuLmhhdmUrK11dPWMmNyxjPj4+PTMsdS09M31mb3IoO24uaGF2ZTwxOTspbi5sZW5zW0Fbbi5oYXZlKytdXT0wO2lmKG4ubGVuY29kZT1uLmxlbmR5bixuLmxlbmJpdHM9NyxQPXtiaXRzOm4ubGVuYml0c30sST1FZCh1NCxuLmxlbnMsMCwxOSxuLmxlbmNvZGUsMCxuLndvcmssUCksbi5sZW5iaXRzPVAuYml0cyxJKXtlLm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixuLm1vZGU9SW47YnJlYWt9bi5oYXZlPTAsbi5tb2RlPW8yO2Nhc2UgbzI6Zm9yKDtuLmhhdmU8bi5ubGVuK24ubmRpc3Q7KXtmb3IoO3k9bi5sZW5jb2RlW2MmKDE8PG4ubGVuYml0cyktMV0sRT15Pj4+MjQsXz15Pj4+MTYmMjU1LFQ9eSY2NTUzNSwhKEU8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYoVDwxNiljPj4+PUUsdS09RSxuLmxlbnNbbi5oYXZlKytdPVQ7ZWxzZXtpZihUPT09MTYpe2Zvcih2PUUrMjt1PHY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZihjPj4+PUUsdS09RSxuLmhhdmU9PT0wKXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPUluO2JyZWFrfUM9bi5sZW5zW24uaGF2ZS0xXSxtPTMrKGMmMyksYz4+Pj0yLHUtPTJ9ZWxzZSBpZihUPT09MTcpe2Zvcih2PUUrMzt1PHY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1jPj4+PUUsdS09RSxDPTAsbT0zKyhjJjcpLGM+Pj49Myx1LT0zfWVsc2V7Zm9yKHY9RSs3O3U8djspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWM+Pj49RSx1LT1FLEM9MCxtPTExKyhjJjEyNyksYz4+Pj03LHUtPTd9aWYobi5oYXZlK20+bi5ubGVuK24ubmRpc3Qpe2UubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9SW47YnJlYWt9Zm9yKDttLS07KW4ubGVuc1tuLmhhdmUrK109Q319aWYobi5tb2RlPT09SW4pYnJlYWs7aWYobi5sZW5zWzI1Nl09PT0wKXtlLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9SW47YnJlYWt9aWYobi5sZW5iaXRzPTksUD17Yml0czpuLmxlbmJpdHN9LEk9RWQoaDIsbi5sZW5zLDAsbi5ubGVuLG4ubGVuY29kZSwwLG4ud29yayxQKSxuLmxlbmJpdHM9UC5iaXRzLEkpe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLG4ubW9kZT1JbjticmVha31pZihuLmRpc3RiaXRzPTYsbi5kaXN0Y29kZT1uLmRpc3RkeW4sUD17Yml0czpuLmRpc3RiaXRzfSxJPUVkKG0yLG4ubGVucyxuLm5sZW4sbi5uZGlzdCxuLmRpc3Rjb2RlLDAsbi53b3JrLFApLG4uZGlzdGJpdHM9UC5iaXRzLEkpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLG4ubW9kZT1JbjticmVha31pZihuLm1vZGU9X20sdD09PWdtKWJyZWFrIGU7Y2FzZSBfbTpuLm1vZGU9eW07Y2FzZSB5bTppZihmPj02JiZkPj0yNTgpe2UubmV4dF9vdXQ9aSxlLmF2YWlsX291dD1kLGUubmV4dF9pbj1yLGUuYXZhaWxfaW49ZixuLmhvbGQ9YyxuLmJpdHM9dSxkNChlLGgpLGk9ZS5uZXh0X291dCxhPWUub3V0cHV0LGQ9ZS5hdmFpbF9vdXQscj1lLm5leHRfaW4sbz1lLmlucHV0LGY9ZS5hdmFpbF9pbixjPW4uaG9sZCx1PW4uYml0cyxuLm1vZGU9PT1laSYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO3k9bi5sZW5jb2RlW2MmKDE8PG4ubGVuYml0cyktMV0sRT15Pj4+MjQsXz15Pj4+MTYmMjU1LFQ9eSY2NTUzNSwhKEU8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYoXyYmKF8mMjQwKT09PTApe2Zvcih3PUUsUj1fLFM9VDt5PW4ubGVuY29kZVtTKygoYyYoMTw8dytSKS0xKT4+dyldLEU9eT4+PjI0LF89eT4+PjE2JjI1NSxUPXkmNjU1MzUsISh3K0U8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9Yz4+Pj13LHUtPXcsbi5iYWNrKz13fWlmKGM+Pj49RSx1LT1FLG4uYmFjays9RSxuLmxlbmd0aD1ULF89PT0wKXtuLm1vZGU9czI7YnJlYWt9aWYoXyYzMil7bi5iYWNrPS0xLG4ubW9kZT1laTticmVha31pZihfJjY0KXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9SW47YnJlYWt9bi5leHRyYT1fJjE1LG4ubW9kZT1hMjtjYXNlIGEyOmlmKG4uZXh0cmEpe2Zvcih2PW4uZXh0cmE7dTx2Oyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9bi5sZW5ndGgrPWMmKDE8PG4uZXh0cmEpLTEsYz4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT1yMjtjYXNlIHIyOmZvcig7eT1uLmRpc3Rjb2RlW2MmKDE8PG4uZGlzdGJpdHMpLTFdLEU9eT4+PjI0LF89eT4+PjE2JjI1NSxUPXkmNjU1MzUsIShFPD11KTspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKChfJjI0MCk9PT0wKXtmb3Iodz1FLFI9XyxTPVQ7eT1uLmRpc3Rjb2RlW1MrKChjJigxPDx3K1IpLTEpPj53KV0sRT15Pj4+MjQsXz15Pj4+MTYmMjU1LFQ9eSY2NTUzNSwhKHcrRTw9dSk7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1jPj4+PXcsdS09dyxuLmJhY2srPXd9aWYoYz4+Pj1FLHUtPUUsbi5iYWNrKz1FLF8mNjQpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG4ubW9kZT1JbjticmVha31uLm9mZnNldD1ULG4uZXh0cmE9XyYxNSxuLm1vZGU9aTI7Y2FzZSBpMjppZihuLmV4dHJhKXtmb3Iodj1uLmV4dHJhO3U8djspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fW4ub2Zmc2V0Kz1jJigxPDxuLmV4dHJhKS0xLGM+Pj49bi5leHRyYSx1LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPUluO2JyZWFrfW4ubW9kZT1jMjtjYXNlIGMyOmlmKGQ9PT0wKWJyZWFrIGU7aWYobT1oLWQsbi5vZmZzZXQ+bSl7aWYobT1uLm9mZnNldC1tLG0+bi53aGF2ZSYmbi5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1JbjticmVha31tPm4ud25leHQ/KG0tPW4ud25leHQsYj1uLndzaXplLW0pOmI9bi53bmV4dC1tLG0+bi5sZW5ndGgmJihtPW4ubGVuZ3RoKSxwPW4ud2luZG93fWVsc2UgcD1hLGI9aS1uLm9mZnNldCxtPW4ubGVuZ3RoO20+ZCYmKG09ZCksZC09bSxuLmxlbmd0aC09bTtkbyBhW2krK109cFtiKytdO3doaWxlKC0tbSk7bi5sZW5ndGg9PT0wJiYobi5tb2RlPXltKTticmVhaztjYXNlIHMyOmlmKGQ9PT0wKWJyZWFrIGU7YVtpKytdPW4ubGVuZ3RoLGQtLSxuLm1vZGU9eW07YnJlYWs7Y2FzZSBneTppZihuLndyYXApe2Zvcig7dTwzMjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGN8PW9bcisrXTw8dSx1Kz04fWlmKGgtPWQsZS50b3RhbF9vdXQrPWgsbi50b3RhbCs9aCxuLndyYXAmNCYmaCYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP3hyKG4uY2hlY2ssYSxoLGktaCk6QXkobi5jaGVjayxhLGgsaS1oKSksaD1kLG4ud3JhcCY0JiYobi5mbGFncz9jOnUyKGMpKSE9PW4uY2hlY2spe2UubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPUluO2JyZWFrfWM9MCx1PTB9bi5tb2RlPWYyO2Nhc2UgZjI6aWYobi53cmFwJiZuLmZsYWdzKXtmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZihuLndyYXAmNCYmYyE9PShuLnRvdGFsJjQyOTQ5NjcyOTUpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPUluO2JyZWFrfWM9MCx1PTB9bi5tb2RlPWQyO2Nhc2UgZDI6ST1oNDticmVhayBlO2Nhc2UgSW46ST1iMjticmVhayBlO2Nhc2UgRXk6cmV0dXJuIHd5O2Nhc2UgcDI6ZGVmYXVsdDpyZXR1cm4gRmF9cmV0dXJuIGUubmV4dF9vdXQ9aSxlLmF2YWlsX291dD1kLGUubmV4dF9pbj1yLGUuYXZhaWxfaW49ZixuLmhvbGQ9YyxuLmJpdHM9dSwobi53c2l6ZXx8aCE9PWUuYXZhaWxfb3V0JiZuLm1vZGU8SW4mJihuLm1vZGU8Z3l8fHQhPT1HTykpJiZ3MihlLGUub3V0cHV0LGUubmV4dF9vdXQsaC1lLmF2YWlsX291dCk/KG4ubW9kZT1FeSx3eSk6KGwtPWUuYXZhaWxfaW4saC09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9bCxlLnRvdGFsX291dCs9aCxuLnRvdGFsKz1oLG4ud3JhcCY0JiZoJiYoZS5hZGxlcj1uLmNoZWNrPW4uZmxhZ3M/eHIobi5jaGVjayxhLGgsZS5uZXh0X291dC1oKTpBeShuLmNoZWNrLGEsaCxlLm5leHRfb3V0LWgpKSxlLmRhdGFfdHlwZT1uLmJpdHMrKG4ubGFzdD82NDowKSsobi5tb2RlPT09ZWk/MTI4OjApKyhuLm1vZGU9PT1fbXx8bi5tb2RlPT09cHk/MjU2OjApLChsPT09MCYmaD09PTB8fHQ9PT1HTykmJkk9PT1OYyYmKEk9YjQpLEkpfSxSND1lPT57aWYoSWMoZSkpcmV0dXJuIEZhO2xldCB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLE5jfSx4ND0oZSx0KT0+e2lmKEljKGUpKXJldHVybiBGYTtsZXQgbj1lLnN0YXRlO3JldHVybihuLndyYXAmMik9PT0wP0ZhOihuLmhlYWQ9dCx0LmRvbmU9ITEsTmMpfSxPND0oZSx0KT0+e2xldCBuPXQubGVuZ3RoLG8sYSxyO3JldHVybiBJYyhlKXx8KG89ZS5zdGF0ZSxvLndyYXAhPT0wJiZvLm1vZGUhPT1BbSk/RmE6by5tb2RlPT09QW0mJihhPTEsYT1BeShhLHQsbiwwKSxhIT09by5jaGVjayk/YjI6KHI9dzIoZSx0LG4sbikscj8oby5tb2RlPUV5LHd5KTooby5oYXZlZGljdD0xLE5jKSl9O2VyLmV4cG9ydHMuaW5mbGF0ZVJlc2V0PV8yO2VyLmV4cG9ydHMuaW5mbGF0ZVJlc2V0Mj15Mjtlci5leHBvcnRzLmluZmxhdGVSZXNldEtlZXA9ZzI7ZXIuZXhwb3J0cy5pbmZsYXRlSW5pdD13NDtlci5leHBvcnRzLmluZmxhdGVJbml0Mj1BMjtlci5leHBvcnRzLmluZmxhdGU9VDQ7ZXIuZXhwb3J0cy5pbmZsYXRlRW5kPVI0O2VyLmV4cG9ydHMuaW5mbGF0ZUdldEhlYWRlcj14NDtlci5leHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5PU80O2VyLmV4cG9ydHMuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSk7dmFyIFQyPWVvKChkbGUsVHkpPT57InVzZSBzdHJpY3QiO3ZhciBTND0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCk7VHkuZXhwb3J0cy5hc3NpZ249ZnVuY3Rpb24oZSl7bGV0IHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2Zvcig7dC5sZW5ndGg7KXtsZXQgbj10LnNoaWZ0KCk7aWYobil7aWYodHlwZW9mIG4hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IobisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKGxldCBvIGluIG4pUzQobixvKSYmKGVbb109bltvXSl9fXJldHVybiBlfTtUeS5leHBvcnRzLmZsYXR0ZW5DaHVua3M9ZT0+e2xldCB0PTA7Zm9yKGxldCBvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXQrPWVbb10ubGVuZ3RoO2xldCBuPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgbz0wLGE9MCxyPWUubGVuZ3RoO288cjtvKyspe2xldCBpPWVbb107bi5zZXQoaSxhKSxhKz1pLmxlbmd0aH1yZXR1cm4gbn19KTt2YXIgeDI9ZW8oKHVsZSxFbSk9PnsidXNlIHN0cmljdCI7dmFyIFIyPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoe1IyPSExfXZhciBUZD1uZXcgVWludDhBcnJheSgyNTYpO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylUZFtlXT1lPj0yNTI/NjplPj0yNDg/NTplPj0yNDA/NDplPj0yMjQ/MzplPj0xOTI/MjoxO1RkWzI1NF09VGRbMjU0XT0xO0VtLmV4cG9ydHMuc3RyaW5nMmJ1Zj1lPT57aWYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iJiZUZXh0RW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlKXJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSk7bGV0IHQsbixvLGEscixpPWUubGVuZ3RoLGY9MDtmb3IoYT0wO2E8aTthKyspbj1lLmNoYXJDb2RlQXQoYSksKG4mNjQ1MTIpPT09NTUyOTYmJmErMTxpJiYobz1lLmNoYXJDb2RlQXQoYSsxKSwobyY2NDUxMik9PT01NjMyMCYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoby01NjMyMCksYSsrKSksZis9bjwxMjg/MTpuPDIwNDg/MjpuPDY1NTM2PzM6NDtmb3IodD1uZXcgVWludDhBcnJheShmKSxyPTAsYT0wO3I8ZjthKyspbj1lLmNoYXJDb2RlQXQoYSksKG4mNjQ1MTIpPT09NTUyOTYmJmErMTxpJiYobz1lLmNoYXJDb2RlQXQoYSsxKSwobyY2NDUxMik9PT01NjMyMCYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoby01NjMyMCksYSsrKSksbjwxMjg/dFtyKytdPW46bjwyMDQ4Pyh0W3IrK109MTkyfG4+Pj42LHRbcisrXT0xMjh8biY2Myk6bjw2NTUzNj8odFtyKytdPTIyNHxuPj4+MTIsdFtyKytdPTEyOHxuPj4+NiY2Myx0W3IrK109MTI4fG4mNjMpOih0W3IrK109MjQwfG4+Pj4xOCx0W3IrK109MTI4fG4+Pj4xMiY2Myx0W3IrK109MTI4fG4+Pj42JjYzLHRbcisrXT0xMjh8biY2Myk7cmV0dXJuIHR9O3ZhciBDND0oZSx0KT0+e2lmKHQ8NjU1MzQmJmUuc3ViYXJyYXkmJlIyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5sZW5ndGg9PT10P2U6ZS5zdWJhcnJheSgwLHQpKTtsZXQgbj0iIjtmb3IobGV0IG89MDtvPHQ7bysrKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtvXSk7cmV0dXJuIG59O0VtLmV4cG9ydHMuYnVmMnN0cmluZz0oZSx0KT0+e2xldCBuPXR8fGUubGVuZ3RoO2lmKHR5cGVvZiBUZXh0RGVjb2Rlcj09ImZ1bmN0aW9uIiYmVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSlyZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGUuc3ViYXJyYXkoMCx0KSk7bGV0IG8sYSxyPW5ldyBBcnJheShuKjIpO2ZvcihhPTAsbz0wO288bjspe2xldCBpPWVbbysrXTtpZihpPDEyOCl7clthKytdPWk7Y29udGludWV9bGV0IGY9VGRbaV07aWYoZj40KXtyW2ErK109NjU1MzMsbys9Zi0xO2NvbnRpbnVlfWZvcihpJj1mPT09Mj8zMTpmPT09Mz8xNTo3O2Y+MSYmbzxuOylpPWk8PDZ8ZVtvKytdJjYzLGYtLTtpZihmPjEpe3JbYSsrXT02NTUzMztjb250aW51ZX1pPDY1NTM2P3JbYSsrXT1pOihpLT02NTUzNixyW2ErK109NTUyOTZ8aT4+MTAmMTAyMyxyW2ErK109NTYzMjB8aSYxMDIzKX1yZXR1cm4gQzQocixhKX07RW0uZXhwb3J0cy51dGY4Ym9yZGVyPShlLHQpPT57dD10fHxlLmxlbmd0aCx0PmUubGVuZ3RoJiYodD1lLmxlbmd0aCk7bGV0IG49dC0xO2Zvcig7bj49MCYmKGVbbl0mMTkyKT09PTEyODspbi0tO3JldHVybiBuPDB8fG49PT0wP3Q6bitUZFtlW25dXT50P246dH19KTt2YXIgUzI9ZW8oKGxsZSxPMik9PnsidXNlIHN0cmljdCI7TzIuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSk7dmFyIE0yPWVvKChobGUsQzIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE00KCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH1DMi5leHBvcnRzPU00fSk7dmFyIEkyPWVvKChtbGUsTjIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE40KCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9TjIuZXhwb3J0cz1ONH0pO3ZhciBGMj1lbygoYmxlLFdzKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdGk9RTIoKSxrMj1UMigpLE95PXgyKCksU3k9UzIoKSxJND1NMigpLFA0PUkyKCksdjI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyx7Wl9OT19GTFVTSDprNCxaX0ZJTklTSDp2NCxaX09LOlJkLFpfU1RSRUFNX0VORDpSeSxaX05FRURfRElDVDp4eSxaX1NUUkVBTV9FUlJPUjpGNCxaX0RBVEFfRVJST1I6UDIsWl9NRU1fRVJST1I6RDR9PXBtKCk7ZnVuY3Rpb24geGQoZSl7dGhpcy5vcHRpb25zPWsyLmFzc2lnbih7Y2h1bmtTaXplOjEwMjQqNjQsd2luZG93Qml0czoxNSx0bzoiIn0sZXx8e30pO2xldCB0PXRoaXMub3B0aW9uczt0LnJhdyYmdC53aW5kb3dCaXRzPj0wJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cyx0LndpbmRvd0JpdHM9PT0wJiYodC53aW5kb3dCaXRzPS0xNSkpLHQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYhKGUmJmUud2luZG93Qml0cykmJih0LndpbmRvd0JpdHMrPTMyKSx0LndpbmRvd0JpdHM+MTUmJnQud2luZG93Qml0czw0OCYmKHQud2luZG93Qml0cyYxNSk9PT0wJiYodC53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgSTQsdGhpcy5zdHJtLmF2YWlsX291dD0wO2xldCBuPXRpLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sdC53aW5kb3dCaXRzKTtpZihuIT09UmQpdGhyb3cgbmV3IEVycm9yKFN5W25dKTtpZih0aGlzLmhlYWRlcj1uZXcgUDQsdGkuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLHQuZGljdGlvbmFyeSYmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3QuZGljdGlvbmFyeT1PeS5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6djIuY2FsbCh0LmRpY3Rpb25hcnkpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIiYmKHQuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpKSx0LnJhdyYmKG49dGkuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHQuZGljdGlvbmFyeSksbiE9PVJkKSkpdGhyb3cgbmV3IEVycm9yKFN5W25dKX14ZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2xldCBuPXRoaXMuc3RybSxvPXRoaXMub3B0aW9ucy5jaHVua1NpemUsYT10aGlzLm9wdGlvbnMuZGljdGlvbmFyeSxyLGksZjtpZih0aGlzLmVuZGVkKXJldHVybiExO2Zvcih0PT09fn50P2k9dDppPXQ9PT0hMD92NDprNCx2Mi5jYWxsKGUpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOm4uaW5wdXQ9ZSxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoOzspe2ZvcihuLmF2YWlsX291dD09PTAmJihuLm91dHB1dD1uZXcgVWludDhBcnJheShvKSxuLm5leHRfb3V0PTAsbi5hdmFpbF9vdXQ9bykscj10aS5pbmZsYXRlKG4saSkscj09PXh5JiZhJiYocj10aS5pbmZsYXRlU2V0RGljdGlvbmFyeShuLGEpLHI9PT1SZD9yPXRpLmluZmxhdGUobixpKTpyPT09UDImJihyPXh5KSk7bi5hdmFpbF9pbj4wJiZyPT09UnkmJm4uc3RhdGUud3JhcD4wJiZlW24ubmV4dF9pbl0hPT0wOyl0aS5pbmZsYXRlUmVzZXQobikscj10aS5pbmZsYXRlKG4saSk7c3dpdGNoKHIpe2Nhc2UgRjQ6Y2FzZSBQMjpjYXNlIHh5OmNhc2UgRDQ6cmV0dXJuIHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCwhMX1pZihmPW4uYXZhaWxfb3V0LG4ubmV4dF9vdXQmJihuLmF2YWlsX291dD09PTB8fHI9PT1SeSkpaWYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyIpe2xldCBkPU95LnV0Zjhib3JkZXIobi5vdXRwdXQsbi5uZXh0X291dCksYz1uLm5leHRfb3V0LWQsdT1PeS5idWYyc3RyaW5nKG4ub3V0cHV0LGQpO24ubmV4dF9vdXQ9YyxuLmF2YWlsX291dD1vLWMsYyYmbi5vdXRwdXQuc2V0KG4ub3V0cHV0LnN1YmFycmF5KGQsZCtjKSwwKSx0aGlzLm9uRGF0YSh1KX1lbHNlIHRoaXMub25EYXRhKG4ub3V0cHV0Lmxlbmd0aD09PW4ubmV4dF9vdXQ/bi5vdXRwdXQ6bi5vdXRwdXQuc3ViYXJyYXkoMCxuLm5leHRfb3V0KSk7aWYoIShyPT09UmQmJmY9PT0wKSl7aWYocj09PVJ5KXJldHVybiByPXRpLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAsITA7aWYobi5hdmFpbF9pbj09PTApYnJlYWt9fXJldHVybiEwfTt4ZC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9O3hkLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09UmQmJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1rMi5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfTtmdW5jdGlvbiBDeShlLHQpe2xldCBuPW5ldyB4ZCh0KTtpZihuLnB1c2goZSksbi5lcnIpdGhyb3cgbi5tc2d8fFN5W24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9ZnVuY3Rpb24gQjQoZSx0KXtyZXR1cm4gdD10fHx7fSx0LnJhdz0hMCxDeShlLHQpfVdzLmV4cG9ydHMuSW5mbGF0ZT14ZDtXcy5leHBvcnRzLmluZmxhdGU9Q3k7V3MuZXhwb3J0cy5pbmZsYXRlUmF3PUI0O1dzLmV4cG9ydHMudW5nemlwPUN5O1dzLmV4cG9ydHMuY29uc3RhbnRzPXBtKCl9KTt2YXIgTXk9e307cnQoTXkse2RlZmF1bHQ6KCk9PnE0fSk7ZnVuY3Rpb24gVTQoZSx0KXtsZXQgbj1qaS5mcm9tU3RyaW5nKGUudHlwZSksbz1lLmJ1ZmZlcjtTTyhlLmtleSxvKTtsZXQgYT1LNChvKTtvPWEuYnVmZmVyO2xldCByPWEubGVuZ3RoO3N3aXRjaChuKXtjYXNlIGppLk1FVEFEQVRBOnJldHVybiBqNChvLHIsZS5xdWFkS2V5KTtjYXNlIGppLlRFUlJBSU46cmV0dXJuIFY0KG8scix0KTtjYXNlIGppLkRCUk9PVDpyZXR1cm4gdC5wdXNoKG8pLHtidWZmZXI6b319fWZ1bmN0aW9uIGo0KGUsdCxuKXtsZXQgbz1uZXcgRGF0YVZpZXcoZSksYT0wLHI9by5nZXRVaW50MzIoYSwhMCk7aWYoYSs9WXMsciE9PUw0KXRocm93IG5ldyB1dCgiSW52YWxpZCBtYWdpYyIpO2xldCBpPW8uZ2V0VWludDMyKGEsITApO2lmKGErPVlzLGkhPT0xKXRocm93IG5ldyB1dCgiSW52YWxpZCBkYXRhIHR5cGUuIE11c3QgYmUgMSBmb3IgUXVhZFRyZWVQYWNrZXQiKTtsZXQgZj1vLmdldFVpbnQzMihhLCEwKTtpZihhKz1ZcyxmIT09Mil0aHJvdyBuZXcgdXQoIkludmFsaWQgUXVhZFRyZWVQYWNrZXQgdmVyc2lvbi4gT25seSB2ZXJzaW9uIDIgaXMgc3VwcG9ydGVkLiIpO2xldCBkPW8uZ2V0SW50MzIoYSwhMCk7YSs9UGM7bGV0IGM9by5nZXRJbnQzMihhLCEwKTtpZihhKz1QYyxjIT09MzIpdGhyb3cgbmV3IHV0KCJJbnZhbGlkIGluc3RhbmNlIHNpemUuIik7bGV0IHU9by5nZXRJbnQzMihhLCEwKTthKz1QYztsZXQgbD1vLmdldEludDMyKGEsITApO2ErPVBjO2xldCBoPW8uZ2V0SW50MzIoYSwhMCk7aWYoYSs9UGMsdSE9PWQqYythKXRocm93IG5ldyB1dCgiSW52YWxpZCBkYXRhQnVmZmVyT2Zmc2V0Iik7aWYodStsK2ghPT10KXRocm93IG5ldyB1dCgiSW52YWxpZCBwYWNrZXQgb2Zmc2V0cyIpO2xldCBtPVtdO2ZvcihsZXQgVD0wO1Q8ZDsrK1Qpe2xldCB3PW8uZ2V0VWludDgoYSk7KythLCsrYTtsZXQgUj1vLmdldFVpbnQxNihhLCEwKTthKz1YcztsZXQgUz1vLmdldFVpbnQxNihhLCEwKTthKz1YcztsZXQgQz1vLmdldFVpbnQxNihhLCEwKTthKz1YcyxhKz1YcyxhKz1YcyxhKz1QYyxhKz1QYyxhKz04O2xldCBJPW8uZ2V0VWludDgoYSsrKSxOPW8uZ2V0VWludDgoYSsrKTthKz1YcyxtLnB1c2gobmV3IElPKHcsUixTLEMsSSxOKSl9bGV0IGI9W10scD0wO2Z1bmN0aW9uIHkoVCx3LFIpe2xldCBTPSExO2lmKFI9PT00KXtpZih3Lmhhc1N1YnRyZWUoKSlyZXR1cm47Uz0hMH1mb3IobGV0IEM9MDtDPDQ7KytDKXtsZXQgST1UK0MudG9TdHJpbmcoKTtpZihTKWJbSV09bnVsbDtlbHNlIGlmKFI8NClpZighdy5oYXNDaGlsZChDKSliW0ldPW51bGw7ZWxzZXtpZihwPT09ZCl7Y29uc29sZS5sb2coIkluY29ycmVjdCBudW1iZXIgb2YgaW5zdGFuY2VzIik7cmV0dXJufWxldCBOPW1bcCsrXTtiW0ldPU4seShJLE4sUisxKX19fWxldCBFPTAsXz1tW3ArK107cmV0dXJuIG49PT0iIj8rK0U6YltuXT1fLHkobixfLEUpLGJ9ZnVuY3Rpb24gVjQoZSx0LG4pe2xldCBvPW5ldyBEYXRhVmlldyhlKSxhPWZ1bmN0aW9uKGYpe2ZvcihsZXQgZD0wO2Q8RzQ7KytkKXtsZXQgYz1vLmdldFVpbnQzMihmLCEwKTtpZihmKz1ZcyxmKz1jLGY+dCl0aHJvdyBuZXcgdXQoIk1hbGZvcm1lZCB0ZXJyYWluIHBhY2tldCBmb3VuZC4iKX1yZXR1cm4gZn0scj0wLGk9W107Zm9yKDtpLmxlbmd0aDx6NDspe2xldCBmPXI7cj1hKHIpO2xldCBkPWUuc2xpY2UoZixyKTtuLnB1c2goZCksaS5wdXNoKGQpfXJldHVybiBpfWZ1bmN0aW9uIEs0KGUpe2xldCB0PW5ldyBEYXRhVmlldyhlKSxuPTAsbz10LmdldFVpbnQzMihuLCEwKTtpZihuKz1ZcyxvIT09RDImJm8hPT1INCl0aHJvdyBuZXcgdXQoIkludmFsaWQgbWFnaWMiKTtsZXQgYT10LmdldFVpbnQzMihuLG89PT1EMik7bis9WXM7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoZSxuKSxpPUIyLmRlZmF1bHQuaW5mbGF0ZShyKTtpZihpLmxlbmd0aCE9PWEpdGhyb3cgbmV3IHV0KCJTaXplIG9mIHBhY2tldCBkb2Vzbid0IG1hdGNoIGhlYWRlciIpO3JldHVybiBpfXZhciBCMixYcyxQYyxZcyxqaSxMNCx6NCxHNCxEMixINCxxNCxOeT1YKCgpPT57Q08oKTtQTygpO2phKCk7QjI9Y2EoRjIoKSwxKTtVbigpO1hzPVVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFBjPUludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsWXM9VWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsamk9e01FVEFEQVRBOjAsVEVSUkFJTjoxLERCUk9PVDoyfTtqaS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe2lmKGU9PT0iTWV0YWRhdGEiKXJldHVybiBqaS5NRVRBREFUQTtpZihlPT09IlRlcnJhaW4iKXJldHVybiBqaS5URVJSQUlOO2lmKGU9PT0iRGJSb290IilyZXR1cm4gamkuREJST09UfTtMND0zMjMwMTt6ND01LEc0PTQ7RDI9MTk1MzAyOTgwNSxIND0yOTE3MDM0MTAwO3E0PUF0KFU0KX0pO2Z1bmN0aW9uIFc0KGUpe3JldHVybiBlPD0uMDQwNDU/ZSouMDc3Mzk5MzgwODA0OTUzNTc6TWF0aC5wb3coKGUrLjA1NSkqLjk0Nzg2NzI5ODU3ODE5OTEsMi40KX12YXIgVG0sVTI9WCgoKT0+e1RtPVc0fSk7dmFyIHZ5PXt9O3J0KHZ5LHtkZWZhdWx0OigpPT55Nn0pO2Z1bmN0aW9uIFg0KGUsdCxuLG8sYSxyKXtsZXQgaT1uKigxLWUpK28qZSxmPWEqKDEtZSkrciplO3JldHVybiBpKigxLXQpK2YqdH1mdW5jdGlvbiBSbShlLHQsbixvKXtsZXQgYT1lK3QqbjtyZXR1cm4gb1thXX1mdW5jdGlvbiBZNChlLHQsbil7bGV0IG89bi5uYXRpdmVFeHRlbnQsYT0oZS1vLndlc3QpLyhvLmVhc3Qtby53ZXN0KSoobi53aWR0aC0xKSxyPSh0LW8uc291dGgpLyhvLm5vcnRoLW8uc291dGgpKihuLmhlaWdodC0xKSxpPU1hdGguZmxvb3IoYSksZj1NYXRoLmZsb29yKHIpO2EtPWksci09ZjtsZXQgZD1pPG4ud2lkdGg/aSsxOmksYz1mPG4uaGVpZ2h0P2YrMTpmO2Y9bi5oZWlnaHQtMS1mLGM9bi5oZWlnaHQtMS1jO2xldCB1PVJtKGksZixuLndpZHRoLG4uYnVmZmVyKSxsPVJtKGQsZixuLndpZHRoLG4uYnVmZmVyKSxoPVJtKGksYyxuLndpZHRoLG4uYnVmZmVyKSxtPVJtKGQsYyxuLndpZHRoLG4uYnVmZmVyKSxiPVg0KGEscix1LGwsaCxtKTtyZXR1cm4gYj1iKm4uc2NhbGUrbi5vZmZzZXQsYn1mdW5jdGlvbiBMMihlLHQsbil7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspe2xldCBhPW5bb10ubmF0aXZlRXh0ZW50LHI9bmV3IHM7aWYobltvXS5wcm9qZWN0aW9uVHlwZT09PSJXZWJNZXJjYXRvciIpe2xldCBpPW5bb10ucHJvamVjdGlvbi5fZWxsaXBzb2lkLl9yYWRpaTtyPW5ldyBSbihuZXcgcShpLngsaS55LGkueikpLnByb2plY3QobmV3IHJlKGUsdCwwKSl9ZWxzZSByLng9ZSxyLnk9dDtpZihyLng+YS53ZXN0JiZyLng8YS5lYXN0JiZyLnk+YS5zb3V0aCYmci55PGEubm9ydGgpcmV0dXJuIFk0KHIueCxyLnksbltvXSl9cmV0dXJuIDB9ZnVuY3Rpb24gSjQoZSx0LG4sbyxhLHIsaSl7aWYoaSlyZXR1cm47bGV0IGY9TDIoYS5sb25naXR1ZGUsYS5sYXRpdHVkZSxyKTtmb3IobGV0IGQ9MDtkPGU7KytkKXtsZXQgYz1MMihhLmxvbmdpdHVkZStrLnRvUmFkaWFucyhuKnRbZCozXSksYS5sYXRpdHVkZStrLnRvUmFkaWFucyhvKnRbZCozKzFdKSxyKTt0W2QqMysyXSs9Yy1mfX1mdW5jdGlvbiBaNChlLHQsbixvLGEscixpLGYsZCl7aWYoZT09PTB8fCFnKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuO2xldCBjPW5ldyBxKE1hdGguc3FydChpLngpLE1hdGguc3FydChpLnkpLE1hdGguc3FydChpLnopKTtmb3IobGV0IHU9MDt1PGU7Kyt1KXtsZXQgbD11KjMsaD1sKzEsbT1sKzIsYj1uZXcgcmU7Yi5sb25naXR1ZGU9by5sb25naXR1ZGUray50b1JhZGlhbnMoZip0W2xdKSxiLmxhdGl0dWRlPW8ubGF0aXR1ZGUray50b1JhZGlhbnMoZCp0W2hdKSxiLmhlaWdodD1vLmhlaWdodCt0W21dO2xldCBwPXt9O2MuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYixwKSxwLngtPWEueCxwLnktPWEueSxwLnotPWEuejtsZXQgeT17fTtpZihKLm11bHRpcGx5QnlWZWN0b3IocixwLHkpLHRbbF09eS54LHRbaF09eS55LHRbbV09eS56LGcobikpe2xldCBFPW5ldyBzKG5bbF0sbltoXSxuW21dKSxfPXt9O0oubXVsdGlwbHlCeVZlY3RvcihyLEUsXyksbltsXT1fLngsbltoXT1fLnksblttXT1fLnp9fX1mdW5jdGlvbiBRNChlLHQsbil7Zm9yKGxldCBvPTA7bzxlOysrbyl7bGV0IGE9bltvKjRdLzY1NTM1LHI9bltvKjQrMV0vNjU1MzUsaT0obltvKjQrMl0tbltvKjRdKS82NTUzNSxmPShuW28qNCszXS1uW28qNCsxXSkvNjU1MzU7dFtvKjJdKj1pLHRbbyoyXSs9YSx0W28qMisxXSo9Zix0W28qMisxXSs9cn19ZnVuY3Rpb24gJDQoZSx0LG4sbyl7bGV0IGE9bmV3IFVpbnQzMkFycmF5KGUpLHI9Zyh0KT9mPT50W2ZdOmY9PmYsaT0wO2lmKG8mJmcobikpe2xldCBmPWQ9Pm5bcihkKSo0KzNdPDI1NTtmb3IobGV0IGQ9MDtkPGU7ZCs9MykhZihkKSYmIWYoZCsxKSYmIWYoZCsyKSYmKGFbaSsrXT1yKGQpLGFbaSsrXT1yKGQrMSksYVtpKytdPXIoZCsyKSk7aWYoaT4wKXtsZXQgZD1pO2ZvcihsZXQgYz0wO2M8ZTtjKz0zKShmKGMpfHxmKGMrMSl8fGYoYysyKSkmJihhW2QrK109cihjKSxhW2QrK109cihjKzEpLGFbZCsrXT1yKGMrMikpfWVsc2UgZm9yKGxldCBkPTA7ZDxlOysrZClhW2RdPXIoZCl9ZWxzZXtpPWU7Zm9yKGxldCBmPTA7ZjxlOysrZilhW2ZdPXIoZil9cmV0dXJue2luZGV4QXJyYXk6YSx0cmFuc3BhcmVudFZlcnRleE9mZnNldDppfX1mdW5jdGlvbiBlNihlLHQsbil7bGV0IG89dFtuXTtpZihnKG8pKXJldHVybiBvO2xldCBhPXRbbl09e3Bvc2l0aW9uczp7fSxpbmRpY2VzOnt9LGVkZ2VzOnt9fSxyPWVbbl0/P2UuZGVmYXVsdDtyZXR1cm4gYS5oYXNPdXRsaW5lPWcocj8uZWRnZXMpLGF9ZnVuY3Rpb24gdDYoZSx0LG4sbyl7aWYoIWcoZVtuXSkpe2xldCBhPW4qMyxyPXQ7Zm9yKGxldCBpPTA7aTwzO2krKyl7bGV0IGY9b1thK2ldO2cocltmXSl8fChyW2ZdPXt9KSxyPXJbZl19ZyhyLmluZGV4KXx8KHIuaW5kZXg9biksZVtuXT1yLmluZGV4fX1mdW5jdGlvbiBuNihlLHQsbixvLGEscil7bGV0IGksZjtvPGE/KGk9byxmPWEpOihpPWEsZj1vKTtsZXQgZD1lW2ldO2coZCl8fChkPWVbaV09e30pO2xldCBjPWRbZl07ZyhjKXx8KGM9ZFtmXT17bm9ybWFsc0luZGV4OltdLG91dGxpbmVzOltdfSksYy5ub3JtYWxzSW5kZXgucHVzaChyKSwoYy5vdXRsaW5lcy5sZW5ndGg9PT0wfHx0IT09b3x8biE9PWEpJiZjLm91dGxpbmVzLnB1c2godCxuKX1mdW5jdGlvbiBvNihlLHQsbixvKXtsZXQgYT1bXTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrPTMpe2xldCBpPWcodCk/dFtuW3JdXToiZGVmYXVsdCIsZj1lNihlLGEsaSk7aWYoIWYuaGFzT3V0bGluZSljb250aW51ZTtsZXQgZD1mLmluZGljZXMsYz1mLnBvc2l0aW9ucztmb3IobGV0IGw9MDtsPDM7bCsrKXtsZXQgaD1uW3IrbF07dDYoZCxjLGgsbyl9bGV0IHU9Zi5lZGdlcztmb3IobGV0IGw9MDtsPDM7bCsrKXtsZXQgaD1uW3IrbF0sbT1uW3IrKGwrMSklM10sYj1kW2hdLHA9ZFttXTtuNih1LGgsbSxiLHAscil9fXJldHVybiBhfWZ1bmN0aW9uIGoyKGUsdCxuLG8pe2xldCBhPW5bdF0qMyxyPW5bdCsxXSozLGk9blt0KzJdKjM7cy5mcm9tQXJyYXkobyxhLE9yKSxzLmZyb21BcnJheShvLHIseG0pLHMuZnJvbUFycmF5KG8saSxPbSkscy5zdWJ0cmFjdCh4bSxPcix4bSkscy5zdWJ0cmFjdChPbSxPcixPbSkscy5jcm9zcyh4bSxPbSxPcik7bGV0IGY9cy5tYWduaXR1ZGUoT3IpO2YhPT0wJiZzLmRpdmlkZUJ5U2NhbGFyKE9yLGYsT3IpO2xldCBkPXQqMyxjPSh0KzEpKjMsdT0odCsyKSozO3MucGFjayhPcixlLGQpLHMucGFjayhPcixlLGMpLHMucGFjayhPcixlLHUpfWZ1bmN0aW9uIGE2KGUsdCxuKXtzLmZyb21BcnJheShlLHQsU20pLHMuZnJvbUFycmF5KGUsbixJeSk7bGV0IG89cy5kb3QoU20sSXkpLGE9cy5tYWduaXR1ZGUocy5jcm9zcyhTbSxJeSxTbSkpO3JldHVybiBNYXRoLmF0YW4yKGEsbyk8LjI1fWZ1bmN0aW9uIHI2KGUsdCxuLG8sYSl7aWYodC5ub3JtYWxzSW5kZXgubGVuZ3RoPjEpe2xldCByPW8ubGVuZ3RoPT09YS5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0Lm5vcm1hbHNJbmRleC5sZW5ndGg7aSsrKXtsZXQgZj10Lm5vcm1hbHNJbmRleFtpXTtpZihnKGFbZiozXSl8fGoyKGEsZixuLG8pLGkhPT0wKWZvcihsZXQgZD0wO2Q8aTtkKyspe2xldCBjPXQubm9ybWFsc0luZGV4W2RdLHU9cj9uW2ZdKjM6ZiozLGw9cj9uW2NdKjM6YyozO2lmKGE2KGEsdSxsKSlyZXR1cm59fX1lLnB1c2goLi4udC5vdXRsaW5lcyl9ZnVuY3Rpb24gaTYoZSx0LG4sbyxhKXtsZXQgcj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGY9dFtyW2ldXSxkPU9iamVjdC5rZXlzKGYpO2ZvcihsZXQgYz0wO2M8ZC5sZW5ndGg7YysrKXtsZXQgdT1mW2RbY11dO3I2KGUsdSxuLG8sYSl9fX1mdW5jdGlvbiBjNihlLHQsbixvKXtsZXQgYT1bXSxyPU9iamVjdC5rZXlzKGUpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgZj1lW3JbaV1dLmVkZ2VzO2k2KGEsZix0LG4sbyl9cmV0dXJuIGF9ZnVuY3Rpb24gczYoZSx0LG4sbyxhKXtpZighZyhlKXx8T2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MClyZXR1cm47bGV0IHI9bzYoZSx0LG4sbyk7KCFnKGEpfHxuLmxlbmd0aCozIT09YS5sZW5ndGgpJiYoYT1bXSk7bGV0IGk9YzYocixuLG8sYSk7cmV0dXJuIGkubGVuZ3RoPjA/bmV3IFVpbnQzMkFycmF5KGkpOnZvaWQgMH1mdW5jdGlvbiBmNihlKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KGUubGVuZ3RoKTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTQpdFtuXT1UbShldC5ieXRlVG9GbG9hdChlW25dKSksdFtuKzFdPVRtKGV0LmJ5dGVUb0Zsb2F0KGVbbisxXSkpLHRbbisyXT1UbShldC5ieXRlVG9GbG9hdChlW24rMl0pKSx0W24rM109ZXQuYnl0ZVRvRmxvYXQoZVtuKzNdKTtyZXR1cm4gdH1mdW5jdGlvbiBkNihlLHQsbixvLGEscixpKXtsZXQgZj17bm9ybWFsczp2b2lkIDAscG9zaXRpb25zOnZvaWQgMCx1djBzOnZvaWQgMCxjb2xvcnM6dm9pZCAwLGZlYXR1cmVJbmRleDp2b2lkIDAsdmVydGV4Q291bnQ6dm9pZCAwfTtpZihlPT09MHx8IWcobil8fG4ubGVuZ3RoPT09MHx8ZyhvKSlyZXR1cm4gZjtpZihnKHQpKXtmLnZlcnRleENvdW50PXQubGVuZ3RoLGYucG9zaXRpb25zPW5ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgqMyksZi51djBzPWcoYSk/bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCoyKTp2b2lkIDAsZi5jb2xvcnM9ZyhyKT9uZXcgVWludDhBcnJheSh0Lmxlbmd0aCo0KTp2b2lkIDAsZi5mZWF0dXJlSW5kZXg9ZyhpKT9uZXcgQXJyYXkodC5sZW5ndGgpOnZvaWQgMDtmb3IobGV0IGQ9MDtkPHQubGVuZ3RoO2QrKyl7bGV0IGM9dFtkXTtmLnBvc2l0aW9uc1tkKjNdPW5bYyozXSxmLnBvc2l0aW9uc1tkKjMrMV09bltjKjMrMV0sZi5wb3NpdGlvbnNbZCozKzJdPW5bYyozKzJdLGcoZi51djBzKSYmKGYudXYwc1tkKjJdPWFbYyoyXSxmLnV2MHNbZCoyKzFdPWFbYyoyKzFdKSxnKGYuY29sb3JzKSYmKGYuY29sb3JzW2QqNF09cltjKjRdLGYuY29sb3JzW2QqNCsxXT1yW2MqNCsxXSxmLmNvbG9yc1tkKjQrMl09cltjKjQrMl0sZi5jb2xvcnNbZCo0KzNdPXJbYyo0KzNdKSxnKGYuZmVhdHVyZUluZGV4KSYmKGYuZmVhdHVyZUluZGV4W2RdPWlbY10pfWU9dC5sZW5ndGgsbj1mLnBvc2l0aW9uc310PW5ldyBBcnJheShlKTtmb3IobGV0IGQ9MDtkPGU7ZCsrKXRbZF09ZDtmLm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCozKTtmb3IobGV0IGQ9MDtkPHQubGVuZ3RoO2QrPTMpajIoZi5ub3JtYWxzLGQsdCxuKTtyZXR1cm4gZn1mdW5jdGlvbiB1NihlLHQsbixvLGEscixpLGYpe2lmKGU9PT0wfHwhZyhuKXx8bi5sZW5ndGg9PT0wKXJldHVybntidWZmZXJzOltdLGJ1ZmZlclZpZXdzOltdLGFjY2Vzc29yczpbXSxtZXNoZXM6W10sbm9kZXM6W10sbm9kZXNJblNjZW5lOltdfTtsZXQgZD1bXSxjPVtdLHU9W10sbD1bXSxoPVtdLG09W10sYj17fSxwPVtdO2codCkmJihlPXQubGVuZ3RoKTtsZXR7aW5kZXhBcnJheTp5LHRyYW5zcGFyZW50VmVydGV4T2Zmc2V0OkV9PSQ0KGUsdCxyLGYuc3BsaXRHZW9tZXRyeUJ5Q29sb3JUcmFuc3BhcmVuY3kpLF89bmV3IEJsb2IoW3ldLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksVD1VUkwuY3JlYXRlT2JqZWN0VVJMKF8pLHc9ZSxSPWYuZW5hYmxlRmVhdHVyZXMmJmcoaSk/bmV3IEZsb2F0MzJBcnJheShpLmxlbmd0aCk6dm9pZCAwLFM9MDtpZihnKFIpKWZvcihsZXQgYWU9MDthZTxpLmxlbmd0aDsrK2FlKXtSW2FlXT1pW2FlXTtsZXQgUmU9aVthZV0rMTtTPFJlJiYoUz1SZSl9bGV0IEMsST1zNihmLnN5bWJvbG9neURhdGEsaSx5LG4sbyk7aWYoZyhJKSl7bGV0IGFlPW5ldyBCbG9iKFtJXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO0M9VVJMLmNyZWF0ZU9iamVjdFVSTChhZSl9bGV0IE49bi5zdWJhcnJheSgwLHcqMyksUD1uZXcgQmxvYihbTl0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KSx2PVVSTC5jcmVhdGVPYmplY3RVUkwoUCksQT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksVT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGxldCBhZT0wO2FlPE4ubGVuZ3RoLzM7YWUrKylBPU1hdGgubWluKEEsTlthZSozKzBdKSx4PU1hdGgubWF4KHgsTlthZSozKzBdKSxNPU1hdGgubWluKE0sTlthZSozKzFdKSxGPU1hdGgubWF4KEYsTlthZSozKzFdKSxVPU1hdGgubWluKFUsTlthZSozKzJdKSx6PU1hdGgubWF4KHosTlthZSozKzJdKTtsZXQgRD1vP28uc3ViYXJyYXkoMCx3KjMpOnZvaWQgMCxHO2lmKGcoRCkpe2xldCBhZT1uZXcgQmxvYihbRF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtHPVVSTC5jcmVhdGVPYmplY3RVUkwoYWUpfWxldCBIPWE/YS5zdWJhcnJheSgwLHcqMik6dm9pZCAwLE87aWYoZyhIKSl7bGV0IGFlPW5ldyBCbG9iKFtIXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO089VVJMLmNyZWF0ZU9iamVjdFVSTChhZSl9bGV0IFo9ZyhyKT9mNihyLnN1YmFycmF5KDAsdyo0KSk6dm9pZCAwLG9lO2lmKGcoWikpe2xldCBhZT1uZXcgQmxvYihbWl0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtvZT1VUkwuY3JlYXRlT2JqZWN0VVJMKGFlKX1sZXQgY2U9ZyhSKT9SLnN1YmFycmF5KDAsdyk6dm9pZCAwLGRlO2lmKGcoY2UpKXtsZXQgYWU9bmV3IEJsb2IoW2NlXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO2RlPVVSTC5jcmVhdGVPYmplY3RVUkwoYWUpfWxldCBlZT1nKFIpP25ldyBGbG9hdDMyQXJyYXkoUyk6dm9pZCAwLG1lO2lmKGcoZWUpKXtmb3IobGV0IFJlPTA7UmU8ZWUubGVuZ3RoOysrUmUpZWVbUmVdPVJlO2xldCBhZT1uZXcgQmxvYihbZWVdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7bWU9VVJMLmNyZWF0ZU9iamVjdFVSTChhZSl9bGV0IGxlPXt9LGJlPXt9O2xlLlBPU0lUSU9OPXUubGVuZ3RoLGQucHVzaCh7dXJpOnYsYnl0ZUxlbmd0aDpOLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOk4uYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50Ok4ubGVuZ3RoLzMsdHlwZToiVkVDMyIsbWluOltBLE0sVV0sbWF4Olt4LEYsel19KSxnKEcpJiYobGUuTk9STUFMPXUubGVuZ3RoLGQucHVzaCh7dXJpOkcsYnl0ZUxlbmd0aDpELmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkQubGVuZ3RoLzMsdHlwZToiVkVDMyJ9KSksZyhPKSYmKGxlLlRFWENPT1JEXzA9dS5sZW5ndGgsZC5wdXNoKHt1cmk6TyxieXRlTGVuZ3RoOkguYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6SC5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6SC5sZW5ndGgvMix0eXBlOiJWRUMyIn0pKSxnKG9lKSYmKGxlLkNPTE9SXzA9dS5sZW5ndGgsZC5wdXNoKHt1cmk6b2UsYnl0ZUxlbmd0aDpaLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOlouYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OloubGVuZ3RoLzQsdHlwZToiVkVDNCJ9KSksZyhkZSkmJihsZS5fRkVBVFVSRV9JRF8wPXUubGVuZ3RoLGQucHVzaCh7dXJpOmRlLGJ5dGVMZW5ndGg6Y2UuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Y2UuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OmNlLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksYmUuRVhUX21lc2hfZmVhdHVyZXM9e2ZlYXR1cmVJZHM6W3thdHRyaWJ1dGU6MCxwcm9wZXJ0eVRhYmxlOjAsZmVhdHVyZUNvdW50OlN9XX0scC5wdXNoKCJFWFRfbWVzaF9mZWF0dXJlcyIpKSxnKG1lKSYmKGQucHVzaCh7dXJpOm1lLGJ5dGVMZW5ndGg6ZWUuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6ZWUuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxiLkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhPXtzY2hlbWE6e2lkOiJpM3MtbWV0YWRhdGEtc2NoZW1hLTAwMSIsbmFtZToiSTNTIG1ldGFkYXRhIHNjaGVtYSAwMDEiLGRlc2NyaXB0aW9uOiJUaGUgc2NoZW1hIGZvciBJM1MgbWV0YWRhdGEiLHZlcnNpb246IjEuMCIsY2xhc3Nlczp7ZmVhdHVyZTp7bmFtZToiZmVhdHVyZSIsZGVzY3JpcHRpb246IkZlYXR1cmUgbWV0YWRhdGEiLHByb3BlcnRpZXM6e2luZGV4OntkZXNjcmlwdGlvbjoiVGhlIGZlYXR1cmUgaW5kZXgiLHR5cGU6IlNDQUxBUiIsY29tcG9uZW50VHlwZToiRkxPQVQzMiIscmVxdWlyZWQ6ITB9fX19fSxwcm9wZXJ0eVRhYmxlczpbe25hbWU6ImZlYXR1cmUtaW5kaWNlcy1tYXBwaW5nIixjbGFzczoiZmVhdHVyZSIsY291bnQ6Uyxwcm9wZXJ0aWVzOntpbmRleDp7dmFsdWVzOmMubGVuZ3RoLTF9fX1dfSxwLnB1c2goIkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhIikpLGcoQykmJihkLnB1c2goe3VyaTpDLGJ5dGVMZW5ndGg6SS5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpJLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDpJLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksYmUuQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lPXtpbmRpY2VzOnUubGVuZ3RoLTF9LHAucHVzaCgiQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lIikpLGQucHVzaCh7dXJpOlQsYnl0ZUxlbmd0aDp5LmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOnkuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KTtsZXQgZmU9W107cmV0dXJuIEU+MCYmKHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6RSx0eXBlOiJTQ0FMQVIifSksZmUucHVzaCh7YXR0cmlidXRlczpsZSxpbmRpY2VzOnUubGVuZ3RoLTEsbWF0ZXJpYWw6ZmUubGVuZ3RoLGV4dGVuc2lvbnM6YmV9KSksRTxlJiYodS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDo0KkUsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OmUtRSx0eXBlOiJTQ0FMQVIifSksZmUucHVzaCh7YXR0cmlidXRlczpsZSxpbmRpY2VzOnUubGVuZ3RoLTEsbWF0ZXJpYWw6ZmUubGVuZ3RoLGV4dGVuc2lvbnM6YmUsZXh0cmE6e2lzVHJhbnNwYXJlbnQ6ITB9fSkpLGwucHVzaCh7cHJpbWl0aXZlczpmZX0pLG0ucHVzaCgwKSxoLnB1c2goe21lc2g6MH0pLHtidWZmZXJzOmQsYnVmZmVyVmlld3M6YyxhY2Nlc3NvcnM6dSxtZXNoZXM6bCxub2RlczpoLG5vZGVzSW5TY2VuZTptLHJvb3RFeHRlbnNpb25zOmIsZXh0ZW5zaW9uc1VzZWQ6cH19ZnVuY3Rpb24gbDYoZSx0LG4sbyl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZSwwLDUpO3JldHVybiBhWzBdPT09NjgmJmFbMV09PT04MiYmYVsyXT09PTY1JiZhWzNdPT09NjcmJmFbNF09PT03OT9oNihlLG4pOmI2KGUsdCxuLG8pfWZ1bmN0aW9uIGg2KGUpe2xldCB0PWt5LG49bmV3IHQuRGVjb2RlckJ1ZmZlcixvPW5ldyBVaW50OEFycmF5KGUpO24uSW5pdChvLG8ubGVuZ3RoKTtsZXQgYT1uZXcgdC5EZWNvZGVyLHI9YS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pLGk9bmV3IHQuTWV0YWRhdGFRdWVyaWVyLGYsZDtyPT09dC5UUklBTkdVTEFSX01FU0gmJihmPW5ldyB0Lk1lc2gsZD1hLkRlY29kZUJ1ZmZlclRvTWVzaChuLGYpKTtsZXQgYz17dmVydGV4Q291bnQ6WzBdLGZlYXR1cmVDb3VudDowfTtpZihnKGQpJiZkLm9rKCkmJmYucHRyIT09MCl7bGV0IHU9Zi5udW1fZmFjZXMoKSxsPWYubnVtX2F0dHJpYnV0ZXMoKSxoPWYubnVtX3BvaW50cygpO2MuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodSozKTtsZXQgbT1jLmluZGljZXM7Yy52ZXJ0ZXhDb3VudFswXT1oLGMuc2NhbGVfeD0xLGMuc2NhbGVfeT0xO2xldCBiPW5ldyB0LkRyYWNvSW50MzJBcnJheSgzKTtmb3IobGV0IHA9MDtwPHU7KytwKWEuR2V0RmFjZUZyb21NZXNoKGYscCxiKSxtW3AqM109Yi5HZXRWYWx1ZSgwKSxtW3AqMysxXT1iLkdldFZhbHVlKDEpLG1bcCozKzJdPWIuR2V0VmFsdWUoMik7dC5kZXN0cm95KGIpO2ZvcihsZXQgcD0wO3A8bDsrK3Ape2xldCB5PWEuR2V0QXR0cmlidXRlKGYscCksRT1tNih0LGEsZix5LGgpLF89eS5hdHRyaWJ1dGVfdHlwZSgpLFQ9InVua25vd24iO189PT10LlBPU0lUSU9OP1Q9InBvc2l0aW9ucyI6Xz09PXQuTk9STUFMP1Q9Im5vcm1hbHMiOl89PT10LkNPTE9SP1Q9ImNvbG9ycyI6Xz09PXQuVEVYX0NPT1JEJiYoVD0idXYwcyIpO2xldCB3PWEuR2V0QXR0cmlidXRlTWV0YWRhdGEoZixwKTtpZih3LnB0ciE9PTApe2xldCBSPWkuTnVtRW50cmllcyh3KTtmb3IobGV0IFM9MDtTPFI7KytTKXtsZXQgQz1pLkdldEVudHJ5TmFtZSh3LFMpO0M9PT0iaTNzLXNjYWxlX3giP2Muc2NhbGVfeD1pLkdldERvdWJsZUVudHJ5KHcsImkzcy1zY2FsZV94Iik6Qz09PSJpM3Mtc2NhbGVfeSI/Yy5zY2FsZV95PWkuR2V0RG91YmxlRW50cnkodywiaTNzLXNjYWxlX3kiKTpDPT09Imkzcy1hdHRyaWJ1dGUtdHlwZSImJihUPWkuR2V0U3RyaW5nRW50cnkodywiaTNzLWF0dHJpYnV0ZS10eXBlIikpfX1nKGNbVF0pJiZjb25zb2xlLmxvZygiQXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIixUKSxjW1RdPUUsVD09PSJmZWF0dXJlLWluZGV4IiYmYy5mZWF0dXJlQ291bnQrK310LmRlc3Ryb3koZil9cmV0dXJuIHQuZGVzdHJveShpKSx0LmRlc3Ryb3koYSksY31mdW5jdGlvbiBtNihlLHQsbixvLGEpe2xldCByPW8ubnVtX2NvbXBvbmVudHMoKSphLGksZD1bZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDhBcnJheShyKSx0LkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEludDhBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBlLkRyYWNvSW50OEFycmF5KHIpLHQuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDE2QXJyYXkociksdC5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyhuLG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgSW50MTZBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBlLkRyYWNvSW50MTZBcnJheShyKSx0LkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhuLG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDE2QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb0ludDMyQXJyYXkociksdC5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyhuLG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgSW50MzJBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBlLkRyYWNvSW50MzJBcnJheShyKSx0LkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyhuLG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDMyQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtpPW5ldyBlLkRyYWNvRmxvYXQzMkFycmF5KHIpLHQuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHMobixvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEZsb2F0MzJBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7aT1uZXcgZS5EcmFjb1VJbnQ4QXJyYXkociksdC5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyhuLG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDhBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX1dW28uZGF0YV90eXBlKCldKCk7cmV0dXJuIGcoaSkmJmUuZGVzdHJveShpKSxkfWZ1bmN0aW9uIGI2KGUsdCxuLG8pe2xldCBhPXt2ZXJ0ZXhDb3VudDowfSxyPW5ldyBEYXRhVmlldyhlKTt0cnl7bGV0IGk9MDtpZihhLnZlcnRleENvdW50PXIuZ2V0VWludDMyKGksMSksaSs9NCxhLmZlYXR1cmVDb3VudD1yLmdldFVpbnQzMihpLDEpLGkrPTQsZyhuKSlmb3IobGV0IGY9MDtmPG4uYXR0cmlidXRlcy5sZW5ndGg7ZisrKWcoQ21bbi5hdHRyaWJ1dGVzW2ZdXSk/aT1DbVtuLmF0dHJpYnV0ZXNbZl1dKGEsZSxpKTpjb25zb2xlLmVycm9yKCJVbmtub3duIGRlY29kZXIgZm9yIixuLmF0dHJpYnV0ZXNbZl0pO2Vsc2V7bGV0IGY9dC5vcmRlcmluZyxkPXQuZmVhdHVyZUF0dHJpYnV0ZU9yZGVyO2cobykmJmcoby5nZW9tZXRyeURhdGEpJiZnKG8uZ2VvbWV0cnlEYXRhWzBdKSYmZyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMpJiYoZj1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMudmVydGV4QXR0cmlidXRlcyksZD1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMuZmVhdHVyZUF0dHJpYnV0ZXMpKTtmb3IobGV0IGM9MDtjPGYubGVuZ3RoO2MrKyl7bGV0IHU9Q21bZltjXV07aT11KGEsZSxpKX1mb3IobGV0IGM9MDtjPGQubGVuZ3RoO2MrKyl7bGV0IHU9Q21bZFtjXV07aT11KGEsZSxpKX19fWNhdGNoKGkpe2NvbnNvbGUuZXJyb3IoaSl9cmV0dXJuIGEuc2NhbGVfeD0xLGEuc2NhbGVfeT0xLGF9ZnVuY3Rpb24gcDYoZSl7bGV0IHQ9bDYoZS5iaW5hcnlEYXRhLGUuc2NoZW1hLGUuYnVmZmVySW5mbyxlLmZlYXR1cmVEYXRhKTtnKGUuZ2VvaWREYXRhTGlzdCkmJmUuZ2VvaWREYXRhTGlzdC5sZW5ndGg+MCYmSjQodC52ZXJ0ZXhDb3VudCx0LnBvc2l0aW9ucyx0LnNjYWxlX3gsdC5zY2FsZV95LGUuY2FydG9ncmFwaGljQ2VudGVyLGUuZ2VvaWREYXRhTGlzdCwhMSksWjQodC52ZXJ0ZXhDb3VudCx0LnBvc2l0aW9ucyx0Lm5vcm1hbHMsZS5jYXJ0b2dyYXBoaWNDZW50ZXIsZS5jYXJ0ZXNpYW5DZW50ZXIsZS5wYXJlbnRSb3RhdGlvbixlLmVsbGlwc29pZFJhZGlpU3F1YXJlLHQuc2NhbGVfeCx0LnNjYWxlX3kpLGcodC51djBzKSYmZyh0WyJ1di1yZWdpb24iXSkmJlE0KHQudmVydGV4Q291bnQsdC51djBzLHRbInV2LXJlZ2lvbiJdKTtsZXQgbjtpZihnKHRbImZlYXR1cmUtaW5kZXgiXSkpbj10WyJmZWF0dXJlLWluZGV4Il07ZWxzZSBpZihnKHQuZmFjZVJhbmdlKSl7bj1uZXcgQXJyYXkodC52ZXJ0ZXhDb3VudCk7Zm9yKGxldCBpPTA7aTx0LmZhY2VSYW5nZS5sZW5ndGgtMTtpKz0yKXtsZXQgZj1pLzIsZD10LmZhY2VSYW5nZVtpXSxjPXQuZmFjZVJhbmdlW2krMV07Zm9yKGxldCB1PWQ7dTw9Yzt1Kyspblt1KjNdPWYsblt1KjMrMV09ZixuW3UqMysyXT1mfX1pZihlLmNhbGN1bGF0ZU5vcm1hbHMpe2xldCBpPWQ2KHQudmVydGV4Q291bnQsdC5pbmRpY2VzLHQucG9zaXRpb25zLHQubm9ybWFscyx0LnV2MHMsdC5jb2xvcnMsbik7ZyhpLm5vcm1hbHMpJiYodC5ub3JtYWxzPWkubm9ybWFscyxnKGkudmVydGV4Q291bnQpJiYodC52ZXJ0ZXhDb3VudD1pLnZlcnRleENvdW50LHQuaW5kaWNlcz1pLmluZGljZXMsdC5wb3NpdGlvbnM9aS5wb3NpdGlvbnMsdC51djBzPWkudXYwcyx0LmNvbG9ycz1pLmNvbG9ycyxuPWkuZmVhdHVyZUluZGV4KSl9bGV0IG89dTYodC52ZXJ0ZXhDb3VudCx0LmluZGljZXMsdC5wb3NpdGlvbnMsdC5ub3JtYWxzLHQudXYwcyx0LmNvbG9ycyxuLGUpLGE9e3Bvc2l0aW9uczp0LnBvc2l0aW9ucyxpbmRpY2VzOnQuaW5kaWNlcyxmZWF0dXJlSW5kZXg6bixzb3VyY2VVUkw6ZS51cmwsY2FydGVzaWFuQ2VudGVyOmUuY2FydGVzaWFuQ2VudGVyLHBhcmVudFJvdGF0aW9uOmUucGFyZW50Um90YXRpb259O3JldHVybiBvLl9jdXN0b21BdHRyaWJ1dGVzPWEse21lc2hEYXRhOm99fWFzeW5jIGZ1bmN0aW9uIGc2KGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyhuKSYmZyhuLndhc21CaW5hcnlGaWxlKT9reT1hd2FpdCgwLFB5LmRlZmF1bHQpKG4pOmt5PWF3YWl0KDAsUHkuZGVmYXVsdCkoKSwhMH1mdW5jdGlvbiBfNihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcobik/ZzYoZSx0KTpwNihlLHQpfXZhciBQeSxreSxPcix4bSxPbSxTbSxJeSxDbSx5NixGeT1YKCgpPT57VW4oKTtzZSgpO3lpKCk7cWUoKTtFdCgpO0llKCk7a3MoKTtEbigpO0dlKCk7UHk9Y2EoZHkoKSwxKTtVMigpO09yPW5ldyBzLHhtPW5ldyBzLE9tPW5ldyBzO1NtPW5ldyBzLEl5PW5ldyBzO0NtPXtwb3NpdGlvbjpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS52ZXJ0ZXhDb3VudCozO3JldHVybiBlLnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KHQsbixvKSxuKz1vKjQsbn0sbm9ybWFsOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLnZlcnRleENvdW50KjM7cmV0dXJuIGUubm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KHQsbixvKSxuKz1vKjQsbn0sdXYwOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLnZlcnRleENvdW50KjI7cmV0dXJuIGUudXYwcz1uZXcgRmxvYXQzMkFycmF5KHQsbixvKSxuKz1vKjQsbn0sY29sb3I6ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUudmVydGV4Q291bnQqNDtyZXR1cm4gZS5jb2xvcnM9bmV3IFVpbnQ4QXJyYXkodCxuLG8pLG4rPW8sbn0sZmVhdHVyZUlkOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGlkOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGZhY2VSYW5nZTpmdW5jdGlvbihlLHQsbil7bGV0IG89ZS5mZWF0dXJlQ291bnQqMjtyZXR1cm4gZS5mYWNlUmFuZ2U9bmV3IFVpbnQzMkFycmF5KHQsbixvKSxuKz1vKjQsbn0sdXZSZWdpb246ZnVuY3Rpb24oZSx0LG4pe2xldCBvPWUudmVydGV4Q291bnQqNDtyZXR1cm4gZVsidXYtcmVnaW9uIl09bmV3IFVpbnQxNkFycmF5KHQsbixvKSxuKz1vKjIsbn0scmVnaW9uOmZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1lLnZlcnRleENvdW50KjQ7cmV0dXJuIGVbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheSh0LG4sbyksbis9byoyLG59fTt5Nj1BdChfNil9KTtmdW5jdGlvbiBBNigpe3JldHVybihPZD09PW51bGx8fE9kLmJ5dGVMZW5ndGg9PT0wKSYmKE9kPW5ldyBVaW50OEFycmF5KEduLm1lbW9yeS5idWZmZXIpKSxPZH1mdW5jdGlvbiB6MihlLHQpe3JldHVybiBlPWU+Pj4wLFYyLmRlY29kZShBNigpLnN1YmFycmF5KGUsZSt0KSl9ZnVuY3Rpb24gSDIoKXtyZXR1cm4oU2Q9PT1udWxsfHxTZC5ieXRlTGVuZ3RoPT09MCkmJihTZD1uZXcgVWludDMyQXJyYXkoR24ubWVtb3J5LmJ1ZmZlcikpLFNkfWZ1bmN0aW9uIHc2KGUsdCl7cmV0dXJuIGU9ZT4+PjAsSDIoKS5zdWJhcnJheShlLzQsZS80K3QpfWZ1bmN0aW9uIEU2KGUsdCl7bGV0IG49dChlLmxlbmd0aCo0LDQpPj4+MDtyZXR1cm4gSDIoKS5zZXQoZSxuLzQpLEsyPWUubGVuZ3RoLG59ZnVuY3Rpb24gRHkoZSl7bGV0IHQ9R24uX193YmluZGdlbl9leHBvcnRfMC5nZXQoZSk7cmV0dXJuIEduLl9fZXh0ZXJucmVmX3RhYmxlX2RlYWxsb2MoZSksdH1mdW5jdGlvbiBxMihlLHQsbixvLGEpe2xldCByPUduLmdlbmVyYXRlX3NwbGF0X3RleHR1cmUoZSx0LG4sbyxhKTtpZihyWzJdKXRocm93IER5KHJbMV0pO3JldHVybiBCeS5fX3dyYXAoclswXSl9ZnVuY3Rpb24gVzIoZSx0LG4pe2xldCBvPUduLnJhZGl4X3NvcnRfZ2F1c3NpYW5zX2luZGV4ZXMoZSx0LG4pO2lmKG9bMl0pdGhyb3cgRHkob1sxXSk7cmV0dXJuIER5KG9bMF0pfWFzeW5jIGZ1bmN0aW9uIFQ2KGUsdCl7aWYodHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iJiZlIGluc3RhbmNlb2YgUmVzcG9uc2Upe2lmKHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZz09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGUsdCl9Y2F0Y2gobyl7aWYoZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikhPSJhcHBsaWNhdGlvbi93YXNtIiljb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLG8pO2Vsc2UgdGhyb3cgb31sZXQgbj1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4sdCl9ZWxzZXtsZXQgbj1hd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShlLHQpO3JldHVybiBuIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2U/e2luc3RhbmNlOm4sbW9kdWxlOmV9Om59fWZ1bmN0aW9uIFgyKCl7bGV0IGU9e307cmV0dXJuIGUud2JnPXt9LGUud2JnLl9fd2JnX2J1ZmZlcl82MDljYzNlZWU1MWVkMTU4PWZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1ZmZlcn0sZS53YmcuX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjY9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxlLndiZy5fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOD1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LGUud2JnLl9fd2JnX25ld183ODBhYmVlNWMxNzM5ZmQ3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KHQpfSxlLndiZy5fX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9LGUud2JnLl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkodCl9LGUud2JnLl9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2YxZGVhZDQ0ZDFmYzcyMTI9ZnVuY3Rpb24odCxuLG8pe3JldHVybiBuZXcgVWludDMyQXJyYXkodCxuPj4+MCxvPj4+MCl9LGUud2JnLl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiPWZ1bmN0aW9uKHQsbixvKXt0LnNldChuLG8+Pj4wKX0sZS53YmcuX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDk9ZnVuY3Rpb24odCxuLG8pe3Quc2V0KG4sbz4+PjApfSxlLndiZy5fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlPWZ1bmN0aW9uKCl7bGV0IHQ9R24uX193YmluZGdlbl9leHBvcnRfMCxuPXQuZ3Jvdyg0KTt0LnNldCgwLHZvaWQgMCksdC5zZXQobiswLHZvaWQgMCksdC5zZXQobisxLG51bGwpLHQuc2V0KG4rMiwhMCksdC5zZXQobiszLCExKX0sZS53YmcuX193YmluZGdlbl9tZW1vcnk9ZnVuY3Rpb24oKXtyZXR1cm4gR24ubWVtb3J5fSxlLndiZy5fX3diaW5kZ2VuX3N0cmluZ19uZXc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gejIodCxuKX0sZS53YmcuX193YmluZGdlbl90aHJvdz1mdW5jdGlvbih0LG4pe3Rocm93IG5ldyBFcnJvcih6Mih0LG4pKX0sZX1mdW5jdGlvbiBZMihlLHQpe3JldHVybiBHbj1lLmV4cG9ydHMsUjYuX193YmluZGdlbl93YXNtX21vZHVsZT10LFNkPW51bGwsT2Q9bnVsbCxHbi5fX3diaW5kZ2VuX3N0YXJ0KCksR259ZnVuY3Rpb24gTW0oZSl7aWYoR24hPT12b2lkIDApcmV0dXJuIEduO3R5cGVvZiBlPCJ1IiYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGU/e21vZHVsZTplfT1lOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7bGV0IHQ9WDIoKTtlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlfHwoZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGUpKTtsZXQgbj1uZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UoZSx0KTtyZXR1cm4gWTIobixlKX1hc3luYyBmdW5jdGlvbiBSNihlKXtpZihHbiE9PXZvaWQgMClyZXR1cm4gR247dHlwZW9mIGU8InUiJiYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LnByb3RvdHlwZT97bW9kdWxlX29yX3BhdGg6ZX09ZTpjb25zb2xlLndhcm4oInVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVycyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uOyBwYXNzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIikpLHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgid2FzbV9zcGxhdHNfYmcud2FzbSIseDYudXJsKSk7bGV0IHQ9WDIoKTsodHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIFJlcXVlc3R8fHR5cGVvZiBVUkw9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBVUkwpJiYoZT1mZXRjaChlKSk7bGV0e2luc3RhbmNlOm4sbW9kdWxlOm99PWF3YWl0IFQ2KGF3YWl0IGUsdCk7cmV0dXJuIFkyKG4sbyl9dmFyIHg2LEduLFYyLE9kLFNkLEsyLEcyLEJ5LFV5PVgoKCk9Pnt4Nj17fSxWMj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KTp7ZGVjb2RlOigpPT57dGhyb3cgRXJyb3IoIlRleHREZWNvZGVyIG5vdCBhdmFpbGFibGUiKX19O3R5cGVvZiBUZXh0RGVjb2RlcjwidSImJlYyLmRlY29kZSgpO09kPW51bGw7U2Q9bnVsbDtLMj0wO0cyPXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KGU9PkduLl9fd2JnX3RleHR1cmVkYXRhX2ZyZWUoZT4+PjAsMSkpLEJ5PWNsYXNzIGV7c3RhdGljIF9fd3JhcCh0KXt0PXQ+Pj4wO2xldCBuPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO3JldHVybiBuLl9fd2JnX3B0cj10LEcyLnJlZ2lzdGVyKG4sbi5fX3diZ19wdHIsbiksbn1fX2Rlc3Ryb3lfaW50b19yYXcoKXtsZXQgdD10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxHMi51bnJlZ2lzdGVyKHRoaXMpLHR9ZnJlZSgpe2xldCB0PXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7R24uX193YmdfdGV4dHVyZWRhdGFfZnJlZSh0LDApfWdldCBkYXRhKCl7bGV0IHQ9R24udGV4dHVyZWRhdGFfZGF0YSh0aGlzLl9fd2JnX3B0cik7dmFyIG49dzYodFswXSx0WzFdKS5zbGljZSgpO3JldHVybiBHbi5fX3diaW5kZ2VuX2ZyZWUodFswXSx0WzFdKjQsNCksbn1nZXQgd2lkdGgoKXtyZXR1cm4gR24udGV4dHVyZWRhdGFfd2lkdGgodGhpcy5fX3diZ19wdHIpPj4+MH1nZXQgaGVpZ2h0KCl7cmV0dXJuIEduLnRleHR1cmVkYXRhX2hlaWdodCh0aGlzLl9fd2JnX3B0cik+Pj4wfXN0YXRpYyBuZXcodCxuLG8pe2xldCBhPUU2KHQsR24uX193YmluZGdlbl9tYWxsb2MpLHI9SzIsaT1Hbi50ZXh0dXJlZGF0YV9uZXcoYSxyLG4sbyk7cmV0dXJuIGUuX193cmFwKGkpfX19KTt2YXIgTHk9e307cnQoTHkse2RlZmF1bHQ6KCk9PkM2fSk7YXN5bmMgZnVuY3Rpb24gTzYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO2lmKGcobikmJmcobi53YXNtQmluYXJ5KSlyZXR1cm4gTW0oe21vZHVsZTpuLndhc21CaW5hcnl9KSwhMH1mdW5jdGlvbiBTNihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7aWYoZyhuKSlyZXR1cm4gTzYoZSx0KTtsZXR7cHJpbWl0aXZlOm8sc29ydFR5cGU6YX09ZTtpZihhPT09IkluZGV4IilyZXR1cm4gVzIoby5wb3NpdGlvbnMsby5tb2RlbFZpZXcsby5jb3VudCl9dmFyIEM2LGp5PVgoKCk9PntVbigpO3NlKCk7VXkoKTtDNj1BdChTNil9KTt2YXIgenk9e307cnQoenkse2RlZmF1bHQ6KCk9Pkk2fSk7YXN5bmMgZnVuY3Rpb24gTTYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBnKG4pJiZnKG4ud2FzbUJpbmFyeSk/KE1tKHttb2R1bGU6bi53YXNtQmluYXJ5fSksITApOiExfWFzeW5jIGZ1bmN0aW9uIE42KGUsdCl7bGV0IG49ZS53ZWJBc3NlbWJseUNvbmZpZztpZihnKG4pKXJldHVybiBNNihlLHQpO2xldHthdHRyaWJ1dGVzOm8sY291bnQ6YX09ZSxyPXEyKG8ucG9zaXRpb25zLG8uc2NhbGVzLG8ucm90YXRpb25zLG8uY29sb3JzLGEpO3JldHVybntkYXRhOnIuZGF0YSx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19dmFyIEk2LEd5PVgoKCk9PntVbigpO3NlKCk7VXkoKTtJNj1BdChONil9KTt2YXIgVnk9e307cnQoVnkse2RlZmF1bHQ6KCk9PkI2fSk7ZnVuY3Rpb24gRjYoZSx0KXtsZXQgbj1uZXcgRmxvYXQ2NEFycmF5KGUuYWFiYnMpLG89QXJyYXkuZnJvbSh7bGVuZ3RoOjR9LCh1LGwpPT57bGV0IGg9cy51bnBhY2sobixsKjYsUDYpLG09cy51bnBhY2sobixsKjYrMyxrNik7cmV0dXJuIHVvLmZyb21Db3JuZXJzKGgsbSxuZXcgdW8pfSksYT1uZXcgRmxvYXQ2NEFycmF5KGUuaW52ZXJzZVRyYW5zZm9ybSkscj0kLnVucGFjayhhLDAsbmV3ICQpLGk9bmV3IFVpbnQzMkFycmF5KGUudHJpYW5nbGVJbmRpY2VzKSxmPW5ldyBGbG9hdDY0QXJyYXkoZS50cmlhbmdsZVBvc2l0aW9ucyksZD1BcnJheS5mcm9tKHtsZW5ndGg6NH0sKCk9PltdKTtmb3IobGV0IHU9MDt1PGkubGVuZ3RoO3UrKyl7cy51bnBhY2soZix1KjksTm1bMF0pLHMudW5wYWNrKGYsdSo5KzMsTm1bMV0pLHMudW5wYWNrKGYsdSo5KzYsTm1bMl0pO2xldCBsPUQ2KHIsTm0pO2ZvcihsZXQgaD0wO2g8NDtoKyspb1toXS5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94KGwpJiZkW2hdLnB1c2goaVt1XSl9cmV0dXJue2ludGVyc2VjdGluZ1RyaWFuZ2xlc0FycmF5czpkLm1hcCh1PT57bGV0IGw9bmV3IFVpbnQzMkFycmF5KHUpO3JldHVybiB0LnB1c2gobC5idWZmZXIpLGwuYnVmZmVyfSl9fWZ1bmN0aW9uIEQ2KGUsdCl7JC5tdWx0aXBseUJ5UG9pbnQoZSx0WzBdLHRbMF0pLCQubXVsdGlwbHlCeVBvaW50KGUsdFsxXSx0WzFdKSwkLm11bHRpcGx5QnlQb2ludChlLHRbMl0sdFsyXSk7bGV0IG49dW8uZnJvbVBvaW50cyh0LHY2KTtyZXR1cm4gcy5jbGFtcChuLm1pbmltdW0sWjIsSjIsbi5taW5pbXVtKSxzLmNsYW1wKG4ubWF4aW11bSxaMixKMixuLm1heGltdW0pLG59dmFyIFA2LGs2LE5tLHY2LEoyLFoyLEI2LEh5PVgoKCk9PntVbigpO3BuKCk7SWUoKTtBaSgpO1A2PW5ldyBzLGs2PW5ldyBzLE5tPVtuZXcgcyxuZXcgcyxuZXcgc10sdjY9bmV3IHVvLEoyPW5ldyBzKC41LC41LC41KSxaMj1uZXcgcygtLjUsLS41LC0uNSk7QjY9QXQoRjYpfSk7dmFyIFR0LGxvLEt5PVgoKCk9PntvYygpO1R0PXtVTlNJR05FRF9CWVRFOlBlLlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6UGUuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOlBlLlVOU0lHTkVEX0lOVCxGTE9BVDpQZS5GTE9BVCxIQUxGX0ZMT0FUOlBlLkhBTEZfRkxPQVRfT0VTLFVOU0lHTkVEX0lOVF8yNF84OlBlLlVOU0lHTkVEX0lOVF8yNF84LFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6UGUuVU5TSUdORURfU0hPUlRfNF80XzRfNCxVTlNJR05FRF9TSE9SVF81XzVfNV8xOlBlLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsVU5TSUdORURfU0hPUlRfNV82XzU6UGUuVU5TSUdORURfU0hPUlRfNV82XzV9O1R0LnRvV2ViR0xDb25zdGFudD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlIFR0LlVOU0lHTkVEX0JZVEU6cmV0dXJuIFBlLlVOU0lHTkVEX0JZVEU7Y2FzZSBUdC5VTlNJR05FRF9TSE9SVDpyZXR1cm4gUGUuVU5TSUdORURfU0hPUlQ7Y2FzZSBUdC5VTlNJR05FRF9JTlQ6cmV0dXJuIFBlLlVOU0lHTkVEX0lOVDtjYXNlIFR0LkZMT0FUOnJldHVybiBQZS5GTE9BVDtjYXNlIFR0LkhBTEZfRkxPQVQ6cmV0dXJuIHQud2ViZ2wyP1BlLkhBTEZfRkxPQVQ6UGUuSEFMRl9GTE9BVF9PRVM7Y2FzZSBUdC5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gUGUuVU5TSUdORURfSU5UXzI0Xzg7Y2FzZSBUdC5VTlNJR05FRF9TSE9SVF80XzRfNF80OnJldHVybiBQZS5VTlNJR05FRF9TSE9SVF80XzRfNF80O2Nhc2UgVHQuVU5TSUdORURfU0hPUlRfNV81XzVfMTpyZXR1cm4gUGUuVU5TSUdORURfU0hPUlRfNV81XzVfMTtjYXNlIFR0LlVOU0lHTkVEX1NIT1JUXzVfNl81OnJldHVybiBUdC5VTlNJR05FRF9TSE9SVF81XzZfNX19O1R0LmlzUGFja2VkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09VHQuVU5TSUdORURfSU5UXzI0Xzh8fGU9PT1UdC5VTlNJR05FRF9TSE9SVF80XzRfNF80fHxlPT09VHQuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8ZT09PVR0LlVOU0lHTkVEX1NIT1JUXzVfNl81fTtUdC5zaXplSW5CeXRlcz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBUdC5VTlNJR05FRF9CWVRFOnJldHVybiAxO2Nhc2UgVHQuVU5TSUdORURfU0hPUlQ6Y2FzZSBUdC5VTlNJR05FRF9TSE9SVF80XzRfNF80OmNhc2UgVHQuVU5TSUdORURfU0hPUlRfNV81XzVfMTpjYXNlIFR0LlVOU0lHTkVEX1NIT1JUXzVfNl81OmNhc2UgVHQuSEFMRl9GTE9BVDpyZXR1cm4gMjtjYXNlIFR0LlVOU0lHTkVEX0lOVDpjYXNlIFR0LkZMT0FUOmNhc2UgVHQuVU5TSUdORURfSU5UXzI0Xzg6cmV0dXJuIDR9fTtUdC52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PVR0LlVOU0lHTkVEX0JZVEV8fGU9PT1UdC5VTlNJR05FRF9TSE9SVHx8ZT09PVR0LlVOU0lHTkVEX0lOVHx8ZT09PVR0LkZMT0FUfHxlPT09VHQuSEFMRl9GTE9BVHx8ZT09PVR0LlVOU0lHTkVEX0lOVF8yNF84fHxlPT09VHQuVU5TSUdORURfU0hPUlRfNF80XzRfNHx8ZT09PVR0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzF8fGU9PT1UdC5VTlNJR05FRF9TSE9SVF81XzZfNX07VHQuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe2xldCB0PVR0LnNpemVJbkJ5dGVzKGUpO3JldHVybiB0PT09VWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50OEFycmF5OnQ9PT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50MTZBcnJheTp0PT09RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UJiZlPT09VHQuRkxPQVQ/RmxvYXQzMkFycmF5OlVpbnQzMkFycmF5fTtsbz1PYmplY3QuZnJlZXplKFR0KX0pO3ZhciBwZSxYbixRMj1YKCgpPT57S3koKTtvYygpO3BlPXtERVBUSF9DT01QT05FTlQ6UGUuREVQVEhfQ09NUE9ORU5ULERFUFRIX1NURU5DSUw6UGUuREVQVEhfU1RFTkNJTCxBTFBIQTpQZS5BTFBIQSxSRUQ6UGUuUkVELFJHOlBlLlJHLFJHQjpQZS5SR0IsUkdCQTpQZS5SR0JBLFJFRF9JTlRFR0VSOlBlLlJFRF9JTlRFR0VSLFJHX0lOVEVHRVI6UGUuUkdfSU5URUdFUixSR0JfSU5URUdFUjpQZS5SR0JfSU5URUdFUixSR0JBX0lOVEVHRVI6UGUuUkdCQV9JTlRFR0VSLExVTUlOQU5DRTpQZS5MVU1JTkFOQ0UsTFVNSU5BTkNFX0FMUEhBOlBlLkxVTUlOQU5DRV9BTFBIQSxSR0JfRFhUMTpQZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFJHQkFfRFhUMTpQZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCxSR0JBX0RYVDM6UGUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQsUkdCQV9EWFQ1OlBlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhULFJHQl9QVlJUQ180QlBQVjE6UGUuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyxSR0JfUFZSVENfMkJQUFYxOlBlLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9QVlJUQ180QlBQVjE6UGUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsUkdCQV9QVlJUQ18yQlBQVjE6UGUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9BU1RDOlBlLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTCxSR0JfRVRDMTpQZS5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMLFJHQjhfRVRDMjpQZS5DT01QUkVTU0VEX1JHQjhfRVRDMixSR0JBOF9FVEMyX0VBQzpQZS5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLFJHQkFfQkM3OlBlLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNfTtwZS5jb21wb25lbnRzTGVuZ3RoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIHBlLlJHQjpjYXNlIHBlLlJHQl9JTlRFR0VSOnJldHVybiAzO2Nhc2UgcGUuUkdCQTpjYXNlIHBlLlJHQkFfSU5URUdFUjpyZXR1cm4gNDtjYXNlIHBlLkxVTUlOQU5DRV9BTFBIQTpjYXNlIHBlLlJHOmNhc2UgcGUuUkdfSU5URUdFUjpyZXR1cm4gMjtjYXNlIHBlLkFMUEhBOmNhc2UgcGUuUkVEOmNhc2UgcGUuUkVEX0lOVEVHRVI6Y2FzZSBwZS5MVU1JTkFOQ0U6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMX19O3BlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09cGUuREVQVEhfQ09NUE9ORU5UfHxlPT09cGUuREVQVEhfU1RFTkNJTHx8ZT09PXBlLkFMUEhBfHxlPT09cGUuUkVEfHxlPT09cGUuUkd8fGU9PT1wZS5SR0J8fGU9PT1wZS5SR0JBfHxlPT09cGUuUkVEX0lOVEVHRVJ8fGU9PT1wZS5SR19JTlRFR0VSfHxlPT09cGUuUkdCX0lOVEVHRVJ8fGU9PT1wZS5SR0JBX0lOVEVHRVJ8fGU9PT1wZS5MVU1JTkFOQ0V8fGU9PT1wZS5MVU1JTkFOQ0VfQUxQSEF8fGU9PT1wZS5SR0JfRFhUMXx8ZT09PXBlLlJHQkFfRFhUMXx8ZT09PXBlLlJHQkFfRFhUM3x8ZT09PXBlLlJHQkFfRFhUNXx8ZT09PXBlLlJHQl9QVlJUQ180QlBQVjF8fGU9PT1wZS5SR0JfUFZSVENfMkJQUFYxfHxlPT09cGUuUkdCQV9QVlJUQ180QlBQVjF8fGU9PT1wZS5SR0JBX1BWUlRDXzJCUFBWMXx8ZT09PXBlLlJHQkFfQVNUQ3x8ZT09PXBlLlJHQl9FVEMxfHxlPT09cGUuUkdCOF9FVEMyfHxlPT09cGUuUkdCQThfRVRDMl9FQUN8fGU9PT1wZS5SR0JBX0JDN307cGUuaXNDb2xvckZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXBlLlJFRHx8ZT09PXBlLkFMUEhBfHxlPT09cGUuUkdCfHxlPT09cGUuUkdCQXx8ZT09PXBlLkxVTUlOQU5DRXx8ZT09PXBlLkxVTUlOQU5DRV9BTFBIQX07cGUuaXNEZXB0aEZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXBlLkRFUFRIX0NPTVBPTkVOVHx8ZT09PXBlLkRFUFRIX1NURU5DSUx9O3BlLmlzQ29tcHJlc3NlZEZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXBlLlJHQl9EWFQxfHxlPT09cGUuUkdCQV9EWFQxfHxlPT09cGUuUkdCQV9EWFQzfHxlPT09cGUuUkdCQV9EWFQ1fHxlPT09cGUuUkdCX1BWUlRDXzRCUFBWMXx8ZT09PXBlLlJHQl9QVlJUQ18yQlBQVjF8fGU9PT1wZS5SR0JBX1BWUlRDXzRCUFBWMXx8ZT09PXBlLlJHQkFfUFZSVENfMkJQUFYxfHxlPT09cGUuUkdCQV9BU1RDfHxlPT09cGUuUkdCX0VUQzF8fGU9PT1wZS5SR0I4X0VUQzJ8fGU9PT1wZS5SR0JBOF9FVEMyX0VBQ3x8ZT09PXBlLlJHQkFfQkM3fTtwZS5pc0RYVEZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXBlLlJHQl9EWFQxfHxlPT09cGUuUkdCQV9EWFQxfHxlPT09cGUuUkdCQV9EWFQzfHxlPT09cGUuUkdCQV9EWFQ1fTtwZS5pc1BWUlRDRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09cGUuUkdCX1BWUlRDXzRCUFBWMXx8ZT09PXBlLlJHQl9QVlJUQ18yQlBQVjF8fGU9PT1wZS5SR0JBX1BWUlRDXzRCUFBWMXx8ZT09PXBlLlJHQkFfUFZSVENfMkJQUFYxfTtwZS5pc0FTVENGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wZS5SR0JBX0FTVEN9O3BlLmlzRVRDMUZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXBlLlJHQl9FVEMxfTtwZS5pc0VUQzJGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wZS5SR0I4X0VUQzJ8fGU9PT1wZS5SR0JBOF9FVEMyX0VBQ307cGUuaXNCQzdGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wZS5SR0JBX0JDN307cGUuY29tcHJlc3NlZFRleHR1cmVTaXplSW5CeXRlcz1mdW5jdGlvbihlLHQsbil7c3dpdGNoKGUpe2Nhc2UgcGUuUkdCX0RYVDE6Y2FzZSBwZS5SR0JBX0RYVDE6Y2FzZSBwZS5SR0JfRVRDMTpjYXNlIHBlLlJHQjhfRVRDMjpyZXR1cm4gTWF0aC5mbG9vcigodCszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjg7Y2FzZSBwZS5SR0JBX0RYVDM6Y2FzZSBwZS5SR0JBX0RYVDU6Y2FzZSBwZS5SR0JBX0FTVEM6Y2FzZSBwZS5SR0JBOF9FVEMyX0VBQzpyZXR1cm4gTWF0aC5mbG9vcigodCszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjE2O2Nhc2UgcGUuUkdCX1BWUlRDXzRCUFBWMTpjYXNlIHBlLlJHQkFfUFZSVENfNEJQUFYxOnJldHVybiBNYXRoLmZsb29yKChNYXRoLm1heCh0LDgpKk1hdGgubWF4KG4sOCkqNCs3KS84KTtjYXNlIHBlLlJHQl9QVlJUQ18yQlBQVjE6Y2FzZSBwZS5SR0JBX1BWUlRDXzJCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgodCwxNikqTWF0aC5tYXgobiw4KSoyKzcpLzgpO2Nhc2UgcGUuUkdCQV9CQzc6cmV0dXJuIE1hdGguY2VpbCh0LzQpKk1hdGguY2VpbChuLzQpKjE2O2RlZmF1bHQ6cmV0dXJuIDB9fTtwZS50ZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9cGUuY29tcG9uZW50c0xlbmd0aChlKTtyZXR1cm4gbG8uaXNQYWNrZWQodCkmJihhPTEpLGEqbG8uc2l6ZUluQnl0ZXModCkqbipvfTtwZS50ZXh0dXJlM0RTaXplSW5CeXRlcz1mdW5jdGlvbihlLHQsbixvLGEpe2xldCByPXBlLmNvbXBvbmVudHNMZW5ndGgoZSk7cmV0dXJuIGxvLmlzUGFja2VkKHQpJiYocj0xKSxyKmxvLnNpemVJbkJ5dGVzKHQpKm4qbyphfTtwZS5hbGlnbm1lbnRJbkJ5dGVzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgbz1wZS50ZXh0dXJlU2l6ZUluQnl0ZXMoZSx0LG4sMSklNDtyZXR1cm4gbz09PTA/NDpvPT09Mj8yOjF9O3BlLmNyZWF0ZVR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGE9bG8uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKHQpLHI9cGUuY29tcG9uZW50c0xlbmd0aChlKSpuKm87cmV0dXJuIG5ldyBhKHIpfTtwZS5mbGlwWT1mdW5jdGlvbihlLHQsbixvLGEpe2lmKGE9PT0xKXJldHVybiBlO2xldCByPXBlLmNyZWF0ZVR5cGVkQXJyYXkodCxuLG8sYSksaT1wZS5jb21wb25lbnRzTGVuZ3RoKHQpLGY9byppO2ZvcihsZXQgZD0wO2Q8YTsrK2Qpe2xldCBjPWQqbyppLHU9KGEtZC0xKSpvKmk7Zm9yKGxldCBsPTA7bDxmOysrbClyW3UrbF09ZVtjK2xdfXJldHVybiByfTtwZS50b0ludGVybmFsRm9ybWF0PWZ1bmN0aW9uKGUsdCxuKXtpZighbi53ZWJnbDIpcmV0dXJuIGU7aWYoZT09PXBlLkRFUFRIX1NURU5DSUwpcmV0dXJuIFBlLkRFUFRIMjRfU1RFTkNJTDg7aWYoZT09PXBlLkRFUFRIX0NPTVBPTkVOVCl7aWYodD09PWxvLlVOU0lHTkVEX1NIT1JUKXJldHVybiBQZS5ERVBUSF9DT01QT05FTlQxNjtpZih0PT09bG8uVU5TSUdORURfSU5UKXJldHVybiBQZS5ERVBUSF9DT01QT05FTlQyNH1pZih0PT09bG8uRkxPQVQpc3dpdGNoKGUpe2Nhc2UgcGUuUkdCQTpyZXR1cm4gUGUuUkdCQTMyRjtjYXNlIHBlLlJHQjpyZXR1cm4gUGUuUkdCMzJGO2Nhc2UgcGUuUkc6cmV0dXJuIFBlLlJHMzJGO2Nhc2UgcGUuUkVEOnJldHVybiBQZS5SMzJGfWlmKHQ9PT1sby5IQUxGX0ZMT0FUKXN3aXRjaChlKXtjYXNlIHBlLlJHQkE6cmV0dXJuIFBlLlJHQkExNkY7Y2FzZSBwZS5SR0I6cmV0dXJuIFBlLlJHQjE2RjtjYXNlIHBlLlJHOnJldHVybiBQZS5SRzE2RjtjYXNlIHBlLlJFRDpyZXR1cm4gUGUuUjE2Rn1pZih0PT09bG8uVU5TSUdORURfQllURSlzd2l0Y2goZSl7Y2FzZSBwZS5SR0JBOnJldHVybiBQZS5SR0JBODtjYXNlIHBlLlJHQjpyZXR1cm4gUGUuUkdCODtjYXNlIHBlLlJHOnJldHVybiBQZS5SRzg7Y2FzZSBwZS5SRUQ6cmV0dXJuIFBlLlI4fWlmKHQ9PT1sby5JTlQpc3dpdGNoKGUpe2Nhc2UgcGUuUkdCQV9JTlRFR0VSOnJldHVybiBQZS5SR0JBMzJJO2Nhc2UgcGUuUkdCX0lOVEVHRVI6cmV0dXJuIFBlLlJHQjMySTtjYXNlIHBlLlJHX0lOVEVHRVI6cmV0dXJuIFBlLlJHMzJJO2Nhc2UgcGUuUkVEX0lOVEVHRVI6cmV0dXJuIFBlLlIzMkl9aWYodD09PWxvLlVOU0lHTkVEX0lOVClzd2l0Y2goZSl7Y2FzZSBwZS5SR0JBX0lOVEVHRVI6cmV0dXJuIFBlLlJHQkEzMlVJO2Nhc2UgcGUuUkdCX0lOVEVHRVI6cmV0dXJuIFBlLlJHQjMyVUk7Y2FzZSBwZS5SR19JTlRFR0VSOnJldHVybiBQZS5SRzMyVUk7Y2FzZSBwZS5SRURfSU5URUdFUjpyZXR1cm4gUGUuUjMyVUl9cmV0dXJuIGV9O1huPU9iamVjdC5mcmVlemUocGUpfSk7dmFyIFU2LENkLCQyPVgoKCk9PntVNj17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfSxDZD1PYmplY3QuZnJlZXplKFU2KX0pO2Z1bmN0aW9uIEw2KCl7cmV0dXJue3ZrRm9ybWF0OjAsdHlwZVNpemU6MSxwaXhlbFdpZHRoOjAscGl4ZWxIZWlnaHQ6MCxwaXhlbERlcHRoOjAsbGF5ZXJDb3VudDowLGZhY2VDb3VudDoxLGxldmVsQ291bnQ6MCxzdXBlcmNvbXByZXNzaW9uU2NoZW1lOjAsbGV2ZWxzOltdLGRhdGFGb3JtYXREZXNjcmlwdG9yOlt7dmVuZG9ySWQ6MCxkZXNjcmlwdG9yVHlwZTowLHZlcnNpb25OdW1iZXI6Mixjb2xvck1vZGVsOjAsY29sb3JQcmltYXJpZXM6MSx0cmFuc2ZlckZ1bmN0aW9uOjIsZmxhZ3M6MCx0ZXhlbEJsb2NrRGltZW5zaW9uOlswLDAsMCwwXSxieXRlc1BsYW5lOlswLDAsMCwwLDAsMCwwLDBdLHNhbXBsZXM6W119XSxrZXlWYWx1ZTp7fSxnbG9iYWxEYXRhOm51bGx9fWZ1bmN0aW9uIGVTKGUpe3JldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZSl9ZnVuY3Rpb24gdFMoZSl7bGV0IHQ9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LEtvLmxlbmd0aCk7aWYodFswXSE9PUtvWzBdfHx0WzFdIT09S29bMV18fHRbMl0hPT1Lb1syXXx8dFszXSE9PUtvWzNdfHx0WzRdIT09S29bNF18fHRbNV0hPT1Lb1s1XXx8dFs2XSE9PUtvWzZdfHx0WzddIT09S29bN118fHRbOF0hPT1Lb1s4XXx8dFs5XSE9PUtvWzldfHx0WzEwXSE9PUtvWzEwXXx8dFsxMV0hPT1Lb1sxMV0pdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIEtUWCAyLjAgaWRlbnRpZmllci4iKTtsZXQgbj1MNigpLG89MTcqVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsYT1uZXcga2MoZSxLby5sZW5ndGgsbywhMCk7bi52a0Zvcm1hdD1hLl9uZXh0VWludDMyKCksbi50eXBlU2l6ZT1hLl9uZXh0VWludDMyKCksbi5waXhlbFdpZHRoPWEuX25leHRVaW50MzIoKSxuLnBpeGVsSGVpZ2h0PWEuX25leHRVaW50MzIoKSxuLnBpeGVsRGVwdGg9YS5fbmV4dFVpbnQzMigpLG4ubGF5ZXJDb3VudD1hLl9uZXh0VWludDMyKCksbi5mYWNlQ291bnQ9YS5fbmV4dFVpbnQzMigpLG4ubGV2ZWxDb3VudD1hLl9uZXh0VWludDMyKCksbi5zdXBlcmNvbXByZXNzaW9uU2NoZW1lPWEuX25leHRVaW50MzIoKTtsZXQgcj1hLl9uZXh0VWludDMyKCksaT1hLl9uZXh0VWludDMyKCksZj1hLl9uZXh0VWludDMyKCksZD1hLl9uZXh0VWludDMyKCksYz1hLl9uZXh0VWludDY0KCksdT1hLl9uZXh0VWludDY0KCksbD1NYXRoLm1heChuLmxldmVsQ291bnQsMSkqMyo4LGg9bmV3IGtjKGUsS28ubGVuZ3RoK28sbCwhMCk7Zm9yKGxldCBmZT0wLGFlPU1hdGgubWF4KG4ubGV2ZWxDb3VudCwxKTtmZTxhZTtmZSsrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQraC5fbmV4dFVpbnQ2NCgpLGguX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDpoLl9uZXh0VWludDY0KCl9KTtsZXQgbT1uZXcga2MoZSxyLGksITApO20uX3NraXAoNCk7bGV0IGI9bS5fbmV4dFVpbnQxNigpLHA9bS5fbmV4dFVpbnQxNigpLHk9bS5fbmV4dFVpbnQxNigpLEU9bS5fbmV4dFVpbnQxNigpLF89bS5fbmV4dFVpbnQ4KCksVD1tLl9uZXh0VWludDgoKSx3PW0uX25leHRVaW50OCgpLFI9bS5fbmV4dFVpbnQ4KCksUz1bbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCldLEM9W20uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpLG0uX25leHRVaW50OCgpXSxOPXt2ZW5kb3JJZDpiLGRlc2NyaXB0b3JUeXBlOnAsdmVyc2lvbk51bWJlcjp5LGNvbG9yTW9kZWw6Xyxjb2xvclByaW1hcmllczpULHRyYW5zZmVyRnVuY3Rpb246dyxmbGFnczpSLHRleGVsQmxvY2tEaW1lbnNpb246UyxieXRlc1BsYW5lOkMsc2FtcGxlczpbXX0sQT0oRS80LTYpLzQ7Zm9yKGxldCBmZT0wO2ZlPEE7ZmUrKyl7bGV0IGFlPXtiaXRPZmZzZXQ6bS5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDptLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTptLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCksbS5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzYW1wbGVVcHBlcjpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9O2FlLmNoYW5uZWxUeXBlJjY0PyhhZS5zYW1wbGVMb3dlcj1tLl9uZXh0SW50MzIoKSxhZS5zYW1wbGVVcHBlcj1tLl9uZXh0SW50MzIoKSk6KGFlLnNhbXBsZUxvd2VyPW0uX25leHRVaW50MzIoKSxhZS5zYW1wbGVVcHBlcj1tLl9uZXh0VWludDMyKCkpLE4uc2FtcGxlc1tmZV09YWV9bi5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCxuLmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2goTik7bGV0IHg9bmV3IGtjKGUsZixkLCEwKTtmb3IoO3guX29mZnNldDxkOyl7bGV0IGZlPXguX25leHRVaW50MzIoKSxhZT14Ll9zY2FuKGZlKSxSZT1lUyhhZSk7aWYobi5rZXlWYWx1ZVtSZV09eC5fbmV4dFVpbnQ4QXJyYXkoZmUtYWUuYnl0ZUxlbmd0aC0xKSxSZS5tYXRjaCgvXmt0eC9pKSl7bGV0IEplPWVTKG4ua2V5VmFsdWVbUmVdKTtuLmtleVZhbHVlW1JlXT1KZS5zdWJzdHJpbmcoMCxKZS5sYXN0SW5kZXhPZigiXDAiKSl9bGV0IE5lPWZlJTQ/NC1mZSU0OjA7eC5fc2tpcChOZSl9aWYodTw9MClyZXR1cm4gbjtsZXQgTT1uZXcga2MoZSxjLHUsITApLEY9TS5fbmV4dFVpbnQxNigpLFU9TS5fbmV4dFVpbnQxNigpLHo9TS5fbmV4dFVpbnQzMigpLEQ9TS5fbmV4dFVpbnQzMigpLEc9TS5fbmV4dFVpbnQzMigpLEg9TS5fbmV4dFVpbnQzMigpLE89W107Zm9yKGxldCBmZT0wLGFlPU1hdGgubWF4KG4ubGV2ZWxDb3VudCwxKTtmZTxhZTtmZSsrKU8ucHVzaCh7aW1hZ2VGbGFnczpNLl9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0Ok0uX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6TS5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0Ok0uX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDpNLl9uZXh0VWludDMyKCl9KTtsZXQgWj1jK00uX29mZnNldCxvZT1aK3osY2U9b2UrRCxkZT1jZStHLGVlPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtaLHopLG1lPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtvZSxEKSxsZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrY2UsRyksYmU9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0K2RlLEgpO3JldHVybiBuLmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6RixzZWxlY3RvckNvdW50OlUsaW1hZ2VEZXNjczpPLGVuZHBvaW50c0RhdGE6ZWUsc2VsZWN0b3JzRGF0YTptZSx0YWJsZXNEYXRhOmxlLGV4dGVuZGVkRGF0YTpiZX0sbn12YXIga2MsWGxlLEtvLG5TPVgoKCk9PntrYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LG4sbyxhKXt0aGlzLl9kYXRhVmlldz12b2lkIDAsdGhpcy5fbGl0dGxlRW5kaWFuPXZvaWQgMCx0aGlzLl9vZmZzZXQ9dm9pZCAwLHRoaXMuX2RhdGFWaWV3PW5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbixvKSx0aGlzLl9saXR0bGVFbmRpYW49YSx0aGlzLl9vZmZzZXQ9MH1fbmV4dFVpbnQ4KCl7bGV0IHQ9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDgodGhpcy5fb2Zmc2V0KTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz0xLHR9X25leHRVaW50MTYoKXtsZXQgdD10aGlzLl9kYXRhVmlldy5nZXRVaW50MTYodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9Mix0fV9uZXh0VWludDMyKCl7bGV0IHQ9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTQsdH1fbmV4dFVpbnQ2NCgpe2xldCB0PXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKSxuPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQrNCx0aGlzLl9saXR0bGVFbmRpYW4pLG89dCsyKiozMipuO3JldHVybiB0aGlzLl9vZmZzZXQrPTgsb31fbmV4dEludDMyKCl7bGV0IHQ9dGhpcy5fZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9NCx0fV9uZXh0VWludDhBcnJheSh0KXtsZXQgbj1uZXcgVWludDhBcnJheSh0aGlzLl9kYXRhVmlldy5idWZmZXIsdGhpcy5fZGF0YVZpZXcuYnl0ZU9mZnNldCt0aGlzLl9vZmZzZXQsdCk7cmV0dXJuIHRoaXMuX29mZnNldCs9dCxufV9za2lwKHQpe3JldHVybiB0aGlzLl9vZmZzZXQrPXQsdGhpc31fc2Nhbih0LG49MCl7bGV0IG89dGhpcy5fb2Zmc2V0LGE9MDtmb3IoO3RoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCkhPT1uJiZhPHQ7KWErKyx0aGlzLl9vZmZzZXQrKztyZXR1cm4gYTx0JiZ0aGlzLl9vZmZzZXQrKyxuZXcgVWludDhBcnJheSh0aGlzLl9kYXRhVmlldy5idWZmZXIsdGhpcy5fZGF0YVZpZXcuYnl0ZU9mZnNldCtvLGEpfX0sWGxlPW5ldyBVaW50OEFycmF5KFswXSksS289WzE3MSw3NSw4NCw4OCwzMiw1MCw0OCwxODcsMTMsMTAsMjYsMTBdfSk7dmFyIG9TPWVvKChJbSxXeSk9Pnt2YXIgcXk9KGZ1bmN0aW9uKCl7dmFyIGU9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKGU9ZXx8X19maWxlbmFtZSksKGZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIG49dHlwZW9mIHQ8InUiP3Q6e30sbyxhO24ucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oQixMKXtvPUIsYT1MfSk7dmFyIHI9e30saTtmb3IoaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPW5baV0pO3ZhciBmPVtdLGQ9Ii4vdGhpcy5wcm9ncmFtIixjPWZ1bmN0aW9uKEIsTCl7dGhyb3cgTH0sdT0hMSxsPSExLGg9ITEsbT0hMTt1PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLGw9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsaD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyIsbT0hdSYmIWgmJiFsO3ZhciBiPSIiO2Z1bmN0aW9uIHAoQil7cmV0dXJuIG4ubG9jYXRlRmlsZT9uLmxvY2F0ZUZpbGUoQixiKTpiK0J9dmFyIHksRSxfLFQsdyxSO2g/KGw/Yj1iYSgicGF0aCIpLmRpcm5hbWUoYikrIi8iOmI9X19kaXJuYW1lKyIvIix5PWZ1bmN0aW9uKEwsVyl7cmV0dXJuIHd8fCh3PWJhKCJmcyIpKSxSfHwoUj1iYSgicGF0aCIpKSxMPVIubm9ybWFsaXplKEwpLHcucmVhZEZpbGVTeW5jKEwsVz9udWxsOiJ1dGY4Iil9LF89ZnVuY3Rpb24oTCl7dmFyIFc9eShMLCEwKTtyZXR1cm4gVy5idWZmZXJ8fChXPW5ldyBVaW50OEFycmF5KFcpKSxGKFcuYnVmZmVyKSxXfSxwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJihkPXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLGY9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIixmdW5jdGlvbihCKXtpZighKEIgaW5zdGFuY2VvZiBOcikpdGhyb3cgQn0pLHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsenQpLGM9ZnVuY3Rpb24oQil7cHJvY2Vzcy5leGl0KEIpfSxuLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF0ifSk6bT8odHlwZW9mIHJlYWQ8InUiJiYoeT1mdW5jdGlvbihMKXtyZXR1cm4gcmVhZChMKX0pLF89ZnVuY3Rpb24oTCl7dmFyIFc7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIoTCkpOihXPXJlYWQoTCwiYmluYXJ5IiksRih0eXBlb2YgVz09Im9iamVjdCIpLFcpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/Zj1zY3JpcHRBcmdzOnR5cGVvZiBhcmd1bWVudHM8InUiJiYoZj1hcmd1bWVudHMpLHR5cGVvZiBxdWl0PT0iZnVuY3Rpb24iJiYoYz1mdW5jdGlvbihCKXtxdWl0KEIpfSksdHlwZW9mIHByaW50PCJ1IiYmKHR5cGVvZiBjb25zb2xlPiJ1IiYmKGNvbnNvbGU9e30pLGNvbnNvbGUubG9nPXByaW50LGNvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPXR5cGVvZiBwcmludEVycjwidSI/cHJpbnRFcnI6cHJpbnQpKToodXx8bCkmJihsP2I9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihiPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxlJiYoYj1lKSxiLmluZGV4T2YoImJsb2I6IikhPT0wP2I9Yi5zdWJzdHIoMCxiLmxhc3RJbmRleE9mKCIvIikrMSk6Yj0iIix5PWZ1bmN0aW9uKEIpe3ZhciBMPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gTC5vcGVuKCJHRVQiLEIsITEpLEwuc2VuZChudWxsKSxMLnJlc3BvbnNlVGV4dH0sbCYmKF89ZnVuY3Rpb24oQil7dmFyIEw9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBMLm9wZW4oIkdFVCIsQiwhMSksTC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixMLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoTC5yZXNwb25zZSl9KSxFPWZ1bmN0aW9uKEIsTCxXKXt2YXIgUT1uZXcgWE1MSHR0cFJlcXVlc3Q7US5vcGVuKCJHRVQiLEIsITApLFEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsUS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihRLnN0YXR1cz09MjAwfHxRLnN0YXR1cz09MCYmUS5yZXNwb25zZSl7TChRLnJlc3BvbnNlKTtyZXR1cm59VygpfSxRLm9uZXJyb3I9VyxRLnNlbmQobnVsbCl9LFQ9ZnVuY3Rpb24oQil7ZG9jdW1lbnQudGl0bGU9Qn0pO3ZhciBTPW4ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksQz1uLnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IoaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPXJbaV0pO3I9bnVsbCxuLmFyZ3VtZW50cyYmKGY9bi5hcmd1bWVudHMpLG4udGhpc1Byb2dyYW0mJihkPW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmKGM9bi5xdWl0KTt2YXIgST0wLE49ZnVuY3Rpb24oQil7ST1CfSxQO24ud2FzbUJpbmFyeSYmKFA9bi53YXNtQmluYXJ5KTt2YXIgdj1uLm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJnp0KCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEEseD0hMSxNO2Z1bmN0aW9uIEYoQixMKXtCfHx6dCgiQXNzZXJ0aW9uIGZhaWxlZDogIitMKX12YXIgVT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiB6KEIsTCxXKXtmb3IodmFyIFE9TCtXLHVlPUw7Qlt1ZV0mJiEodWU+PVEpOykrK3VlO2lmKHVlLUw+MTYmJkIuc3ViYXJyYXkmJlUpcmV0dXJuIFUuZGVjb2RlKEIuc3ViYXJyYXkoTCx1ZSkpO2Zvcih2YXIgRWU9IiI7TDx1ZTspe3ZhciB4ZT1CW0wrK107aWYoISh4ZSYxMjgpKXtFZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4ZSk7Y29udGludWV9dmFyIF9lPUJbTCsrXSY2MztpZigoeGUmMjI0KT09MTkyKXtFZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoeGUmMzEpPDw2fF9lKTtjb250aW51ZX12YXIgeWU9QltMKytdJjYzO2lmKCh4ZSYyNDApPT0yMjQ/eGU9KHhlJjE1KTw8MTJ8X2U8PDZ8eWU6eGU9KHhlJjcpPDwxOHxfZTw8MTJ8eWU8PDZ8QltMKytdJjYzLHhlPDY1NTM2KUVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHhlKTtlbHNle3ZhciB6ZT14ZS02NTUzNjtFZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nnx6ZT4+MTAsNTYzMjB8emUmMTAyMyl9fXJldHVybiBFZX1mdW5jdGlvbiBEKEIsTCl7cmV0dXJuIEI/eihSZSxCLEwpOiIifWZ1bmN0aW9uIEcoQixMLFcsUSl7aWYoIShRPjApKXJldHVybiAwO2Zvcih2YXIgdWU9VyxFZT1XK1EtMSx4ZT0wO3hlPEIubGVuZ3RoOysreGUpe3ZhciBfZT1CLmNoYXJDb2RlQXQoeGUpO2lmKF9lPj01NTI5NiYmX2U8PTU3MzQzKXt2YXIgeWU9Qi5jaGFyQ29kZUF0KCsreGUpO19lPTY1NTM2KygoX2UmMTAyMyk8PDEwKXx5ZSYxMDIzfWlmKF9lPD0xMjcpe2lmKFc+PUVlKWJyZWFrO0xbVysrXT1fZX1lbHNlIGlmKF9lPD0yMDQ3KXtpZihXKzE+PUVlKWJyZWFrO0xbVysrXT0xOTJ8X2U+PjYsTFtXKytdPTEyOHxfZSY2M31lbHNlIGlmKF9lPD02NTUzNSl7aWYoVysyPj1FZSlicmVhaztMW1crK109MjI0fF9lPj4xMixMW1crK109MTI4fF9lPj42JjYzLExbVysrXT0xMjh8X2UmNjN9ZWxzZXtpZihXKzM+PUVlKWJyZWFrO0xbVysrXT0yNDB8X2U+PjE4LExbVysrXT0xMjh8X2U+PjEyJjYzLExbVysrXT0xMjh8X2U+PjYmNjMsTFtXKytdPTEyOHxfZSY2M319cmV0dXJuIExbV109MCxXLXVlfWZ1bmN0aW9uIEgoQixMLFcpe3JldHVybiBHKEIsUmUsTCxXKX1mdW5jdGlvbiBPKEIpe2Zvcih2YXIgTD0wLFc9MDtXPEIubGVuZ3RoOysrVyl7dmFyIFE9Qi5jaGFyQ29kZUF0KFcpO1E+PTU1Mjk2JiZRPD01NzM0MyYmKFE9NjU1MzYrKChRJjEwMjMpPDwxMCl8Qi5jaGFyQ29kZUF0KCsrVykmMTAyMyksUTw9MTI3PysrTDpRPD0yMDQ3P0wrPTI6UTw9NjU1MzU/TCs9MzpMKz00fXJldHVybiBMfXZhciBaPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMDtmdW5jdGlvbiBvZShCLEwpe2Zvcih2YXIgVz1CLFE9Vz4+MSx1ZT1RK0wvMjshKFE+PXVlKSYmSmVbUV07KSsrUTtpZihXPVE8PDEsVy1CPjMyJiZaKXJldHVybiBaLmRlY29kZShSZS5zdWJhcnJheShCLFcpKTtmb3IodmFyIEVlPSIiLHhlPTA7ISh4ZT49TC8yKTsrK3hlKXt2YXIgX2U9TmVbQit4ZSoyPj4xXTtpZihfZT09MClicmVhaztFZSs9U3RyaW5nLmZyb21DaGFyQ29kZShfZSl9cmV0dXJuIEVlfWZ1bmN0aW9uIGNlKEIsTCxXKXtpZihXPT09dm9pZCAwJiYoVz0yMTQ3NDgzNjQ3KSxXPDIpcmV0dXJuIDA7Vy09Mjtmb3IodmFyIFE9TCx1ZT1XPEIubGVuZ3RoKjI/Vy8yOkIubGVuZ3RoLEVlPTA7RWU8dWU7KytFZSl7dmFyIHhlPUIuY2hhckNvZGVBdChFZSk7TmVbTD4+MV09eGUsTCs9Mn1yZXR1cm4gTmVbTD4+MV09MCxMLVF9ZnVuY3Rpb24gZGUoQil7cmV0dXJuIEIubGVuZ3RoKjJ9ZnVuY3Rpb24gZWUoQixMKXtmb3IodmFyIFc9MCxRPSIiOyEoVz49TC80KTspe3ZhciB1ZT1XZVtCK1cqND4+Ml07aWYodWU9PTApYnJlYWs7aWYoKytXLHVlPj02NTUzNil7dmFyIEVlPXVlLTY1NTM2O1ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8RWU+PjEwLDU2MzIwfEVlJjEwMjMpfWVsc2UgUSs9U3RyaW5nLmZyb21DaGFyQ29kZSh1ZSl9cmV0dXJuIFF9ZnVuY3Rpb24gbWUoQixMLFcpe2lmKFc9PT12b2lkIDAmJihXPTIxNDc0ODM2NDcpLFc8NClyZXR1cm4gMDtmb3IodmFyIFE9TCx1ZT1RK1ctNCxFZT0wO0VlPEIubGVuZ3RoOysrRWUpe3ZhciB4ZT1CLmNoYXJDb2RlQXQoRWUpO2lmKHhlPj01NTI5NiYmeGU8PTU3MzQzKXt2YXIgX2U9Qi5jaGFyQ29kZUF0KCsrRWUpO3hlPTY1NTM2KygoeGUmMTAyMyk8PDEwKXxfZSYxMDIzfWlmKFdlW0w+PjJdPXhlLEwrPTQsTCs0PnVlKWJyZWFrfXJldHVybiBXZVtMPj4yXT0wLEwtUX1mdW5jdGlvbiBsZShCKXtmb3IodmFyIEw9MCxXPTA7VzxCLmxlbmd0aDsrK1cpe3ZhciBRPUIuY2hhckNvZGVBdChXKTtRPj01NTI5NiYmUTw9NTczNDMmJisrVyxMKz00fXJldHVybiBMfWZ1bmN0aW9uIGJlKEIsTCl7cmV0dXJuIEIlTD4wJiYoQis9TC1CJUwpLEJ9dmFyIGZlLGFlLFJlLE5lLEplLFdlLHR0LFhlLExlO2Z1bmN0aW9uIGplKEIpe2ZlPUIsbi5IRUFQOD1hZT1uZXcgSW50OEFycmF5KEIpLG4uSEVBUDE2PU5lPW5ldyBJbnQxNkFycmF5KEIpLG4uSEVBUDMyPVdlPW5ldyBJbnQzMkFycmF5KEIpLG4uSEVBUFU4PVJlPW5ldyBVaW50OEFycmF5KEIpLG4uSEVBUFUxNj1KZT1uZXcgVWludDE2QXJyYXkoQiksbi5IRUFQVTMyPXR0PW5ldyBVaW50MzJBcnJheShCKSxuLkhFQVBGMzI9WGU9bmV3IEZsb2F0MzJBcnJheShCKSxuLkhFQVBGNjQ9TGU9bmV3IEZsb2F0NjRBcnJheShCKX12YXIgaXQ9bi5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTYsWWUsZnQ9W10sSXQ9W10sQ3Q9W10saHQ9W10sS3Q9ITE7ZnVuY3Rpb24gUHQoKXtpZihuLnByZVJ1bilmb3IodHlwZW9mIG4ucHJlUnVuPT0iZnVuY3Rpb24iJiYobi5wcmVSdW49W24ucHJlUnVuXSk7bi5wcmVSdW4ubGVuZ3RoOylSdChuLnByZVJ1bi5zaGlmdCgpKTtBbyhmdCl9ZnVuY3Rpb24gTHQoKXtLdD0hMCxBbyhJdCl9ZnVuY3Rpb24gS2UoKXtBbyhDdCl9ZnVuY3Rpb24gVmUoKXtpZihuLnBvc3RSdW4pZm9yKHR5cGVvZiBuLnBvc3RSdW49PSJmdW5jdGlvbiImJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KXF0KG4ucG9zdFJ1bi5zaGlmdCgpKTtBbyhodCl9ZnVuY3Rpb24gUnQoQil7ZnQudW5zaGlmdChCKX1mdW5jdGlvbiBGdChCKXtJdC51bnNoaWZ0KEIpfWZ1bmN0aW9uIHF0KEIpe2h0LnVuc2hpZnQoQil9dmFyIFp0PTAsb249bnVsbCx3bj1udWxsO2Z1bmN0aW9uIER0KEIpe1p0Kyssbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoWnQpfWZ1bmN0aW9uIGFuKEIpe2lmKFp0LS0sbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoWnQpLFp0PT0wJiYob24hPT1udWxsJiYoY2xlYXJJbnRlcnZhbChvbiksb249bnVsbCksd24pKXt2YXIgTD13bjt3bj1udWxsLEwoKX19bi5wcmVsb2FkZWRJbWFnZXM9e30sbi5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24genQoQil7bi5vbkFib3J0JiZuLm9uQWJvcnQoQiksQis9IiIsQyhCKSx4PSEwLE09MSxCPSJhYm9ydCgiK0IrIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgTD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEIpO3Rocm93IGEoTCksTH1mdW5jdGlvbiBmbihCLEwpe3JldHVybiBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGg/Qi5zdGFydHNXaXRoKEwpOkIuaW5kZXhPZihMKT09PTB9dmFyIFZuPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBIbihCKXtyZXR1cm4gZm4oQixWbil9dmFyIFBuPSJmaWxlOi8vIjtmdW5jdGlvbiBybyhCKXtyZXR1cm4gZm4oQixQbil9dmFyIGt0PSJiYXNpc190cmFuc2NvZGVyLndhc20iO0huKGt0KXx8KGt0PXAoa3QpKTtmdW5jdGlvbiB4dChCKXt0cnl7aWYoQj09a3QmJlApcmV0dXJuIG5ldyBVaW50OEFycmF5KFApO2lmKF8pcmV0dXJuIF8oQik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKEwpe3p0KEwpfX1mdW5jdGlvbiBPbigpe2lmKCFQJiYodXx8bCkpe2lmKHR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmIXJvKGt0KSlyZXR1cm4gZmV0Y2goa3Qse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKEIpe2lmKCFCLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIra3QrIiciO3JldHVybiBCLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiB4dChrdCl9KTtpZihFKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihCLEwpe0Uoa3QsZnVuY3Rpb24oVyl7QihuZXcgVWludDhBcnJheShXKSl9LEwpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geHQoa3QpfSl9ZnVuY3Rpb24ga24oKXt2YXIgQj17YTpxdX07ZnVuY3Rpb24gTCh4ZSxfZSl7dmFyIHllPXhlLmV4cG9ydHM7bi5hc209eWUsQT1uLmFzbS5LLGplKEEuYnVmZmVyKSxZZT1uLmFzbS5PLEZ0KG4uYXNtLkwpLGFuKCJ3YXNtLWluc3RhbnRpYXRlIil9RHQoIndhc20taW5zdGFudGlhdGUiKTtmdW5jdGlvbiBXKHhlKXtMKHhlLmluc3RhbmNlKX1mdW5jdGlvbiBRKHhlKXtyZXR1cm4gT24oKS50aGVuKGZ1bmN0aW9uKF9lKXt2YXIgeWU9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoX2UsQik7cmV0dXJuIHllfSkudGhlbih4ZSxmdW5jdGlvbihfZSl7QygiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitfZSksenQoX2UpfSl9ZnVuY3Rpb24gdWUoKXtyZXR1cm4hUCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhSG4oa3QpJiYhcm8oa3QpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goa3Qse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHhlKXt2YXIgX2U9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoeGUsQik7cmV0dXJuIF9lLnRoZW4oVyxmdW5jdGlvbih5ZSl7cmV0dXJuIEMoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3llKSxDKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFEoVyl9KX0pOlEoVyl9aWYobi5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBFZT1uLmluc3RhbnRpYXRlV2FzbShCLEwpO3JldHVybiBFZX1jYXRjaCh4ZSl7cmV0dXJuIEMoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIreGUpLCExfXJldHVybiB1ZSgpLmNhdGNoKGEpLHt9fWZ1bmN0aW9uIEFvKEIpe2Zvcig7Qi5sZW5ndGg+MDspe3ZhciBMPUIuc2hpZnQoKTtpZih0eXBlb2YgTD09ImZ1bmN0aW9uIil7TChuKTtjb250aW51ZX12YXIgVz1MLmZ1bmM7dHlwZW9mIFc9PSJudW1iZXIiP0wuYXJnPT09dm9pZCAwP1llLmdldChXKSgpOlllLmdldChXKShMLmFyZyk6VyhMLmFyZz09PXZvaWQgMD9udWxsOkwuYXJnKX19dmFyIEd0PXt9O2Z1bmN0aW9uIGRuKEIpe2Zvcig7Qi5sZW5ndGg7KXt2YXIgTD1CLnBvcCgpLFc9Qi5wb3AoKTtXKEwpfX1mdW5jdGlvbiBDbyhCKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodHRbQj4+Ml0pfXZhciB2bj17fSxXbz17fSxEYT17fSx6aT00OCxHaT01NztmdW5jdGlvbiBvaShCKXtpZihCPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7Qj1CLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciBMPUIuY2hhckNvZGVBdCgwKTtyZXR1cm4gTD49emkmJkw8PUdpPyJfIitCOkJ9ZnVuY3Rpb24gQmEoQixMKXtyZXR1cm4gQj1vaShCKSxuZXcgRnVuY3Rpb24oImJvZHkiLCJyZXR1cm4gZnVuY3Rpb24gIitCK2AoKSB7CiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmApKEwpfWZ1bmN0aW9uIGFpKEIsTCl7dmFyIFc9QmEoTCxmdW5jdGlvbihRKXt0aGlzLm5hbWU9TCx0aGlzLm1lc3NhZ2U9UTt2YXIgdWU9bmV3IEVycm9yKFEpLnN0YWNrO3VlIT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK3VlLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiBXLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSxXLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XLFcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxXfXZhciBWaT12b2lkIDA7ZnVuY3Rpb24gU3IoQil7dGhyb3cgbmV3IFZpKEIpfWZ1bmN0aW9uIGhvKEIsTCxXKXtCLmZvckVhY2goZnVuY3Rpb24oX2Upe0RhW19lXT1MfSk7ZnVuY3Rpb24gUShfZSl7dmFyIHllPVcoX2UpO3llLmxlbmd0aCE9PUIubGVuZ3RoJiZTcigiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgemU9MDt6ZTxCLmxlbmd0aDsrK3plKWlhKEJbemVdLHllW3plXSl9dmFyIHVlPW5ldyBBcnJheShMLmxlbmd0aCksRWU9W10seGU9MDtMLmZvckVhY2goZnVuY3Rpb24oX2UseWUpe1dvLmhhc093blByb3BlcnR5KF9lKT91ZVt5ZV09V29bX2VdOihFZS5wdXNoKF9lKSx2bi5oYXNPd25Qcm9wZXJ0eShfZSl8fCh2bltfZV09W10pLHZuW19lXS5wdXNoKGZ1bmN0aW9uKCl7dWVbeWVdPVdvW19lXSwrK3hlLHhlPT09RWUubGVuZ3RoJiZRKHVlKX0pKX0pLEVlLmxlbmd0aD09PTAmJlEodWUpfWZ1bmN0aW9uIHdvKEIpe3ZhciBMPUd0W0JdO2RlbGV0ZSBHdFtCXTt2YXIgVz1MLnJhd0NvbnN0cnVjdG9yLFE9TC5yYXdEZXN0cnVjdG9yLHVlPUwuZmllbGRzLEVlPXVlLm1hcChmdW5jdGlvbih4ZSl7cmV0dXJuIHhlLmdldHRlclJldHVyblR5cGV9KS5jb25jYXQodWUubWFwKGZ1bmN0aW9uKHhlKXtyZXR1cm4geGUuc2V0dGVyQXJndW1lbnRUeXBlfSkpO2hvKFtCXSxFZSxmdW5jdGlvbih4ZSl7dmFyIF9lPXt9O3JldHVybiB1ZS5mb3JFYWNoKGZ1bmN0aW9uKHllLHplKXt2YXIgWmU9eWUuZmllbGROYW1lLGd0PXhlW3plXSxybj15ZS5nZXR0ZXIsRW49eWUuZ2V0dGVyQ29udGV4dCxtbz14ZVt6ZSt1ZS5sZW5ndGhdLFVvPXllLnNldHRlcixtYT15ZS5zZXR0ZXJDb250ZXh0O19lW1plXT17cmVhZDpmdW5jdGlvbihucil7cmV0dXJuIGd0LmZyb21XaXJlVHlwZShybihFbixucikpfSx3cml0ZTpmdW5jdGlvbihucix1Zil7dmFyIElyPVtdO1VvKG1hLG5yLG1vLnRvV2lyZVR5cGUoSXIsdWYpKSxkbihJcil9fX0pLFt7bmFtZTpMLm5hbWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHllKXt2YXIgemU9e307Zm9yKHZhciBaZSBpbiBfZSl6ZVtaZV09X2VbWmVdLnJlYWQoeWUpO3JldHVybiBRKHllKSx6ZX0sdG9XaXJlVHlwZTpmdW5jdGlvbih5ZSx6ZSl7Zm9yKHZhciBaZSBpbiBfZSlpZighKFplIGluIHplKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIGZpZWxkOiAgIicrWmUrJyInKTt2YXIgZ3Q9VygpO2ZvcihaZSBpbiBfZSlfZVtaZV0ud3JpdGUoZ3QsemVbWmVdKTtyZXR1cm4geWUhPT1udWxsJiZ5ZS5wdXNoKFEsZ3QpLGd0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkNvLGRlc3RydWN0b3JGdW5jdGlvbjpRfV19KX1mdW5jdGlvbiBVYShCKXtzd2l0Y2goQil7Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDQ6cmV0dXJuIDI7Y2FzZSA4OnJldHVybiAzO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biB0eXBlIHNpemU6ICIrQil9fWZ1bmN0aW9uIHZjKCl7Zm9yKHZhciBCPW5ldyBBcnJheSgyNTYpLEw9MDtMPDI1NjsrK0wpQltMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEwpO0ZjPUJ9dmFyIEZjPXZvaWQgMDtmdW5jdGlvbiBLbihCKXtmb3IodmFyIEw9IiIsVz1CO1JlW1ddOylMKz1GY1tSZVtXKytdXTtyZXR1cm4gTH12YXIgQ3I9dm9pZCAwO2Z1bmN0aW9uIEJ0KEIpe3Rocm93IG5ldyBDcihCKX1mdW5jdGlvbiBpYShCLEwsVyl7aWYoVz1XfHx7fSwhKCJhcmdQYWNrQWR2YW5jZSJpbiBMKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7dmFyIFE9TC5uYW1lO2lmKEJ8fEJ0KCd0eXBlICInK1ErJyIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcicpLFdvLmhhc093blByb3BlcnR5KEIpKXtpZihXLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO0J0KCJDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnIitRKyInIHR3aWNlIil9aWYoV29bQl09TCxkZWxldGUgRGFbQl0sdm4uaGFzT3duUHJvcGVydHkoQikpe3ZhciB1ZT12bltCXTtkZWxldGUgdm5bQl0sdWUuZm9yRWFjaChmdW5jdGlvbihFZSl7RWUoKX0pfX1mdW5jdGlvbiBNZChCLEwsVyxRLHVlKXt2YXIgRWU9VWEoVyk7TD1LbihMKSxpYShCLHtuYW1lOkwsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHhlKXtyZXR1cm4hIXhlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKHhlLF9lKXtyZXR1cm4gX2U/UTp1ZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbih4ZSl7dmFyIF9lO2lmKFc9PT0xKV9lPWFlO2Vsc2UgaWYoVz09PTIpX2U9TmU7ZWxzZSBpZihXPT09NClfZT1XZTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIrTCk7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKF9lW3hlPj5FZV0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIE5kKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIExhKXx8IShCIGluc3RhbmNlb2YgTGEpKXJldHVybiExO2Zvcih2YXIgTD10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFc9dGhpcy4kJC5wdHIsUT1CLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHVlPUIuJCQucHRyO0wuYmFzZUNsYXNzOylXPUwudXBjYXN0KFcpLEw9TC5iYXNlQ2xhc3M7Zm9yKDtRLmJhc2VDbGFzczspdWU9US51cGNhc3QodWUpLFE9US5iYXNlQ2xhc3M7cmV0dXJuIEw9PT1RJiZXPT09dWV9ZnVuY3Rpb24gSWQoQil7cmV0dXJue2NvdW50OkIuY291bnQsZGVsZXRlU2NoZWR1bGVkOkIuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOkIucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOkIucHRyLHB0clR5cGU6Qi5wdHJUeXBlLHNtYXJ0UHRyOkIuc21hcnRQdHIsc21hcnRQdHJUeXBlOkIuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiBEYyhCKXtmdW5jdGlvbiBMKFcpe3JldHVybiBXLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWV9QnQoTChCKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfXZhciBCYz0hMTtmdW5jdGlvbiBacyhCKXt9ZnVuY3Rpb24gUGQoQil7Qi5zbWFydFB0cj9CLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKEIuc21hcnRQdHIpOkIucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihCLnB0cil9ZnVuY3Rpb24gUXMoQil7Qi5jb3VudC52YWx1ZS09MTt2YXIgTD1CLmNvdW50LnZhbHVlPT09MDtMJiZQZChCKX1mdW5jdGlvbiByaShCKXtyZXR1cm4gdHlwZW9mIEZpbmFsaXphdGlvbkdyb3VwPiJ1Ij8ocmk9ZnVuY3Rpb24oTCl7cmV0dXJuIEx9LEIpOihCYz1uZXcgRmluYWxpemF0aW9uR3JvdXAoZnVuY3Rpb24oTCl7Zm9yKHZhciBXPUwubmV4dCgpOyFXLmRvbmU7Vz1MLm5leHQoKSl7dmFyIFE9Vy52YWx1ZTtRLnB0cj9RcyhRKTpjb25zb2xlLndhcm4oIm9iamVjdCBhbHJlYWR5IGRlbGV0ZWQ6ICIrUS5wdHIpfX0pLHJpPWZ1bmN0aW9uKEwpe3JldHVybiBCYy5yZWdpc3RlcihMLEwuJCQsTC4kJCksTH0sWnM9ZnVuY3Rpb24oTCl7QmMudW5yZWdpc3RlcihMLiQkKX0scmkoQikpfWZ1bmN0aW9uIGtkKCl7aWYodGhpcy4kJC5wdHJ8fERjKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgQj1yaShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOklkKHRoaXMuJCQpfX0pKTtyZXR1cm4gQi4kJC5jb3VudC52YWx1ZSs9MSxCLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxCfWZ1bmN0aW9uIHZkKCl7dGhpcy4kJC5wdHJ8fERjKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmQnQoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxacyh0aGlzKSxRcyh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX1mdW5jdGlvbiBGZCgpe3JldHVybiF0aGlzLiQkLnB0cn12YXIgaWk9dm9pZCAwLGNpPVtdO2Z1bmN0aW9uIFVjKCl7Zm9yKDtjaS5sZW5ndGg7KXt2YXIgQj1jaS5wb3AoKTtCLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxCLmRlbGV0ZSgpfX1mdW5jdGlvbiBEZCgpe3JldHVybiB0aGlzLiQkLnB0cnx8RGModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZCdCgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLGNpLnB1c2godGhpcyksY2kubGVuZ3RoPT09MSYmaWkmJmlpKFVjKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfWZ1bmN0aW9uIEJkKCl7TGEucHJvdG90eXBlLmlzQWxpYXNPZj1OZCxMYS5wcm90b3R5cGUuY2xvbmU9a2QsTGEucHJvdG90eXBlLmRlbGV0ZT12ZCxMYS5wcm90b3R5cGUuaXNEZWxldGVkPUZkLExhLnByb3RvdHlwZS5kZWxldGVMYXRlcj1EZH1mdW5jdGlvbiBMYSgpe312YXIgJHM9e307ZnVuY3Rpb24gZWYoQixMLFcpe2lmKEJbTF0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyIFE9QltMXTtCW0xdPWZ1bmN0aW9uKCl7cmV0dXJuIEJbTF0ub3ZlcmxvYWRUYWJsZS5oYXNPd25Qcm9wZXJ0eShhcmd1bWVudHMubGVuZ3RoKXx8QnQoIkZ1bmN0aW9uICciK1crIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RzIG9uZSBvZiAoIitCW0xdLm92ZXJsb2FkVGFibGUrIikhIiksQltMXS5vdmVybG9hZFRhYmxlW2FyZ3VtZW50cy5sZW5ndGhdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sQltMXS5vdmVybG9hZFRhYmxlPVtdLEJbTF0ub3ZlcmxvYWRUYWJsZVtRLmFyZ0NvdW50XT1RfX1mdW5jdGlvbiBMYyhCLEwsVyl7bi5oYXNPd25Qcm9wZXJ0eShCKT8oKFc9PT12b2lkIDB8fG5bQl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmbltCXS5vdmVybG9hZFRhYmxlW1ddIT09dm9pZCAwKSYmQnQoIkNhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnIitCKyInIHR3aWNlIiksZWYobixCLEIpLG4uaGFzT3duUHJvcGVydHkoVykmJkJ0KCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgiK1crIikhIiksbltCXS5vdmVybG9hZFRhYmxlW1ddPUwpOihuW0JdPUwsVyE9PXZvaWQgMCYmKG5bQl0ubnVtQXJndW1lbnRzPVcpKX1mdW5jdGlvbiBVZChCLEwsVyxRLHVlLEVlLHhlLF9lKXt0aGlzLm5hbWU9Qix0aGlzLmNvbnN0cnVjdG9yPUwsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1XLHRoaXMucmF3RGVzdHJ1Y3Rvcj1RLHRoaXMuYmFzZUNsYXNzPXVlLHRoaXMuZ2V0QWN0dWFsVHlwZT1FZSx0aGlzLnVwY2FzdD14ZSx0aGlzLmRvd25jYXN0PV9lLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119ZnVuY3Rpb24gamMoQixMLFcpe2Zvcig7TCE9PVc7KUwudXBjYXN0fHxCdCgiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAiK1cubmFtZSsiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgIitMLm5hbWUpLEI9TC51cGNhc3QoQiksTD1MLmJhc2VDbGFzcztyZXR1cm4gQn1mdW5jdGlvbiBMZChCLEwpe2lmKEw9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZCdCgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtMLiQkfHxCdCgnQ2Fubm90IHBhc3MgIicrTXIoTCkrJyIgYXMgYSAnK3RoaXMubmFtZSksTC4kJC5wdHJ8fEJ0KCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFc9TC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxRPWpjKEwuJCQucHRyLFcsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBRfWZ1bmN0aW9uIGpkKEIsTCl7dmFyIFc7aWYoTD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkJ0KCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSx0aGlzLmlzU21hcnRQb2ludGVyPyhXPXRoaXMucmF3Q29uc3RydWN0b3IoKSxCIT09bnVsbCYmQi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixXKSxXKTowO0wuJCR8fEJ0KCdDYW5ub3QgcGFzcyAiJytNcihMKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxMLiQkLnB0cnx8QnQoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSwhdGhpcy5pc0NvbnN0JiZMLiQkLnB0clR5cGUuaXNDb25zdCYmQnQoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoTC4kJC5zbWFydFB0clR5cGU/TC4kJC5zbWFydFB0clR5cGUubmFtZTpMLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFE9TC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztpZihXPWpjKEwuJCQucHRyLFEsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLHRoaXMuaXNTbWFydFBvaW50ZXIpc3dpdGNoKEwuJCQuc21hcnRQdHI9PT12b2lkIDAmJkJ0KCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOkwuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9XPUwuJCQuc21hcnRQdHI6QnQoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoTC4kJC5zbWFydFB0clR5cGU/TC4kJC5zbWFydFB0clR5cGUubmFtZTpMLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7YnJlYWs7Y2FzZSAxOlc9TC4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYoTC4kJC5zbWFydFB0clR5cGU9PT10aGlzKVc9TC4kJC5zbWFydFB0cjtlbHNle3ZhciB1ZT1MLmNsb25lKCk7Vz10aGlzLnJhd1NoYXJlKFcsaGEoZnVuY3Rpb24oKXt1ZS5kZWxldGUoKX0pKSxCIT09bnVsbCYmQi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixXKX1icmVhaztkZWZhdWx0OkJ0KCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gV31mdW5jdGlvbiB6ZChCLEwpe2lmKEw9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZCdCgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtMLiQkfHxCdCgnQ2Fubm90IHBhc3MgIicrTXIoTCkrJyIgYXMgYSAnK3RoaXMubmFtZSksTC4kJC5wdHJ8fEJ0KCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksTC4kJC5wdHJUeXBlLmlzQ29uc3QmJkJ0KCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrTC4kJC5wdHJUeXBlLm5hbWUrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFc9TC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxRPWpjKEwuJCQucHRyLFcsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBRfWZ1bmN0aW9uIEdkKEIpe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihCPXRoaXMucmF3R2V0UG9pbnRlZShCKSksQn1mdW5jdGlvbiBWZChCKXt0aGlzLnJhd0Rlc3RydWN0b3ImJnRoaXMucmF3RGVzdHJ1Y3RvcihCKX1mdW5jdGlvbiBIZChCKXtCIT09bnVsbCYmQi5kZWxldGUoKX1mdW5jdGlvbiB0ZihCLEwsVyl7aWYoTD09PVcpcmV0dXJuIEI7aWYoVy5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyIFE9dGYoQixMLFcuYmFzZUNsYXNzKTtyZXR1cm4gUT09PW51bGw/bnVsbDpXLmRvd25jYXN0KFEpfWZ1bmN0aW9uIEtkKCl7cmV0dXJuIE9iamVjdC5rZXlzKHNpKS5sZW5ndGh9ZnVuY3Rpb24gcWQoKXt2YXIgQj1bXTtmb3IodmFyIEwgaW4gc2kpc2kuaGFzT3duUHJvcGVydHkoTCkmJkIucHVzaChzaVtMXSk7cmV0dXJuIEJ9ZnVuY3Rpb24gV2QoQil7aWk9QixjaS5sZW5ndGgmJmlpJiZpaShVYyl9ZnVuY3Rpb24gWGQoKXtuLmdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ9S2Qsbi5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPXFkLG4uZmx1c2hQZW5kaW5nRGVsZXRlcz1VYyxuLnNldERlbGF5RnVuY3Rpb249V2R9dmFyIHNpPXt9O2Z1bmN0aW9uIFlkKEIsTCl7Zm9yKEw9PT12b2lkIDAmJkJ0KCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtCLmJhc2VDbGFzczspTD1CLnVwY2FzdChMKSxCPUIuYmFzZUNsYXNzO3JldHVybiBMfWZ1bmN0aW9uIEpkKEIsTCl7cmV0dXJuIEw9WWQoQixMKSxzaVtMXX1mdW5jdGlvbiBIaShCLEwpeyghTC5wdHJUeXBlfHwhTC5wdHIpJiZTcigibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZSIpO3ZhciBXPSEhTC5zbWFydFB0clR5cGUsUT0hIUwuc21hcnRQdHI7cmV0dXJuIFchPT1RJiZTcigiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIiksTC5jb3VudD17dmFsdWU6MX0scmkoT2JqZWN0LmNyZWF0ZShCLHskJDp7dmFsdWU6TH19KSl9ZnVuY3Rpb24gWmQoQil7dmFyIEw9dGhpcy5nZXRQb2ludGVlKEIpO2lmKCFMKXJldHVybiB0aGlzLmRlc3RydWN0b3IoQiksbnVsbDt2YXIgVz1KZCh0aGlzLnJlZ2lzdGVyZWRDbGFzcyxMKTtpZihXIT09dm9pZCAwKXtpZihXLiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gVy4kJC5wdHI9TCxXLiQkLnNtYXJ0UHRyPUIsVy5jbG9uZSgpO3ZhciBRPVcuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKEIpLFF9ZnVuY3Rpb24gdWUoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj9IaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjpMLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkJ9KTpIaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpCfSl9dmFyIEVlPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUoTCkseGU9JHNbRWVdO2lmKCF4ZSlyZXR1cm4gdWUuY2FsbCh0aGlzKTt2YXIgX2U7dGhpcy5pc0NvbnN0P19lPXhlLmNvbnN0UG9pbnRlclR5cGU6X2U9eGUucG9pbnRlclR5cGU7dmFyIHllPXRmKEwsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsX2UucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4geWU9PT1udWxsP3VlLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9IaShfZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6X2UscHRyOnllLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkJ9KTpIaShfZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6X2UscHRyOnllfSl9ZnVuY3Rpb24gUWQoKXtsYS5wcm90b3R5cGUuZ2V0UG9pbnRlZT1HZCxsYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1WZCxsYS5wcm90b3R5cGUuYXJnUGFja0FkdmFuY2U9OCxsYS5wcm90b3R5cGUucmVhZFZhbHVlRnJvbVBvaW50ZXI9Q28sbGEucHJvdG90eXBlLmRlbGV0ZU9iamVjdD1IZCxsYS5wcm90b3R5cGUuZnJvbVdpcmVUeXBlPVpkfWZ1bmN0aW9uIGxhKEIsTCxXLFEsdWUsRWUseGUsX2UseWUsemUsWmUpe3RoaXMubmFtZT1CLHRoaXMucmVnaXN0ZXJlZENsYXNzPUwsdGhpcy5pc1JlZmVyZW5jZT1XLHRoaXMuaXNDb25zdD1RLHRoaXMuaXNTbWFydFBvaW50ZXI9dWUsdGhpcy5wb2ludGVlVHlwZT1FZSx0aGlzLnNoYXJpbmdQb2xpY3k9eGUsdGhpcy5yYXdHZXRQb2ludGVlPV9lLHRoaXMucmF3Q29uc3RydWN0b3I9eWUsdGhpcy5yYXdTaGFyZT16ZSx0aGlzLnJhd0Rlc3RydWN0b3I9WmUsIXVlJiZMLmJhc2VDbGFzcz09PXZvaWQgMD9RPyh0aGlzLnRvV2lyZVR5cGU9TGQsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT16ZCx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9amR9ZnVuY3Rpb24gbmYoQixMLFcpe24uaGFzT3duUHJvcGVydHkoQil8fFNyKCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbCIpLG5bQl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmVyE9PXZvaWQgMD9uW0JdLm92ZXJsb2FkVGFibGVbV109TDoobltCXT1MLG5bQl0uYXJnQ291bnQ9Vyl9ZnVuY3Rpb24gJGQoQixMLFcpe3ZhciBRPW5bImR5bkNhbGxfIitCXTtyZXR1cm4gVyYmVy5sZW5ndGg/US5hcHBseShudWxsLFtMXS5jb25jYXQoVykpOlEuY2FsbChudWxsLEwpfWZ1bmN0aW9uIGV1KEIsTCxXKXtyZXR1cm4gQi5pbmRleE9mKCJqIikhPS0xPyRkKEIsTCxXKTpZZS5nZXQoTCkuYXBwbHkobnVsbCxXKX1mdW5jdGlvbiB0dShCLEwpe3ZhciBXPVtdO3JldHVybiBmdW5jdGlvbigpe1cubGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciBRPTA7UTxhcmd1bWVudHMubGVuZ3RoO1ErKylXW1FdPWFyZ3VtZW50c1tRXTtyZXR1cm4gZXUoQixMLFcpfX1mdW5jdGlvbiBYbyhCLEwpe0I9S24oQik7ZnVuY3Rpb24gVygpe3JldHVybiBCLmluZGV4T2YoImoiKSE9LTE/dHUoQixMKTpZZS5nZXQoTCl9dmFyIFE9VygpO3JldHVybiB0eXBlb2YgUSE9ImZ1bmN0aW9uIiYmQnQoInVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAiK0IrIjogIitMKSxRfXZhciBvZj12b2lkIDA7ZnVuY3Rpb24gYWYoQil7dmFyIEw9dGUoQiksVz1LbihMKTtyZXR1cm4gSyhMKSxXfWZ1bmN0aW9uIEtpKEIsTCl7dmFyIFc9W10sUT17fTtmdW5jdGlvbiB1ZShFZSl7aWYoIVFbRWVdJiYhV29bRWVdKXtpZihEYVtFZV0pe0RhW0VlXS5mb3JFYWNoKHVlKTtyZXR1cm59Vy5wdXNoKEVlKSxRW0VlXT0hMH19dGhyb3cgTC5mb3JFYWNoKHVlKSxuZXcgb2YoQisiOiAiK1cubWFwKGFmKS5qb2luKFsiLCAiXSkpfWZ1bmN0aW9uIG51KEIsTCxXLFEsdWUsRWUseGUsX2UseWUsemUsWmUsZ3Qscm4pe1plPUtuKFplKSxFZT1Ybyh1ZSxFZSksX2UmJihfZT1Ybyh4ZSxfZSkpLHplJiYoemU9WG8oeWUsemUpKSxybj1YbyhndCxybik7dmFyIEVuPW9pKFplKTtMYyhFbixmdW5jdGlvbigpe0tpKCJDYW5ub3QgY29uc3RydWN0ICIrWmUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsW1FdKX0pLGhvKFtCLEwsV10sUT9bUV06W10sZnVuY3Rpb24obW8pe21vPW1vWzBdO3ZhciBVbyxtYTtRPyhVbz1tby5yZWdpc3RlcmVkQ2xhc3MsbWE9VW8uaW5zdGFuY2VQcm90b3R5cGUpOm1hPUxhLnByb3RvdHlwZTt2YXIgbnI9QmEoRW4sZnVuY3Rpb24oKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT11Zil0aHJvdyBuZXcgQ3IoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIitaZSk7aWYoSXIuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgQ3IoWmUrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciBpMT1Jci5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdO2lmKGkxPT09dm9pZCAwKXRocm93IG5ldyBDcigiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIitaZSsiIHdpdGggaW52YWxpZCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0ZWQgKCIrT2JqZWN0LmtleXMoSXIuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKSsiKSBwYXJhbWV0ZXJzIGluc3RlYWQhIik7cmV0dXJuIGkxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHVmPU9iamVjdC5jcmVhdGUobWEse2NvbnN0cnVjdG9yOnt2YWx1ZTpucn19KTtuci5wcm90b3R5cGU9dWY7dmFyIElyPW5ldyBVZChaZSxucix1ZixybixVbyxFZSxfZSx6ZSksaFM9bmV3IGxhKFplLElyLCEwLCExLCExKSxhMT1uZXcgbGEoWmUrIioiLElyLCExLCExLCExKSxyMT1uZXcgbGEoWmUrIiBjb25zdCoiLElyLCExLCEwLCExKTtyZXR1cm4gJHNbQl09e3BvaW50ZXJUeXBlOmExLGNvbnN0UG9pbnRlclR5cGU6cjF9LG5mKEVuLG5yKSxbaFMsYTEscjFdfSl9ZnVuY3Rpb24gemMoQixMKXtmb3IodmFyIFc9W10sUT0wO1E8QjtRKyspVy5wdXNoKFdlWyhMPj4yKStRXSk7cmV0dXJuIFd9ZnVuY3Rpb24gb3UoQixMLFcsUSx1ZSxFZSl7RihMPjApO3ZhciB4ZT16YyhMLFcpO3VlPVhvKFEsdWUpO3ZhciBfZT1bRWVdLHllPVtdO2hvKFtdLFtCXSxmdW5jdGlvbih6ZSl7emU9emVbMF07dmFyIFplPSJjb25zdHJ1Y3RvciAiK3plLm5hbWU7aWYoemUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJih6ZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT1bXSksemUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbTC0xXSE9PXZvaWQgMCl0aHJvdyBuZXcgQ3IoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCIrKEwtMSkrIikgZm9yIGNsYXNzICciK3plLm5hbWUrIichIE92ZXJsb2FkIHJlc29sdXRpb24gaXMgY3VycmVudGx5IG9ubHkgcGVyZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXIgY291bnQsIG5vdCBhY3R1YWwgdHlwZSBpbmZvISIpO3JldHVybiB6ZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtMLTFdPWZ1bmN0aW9uKCl7S2koIkNhbm5vdCBjb25zdHJ1Y3QgIit6ZS5uYW1lKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLHhlKX0saG8oW10seGUsZnVuY3Rpb24oZ3Qpe3JldHVybiB6ZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtMLTFdPWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aCE9PUwtMSYmQnQoWmUrIiBjYWxsZWQgd2l0aCAiK2FyZ3VtZW50cy5sZW5ndGgrIiBhcmd1bWVudHMsIGV4cGVjdGVkICIrKEwtMSkpLHllLmxlbmd0aD0wLF9lLmxlbmd0aD1MO2Zvcih2YXIgRW49MTtFbjxMOysrRW4pX2VbRW5dPWd0W0VuXS50b1dpcmVUeXBlKHllLGFyZ3VtZW50c1tFbi0xXSk7dmFyIG1vPXVlLmFwcGx5KG51bGwsX2UpO3JldHVybiBkbih5ZSksZ3RbMF0uZnJvbVdpcmVUeXBlKG1vKX0sW119KSxbXX0pfWZ1bmN0aW9uIHJmKEIsTCl7aWYoIShCIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBCKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgVz1CYShCLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO1cucHJvdG90eXBlPUIucHJvdG90eXBlO3ZhciBRPW5ldyBXLHVlPUIuYXBwbHkoUSxMKTtyZXR1cm4gdWUgaW5zdGFuY2VvZiBPYmplY3Q/dWU6UX1mdW5jdGlvbiBjZihCLEwsVyxRLHVlKXt2YXIgRWU9TC5sZW5ndGg7RWU8MiYmQnQoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgeGU9TFsxXSE9PW51bGwmJlchPT1udWxsLF9lPSExLHllPTE7eWU8TC5sZW5ndGg7Kyt5ZSlpZihMW3llXSE9PW51bGwmJkxbeWVdLmRlc3RydWN0b3JGdW5jdGlvbj09PXZvaWQgMCl7X2U9ITA7YnJlYWt9Zm9yKHZhciB6ZT1MWzBdLm5hbWUhPT0idm9pZCIsWmU9IiIsZ3Q9IiIseWU9MDt5ZTxFZS0yOysreWUpWmUrPSh5ZSE9PTA/IiwgIjoiIikrImFyZyIreWUsZ3QrPSh5ZSE9PTA/IiwgIjoiIikrImFyZyIreWUrIldpcmVkIjt2YXIgcm49InJldHVybiBmdW5jdGlvbiAiK29pKEIpKyIoIitaZStgKSB7CmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSBgKyhFZS0yKStgKSB7CnRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiBgK0IrIiBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAiKyhFZS0yKStgIGFyZ3MhJyk7Cn0KYDtfZSYmKHJuKz1gdmFyIGRlc3RydWN0b3JzID0gW107CmApO3ZhciBFbj1fZT8iZGVzdHJ1Y3RvcnMiOiJudWxsIixtbz1bInRocm93QmluZGluZ0Vycm9yIiwiaW52b2tlciIsImZuIiwicnVuRGVzdHJ1Y3RvcnMiLCJyZXRUeXBlIiwiY2xhc3NQYXJhbSJdLFVvPVtCdCxRLHVlLGRuLExbMF0sTFsxXV07eGUmJihybis9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitFbitgLCB0aGlzKTsKYCk7Zm9yKHZhciB5ZT0wO3llPEVlLTI7Kyt5ZSlybis9InZhciBhcmciK3llKyJXaXJlZCA9IGFyZ1R5cGUiK3llKyIudG9XaXJlVHlwZSgiK0VuKyIsIGFyZyIreWUrIik7IC8vICIrTFt5ZSsyXS5uYW1lK2AKYCxtby5wdXNoKCJhcmdUeXBlIit5ZSksVW8ucHVzaChMW3llKzJdKTtpZih4ZSYmKGd0PSJ0aGlzV2lyZWQiKyhndC5sZW5ndGg+MD8iLCAiOiIiKStndCkscm4rPSh6ZT8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKyhndC5sZW5ndGg+MD8iLCAiOiIiKStndCtgKTsKYCxfZSlybis9YHJ1bkRlc3RydWN0b3JzKGRlc3RydWN0b3JzKTsKYDtlbHNlIGZvcih2YXIgeWU9eGU/MToyO3llPEwubGVuZ3RoOysreWUpe3ZhciBtYT15ZT09PTE/InRoaXNXaXJlZCI6ImFyZyIrKHllLTIpKyJXaXJlZCI7TFt5ZV0uZGVzdHJ1Y3RvckZ1bmN0aW9uIT09bnVsbCYmKHJuKz1tYSsiX2R0b3IoIittYSsiKTsgLy8gIitMW3llXS5uYW1lK2AKYCxtby5wdXNoKG1hKyJfZHRvciIpLFVvLnB1c2goTFt5ZV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9emUmJihybis9YHZhciByZXQgPSByZXRUeXBlLmZyb21XaXJlVHlwZShydik7CnJldHVybiByZXQ7CmApLHJuKz1gfQpgLG1vLnB1c2gocm4pO3ZhciBucj1yZihGdW5jdGlvbixtbykuYXBwbHkobnVsbCxVbyk7cmV0dXJuIG5yfWZ1bmN0aW9uIGF1KEIsTCxXLFEsdWUsRWUseGUsX2Upe3ZhciB5ZT16YyhXLFEpO0w9S24oTCksRWU9WG8odWUsRWUpLGhvKFtdLFtCXSxmdW5jdGlvbih6ZSl7emU9emVbMF07dmFyIFplPXplLm5hbWUrIi4iK0w7X2UmJnplLnJlZ2lzdGVyZWRDbGFzcy5wdXJlVmlydHVhbEZ1bmN0aW9ucy5wdXNoKEwpO2Z1bmN0aW9uIGd0KCl7S2koIkNhbm5vdCBjYWxsICIrWmUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIseWUpfXZhciBybj16ZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsRW49cm5bTF07cmV0dXJuIEVuPT09dm9pZCAwfHxFbi5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZFbi5jbGFzc05hbWUhPT16ZS5uYW1lJiZFbi5hcmdDb3VudD09PVctMj8oZ3QuYXJnQ291bnQ9Vy0yLGd0LmNsYXNzTmFtZT16ZS5uYW1lLHJuW0xdPWd0KTooZWYocm4sTCxaZSkscm5bTF0ub3ZlcmxvYWRUYWJsZVtXLTJdPWd0KSxobyhbXSx5ZSxmdW5jdGlvbihtbyl7dmFyIFVvPWNmKFplLG1vLHplLEVlLHhlKTtyZXR1cm4gcm5bTF0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMD8oVW8uYXJnQ291bnQ9Vy0yLHJuW0xdPVVvKTpybltMXS5vdmVybG9hZFRhYmxlW1ctMl09VW8sW119KSxbXX0pfWZ1bmN0aW9uIHJ1KEIsTCxXKXtCPUtuKEIpLGhvKFtdLFtMXSxmdW5jdGlvbihRKXtyZXR1cm4gUT1RWzBdLG5bQl09US5mcm9tV2lyZVR5cGUoVyksW119KX12YXIgR2M9W10sTW89W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dO2Z1bmN0aW9uIFZjKEIpe0I+NCYmLS1Nb1tCXS5yZWZjb3VudD09PTAmJihNb1tCXT12b2lkIDAsR2MucHVzaChCKSl9ZnVuY3Rpb24gaXUoKXtmb3IodmFyIEI9MCxMPTU7TDxNby5sZW5ndGg7KytMKU1vW0xdIT09dm9pZCAwJiYrK0I7cmV0dXJuIEJ9ZnVuY3Rpb24gY3UoKXtmb3IodmFyIEI9NTtCPE1vLmxlbmd0aDsrK0IpaWYoTW9bQl0hPT12b2lkIDApcmV0dXJuIE1vW0JdO3JldHVybiBudWxsfWZ1bmN0aW9uIHN1KCl7bi5jb3VudF9lbXZhbF9oYW5kbGVzPWl1LG4uZ2V0X2ZpcnN0X2VtdmFsPWN1fWZ1bmN0aW9uIGhhKEIpe3N3aXRjaChCKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlIG51bGw6cmV0dXJuIDI7Y2FzZSEwOnJldHVybiAzO2Nhc2UhMTpyZXR1cm4gNDtkZWZhdWx0Ont2YXIgTD1HYy5sZW5ndGg/R2MucG9wKCk6TW8ubGVuZ3RoO3JldHVybiBNb1tMXT17cmVmY291bnQ6MSx2YWx1ZTpCfSxMfX19ZnVuY3Rpb24gZnUoQixMKXtMPUtuKEwpLGlhKEIse25hbWU6TCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oVyl7dmFyIFE9TW9bV10udmFsdWU7cmV0dXJuIFZjKFcpLFF9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oVyxRKXtyZXR1cm4gaGEoUSl9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6Q28sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBkdShCLEwsVyl7c3dpdGNoKEwpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIHVlPVc/YWU6UmU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHVlW1FdKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihRKXt2YXIgdWU9Vz9OZTpKZTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodWVbUT4+MV0pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciB1ZT1XP1dlOnR0O3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1ZVtRPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrQil9fWZ1bmN0aW9uIHV1KEIsTCxXLFEpe3ZhciB1ZT1VYShXKTtMPUtuKEwpO2Z1bmN0aW9uIEVlKCl7fUVlLnZhbHVlcz17fSxpYShCLHtuYW1lOkwsY29uc3RydWN0b3I6RWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHhlKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbeGVdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKHhlLF9lKXtyZXR1cm4gX2UudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZHUoTCx1ZSxRKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pLExjKEwsRWUpfWZ1bmN0aW9uIHFpKEIsTCl7dmFyIFc9V29bQl07cmV0dXJuIFc9PT12b2lkIDAmJkJ0KEwrIiBoYXMgdW5rbm93biB0eXBlICIrYWYoQikpLFd9ZnVuY3Rpb24gbHUoQixMLFcpe3ZhciBRPXFpKEIsImVudW0iKTtMPUtuKEwpO3ZhciB1ZT1RLmNvbnN0cnVjdG9yLEVlPU9iamVjdC5jcmVhdGUoUS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpXfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6QmEoUS5uYW1lKyJfIitMLGZ1bmN0aW9uKCl7fSl9fSk7dWUudmFsdWVzW1ddPUVlLHVlW0xdPUVlfWZ1bmN0aW9uIE1yKEIpe2lmKEI9PT1udWxsKXJldHVybiJudWxsIjt2YXIgTD10eXBlb2YgQjtyZXR1cm4gTD09PSJvYmplY3QifHxMPT09ImFycmF5Inx8TD09PSJmdW5jdGlvbiI/Qi50b1N0cmluZygpOiIiK0J9ZnVuY3Rpb24gaHUoQixMKXtzd2l0Y2goTCl7Y2FzZSAyOnJldHVybiBmdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoWGVbVz4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShMZVtXPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmbG9hdCB0eXBlOiAiK0IpfX1mdW5jdGlvbiBtdShCLEwsVyl7dmFyIFE9VWEoVyk7TD1LbihMKSxpYShCLHtuYW1lOkwsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24odWUsRWUpe2lmKHR5cGVvZiBFZSE9Im51bWJlciImJnR5cGVvZiBFZSE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK01yKEVlKSsnIiB0byAnK3RoaXMubmFtZSk7cmV0dXJuIEVlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmh1KEwsUSksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBidShCLEwsVyxRLHVlLEVlKXt2YXIgeGU9emMoTCxXKTtCPUtuKEIpLHVlPVhvKFEsdWUpLExjKEIsZnVuY3Rpb24oKXtLaSgiQ2Fubm90IGNhbGwgIitCKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLHhlKX0sTC0xKSxobyhbXSx4ZSxmdW5jdGlvbihfZSl7dmFyIHllPVtfZVswXSxudWxsXS5jb25jYXQoX2Uuc2xpY2UoMSkpO3JldHVybiBuZihCLGNmKEIseWUsbnVsbCx1ZSxFZSksTC0xKSxbXX0pfWZ1bmN0aW9uIHB1KEIsTCxXKXtzd2l0Y2goTCl7Y2FzZSAwOnJldHVybiBXP2Z1bmN0aW9uKHVlKXtyZXR1cm4gYWVbdWVdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIFJlW3VlXX07Y2FzZSAxOnJldHVybiBXP2Z1bmN0aW9uKHVlKXtyZXR1cm4gTmVbdWU+PjFdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIEplW3VlPj4xXX07Y2FzZSAyOnJldHVybiBXP2Z1bmN0aW9uKHVlKXtyZXR1cm4gV2VbdWU+PjJdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIHR0W3VlPj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitCKX19ZnVuY3Rpb24gZ3UoQixMLFcsUSx1ZSl7TD1LbihMKSx1ZT09PS0xJiYodWU9NDI5NDk2NzI5NSk7dmFyIEVlPVVhKFcpLHhlPWZ1bmN0aW9uKHplKXtyZXR1cm4gemV9O2lmKFE9PT0wKXt2YXIgX2U9MzItOCpXO3hlPWZ1bmN0aW9uKHplKXtyZXR1cm4gemU8PF9lPj4+X2V9fXZhciB5ZT1MLmluZGV4T2YoInVuc2lnbmVkIikhPS0xO2lhKEIse25hbWU6TCxmcm9tV2lyZVR5cGU6eGUsdG9XaXJlVHlwZTpmdW5jdGlvbih6ZSxaZSl7aWYodHlwZW9mIFplIT0ibnVtYmVyIiYmdHlwZW9mIFplIT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrTXIoWmUpKyciIHRvICcrdGhpcy5uYW1lKTtpZihaZTxRfHxaZT51ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyICInK01yKFplKSsnIiBmcm9tIEpTIHNpZGUgdG8gQy9DKysgc2lkZSB0byBhbiBhcmd1bWVudCBvZiB0eXBlICInK0wrJyIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnK1ErIiwgIit1ZSsiXSEiKTtyZXR1cm4geWU/WmU+Pj4wOlplfDB9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6cHUoTCxFZSxRIT09MCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBfdShCLEwsVyl7dmFyIFE9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSx1ZT1RW0xdO2Z1bmN0aW9uIEVlKHhlKXt4ZT14ZT4+Mjt2YXIgX2U9dHQseWU9X2VbeGVdLHplPV9lW3hlKzFdO3JldHVybiBuZXcgdWUoZmUsemUseWUpfVc9S24oVyksaWEoQix7bmFtZTpXLGZyb21XaXJlVHlwZTpFZSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkVlfSx7aWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9uczohMH0pfWZ1bmN0aW9uIHl1KEIsTCl7TD1LbihMKTt2YXIgVz1MPT09InN0ZDo6c3RyaW5nIjtpYShCLHtuYW1lOkwsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFEpe3ZhciB1ZT10dFtRPj4yXSxFZTtpZihXKWZvcih2YXIgeGU9USs0LF9lPTA7X2U8PXVlOysrX2Upe3ZhciB5ZT1RKzQrX2U7aWYoX2U9PXVlfHxSZVt5ZV09PTApe3ZhciB6ZT15ZS14ZSxaZT1EKHhlLHplKTtFZT09PXZvaWQgMD9FZT1aZTooRWUrPSJcMCIsRWUrPVplKSx4ZT15ZSsxfX1lbHNle2Zvcih2YXIgZ3Q9bmV3IEFycmF5KHVlKSxfZT0wO19lPHVlOysrX2UpZ3RbX2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoUmVbUSs0K19lXSk7RWU9Z3Quam9pbigiIil9cmV0dXJuIEsoUSksRWV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oUSx1ZSl7dWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHVlPW5ldyBVaW50OEFycmF5KHVlKSk7dmFyIEVlLHhlPXR5cGVvZiB1ZT09InN0cmluZyI7eGV8fHVlIGluc3RhbmNlb2YgVWludDhBcnJheXx8dWUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8dWUgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fEJ0KCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksVyYmeGU/RWU9ZnVuY3Rpb24oKXtyZXR1cm4gTyh1ZSl9OkVlPWZ1bmN0aW9uKCl7cmV0dXJuIHVlLmxlbmd0aH07dmFyIF9lPUVlKCkseWU9aig0K19lKzEpO2lmKHR0W3llPj4yXT1fZSxXJiZ4ZSlIKHVlLHllKzQsX2UrMSk7ZWxzZSBpZih4ZSlmb3IodmFyIHplPTA7emU8X2U7Kyt6ZSl7dmFyIFplPXVlLmNoYXJDb2RlQXQoemUpO1plPjI1NSYmKEsoeWUpLEJ0KCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksUmVbeWUrNCt6ZV09WmV9ZWxzZSBmb3IodmFyIHplPTA7emU8X2U7Kyt6ZSlSZVt5ZSs0K3plXT11ZVt6ZV07cmV0dXJuIFEhPT1udWxsJiZRLnB1c2goSyx5ZSkseWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6Q28sZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKFEpe0soUSl9fSl9ZnVuY3Rpb24gQXUoQixMLFcpe1c9S24oVyk7dmFyIFEsdWUsRWUseGUsX2U7TD09PTI/KFE9b2UsdWU9Y2UseGU9ZGUsRWU9ZnVuY3Rpb24oKXtyZXR1cm4gSmV9LF9lPTEpOkw9PT00JiYoUT1lZSx1ZT1tZSx4ZT1sZSxFZT1mdW5jdGlvbigpe3JldHVybiB0dH0sX2U9MiksaWEoQix7bmFtZTpXLGZyb21XaXJlVHlwZTpmdW5jdGlvbih5ZSl7Zm9yKHZhciB6ZT10dFt5ZT4+Ml0sWmU9RWUoKSxndCxybj15ZSs0LEVuPTA7RW48PXplOysrRW4pe3ZhciBtbz15ZSs0K0VuKkw7aWYoRW49PXplfHxaZVttbz4+X2VdPT0wKXt2YXIgVW89bW8tcm4sbWE9UShybixVbyk7Z3Q9PT12b2lkIDA/Z3Q9bWE6KGd0Kz0iXDAiLGd0Kz1tYSkscm49bW8rTH19cmV0dXJuIEsoeWUpLGd0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKHllLHplKXt0eXBlb2YgemUhPSJzdHJpbmciJiZCdCgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgIitXKTt2YXIgWmU9eGUoemUpLGd0PWooNCtaZStMKTtyZXR1cm4gdHRbZ3Q+PjJdPVplPj5fZSx1ZSh6ZSxndCs0LFplK0wpLHllIT09bnVsbCYmeWUucHVzaChLLGd0KSxndH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpDbyxkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oeWUpe0soeWUpfX0pfWZ1bmN0aW9uIHd1KEIsTCxXLFEsdWUsRWUpe0d0W0JdPXtuYW1lOktuKEwpLHJhd0NvbnN0cnVjdG9yOlhvKFcsUSkscmF3RGVzdHJ1Y3RvcjpYbyh1ZSxFZSksZmllbGRzOltdfX1mdW5jdGlvbiBFdShCLEwsVyxRLHVlLEVlLHhlLF9lLHllLHplKXtHdFtCXS5maWVsZHMucHVzaCh7ZmllbGROYW1lOktuKEwpLGdldHRlclJldHVyblR5cGU6VyxnZXR0ZXI6WG8oUSx1ZSksZ2V0dGVyQ29udGV4dDpFZSxzZXR0ZXJBcmd1bWVudFR5cGU6eGUsc2V0dGVyOlhvKF9lLHllKSxzZXR0ZXJDb250ZXh0OnplfSl9ZnVuY3Rpb24gVHUoQixMKXtMPUtuKEwpLGlhKEIse2lzVm9pZDohMCxuYW1lOkwsYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oVyxRKXt9fSl9ZnVuY3Rpb24gZmkoQil7cmV0dXJuIEJ8fEJ0KCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK0IpLE1vW0JdLnZhbHVlfWZ1bmN0aW9uIFJ1KEIsTCxXKXtCPWZpKEIpLEw9cWkoTCwiZW12YWw6OmFzIik7dmFyIFE9W10sdWU9aGEoUSk7cmV0dXJuIFdlW1c+PjJdPXVlLEwudG9XaXJlVHlwZShRLEIpfXZhciB4dT17fTtmdW5jdGlvbiBXaShCKXt2YXIgTD14dVtCXTtyZXR1cm4gTD09PXZvaWQgMD9LbihCKTpMfXZhciBIYz1bXTtmdW5jdGlvbiBPdShCLEwsVyxRKXtCPUhjW0JdLEw9ZmkoTCksVz1XaShXKSxCKEwsVyxudWxsLFEpfWZ1bmN0aW9uIHNmKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0Ij9nbG9iYWxUaGlzOihmdW5jdGlvbigpe3JldHVybiBGdW5jdGlvbn0pKCkoInJldHVybiB0aGlzIikoKX1mdW5jdGlvbiBTdShCKXtyZXR1cm4gQj09PTA/aGEoc2YoKSk6KEI9V2koQiksaGEoc2YoKVtCXSkpfWZ1bmN0aW9uIEN1KEIpe3ZhciBMPUhjLmxlbmd0aDtyZXR1cm4gSGMucHVzaChCKSxMfWZ1bmN0aW9uIE11KEIsTCl7Zm9yKHZhciBXPW5ldyBBcnJheShCKSxRPTA7UTxCOysrUSlXW1FdPXFpKFdlWyhMPj4yKStRXSwicGFyYW1ldGVyICIrUSk7cmV0dXJuIFd9ZnVuY3Rpb24gTnUoQixMKXtmb3IodmFyIFc9TXUoQixMKSxRPVdbMF0sdWU9US5uYW1lKyJfJCIrVy5zbGljZSgxKS5tYXAoZnVuY3Rpb24oRW4pe3JldHVybiBFbi5uYW1lfSkuam9pbigiXyIpKyIkIixFZT1bInJldFR5cGUiXSx4ZT1bUV0sX2U9IiIseWU9MDt5ZTxCLTE7Kyt5ZSlfZSs9KHllIT09MD8iLCAiOiIiKSsiYXJnIit5ZSxFZS5wdXNoKCJhcmdUeXBlIit5ZSkseGUucHVzaChXWzEreWVdKTtmb3IodmFyIHplPW9pKCJtZXRob2RDYWxsZXJfIit1ZSksWmU9InJldHVybiBmdW5jdGlvbiAiK3plK2AoaGFuZGxlLCBuYW1lLCBkZXN0cnVjdG9ycywgYXJncykgewpgLGd0PTAseWU9MDt5ZTxCLTE7Kyt5ZSlaZSs9IiAgICB2YXIgYXJnIit5ZSsiID0gYXJnVHlwZSIreWUrIi5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzIisoZ3Q/IisiK2d0OiIiKStgKTsKYCxndCs9V1t5ZSsxXS5hcmdQYWNrQWR2YW5jZTtaZSs9IiAgICB2YXIgcnYgPSBoYW5kbGVbbmFtZV0oIitfZStgKTsKYDtmb3IodmFyIHllPTA7eWU8Qi0xOysreWUpV1t5ZSsxXS5kZWxldGVPYmplY3QmJihaZSs9IiAgICBhcmdUeXBlIit5ZSsiLmRlbGV0ZU9iamVjdChhcmciK3llK2ApOwpgKTtRLmlzVm9pZHx8KFplKz1gICAgIHJldHVybiByZXRUeXBlLnRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIHJ2KTsKYCksWmUrPWB9OwpgLEVlLnB1c2goWmUpO3ZhciBybj1yZihGdW5jdGlvbixFZSkuYXBwbHkobnVsbCx4ZSk7cmV0dXJuIEN1KHJuKX1mdW5jdGlvbiBJdShCKXtyZXR1cm4gQj1XaShCKSxoYShuW0JdKX1mdW5jdGlvbiBQdShCLEwpe3JldHVybiBCPWZpKEIpLEw9ZmkoTCksaGEoQltMXSl9ZnVuY3Rpb24ga3UoQil7Qj40JiYoTW9bQl0ucmVmY291bnQrPTEpfWZ1bmN0aW9uIHZ1KEIpe2Zvcih2YXIgTD0iIixXPTA7VzxCOysrVylMKz0oVyE9PTA/IiwgIjoiIikrImFyZyIrVztmb3IodmFyIFE9InJldHVybiBmdW5jdGlvbiBlbXZhbF9hbGxvY2F0b3JfIitCK2AoY29uc3RydWN0b3IsIGFyZ1R5cGVzLCBhcmdzKSB7CmAsVz0wO1c8QjsrK1cpUSs9InZhciBhcmdUeXBlIitXKyIgPSByZXF1aXJlUmVnaXN0ZXJlZFR5cGUoTW9kdWxlWydIRUFQMzInXVsoYXJnVHlwZXMgPj4+IDIpICsgIitXKyddLCAicGFyYW1ldGVyICcrVytgIik7CnZhciBhcmdgK1crIiA9IGFyZ1R5cGUiK1crYC5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzKTsKYXJncyArPSBhcmdUeXBlYCtXK2BbJ2FyZ1BhY2tBZHZhbmNlJ107CmA7cmV0dXJuIFErPSJ2YXIgb2JqID0gbmV3IGNvbnN0cnVjdG9yKCIrTCtgKTsKcmV0dXJuIF9fZW12YWxfcmVnaXN0ZXIob2JqKTsKfQpgLG5ldyBGdW5jdGlvbigicmVxdWlyZVJlZ2lzdGVyZWRUeXBlIiwiTW9kdWxlIiwiX19lbXZhbF9yZWdpc3RlciIsUSkocWksbixoYSl9dmFyIGZmPXt9O2Z1bmN0aW9uIEZ1KEIsTCxXLFEpe0I9ZmkoQik7dmFyIHVlPWZmW0xdO3JldHVybiB1ZXx8KHVlPXZ1KEwpLGZmW0xdPXVlKSx1ZShCLFcsUSl9ZnVuY3Rpb24gRHUoQil7cmV0dXJuIGhhKFdpKEIpKX1mdW5jdGlvbiBCdShCKXt2YXIgTD1Nb1tCXS52YWx1ZTtkbihMKSxWYyhCKX1mdW5jdGlvbiBVdSgpe3p0KCl9ZnVuY3Rpb24gTHUoQixMLFcpe1JlLmNvcHlXaXRoaW4oQixMLEwrVyl9ZnVuY3Rpb24ganUoQil7dHJ5e3JldHVybiBBLmdyb3coQi1mZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLGplKEEuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24genUoQil7dmFyIEw9UmUubGVuZ3RoO0I9Qj4+PjA7dmFyIFc9MjE0NzQ4MzY0ODtpZihCPlcpcmV0dXJuITE7Zm9yKHZhciBRPTE7UTw9NDtRKj0yKXt2YXIgdWU9TCooMSsuMi9RKTt1ZT1NYXRoLm1pbih1ZSxCKzEwMDY2MzI5Nik7dmFyIEVlPU1hdGgubWluKFcsYmUoTWF0aC5tYXgoQix1ZSksNjU1MzYpKSx4ZT1qdShFZSk7aWYoeGUpcmV0dXJuITB9cmV0dXJuITF9dmFyIFhpPXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oQixMKXt2YXIgVz1YaS5idWZmZXJzW0JdO0w9PT0wfHxMPT09MTA/KChCPT09MT9TOkMpKHooVywwKSksVy5sZW5ndGg9MCk6Vy5wdXNoKEwpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtYaS52YXJhcmdzKz00O3ZhciBCPVdlW1hpLnZhcmFyZ3MtND4+Ml07cmV0dXJuIEJ9LGdldFN0cjpmdW5jdGlvbihCKXt2YXIgTD1EKEIpO3JldHVybiBMfSxnZXQ2NDpmdW5jdGlvbihCLEwpe3JldHVybiBCfX07ZnVuY3Rpb24gR3UoQil7cmV0dXJuIDB9ZnVuY3Rpb24gVnUoQixMLFcsUSx1ZSl7fWZ1bmN0aW9uIEh1KEIsTCxXLFEpe2Zvcih2YXIgdWU9MCxFZT0wO0VlPFc7RWUrKyl7Zm9yKHZhciB4ZT1XZVtMK0VlKjg+PjJdLF9lPVdlW0wrKEVlKjgrNCk+PjJdLHllPTA7eWU8X2U7eWUrKylYaS5wcmludENoYXIoQixSZVt4ZSt5ZV0pO3VlKz1fZX1yZXR1cm4gV2VbUT4+Ml09dWUsMH1mdW5jdGlvbiBLdShCKXtOKEJ8MCl9Vmk9bi5JbnRlcm5hbEVycm9yPWFpKEVycm9yLCJJbnRlcm5hbEVycm9yIiksdmMoKSxDcj1uLkJpbmRpbmdFcnJvcj1haShFcnJvciwiQmluZGluZ0Vycm9yIiksQmQoKSxRZCgpLFhkKCksb2Y9bi5VbmJvdW5kVHlwZUVycm9yPWFpKEVycm9yLCJVbmJvdW5kVHlwZUVycm9yIiksc3UoKTt2YXIgcXU9e3Q6d28sSTpNZCx4Om51LHc6b3UsZDphdSxrOnJ1LEg6ZnUsbjp1dSxhOmx1LEE6bXUsaTpidSxqOmd1LGg6X3UsQjp5dSx2OkF1LHU6d3UsYzpFdSxKOlR1LG06UnUsczpPdSxiOlZjLHk6U3UscDpOdSxyOkl1LGU6UHUsZzprdSxxOkZ1LGY6RHUsbDpCdSxvOlV1LEU6THUsRjp6dSxHOkd1LEM6VnUsejpIdSxEOkt1fSxkZj1rbigpLE90PW4uX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKE90PW4uX19fd2FzbV9jYWxsX2N0b3JzPW4uYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saj1uLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oaj1uLl9tYWxsb2M9bi5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLPW4uX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oSz1uLl9mcmVlPW4uYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGU9bi5fX19nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybih0ZT1uLl9fX2dldFR5cGVOYW1lPW4uYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTWU9bi5fX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzPWZ1bmN0aW9uKCl7cmV0dXJuKE1lPW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1uLmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGN0PW4uZHluQ2FsbF9qaWppPWZ1bmN0aW9uKCl7cmV0dXJuKGN0PW4uZHluQ2FsbF9qaWppPW4uYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scHQ7ZnVuY3Rpb24gTnIoQil7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitCKyIpIix0aGlzLnN0YXR1cz1CfXduPWZ1bmN0aW9uIEIoKXtwdHx8S2MoKSxwdHx8KHduPUIpfTtmdW5jdGlvbiBLYyhCKXtpZihCPUJ8fGYsWnQ+MHx8KFB0KCksWnQ+MCkpcmV0dXJuO2Z1bmN0aW9uIEwoKXtwdHx8KHB0PSEwLG4uY2FsbGVkUnVuPSEwLCF4JiYoTHQoKSxLZSgpLG8obiksbi5vblJ1bnRpbWVJbml0aWFsaXplZCYmbi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLFZlKCkpKX1uLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe24uc2V0U3RhdHVzKCIiKX0sMSksTCgpfSwxKSk6TCgpfWlmKG4ucnVuPUtjLG4ucHJlSW5pdClmb3IodHlwZW9mIG4ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKG4ucHJlSW5pdD1bbi5wcmVJbml0XSk7bi5wcmVJbml0Lmxlbmd0aD4wOyluLnByZUluaXQucG9wKCkoKTtyZXR1cm4gS2MoKSx0LnJlYWR5fSl9KSgpO3R5cGVvZiBJbT09Im9iamVjdCImJnR5cGVvZiBXeT09Im9iamVjdCI/V3kuZXhwb3J0cz1xeTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBxeX0pOnR5cGVvZiBJbT09Im9iamVjdCImJihJbS5CQVNJUz1xeSl9KTt2YXIgWHk9e307cnQoWHkse2RlZmF1bHQ6KCk9Pks2fSk7ZnVuY3Rpb24gajYoZSx0KXtsZXQgbj1lLmt0eDJCdWZmZXIsbz1lLnN1cHBvcnRlZFRhcmdldEZvcm1hdHMsYTt0cnl7YT10UyhuKX1jYXRjaHt0aHJvdyBuZXcgdXQoIkludmFsaWQgS1RYMiBmaWxlLiIpfWlmKGEubGF5ZXJDb3VudCE9PTApdGhyb3cgbmV3IHV0KCJLVFgyIHRleHR1cmUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLiIpO2lmKGEucGl4ZWxEZXB0aCE9PTApdGhyb3cgbmV3IHV0KCJLVFgyIDNEIHRleHR1cmVzIGFyZSB1bnN1cHBvcnRlZC4iKTtsZXQgcj1hLmRhdGFGb3JtYXREZXNjcmlwdG9yWzBdLGk9bmV3IEFycmF5KGEubGV2ZWxDb3VudCk7cmV0dXJuIGEudmtGb3JtYXQ9PT0wJiYoci5jb2xvck1vZGVsPT09aVN8fHIuY29sb3JNb2RlbD09PWNTKT9HNihuLGEsbyxQbSx0LGkpOih0LnB1c2gobi5idWZmZXIpLHo2KGEsaSkpLGl9ZnVuY3Rpb24gejYoZSx0KXtsZXQgbj1lLnZrRm9ybWF0PT09Q2QuVktfRk9STUFUX1I4RzhCOF9TUkdCP1huLlJHQjpYbi5SR0JBLG87ZS52a0Zvcm1hdD09PUNkLlZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STT9vPWxvLlVOU0lHTkVEX0JZVEU6ZS52a0Zvcm1hdD09PUNkLlZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU0ZMT0FUP289bG8uSEFMRl9GTE9BVDplLnZrRm9ybWF0PT09Q2QuVktfRk9STUFUX1IzMkczMkIzMkEzMl9TRkxPQVQmJihvPWxvLkZMT0FUKTtmb3IobGV0IGE9MDthPGUubGV2ZWxzLmxlbmd0aDsrK2Epe2xldCByPXt9O3RbYV09cjtsZXQgaT1lLmxldmVsc1thXS5sZXZlbERhdGEsZj1lLnBpeGVsV2lkdGg+PmEsZD1lLnBpeGVsSGVpZ2h0Pj5hLGM9ZipkKlhuLmNvbXBvbmVudHNMZW5ndGgobik7Zm9yKGxldCB1PTA7dTxlLmZhY2VDb3VudDsrK3Upe2xldCBsPWkuYnl0ZU9mZnNldCtjKmUudHlwZVNpemUqdSxoOyFnKG8pfHxsby5zaXplSW5CeXRlcyhvKT09PTE/aD1uZXcgVWludDhBcnJheShpLmJ1ZmZlcixsLGMpOmxvLnNpemVJbkJ5dGVzKG8pPT09Mj9oPW5ldyBVaW50MTZBcnJheShpLmJ1ZmZlcixsLGMpOmg9bmV3IEZsb2F0MzJBcnJheShpLmJ1ZmZlcixsLGMpLHJbclNbdV1dPXtpbnRlcm5hbEZvcm1hdDpuLGRhdGF0eXBlOm8sd2lkdGg6ZixoZWlnaHQ6ZCxsZXZlbEJ1ZmZlcjpofX19fWZ1bmN0aW9uIEc2KGUsdCxuLG8sYSxyKXtsZXQgaT1uZXcgby5LVFgyRmlsZShlKSxmPWkuZ2V0V2lkdGgoKSxkPWkuZ2V0SGVpZ2h0KCksYz1pLmdldExldmVscygpLHU9aS5nZXRIYXNBbHBoYSgpO2lmKCEoZj4wKXx8IShkPjApfHwhKGM+MCkpdGhyb3cgaS5jbG9zZSgpLGkuZGVsZXRlKCksbmV3IHV0KCJJbnZhbGlkIEtUWDIgZmlsZSIpO2xldCBsLGgsbT10LmRhdGFGb3JtYXREZXNjcmlwdG9yWzBdLGI9by50cmFuc2NvZGVyX3RleHR1cmVfZm9ybWF0O2lmKG0uY29sb3JNb2RlbD09PWlTKWlmKG4uZXRjKWw9dT9Ybi5SR0JBOF9FVEMyX0VBQzpYbi5SR0I4X0VUQzIsaD11P2IuY1RGRVRDMl9SR0JBOmIuY1RGRVRDMV9SR0I7ZWxzZSBpZihuLmV0YzEmJiF1KWw9WG4uUkdCX0VUQzEsaD1iLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5zM3RjKWw9dT9Ybi5SR0JBX0RYVDU6WG4uUkdCX0RYVDEsaD11P2IuY1RGQkMzX1JHQkE6Yi5jVEZCQzFfUkdCO2Vsc2UgaWYobi5wdnJ0YylsPXU/WG4uUkdCQV9QVlJUQ180QlBQVjE6WG4uUkdCX1BWUlRDXzRCUFBWMSxoPXU/Yi5jVEZQVlJUQzFfNF9SR0JBOmIuY1RGUFZSVEMxXzRfUkdCO2Vsc2UgaWYobi5hc3RjKWw9WG4uUkdCQV9BU1RDLGg9Yi5jVEZBU1RDXzR4NF9SR0JBO2Vsc2UgaWYobi5iYzcpbD1Ybi5SR0JBX0JDNyxoPWIuY1RGQkM3X1JHQkE7ZWxzZSB0aHJvdyBuZXcgdXQoIk5vIHRyYW5zY29kaW5nIGZvcm1hdCB0YXJnZXQgYXZhaWxhYmxlIGZvciBFVEMxUyBjb21wcmVzc2VkIGt0eDIuIik7ZWxzZSBpZihtLmNvbG9yTW9kZWw9PT1jUylpZihuLmFzdGMpbD1Ybi5SR0JBX0FTVEMsaD1iLmNURkFTVENfNHg0X1JHQkE7ZWxzZSBpZihuLmJjNylsPVhuLlJHQkFfQkM3LGg9Yi5jVEZCQzdfUkdCQTtlbHNlIGlmKG4uczN0YylsPXU/WG4uUkdCQV9EWFQ1OlhuLlJHQl9EWFQxLGg9dT9iLmNURkJDM19SR0JBOmIuY1RGQkMxX1JHQjtlbHNlIGlmKG4uZXRjKWw9dT9Ybi5SR0JBOF9FVEMyX0VBQzpYbi5SR0I4X0VUQzIsaD11P2IuY1RGRVRDMl9SR0JBOmIuY1RGRVRDMV9SR0I7ZWxzZSBpZihuLmV0YzEmJiF1KWw9WG4uUkdCX0VUQzEsaD1iLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5wdnJ0YylsPXU/WG4uUkdCQV9QVlJUQ180QlBQVjE6WG4uUkdCX1BWUlRDXzRCUFBWMSxoPXU/Yi5jVEZQVlJUQzFfNF9SR0JBOmIuY1RGUFZSVEMxXzRfUkdCO2Vsc2UgdGhyb3cgbmV3IHV0KCJObyB0cmFuc2NvZGluZyBmb3JtYXQgdGFyZ2V0IGF2YWlsYWJsZSBmb3IgVUFTVEMgY29tcHJlc3NlZCBrdHgyLiIpO2lmKCFpLnN0YXJ0VHJhbnNjb2RpbmcoKSl0aHJvdyBpLmNsb3NlKCksaS5kZWxldGUoKSxuZXcgdXQoInN0YXJ0VHJhbnNjb2RpbmcoKSBmYWlsZWQiKTtmb3IobGV0IHA9MDtwPHQubGV2ZWxzLmxlbmd0aDsrK3Ape2xldCB5PXt9O3JbcF09eSxmPXQucGl4ZWxXaWR0aD4+cCxkPXQucGl4ZWxIZWlnaHQ+PnA7bGV0IEU9aS5nZXRJbWFnZVRyYW5zY29kZWRTaXplSW5CeXRlcyhwLDAsMCxoLnZhbHVlKSxfPW5ldyBVaW50OEFycmF5KEUpLFQ9aS50cmFuc2NvZGVJbWFnZShfLHAsMCwwLGgudmFsdWUsMCwtMSwtMSk7aWYoIWcoVCkpdGhyb3cgbmV3IHV0KCJ0cmFuc2NvZGVJbWFnZSgpIGZhaWxlZC4iKTthLnB1c2goXy5idWZmZXIpLHlbclNbMF1dPXtpbnRlcm5hbEZvcm1hdDpsLHdpZHRoOmYsaGVpZ2h0OmQsbGV2ZWxCdWZmZXI6X319cmV0dXJuIGkuY2xvc2UoKSxpLmRlbGV0ZSgpLHJ9YXN5bmMgZnVuY3Rpb24gVjYoZSx0KXtsZXQgbj1lLndlYkFzc2VtYmx5Q29uZmlnLG89YVMuZGVmYXVsdD8/c2VsZi5CQVNJUztyZXR1cm4gZyhuLndhc21CaW5hcnlGaWxlKT9QbT1hd2FpdCBvKG4pOlBtPWF3YWl0IG8oKSxQbS5pbml0aWFsaXplQmFzaXMoKSwhMH1mdW5jdGlvbiBINihlLHQpe2xldCBuPWUud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcobik/VjYoZSx0KTpqNihlLHQpfXZhciBhUyxyUyxpUyxjUyxQbSxLNixZeT1YKCgpPT57c2UoKTtRMigpO2phKCk7JDIoKTtLeSgpO1VuKCk7blMoKTthUz1jYShvUygpLDEpLHJTPVsicG9zaXRpdmVYIiwibmVnYXRpdmVYIiwicG9zaXRpdmVZIiwibmVnYXRpdmVZIiwicG9zaXRpdmVaIiwibmVnYXRpdmVaIl0saVM9MTYzLGNTPTE2NjtLNj1BdChINil9KTt2YXIgc1M9e307dmFyIEp5PVgoKCk9PntzZWxmLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtsZXQgdD1lLmRhdGEuYXJyYXksbj1zZWxmLndlYmtpdFBvc3RNZXNzYWdlfHxzZWxmLnBvc3RNZXNzYWdlO3RyeXtuKHthcnJheTp0fSxbdC5idWZmZXJdKX1jYXRjaHtuKHt9KX19fSk7dmFyIGttLHZtLGZTPVgoKCk9PntqdCgpO0llKCk7c2UoKTtrbT17fTtrbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkPWZ1bmN0aW9uKGUsdCxuLG8sYSxyKXtnKHIpP3IubGVuZ3RoPTA6cj1bXTtsZXQgaSxmLGQ7dD8oaT1uPGUsZj1vPGUsZD1hPGUpOihpPW4+ZSxmPW8+ZSxkPWE+ZSk7bGV0IGM9aStmK2QsdSxsLGgsbSxiLHA7cmV0dXJuIGM9PT0xP2k/KHU9KGUtbikvKG8tbiksbD0oZS1uKS8oYS1uKSxyLnB1c2goMSksci5wdXNoKDIpLGwhPT0xJiYoci5wdXNoKC0xKSxyLnB1c2goMCksci5wdXNoKDIpLHIucHVzaChsKSksdSE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgwKSxyLnB1c2goMSksci5wdXNoKHUpKSk6Zj8oaD0oZS1vKS8oYS1vKSxtPShlLW8pLyhuLW8pLHIucHVzaCgyKSxyLnB1c2goMCksbSE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgxKSxyLnB1c2goMCksci5wdXNoKG0pKSxoIT09MSYmKHIucHVzaCgtMSksci5wdXNoKDEpLHIucHVzaCgyKSxyLnB1c2goaCkpKTpkJiYoYj0oZS1hKS8obi1hKSxwPShlLWEpLyhvLWEpLHIucHVzaCgwKSxyLnB1c2goMSkscCE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgyKSxyLnB1c2goMSksci5wdXNoKHApKSxiIT09MSYmKHIucHVzaCgtMSksci5wdXNoKDIpLHIucHVzaCgwKSxyLnB1c2goYikpKTpjPT09Mj8haSYmbiE9PWU/KG09KGUtbykvKG4tbyksYj0oZS1hKS8obi1hKSxyLnB1c2goMCksci5wdXNoKC0xKSxyLnB1c2goMSksci5wdXNoKDApLHIucHVzaChtKSxyLnB1c2goLTEpLHIucHVzaCgyKSxyLnB1c2goMCksci5wdXNoKGIpKTohZiYmbyE9PWU/KHA9KGUtYSkvKG8tYSksdT0oZS1uKS8oby1uKSxyLnB1c2goMSksci5wdXNoKC0xKSxyLnB1c2goMiksci5wdXNoKDEpLHIucHVzaChwKSxyLnB1c2goLTEpLHIucHVzaCgwKSxyLnB1c2goMSksci5wdXNoKHUpKTohZCYmYSE9PWUmJihsPShlLW4pLyhhLW4pLGg9KGUtbykvKGEtbyksci5wdXNoKDIpLHIucHVzaCgtMSksci5wdXNoKDApLHIucHVzaCgyKSxyLnB1c2gobCksci5wdXNoKC0xKSxyLnB1c2goMSksci5wdXNoKDIpLHIucHVzaChoKSk6YyE9PTMmJihyLnB1c2goMCksci5wdXNoKDEpLHIucHVzaCgyKSkscn07a20uY29tcHV0ZUJhcnljZW50cmljQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0LG4sbyxhLHIsaSxmLGQpe2xldCBjPW4taSx1PWktYSxsPXItZixoPW8tZixtPTEvKGwqYyt1KmgpLGI9dC1mLHA9ZS1pLHk9KGwqcCt1KmIpKm0sRT0oLWgqcCtjKmIpKm0sXz0xLXktRTtyZXR1cm4gZyhkKT8oZC54PXksZC55PUUsZC56PV8sZCk6bmV3IHMoeSxFLF8pfTtrbS5jb21wdXRlTGluZVNlZ21lbnRMaW5lU2VnbWVudEludGVyc2VjdGlvbj1mdW5jdGlvbihlLHQsbixvLGEscixpLGYsZCl7bGV0IGM9KGktYSkqKHQtciktKGYtcikqKGUtYSksdT0obi1lKSoodC1yKS0oby10KSooZS1hKSxsPShmLXIpKihuLWUpLShpLWEpKihvLXQpO2lmKGw9PT0wKXJldHVybjtsZXQgaD1jL2wsbT11L2w7aWYoaD49MCYmaDw9MSYmbT49MCYmbTw9MSlyZXR1cm4gZyhkKXx8KGQ9bmV3IFkpLGQueD1lK2gqKG4tZSksZC55PXQraCooby10KSxkfTt2bT1rbX0pO3ZhciBaeT17fTtydChaeSx7ZGVmYXVsdDooKT0+Y3p9KTtmdW5jdGlvbiBheihlLHQpe2xldCBuPWUuaXNFYXN0Q2hpbGQsbz1lLmlzTm9ydGhDaGlsZCxhPW4/dHI6MCxyPW4/UW46dHIsaT1vP3RyOjAsZj1vP1FuOnRyLGQ9WDYsYz1ZNix1PUo2LGw9UTY7ZC5sZW5ndGg9MCxjLmxlbmd0aD0wLHUubGVuZ3RoPTAsbC5sZW5ndGg9MDtsZXQgaD1aNjtoLmxlbmd0aD0wO2xldCBtPXt9LGI9ZS52ZXJ0aWNlcyxwPWUuaW5kaWNlcztwPXAuc3ViYXJyYXkoMCxlLmluZGV4Q291bnRXaXRob3V0U2tpcnRzKTtsZXQgeT1yYS5jbG9uZShlLmVuY29kaW5nKSxFPXkuaGFzVmVydGV4Tm9ybWFscyxfPTAsVD1lLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyx3PWUubWluaW11bUhlaWdodCxSPWUubWF4aW11bUhlaWdodCxTPW5ldyBBcnJheShUKSxDPW5ldyBBcnJheShUKSxJPW5ldyBBcnJheShUKSxOPUU/bmV3IEFycmF5KFQqMik6dm9pZCAwLFA9MjAsdixBLHgsTSxGO2ZvcihBPTAseD0wO0E8VDsrK0EseCs9Mil7bGV0IEN0PXkuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKGIsQSxueik7aWYodj15LmRlY29kZUhlaWdodChiLEEpLE09ay5jbGFtcChDdC54KlFufDAsMCxRbiksRj1rLmNsYW1wKEN0LnkqUW58MCwwLFFuKSxJW0FdPWsuY2xhbXAoKHYtdykvKFItdykqUW58MCwwLFFuKSxNPFAmJihNPTApLEY8UCYmKEY9MCksUW4tTTxQJiYoTT1RbiksUW4tRjxQJiYoRj1RbiksU1tBXT1NLENbQV09RixFKXtsZXQgaHQ9eS5nZXRPY3RFbmNvZGVkTm9ybWFsKGIsQSxveik7Tlt4XT1odC54LE5beCsxXT1odC55fShuJiZNPj10cnx8IW4mJk08PXRyKSYmKG8mJkY+PXRyfHwhbyYmRjw9dHIpJiYobVtBXT1fLGQucHVzaChNKSxjLnB1c2goRiksdS5wdXNoKElbQV0pLEUmJihsLnB1c2goTlt4XSksbC5wdXNoKE5beCsxXSkpLCsrXyl9bGV0IFU9W107VS5wdXNoKG5ldyAkbiksVS5wdXNoKG5ldyAkbiksVS5wdXNoKG5ldyAkbik7bGV0IHo9W107ei5wdXNoKG5ldyAkbiksei5wdXNoKG5ldyAkbiksei5wdXNoKG5ldyAkbik7bGV0IEQsRztmb3IoQT0wO0E8cC5sZW5ndGg7QSs9Myl7bGV0IEN0PXBbQV0saHQ9cFtBKzFdLEt0PXBbQSsyXSxQdD1TW0N0XSxMdD1TW2h0XSxLZT1TW0t0XTtVWzBdLmluaXRpYWxpemVJbmRleGVkKFMsQyxJLE4sQ3QpLFVbMV0uaW5pdGlhbGl6ZUluZGV4ZWQoUyxDLEksTixodCksVVsyXS5pbml0aWFsaXplSW5kZXhlZChTLEMsSSxOLEt0KTtsZXQgVmU9dm0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZCh0cixuLFB0LEx0LEtlLHE2KTtEPTAsIShEPj1WZS5sZW5ndGgpJiYoRD16WzBdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChWZSxELFUpLCEoRD49VmUubGVuZ3RoKSYmKEQ9elsxXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoVmUsRCxVKSwhKEQ+PVZlLmxlbmd0aCkmJihEPXpbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFZlLEQsVSksRz12bS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKHRyLG8selswXS5nZXRWKCkselsxXS5nZXRWKCkselsyXS5nZXRWKCksZFMpLHVTKGQsYyx1LGwsaCxtLEcseixFKSxEPFZlLmxlbmd0aCYmKHpbMl0uY2xvbmUoelsxXSkselsyXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoVmUsRCxVKSxHPXZtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQodHIsbyx6WzBdLmdldFYoKSx6WzFdLmdldFYoKSx6WzJdLmdldFYoKSxkUyksdVMoZCxjLHUsbCxoLG0sRyx6LEUpKSkpKX1sZXQgSD1uPy1RbjowLE89bz8tUW46MCxaPVtdLG9lPVtdLGNlPVtdLGRlPVtdLGVlPU51bWJlci5NQVhfVkFMVUUsbWU9LWVlLGxlPVc2O2xlLmxlbmd0aD0wO2xldCBiZT1xLmNsb25lKGUuZWxsaXBzb2lkKSxmZT1TZS5jbG9uZShlLmNoaWxkUmVjdGFuZ2xlKSxhZT1mZS5ub3J0aCxSZT1mZS5zb3V0aCxOZT1mZS5lYXN0LEplPWZlLndlc3Q7Zm9yKE5lPEplJiYoTmUrPWsuVFdPX1BJKSxBPTA7QTxkLmxlbmd0aDsrK0EpTT1NYXRoLnJvdW5kKGRbQV0pLE08PWE/KFoucHVzaChBKSxNPTApOk0+PXI/KGNlLnB1c2goQSksTT1Rbik6TT1NKjIrSCxkW0FdPU0sRj1NYXRoLnJvdW5kKGNbQV0pLEY8PWk/KG9lLnB1c2goQSksRj0wKTpGPj1mPyhkZS5wdXNoKEEpLEY9UW4pOkY9RioyK08sY1tBXT1GLHY9ay5sZXJwKHcsUix1W0FdL1FuKSx2PGVlJiYoZWU9diksdj5tZSYmKG1lPXYpLHVbQV09dixGbS5sb25naXR1ZGU9ay5sZXJwKEplLE5lLE0vUW4pLEZtLmxhdGl0dWRlPWsubGVycChSZSxhZSxGL1FuKSxGbS5oZWlnaHQ9dixiZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihGbSxuaSksbGUucHVzaChuaS54KSxsZS5wdXNoKG5pLnkpLGxlLnB1c2gobmkueik7bGV0IFdlPWdlLmZyb21WZXJ0aWNlcyhsZSxzLlpFUk8sMyxleiksdHQ9eW4uZnJvbVJlY3RhbmdsZShmZSxlZSxtZSxiZSx0eiksTGU9bmV3IEVyKGJlKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQoV2UuY2VudGVyLGxlLDMsV2UuY2VudGVyLGVlLCQ2KSxqZT1tZS1lZSxpdD1uZXcgVWludDE2QXJyYXkoZC5sZW5ndGgrYy5sZW5ndGgrdS5sZW5ndGgpO2ZvcihBPTA7QTxkLmxlbmd0aDsrK0EpaXRbQV09ZFtBXTtsZXQgWWU9ZC5sZW5ndGg7Zm9yKEE9MDtBPGMubGVuZ3RoOysrQSlpdFtZZStBXT1jW0FdO2ZvcihZZSs9Yy5sZW5ndGgsQT0wO0E8dS5sZW5ndGg7KytBKWl0W1llK0FdPVFuKih1W0FdLWVlKS9qZTtsZXQgZnQ9a2UuY3JlYXRlVHlwZWRBcnJheShkLmxlbmd0aCxoKSxJdDtpZihFKXtsZXQgQ3Q9bmV3IFVpbnQ4QXJyYXkobCk7dC5wdXNoKGl0LmJ1ZmZlcixmdC5idWZmZXIsQ3QuYnVmZmVyKSxJdD1DdC5idWZmZXJ9ZWxzZSB0LnB1c2goaXQuYnVmZmVyLGZ0LmJ1ZmZlcik7cmV0dXJue3ZlcnRpY2VzOml0LmJ1ZmZlcixlbmNvZGVkTm9ybWFsczpJdCxpbmRpY2VzOmZ0LmJ1ZmZlcixtaW5pbXVtSGVpZ2h0OmVlLG1heGltdW1IZWlnaHQ6bWUsd2VzdEluZGljZXM6Wixzb3V0aEluZGljZXM6b2UsZWFzdEluZGljZXM6Y2Usbm9ydGhJbmRpY2VzOmRlLGJvdW5kaW5nU3BoZXJlOldlLG9yaWVudGVkQm91bmRpbmdCb3g6dHQsaG9yaXpvbk9jY2x1c2lvblBvaW50OkxlfX1mdW5jdGlvbiAkbigpe3RoaXMudmVydGV4QnVmZmVyPXZvaWQgMCx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLnNlY29uZD12b2lkIDAsdGhpcy5yYXRpbz12b2lkIDB9ZnVuY3Rpb24gbFMoZSx0KXsrK0RtO2xldCBuPXJ6W0RtXSxvPWl6W0RtXTtyZXR1cm4gbj1WdC5vY3REZWNvZGUoZS5maXJzdC5nZXROb3JtYWxYKCksZS5maXJzdC5nZXROb3JtYWxZKCksbiksbz1WdC5vY3REZWNvZGUoZS5zZWNvbmQuZ2V0Tm9ybWFsWCgpLGUuc2Vjb25kLmdldE5vcm1hbFkoKSxvKSxuaT1zLmxlcnAobixvLGUucmF0aW8sbmkpLHMubm9ybWFsaXplKG5pLG5pKSxWdC5vY3RFbmNvZGUobmksdCksLS1EbSx0fWZ1bmN0aW9uIHVTKGUsdCxuLG8sYSxyLGksZixkKXtpZihpLmxlbmd0aD09PTApcmV0dXJuO2xldCBjPTAsdT0wO2Zvcig7dTxpLmxlbmd0aDspdT1xb1tjKytdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChpLHUsZik7Zm9yKGxldCBsPTA7bDxjOysrbCl7bGV0IGg9cW9bbF07aWYoaC5pc0luZGV4ZWQoKSloLm5ld0luZGV4PXJbaC5pbmRleF0saC51QnVmZmVyPWUsaC52QnVmZmVyPXQsaC5oZWlnaHRCdWZmZXI9bixkJiYoaC5ub3JtYWxCdWZmZXI9byk7ZWxzZXtsZXQgbT1oLmdldEtleSgpO2lmKGcoclttXSkpaC5uZXdJbmRleD1yW21dO2Vsc2V7bGV0IGI9ZS5sZW5ndGg7ZS5wdXNoKGguZ2V0VSgpKSx0LnB1c2goaC5nZXRWKCkpLG4ucHVzaChoLmdldEgoKSksZCYmKG8ucHVzaChoLmdldE5vcm1hbFgoKSksby5wdXNoKGguZ2V0Tm9ybWFsWSgpKSksaC5uZXdJbmRleD1iLHJbbV09Yn19fWM9PT0zPyhhLnB1c2gocW9bMF0ubmV3SW5kZXgpLGEucHVzaChxb1sxXS5uZXdJbmRleCksYS5wdXNoKHFvWzJdLm5ld0luZGV4KSk6Yz09PTQmJihhLnB1c2gocW9bMF0ubmV3SW5kZXgpLGEucHVzaChxb1sxXS5uZXdJbmRleCksYS5wdXNoKHFvWzJdLm5ld0luZGV4KSxhLnB1c2gocW9bMF0ubmV3SW5kZXgpLGEucHVzaChxb1syXS5uZXdJbmRleCksYS5wdXNoKHFvWzNdLm5ld0luZGV4KSl9dmFyIFFuLHRyLHE2LGRTLFc2LEZtLG5pLFg2LFk2LEo2LFo2LFE2LCQ2LGV6LHR6LG56LG96LEpzLERtLHJ6LGl6LHFvLGN6LFF5PVgoKCk9PntVcigpO010KCk7anQoKTtJZSgpO0V0KCk7c2UoKTtxZSgpO0dzKCk7bm4oKTtmUygpO0dlKCk7d2koKTtfbigpO1ZzKCk7VW4oKTtRbj0zMjc2Nyx0cj1Rbi8yfDAscTY9W10sZFM9W10sVzY9W10sRm09bmV3IHJlLG5pPW5ldyBzLFg2PVtdLFk2PVtdLEo2PVtdLFo2PVtdLFE2PVtdLCQ2PW5ldyBzLGV6PW5ldyBnZSx0ej1uZXcgeW4sbno9bmV3IFksb3o9bmV3IHM7JG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBnKGUpfHwoZT1uZXcgJG4pLGUudUJ1ZmZlcj10aGlzLnVCdWZmZXIsZS52QnVmZmVyPXRoaXMudkJ1ZmZlcixlLmhlaWdodEJ1ZmZlcj10aGlzLmhlaWdodEJ1ZmZlcixlLm5vcm1hbEJ1ZmZlcj10aGlzLm5vcm1hbEJ1ZmZlcixlLmluZGV4PXRoaXMuaW5kZXgsZS5maXJzdD10aGlzLmZpcnN0LGUuc2Vjb25kPXRoaXMuc2Vjb25kLGUucmF0aW89dGhpcy5yYXRpbyxlfTskbi5wcm90b3R5cGUuaW5pdGlhbGl6ZUluZGV4ZWQ9ZnVuY3Rpb24oZSx0LG4sbyxhKXt0aGlzLnVCdWZmZXI9ZSx0aGlzLnZCdWZmZXI9dCx0aGlzLmhlaWdodEJ1ZmZlcj1uLHRoaXMubm9ybWFsQnVmZmVyPW8sdGhpcy5pbmRleD1hLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMuc2Vjb25kPXZvaWQgMCx0aGlzLnJhdGlvPXZvaWQgMH07JG4ucHJvdG90eXBlLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdD1mdW5jdGlvbihlLHQsbil7bGV0IG89dCsxO3JldHVybiBlW3RdIT09LTE/bltlW3RdXS5jbG9uZSh0aGlzKToodGhpcy52ZXJ0ZXhCdWZmZXI9dm9pZCAwLHRoaXMuaW5kZXg9dm9pZCAwLHRoaXMuZmlyc3Q9bltlW29dXSwrK28sdGhpcy5zZWNvbmQ9bltlW29dXSwrK28sdGhpcy5yYXRpbz1lW29dLCsrbyksb307JG4ucHJvdG90eXBlLmdldEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5kZXhlZCgpP3RoaXMuaW5kZXg6SlNPTi5zdHJpbmdpZnkoe2ZpcnN0OnRoaXMuZmlyc3QuZ2V0S2V5KCksc2Vjb25kOnRoaXMuc2Vjb25kLmdldEtleSgpLHJhdGlvOnRoaXMucmF0aW99KX07JG4ucHJvdG90eXBlLmlzSW5kZXhlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpfTskbi5wcm90b3R5cGUuZ2V0SD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMuaGVpZ2h0QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldEgoKSx0aGlzLnNlY29uZC5nZXRIKCksdGhpcy5yYXRpbyl9OyRuLnByb3RvdHlwZS5nZXRVPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5pbmRleCk/dGhpcy51QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldFUoKSx0aGlzLnNlY29uZC5nZXRVKCksdGhpcy5yYXRpbyl9OyRuLnByb3RvdHlwZS5nZXRWPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5pbmRleCk/dGhpcy52QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldFYoKSx0aGlzLnNlY29uZC5nZXRWKCksdGhpcy5yYXRpbyl9O0pzPW5ldyBZLERtPS0xLHJ6PVtuZXcgcyxuZXcgc10saXo9W25ldyBzLG5ldyBzXTskbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMl06KEpzPWxTKHRoaXMsSnMpLEpzLngpfTskbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMisxXTooSnM9bFModGhpcyxKcyksSnMueSl9O3FvPVtdO3FvLnB1c2gobmV3ICRuKTtxby5wdXNoKG5ldyAkbik7cW8ucHVzaChuZXcgJG4pO3FvLnB1c2gobmV3ICRuKTtjej1BdChheil9KTt2YXIgJHk9e307cnQoJHkse2RlZmF1bHQ6KCk9PmZ6fSk7ZnVuY3Rpb24gc3ooZSx0KXtsZXQgbj1jbS51cHNhbXBsZU1lc2goZSksbz1uLnZlcnRpY2VzLmJ1ZmZlcixhPW4uaW5kaWNlcy5idWZmZXIscj1uLndlc3RJbmRpY2VzU291dGhUb05vcnRoLmJ1ZmZlcixpPW4uc291dGhJbmRpY2VzRWFzdFRvV2VzdC5idWZmZXIsZj1uLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLmJ1ZmZlcixkPW4ubm9ydGhJbmRpY2VzV2VzdFRvRWFzdC5idWZmZXI7cmV0dXJuIHQucHVzaChvLGEscixpLGYsZCkse3ZlcnRpY2VzQnVmZmVyOm8saW5kaWNlc0J1ZmZlcjphLHZlcnRleENvdW50V2l0aG91dFNraXJ0czpuLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxpbmRleENvdW50V2l0aG91dFNraXJ0czpuLmluZGV4Q291bnRXaXRob3V0U2tpcnRzLGVuY29kaW5nOm4uZW5jb2Rpbmcsd2VzdEluZGljZXNCdWZmZXI6cixzb3V0aEluZGljZXNCdWZmZXI6aSxlYXN0SW5kaWNlc0J1ZmZlcjpmLG5vcnRoSW5kaWNlc0J1ZmZlcjpkLG1pbmltdW1IZWlnaHQ6bi5taW5pbXVtSGVpZ2h0LG1heGltdW1IZWlnaHQ6bi5tYXhpbXVtSGVpZ2h0LGJvdW5kaW5nU3BoZXJlOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxob3Jpem9uT2NjbHVzaW9uUG9pbnQ6bi5ob3Jpem9uT2NjbHVzaW9uUG9pbnR9fXZhciBmeixlMT1YKCgpPT57R18oKTtVbigpO2Z6PUF0KHN6KX0pO3ZhciBkeix0MT1YKCgpPT57ZHo9YzEoeyIuL2NvbWJpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihPcCgpLHhwKSksIi4vY3JlYXRlQm94R2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTnAoKSxNcCkpLCIuL2NyZWF0ZUJveE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihrcCgpLFBwKSksIi4vY3JlYXRlQ2lyY2xlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVnAoKSxHcCkpLCIuL2NyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihXcCgpLHFwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocjAoKSxhMCkpLCIuL2NyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihzMCgpLGMwKSksIi4vY3JlYXRlQ29ycmlkb3JHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih4MCgpLFIwKSksIi4vY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQzAoKSxTMCkpLCIuL2NyZWF0ZUN5bGluZGVyR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odjAoKSxrMCkpLCIuL2NyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFUwKCksQjApKSwiLi9jcmVhdGVFbGxpcHNlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oajAoKSxMMCkpLCIuL2NyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRzAoKSx6MCkpLCIuL2NyZWF0ZUVsbGlwc29pZEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEswKCksSDApKSwiLi9jcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWDAoKSxXMCkpLCIuL2NyZWF0ZUZydXN0dW1HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihvZygpLG5nKSksIi4vY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjZygpLGlnKSksIi4vY3JlYXRlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obzEoKSxuMSkpLCIuL2NyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQWcoKSx5ZykpLCIuL2NyZWF0ZVBsYW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVGcoKSxFZykpLCIuL2NyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE9nKCkseGcpKSwiLi9jcmVhdGVQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTmcoKSxNZykpLCIuL2NyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oa2coKSxQZykpLCIuL2NyZWF0ZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTGcoKSxVZykpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oR2coKSx6ZykpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEtnKCksSGcpKSwiLi9jcmVhdGVSZWN0YW5nbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihlXygpLCRnKSksIi4vY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG9fKCksbl8pKSwiLi9jcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGlfKCkscl8pKSwiLi9jcmVhdGVTcGhlcmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihmXygpLHNfKSksIi4vY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGxfKCksdV8pKSwiLi9jcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFVuKCksUnApKSwiLi9jcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihtXygpLGhfKSksIi4vY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocF8oKSxiXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2ludHMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeV8oKSxfXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2x5Z29ucy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih3XygpLEFfKSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihSXygpLFRfKSksIi4vY3JlYXRlVmVydGljZXNGcm9tQ2VzaXVtM0RUaWxlc1RlcnJhaW4uanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSF8oKSxWXykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUdvb2dsZUVhcnRoRW50ZXJwcmlzZUJ1ZmZlci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihXXygpLHFfKSksIi4vY3JlYXRlVmVydGljZXNGcm9tSGVpZ2h0bWFwLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEpfKCksWV8pKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21RdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkXygpLFFfKSksIi4vY3JlYXRlV2FsbEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGF5KCksb3kpKSwiLi9jcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGN5KCksaXkpKSwiLi9kZWNvZGVEcmFjby5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihoeSgpLGx5KSksIi4vZGVjb2RlR29vZ2xlRWFydGhFbnRlcnByaXNlUGFja2V0LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE55KCksTXkpKSwiLi9kZWNvZGVJM1MuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRnkoKSx2eSkpLCIuL2dhdXNzaWFuU3BsYXRTb3J0ZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oankoKSxMeSkpLCIuL2dhdXNzaWFuU3BsYXRUZXh0dXJlR2VuZXJhdG9yLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEd5KCksenkpKSwiLi9pbmNyZW1lbnRhbGx5QnVpbGRUZXJyYWluUGlja2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEh5KCksVnkpKSwiLi90cmFuc2NvZGVLVFgyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFl5KCksWHkpKSwiLi90cmFuc2ZlclR5cGVkQXJyYXlUZXN0LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEp5KCksc1MpKSwiLi91cHNhbXBsZVF1YW50aXplZFRlcnJhaW5NZXNoLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFF5KCksWnkpKSwiLi91cHNhbXBsZVZlcnRpY2VzRnJvbUNlc2l1bTNEVGlsZXNUZXJyYWluLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGUxKCksJHkpKX0pfSk7dmFyIG4xPXt9O3J0KG4xLHtkZWZhdWx0OigpPT5oen0pO2FzeW5jIGZ1bmN0aW9uIHV6KGUsdCl7bGV0IG49Qm1bdF0/P0JtW2VdO3JldHVybiBnKG4pP246Zyh0KT8odHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiP249YmEodCk6bj0oYXdhaXQgaW1wb3J0KHQpKS5kZWZhdWx0LEJtW3RdPW4sbik6KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9uPWJhKGBXb3JrZXJzLyR7ZX1gKTpuPShnKHQpP2F3YWl0IGltcG9ydCh0KTphd2FpdCBkeihgLi8ke2V9LmpzYCkpLmRlZmF1bHQsQm1bZV09bixuKX1hc3luYyBmdW5jdGlvbiBseihlLHQpe2xldCBuPWUuc3ViVGFza3Msbz1uLmxlbmd0aCxhPW5ldyBBcnJheShvKTtmb3IobGV0IHI9MDtyPG87cisrKXtsZXQgaT1uW3JdLGY9aS5nZW9tZXRyeSxkPWkubW9kdWxlTmFtZSxjPWkubW9kdWxlUGF0aDtpZihnKGQpJiZnKGMpKXRocm93IG5ldyBXdCgiTXVzdCBvbmx5IHNldCBtb2R1bGVOYW1lIG9yIG1vZHVsZVBhdGgiKTtnKGQpfHxnKGMpP2Fbcl09dXooZCxjKS50aGVuKHU9PnUoZixpLm9mZnNldCkpOmFbcl09Zn1yZXR1cm4gUHJvbWlzZS5hbGwoYSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gdXMucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhyLHQpfSl9dmFyIEJtLGh6LG8xPVgoKCk9PntKaSgpO3NlKCk7VHAoKTtVbigpO3QxKCk7Qm09e307aHo9QXQobHopfSk7dmFyIGhHPXt9O3J0KGhHLHtjb21iaW5lR2VvbWV0cnk6KCk9Pm16LGNyZWF0ZUJveEdlb21ldHJ5OigpPT5ieixjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnk6KCk9PnB6LGNyZWF0ZUNpcmNsZUdlb21ldHJ5OigpPT5neixjcmVhdGVDaXJjbGVPdXRsaW5lR2VvbWV0cnk6KCk9Pl96LGNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5OigpPT55eixjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9PkF6LGNyZWF0ZUNvcnJpZG9yR2VvbWV0cnk6KCk9Pnd6LGNyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5OigpPT5FeixjcmVhdGVDeWxpbmRlckdlb21ldHJ5OigpPT5UeixjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeTooKT0+UnosY3JlYXRlRWxsaXBzZUdlb21ldHJ5OigpPT54eixjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5OigpPT5PeixjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeTooKT0+U3osY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5OigpPT5DeixjcmVhdGVGcnVzdHVtR2VvbWV0cnk6KCk9Pk16LGNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnk6KCk9Pk56LGNyZWF0ZUdlb21ldHJ5OigpPT5JeixjcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5OigpPT5QeixjcmVhdGVQbGFuZUdlb21ldHJ5OigpPT5reixjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeTooKT0+dnosY3JlYXRlUG9seWdvbkdlb21ldHJ5OigpPT5GeixjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5OigpPT5EeixjcmVhdGVQb2x5bGluZUdlb21ldHJ5OigpPT5CeixjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5OigpPT5VeixjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeTooKT0+THosY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnk6KCk9Pmp6LGNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeTooKT0+enosY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeTooKT0+R3osY3JlYXRlU3BoZXJlR2VvbWV0cnk6KCk9PlZ6LGNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeTooKT0+SHosY3JlYXRlVGFza1Byb2Nlc3NvcldvcmtlcjooKT0+S3osY3JlYXRlVmVjdG9yVGlsZUNsYW1wZWRQb2x5bGluZXM6KCk9PnF6LGNyZWF0ZVZlY3RvclRpbGVHZW9tZXRyaWVzOigpPT5XeixjcmVhdGVWZWN0b3JUaWxlUG9pbnRzOigpPT5YeixjcmVhdGVWZWN0b3JUaWxlUG9seWdvbnM6KCk9Pll6LGNyZWF0ZVZlY3RvclRpbGVQb2x5bGluZXM6KCk9Pkp6LGNyZWF0ZVZlcnRpY2VzRnJvbUNlc2l1bTNEVGlsZXNUZXJyYWluOigpPT5aeixjcmVhdGVWZXJ0aWNlc0Zyb21Hb29nbGVFYXJ0aEVudGVycHJpc2VCdWZmZXI6KCk9PlF6LGNyZWF0ZVZlcnRpY2VzRnJvbUhlaWdodG1hcDooKT0+JHosY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2g6KCk9PmVHLGNyZWF0ZVdhbGxHZW9tZXRyeTooKT0+dEcsY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeTooKT0+bkcsZGVjb2RlRHJhY286KCk9Pm9HLGRlY29kZUdvb2dsZUVhcnRoRW50ZXJwcmlzZVBhY2tldDooKT0+YUcsZGVjb2RlSTNTOigpPT5yRyxnYXVzc2lhblNwbGF0U29ydGVyOigpPT5pRyxnYXVzc2lhblNwbGF0VGV4dHVyZUdlbmVyYXRvcjooKT0+Y0csaW5jcmVtZW50YWxseUJ1aWxkVGVycmFpblBpY2tlcjooKT0+c0csdHJhbnNjb2RlS1RYMjooKT0+ZkcsdHJhbnNmZXJUeXBlZEFycmF5VGVzdDooKT0+ZEcsdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+dUcsdXBzYW1wbGVWZXJ0aWNlc0Zyb21DZXNpdW0zRFRpbGVzVGVycmFpbjooKT0+bEd9KTt2YXIgbXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5PcCgpKX0sYno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5OcCgpKX0scHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rcCgpKX0sZ3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5WcCgpKX0sX3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XcCgpKX0seXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yMCgpKX0sQXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5zMCgpKX0sd3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT54MCgpKX0sRXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5DMCgpKX0sVHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT52MCgpKX0sUno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VMCgpKX0seHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qMCgpKX0sT3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5HMCgpKX0sU3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5LMCgpKX0sQ3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5YMCgpKX0sTXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5vZygpKX0sTno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jZygpKX0sSXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5vMSgpKX0sUHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BZygpKX0sa3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5UZygpKX0sdno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5PZygpKX0sRno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5OZygpKX0sRHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rZygpKX0sQno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5MZygpKX0sVXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5HZygpKX0sTHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5LZygpKX0sano9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lXygpKX0seno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5vXygpKX0sR3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5pXygpKX0sVno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5mXygpKX0sSHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5sXygpKX0sS3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VbigpKX0scXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tXygpKX0sV3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5wXygpKX0sWHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT55XygpKX0sWXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT53XygpKX0sSno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5SXygpKX0sWno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5IXygpKX0sUXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XXygpKX0sJHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KXygpKX0sZUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4kXygpKX0sdEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5heSgpKX0sbkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jeSgpKX0sb0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5oeSgpKX0sYUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5OeSgpKX0sckc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5GeSgpKX0saUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qeSgpKX0sY0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5HeSgpKX0sc0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5IeSgpKX0sZkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ZeSgpKX0sZEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KeSgpKX0sdUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ReSgpKX0sbEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lMSgpKX07cmV0dXJuIHlTKGhHKTt9KSgpOwo=")});var tU=rm((zPt,Yie)=>{var HPt=x(T()),V0=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)};V0.prototype.init_seed=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30;this.mt[this.mti]=(((e&4294901760)>>>16)*1812433253<<16)+(e&65535)*1812433253+this.mti,this.mt[this.mti]>>>=0}};V0.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};V0.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>>1^t[e&1];for(;n>>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};V0.prototype.random_int31=function(){return this.random_int()>>>1};V0.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};V0.prototype.random=function(){return this.random_int()*(1/4294967296)};V0.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};V0.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};Yie.exports=V0});var coe=rm((aZ,cZ)=>{var AYt=x(T());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof aZ=="object"&&aZ&&!aZ.nodeType&&aZ,n=typeof cZ=="object"&&cZ&&!cZ.nodeType&&cZ,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,b="-",f=/^xn--/,y=/[^\x20-\x7E]/,_=/[\x2E\u3002\uFF0E\uFF61]/g,S={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},A=s-a,Z=Math.floor,V=String.fromCharCode,E;function G(k){throw new RangeError(S[k])}function v(k,D){for(var w=k.length,z=[];w--;)z[w]=D(k[w]);return z}function I(k,D){var w=k.split("@"),z="";w.length>1&&(z=w[0]+"@",k=w[1]),k=k.replace(_,".");var J=k.split("."),ee=v(J,D).join(".");return z+ee}function X(k){for(var D=[],w=0,z=k.length,J,ee;w=55296&&J<=56319&&w65535&&(D-=65536,w+=V(D>>>10&1023|55296),D=56320|D&1023),w+=V(D),w}).join("")}function g(k){return k-48<10?k-22:k-65<26?k-65:k-97<26?k-97:s}function C(k,D){return k+22+75*(k<26)-((D!=0)<<5)}function R(k,D,w){var z=0;for(k=w?Z(k/u):k>>1,k+=Z(k/D);k>A*c>>1;z+=s)k=Z(k/A);return Z(z+(A+1)*k/(k+d))}function L(k){var D=[],w=k.length,z,J=0,ee=p,H=h,te,$,pe,xe,le,Te,Se,Ee,Ve;for(te=k.lastIndexOf(b),te<0&&(te=0),$=0;$=128&&G("not-basic"),D.push(k.charCodeAt($));for(pe=te>0?te+1:0;pe=w&&G("invalid-input"),Se=g(k.charCodeAt(pe++)),(Se>=s||Se>Z((r-J)/le))&&G("overflow"),J+=Se*le,Ee=Te<=H?a:Te>=H+c?c:Te-H,!(SeZ(r/Ve)&&G("overflow"),le*=Ve;z=D.length+1,H=R(J-xe,z,xe==0),Z(J/z)>r-ee&&G("overflow"),ee+=Z(J/z),J%=z,D.splice(J++,0,ee)}return N(D)}function P(k){var D,w,z,J,ee,H,te,$,pe,xe,le,Te=[],Se,Ee,Ve,we;for(k=X(k),Se=k.length,D=p,w=0,ee=h,H=0;H=D&&leZ((r-w)/Ee)&&G("overflow"),w+=(te-D)*Ee,D=te,H=0;Hr&&G("overflow"),le==D){for($=w,pe=s;xe=pe<=ee?a:pe>=ee+c?c:pe-ee,!(${var ZYt=x(T());/*! * 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 TU=="object"&&TU.exports?TU.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(loe,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;d1);p++)u.splice(0,1);s[h]=u.join("")}var b=-1,f=0,y=0,_=-1,S=!1;for(h=0;hf&&(b=_,f=y)):s[h]==="0"&&(S=!0,_=h,y=1);y>f&&(b=_,f=y),f>1&&s.splice(b,f,""),a=s.length;var A="";for(s[0]===""&&(A=":"),h=0;h{var CYt=x(T());/*! * 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 _U=="object"&&_U.exports?_U.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(uoe,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 $d=rm((hoe,SU)=>{var VYt=x(T());/*! * 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 SU=="object"&&SU.exports?SU.exports=t(coe(),doe(),moe()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(hoe,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(C,R){var L=arguments.length>=1,P=arguments.length>=2;if(!(this instanceof r))return L?P?new r(C,R):new r(C):new r;if(C===void 0){if(L)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?C=location.href+"":C=""}if(C===null&&L)throw new TypeError("null is not a valid argument for URI");return this.href(C),R!==void 0?this.absoluteTo(R):this}function s(C){return/^[0-9]+$/.test(C)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function d(C){return C.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(C){return C===void 0?"Undefined":String(Object.prototype.toString.call(C)).slice(8,-1)}function h(C){return u(C)==="Array"}function p(C,R){var L={},P,Y;if(u(R)==="RegExp")L=null;else if(h(R))for(P=0,Y=R.length;P]+|\(([^\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(C){if(!(!C||!C.nodeName)){var R=C.nodeName.toLowerCase();if(!(R==="input"&&C.type!=="image"))return r.domAttributes[R]}};function _(C){return escape(C)}function S(C){return encodeURIComponent(C).replace(/[!'()*]/g,_).replace(/\*/g,"%2A")}r.encode=S,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=S,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(C,R){var L=r.encode(C+"");return R===void 0&&(R=r.escapeQuerySpace),R?L.replace(/%20/g,"+"):L},r.decodeQuery=function(C,R){C+="",R===void 0&&(R=r.escapeQuerySpace);try{return r.decode(R?C.replace(/\+/g,"%20"):C)}catch{return C}};var A={encode:"encode",decode:"decode"},Z,V=function(C,R){return function(L){try{return r[R](L+"").replace(r.characters[C][R].expression,function(P){return r.characters[C][R].map[P]})}catch{return L}}};for(Z in A)r[Z+"PathSegment"]=V("pathname",A[Z]),r[Z+"UrnPathSegment"]=V("urnpath",A[Z]);var E=function(C,R,L){return function(P){var Y;L?Y=function(w){return r[R](r[L](w))}:Y=r[R];for(var O=(P+"").split(C),k=0,D=O.length;k-1&&(R.fragment=C.substring(L+1)||null,C=C.substring(0,L)),L=C.indexOf("?"),L>-1&&(R.query=C.substring(L+1)||null,C=C.substring(0,L)),C=C.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),C=C.replace(/^[/\\]{2,}/i,"//"),C.substring(0,2)==="//"?(R.protocol=null,C=C.substring(2),C=r.parseAuthority(C,R)):(L=C.indexOf(":"),L>-1&&(R.protocol=C.substring(0,L)||null,R.protocol&&!R.protocol.match(r.protocol_expression)?R.protocol=void 0:C.substring(L+1,L+3).replace(/\\/g,"/")==="//"?(C=C.substring(L+3),C=r.parseAuthority(C,R)):(C=C.substring(L+1),R.urn=!0))),R.path=C,R},r.parseHost=function(C,R){C||(C=""),C=C.replace(/\\/g,"/");var L=C.indexOf("/"),P,Y;if(L===-1&&(L=C.length),C.charAt(0)==="[")P=C.indexOf("]"),R.hostname=C.substring(1,P)||null,R.port=C.substring(P+2,L)||null,R.port==="/"&&(R.port=null);else{var O=C.indexOf(":"),k=C.indexOf("/"),D=C.indexOf(":",O+1);D!==-1&&(k===-1||D-1?Y:C.length-1),k;return O>-1&&(Y===-1||O-1?H=H.slice(0,te)+H.slice(te).replace(O,""):H=H.replace(O,""),!(H.length<=w[0].length)&&!(L.ignore&&L.ignore.test(H))){ee=z+H.length;var xe=R(H,z,ee,C);if(xe===void 0){P.lastIndex=ee;continue}xe=String(xe),C=C.slice(0,z)+xe+C.slice(ee),P.lastIndex=z+xe.length}}return P.lastIndex=0,C},r.ensureValidHostname=function(C,R){var L=!!C,P=!!R,Y=!1;if(P&&(Y=b(r.hostProtocols,R)),Y&&!L)throw new TypeError("Hostname cannot be empty, if protocol is "+R);if(C&&C.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+C+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(C).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+C+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(C){if(C){var R=Number(C);if(!(s(R)&&R>0&&R<65536))throw new TypeError('Port "'+C+'" is not a valid port')}},r.noConflict=function(C){if(C){var R={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(R.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(R.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(R.SecondLevelDomains=i.SecondLevelDomains.noConflict()),R}else i.URI===this&&(i.URI=o);return this},a.build=function(C){return C===!0?this._deferred_build=!0:(C===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 G(C){return function(R,L){return R===void 0?this._parts[C]||"":(this._parts[C]=R||null,this.build(!L),this)}}function v(C,R){return function(L,P){return L===void 0?this._parts[C]||"":(L!==null&&(L=L+"",L.charAt(0)===R&&(L=L.substring(1))),this._parts[C]=L,this.build(!P),this)}}a.protocol=G("protocol"),a.username=G("username"),a.password=G("password"),a.hostname=G("hostname"),a.port=G("port"),a.query=v("query","?"),a.fragment=v("fragment","#"),a.search=function(C,R){var L=this.query(C,R);return typeof L=="string"&&L.length?"?"+L:L},a.hash=function(C,R){var L=this.fragment(C,R);return typeof L=="string"&&L.length?"#"+L:L},a.pathname=function(C,R){if(C===void 0||C===!0){var L=this._parts.path||(this._parts.hostname?"/":"");return C?(this._parts.urn?r.decodeUrnPath:r.decodePath)(L):L}else return this._parts.urn?this._parts.path=C?r.recodeUrnPath(C):"":this._parts.path=C?r.recodePath(C):"/",this.build(!R),this},a.path=a.pathname,a.href=function(C,R){var L;if(C===void 0)return this.toString();this._string="",this._parts=r._parts();var P=C instanceof r,Y=typeof C=="object"&&(C.hostname||C.path||C.pathname);if(C.nodeName){var O=r.getDomAttribute(C);C=C[O]||"",Y=!1}if(!P&&Y&&C.pathname!==void 0&&(C=C.toString()),typeof C=="string"||C instanceof String)this._parts=r.parse(String(C),this._parts);else if(P||Y){var k=P?C._parts:C;for(L in k)L!=="query"&&c.call(this._parts,L)&&(this._parts[L]=k[L]);k.query&&this.query(k.query,!1)}else throw new TypeError("invalid input");return this.build(!R),this},a.is=function(C){var R=!1,L=!1,P=!1,Y=!1,O=!1,k=!1,D=!1,w=!this._parts.urn;switch(this._parts.hostname&&(w=!1,L=r.ip4_expression.test(this._parts.hostname),P=r.ip6_expression.test(this._parts.hostname),R=L||P,Y=!R,O=Y&&n&&n.has(this._parts.hostname),k=Y&&r.idn_expression.test(this._parts.hostname),D=Y&&r.punycode_expression.test(this._parts.hostname)),C.toLowerCase()){case"relative":return w;case"absolute":return!w;case"domain":case"name":return Y;case"sld":return O;case"ip":return R;case"ip4":case"ipv4":case"inet4":return L;case"ip6":case"ipv6":case"inet6":return P;case"idn":return k;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return D}return null};var I=a.protocol,X=a.port,N=a.hostname;a.protocol=function(C,R){if(C&&(C=C.replace(/:(\/\/)?$/,""),!C.match(r.protocol_expression)))throw new TypeError('Protocol "'+C+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return I.call(this,C,R)},a.scheme=a.protocol,a.port=function(C,R){return this._parts.urn?C===void 0?"":this:(C!==void 0&&(C===0&&(C=null),C&&(C+="",C.charAt(0)===":"&&(C=C.substring(1)),r.ensureValidPort(C))),X.call(this,C,R))},a.hostname=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C!==void 0){var L={preventInvalidHostname:this._parts.preventInvalidHostname},P=r.parseHost(C,L);if(P!=="/")throw new TypeError('Hostname "'+C+'" contains characters other than [A-Z0-9.-]');C=L.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(C,this._parts.protocol)}return N.call(this,C,R)},a.origin=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0){var L=this.protocol(),P=this.authority();return P?(L?L+"://":"")+this.authority():""}else{var Y=r(C);return this.protocol(Y.protocol()).authority(Y.authority()).build(!R),this}},a.host=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var L=r.parseHost(C,this._parts);if(L!=="/")throw new TypeError('Hostname "'+C+'" contains characters other than [A-Z0-9.-]');return this.build(!R),this},a.authority=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var L=r.parseAuthority(C,this._parts);if(L!=="/")throw new TypeError('Hostname "'+C+'" contains characters other than [A-Z0-9.-]');return this.build(!R),this},a.userinfo=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0){var L=r.buildUserinfo(this._parts);return L&&L.substring(0,L.length-1)}else return C[C.length-1]!=="@"&&(C+="@"),r.parseUserinfo(C,this._parts),this.build(!R),this},a.resource=function(C,R){var L;return C===void 0?this.path()+this.search()+this.hash():(L=r.parse(C),this._parts.path=L.path,this._parts.query=L.query,this._parts.fragment=L.fragment,this.build(!R),this)},a.subdomain=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0){if(!this._parts.hostname||this.is("IP"))return"";var L=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,L)||""}else{var P=this._parts.hostname.length-this.domain().length,Y=this._parts.hostname.substring(0,P),O=new RegExp("^"+d(Y));if(C&&C.charAt(C.length-1)!=="."&&(C+="."),C.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return C&&r.ensureValidHostname(C,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(O,C),this.build(!R),this}},a.domain=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(typeof C=="boolean"&&(R=C,C=void 0),C===void 0){if(!this._parts.hostname||this.is("IP"))return"";var L=this._parts.hostname.match(/\./g);if(L&&L.length<2)return this._parts.hostname;var P=this._parts.hostname.length-this.tld(R).length-1;return P=this._parts.hostname.lastIndexOf(".",P-1)+1,this._parts.hostname.substring(P)||""}else{if(!C)throw new TypeError("cannot set domain empty");if(C.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(C,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=C;else{var Y=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(Y,C)}return this.build(!R),this}},a.tld=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(typeof C=="boolean"&&(R=C,C=void 0),C===void 0){if(!this._parts.hostname||this.is("IP"))return"";var L=this._parts.hostname.lastIndexOf("."),P=this._parts.hostname.substring(L+1);return R!==!0&&n&&n.list[P.toLowerCase()]&&n.get(this._parts.hostname)||P}else{var Y;if(C)if(C.match(/[^a-zA-Z0-9-]/))if(n&&n.is(C))Y=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(Y,C);else throw new TypeError('TLD "'+C+'" 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");Y=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(Y,C)}else throw new TypeError("cannot set TLD empty");return this.build(!R),this}},a.directory=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0||C===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var L=this._parts.path.length-this.filename().length-1,P=this._parts.path.substring(0,L)||(this._parts.hostname?"/":"");return C?r.decodePath(P):P}else{var Y=this._parts.path.length-this.filename().length,O=this._parts.path.substring(0,Y),k=new RegExp("^"+d(O));return this.is("relative")||(C||(C="/"),C.charAt(0)!=="/"&&(C="/"+C)),C&&C.charAt(C.length-1)!=="/"&&(C+="/"),C=r.recodePath(C),this._parts.path=this._parts.path.replace(k,C),this.build(!R),this}},a.filename=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(typeof C!="string"){if(!this._parts.path||this._parts.path==="/")return"";var L=this._parts.path.lastIndexOf("/"),P=this._parts.path.substring(L+1);return C?r.decodePathSegment(P):P}else{var Y=!1;C.charAt(0)==="/"&&(C=C.substring(1)),C.match(/\.?\//)&&(Y=!0);var O=new RegExp(d(this.filename())+"$");return C=r.recodePath(C),this._parts.path=this._parts.path.replace(O,C),Y?this.normalizePath(R):this.build(!R),this}},a.suffix=function(C,R){if(this._parts.urn)return C===void 0?"":this;if(C===void 0||C===!0){if(!this._parts.path||this._parts.path==="/")return"";var L=this.filename(),P=L.lastIndexOf("."),Y,O;return P===-1?"":(Y=L.substring(P+1),O=/^[a-z0-9%]+$/i.test(Y)?Y:"",C?r.decodePathSegment(O):O)}else{C.charAt(0)==="."&&(C=C.substring(1));var k=this.suffix(),D;if(k)C?D=new RegExp(d(k)+"$"):D=new RegExp(d("."+k)+"$");else{if(!C)return this;this._parts.path+="."+r.recodePath(C)}return D&&(C=r.recodePath(C),this._parts.path=this._parts.path.replace(D,C)),this.build(!R),this}},a.segment=function(C,R,L){var P=this._parts.urn?":":"/",Y=this.path(),O=Y.substring(0,1)==="/",k=Y.split(P);if(C!==void 0&&typeof C!="number"&&(L=R,R=C,C=void 0),C!==void 0&&typeof C!="number")throw new Error('Bad segment "'+C+'", must be 0-based integer');if(O&&k.shift(),C<0&&(C=Math.max(k.length+C,0)),R===void 0)return C===void 0?k:k[C];if(C===null||k[C]===void 0)if(h(R)){k=[];for(var D=0,w=R.length;D{"use strict";var c7n=x(T());spe.exports=E$e;var JI=1e20;function E$e(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,b,f,y;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,b=h.getImageData(0,0,r,s),c=b.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,h=e,r=p.width,s=p.height,b=h.getImageData(0,0,r,s),c=b.data,u=4):window.ImageData&&e instanceof window.ImageData&&(b=e,r=e.width,s=e.height,c=b.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,y=Math.floor(d.length/u);f{var E7n=x(T());function w$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,b=13,f=14,y=15,_=16,S=17,A=0,Z=1,V=2,E=3,G=4;function v(g,C){return 55296<=g.charCodeAt(C)&&g.charCodeAt(C)<=56319&&56320<=g.charCodeAt(C+1)&&g.charCodeAt(C+1)<=57343}function I(g,C){C===void 0&&(C=0);var R=g.charCodeAt(C);if(55296<=R&&R<=56319&&C=1){var L=g.charCodeAt(C-1),P=R;return 55296<=L&&L<=56319?(L-55296)*1024+(P-56320)+65536:P}return R}function X(g,C,R){var L=[g].concat(C).concat([R]),P=L[L.length-2],Y=R,O=L.lastIndexOf(f);if(O>1&&L.slice(1,O).every(function(w){return w==i})&&[i,b,S].indexOf(g)==-1)return V;var k=L.lastIndexOf(o);if(k>0&&L.slice(1,k).every(function(w){return w==o})&&[p,o].indexOf(P)==-1)return L.filter(function(w){return w==o}).length%2==1?E:G;if(P==e&&Y==t)return A;if(P==n||P==e||P==t)return Y==f&&C.every(function(w){return w==i})?V:Z;if(Y==n||Y==e||Y==t)return Z;if(P==s&&(Y==s||Y==a||Y==d||Y==u))return A;if((P==d||P==a)&&(Y==a||Y==c))return A;if((P==u||P==c)&&Y==c)return A;if(Y==i||Y==y)return A;if(Y==r)return A;if(P==p)return A;var D=L.indexOf(i)!=-1?L.lastIndexOf(i)-1:L.length-2;return[b,S].indexOf(L[D])!=-1&&L.slice(D+1,-1).every(function(w){return w==i})&&Y==f||P==y&&[_,S].indexOf(Y)!=-1?A:C.indexOf(o)!=-1?V:P==o&&Y==o?A:Z}this.nextBreak=function(g,C){if(C===void 0&&(C=0),C<0)return 0;if(C>=g.length-1)return g.length;for(var R=N(I(g,C)),L=[],P=C+1;P{var W0o=x(T());/*! * protobuf.js v8.0.0 (c) 2016, daniel wirtz * compiled tue, 16 dec 2025 22:00:06 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;c1&&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,b=[],f=0,y=0,_;u>2],_=(S&3)<<4,y=1;break;case 1:b[f++]=o[_|S>>4],_=(S&15)<<2,y=2;break;case 2:b[f++]=o[_|S>>6],b[f++]=o[S&63],y=0;break}f>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,b)),f=0)}return y&&(b[f++]=o[_],b[f++]=61,y===1&&(b[f++]=61)),p?(f&&p.push(String.fromCharCode.apply(String,b.slice(0,f))),p.join("")):String.fromCharCode.apply(String,b.slice(0,f))};var a="invalid encoding";i.decode=function(d,u,h){for(var p=h,b=0,f,y=0;y1)break;if((_=r[_])===undefined)throw Error(a);switch(b){case 0:f=_,b=1;break;case 1:u[h++]=f<<2|(_&48)>>4,f=_,b=2;break;case 2:u[h++]=(f&15)<<4|(_&60)>>2,f=_,b=3;break;case 3:u[h++]=(f&3)<<6|_,b=0;break}}if(b===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;c0?0:2147483648,b,f);else if(isNaN(p))h(2143289344,b,f);else if(p>34028234663852886e22)h((y<<31|2139095040)>>>0,b,f);else if(p<11754943508222875e-54)h((y<<31|Math.round(p/1401298464324817e-60))>>>0,b,f);else{var _=Math.floor(Math.log(p)/Math.LN2),S=Math.round(p*Math.pow(2,-_)*8388608)&8388607;h((y<<31|_+127<<23|S)>>>0,b,f)}}c.writeFloatLE=d.bind(null,o),c.writeFloatBE=d.bind(null,r);function u(h,p,b){var f=h(p,b),y=(f>>31)*2+1,_=f>>>23&255,S=f&8388607;return _===255?S?NaN:y*(1/0):_===0?y*1401298464324817e-60*S:y*Math.pow(2,_-150)*(S+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(_,S,A){d[0]=_,S[A]=u[0],S[A+1]=u[1],S[A+2]=u[2],S[A+3]=u[3],S[A+4]=u[4],S[A+5]=u[5],S[A+6]=u[6],S[A+7]=u[7]}function b(_,S,A){d[0]=_,S[A]=u[7],S[A+1]=u[6],S[A+2]=u[5],S[A+3]=u[4],S[A+4]=u[3],S[A+5]=u[2],S[A+6]=u[1],S[A+7]=u[0]}c.writeDoubleLE=h?p:b,c.writeDoubleBE=h?b:p;function f(_,S){return u[0]=_[S],u[1]=_[S+1],u[2]=_[S+2],u[3]=_[S+3],u[4]=_[S+4],u[5]=_[S+5],u[6]=_[S+6],u[7]=_[S+7],d[0]}function y(_,S){return u[7]=_[S],u[6]=_[S+1],u[5]=_[S+2],u[4]=_[S+3],u[3]=_[S+4],u[2]=_[S+5],u[1]=_[S+6],u[0]=_[S+7],d[0]}c.readDoubleLE=h?f:y,c.readDoubleBE=h?y:f})():(function(){function d(h,p,b,f,y,_){var S=f<0?1:0;if(S&&(f=-f),f===0)h(0,y,_+p),h(1/f>0?0:2147483648,y,_+b);else if(isNaN(f))h(0,y,_+p),h(2146959360,y,_+b);else if(f>17976931348623157e292)h(0,y,_+p),h((S<<31|2146435072)>>>0,y,_+b);else{var A;if(f<22250738585072014e-324)A=f/5e-324,h(A>>>0,y,_+p),h((S<<31|A/4294967296)>>>0,y,_+b);else{var Z=Math.floor(Math.log(f)/Math.LN2);Z===1024&&(Z=1023),A=f*Math.pow(2,-Z),h(A*4503599627370496>>>0,y,_+p),h((S<<31|Z+1023<<20|A*1048576&1048575)>>>0,y,_+b)}}}c.writeDoubleLE=d.bind(null,o,0,4),c.writeDoubleBE=d.bind(null,r,4,0);function u(h,p,b,f,y){var _=h(f,y+p),S=h(f,y+b),A=(S>>31)*2+1,Z=S>>>20&2047,V=4294967296*(S&1048575)+_;return Z===2047?V?NaN:A*(1/0):Z===0?A*5e-324*V:A*Math.pow(2,Z-1075)*(V+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 b=r.call(d,u,u+=p);return u&7&&(u=(u|7)+1),b}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,c=0;c191&&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>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,y){return RangeError("index out of range: "+f.pos+" + "+(y||1)+" > "+f.len)}function c(f){this.buf=f,this.pos=0,this.len=f.length}var d=typeof Uint8Array<"u"?function(y){if(y instanceof Uint8Array||Array.isArray(y))return new c(y);throw Error("illegal buffer")}:function(y){if(Array.isArray(y))return new c(y);throw Error("illegal buffer")},u=function(){return i.Buffer?function(_){return(c.create=function(A){return i.Buffer.isBuffer(A)?new o(A):d(A)})(_)}:d};c.create=u(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=(function(){var y=4294967295;return function(){if(y=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(y=(y|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return y;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return y}})(),c.prototype.int32=function(){return this.uint32()|0},c.prototype.sint32=function(){var y=this.uint32();return y>>>1^-(y&1)|0};function h(){var f=new r(0,0),y=0;if(this.len-this.pos>4){for(;y<4;++y)if(f.lo=(f.lo|(this.buf[this.pos]&127)<>>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;y=0}else{for(;y<3;++y){if(this.pos>=this.len)throw a(this);if(f.lo=(f.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}return f.lo=(f.lo|(this.buf[this.pos++]&127)<>>0,f}if(this.len-this.pos>4){for(;y<5;++y)if(f.hi=(f.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}else for(;y<5;++y){if(this.pos>=this.len)throw a(this);if(f.hi=(f.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}throw Error("invalid varint encoding")}c.prototype.bool=function(){return this.uint32()!==0};function p(f,y){return(f[y-4]|f[y-3]<<8|f[y-2]<<16|f[y-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 b(){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 y=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,y},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var y=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,y},c.prototype.bytes=function(){var y=this.uint32(),_=this.pos,S=this.pos+y;if(S>this.len)throw a(this,y);if(this.pos+=y,Array.isArray(this.buf))return this.buf.slice(_,S);if(_===S){var A=i.Buffer;return A?A.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,_,S)},c.prototype.string=function(){var y=this.bytes();return s.read(y,0,y.length)},c.prototype.skip=function(y){if(typeof y=="number"){if(this.pos+y>this.len)throw a(this,y);this.pos+=y}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 y=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return h.call(this)[y](!1)},uint64:function(){return h.call(this)[y](!0)},sint64:function(){return h.call(this).zzDecode()[y](!1)},fixed64:function(){return b.call(this)[y](!0)},sfixed64:function(){return b.call(this)[y](!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(b,f){if(b)return h.emit("error",b,s),u(b);if(f===null)return h.end(!0),undefined;if(!(f instanceof c))try{f=c[h.responseDelimited?"decodeDelimited":"decode"](f)}catch(y){return h.emit("error",y,s),u(y)}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-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;d127;)V[E++]=Z&127|128,Z>>>=7;V[E]=Z}function y(Z,V){this.len=Z,this.next=undefined,this.val=V}y.prototype=Object.create(c.prototype),y.prototype.fn=f,h.prototype.uint32=function(V){return this.len+=(this.tail=this.tail.next=new y((V=V>>>0)<128?1:V<16384?2:V<2097152?3:V<268435456?4:5,V)).len,this},h.prototype.int32=function(V){return V<0?this._push(_,10,r.fromNumber(V)):this.uint32(V)},h.prototype.sint32=function(V){return this.uint32((V<<1^V>>31)>>>0)};function _(Z,V,E){for(;Z.hi;)V[E++]=Z.lo&127|128,Z.lo=(Z.lo>>>7|Z.hi<<25)>>>0,Z.hi>>>=7;for(;Z.lo>127;)V[E++]=Z.lo&127|128,Z.lo=Z.lo>>>7;V[E++]=Z.lo}h.prototype.uint64=function(V){var E=r.from(V);return this._push(_,E.length(),E)},h.prototype.int64=h.prototype.uint64,h.prototype.sint64=function(V){var E=r.from(V).zzEncode();return this._push(_,E.length(),E)},h.prototype.bool=function(V){return this._push(b,1,V?1:0)};function S(Z,V,E){V[E]=Z&255,V[E+1]=Z>>>8&255,V[E+2]=Z>>>16&255,V[E+3]=Z>>>24}h.prototype.fixed32=function(V){return this._push(S,4,V>>>0)},h.prototype.sfixed32=h.prototype.fixed32,h.prototype.fixed64=function(V){var E=r.from(V);return this._push(S,4,E.lo)._push(S,4,E.hi)},h.prototype.sfixed64=h.prototype.fixed64,h.prototype.float=function(V){return this._push(i.float.writeFloatLE,4,V)},h.prototype.double=function(V){return this._push(i.float.writeDoubleLE,8,V)};var A=i.Array.prototype.set?function(V,E,G){E.set(V,G)}:function(V,E,G){for(var v=0;v>>0;if(!E)return this._push(b,1,0);if(i.isString(V)){var G=h.alloc(E=s.length(V));s.decode(V,G,0),V=G}return this.uint32(E)._push(A,E,V)},h.prototype.string=function(V){var E=a.length(V);return E?this.uint32(E)._push(a.write,E,V):this._push(b,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 V=this.head,E=this.tail,G=this.len;return this.reset().uint32(G),G&&(this.tail.next=V.next,this.tail=E,this.len+=G),this},h.prototype.finish=function(){for(var V=this.head.next,E=this.constructor.alloc(this.len),G=0;V;)V.fn(V.val,E,G),G+=V.len,V=V.next;return E},h._configure=function(Z){o=Z,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>>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 dEe=rm((Qgo,pz)=>{var qgo=x(T());/* 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,b=c(u,h.inputOffset||0,p),f=h.noDataValue!==null?h.noDataValue:o.defaultNoDataValue,y=r(b,h.pixelType||Float32Array,h.encodedMaskData,f,h.returnMask),_={width:b.width,height:b.height,pixelData:y.resultPixels,minValue:y.minValue,maxValue:b.pixels.maxValue,noDataValue:f};return y.resultMask&&(_.maskData=y.resultMask),h.returnEncodedMask&&b.mask&&(_.encodedMaskData=b.mask.bitset?b.mask.bitset:null),h.returnFileInfo&&(_.fileInfo=s(b),h.computeUsedBitDepths&&(_.fileInfo.bitDepths=a(b))),_};var r=function(u,h,p,b,f){var y=0,_=u.pixels.numBlocksX,S=u.pixels.numBlocksY,A=Math.floor(u.width/_),Z=Math.floor(u.height/S),V=2*u.maxZError,E=Number.MAX_VALUE,G;p=p||(u.mask?u.mask.bitset:null);var v,I;v=new h(u.width*u.height),f&&p&&(I=new Uint8Array(u.width*u.height));for(var X=new Float32Array(A*Z),N,g,C=0;C<=S;C++){var R=C!==S?Z:u.height%S;if(R!==0)for(var L=0;L<=_;L++){var P=L!==_?A:u.width%_;if(P!==0){var Y=C*u.width*Z+L*A,O=u.width-P,k=u.pixels.blocks[y],D,w,z;k.encoding<2?(k.encoding===0?D=k.rawData:(d(k.stuffedData,k.bitsPerPixel,k.numValidPixels,k.offset,V,X,u.pixels.maxValue),D=X),w=0):k.encoding===2?z=0:z=k.offset;var J;if(p)for(g=0;g>3],J<<=Y&7),N=0;N>3]),J&128?(I&&(I[Y]=1),G=k.encoding<2?D[w++]:z,E=E>G?G:E,v[Y++]=G):(I&&(I[Y]=0),v[Y++]=b),J<<=1;Y+=O}else if(k.encoding<2)for(g=0;gG?G:E,v[Y++]=G;Y+=O}else for(E=E>z?z:E,g=0;g0){var _=new Uint8Array(Math.ceil(b.width*b.height/8));y=new DataView(u,h,b.mask.numBytes);var S=y.getInt16(0,!0),A=2,Z=0;do{if(S>0)for(;S--;)_[Z++]=y.getUint8(A++);else{var V=y.getUint8(A++);for(S=-S;S--;)_[Z++]=V}S=y.getInt16(A,!0),A+=2}while(A0?1:0),I=G+(b.height%G>0?1:0);b.pixels.blocks=new Array(v*I);for(var X=0,N=0;N3)throw"Invalid block encoding ("+L.encoding+")";if(L.encoding===2){h++;continue}if(P!==0&&P!==2){if(P>>=6,L.offsetType=P,P===2)L.offset=y.getInt8(1),C++;else if(P===1)L.offset=y.getInt16(1,!0),C+=2;else if(P===0)L.offset=y.getFloat32(1,!0),C+=4;else throw"Invalid block offset type";if(L.encoding===1)if(P=y.getUint8(C),C++,L.bitsPerPixel=P&63,P>>=6,L.numValidPixelsType=P,P===2)L.numValidPixels=y.getUint8(C),C++;else if(P===1)L.numValidPixels=y.getUint16(C,!0),C+=2;else if(P===0)L.numValidPixels=y.getUint32(C,!0),C+=4;else throw"Invalid valid pixel count type"}if(h+=C,L.encoding!==3){var Y,O;if(L.encoding===0){var k=(b.pixels.numBytes-1)/4;if(k!==Math.floor(k))throw"uncompressed block has invalid length";Y=new ArrayBuffer(k*4),O=new Uint8Array(Y),O.set(new Uint8Array(u,h,k*4));var D=new Float32Array(Y);L.rawData=D,h+=k*4}else if(L.encoding===1){var w=Math.ceil(L.numValidPixels*L.bitsPerPixel/8),z=Math.ceil(w/4);Y=new ArrayBuffer(z*4),O=new Uint8Array(Y),O.set(new Uint8Array(u,h,w)),L.stuffedData=new Uint32Array(Y),h+=w}}}return b.eofOffset=h,b},d=function(u,h,p,b,f,y,_){var S=(1<=h)E=G>>>V-h&S,V-=h;else{var X=h-V;E=(G&S)<>>V}y[Z]=E=u?(V=E>>>Z-u&_,Z-=u):(G=u-Z,V=(E&_)<>>Z),d[A]=p[V];else for(v=Math.ceil((y-b)/f),A=0;A=u?(V=E>>>Z-u&_,Z-=u):(G=u-Z,V=(E&_)<>>Z),d[A]=V=d?(Z=V>>>A-d&f,A-=d):(S=d-A,Z=(V&f)<>>A),E[_]=Z=u?(E=G>>>V&_,Z-=u,V+=u):(v=u-Z,E=G>>>V&_,G=c[S++],Z=32-v,E|=(G&(1<=u?(E=G>>>V&_,Z-=u,V+=u):(v=u-Z,E=G>>>V&_,G=c[S++],Z=32-v,E|=(G&(1<=d?(Z=E>>>V&f,A-=d,V+=d):(S=d-A,Z=E>>>V&f,E=c[y++],A=32-S,Z|=(E&(1<=u?(_=S>>>y-u&p,y-=u):(A=u-y,_=(S&p)<>>y),d[f]=_;return d},originalUnstuff2:function(c,d,u,h){var p=(1<=u?(S=A>>>_&p,y-=u,_+=u):(Z=u-y,S=A>>>_&p,A=c[b++],y=32-Z,S|=(A&(1<=359?359:p;p-=f;do d+=c[b++]<<8,u+=d+=c[b++];while(--f);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return h&1&&(u+=d+=c[b]<<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 b=new DataView(c,u,8),f=b.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=b.getUint32(4,!0),u+=4),b=new DataView(c,u,12),p.height=b.getUint32(0,!0),p.width=b.getUint32(4,!0),u+=8,f>=4?(p.numDims=b.getUint32(8,!0),u+=4):p.numDims=1,b=new DataView(c,u,40),p.numValidPixel=b.getUint32(0,!0),p.microBlockSize=b.getInt32(4,!0),p.blobSize=b.getInt32(8,!0),p.imageType=b.getInt32(12,!0),p.maxZError=b.getFloat64(16,!0),p.zMin=b.getFloat64(24,!0),p.zMax=b.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var y,_;if(f>=3&&(_=f>=4?52:48,y=this.computeChecksumFletcher32(new Uint8Array(c,u-_,p.blobSize-14)),y!==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),b=this.readSubArray(c,d.ptr,h,p),f=this.readSubArray(c,d.ptr+p,h,p);d.ptr+=2*p;var y,_=!0;for(y=0;y0){_=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,y.numBytes);var A=f.getInt16(0,!0),Z=2,V=0,E=0;do{if(A>0)for(;A--;)_[V++]=f.getUint8(Z++);else for(E=f.getUint8(Z++),A=-A;A--;)_[V++]=E;A=f.getInt16(Z,!0),Z+=2}while(Z>3],G<<=v&7):G=_[v>>3],G&128&&(S[v]=1);d.pixels.resultMask=S,y.bitset=_,u+=y.numBytes}return d.ptr=u,d.mask=y,!0},readDataOneSweep:function(c,d,u){var h=d.ptr,p=d.headerInfo,b=p.numDims,f=p.width*p.height,y=p.imageType,_=p.numValidPixel*r.getDataTypeSize(y)*b,S,A=d.pixels.resultMask;if(u===Uint8Array)S=new Uint8Array(c,h,_);else{var Z=new ArrayBuffer(_),V=new Uint8Array(Z);V.set(new Uint8Array(c,h,_)),S=new u(Z)}if(S.length===f*b)d.pixels.resultPixels=S;else{d.pixels.resultPixels=new u(f*b);var E=0,G=0,v=0,I=0;if(b>1)for(v=0;v=y)return!1;var _=new Uint32Array(y-f);r.decodeBits(c,d,_);var S=[],A,Z,V,E;for(A=f;A0&&(S[Z].second=C<>>32-E,32-g>=E?(g+=E,g===32&&(g=0,R++,C=N[R])):(g+=E-32,R++,C=N[R],S[Z].second|=C>>>32-g));var L=0,P=0,Y=new s;for(A=0;A=u?P=u:P=L,L>=30&&console.log("WARning, large NUM LUT BITS IS "+L);var O=[],k,D,w,z,J,ee;for(A=f;A0)if(k=[E,Z],E<=P)for(D=S[Z].second<=0;z--)J=D>>>z&1,J?(ee.right||(ee.right=new s),ee=ee.right):(ee.left||(ee.left=new s),ee=ee.left),z===0&&!ee.val&&(ee.val=k[1]);return{decodeLut:O,numBitsLUTQick:P,numBitsLUT:L,tree:Y,stuffedData:N,srcPtr:R,bitPos:g}},readHuffman:function(c,d,u){var h=d.headerInfo,p=h.numDims,b=d.headerInfo.height,f=d.headerInfo.width,y=f*b,_=this.readHuffmanTree(c,d),S=_.decodeLut,A=_.tree,Z=_.stuffedData,V=_.srcPtr,E=_.bitPos,G=_.numBitsLUTQick,v=_.numBitsLUT,I=d.headerInfo.imageType===0?128:0,X,N,g,C=d.pixels.resultMask,R,L,P,Y,O,k,D,w=0;E>0&&(V++,E=0);var z=Z[V],J=d.encodeMode===1,ee=new u(y*p),H=ee,te;for(te=0;te1&&(H=new u(ee.buffer,y*te,y),w=0),d.headerInfo.numValidPixel===f*b)for(k=0,Y=0;Y>>32-G,L=R,32-E>>64-E-G,L=R),S[L])N=S[L][1],E+=S[L][0];else for(R=z<>>32-v,L=R,32-E>>64-E-v,L=R),X=A,D=0;D>>v-D-1&1,X=P?X.right:X.left,!(X.left||X.right)){N=X.val,E=E+D+1;break}E>=32&&(E-=32,V++,z=Z[V]),g=N-I,J?(O>0?g+=w:Y>0?g+=H[k-f]:g+=w,g&=255,H[k]=g,w=g):H[k]=g}else for(k=0,Y=0;Y>>32-G,L=R,32-E>>64-E-G,L=R),S[L])N=S[L][1],E+=S[L][0];else for(R=z<>>32-v,L=R,32-E>>64-E-v,L=R),X=A,D=0;D>>v-D-1&1,X=P?X.right:X.left,!(X.left||X.right)){N=X.val,E=E+D+1;break}E>=32&&(E-=32,V++,z=Z[V]),g=N-I,J?(O>0&&C[k-1]?g+=w:Y>0&&C[k-f]?g+=H[k-f]:g+=w,g&=255,H[k]=g,w=g):H[k]=g}d.ptr=d.ptr+(V+1)*4+(E>0?4:0)}d.pixels.resultPixels=ee},decodeBits:function(c,d,u,h,p){{var b=d.headerInfo,f=b.fileVersion,y=0,_=new DataView(c,d.ptr,5),S=_.getUint8(0);y++;var A=S>>6,Z=A===0?4:3-A,V=(S&32)>0,E=S&31,G=0;if(Z===1)G=_.getUint8(y),y++;else if(Z===2)G=_.getUint16(y,!0),y+=2;else if(Z===4)G=_.getUint32(y,!0),y+=4;else throw"Invalid valid pixel count type";var v=2*b.maxZError,I,X,N,g,C,R,L,P,Y,O,k=b.numDims>1?b.maxValues[p]:b.zMax;if(V){for(d.counter.lut++,P=_.getUint8(y),Y=E,y++,g=Math.ceil((P-1)*E/8),C=Math.ceil(g/4),X=new ArrayBuffer(C*4),N=new Uint8Array(X),d.ptr+=y,N.set(new Uint8Array(c,d.ptr,g)),L=new Uint32Array(X),d.ptr+=g,O=0;P-1>>>O;)O++;g=Math.ceil(G*O/8),C=Math.ceil(g/4),X=new ArrayBuffer(C*4),N=new Uint8Array(X),N.set(new Uint8Array(c,d.ptr,g)),I=new Uint32Array(X),d.ptr+=g,f>=3?R=o.unstuffLUT2(L,E,P-1,h,v,k):R=o.unstuffLUT(L,E,P-1,h,v,k),f>=3?o.unstuff2(I,u,O,G,R):o.unstuff(I,u,O,G,R)}else d.counter.bitstuffer++,O=E,d.ptr+=y,O>0&&(g=Math.ceil(G*O/8),C=Math.ceil(g/4),X=new ArrayBuffer(C*4),N=new Uint8Array(X),N.set(new Uint8Array(c,d.ptr,g)),I=new Uint32Array(X),d.ptr+=g,f>=3?h==null?o.originalUnstuff2(I,u,O,G):o.unstuff2(I,u,O,G,!1,h,v,k):h==null?o.originalUnstuff(I,u,O,G):o.unstuff(I,u,O,G,!1,h,v,k))}},readTiles:function(c,d,u){var h=d.headerInfo,p=h.width,b=h.height,f=h.microBlockSize,y=h.imageType,_=r.getDataTypeSize(y),S=Math.ceil(p/f),A=Math.ceil(b/f);d.pixels.numBlocksY=A,d.pixels.numBlocksX=S,d.pixels.ptr=0;var Z=0,V=0,E=0,G=0,v=0,I=0,X=0,N=0,g=0,C=0,R=0,L=0,P=0,Y=0,O=0,k=0,D,w,z,J,ee,H,te=new u(f*f),$=b%f||f,pe=p%f||f,xe,le,Te=h.numDims,Se,Ee=d.pixels.resultMask,Ve=d.pixels.resultPixels;for(E=0;E1&&(Ve=new u(d.pixels.resultPixels.buffer,p*b*Se*_,p*b)),X=c.byteLength-d.ptr,D=new DataView(c,d.ptr,Math.min(10,X)),w={},k=0,N=D.getUint8(0),k++,g=N>>6&255,C=N>>2&15,C!==(G*f>>3&15))throw"integrity issue";if(H=N&3,H>3)throw d.ptr+=k,"Invalid block encoding ("+H+")";if(H===2){d.counter.constant++,d.ptr+=k;continue}else if(H===0){if(d.counter.uncompressed++,d.ptr+=k,P=v*I*_,Y=c.byteLength-d.ptr,P=P1)for(b=0;b=-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 b=p.headerInfo,f=b.fileVersion,y=r.getDataTypeArray(b.imageType);r.readMask(c,p),b.numValidPixel!==b.width*b.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var _=b.width*b.height;if(p.pixels.resultPixels=new y(_*b.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},b.numValidPixel!==0)if(b.zMax===b.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var S=new DataView(c,p.ptr,2),A=S.getUint8(0);if(p.ptr++,A)r.readDataOneSweep(c,p,y);else if(f>1&&b.imageType<=1&&Math.abs(b.maxZError-.5)<1e-5){var Z=S.getUint8(1);if(p.ptr++,p.encodeMode=Z,Z>2||f<4&&Z>1)throw"Invalid Huffman flag "+Z;Z?r.readHuffman(c,p,y):r.readTiles(c,p,y)}else r.readTiles(c,p,y)}p.eofOffset=p.ptr;var V;d.inputOffset?(V=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(V)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(V=p.headerInfo.blobSize-p.ptr,Math.abs(V)>=1&&(p.eofOffset=p.headerInfo.blobSize));var E={width:b.width,height:b.height,pixelData:p.pixels.resultPixels,minValue:b.zMin,maxValue:b.zMax,validPixelCount:b.numValidPixel,dimCount:b.numDims,dimStats:{minValues:b.minValues,maxValues:b.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(b.imageType,u)){var G=p.pixels.resultMask;for(h=0;h<_;h++)G[h]||(E.pixelData[h]=u);E.noDataValue=u}return p.noDataValue=u,d.returnFileInfo&&(E.fileInfo=r.formatFileInfo(p)),E}},getBandCount:function(c){var d=0,u=0,h={};for(h.ptr=0,h.pixels={};u1&&A.fileInfo.mask&&A.fileInfo.mask.numBytes>0&&f.push(A.maskData),h++,S.pixels.push(A.pixelData),S.statistics.push({minValue:A.minValue,maxValue:A.maxValue,noDataValue:A.noDataValue,dimStats:A.dimStats})}var Z,V,E;if(u>1&&f.length>1){for(E=S.width*S.height,S.bandMasks=f,_=new Uint8Array(E),_.set(f[0]),Z=1;Z{var Rjo=x(T());PGe.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 YGe=rm((Ejo,NGe)=>{var Gjo=x(T()),{webm:tPt,mp4:nPt}=XGe(),_ie=()=>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,Sie=()=>"wakeLock"in navigator,Aie=class{constructor(){if(this.enabled=!1,Sie()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else _ie()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",tPt),this._addSourceToVideo(this.noSleepVideo,"mp4",nPt),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 Sie()?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}):_ie()?(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(){Sie()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):_ie()?this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};NGe.exports=Aie});var FPt={};tLe(FPt,{AlphaMode:()=>Tp,AlphaPipelineStage:()=>uF,AnchorPointDirect:()=>f2,AnchorPointIndirect:()=>p2,Animation:()=>uk,AnimationViewModel:()=>mk,Appearance:()=>Ao,ApproximateTerrainHeights:()=>Wi,ArcGISTiledElevationTerrainProvider:()=>gne,ArcGisBaseMapType:()=>tf,ArcGisMapServerImageryProvider:()=>Ab,ArcGisMapService:()=>hu,ArcType:()=>cn,ArticulationStageType:()=>nl,AssociativeArray:()=>Xt,Atmosphere:()=>C_,AtmospherePipelineStage:()=>B2,AttributeCompression:()=>tn,AttributeType:()=>Mt,AutoExposure:()=>fM,AutomaticUniforms:()=>R0,Axis:()=>ao,AxisAlignedBoundingBox:()=>ru,Azure2DImageryProvider:()=>HF,B3dmLoader:()=>G2,B3dmParser:()=>V2,BaseLayerPicker:()=>fk,BaseLayerPickerViewModel:()=>hk,BatchTable:()=>wT,BatchTableHierarchy:()=>c_,BatchTexture:()=>wl,BatchTexturePipelineStage:()=>mF,Billboard:()=>Go,BillboardCollection:()=>Tu,BillboardGraphics:()=>Hc,BillboardLoadState:()=>Ys,BillboardTexture:()=>Rb,BillboardVisualizer:()=>tW,BingMapsGeocoderService:()=>xne,BingMapsImageryProvider:()=>NF,BingMapsStyle:()=>LC,BlendEquation:()=>Vc,BlendFunction:()=>Ko,BlendOption:()=>Qo,BlendingState:()=>rn,BoundingRectangle:()=>Qe,BoundingSphere:()=>de,BoundingSphereState:()=>Tt,BoundingVolumeSemantics:()=>Ey,BoxEmitter:()=>dte,BoxGeometry:()=>Zc,BoxGeometryUpdater:()=>hv,BoxGraphics:()=>HT,BoxOutlineGeometry:()=>Ih,BrdfLutGenerator:()=>gw,Buffer:()=>qe,BufferLoader:()=>f_,BufferPoint:()=>Fd,BufferPointCollection:()=>Xb,BufferPointMaterial:()=>Fb,BufferPolygon:()=>Pa,BufferPolygonCollection:()=>Yb,BufferPolygonMaterial:()=>Nb,BufferPolyline:()=>Jl,BufferPolylineCollection:()=>ex,BufferPolylineMaterial:()=>wb,BufferPrimitive:()=>ts,BufferPrimitiveCollection:()=>oc,BufferPrimitiveMaterial:()=>Kl,BufferUsage:()=>Fe,CPUStylingPipelineStage:()=>bF,CallbackPositionProperty:()=>fv,CallbackProperty:()=>Mh,Camera:()=>Vo,CameraEventAggregator:()=>_M,CameraEventType:()=>oo,CameraFlightPath:()=>xw,Cartesian2:()=>M,Cartesian3:()=>m,Cartesian4:()=>se,CartesianRectangle:()=>UC,Cartographic:()=>be,CartographicGeocoderService:()=>_ne,CatmullRomSpline:()=>Sne,Cesium3DContentGroup:()=>a_,Cesium3DTile:()=>Bm,Cesium3DTileBatchTable:()=>Oh,Cesium3DTileColorBlendMode:()=>Ad,Cesium3DTileContent:()=>ute,Cesium3DTileContentFactory:()=>nS,Cesium3DTileContentState:()=>fr,Cesium3DTileContentType:()=>ha,Cesium3DTileFeature:()=>Ga,Cesium3DTileFeatureTable:()=>Qh,Cesium3DTileOptimizationHint:()=>Mm,Cesium3DTileOptimizations:()=>jP,Cesium3DTilePass:()=>or,Cesium3DTilePassState:()=>lh,Cesium3DTilePointFeature:()=>Eb,Cesium3DTileRefine:()=>dr,Cesium3DTileStyle:()=>Mb,Cesium3DTileStyleEngine:()=>nX,Cesium3DTilesInspector:()=>Gk,Cesium3DTilesInspectorViewModel:()=>Ek,Cesium3DTilesTerrainData:()=>$9,Cesium3DTilesTerrainGeometryProcessor:()=>pR,Cesium3DTilesTerrainProvider:()=>Ene,Cesium3DTilesVoxelProvider:()=>mte,Cesium3DTileset:()=>$s,Cesium3DTilesetBaseTraversal:()=>cX,Cesium3DTilesetCache:()=>$P,Cesium3DTilesetGraphics:()=>e_,Cesium3DTilesetHeatmap:()=>eX,Cesium3DTilesetMetadata:()=>mS,Cesium3DTilesetMostDetailedTraversal:()=>rX,Cesium3DTilesetSkipTraversal:()=>uX,Cesium3DTilesetStatistics:()=>ff,Cesium3DTilesetTraversal:()=>Ya,Cesium3DTilesetVisualizer:()=>mX,CesiumInspector:()=>Ak,CesiumInspectorViewModel:()=>Sk,CesiumTerrainProvider:()=>OA,CesiumWidget:()=>T9,Check:()=>Do,CheckerboardMaterialProperty:()=>hV,CircleEmitter:()=>Z9,CircleGeometry:()=>Gne,CircleOutlineGeometry:()=>Lne,ClassificationModelDrawCommand:()=>WI,ClassificationPipelineStage:()=>hF,ClassificationPrimitive:()=>WZ,ClassificationType:()=>ti,ClearCommand:()=>ui,ClippingPlane:()=>Qs,ClippingPlaneCollection:()=>us,ClippingPolygon:()=>dC,ClippingPolygonCollection:()=>Kh,Clock:()=>Tf,ClockRange:()=>Ss,ClockStep:()=>Yo,ClockViewModel:()=>ck,CloudCollection:()=>yte,CloudType:()=>nR,Color:()=>U,ColorBlendMode:()=>tl,ColorGeometryInstanceAttribute:()=>Qt,ColorMaterialProperty:()=>Kt,Command:()=>lie,ComponentDatatype:()=>K,Composite3DTileContent:()=>Av,CompositeEntityCollection:()=>I8,CompositeMaterialProperty:()=>pV,CompositePositionProperty:()=>cc,CompositeProperty:()=>cl,CompressedTextureBuffer:()=>JR,ComputeCommand:()=>_l,ComputeEngine:()=>KR,ConditionsExpression:()=>WP,ConeEmitter:()=>Tte,ConstantPositionProperty:()=>Ll,ConstantProperty:()=>hi,ConstantSpline:()=>F2,ContentMetadata:()=>kP,Context:()=>WT,ContextLimits:()=>vt,CoplanarPolygonGeometry:()=>JX,CoplanarPolygonGeometryLibrary:()=>Bb,CoplanarPolygonOutlineGeometry:()=>Om,CornerType:()=>eo,CorrelationGroup:()=>b2,CorridorGeometry:()=>gS,CorridorGeometryLibrary:()=>uo,CorridorGeometryUpdater:()=>_X,CorridorGraphics:()=>JT,CorridorOutlineGeometry:()=>TX,Credit:()=>yt,CreditDisplay:()=>Aw,CubeMap:()=>Jr,CubeMapFace:()=>rE,CubeMapPanorama:()=>WA,CubicRealPolynomial:()=>AT,CullFace:()=>wi,CullingVolume:()=>js,CumulusCloud:()=>$u,CustomDataSource:()=>VX,CustomHeightmapTerrainProvider:()=>Wne,CustomShader:()=>CA,CustomShaderMode:()=>Sb,CustomShaderPipelineStage:()=>AF,CustomShaderTranslucencyMode:()=>ky,CylinderGeometry:()=>RX,CylinderGeometryLibrary:()=>yS,CylinderGeometryUpdater:()=>GX,CylinderGraphics:()=>jT,CylinderOutlineGeometry:()=>EX,CzmlDataSource:()=>wX,DataSource:()=>_s,DataSourceClock:()=>_f,DataSourceCollection:()=>MX,DataSourceDisplay:()=>GN,DebugAppearance:()=>_te,DebugCameraPrimitive:()=>c0,DebugInspector:()=>GM,DebugModelMatrixPrimitive:()=>V9,DefaultProxy:()=>vne,DepthFunction:()=>$a,DepthPlane:()=>Gw,DequantizationPipelineStage:()=>CF,DerivedCommand:()=>l0,DeveloperError:()=>fe,DeviceOrientationCameraController:()=>Lw,DirectionalLight:()=>Ste,DiscardEmptyTileImagePolicy:()=>WC,DiscardMissingTileImagePolicy:()=>PF,DistanceDisplayCondition:()=>kt,DistanceDisplayConditionGeometryInstanceAttribute:()=>ei,DoubleEndedPriorityQueue:()=>Pg,DoublyLinkedList:()=>qP,DracoLoader:()=>sb,DrawCommand:()=>et,DynamicAtmosphereLightingType:()=>mb,DynamicEnvironmentMapManager:()=>hb,DynamicGeometryBatch:()=>CS,DynamicGeometryUpdater:()=>Zi,EarthOrientationParameters:()=>MR,EarthOrientationParametersSample:()=>Hg,EasingFunction:()=>Zs,EdgeDetectionPipelineStage:()=>RF,EdgeFramebuffer:()=>Nw,EdgeVisibilityPipelineStage:()=>LF,EllipseGeometry:()=>nd,EllipseGeometryLibrary:()=>Nd,EllipseGeometryUpdater:()=>UX,EllipseGraphics:()=>QT,EllipseOutlineGeometry:()=>vu,Ellipsoid:()=>ie,EllipsoidGeodesic:()=>O0,EllipsoidGeometry:()=>Ma,EllipsoidGeometryUpdater:()=>OX,EllipsoidGraphics:()=>qT,EllipsoidOutlineGeometry:()=>Zu,EllipsoidPrimitive:()=>mw,EllipsoidRhumbLine:()=>Rc,EllipsoidSurfaceAppearance:()=>Ate,EllipsoidTangentPlane:()=>Ls,EllipsoidTerrainProvider:()=>r0,EllipsoidalOccluder:()=>yf,Empty3DTileContent:()=>eV,EncodedCartesian3:()=>Zn,Entity:()=>Jo,EntityCluster:()=>Vu,EntityCollection:()=>wa,EntityView:()=>WN,EquirectangularPanorama:()=>Zte,Event:()=>_e,EventHelper:()=>Nr,Expression:()=>Am,ExpressionNodeType:()=>Vt,ExtrapolationType:()=>Eu,FeatureDetection:()=>dn,FeatureIdPipelineStage:()=>My,Fog:()=>Ww,ForEach:()=>Ye,FrameRateMonitor:()=>W9,FrameState:()=>vw,Framebuffer:()=>cs,FramebufferManager:()=>Ai,Frozen:()=>B,FrustumCommands:()=>Yw,FrustumGeometry:()=>iA,FrustumOutlineGeometry:()=>Vw,Fullscreen:()=>zr,FullscreenButton:()=>yk,FullscreenButtonViewModel:()=>gk,GaussianSplat3DTileContent:()=>nx,GaussianSplatPrimitive:()=>MP,GaussianSplatRenderResources:()=>PP,GaussianSplatSorter:()=>eS,GaussianSplatTextureGenerator:()=>IP,GeoJsonDataSource:()=>Cx,GeoJsonLoader:()=>L2,GeocodeType:()=>nT,Geocoder:()=>Tk,GeocoderService:()=>yR,GeocoderViewModel:()=>xk,GeographicProjection:()=>Ki,GeographicTilingScheme:()=>Qi,Geometry:()=>gt,Geometry3DTileContent:()=>Vv,GeometryAttribute:()=>Ie,GeometryAttributes:()=>yn,GeometryFactory:()=>Fne,GeometryInstance:()=>Ft,GeometryInstanceAttribute:()=>Kc,GeometryOffsetAttribute:()=>mn,GeometryPipeline:()=>Kn,GeometryPipelineStage:()=>IF,GeometryType:()=>lm,GeometryUpdater:()=>Ci,GeometryUpdaterSet:()=>XS,GeometryVisualizer:()=>bN,GetFeatureInfoFormat:()=>nf,Globe:()=>cw,GlobeDepth:()=>ww,GlobeSurfaceShaderSet:()=>QY,GlobeSurfaceTile:()=>ah,GlobeSurfaceTileProvider:()=>$Y,GlobeTranslucency:()=>ew,GlobeTranslucencyFramebuffer:()=>Mw,GlobeTranslucencyState:()=>Fw,GltfBufferViewLoader:()=>OZ,GltfDracoLoader:()=>BZ,GltfGpmLoader:()=>y2,GltfGpmLocal:()=>hC,GltfImageLoader:()=>zZ,GltfIndexBufferLoader:()=>HZ,GltfJsonLoader:()=>JZ,GltfLoader:()=>mu,GltfLoaderUtil:()=>Vd,GltfMeshPrimitiveGpmLoader:()=>S2,GltfSpzLoader:()=>Uv,GltfStructuralMetadataLoader:()=>m2,GltfTextureLoader:()=>$Z,GltfVertexBufferLoader:()=>eC,Google2DImageryProvider:()=>zF,GoogleEarthEnterpriseImageryProvider:()=>Wte,GoogleEarthEnterpriseMapsProvider:()=>MF,GoogleEarthEnterpriseMetadata:()=>Xg,GoogleEarthEnterpriseTerrainData:()=>xR,GoogleEarthEnterpriseTerrainProvider:()=>Xne,GoogleEarthEnterpriseTileInformation:()=>F9,GoogleGeocoderService:()=>Yne,GoogleMaps:()=>ua,GoogleStreetViewCubeMapPanoramaProvider:()=>vte,GpxDataSource:()=>NN,GregorianDate:()=>G0,GridImageryProvider:()=>Fte,GridMaterialProperty:()=>CV,GroundGeometryUpdater:()=>ri,GroundPolylineGeometry:()=>DT,GroundPolylinePrimitive:()=>Ph,GroundPrimitive:()=>Rl,GroupMetadata:()=>dV,HeadingPitchRange:()=>th,HeadingPitchRoll:()=>Sc,Heap:()=>XR,HeightReference:()=>tt,HeightmapEncoding:()=>rh,HeightmapTerrainData:()=>Pc,HeightmapTessellator:()=>F1,HermitePolynomialApproximation:()=>LX,HermiteSpline:()=>Ny,HilbertOrder:()=>MZ,HomeButton:()=>Ck,HomeButtonViewModel:()=>Zk,HorizontalOrigin:()=>Yi,I3SBuildingSceneLayerExplorer:()=>yie,I3SBuildingSceneLayerExplorerViewModel:()=>Lk,I3SDataProvider:()=>Hf,I3SDecoder:()=>I9,I3SFeature:()=>P9,I3SField:()=>X9,I3SGeometry:()=>oR,I3SLayer:()=>kA,I3SNode:()=>rR,I3SStatistics:()=>w9,I3SSublayer:()=>k9,I3SSymbology:()=>Y9,I3dmLoader:()=>v2,I3dmParser:()=>W2,ITwinData:()=>Nte,ITwinPlatform:()=>ra,Iau2000Orientation:()=>dw,Iau2006XysData:()=>kR,Iau2006XysSample:()=>xT,IauOrientationAxes:()=>uw,IauOrientationParameters:()=>lw,ImageBasedLighting:()=>s_,ImageBasedLightingPipelineStage:()=>H2,ImageMaterialProperty:()=>my,Imagery:()=>MC,ImageryConfiguration:()=>kI,ImageryCoverage:()=>DC,ImageryFlags:()=>jF,ImageryInput:()=>qF,ImageryLayer:()=>bs,ImageryLayerCollection:()=>fS,ImageryLayerFeatureInfo:()=>ef,ImageryPipelineStage:()=>$F,ImageryProvider:()=>fu,ImageryState:()=>Qn,Implicit3DTileContent:()=>oC,ImplicitAvailabilityBitstream:()=>UZ,ImplicitMetadataView:()=>DZ,ImplicitSubdivisionScheme:()=>Fs,ImplicitSubtree:()=>lb,ImplicitSubtreeCache:()=>S9,ImplicitSubtreeMetadata:()=>Rv,ImplicitTileCoordinates:()=>Ip,ImplicitTileset:()=>Fp,IndexDatatype:()=>Ne,InfoBox:()=>vk,InfoBoxViewModel:()=>Wk,InspectorShared:()=>jd,InstanceAttributeSemantic:()=>Ps,InstancingPipelineStage:()=>aF,InterpolationAlgorithm:()=>wne,InterpolationType:()=>jh,Intersect:()=>Jt,IntersectionTests:()=>mi,Intersections2D:()=>Kf,Interval:()=>Kr,InvertClassification:()=>O1,Ion:()=>Uh,IonGeocodeProviderType:()=>Dg,IonGeocoderService:()=>KA,IonImageryProvider:()=>Bl,IonImageryProviderFactory:()=>YC,IonResource:()=>ds,IonWorldImageryStyle:()=>Cb,Iso8601:()=>Je,JobScheduler:()=>Iw,JobType:()=>Gc,JsonMetadataTable:()=>fb,JulianDate:()=>Q,KTX2Transcoder:()=>jR,KeyboardEventModifier:()=>za,KeyframeNode:()=>Mo,KmlCamera:()=>YN,KmlDataSource:()=>KS,KmlLookAt:()=>yY,KmlTour:()=>xY,KmlTourFlyTo:()=>_Y,KmlTourWait:()=>SY,Label:()=>Jy,LabelCollection:()=>Gp,LabelGraphics:()=>Nh,LabelStyle:()=>ur,LabelVisualizer:()=>gN,LagrangePolynomialApproximation:()=>WX,LeapSecond:()=>ho,Light:()=>Yte,LightingModel:()=>Vp,LightingPipelineStage:()=>tI,LinearApproximation:()=>TS,LinearSpline:()=>Xy,ManagedArray:()=>Yl,MapMode2D:()=>sd,MapProjection:()=>Une,MapboxImageryProvider:()=>kF,MapboxStyleImageryProvider:()=>wte,MappedPositions:()=>QF,Material:()=>ji,MaterialAppearance:()=>xo,MaterialPipelineStage:()=>iI,MaterialProperty:()=>Ar,Math:()=>W,Matrix2:()=>Ji,Matrix3:()=>q,Matrix4:()=>F,Megatexture:()=>t9,MeshPrimitiveGpmLocal:()=>_2,MetadataClass:()=>Hh,MetadataClassProperty:()=>gp,MetadataComponentType:()=>Nt,MetadataEntity:()=>jn,MetadataEnum:()=>Bv,MetadataEnumValue:()=>Ov,MetadataPicking:()=>Pw,MetadataPickingPipelineStage:()=>gu,MetadataPipelineStage:()=>Lm,MetadataSchema:()=>Ml,MetadataSchemaLoader:()=>Vy,MetadataSemantic:()=>Rm,MetadataTable:()=>Zm,MetadataTableProperty:()=>Gv,MetadataType:()=>xt,MipmapHint:()=>mm,Model:()=>yu,Model3DTileContent:()=>xu,ModelAlphaOptions:()=>X_,ModelAnimation:()=>N2,ModelAnimationChannel:()=>X2,ModelAnimationCollection:()=>Y2,ModelAnimationLoop:()=>Rd,ModelAnimationState:()=>qh,ModelArticulation:()=>J2,ModelArticulationStage:()=>K2,ModelClippingPlanesPipelineStage:()=>q2,ModelClippingPolygonsPipelineStage:()=>tF,ModelColorPipelineStage:()=>wy,ModelComponents:()=>Tn,ModelDrawCommand:()=>FI,ModelDrawCommands:()=>XI,ModelFeature:()=>w2,ModelFeatureTable:()=>k2,ModelGraphics:()=>J0,ModelImagery:()=>UI,ModelImageryMapping:()=>F_,ModelLightingOptions:()=>EI,ModelMatrixUpdateStage:()=>cF,ModelNode:()=>nF,ModelPrimitiveImagery:()=>I_,ModelReader:()=>ol,ModelRenderResources:()=>_I,ModelRuntimeNode:()=>dF,ModelRuntimePrimitive:()=>xI,ModelSceneGraph:()=>NI,ModelSilhouettePipelineStage:()=>ZI,ModelSkin:()=>TI,ModelSplitterPipelineStage:()=>VI,ModelStatistics:()=>YI,ModelType:()=>Pr,ModelUtility:()=>St,ModelVisualizer:()=>yN,Moon:()=>fw,MorphTargetsPipelineStage:()=>rI,MorphWeightSpline:()=>Dne,MortonOrder:()=>rx,Multiple3DTileContent:()=>OP,MultisampleFramebuffer:()=>BL,NavigationHelpButton:()=>Ik,NavigationHelpButtonViewModel:()=>Fk,NearFarScalar:()=>Dt,NeverTileDiscardPolicy:()=>kte,NodeRenderResources:()=>RI,NodeStatisticsPipelineStage:()=>lF,NodeTransformationProperty:()=>$T,OIT:()=>kw,Occluder:()=>pw,OffsetGeometryInstanceAttribute:()=>yo,OpenCageGeocoderService:()=>Bne,OpenStreetMapImageryProvider:()=>Yg,OrderedGroundPrimitiveCollection:()=>kX,OrientedBoundingBox:()=>en,OrthographicFrustum:()=>fn,OrthographicOffCenterFrustum:()=>ls,Packable:()=>zne,PackableForInterpolation:()=>Hne,Panorama:()=>Ute,PanoramaProvider:()=>Dte,Particle:()=>cR,ParticleBurst:()=>Bte,ParticleEmitter:()=>zte,ParticleSystem:()=>Hte,Pass:()=>Le,PassState:()=>zc,PathGraphics:()=>j0,PathVisualizer:()=>_N,PeliasGeocoderService:()=>tk,PerInstanceColorAppearance:()=>bn,PerformanceDisplay:()=>Cg,PerformanceWatchdog:()=>Xk,PerformanceWatchdogViewModel:()=>Pk,PerspectiveFrustum:()=>zi,PerspectiveOffCenterFrustum:()=>rd,PickDepth:()=>Xw,PickDepthFramebuffer:()=>Dw,PickFramebuffer:()=>Ow,PickedMetadataInfo:()=>a9,Picking:()=>Jw,PickingPipelineStage:()=>sI,PinBuilder:()=>bg,PixelDatatype:()=>De,PixelFormat:()=>Ke,Plane:()=>an,PlaneGeometry:()=>BX,PlaneGeometryUpdater:()=>HX,PlaneGraphics:()=>sv,PlaneOutlineGeometry:()=>zX,PntsLoader:()=>MI,PntsParser:()=>w_,PointCloud:()=>y9,PointCloudEyeDomeLighting:()=>bb,PointCloudShading:()=>Sp,PointCloudStylingPipelineStage:()=>cI,PointGraphics:()=>t_,PointPrimitive:()=>ba,PointPrimitiveCollection:()=>TV,PointVisualizer:()=>AN,PolygonGeometry:()=>ub,PolygonGeometryLibrary:()=>ii,PolygonGeometryUpdater:()=>QX,PolygonGraphics:()=>Yh,PolygonHierarchy:()=>Ec,PolygonOutlineGeometry:()=>jX,PolygonPipeline:()=>Ri,Polyline:()=>Pm,PolylineArrowMaterialProperty:()=>RV,PolylineCollection:()=>cf,PolylineColorAppearance:()=>Ws,PolylineDashMaterialProperty:()=>GV,PolylineGeometry:()=>pg,PolylineGeometryUpdater:()=>VN,PolylineGlowMaterialProperty:()=>WV,PolylineGraphics:()=>Jc,PolylineMaterialAppearance:()=>ec,PolylineOutlineMaterialProperty:()=>hx,PolylinePipeline:()=>$i,PolylineVisualizer:()=>EN,PolylineVolumeGeometry:()=>eN,PolylineVolumeGeometryLibrary:()=>pf,PolylineVolumeGeometryUpdater:()=>oN,PolylineVolumeGraphics:()=>n_,PolylineVolumeOutlineGeometry:()=>iN,PositionProperty:()=>Xh,PositionPropertyArray:()=>rg,PostProcessStage:()=>vo,PostProcessStageCollection:()=>gM,PostProcessStageComposite:()=>zd,PostProcessStageLibrary:()=>Bu,PostProcessStageSampleMode:()=>Ou,PostProcessStageTextureCache:()=>bA,PpeMetadata:()=>T2,PpeSource:()=>rie,PpeTexture:()=>x2,Primitive:()=>Pn,PrimitiveCollection:()=>td,PrimitiveLoadPlan:()=>E_,PrimitiveOutlineGenerator:()=>R_,PrimitiveOutlinePipelineStage:()=>uI,PrimitivePipeline:()=>MT,PrimitiveRenderResources:()=>GI,PrimitiveState:()=>Qr,PrimitiveStatisticsPipelineStage:()=>mI,PrimitiveType:()=>ve,ProjectionPicker:()=>Mk,ProjectionPickerViewModel:()=>wk,Property:()=>j,PropertyArray:()=>FV,PropertyAttribute:()=>V_,PropertyAttributeProperty:()=>c2,PropertyBag:()=>vl,PropertyTable:()=>Dl,PropertyTexture:()=>pb,PropertyTextureProperty:()=>a2,ProviderViewModel:()=>sr,Proxy:()=>Kne,QuadraticRealPolynomial:()=>Sl,QuadtreeOccluders:()=>tw,QuadtreePrimitive:()=>aw,QuadtreeTile:()=>nw,QuadtreeTileLoadState:()=>Da,QuadtreeTileProvider:()=>Kte,QuantizedMeshTerrainData:()=>UA,QuarticRealPolynomial:()=>$R,Quaternion:()=>Pe,QuaternionSpline:()=>P2,Queue:()=>Wy,Ray:()=>xn,Rectangle:()=>ce,RectangleCollisionChecker:()=>YS,RectangleGeometry:()=>LS,RectangleGeometryLibrary:()=>fa,RectangleGeometryUpdater:()=>rN,RectangleGraphics:()=>wh,RectangleOutlineGeometry:()=>rS,ReferenceFrame:()=>Mi,ReferenceProperty:()=>sg,RenderState:()=>Ue,Renderbuffer:()=>iu,RenderbufferFormat:()=>Zl,Request:()=>xr,RequestErrorEvent:()=>tp,RequestScheduler:()=>Dc,RequestState:()=>bi,RequestType:()=>Hs,Resource:()=>We,ResourceCache:()=>Xi,ResourceCacheKey:()=>kl,ResourceCacheStatistics:()=>Kv,ResourceLoader:()=>qi,ResourceLoaderState:()=>ft,Rotation:()=>Jm,RuntimeError:()=>ue,S2Cell:()=>ib,SDFSettings:()=>Ia,SampledPositionProperty:()=>dc,SampledProperty:()=>Lu,Sampler:()=>zt,ScaledPositionProperty:()=>Up,Scene:()=>l9,SceneFramebuffer:()=>lA,SceneMode:()=>re,SceneMode2DPipelineStage:()=>hI,SceneModePicker:()=>Yk,SceneModePickerViewModel:()=>Nk,SceneTransforms:()=>co,SceneTransitioner:()=>TM,ScreenSpaceCameraController:()=>ZM,ScreenSpaceEventHandler:()=>Hu,ScreenSpaceEventType:()=>Wn,SelectedFeatureIdPipelineStage:()=>Uy,SelectionIndicator:()=>Dk,SelectionIndicatorViewModel:()=>Uk,SensorVolumePortionToDisplay:()=>NV,ShaderBuilder:()=>Y0,ShaderCache:()=>ML,ShaderDestination:()=>ge,ShaderFunction:()=>KL,ShaderProgram:()=>$t,ShaderSource:()=>Oe,ShaderStruct:()=>HL,ShadowMap:()=>Eg,ShadowMapShader:()=>m0,ShadowMode:()=>Ln,ShadowVolumeAppearance:()=>au,SharedContext:()=>JL,ShowGeometryInstanceAttribute:()=>Gn,Simon1994PlanetaryPositions:()=>oy,SimplePolylineGeometry:()=>Jne,SingleTileImageryProvider:()=>UF,SkinningPipelineStage:()=>pI,SkyAtmosphere:()=>d9,SkyBox:()=>m9,SpatialNode:()=>i9,Spdcf:()=>g2,SpecularEnvironmentCubeMap:()=>kh,SphereEmitter:()=>jte,SphereGeometry:()=>G9,SphereOutlineGeometry:()=>Hb,Spherical:()=>vX,Spline:()=>Co,SplitDirection:()=>Fr,Splitter:()=>$1,StaticGeometryColorBatch:()=>$m,StaticGeometryPerMaterialBatch:()=>eh,StaticGroundGeometryColorBatch:()=>i1,StaticGroundGeometryPerMaterialBatch:()=>pN,StaticGroundPolylinePerMaterialBatch:()=>RN,StaticOutlineGeometryBatch:()=>s1,StencilConstants:()=>Ht,StencilFunction:()=>ni,StencilOperation:()=>Ct,SteppedSpline:()=>I2,Stereographic:()=>el,StorageType:()=>Fy,StripeMaterialProperty:()=>PV,StripeOrientation:()=>Sf,StructuralMetadata:()=>Wa,StyleCommandsNeeded:()=>$h,StyleExpression:()=>Qte,Sun:()=>p9,SunLight:()=>N0,SunPostProcess:()=>RM,SupportedImageFormats:()=>h2,SvgPathBindingHandler:()=>sk,Sync:()=>jL,TaskProcessor:()=>$n,Terrain:()=>K9,TerrainData:()=>Dd,TerrainEncoding:()=>br,TerrainFillMesh:()=>N1,TerrainMesh:()=>pc,TerrainOffsetProperty:()=>i_,TerrainPicker:()=>JY,TerrainProvider:()=>zo,TerrainQuantization:()=>Ua,TerrainState:()=>Wo,Texture:()=>Lt,Texture3D:()=>QL,TextureAtlas:()=>IT,TextureCache:()=>kL,TextureMagnificationFilter:()=>ci,TextureManager:()=>JM,TextureMinificationFilter:()=>Bt,TexturePacker:()=>AZ,TextureUniform:()=>iie,TextureWrap:()=>hn,TileAvailability:()=>Jf,TileBoundingRegion:()=>Au,TileBoundingS2Cell:()=>KP,TileBoundingSphere:()=>Kb,TileBoundingVolume:()=>one,TileCoordinatesImageryProvider:()=>j9,TileDiscardPolicy:()=>sne,TileEdge:()=>Rn,TileImagery:()=>kC,TileMapServiceImageryProvider:()=>Oy,TileMetadata:()=>UP,TileOrientedBoundingBox:()=>Id,TileProviderError:()=>jo,TileReplacementQueue:()=>iw,TileSelectionResult:()=>di,TileState:()=>ane,Tileset3DTileContent:()=>BI,TilesetMetadata:()=>JP,TilesetPipelineStage:()=>U2,TilingScheme:()=>jne,TimeConstants:()=>li,TimeDynamicImagery:()=>v_,TimeDynamicPointCloud:()=>tR,TimeInterval:()=>vn,TimeIntervalCollection:()=>Ts,TimeIntervalCollectionPositionProperty:()=>ag,TimeIntervalCollectionProperty:()=>cg,TimeStandard:()=>ai,Timeline:()=>Kk,TimelineHighlightRange:()=>zk,TimelineTrack:()=>Hk,Tipsify:()=>eE,ToggleButtonViewModel:()=>sT,Tonemapper:()=>Lg,TrackingReferenceFrame:()=>D0,Transforms:()=>pt,TranslationRotationScale:()=>hy,TranslucentTileClassification:()=>Bw,TridiagonalSystemSolver:()=>TC,TrustedServers:()=>uZ,TweenCollection:()=>TA,UniformState:()=>OL,UniformType:()=>J1,UrlTemplateImageryProvider:()=>ps,VERSION:()=>vPt,VRButton:()=>Bk,VRButtonViewModel:()=>Ok,VRTheWorldTerrainProvider:()=>Qne,VaryingType:()=>oie,Vector3DTileBatch:()=>pp,Vector3DTileClampedPolylines:()=>mP,Vector3DTileContent:()=>fP,Vector3DTileGeometry:()=>nb,Vector3DTilePoints:()=>rP,Vector3DTilePolygons:()=>sP,Vector3DTilePolylines:()=>z_,Vector3DTilePrimitive:()=>u_,VectorGltf3DTileContent:()=>$C,VelocityOrientationProperty:()=>IX,VelocityVectorProperty:()=>lg,VertexArray:()=>Bn,VertexArrayFacade:()=>w0,VertexAttributeSemantic:()=>ot,VertexFormat:()=>Xe,VerticalExaggeration:()=>Zo,VerticalExaggerationPipelineStage:()=>gI,VerticalOrigin:()=>Jn,VideoSynchronizer:()=>qne,View:()=>mA,Viewer:()=>Eie,ViewportQuad:()=>cne,Visibility:()=>Ur,Visualizer:()=>qq,VoxelBoundsCollection:()=>Fg,VoxelBoxShape:()=>RA,VoxelCell:()=>LM,VoxelContent:()=>VA,VoxelCylinderShape:()=>EA,VoxelEllipsoidShape:()=>GA,VoxelInspector:()=>jk,VoxelInspectorViewModel:()=>Jk,VoxelMetadataOrder:()=>b0,VoxelPrimitive:()=>jx,VoxelProvider:()=>dne,VoxelRenderResources:()=>zM,VoxelShape:()=>une,VoxelShapeType:()=>yc,VoxelTraversal:()=>o9,VulkanConstants:()=>$ne,WallGeometry:()=>aN,WallGeometryLibrary:()=>WS,WallGeometryUpdater:()=>dN,WallGraphics:()=>Q0,WallOutlineGeometry:()=>lN,WebGLConstants:()=>ne,WebMapServiceImageryProvider:()=>OF,WebMapTileServiceImageryProvider:()=>BF,WebMercatorProjection:()=>fi,WebMercatorTilingScheme:()=>Xs,WindingOrder:()=>Ks,WireframeIndexGenerator:()=>OC,WireframePipelineStage:()=>yI,_shadersAcesTonemappingStage:()=>jw,_shadersAdditiveBlend:()=>CM,_shadersAdjustTranslucentFS:()=>E1,_shadersAllMaterialAppearanceFS:()=>oW,_shadersAllMaterialAppearanceVS:()=>rW,_shadersAmbientOcclusionGenerate:()=>Qw,_shadersAmbientOcclusionModulate:()=>qw,_shadersAspectRampMaterial:()=>dW,_shadersAtmosphereCommon:()=>Jh,_shadersAtmosphereStageFS:()=>D2,_shadersAtmosphereStageVS:()=>O2,_shadersBasicMaterialAppearanceFS:()=>sW,_shadersBasicMaterialAppearanceVS:()=>aW,_shadersBillboardCollectionFS:()=>zI,_shadersBillboardCollectionVS:()=>HI,_shadersBlackAndWhite:()=>$w,_shadersBloomComposite:()=>eM,_shadersBrdfLutGeneratorFS:()=>VY,_shadersBrightPass:()=>VM,_shadersBrightness:()=>tM,_shadersBufferPointMaterialFS:()=>bP,_shadersBufferPointMaterialVS:()=>pP,_shadersBufferPolygonMaterialFS:()=>AP,_shadersBufferPolygonMaterialVS:()=>SP,_shadersBufferPolylineMaterialFS:()=>RP,_shadersBufferPolylineMaterialVS:()=>VP,_shadersBumpMapMaterial:()=>uW,_shadersCPUStylingStageFS:()=>pF,_shadersCPUStylingStageVS:()=>fF,_shadersCheckerboardMaterial:()=>mW,_shadersCloudCollectionFS:()=>RY,_shadersCloudCollectionVS:()=>EY,_shadersCloudNoiseFS:()=>GY,_shadersCloudNoiseVS:()=>LY,_shadersCompareAndPackTranslucentDepth:()=>WY,_shadersCompositeOITFS:()=>vY,_shadersCompositeTranslucentClassification:()=>uA,_shadersComputeIrradianceFS:()=>t2,_shadersComputeRadianceMapFS:()=>n2,_shadersContrastBias:()=>nM,_shadersConvolveSpecularMapFS:()=>i2,_shadersConvolveSpecularMapVS:()=>o2,_shadersCubeMapPanoramaVS:()=>FY,_shadersCustomShaderStageFS:()=>yF,_shadersCustomShaderStageVS:()=>gF,_shadersCzmBuiltins:()=>GT,_shadersDepthOfField:()=>iM,_shadersDepthPlaneFS:()=>IY,_shadersDepthPlaneVS:()=>PY,_shadersDepthView:()=>oM,_shadersDepthViewPacked:()=>nie,_shadersDotMaterial:()=>hW,_shadersEdgeDetection:()=>rM,_shadersEdgeDetectionStageFS:()=>VF,_shadersEdgeVisibilityStageFS:()=>EF,_shadersEdgeVisibilityStageVS:()=>GF,_shadersElevationBandMaterial:()=>fW,_shadersElevationContourMaterial:()=>pW,_shadersElevationRampMaterial:()=>bW,_shadersEllipsoidFS:()=>G1,_shadersEllipsoidSurfaceAppearanceFS:()=>R9,_shadersEllipsoidSurfaceAppearanceVS:()=>E9,_shadersEllipsoidVS:()=>L1,_shadersFXAA:()=>cM,_shadersFXAA3_11:()=>XY,_shadersFadeMaterial:()=>gW,_shadersFeatureIdStageFS:()=>xF,_shadersFeatureIdStageVS:()=>TF,_shadersFilmicTonemapping:()=>sM,_shadersGaussianBlur1D:()=>Hx,_shadersGeometryStageFS:()=>WF,_shadersGeometryStageVS:()=>vF,_shadersGlobeFS:()=>NY,_shadersGlobeVS:()=>YY,_shadersGridMaterial:()=>yW,_shadersGroundAtmosphere:()=>W1,_shadersHSBToRGB:()=>tG,_shadersHSLToRGB:()=>nG,_shadersImageBasedLightingStageFS:()=>z2,_shadersInstancingStageCommon:()=>iF,_shadersInstancingStageVS:()=>oF,_shadersIntersectBox:()=>YM,_shadersIntersectCylinder:()=>wM,_shadersIntersectDepth:()=>XM,_shadersIntersectEllipsoid:()=>MM,_shadersIntersectLongitude:()=>K1,_shadersIntersectPlane:()=>NM,_shadersIntersection:()=>AA,_shadersIntersectionUtils:()=>PM,_shadersLegacyInstancingStageVS:()=>rF,_shadersLensFlare:()=>lM,_shadersLightingStageFS:()=>eI,_shadersMaterialStageFS:()=>nI,_shadersMegatexture:()=>BM,_shadersMetadataStageFS:()=>_F,_shadersMetadataStageVS:()=>SF,_shadersModelClippingPlanesStageFS:()=>Q2,_shadersModelClippingPolygonsStageFS:()=>eF,_shadersModelClippingPolygonsStageVS:()=>$2,_shadersModelColorStageFS:()=>j2,_shadersModelFS:()=>PI,_shadersModelSilhouetteStageFS:()=>SI,_shadersModelSilhouetteStageVS:()=>AI,_shadersModelSplitterStageFS:()=>CI,_shadersModelVS:()=>II,_shadersModifiedReinhardTonemapping:()=>dM,_shadersMorphTargetsStageVS:()=>oI,_shadersNightVision:()=>uM,_shadersNormalMapMaterial:()=>xW,_shadersOctree:()=>OM,_shadersPassThrough:()=>Bd,_shadersPassThroughDepth:()=>Ox,_shadersPbrNeutralTonemapping:()=>aM,_shadersPerInstanceColorAppearanceFS:()=>LW,_shadersPerInstanceColorAppearanceVS:()=>WW,_shadersPerInstanceFlatColorAppearanceFS:()=>YT,_shadersPerInstanceFlatColorAppearanceVS:()=>vW,_shadersPointCloudEyeDomeLighting:()=>Z2,_shadersPointCloudStylingStageVS:()=>aI,_shadersPointPrimitiveCollectionFS:()=>mx,_shadersPointPrimitiveCollectionVS:()=>SX,_shadersPolygonSignedDistanceFS:()=>$v,_shadersPolylineArrowMaterial:()=>TW,_shadersPolylineColorAppearanceVS:()=>HW,_shadersPolylineCommon:()=>Gl,_shadersPolylineDashMaterial:()=>_W,_shadersPolylineFS:()=>BT,_shadersPolylineGlowMaterial:()=>SW,_shadersPolylineMaterialAppearanceVS:()=>KW,_shadersPolylineOutlineMaterial:()=>AW,_shadersPolylineShadowVolumeFS:()=>DW,_shadersPolylineShadowVolumeMorphFS:()=>OW,_shadersPolylineShadowVolumeMorphVS:()=>BW,_shadersPolylineShadowVolumeVS:()=>zW,_shadersPolylineVS:()=>$I,_shadersPrimitiveGaussianSplatFS:()=>NP,_shadersPrimitiveGaussianSplatVS:()=>XP,_shadersPrimitiveOutlineStageFS:()=>dI,_shadersPrimitiveOutlineStageVS:()=>lI,_shadersRGBToHSB:()=>iG,_shadersRGBToHSL:()=>oG,_shadersRGBToXYZ:()=>rG,_shadersReinhardTonemapping:()=>mM,_shadersReprojectWebMercatorFS:()=>KF,_shadersReprojectWebMercatorVS:()=>JF,_shadersRimLightingMaterial:()=>ZW,_shadersSelectedFeatureIdStageCommon:()=>RC,_shadersShadowVolumeAppearanceFS:()=>GZ,_shadersShadowVolumeAppearanceVS:()=>PW,_shadersShadowVolumeFS:()=>ly,_shadersSilhouette:()=>hM,_shadersSkinningStageVS:()=>fI,_shadersSkyAtmosphereCommon:()=>v1,_shadersSkyAtmosphereFS:()=>wY,_shadersSkyAtmosphereVS:()=>MY,_shadersSkyBoxFS:()=>kY,_shadersSkyBoxVS:()=>UY,_shadersSlopeRampMaterial:()=>CW,_shadersStripeMaterial:()=>VW,_shadersSunFS:()=>DY,_shadersSunTextureFS:()=>OY,_shadersSunVS:()=>BY,_shadersTexturedMaterialAppearanceFS:()=>cW,_shadersTexturedMaterialAppearanceVS:()=>lW,_shadersVector3DTileClampedPolylinesFS:()=>dP,_shadersVector3DTileClampedPolylinesVS:()=>lP,_shadersVector3DTilePolylinesVS:()=>aP,_shadersVectorTileVS:()=>wZ,_shadersVerticalExaggerationStageVS:()=>bI,_shadersViewportQuadFS:()=>zY,_shadersViewportQuadVS:()=>TT,_shadersVoxelFS:()=>FM,_shadersVoxelUtils:()=>vM,_shadersVoxelVS:()=>IM,_shadersWater:()=>EW,_shadersWaterMaskMaterial:()=>RW,_shadersXYZToRGB:()=>sG,_shadersacesTonemapping:()=>aG,_shadersalphaWeight:()=>cG,_shadersantialias:()=>lG,_shadersapplyHSBShift:()=>dG,_shadersapproximateSphericalCoordinates:()=>uG,_shadersapproximateTanh:()=>mG,_shadersbackFacing:()=>hG,_shadersbranchFreeTernary:()=>fG,_shaderscascadeColor:()=>pG,_shaderscascadeDistance:()=>bG,_shaderscascadeMatrix:()=>gG,_shaderscascadeWeights:()=>yG,_shadersclipPolygons:()=>xG,_shaderscolumbusViewMorph:()=>TG,_shaderscomputeAtmosphereColor:()=>_G,_shaderscomputeGroundAtmosphereScattering:()=>SG,_shaderscomputePosition:()=>AG,_shaderscomputeScattering:()=>ZG,_shadersconvertLocalToBoxUv:()=>kM,_shadersconvertLocalToCylinderUv:()=>UM,_shadersconvertLocalToEllipsoidUv:()=>DM,_shaderscosineAndSine:()=>CG,_shadersdecodeRGB8:()=>VG,_shadersdecompressTextureCoordinates:()=>RG,_shadersdegreesPerRadian:()=>aE,_shadersdepthClamp:()=>EG,_shadersdepthRange:()=>cE,_shadersdepthRangeStruct:()=>HE,_shaderseastNorthUpToEyeCoordinates:()=>GG,_shadersellipsoidContainsPoint:()=>LG,_shadersellipsoidTextureCoordinates:()=>WG,_shadersepsilon1:()=>lE,_shadersepsilon2:()=>dE,_shadersepsilon3:()=>uE,_shadersepsilon4:()=>mE,_shadersepsilon5:()=>hE,_shadersepsilon6:()=>fE,_shadersepsilon7:()=>pE,_shadersequalsEpsilon:()=>vG,_shaderseyeOffset:()=>FG,_shaderseyeToWindowCoordinates:()=>IG,_shadersfastApproximateAtan:()=>PG,_shadersfog:()=>XG,_shadersgammaCorrect:()=>NG,_shadersgeodeticSurfaceNormal:()=>YG,_shadersgetDefaultMaterial:()=>wG,_shadersgetDynamicAtmosphereLightDirection:()=>MG,_shadersgetLambertDiffuse:()=>kG,_shadersgetSpecular:()=>UG,_shadersgetWaterNoise:()=>DG,_shadershue:()=>OG,_shadersinfinity:()=>bE,_shadersinverseGamma:()=>BG,_shadersisEmpty:()=>zG,_shadersisFull:()=>HG,_shaderslatitudeToWebMercatorFraction:()=>KG,_shaderslineDistance:()=>JG,_shaderslinearToSrgb:()=>jG,_shadersluminance:()=>QG,_shadersmaterial:()=>KE,_shadersmaterialInput:()=>JE,_shadersmaximumComponent:()=>qG,_shadersmetersPerPixel:()=>$G,_shadersmodelMaterial:()=>jE,_shadersmodelToWindowCoordinates:()=>eL,_shadersmodelVertexOutput:()=>QE,_shadersmultiplyWithColorBalance:()=>tL,_shadersnearFarScalar:()=>nL,_shadersoctDecode:()=>iL,_shadersoneOverPi:()=>gE,_shadersoneOverTwoPi:()=>yE,_shaderspackDepth:()=>oL,_shaderspassCesium3DTile:()=>xE,_shaderspassCesium3DTileClassification:()=>TE,_shaderspassCesium3DTileClassificationIgnoreShow:()=>_E,_shaderspassCesium3DTileEdges:()=>SE,_shaderspassClassification:()=>AE,_shaderspassCompute:()=>ZE,_shaderspassEnvironment:()=>CE,_shaderspassGaussianSplats:()=>VE,_shaderspassGlobe:()=>RE,_shaderspassOpaque:()=>EE,_shaderspassOverlay:()=>GE,_shaderspassTerrainClassification:()=>LE,_shaderspassTranslucent:()=>WE,_shaderspassVoxels:()=>vE,_shaderspbrLighting:()=>rL,_shaderspbrNeutralTonemapping:()=>sL,_shadersphong:()=>aL,_shaderspi:()=>FE,_shaderspiOverFour:()=>IE,_shaderspiOverSix:()=>PE,_shaderspiOverThree:()=>XE,_shaderspiOverTwo:()=>NE,_shadersplaneDistance:()=>cL,_shaderspointAlongRay:()=>lL,_shadersradiansPerDegree:()=>YE,_shadersray:()=>qE,_shadersrayEllipsoidIntersectionInterval:()=>dL,_shadersraySegment:()=>$E,_shadersraySphereIntersectionInterval:()=>uL,_shadersreadDepth:()=>mL,_shadersreadNonPerspective:()=>hL,_shadersreverseLogDepth:()=>fL,_shadersround:()=>pL,_shaderssaturation:()=>bL,_shaderssceneMode2D:()=>wE,_shaderssceneMode3D:()=>ME,_shaderssceneModeColumbusView:()=>kE,_shaderssceneModeMorphing:()=>UE,_shadersshadowDepthCompare:()=>gL,_shadersshadowParameters:()=>eG,_shadersshadowVisibility:()=>yL,_shaderssignNotZero:()=>xL,_shaderssolarRadius:()=>DE,_shaderssphericalHarmonics:()=>TL,_shaderssrgbToLinear:()=>_L,_shaderstangentToEyeSpaceMatrix:()=>SL,_shaderstextureCube:()=>AL,_shadersthreePiOver2:()=>OE,_shaderstransformPlane:()=>ZL,_shaderstranslateRelativeToEye:()=>CL,_shaderstranslucentPhong:()=>VL,_shaderstranspose:()=>RL,_shaderstwoPi:()=>BE,_shadersunpackClippingExtents:()=>EL,_shadersunpackDepth:()=>GL,_shadersunpackFloat:()=>LL,_shadersunpackTexture:()=>WL,_shadersunpackUint:()=>vL,_shadersvalueTransform:()=>FL,_shadersvertexLogDepth:()=>IL,_shaderswebMercatorMaxLatitude:()=>zE,_shaderswindowToEyeCoordinates:()=>PL,_shaderswriteDepthClamp:()=>XL,_shaderswriteLogDepth:()=>NL,_shaderswriteNonPerspective:()=>YL,addAllToArray:()=>oi,addBuffer:()=>Yv,addDefaults:()=>Wv,addExtensionsRequired:()=>Pv,addExtensionsUsed:()=>Cm,addPipelineExtras:()=>Sy,addToArray:()=>la,appendForwardSlash:()=>vR,arrayRemoveDuplicates:()=>Oo,assert:()=>kK,barycentricCoordinates:()=>ST,binarySearch:()=>To,buildModuleUrl:()=>qt,buildVoxelDrawCommands:()=>HM,clone:()=>Be,combine:()=>Gt,computeFlyToLocationForRectangle:()=>$S,createBillboardPointCallback:()=>U_,createCommand:()=>Fn,createDefaultImageryProviderViewModels:()=>pk,createDefaultTerrainProviderViewModels:()=>bk,createElevationBandMaterial:()=>mne,createGooglePhotorealistic3DTileset:()=>hne,createGuid:()=>qn,createMaterialPropertyDescriptor:()=>nr,createOsmBuildingsAsync:()=>fne,createPropertyDescriptor:()=>ye,createRawPropertyDescriptor:()=>Wl,createTangentSpaceDebugPrimitive:()=>pne,createTaskProcessorWorker:()=>sie,createUniform:()=>BR,createUniformArray:()=>zR,createVectorTileBuffersFromModelComponents:()=>vP,createWorldBathymetryAsync:()=>H9,createWorldImageryAsync:()=>Vb,createWorldTerrainAsync:()=>BA,decodeGoogleEarthEnterpriseData:()=>v9,decodeVectorPolylinePositions:()=>hP,defer:()=>fd,defined:()=>l,demodernizeShader:()=>wL,deprecationWarning:()=>Ea,destroyObject:()=>he,exportKml:()=>i$,findAccessorMinMax:()=>T_,findContentMetadata:()=>iS,findGroupMetadata:()=>oS,findTileMetadata:()=>DP,forEachTextureInMaterial:()=>KZ,formatError:()=>Zp,freezeRenderState:()=>eK,getAbsoluteUri:()=>$f,getAccessorByteStride:()=>Cd,getBaseUri:()=>FR,getBinaryAccessor:()=>_m,getClipAndStyleCode:()=>b9,getClippingFunction:()=>eA,getComponentReader:()=>cb,getElement:()=>Mn,getExtensionFromUri:()=>L0,getFilenameFromUri:()=>ig,getImageFromTypedArray:()=>KM,getImagePixels:()=>Ah,getJsonFromTypedArray:()=>Zr,getMagic:()=>Dh,getMeshPrimitives:()=>A2,getMetadataClassProperty:()=>s9,getMetadataProperty:()=>c9,getStringFromTypedArray:()=>Sd,getTimestamp:()=>Ui,hasExtension:()=>Vi,heightReferenceOnEntityPropertyChanged:()=>q0,isBitSet:()=>gl,isBlobUri:()=>mT,isCrossOriginUrl:()=>Jg,isDataUri:()=>Zh,isLeapYear:()=>Sh,knockout:()=>Ce,knockout_3_5_1:()=>jA,knockout_es5:()=>rk,loadAndExecuteScript:()=>hT,loadCubeMap:()=>$L,loadImageFromTypedArray:()=>ab,loadKTX2:()=>bd,mergeSort:()=>s0,moveTechniqueRenderStates:()=>Iv,moveTechniquesToExtension:()=>Xv,numberOfComponentsForType:()=>uu,objectToQuery:()=>fT,oneTimeWarning:()=>Zt,parseBatchTable:()=>xb,parseFeatureMetadataLegacy:()=>u2,parseGlb:()=>x_,parseResponseHeaders:()=>IR,parseStructuralMetadata:()=>d2,pickModel:()=>BC,pointInsideTriangle:()=>eie,preprocess3DTileContent:()=>Ob,processVoxelProperties:()=>WM,queryToObject:()=>eu,readAccessorPacked:()=>wv,removeExtension:()=>__,removeExtensionsRequired:()=>vv,removeExtensionsUsed:()=>y_,removePipelineExtras:()=>Fv,removeUnusedElements:()=>Nv,renderBufferPointCollection:()=>_P,renderBufferPolygonCollection:()=>CP,renderBufferPolylineCollection:()=>LP,resizeImageToNextPowerOfTwo:()=>Cy,sampleTerrain:()=>HY,sampleTerrainMostDetailed:()=>qS,scaleToGeodeticSurface:()=>uT,srgbToLinear:()=>MA,subdivideArray:()=>XW,subscribeAndEvaluate:()=>xc,updateAccessorComponentTypes:()=>Mv,updateVersion:()=>kv,usesExtension:()=>Ir,viewerCesium3DTilesInspectorMixin:()=>Gie,viewerCesiumInspectorMixin:()=>Lie,viewerDragDropMixin:()=>vie,viewerPerformanceWatchdogMixin:()=>Fie,viewerVoxelInspectorMixin:()=>Iie,webGLConstantToGlslType:()=>tie,wrapFunction:()=>ik,writeTextToCanvas:()=>O_});var t8o=x(T(),1);var tRo=x(T(),1);var GXt=x(T(),1);var $Pt=x(T(),1);var BPt=x(T(),1);var YPt=x(T(),1);function iLe(e){return e!=null}var l=iLe;var kPt=x(T(),1);function dT(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(dT.prototype=Object.create(Error.prototype),dT.prototype.constructor=dT);dT.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};dT.throwInstantiationError=function(){throw new dT("This function defines an interface and should not be called directly.")};var fe=dT;var aa={};aa.typeOf={};function oLe(e){return`${e} is required, actual value was undefined`}function tZ(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(oLe(e))};aa.typeOf.func=function(e,t){if(typeof t!="function")throw new fe(tZ(typeof t,"function",e))};aa.typeOf.string=function(e,t){if(typeof t!="string")throw new fe(tZ(typeof t,"string",e))};aa.typeOf.number=function(e,t){if(typeof t!="number")throw new fe(tZ(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),t0?1:-1};ht.signNotZero=function(e){return e<0?-1:1};ht.toSNorm=function(e,t){return t=t??255,Math.round((ht.clamp(e,-1,1)*.5+.5)*t)};ht.fromSNorm=function(e,t){return t=t??255,ht.clamp(e,0,t)/t*2-1};ht.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:ht.clamp((e-t)/n,0,1)};ht.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};ht.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};ht.lerp=function(e,t,n){return(1-n)*e+n*t};ht.PI=Math.PI;ht.ONE_OVER_PI=1/Math.PI;ht.PI_OVER_TWO=Math.PI/2;ht.PI_OVER_THREE=Math.PI/3;ht.PI_OVER_FOUR=Math.PI/4;ht.PI_OVER_SIX=Math.PI/6;ht.THREE_PI_OVER_TWO=3*Math.PI/2;ht.TWO_PI=2*Math.PI;ht.ONE_OVER_TWO_PI=1/(2*Math.PI);ht.RADIANS_PER_DEGREE=Math.PI/180;ht.DEGREES_PER_RADIAN=180/Math.PI;ht.RADIANS_PER_ARCSECOND=ht.RADIANS_PER_DEGREE/3600;ht.toRadians=function(e){return e*ht.RADIANS_PER_DEGREE};ht.toDegrees=function(e){return e*ht.DEGREES_PER_RADIAN};ht.convertLongitudeRange=function(e){let t=ht.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};ht.clampToLatitudeRange=function(e){return ht.clamp(e,-1*ht.PI_OVER_TWO,ht.PI_OVER_TWO)};ht.negativePiToPi=function(e){return e>=-ht.PI&&e<=ht.PI?e:ht.zeroToTwoPi(e+ht.PI)-ht.PI};ht.zeroToTwoPi=function(e){if(e>=0&&e<=ht.TWO_PI)return e;let t=ht.mod(e,ht.TWO_PI);return Math.abs(t)ht.EPSILON14?ht.TWO_PI:t};ht.mod=function(e,t){return ht.sign(e)===ht.sign(t)&&Math.abs(e)n};ht.greaterThanOrEquals=function(e,t,n){return e-t>-n};var nU=[1];ht.factorial=function(e){let t=nU.length;if(e>=t){let n=nU[t-1];for(let i=t;i<=e;i++){let o=n*i;nU.push(o),n=o}}return nU[e]};ht.incrementWrap=function(e,t,n){return n=n??0,++e,e>t&&(e=n),e};ht.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};ht.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};ht.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};ht.clamp=function(e,t,n){return en?n:e};var wie=new dH.default;ht.setRandomNumberSeed=function(e){wie=new dH.default(e)};ht.nextRandomNumber=function(){return wie.random()};ht.randomBetween=function(e,t){return ht.nextRandomNumber()*(t-e)+e};ht.acosClamped=function(e){return Math.acos(ht.clamp(e,-1,1))};ht.asinClamped=function(e){return Math.asin(ht.clamp(e,-1,1))};ht.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};ht.logBase=function(e,t){return Math.log(e)/Math.log(t)};ht.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};ht.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};ht.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};ht.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};ht.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=ht.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?ht.PI_OVER_TWO-i:i,i=e<0?ht.PI-i:i,i=t<0?-i:i,i};var W=ht;var ar=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;ri&&(o=d,i=u)}let r=1,s=0,a=pH[o],c=bH[o];if(Math.abs(e[at.getElementIndex(c,a)])>n){let d=e[at.getElementIndex(c,c)],u=e[at.getElementIndex(a,a)],h=e[at.getElementIndex(c,a)],p=(d-u)/2/h,b;p<0?b=-1/(-p+Math.sqrt(1+p*p)):b=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+b*b),s=b*r}return t=at.clone(at.IDENTITY,t),t[at.getElementIndex(a,a)]=t[at.getElementIndex(c,c)]=r,t[at.getElementIndex(c,a)]=s,t[at.getElementIndex(a,c)]=-s,t}var sU=new at,Oie=new at;at.computeEigenDecomposition=function(e,t){let n=W.EPSILON20,i=10,o=0,r=0;l(t)||(t={});let s=t.unitary=at.clone(at.IDENTITY,t.unitary),a=t.diagonal=at.clone(e,t.diagonal),c=n*hLe(a);for(;rc;)pLe(a,sU),at.transpose(sU,Oie),at.multiply(a,sU,a),at.multiply(Oie,a,a),at.multiply(s,sU,s),++o>2&&(++r,o=0);return t};at.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};at.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)};at.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=at.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 at.multiplyByScalar(t,p,t)};var bLe=new at;at.inverseTranspose=function(e,t){return at.inverse(at.transpose(e,bLe),t)};at.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]};at.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};at.IDENTITY=Object.freeze(new at(1,0,0,0,1,0,0,0,1));at.ZERO=Object.freeze(new at(0,0,0,0,0,0,0,0,0));at.COLUMN0ROW0=0;at.COLUMN0ROW1=1;at.COLUMN0ROW2=2;at.COLUMN1ROW0=3;at.COLUMN1ROW1=4;at.COLUMN1ROW2=5;at.COLUMN2ROW0=6;at.COLUMN2ROW1=7;at.COLUMN2ROW2=8;Object.defineProperties(at.prototype,{length:{get:function(){return at.packedLength}}});at.prototype.clone=function(e){return at.clone(this,e)};at.prototype.equals=function(e){return at.equals(this,e)};at.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]};at.prototype.equalsEpsilon=function(e,t){return at.equalsEpsilon(this,e,t)};at.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]}) (${this[1]}, ${this[4]}, ${this[7]}) (${this[2]}, ${this[5]}, ${this[8]})`};var q=at;var hXt=x(T(),1);function ER(e){this.name="RuntimeError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(ER.prototype=Object.create(Error.prototype),ER.prototype.constructor=ER);ER.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};var ue=ER;function st(e,t,n,i,o,r,s,a,c,d,u,h,p,b,f,y){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]=b??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]=y??0}st.packedLength=16;st.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};st.unpack=function(e,t,n){return t=t??0,l(n)||(n=new st),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};st.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=W.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};Aa.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=W.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};Aa.fromTypedArray=function(e){if(e instanceof Uint8Array)return Aa.UNSIGNED_BYTE;if(e instanceof Uint16Array)return Aa.UNSIGNED_SHORT;if(e instanceof Uint32Array)return Aa.UNSIGNED_INT};var Ne=Object.freeze(Aa);var kXt=x(T(),1);var LR={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===LR.STREAM_DRAW||e===LR.STATIC_DRAW||e===LR.DYNAMIC_DRAW||e===LR.DYNAMIC_READ}},Fe=Object.freeze(LR);function kc(e){e=e??B.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}kc.createPixelBuffer=function(e){if(!e.context._webgl2)throw new fe("A WebGL 2 context is required to create PixelBuffers.");return new kc({context:e.context,bufferTarget:ne.PIXEL_PACK_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};kc.createVertexBuffer=function(e){return new kc({context:e.context,bufferTarget:ne.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};kc.createIndexBuffer=function(e){let t=e.context,n=e.indexDatatype,i=Ne.getSizeInBytes(n),o=new kc({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(kc.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}});kc.prototype._getBuffer=function(){return this._buffer};kc.prototype._bind=function(){let e=this._gl,t=this._bufferTarget;e.bindBuffer(t,this._buffer)};kc.prototype._unBind=function(){let e=this._gl,t=this._bufferTarget;e.bindBuffer(t,null)};kc.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)};kc.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)};kc.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)};kc.prototype.isDestroyed=function(){return!1};kc.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),he(this)};var qe=kc;var hNt=x(T(),1);var lNt=x(T(),1);var iNt=x(T(),1);var $Xt=x(T(),1);var zg,rs={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},hd={};Object.defineProperties(hd,{element:{get:function(){if(hd.supportsFullscreen())return document[rs.fullscreenElement]}},changeEventName:{get:function(){if(hd.supportsFullscreen())return rs.fullscreenchange}},errorEventName:{get:function(){if(hd.supportsFullscreen())return rs.fullscreenerror}},enabled:{get:function(){if(hd.supportsFullscreen())return document[rs.fullscreenEnabled]}},fullscreen:{get:function(){if(hd.supportsFullscreen())return hd.element!==null}}});hd.supportsFullscreen=function(){if(l(zg))return zg;zg=!1;let e=document.body;if(typeof e.requestFullscreen=="function")return rs.requestFullscreen="requestFullscreen",rs.exitFullscreen="exitFullscreen",rs.fullscreenEnabled="fullscreenEnabled",rs.fullscreenElement="fullscreenElement",rs.fullscreenchange="fullscreenchange",rs.fullscreenerror="fullscreenerror",zg=!0,zg;let t=["webkit","moz","o","ms","khtml"],n;for(let i=0,o=t.length;i{let t=new Image;t.onload=function(){Tl._result=t.width>0&&t.height>0,e(Tl._result)},t.onerror=function(){Tl._result=!1,e(Tl._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),Tl._promise};Object.defineProperties(Tl,{initialized:{get:function(){return l(Tl._result)}}});var rZ=[];typeof ArrayBuffer<"u"&&(rZ.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&rZ.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&rZ.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&rZ.push(BigInt64Array),typeof BigUint64Array<"u"&&rZ.push(BigUint64Array));var cm={isChrome:SH,chromeVersion:vLe,isSafari:Kie,safariVersion:FLe,isWebkit:Jie,webkitVersion:ILe,isEdge:hU,edgeVersion:PLe,isFirefox:fU,firefoxVersion:YLe,isWindows:XLe,isIPadOrIOS:NLe,hardwareConcurrency:am.hardwareConcurrency??3,supportsPointerEvents:wLe,supportsImageRenderingPixelated:qie,supportsWebP:Tl,imageRenderingValue:MLe,typedArrayTypes:rZ};cm.supportsBasis=function(e){return cm.supportsWebAssembly()&&e.context.supportsBasis};cm.supportsFullscreen=function(){return zr.supportsFullscreen()};cm.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};cm.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};cm.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};cm.supportsBigInt=function(){return typeof BigInt<"u"};cm.supportsWebWorkers=function(){return typeof Worker<"u"};cm.supportsWebAssembly=function(){return typeof WebAssembly<"u"};cm.supportsWebgl2=function(e){return e.context.webgl2};cm.supportsEsmWebWorkers=function(){return!fU()||parseInt(AH)>=114};var dn=cm;function ZH(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 ae(e,t,n,i){this.red=e??1,this.green=t??1,this.blue=n??1,this.alpha=i??1}ae.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 ae(e.x,e.y,e.z,e.w)};ae.fromBytes=function(e,t,n,i,o){return e=ae.byteToFloat(e??255),t=ae.byteToFloat(t??255),n=ae.byteToFloat(n??255),i=ae.byteToFloat(i??255),l(o)?(o.red=e,o.green=t,o.blue=n,o.alpha=i,o):new ae(e,t,n,i)};ae.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 ae(e.red,e.green,e.blue,t)};var CH,VH,E0;dn.supportsTypedArrays()&&(CH=new ArrayBuffer(4),VH=new Uint32Array(CH),E0=new Uint8Array(CH));ae.fromRgba=function(e,t){return VH[0]=e,ae.fromBytes(E0[0],E0[1],E0[2],E0[3],t)};ae.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=ZH(d,c,e+1/3),s=ZH(d,c,e),a=ZH(d,c,e-1/3)}return l(o)?(o.red=r,o.green=s,o.blue=a,o.alpha=i,o):new ae(r,s,a,i)};ae.fromRandom=function(e,t){e=e??B.EMPTY_OBJECT;let n=e.red;if(!l(n)){let s=e.minimumRed??0,a=e.maximumRed??1;n=s+W.nextRandomNumber()*(a-s)}let i=e.green;if(!l(i)){let s=e.minimumGreen??0,a=e.maximumGreen??1;i=s+W.nextRandomNumber()*(a-s)}let o=e.blue;if(!l(o)){let s=e.minimumBlue??0,a=e.maximumBlue??1;o=s+W.nextRandomNumber()*(a-s)}let r=e.alpha;if(!l(r)){let s=e.minimumAlpha??0,a=e.maximumAlpha??1;r=s+W.nextRandomNumber()*(a-s)}return l(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new ae(n,i,o,r)};var kLe=/^#([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,DLe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,OLe=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;ae.fromCssColorString=function(e,t){l(t)||(t=new ae),e=e.trim();let n=ae[e.toUpperCase()];if(l(n))return ae.clone(n,t),t;let i=kLe.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=DLe.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=OLe.exec(e),i!==null?ae.fromHsl(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,parseFloat(i[4]??"1.0"),t):(t=void 0,t))))};ae.packedLength=4;ae.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};ae.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ae),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n};ae.byteToFloat=function(e){return e/255};ae.floatToByte=function(e){return e===1?255:e*256|0};ae.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 ae(e.red,e.green,e.blue,e.alpha)};ae.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};ae.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]};ae.prototype.clone=function(e){return ae.clone(this,e)};ae.prototype.equals=function(e){return ae.equals(this,e)};ae.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};ae.prototype.toString=function(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`};ae.prototype.toCssColorString=function(){let e=ae.floatToByte(this.red),t=ae.floatToByte(this.green),n=ae.floatToByte(this.blue);return this.alpha===1?`rgb(${e},${t},${n})`:`rgba(${e},${t},${n},${this.alpha})`};ae.prototype.toCssHexString=function(){let e=ae.floatToByte(this.red).toString(16);e.length<2&&(e=`0${e}`);let t=ae.floatToByte(this.green).toString(16);t.length<2&&(t=`0${t}`);let n=ae.floatToByte(this.blue).toString(16);if(n.length<2&&(n=`0${n}`),this.alpha<1){let i=ae.floatToByte(this.alpha).toString(16);return i.length<2&&(i=`0${i}`),`#${e}${t}${n}${i}`}return`#${e}${t}${n}`};ae.prototype.toBytes=function(e){let t=ae.floatToByte(this.red),n=ae.floatToByte(this.green),i=ae.floatToByte(this.blue),o=ae.floatToByte(this.alpha);return l(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};ae.bytesToRgba=function(e,t,n,i){return E0[0]=e,E0[1]=t,E0[2]=n,E0[3]=i,VH[0]};ae.prototype.toRgba=function(){return ae.bytesToRgba(ae.floatToByte(this.red),ae.floatToByte(this.green),ae.floatToByte(this.blue),ae.floatToByte(this.alpha))};ae.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};ae.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};ae.prototype.withAlpha=function(e,t){return ae.fromAlpha(this,e,t)};ae.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};ae.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};ae.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};ae.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};ae.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};ae.lerp=function(e,t,n,i){return i.red=W.lerp(e.red,t.red,n),i.green=W.lerp(e.green,t.green,n),i.blue=W.lerp(e.blue,t.blue,n),i.alpha=W.lerp(e.alpha,t.alpha,n),i};ae.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};ae.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};ae.ALICEBLUE=Object.freeze(ae.fromCssColorString("#F0F8FF"));ae.ANTIQUEWHITE=Object.freeze(ae.fromCssColorString("#FAEBD7"));ae.AQUA=Object.freeze(ae.fromCssColorString("#00FFFF"));ae.AQUAMARINE=Object.freeze(ae.fromCssColorString("#7FFFD4"));ae.AZURE=Object.freeze(ae.fromCssColorString("#F0FFFF"));ae.BEIGE=Object.freeze(ae.fromCssColorString("#F5F5DC"));ae.BISQUE=Object.freeze(ae.fromCssColorString("#FFE4C4"));ae.BLACK=Object.freeze(ae.fromCssColorString("#000000"));ae.BLANCHEDALMOND=Object.freeze(ae.fromCssColorString("#FFEBCD"));ae.BLUE=Object.freeze(ae.fromCssColorString("#0000FF"));ae.BLUEVIOLET=Object.freeze(ae.fromCssColorString("#8A2BE2"));ae.BROWN=Object.freeze(ae.fromCssColorString("#A52A2A"));ae.BURLYWOOD=Object.freeze(ae.fromCssColorString("#DEB887"));ae.CADETBLUE=Object.freeze(ae.fromCssColorString("#5F9EA0"));ae.CHARTREUSE=Object.freeze(ae.fromCssColorString("#7FFF00"));ae.CHOCOLATE=Object.freeze(ae.fromCssColorString("#D2691E"));ae.CORAL=Object.freeze(ae.fromCssColorString("#FF7F50"));ae.CORNFLOWERBLUE=Object.freeze(ae.fromCssColorString("#6495ED"));ae.CORNSILK=Object.freeze(ae.fromCssColorString("#FFF8DC"));ae.CRIMSON=Object.freeze(ae.fromCssColorString("#DC143C"));ae.CYAN=Object.freeze(ae.fromCssColorString("#00FFFF"));ae.DARKBLUE=Object.freeze(ae.fromCssColorString("#00008B"));ae.DARKCYAN=Object.freeze(ae.fromCssColorString("#008B8B"));ae.DARKGOLDENROD=Object.freeze(ae.fromCssColorString("#B8860B"));ae.DARKGRAY=Object.freeze(ae.fromCssColorString("#A9A9A9"));ae.DARKGREEN=Object.freeze(ae.fromCssColorString("#006400"));ae.DARKGREY=ae.DARKGRAY;ae.DARKKHAKI=Object.freeze(ae.fromCssColorString("#BDB76B"));ae.DARKMAGENTA=Object.freeze(ae.fromCssColorString("#8B008B"));ae.DARKOLIVEGREEN=Object.freeze(ae.fromCssColorString("#556B2F"));ae.DARKORANGE=Object.freeze(ae.fromCssColorString("#FF8C00"));ae.DARKORCHID=Object.freeze(ae.fromCssColorString("#9932CC"));ae.DARKRED=Object.freeze(ae.fromCssColorString("#8B0000"));ae.DARKSALMON=Object.freeze(ae.fromCssColorString("#E9967A"));ae.DARKSEAGREEN=Object.freeze(ae.fromCssColorString("#8FBC8F"));ae.DARKSLATEBLUE=Object.freeze(ae.fromCssColorString("#483D8B"));ae.DARKSLATEGRAY=Object.freeze(ae.fromCssColorString("#2F4F4F"));ae.DARKSLATEGREY=ae.DARKSLATEGRAY;ae.DARKTURQUOISE=Object.freeze(ae.fromCssColorString("#00CED1"));ae.DARKVIOLET=Object.freeze(ae.fromCssColorString("#9400D3"));ae.DEEPPINK=Object.freeze(ae.fromCssColorString("#FF1493"));ae.DEEPSKYBLUE=Object.freeze(ae.fromCssColorString("#00BFFF"));ae.DIMGRAY=Object.freeze(ae.fromCssColorString("#696969"));ae.DIMGREY=ae.DIMGRAY;ae.DODGERBLUE=Object.freeze(ae.fromCssColorString("#1E90FF"));ae.FIREBRICK=Object.freeze(ae.fromCssColorString("#B22222"));ae.FLORALWHITE=Object.freeze(ae.fromCssColorString("#FFFAF0"));ae.FORESTGREEN=Object.freeze(ae.fromCssColorString("#228B22"));ae.FUCHSIA=Object.freeze(ae.fromCssColorString("#FF00FF"));ae.GAINSBORO=Object.freeze(ae.fromCssColorString("#DCDCDC"));ae.GHOSTWHITE=Object.freeze(ae.fromCssColorString("#F8F8FF"));ae.GOLD=Object.freeze(ae.fromCssColorString("#FFD700"));ae.GOLDENROD=Object.freeze(ae.fromCssColorString("#DAA520"));ae.GRAY=Object.freeze(ae.fromCssColorString("#808080"));ae.GREEN=Object.freeze(ae.fromCssColorString("#008000"));ae.GREENYELLOW=Object.freeze(ae.fromCssColorString("#ADFF2F"));ae.GREY=ae.GRAY;ae.HONEYDEW=Object.freeze(ae.fromCssColorString("#F0FFF0"));ae.HOTPINK=Object.freeze(ae.fromCssColorString("#FF69B4"));ae.INDIANRED=Object.freeze(ae.fromCssColorString("#CD5C5C"));ae.INDIGO=Object.freeze(ae.fromCssColorString("#4B0082"));ae.IVORY=Object.freeze(ae.fromCssColorString("#FFFFF0"));ae.KHAKI=Object.freeze(ae.fromCssColorString("#F0E68C"));ae.LAVENDER=Object.freeze(ae.fromCssColorString("#E6E6FA"));ae.LAVENDAR_BLUSH=Object.freeze(ae.fromCssColorString("#FFF0F5"));ae.LAWNGREEN=Object.freeze(ae.fromCssColorString("#7CFC00"));ae.LEMONCHIFFON=Object.freeze(ae.fromCssColorString("#FFFACD"));ae.LIGHTBLUE=Object.freeze(ae.fromCssColorString("#ADD8E6"));ae.LIGHTCORAL=Object.freeze(ae.fromCssColorString("#F08080"));ae.LIGHTCYAN=Object.freeze(ae.fromCssColorString("#E0FFFF"));ae.LIGHTGOLDENRODYELLOW=Object.freeze(ae.fromCssColorString("#FAFAD2"));ae.LIGHTGRAY=Object.freeze(ae.fromCssColorString("#D3D3D3"));ae.LIGHTGREEN=Object.freeze(ae.fromCssColorString("#90EE90"));ae.LIGHTGREY=ae.LIGHTGRAY;ae.LIGHTPINK=Object.freeze(ae.fromCssColorString("#FFB6C1"));ae.LIGHTSEAGREEN=Object.freeze(ae.fromCssColorString("#20B2AA"));ae.LIGHTSKYBLUE=Object.freeze(ae.fromCssColorString("#87CEFA"));ae.LIGHTSLATEGRAY=Object.freeze(ae.fromCssColorString("#778899"));ae.LIGHTSLATEGREY=ae.LIGHTSLATEGRAY;ae.LIGHTSTEELBLUE=Object.freeze(ae.fromCssColorString("#B0C4DE"));ae.LIGHTYELLOW=Object.freeze(ae.fromCssColorString("#FFFFE0"));ae.LIME=Object.freeze(ae.fromCssColorString("#00FF00"));ae.LIMEGREEN=Object.freeze(ae.fromCssColorString("#32CD32"));ae.LINEN=Object.freeze(ae.fromCssColorString("#FAF0E6"));ae.MAGENTA=Object.freeze(ae.fromCssColorString("#FF00FF"));ae.MAROON=Object.freeze(ae.fromCssColorString("#800000"));ae.MEDIUMAQUAMARINE=Object.freeze(ae.fromCssColorString("#66CDAA"));ae.MEDIUMBLUE=Object.freeze(ae.fromCssColorString("#0000CD"));ae.MEDIUMORCHID=Object.freeze(ae.fromCssColorString("#BA55D3"));ae.MEDIUMPURPLE=Object.freeze(ae.fromCssColorString("#9370DB"));ae.MEDIUMSEAGREEN=Object.freeze(ae.fromCssColorString("#3CB371"));ae.MEDIUMSLATEBLUE=Object.freeze(ae.fromCssColorString("#7B68EE"));ae.MEDIUMSPRINGGREEN=Object.freeze(ae.fromCssColorString("#00FA9A"));ae.MEDIUMTURQUOISE=Object.freeze(ae.fromCssColorString("#48D1CC"));ae.MEDIUMVIOLETRED=Object.freeze(ae.fromCssColorString("#C71585"));ae.MIDNIGHTBLUE=Object.freeze(ae.fromCssColorString("#191970"));ae.MINTCREAM=Object.freeze(ae.fromCssColorString("#F5FFFA"));ae.MISTYROSE=Object.freeze(ae.fromCssColorString("#FFE4E1"));ae.MOCCASIN=Object.freeze(ae.fromCssColorString("#FFE4B5"));ae.NAVAJOWHITE=Object.freeze(ae.fromCssColorString("#FFDEAD"));ae.NAVY=Object.freeze(ae.fromCssColorString("#000080"));ae.OLDLACE=Object.freeze(ae.fromCssColorString("#FDF5E6"));ae.OLIVE=Object.freeze(ae.fromCssColorString("#808000"));ae.OLIVEDRAB=Object.freeze(ae.fromCssColorString("#6B8E23"));ae.ORANGE=Object.freeze(ae.fromCssColorString("#FFA500"));ae.ORANGERED=Object.freeze(ae.fromCssColorString("#FF4500"));ae.ORCHID=Object.freeze(ae.fromCssColorString("#DA70D6"));ae.PALEGOLDENROD=Object.freeze(ae.fromCssColorString("#EEE8AA"));ae.PALEGREEN=Object.freeze(ae.fromCssColorString("#98FB98"));ae.PALETURQUOISE=Object.freeze(ae.fromCssColorString("#AFEEEE"));ae.PALEVIOLETRED=Object.freeze(ae.fromCssColorString("#DB7093"));ae.PAPAYAWHIP=Object.freeze(ae.fromCssColorString("#FFEFD5"));ae.PEACHPUFF=Object.freeze(ae.fromCssColorString("#FFDAB9"));ae.PERU=Object.freeze(ae.fromCssColorString("#CD853F"));ae.PINK=Object.freeze(ae.fromCssColorString("#FFC0CB"));ae.PLUM=Object.freeze(ae.fromCssColorString("#DDA0DD"));ae.POWDERBLUE=Object.freeze(ae.fromCssColorString("#B0E0E6"));ae.PURPLE=Object.freeze(ae.fromCssColorString("#800080"));ae.RED=Object.freeze(ae.fromCssColorString("#FF0000"));ae.ROSYBROWN=Object.freeze(ae.fromCssColorString("#BC8F8F"));ae.ROYALBLUE=Object.freeze(ae.fromCssColorString("#4169E1"));ae.SADDLEBROWN=Object.freeze(ae.fromCssColorString("#8B4513"));ae.SALMON=Object.freeze(ae.fromCssColorString("#FA8072"));ae.SANDYBROWN=Object.freeze(ae.fromCssColorString("#F4A460"));ae.SEAGREEN=Object.freeze(ae.fromCssColorString("#2E8B57"));ae.SEASHELL=Object.freeze(ae.fromCssColorString("#FFF5EE"));ae.SIENNA=Object.freeze(ae.fromCssColorString("#A0522D"));ae.SILVER=Object.freeze(ae.fromCssColorString("#C0C0C0"));ae.SKYBLUE=Object.freeze(ae.fromCssColorString("#87CEEB"));ae.SLATEBLUE=Object.freeze(ae.fromCssColorString("#6A5ACD"));ae.SLATEGRAY=Object.freeze(ae.fromCssColorString("#708090"));ae.SLATEGREY=ae.SLATEGRAY;ae.SNOW=Object.freeze(ae.fromCssColorString("#FFFAFA"));ae.SPRINGGREEN=Object.freeze(ae.fromCssColorString("#00FF7F"));ae.STEELBLUE=Object.freeze(ae.fromCssColorString("#4682B4"));ae.TAN=Object.freeze(ae.fromCssColorString("#D2B48C"));ae.TEAL=Object.freeze(ae.fromCssColorString("#008080"));ae.THISTLE=Object.freeze(ae.fromCssColorString("#D8BFD8"));ae.TOMATO=Object.freeze(ae.fromCssColorString("#FF6347"));ae.TURQUOISE=Object.freeze(ae.fromCssColorString("#40E0D0"));ae.VIOLET=Object.freeze(ae.fromCssColorString("#EE82EE"));ae.WHEAT=Object.freeze(ae.fromCssColorString("#F5DEB3"));ae.WHITE=Object.freeze(ae.fromCssColorString("#FFFFFF"));ae.WHITESMOKE=Object.freeze(ae.fromCssColorString("#F5F5F5"));ae.YELLOW=Object.freeze(ae.fromCssColorString("#FFFF00"));ae.YELLOWGREEN=Object.freeze(ae.fromCssColorString("#9ACD32"));ae.TRANSPARENT=Object.freeze(new ae(0,0,0,0));var U=ae;function pU(e){e=e??B.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}pU.ALL=Object.freeze(new pU({color:new U(0,0,0,0),depth:1,stencil:0}));pU.prototype.execute=function(e,t){e.clear(this,t)};var ui=pU;var xNt=x(T(),1);var pNt=x(T(),1),BLe={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},Le=Object.freeze(BLe);function $ie(e){e=e??B.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=Le.COMPUTE,this.owner=e.owner}$ie.prototype.execute=function(e){e.execute(this)};var _l=$ie;var fUt=x(T(),1);var P9t=x(T(),1);var ANt=x(T(),1);var ss=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;rW.EPSILON12);return l(o)?(o.x=r*X,o.y=s*N,o.z=a*g,o):new m(r*X,s*N,a*g)}var uT=JLe;function cr(e,t,n){this.longitude=e??0,this.latitude=t??0,this.height=n??0}cr.fromRadians=function(e,t,n,i){return n=n??0,l(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new cr(e,t,n)};cr.fromDegrees=function(e,t,n,i){return e=W.toRadians(e),t=W.toRadians(t),cr.fromRadians(e,t,n,i)};var jLe=new m,QLe=new m,qLe=new m;cr._ellipsoidOneOverRadii=new m(1/6378137,1/6378137,1/6356752314245179e-9);cr._ellipsoidOneOverRadiiSquared=new m(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9));cr._ellipsoidCenterToleranceSquared=W.EPSILON1;cr.fromCartesian=function(e,t,n){let i=l(t)?t.oneOverRadii:cr._ellipsoidOneOverRadii,o=l(t)?t.oneOverRadiiSquared:cr._ellipsoidOneOverRadiiSquared,r=l(t)?t._centerToleranceSquared:cr._ellipsoidCenterToleranceSquared,s=uT(e,i,o,r,QLe);if(!l(s))return;let a=m.multiplyComponents(s,o,jLe);a=m.normalize(a,a);let c=m.subtract(e,s,qLe),d=Math.atan2(a.y,a.x),u=Math.asin(a.z),h=W.sign(m.dot(c,e))*m.magnitude(c);return l(n)?(n.longitude=d,n.latitude=u,n.height=h,n):new cr(d,u,h)};cr.toCartesian=function(e,t,n){return m.fromRadians(e.longitude,e.latitude,e.height,t,n)};cr.clone=function(e,t){if(l(e))return l(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new cr(e.longitude,e.latitude,e.height)};cr.equals=function(e,t){return e===t||l(e)&&l(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};cr.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};cr.ZERO=Object.freeze(new cr(0,0,0));cr.prototype.clone=function(e){return cr.clone(this,e)};cr.prototype.equals=function(e){return cr.equals(this,e)};cr.prototype.equalsEpsilon=function(e,t){return cr.equalsEpsilon(this,e,t)};cr.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var be=cr;var UNt=x(T(),1);function ooe(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=W.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function Li(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,ooe(this,e,t,n)}Object.defineProperties(Li.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}}});Li.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 Li(n.x,n.y,n.z)};Li.fromCartesian3=function(e,t){return l(t)||(t=new Li),l(e)&&ooe(t,e.x,e.y,e.z),t};Li.WGS84=Object.freeze(new Li(6378137,6378137,6356752314245179e-9));Li.UNIT_SPHERE=Object.freeze(new Li(1,1,1));Li.MOON=Object.freeze(new Li(W.LUNAR_RADIUS,W.LUNAR_RADIUS,W.LUNAR_RADIUS));Li.MARS=Object.freeze(new Li(3396190,3396190,3376200));Li._default=Li.WGS84;Object.defineProperties(Li,{default:{get:function(){return Li._default},set:function(e){Li._default=e,m._ellipsoidRadiiSquared=e.radiiSquared,be._ellipsoidOneOverRadii=e.oneOverRadii,be._ellipsoidOneOverRadiiSquared=e.oneOverRadiiSquared,be._ellipsoidCenterToleranceSquared=e._centerToleranceSquared}}});Li.prototype.clone=function(e){return Li.clone(this,e)};Li.packedLength=m.packedLength;Li.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),t};Li.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t);return Li.fromCartesian3(i,n)};Li.prototype.geocentricSurfaceNormal=m.normalize;Li.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)};Li.prototype.geodeticSurfaceNormal=function(e,t){if(!m.equalsEpsilon(e,m.ZERO,W.EPSILON14))return l(t)||(t=new m),t=m.multiplyComponents(e,this._oneOverRadiiSquared,t),m.normalize(t,t)};var $Le=new m,eWe=new m;Li.prototype.cartographicToCartesian=function(e,t){let n=$Le,i=eWe;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)};Li.prototype.cartographicArrayToCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i=this._radii.z-t))return n};var oWe=new m;Li.prototype.getLocalCurvature=function(e,t){l(t)||(t=new M);let n=this.getSurfaceNormalIntersectionWithZAxis(e,0,oWe),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 rWe=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],sWe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function ioe(e,t,n){let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*rWe[s];r+=sWe[s]*(n(i+a)+n(i-a))}return r*=o,r}Li.prototype.surfaceArea=function(e){let t=e.west,n=e.east,i=e.south,o=e.north;for(;n0){o=r-1;continue}return r}return~(o+1)}var To=cWe;var eYt=x(T(),1);function lWe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var Hg=lWe;var SYt=x(T(),1);var aYt=x(T(),1);var nYt=x(T(),1);function dWe(e){return e%4===0&&e%100!==0||e%400===0}var Sh=dWe;var roe=[31,28,31,30,31,30,31,31,30,31,30,31];function uWe(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 y(){Do.typeOf.number.greaterThanOrEquals("Year",e,1),Do.typeOf.number.lessThanOrEquals("Year",e,9999),Do.typeOf.number.greaterThanOrEquals("Month",t,1),Do.typeOf.number.lessThanOrEquals("Month",t,12),Do.typeOf.number.greaterThanOrEquals("Day",n,1),Do.typeOf.number.lessThanOrEquals("Day",n,31),Do.typeOf.number.greaterThanOrEquals("Hour",i,0),Do.typeOf.number.lessThanOrEquals("Hour",i,23),Do.typeOf.number.greaterThanOrEquals("Minute",o,0),Do.typeOf.number.lessThanOrEquals("Minute",o,59),Do.typeOf.bool("IsLeapSecond",a),Do.typeOf.number.greaterThanOrEquals("Second",r,0),Do.typeOf.number.lessThanOrEquals("Second",r,a?60:59),Do.typeOf.number.greaterThanOrEquals("Millisecond",s,0),Do.typeOf.number.lessThan("Millisecond",s,1e3)}function _(){let S=t===2&&Sh(e)?roe[t-1]+1:roe[t-1];if(n>S)throw new fe("Month and Day represents invalid date")}}var G0=uWe;var lYt=x(T(),1);function mWe(e,t){this.julianDate=e,this.offset=t}var ho=mWe;var uYt=x(T(),1),hWe={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},li=Object.freeze(hWe);var hYt=x(T(),1),fWe={UTC:0,TAI:1},ai=Object.freeze(fWe);var aoe=new G0,RH=[31,28,31,30,31,30,31,31,30,31,30,31],EH=29;function GH(e,t){return wt.compare(e.julianDate,t.julianDate)}var sZ=new ho;function xU(e){sZ.julianDate=e;let t=wt.leapSeconds,n=To(t,sZ,GH);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&wt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),wt.addSeconds(e,i,e)}function soe(e,t){sZ.julianDate=e;let n=wt.leapSeconds,i=To(n,sZ,GH);if(i<0&&(i=~i),i===0)return wt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return wt.addSeconds(e,-n[i-1].offset,t);let o=wt.secondsDifference(n[i].julianDate,e);if(o===0)return wt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return wt.addSeconds(e,-n[--i].offset,t)}function Kg(e,t,n){let i=t/li.SECONDS_PER_DAY|0;return e+=i,t-=li.SECONDS_PER_DAY*i,t<0&&(e--,t+=li.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function LH(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*li.SECONDS_PER_HOUR+o*li.SECONDS_PER_MINUTE+s*li.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var pWe=/^(\d{4})$/,bWe=/^(\d{4})-(\d{2})$/,gWe=/^(\d{4})-?(\d{3})$/,yWe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,xWe=/^(\d{4})-?(\d{2})-?(\d{2})$/,WH=/([Z+\-])?(\d{2})?:?(\d{2})?$/,TWe=/^(\d{2})(\.\d+)?/.source+WH.source,_We=/^(\d{2}):?(\d{2})(\.\d+)?/.source+WH.source,SWe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+WH.source;function wt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=e??0,t=t??0,n=n??ai.UTC;let i=e|0;t=t+(e-i)*li.SECONDS_PER_DAY,Kg(i,t,this),n===ai.UTC&&xU(this)}wt.fromGregorianDate=function(e,t){let n=LH(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return l(t)?(Kg(n[0],n[1],t),xU(t),t):new wt(n[0],n[1],ai.UTC)};wt.fromDate=function(e,t){let n=LH(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return l(t)?(Kg(n[0],n[1],t),xU(t),t):new wt(n[0],n[1],ai.UTC)};wt.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,b;if(n=u.match(xWe),n!==null)i=+n[1],o=+n[2],r=+n[3];else if(n=u.match(bWe),n!==null)i=+n[1],o=+n[2];else if(n=u.match(pWe),n!==null)i=+n[1];else{let S;if(n=u.match(gWe),n!==null)i=+n[1],S=+n[2],b=Sh(i);else if(n=u.match(yWe),n!==null){i=+n[1];let A=+n[2],Z=+n[3]||0,V=new Date(Date.UTC(i,0,4));S=A*7+Z-V.getUTCDay()-3}p=new Date(Date.UTC(i,0,1)),p.setUTCDate(S),o=p.getUTCMonth()+1,r=p.getUTCDate()}b=Sh(i);let f;if(l(h)){n=h.match(SWe),n!==null?(s=+n[1],a=+n[2],c=+n[3],d=+(n[4]||0)*1e3,f=5):(n=h.match(_We),n!==null?(s=+n[1],a=+n[2],c=+(n[3]||0)*60,f=4):(n=h.match(TWe),n!==null&&(s=+n[1],a=+(n[2]||0)*60,f=3)));let S=n[f],A=+n[f+1],Z=+(n[f+2]||0);switch(S){case"+":s=s-A,a=a-Z;break;case"-":s=s+A,a=a+Z;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let y=c===60;for(y&&c--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=b&&o===2?EH:RH[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=b&&o===2?EH:RH[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=b&&o===2?EH:RH[o-1],r+=p;let _=LH(i,o,r,s,a,c,d);return l(t)?(Kg(_[0],_[1],t),xU(t)):t=new wt(_[0],_[1],ai.UTC),y&&wt.addSeconds(t,1,t),t};wt.now=function(e){return wt.fromDate(new Date,e)};var yU=new wt(0,0,ai.TAI);wt.toGregorianDate=function(e,t){let n=!1,i=soe(e,yU);l(i)||(wt.addSeconds(e,-1,yU),i=soe(yU,yU),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,b=r/li.SECONDS_PER_HOUR|0,f=r-b*li.SECONDS_PER_HOUR,y=f/li.SECONDS_PER_MINUTE|0;f=f-y*li.SECONDS_PER_MINUTE;let _=f|0,S=(f-_)/li.SECONDS_PER_MILLISECOND;return b+=12,b>23&&(b-=24),n&&(_+=1),l(t)?(t.year=p,t.month=h,t.day=u,t.hour=b,t.minute=y,t.second=_,t.millisecond=S,t.isLeapSecond=n,t):new G0(p,h,u,b,y,_,S,n)};wt.toDate=function(e){let t=wt.toGregorianDate(e,aoe),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))};wt.toIso8601=function(e,t){let n=wt.toGregorianDate(e,aoe),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`)};wt.clone=function(e,t){if(l(e))return l(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new wt(e.dayNumber,e.secondsOfDay,ai.TAI)};wt.compare=function(e,t){let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};wt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};wt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(wt.secondsDifference(e,t))<=n};wt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/li.SECONDS_PER_DAY};wt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*li.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};wt.daysDifference=function(e,t){let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/li.SECONDS_PER_DAY;return n+i};wt.computeTaiMinusUtc=function(e){sZ.julianDate=e;let t=wt.leapSeconds,n=To(t,sZ,GH);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};wt.addSeconds=function(e,t,n){return Kg(e.dayNumber,e.secondsOfDay+t,n)};wt.addMinutes=function(e,t,n){let i=e.secondsOfDay+t*li.SECONDS_PER_MINUTE;return Kg(e.dayNumber,i,n)};wt.addHours=function(e,t,n){let i=e.secondsOfDay+t*li.SECONDS_PER_HOUR;return Kg(e.dayNumber,i,n)};wt.addDays=function(e,t,n){let i=e.dayNumber+t;return Kg(i,e.secondsOfDay,n)};wt.lessThan=function(e,t){return wt.compare(e,t)<0};wt.lessThanOrEquals=function(e,t){return wt.compare(e,t)<=0};wt.greaterThan=function(e,t){return wt.compare(e,t)>0};wt.greaterThanOrEquals=function(e,t){return wt.compare(e,t)>=0};wt.prototype.clone=function(e){return wt.clone(this,e)};wt.prototype.equals=function(e){return wt.equals(this,e)};wt.prototype.equalsEpsilon=function(e,t){return wt.equalsEpsilon(this,e,t)};wt.prototype.toString=function(){return wt.toIso8601(this)};wt.leapSeconds=[new ho(new wt(2441317,43210,ai.TAI),10),new ho(new wt(2441499,43211,ai.TAI),11),new ho(new wt(2441683,43212,ai.TAI),12),new ho(new wt(2442048,43213,ai.TAI),13),new ho(new wt(2442413,43214,ai.TAI),14),new ho(new wt(2442778,43215,ai.TAI),15),new ho(new wt(2443144,43216,ai.TAI),16),new ho(new wt(2443509,43217,ai.TAI),17),new ho(new wt(2443874,43218,ai.TAI),18),new ho(new wt(2444239,43219,ai.TAI),19),new ho(new wt(2444786,43220,ai.TAI),20),new ho(new wt(2445151,43221,ai.TAI),21),new ho(new wt(2445516,43222,ai.TAI),22),new ho(new wt(2446247,43223,ai.TAI),23),new ho(new wt(2447161,43224,ai.TAI),24),new ho(new wt(2447892,43225,ai.TAI),25),new ho(new wt(2448257,43226,ai.TAI),26),new ho(new wt(2448804,43227,ai.TAI),27),new ho(new wt(2449169,43228,ai.TAI),28),new ho(new wt(2449534,43229,ai.TAI),29),new ho(new wt(2450083,43230,ai.TAI),30),new ho(new wt(2450630,43231,ai.TAI),31),new ho(new wt(2451179,43232,ai.TAI),32),new ho(new wt(2453736,43233,ai.TAI),33),new ho(new wt(2454832,43234,ai.TAI),34),new ho(new wt(2456109,43235,ai.TAI),35),new ho(new wt(2457204,43236,ai.TAI),36),new ho(new wt(2457754,43237,ai.TAI),37)];var Q=wt;var uMt=x(T(),1),Voe=x($d(),1);var EYt=x(T(),1);function AWe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var vR=AWe;var LYt=x(T(),1);function foe(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=foe(o,t)),n[i]=o}return n}var Be=foe;var FYt=x(T(),1);function poe(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]=poe(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 Gt=poe;var PYt=x(T(),1);function ZWe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var fd=ZWe;var YYt=x(T(),1),boe=x($d(),1);function vH(e,t){let n;return typeof document<"u"&&(n=document),vH._implementation(e,t,n)}vH._implementation=function(e,t,n){if(!l(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new boe.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var $f=vH;var MYt=x(T(),1),goe=x($d(),1);function CWe(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new goe.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var FR=CWe;var UYt=x(T(),1),yoe=x($d(),1);function VWe(e){let t=new yoe.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 L0=VWe;var BYt=x(T(),1);var xoe={};function RWe(e,t,n){l(t)||(t=e.width),l(n)||(n=e.height);let i=xoe[t];l(i)||(i={},xoe[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 Ah=RWe;var HYt=x(T(),1);var EWe=/^blob:/i;function GWe(e){return EWe.test(e)}var mT=GWe;var jYt=x(T(),1);var ep;function LWe(e){l(ep)||(ep=document.createElement("a")),ep.href=window.location.href;let t=ep.host,n=ep.protocol;return ep.href=e,ep.href=ep.href,n!==ep.protocol||t!==ep.host}var Jg=LWe;var qYt=x(T(),1);var WWe=/^data:/i;function vWe(e){return WWe.test(e)}var Zh=vWe;var ewt=x(T(),1);function FWe(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 hT=FWe;var nwt=x(T(),1);function IWe(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;r0){let s=o.substring(0,r),a=o.substring(r+2);t[s]=a}}return t}var IR=YWe;function Toe(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=IR(this.responseHeaders))}Toe.prototype.toString=function(){let e="Request has failed.";return l(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var tp=Toe;var Xwt=x(T(),1),ZU=x($d(),1);var Zwt=x(T(),1);function PR(){this._listeners=new Map,this._toRemove=new Map,this._toAdd=new Map,this._invokingListeners=!1,this._listenerCount=0}Object.defineProperties(PR.prototype,{numberOfListeners:{get:function(){return this._listenerCount}}});PR.prototype.addEventListener=function(e,t){let n=this,i=n._invokingListeners?n._toAdd:n._listeners;return IH(this,i,e,t)&&n._listenerCount++,function(){n.removeEventListener(e,t)}};function IH(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)}PR.prototype.removeEventListener=function(e,t){let n=FH(this,this._listeners,e,t),i=FH(this,this._toAdd,e,t),o=n||i;return o&&this._listenerCount--,o};function FH(e,t,n,i){let o=t.get(n);if(!o||!o.has(i))return!1;if(e._invokingListeners){if(!IH(e,e._toRemove,n,i))return!1}else o.delete(i),o.size===0&&t.delete(n);return!0}PR.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)IH(this,this._listeners,e,n);this._toAdd.clear();for(let[e,t]of this._toRemove.entries())for(let n of t)FH(this,this._listeners,e,n);this._toRemove.clear()};var _e=PR;var Rwt=x(T(),1);function pT(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(pT.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=0;--t)this.heapify(t)};pT.prototype.insert=function(e){let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(oi&&(r=t[i],this._length=i),r};pT.prototype.pop=function(e){if(e=e??0,this._length===0)return;let t=this._array,n=t[e];return PH(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var XR=pT;function wWe(e,t){return e.priority-t.priority}var _o={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},lZ=20,Uc=new XR({comparator:wWe});Uc.maximumLength=lZ;Uc.reserve(lZ);var np=[],W0={},MWe=typeof document<"u"?new ZU.default(document.location.href):new ZU.default,CU=new _e;function Tr(){}Tr.maximumRequests=50;Tr.maximumRequestsPerServer=18;Tr.requestsByServer={};Tr.throttleRequests=!0;Tr.debugShowStatistics=!1;Tr.requestCompletedEvent=CU;Object.defineProperties(Tr,{statistics:{get:function(){return _o}},priorityHeapLength:{get:function(){return lZ},set:function(e){if(ee;){let t=Uc.pop();bT(t)}lZ=e,Uc.maximumLength=e,Uc.reserve(e)}}});function _oe(e){l(e.priorityFunction)&&(e.priority=e.priorityFunction())}Tr.serverHasOpenSlots=function(e,t){t=t??1;let n=Tr.requestsByServer[e]??Tr.maximumRequestsPerServer;return W0[e]+t<=n};Tr.heapHasOpenSlots=function(e){return Uc.length+e<=lZ};function Soe(e){return e.state===bi.UNISSUED&&(e.state=bi.ISSUED,e.deferred=fd()),e.deferred.promise}function kWe(e){return function(t){if(e.state===bi.CANCELLED)return;let n=e.deferred;--_o.numberOfActiveRequests,--W0[e.serverKey],CU.raiseEvent(),e.state=bi.RECEIVED,e.deferred=void 0,n.resolve(t)}}function UWe(e){return function(t){e.state!==bi.CANCELLED&&(++_o.numberOfFailedRequests,--_o.numberOfActiveRequests,--W0[e.serverKey],CU.raiseEvent(t),e.state=bi.FAILED,e.deferred.reject(t))}}function Aoe(e){let t=Soe(e);return e.state=bi.ACTIVE,np.push(e),++_o.numberOfActiveRequests,++_o.numberOfActiveRequestsEver,++W0[e.serverKey],e.requestFunction().then(kWe(e)).catch(UWe(e)),t}function bT(e){let t=e.state===bi.ACTIVE;if(e.state=bi.CANCELLED,++_o.numberOfCancelledRequests,l(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--_o.numberOfActiveRequests,--W0[e.serverKey],++_o.numberOfCancelledActiveRequests),l(e.cancelFunction)&&e.cancelFunction()}Tr.update=function(){let e,t,n=0,i=np.length;for(e=0;e0&&(np[e-n]=t)}np.length-=n;let o=Uc.internalArray,r=Uc.length;for(e=0;e0;){if(t=Uc.pop(),t.cancelled){bT(t);continue}if(t.throttleByServer&&!Tr.serverHasOpenSlots(t.serverKey)){bT(t);continue}Aoe(t),++a}DWe()};Tr.getServerKey=function(e){let t=new ZU.default(e);t.scheme()===""&&(t=t.absoluteTo(MWe),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=W0[n];return l(i)||(W0[n]=0),n};Tr.request=function(e){if(Zh(e.url)||mT(e.url))return CU.raiseEvent(),e.state=bi.RECEIVED,e.requestFunction();if(++_o.numberOfAttemptedRequests,l(e.serverKey)||(e.serverKey=Tr.getServerKey(e.url)),Tr.throttleRequests&&e.throttleByServer&&!Tr.serverHasOpenSlots(e.serverKey))return;if(!Tr.throttleRequests||!e.throttle)return Aoe(e);if(np.length>=Tr.maximumRequests)return;_oe(e);let t=Uc.insert(e);if(l(t)){if(t===e)return;bT(t)}return Soe(e)};function DWe(){Tr.debugShowStatistics&&(_o.numberOfActiveRequests===0&&_o.lastNumberOfActiveRequests>0&&(_o.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${_o.numberOfAttemptedRequests}`),_o.numberOfAttemptedRequests=0),_o.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${_o.numberOfCancelledRequests}`),_o.numberOfCancelledRequests=0),_o.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${_o.numberOfCancelledActiveRequests}`),_o.numberOfCancelledActiveRequests=0),_o.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${_o.numberOfFailedRequests}`),_o.numberOfFailedRequests=0)),_o.lastNumberOfActiveRequests=_o.numberOfActiveRequests)}Tr.clearForSpecs=function(){for(;Uc.length>0;){let t=Uc.pop();bT(t)}let e=np.length;for(let t=0;t0}},credits:{get:function(){return this._credits}}});Yt.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Yt.prototype.parseUrl=function(e,t,n,i){let o=new Voe.default(e),r=BWe(o.query());this._queryParameters=t?RU(r,this.queryParameters,n):r,o.search(""),o.fragment(""),l(i)&&o.scheme()===""&&(o=o.absoluteTo($f(i))),this._url=o.toString()};function BWe(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:eu(e)}function RU(e,t,n){if(!n)return Gt(e,t);let i=Be(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}Yt.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${zWe(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 zWe(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!l(e[t[0]])?`?${t[0]}`:`?${fT(e)}`}Yt.prototype.setQueryParameters=function(e,t){t?this._queryParameters=RU(this._queryParameters,e,!1):this._queryParameters=RU(e,this._queryParameters,!1)};Yt.prototype.appendQueryParameters=function(e){this._queryParameters=RU(e,this._queryParameters,!0)};Yt.prototype.setTemplateValues=function(e,t){t?this._templateValues=Gt(this._templateValues,e):this._templateValues=Gt(e,this._templateValues)};Yt.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=Gt(e.queryParameters,t.queryParameters)),l(e.templateValues)&&(t._templateValues=Gt(e.templateValues,t.templateValues)),l(e.headers)&&(t.headers=Gt(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};Yt.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})};Yt.prototype.clone=function(e){return l(e)?(e._url=this._url,e._queryParameters=Be(this._queryParameters),e._templateValues=Be(this._templateValues),e.headers=Be(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Yt({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})};Yt.prototype.getBaseUri=function(e){return FR(this.getUrlComponent(e),e)};Yt.prototype.appendForwardSlash=function(){this._url=vR(this._url)};Yt.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Yt.fetchArrayBuffer=function(e){return new Yt(e).fetchArrayBuffer()};Yt.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Yt.fetchBlob=function(e){return new Yt(e).fetchBlob()};Yt.prototype.fetchImage=function(e){e=e??B.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(XH(this.request),!Roe||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 Yt.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!l(u))return;if(d=u,a)return Yt.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let h=window.URL.createObjectURL(u);return c=new Yt({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)})};Yt.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=fd();return Yt._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=Dc.request(r);if(l(s))return s.catch(function(a){return r.state!==bi.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=bi.UNISSUED,r.deferred=void 0,t._fetchImage({flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})};Yt.fetchImage=function(e){return new Yt(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Yt.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Yt.fetchText=function(e){return new Yt(e).fetchText()};Yt.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)})};Yt.fetchJson=function(e){return new Yt(e).fetchJson()};Yt.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Yt.fetchXML=function(e){return new Yt(e).fetchXML()};Yt.prototype.fetchJsonp=function(e){e=e??"callback",XH(this.request);let t;do t=`loadJsonp${W.nextRandomNumber().toString().substring(2,8)}`;while(l(window[t]));return Eoe(this,e,t)};function Eoe(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=fd();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Yt._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=Dc.request(o);if(l(s))return s.catch(function(a){return o.state!==bi.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=bi.UNISSUED,o.deferred=void 0,Eoe(e,t,n)):Promise.reject(a)})})}Yt.fetchJsonp=function(e){return new Yt(e).fetchJsonp(e.callbackParameterName)};Yt.prototype._makeRequest=function(e){let t=this;XH(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=Gt(e.headers,t.headers),a=e.overrideMimeType,c=e.method,d=e.data,u=fd(),h=Yt._Implementations.loadWithXhr(i,r,c,d,s,u,a);return l(h)&&l(h.abort)&&(n.cancelFunction=function(){h.abort()}),u.promise};let o=Dc.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!==bi.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=bi.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function XH(e){if(e.state===bi.ISSUED||e.state===bi.ACTIVE)throw new ue("The Resource is already being fetched.");e.state=bi.UNISSUED,e.deferred=void 0}var HWe=/^data:(.*?)(;base64)?,(.*)$/;function VU(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function Coe(e,t){let n=VU(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r{if(!a.ok){let c={};a.headers.forEach((d,u)=>{c[u]=d}),r.reject(new tp(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 tp)})}var jWe=typeof XMLHttpRequest>"u";Yt._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=HWe.exec(e);if(a!==null){r.resolve(KWe(a,t));return}if(jWe){JWe(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(uZ.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 tp(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,h=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let b=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};b.forEach(function(y){let _=y.split(": "),S=_.shift();f[S]=_.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 ue("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new tp)},c.send(i),c};Yt._Implementations.loadAndExecuteScript=function(e,t,n){return hT(e,t).catch(function(i){n.reject(i)})};Yt._DefaultImplementations={};Yt._DefaultImplementations.createImage=Yt._Implementations.createImage;Yt._DefaultImplementations.loadWithXhr=Yt._Implementations.loadWithXhr;Yt._DefaultImplementations.loadAndExecuteScript=Yt._Implementations.loadAndExecuteScript;Yt.DEFAULT=Object.freeze(new Yt({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var We=Yt;function wR(e){e=e??B.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)?Goe(this,e.data):Goe(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}wR.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=We.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new ue(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new wR({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};wR.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 Hg(0,0,0,0,0),t}});wR.prototype.compute=function(e,t){if(!l(this._samples))return;if(l(t)||(t=new Hg(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,Woe(this,n,this._samples,e,o,r,t),t}let s=To(n,e,Q.compare,this._dateColumn);return s>=0?(st.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 Loe(e,n,o,a,s),s;if(i.equals(d))return Loe(e,n,r,a,s),s;let u=Q.secondsDifference(i,c)/Q.secondsDifference(d,c),h=o*a,p=r*a,b=n[h+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],y=f-b;if(y>.5||y<-.5){let _=n[h+e._taiMinusUtcSecondsColumn],S=n[p+e._taiMinusUtcSecondsColumn];_!==S&&(d.equals(i)?b=f:f-=S-_)}return s.xPoleWander=YR(u,n[h+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=YR(u,n[h+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=YR(u,n[h+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=YR(u,n[h+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=YR(u,b,f),s}var MR=wR;var RMt=x(T(),1);function Oc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}Oc.fromQuaternion=function(e,t){l(t)||(t=new Oc);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=-W.asinClamped(n),t};Oc.fromDegrees=function(e,t,n,i){return l(i)||(i=new Oc),i.heading=e*W.RADIANS_PER_DEGREE,i.pitch=t*W.RADIANS_PER_DEGREE,i.roll=n*W.RADIANS_PER_DEGREE,i};Oc.clone=function(e,t){if(l(e))return l(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new Oc(e.heading,e.pitch,e.roll)};Oc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};Oc.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&W.equalsEpsilon(e.heading,t.heading,n,i)&&W.equalsEpsilon(e.pitch,t.pitch,n,i)&&W.equalsEpsilon(e.roll,t.roll,n,i)};Oc.prototype.clone=function(e){return Oc.clone(this,e)};Oc.prototype.equals=function(e){return Oc.equals(this,e)};Oc.prototype.equalsEpsilon=function(e,t,n){return Oc.equalsEpsilon(this,e,t,n)};Oc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var Sc=Oc;var OMt=x(T(),1);var vMt=x(T(),1);var voe={};var Foe=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function qWe(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t"u"?e:(l(EU)||(EU=document.createElement("a")),EU.href=e,EU.href)}var gT;function Poe(){if(l(gT))return gT;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:l(voe?.url)?e=$f(".",voe.url):typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(eU.toUrl)?e=$f("..",yT("Core/buildModuleUrl.js")):e=qWe(),gT=new We({url:Ioe(e)}),gT.appendForwardSlash(),gT}function $We(e){return Ioe(eU.toUrl(`../${e}`))}function Xoe(e){return Poe().getDerivedResource({url:e}).url}var GU;function yT(e){return l(GU)||(typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(eU.toUrl)?GU=$We:GU=Xoe),GU(e)}yT._cesiumScriptRegex=Foe;yT._buildModuleUrlFromBaseUrl=Xoe;yT._clearBaseResource=function(){gT=void 0};yT.setBaseUrl=function(e){gT=We.DEFAULT.getDerivedResource({url:e})};yT.getCesiumBaseUrl=Poe;var qt=yT;var PMt=x(T(),1);function eve(e,t,n){this.x=e,this.y=t,this.s=n}var xT=eve;function wH(e){e=e??B.EMPTY_OBJECT,this._xysFileUrlTemplate=We.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new Q(this._sampleZeroJulianEphemerisDate,0,ai.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 tve=new Q(0,0,ai.TAI);function NH(e,t,n){let i=tve;return i.dayNumber=t,i.secondsOfDay=n,Q.daysDifference(i,e._sampleZeroDateTT)}wH.prototype.preload=function(e,t,n,i){let o=NH(this,e,t),r=NH(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(YH(this,h));return Promise.all(u)};wH.prototype.computeXysRadians=function(e,t,n){let i=NH(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])||(YH(this,s/this._samplesPerXysFile|0),c=!0),l(d[a*3])||(YH(this,a/this._samplesPerXysFile|0),c=!0),c)return;l(n)?(n.x=0,n.y=0,n.s=0):n=new xT(0,0,0);let u=i-s*this._stepSizeDays,h=this._work,p=this._denominators,b=this._coef,f=this._xTable,y,_;for(y=0;y<=r;++y)h[y]=u-f[y];for(y=0;y<=r;++y){for(b[y]=1,_=0;_<=r;++_)_!==y&&(b[y]*=h[_]);b[y]*=p[y];let S=(s+y)*3;n.x+=b[y]*d[S++],n.y+=b[y]*d[S++],n.s+=b[y]*d[S]}return n};function YH(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 We({url:qt(`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;d0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[q.COLUMN1ROW2]-e[q.COLUMN2ROW1])*n,o=(e[q.COLUMN2ROW0]-e[q.COLUMN0ROW2])*n,r=(e[q.COLUMN0ROW1]-e[q.COLUMN1ROW0])*n;else{let h=nve,p=0;c>a&&(p=1),d>a&&d>c&&(p=2);let b=h[p],f=h[b];n=Math.sqrt(e[q.getElementIndex(p,p)]-e[q.getElementIndex(b,b)]-e[q.getElementIndex(f,f)]+1);let y=ive;y[p]=.5*n,n=.5/n,s=(e[q.getElementIndex(f,b)]-e[q.getElementIndex(b,f)])*n,y[b]=(e[q.getElementIndex(b,p)]+e[q.getElementIndex(p,b)])*n,y[f]=(e[q.getElementIndex(f,p)]+e[q.getElementIndex(p,f)])*n,i=-y[0],o=-y[1],r=-y[2]}return l(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new dt(i,o,r,s)};var Noe=new dt,Yoe=new dt,MH=new dt,woe=new dt;dt.fromHeadingPitchRoll=function(e,t){return woe=dt.fromAxisAngle(m.UNIT_X,e.roll,Noe),MH=dt.fromAxisAngle(m.UNIT_Y,-e.pitch,t),t=dt.multiply(MH,woe,MH),Yoe=dt.fromAxisAngle(m.UNIT_Z,-e.heading,Noe),dt.multiply(Yoe,t,t)};var LU=new m,kH=new m,Ch=new dt,Moe=new dt,WU=new dt;dt.packedLength=4;dt.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};dt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new dt),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};dt.packedInterpolationLength=3;dt.convertPackedArrayForInterpolation=function(e,t,n,i){dt.unpack(e,n*4,WU),dt.conjugate(WU,WU);for(let o=0,r=n-t+1;o=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,c=n*n,d=a*a;for(let b=7;b>=0;--b)v0[b]=(vU[b]*c-FU[b])*s,F0[b]=(vU[b]*d-FU[b])*s;let u=r*n*(1+v0[0]*(1+v0[1]*(1+v0[2]*(1+v0[3]*(1+v0[4]*(1+v0[5]*(1+v0[6]*(1+v0[7])))))))),h=a*(1+F0[0]*(1+F0[1]*(1+F0[2]*(1+F0[3]*(1+F0[4]*(1+F0[5]*(1+F0[6]*(1+F0[7])))))))),p=dt.multiplyByScalar(e,h,sve);return dt.multiplyByScalar(t,u,i),dt.add(p,i,i)};dt.fastSquad=function(e,t,n,i,o,r){let s=dt.fastSlerp(e,t,o,DR),a=dt.fastSlerp(n,i,o,hZ);return dt.fastSlerp(s,a,2*o*(1-o),r)};dt.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};dt.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};dt.ZERO=Object.freeze(new dt(0,0,0,0));dt.IDENTITY=Object.freeze(new dt(0,0,0,1));dt.prototype.clone=function(e){return dt.clone(this,e)};dt.prototype.equals=function(e){return dt.equals(this,e)};dt.prototype.equalsEpsilon=function(e,t){return dt.equalsEpsilon(this,e,t)};dt.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Pe=dt;var gi={},BH={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"}},fZ={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},zH={},pd={east:new m,north:new m,up:new m,west:new m,south:new m,down:new m},jg=new m,Qg=new m,qg=new m;gi.localFrameToFixedFrameGenerator=function(e,t){if(!BH.hasOwnProperty(e)||!BH[e].hasOwnProperty(t))throw new fe("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=BH[e][t],i,o=e+t;return l(zH[o])?i=zH[o]:(i=function(r,s,a){if(l(a)||(a=new F),m.equalsEpsilon(r,m.ZERO,W.EPSILON14))m.unpack(fZ[e],0,jg),m.unpack(fZ[t],0,Qg),m.unpack(fZ[n],0,qg);else if(W.equalsEpsilon(r.x,0,W.EPSILON14)&&W.equalsEpsilon(r.y,0,W.EPSILON14)){let c=W.sign(r.z);m.unpack(fZ[e],0,jg),e!=="east"&&e!=="west"&&m.multiplyByScalar(jg,c,jg),m.unpack(fZ[t],0,Qg),t!=="east"&&t!=="west"&&m.multiplyByScalar(Qg,c,Qg),m.unpack(fZ[n],0,qg),n!=="east"&&n!=="west"&&m.multiplyByScalar(qg,c,qg)}else{s=s??ie.default,s.geodeticSurfaceNormal(r,pd.up);let c=pd.up,d=pd.east;d.x=-r.y,d.y=r.x,d.z=0,m.normalize(d,pd.east),m.cross(c,d,pd.north),m.multiplyByScalar(pd.up,-1,pd.down),m.multiplyByScalar(pd.east,-1,pd.west),m.multiplyByScalar(pd.north,-1,pd.south),jg=pd[e],Qg=pd[t],qg=pd[n]}return a[0]=jg.x,a[1]=jg.y,a[2]=jg.z,a[3]=0,a[4]=Qg.x,a[5]=Qg.y,a[6]=Qg.z,a[7]=0,a[8]=qg.x,a[9]=qg.y,a[10]=qg.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},zH[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 ave=new Pe,cve=new m(1,1,1),lve=new F;gi.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=i??gi.eastNorthUpToFixedFrame;let r=Pe.fromHeadingPitchRoll(t,ave),s=F.fromTranslationQuaternionRotationScale(m.ZERO,r,cve,lve);return o=i(e,n,o),F.multiply(o,s,o)};var dve=new F,uve=new q;gi.headingPitchRollQuaternion=function(e,t,n,i,o){let r=gi.headingPitchRollToFixedFrame(e,t,n,i,dve),s=F.getMatrix3(r,uve);return Pe.fromRotationMatrix(s,o)};var mve=new m(1,1,1),hve=new m,Doe=new F,fve=new F,pve=new q,bve=new Pe;gi.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=t??ie.default,n=n??gi.eastNorthUpToFixedFrame,l(i)||(i=new Sc);let o=F.getTranslation(e,hve);if(m.equals(o,m.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=F.inverseTransformation(n(o,t,Doe),Doe),s=F.setScale(e,mve,fve);s=F.setTranslation(s,m.ZERO,s),r=F.multiply(r,s,r);let a=Pe.fromRotationMatrix(F.getMatrix3(r,pve),bve);return a=Pe.normalize(a,a),Sc.fromQuaternion(a,i)};var gve=6*3600+2460+50.54841,yve=8640184812866e-6,xve=.093104,Tve=-62e-7,_ve=11772758384668e-32,Sve=72921158553e-15,Ave=W.TWO_PI/86400,IU=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){IU=Q.addSeconds(e,-Q.computeTaiMinusUtc(e),IU);let n=IU.dayNumber,i=IU.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/li.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/li.DAYS_PER_JULIAN_CENTURY;let a=(gve+o*(yve+o*(xve+o*Tve)))*Ave%W.TWO_PI,c=Sve+_ve*(n-24515455e-1),d=(i+li.SECONDS_PER_DAY*.5)%li.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 q(h,p,0,-p,h,0,0,0,1)};gi.iau2006XysData=new kR;gi.earthOrientationParameters=MR.NONE;var JH=32.184,Zve=2451545;gi.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+JH,i=e.stop.dayNumber,o=e.stop.secondsOfDay+JH;return gi.iau2006XysData.preload(t,n,i,o)};gi.computeIcrfToFixedMatrix=function(e,t){l(t)||(t=new q);let n=gi.computeFixedToIcrfMatrix(e,t);if(l(n))return q.transpose(n,t)};var Cve=32.184,Vve=2451545,PU=new Sc,Rve=new q,Eve=new Q;gi.computeMoonFixedToIcrfMatrix=function(e,t){l(t)||(t=new q);let n=Q.addSeconds(e,Cve,Eve),i=Q.totalDays(n)-Vve,o=W.toRadians(12.112)-W.toRadians(.052992)*i,r=W.toRadians(24.224)-W.toRadians(.105984)*i,s=W.toRadians(227.645)+W.toRadians(13.012)*i,a=W.toRadians(261.105)+W.toRadians(13.340716)*i,c=W.toRadians(358)+W.toRadians(.9856)*i;return PU.pitch=W.toRadians(180)-W.toRadians(3.878)*Math.sin(o)-W.toRadians(.12)*Math.sin(r)+W.toRadians(.07)*Math.sin(s)-W.toRadians(.017)*Math.sin(a),PU.roll=W.toRadians(66.53-90)+W.toRadians(1.543)*Math.cos(o)+W.toRadians(.24)*Math.cos(r)-W.toRadians(.028)*Math.cos(s)+W.toRadians(.007)*Math.cos(a),PU.heading=W.toRadians(244.375-90)+W.toRadians(13.17635831)*i+W.toRadians(3.558)*Math.sin(o)+W.toRadians(.121)*Math.sin(r)-W.toRadians(.064)*Math.sin(s)+W.toRadians(.016)*Math.sin(a)+W.toRadians(.025)*Math.sin(c),q.fromHeadingPitchRoll(PU,Rve)};gi.computeIcrfToMoonFixedMatrix=function(e,t){l(t)||(t=new q);let n=gi.computeMoonFixedToIcrfMatrix(e,t);if(l(n))return q.transpose(n,t)};var Gve=new xT(0,0,0),Lve=new Hg(0,0,0,0,0,0),HH=new q,KH=new q;gi.computeFixedToIcrfMatrix=function(e,t){l(t)||(t=new q);let n=gi.earthOrientationParameters.compute(e,Lve);if(!l(n))return;let i=e.dayNumber,o=e.secondsOfDay+JH,r=gi.iau2006XysData.computeXysRadians(i,o,Gve);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=HH;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=q.fromRotationZ(-r.s,KH),h=q.multiply(d,u,HH),p=e.dayNumber,b=e.secondsOfDay-Q.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,y=b/li.SECONDS_PER_DAY,_=.779057273264+y+.00273781191135448*(f+y);_=_%1*W.TWO_PI;let S=q.fromRotationZ(_,KH),A=q.multiply(h,S,HH),Z=Math.cos(n.xPoleWander),V=Math.cos(n.yPoleWander),E=Math.sin(n.xPoleWander),G=Math.sin(n.yPoleWander),v=i-Zve+o/li.SECONDS_PER_DAY;v/=36525;let I=-47e-6*v*W.RADIANS_PER_DEGREE/3600,X=Math.cos(I),N=Math.sin(I),g=KH;return g[0]=Z*X,g[1]=Z*N,g[2]=E,g[3]=-V*N+G*E*X,g[4]=V*X+G*E*N,g[5]=-G*Z,g[6]=-G*N-V*E*X,g[7]=G*X-V*E*N,g[8]=V*Z,q.multiply(A,g,t)};var Wve=new se;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=Wve;return F.multiplyByVector(e,se.fromElements(n.x,n.y,n.z,1,o),o),se.multiplyByScalar(o,1/o.w,o),F.multiplyByVector(t,o,o),M.fromCartesian4(o,i)};var vve=new m,Fve=new m,Ive=new m;gi.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=(n??ie.default).geodeticSurfaceNormal(e,vve),r=m.cross(t,o,Fve);m.equalsEpsilon(r,m.ZERO,W.EPSILON6)&&(r=m.clone(m.UNIT_X,r));let s=m.cross(r,t,Ive);return m.normalize(s,s),m.cross(t,s,r),m.negate(r,r),m.normalize(r,r),l(i)||(i=new q),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 Ooe=new be,jH=new m,Pve=new m,Xve=new q,QH=new F,Boe=new F;gi.basisTo2D=function(e,t,n){let i=F.getTranslation(t,Pve),o=e.ellipsoid,r;if(m.equals(i,m.ZERO))r=m.clone(m.ZERO,jH);else{let u=o.cartesianToCartographic(i,Ooe);r=e.project(u,jH),m.fromElements(r.z,r.x,r.y,r)}let s=gi.eastNorthUpToFixedFrame(i,o,QH),a=F.inverseTransformation(s,Boe),c=F.getMatrix3(t,Xve),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,QH),r=F.inverseTransformation(o,Boe),s=i.cartesianToCartographic(t,Ooe),a=e.project(s,jH);m.fromElements(a.z,a.x,a.y,a);let c=F.fromTranslation(a,QH);return F.multiply(gi.SWIZZLE_3D_TO_2D_MATRIX,r,n),F.multiply(c,n,n),n};var pt=gi;function wn(e,t,n,i){this.west=e??0,this.south=t??0,this.east=n??0,this.north=i??0}Object.defineProperties(wn.prototype,{width:{get:function(){return wn.computeWidth(this)}},height:{get:function(){return wn.computeHeight(this)}}});wn.packedLength=4;wn.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};wn.unpack=function(e,t,n){return t=t??0,l(n)||(n=new wn),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};wn.computeWidth=function(e){let t=e.east,n=e.west;return t=0?u.longitude:u.longitude+W.TWO_PI;o=Math.min(o,h),r=Math.max(r,h)}return i-n>r-o&&(n=o,i=r,i>W.PI&&(i=i-W.TWO_PI),n>W.PI&&(n=n-W.TWO_PI)),l(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new wn(n,s,i,a)};wn.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=0?h.longitude:h.longitude+W.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>W.PI&&(o=o-W.TWO_PI),i>W.PI&&(i=i-W.TWO_PI)),l(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new wn(i,a,o,c)};var Nve=new m,Yve=new m,wve=new m,Mve=new m,kve=new m,qH=new Array(5);for(let e=0;e0?i+=W.TWO_PI:r0&&(r+=W.TWO_PI),i=u))return l(n)?(n.west=a,n.south=d,n.east=c,n.north=u,n):new wn(a,d,c,u)};wn.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 wn(i,o,r,s)};wn.union=function(e,t,n){l(n)||(n=new wn);let i=e.east,o=e.west,r=t.east,s=t.west;i0?i+=W.TWO_PI:r0&&(r+=W.TWO_PI),io||W.equalsEpsilon(n,o,W.EPSILON14))&&(n=e.south&&i<=e.north};var Uve=new be;wn.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=Uve;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*W.PI_OVER_TWO,wn.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};wn.subsection=function(e,t,n,i,o,r){if(l(r)||(r=new wn),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=W.TWO_PI+e.east-e.west;r.west=W.negativePiToPi(e.west+t*a),r.east=W.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};wn.MAX_VALUE=Object.freeze(new wn(-Math.PI,-W.PI_OVER_TWO,Math.PI,W.PI_OVER_TWO));var ce=wn;function as(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}as.packedLength=4;as.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};as.unpack=function(e,t,n){return t=t??0,l(n)||(n=new as),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};as.fromPoints=function(e,t){if(l(t)||(t=new as),!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;an.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};as.intersect=function(e,t){let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.widthr+t.height?Jt.OUTSIDE:Jt.INTERSECTING};as.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};as.prototype.clone=function(e){return as.clone(this,e)};as.prototype.intersect=function(e){return as.intersect(this,e)};as.prototype.equals=function(e){return as.equals(this,e)};var Qe=as;var Y9t=x(T(),1);var Ac={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};Ac.isLines=function(e){return e===Ac.LINES||e===Ac.LINE_LOOP||e===Ac.LINE_STRIP};Ac.isTriangles=function(e){return e===Ac.TRIANGLES||e===Ac.TRIANGLE_STRIP||e===Ac.TRIANGLE_FAN};Ac.validate=function(e){return e===Ac.POINTS||e===Ac.LINES||e===Ac.LINE_LOOP||e===Ac.LINE_STRIP||e===Ac.TRIANGLES||e===Ac.TRIANGLE_STRIP||e===Ac.TRIANGLE_FAN};var ve=Object.freeze(Ac);var M9t=x(T(),1),TT=`in vec4 position; in vec2 textureCoordinates; out vec2 v_textureCoordinates; void main() { gl_Position = position; v_textureCoordinates = textureCoordinates; } `;var B9t=x(T(),1);var Hr={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 OR(e){e=e??B.EMPTY_OBJECT,this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=e.primitiveType??ve.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 Bc(e,t){return(e._flags&t)===t}function $g(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(OR.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 Bc(this,Hr.CULL)},set:function(e){Bc(this,Hr.CULL)!==e&&($g(this,Hr.CULL,e),this.dirty=!0)}},occlude:{get:function(){return Bc(this,Hr.OCCLUDE)},set:function(e){Bc(this,Hr.OCCLUDE)!==e&&($g(this,Hr.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 Bc(this,Hr.CAST_SHADOWS)},set:function(e){Bc(this,Hr.CAST_SHADOWS)!==e&&($g(this,Hr.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return Bc(this,Hr.RECEIVE_SHADOWS)},set:function(e){Bc(this,Hr.RECEIVE_SHADOWS)!==e&&($g(this,Hr.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 Bc(this,Hr.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){Bc(this,Hr.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&($g(this,Hr.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 Bc(this,Hr.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){Bc(this,Hr.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&($g(this,Hr.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 Bc(this,Hr.PICK_ONLY)},set:function(e){Bc(this,Hr.PICK_ONLY)!==e&&($g(this,Hr.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return Bc(this,Hr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){Bc(this,Hr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&($g(this,Hr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});OR.shallowClone=function(e,t){if(l(e))return l(t)||(t=new OR),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};OR.prototype.execute=function(e,t){e.draw(this,t)};var et=OR;var skt=x(T(),1);var q9t=x(T(),1);var K9t=x(T(),1);var Pi={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};Pi.toWebGLConstant=function(e,t){switch(e){case Pi.UNSIGNED_BYTE:return ne.UNSIGNED_BYTE;case Pi.UNSIGNED_SHORT:return ne.UNSIGNED_SHORT;case Pi.UNSIGNED_INT:return ne.UNSIGNED_INT;case Pi.FLOAT:return ne.FLOAT;case Pi.HALF_FLOAT:return t.webgl2?ne.HALF_FLOAT:ne.HALF_FLOAT_OES;case Pi.UNSIGNED_INT_24_8:return ne.UNSIGNED_INT_24_8;case Pi.UNSIGNED_SHORT_4_4_4_4:return ne.UNSIGNED_SHORT_4_4_4_4;case Pi.UNSIGNED_SHORT_5_5_5_1:return ne.UNSIGNED_SHORT_5_5_5_1;case Pi.UNSIGNED_SHORT_5_6_5:return Pi.UNSIGNED_SHORT_5_6_5}};Pi.isPacked=function(e){return e===Pi.UNSIGNED_INT_24_8||e===Pi.UNSIGNED_SHORT_4_4_4_4||e===Pi.UNSIGNED_SHORT_5_5_5_1||e===Pi.UNSIGNED_SHORT_5_6_5};Pi.sizeInBytes=function(e){switch(e){case Pi.UNSIGNED_BYTE:return 1;case Pi.UNSIGNED_SHORT:case Pi.UNSIGNED_SHORT_4_4_4_4:case Pi.UNSIGNED_SHORT_5_5_5_1:case Pi.UNSIGNED_SHORT_5_6_5:case Pi.HALF_FLOAT:return 2;case Pi.UNSIGNED_INT:case Pi.FLOAT:case Pi.UNSIGNED_INT_24_8:return 4}};Pi.validate=function(e){return e===Pi.UNSIGNED_BYTE||e===Pi.UNSIGNED_SHORT||e===Pi.UNSIGNED_INT||e===Pi.FLOAT||e===Pi.HALF_FLOAT||e===Pi.UNSIGNED_INT_24_8||e===Pi.UNSIGNED_SHORT_4_4_4_4||e===Pi.UNSIGNED_SHORT_5_5_5_1||e===Pi.UNSIGNED_SHORT_5_6_5};Pi.getTypedArrayConstructor=function(e){let t=Pi.sizeInBytes(e);return t===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:t===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:t===Float32Array.BYTES_PER_ELEMENT&&e===Pi.FLOAT?Float32Array:Uint32Array};var De=Object.freeze(Pi);var $e={DEPTH_COMPONENT:ne.DEPTH_COMPONENT,DEPTH_STENCIL:ne.DEPTH_STENCIL,ALPHA:ne.ALPHA,RED: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};$e.componentsLength=function(e){switch(e){case $e.RGB:case $e.RGB_INTEGER:return 3;case $e.RGBA:case $e.RGBA_INTEGER:return 4;case $e.LUMINANCE_ALPHA:case $e.RG:case $e.RG_INTEGER:return 2;case $e.ALPHA:case $e.RED:case $e.RED_INTEGER:case $e.LUMINANCE:return 1;default:return 1}};$e.validate=function(e){return e===$e.DEPTH_COMPONENT||e===$e.DEPTH_STENCIL||e===$e.ALPHA||e===$e.RED||e===$e.RG||e===$e.RGB||e===$e.RGBA||e===$e.RED_INTEGER||e===$e.RG_INTEGER||e===$e.RGB_INTEGER||e===$e.RGBA_INTEGER||e===$e.LUMINANCE||e===$e.LUMINANCE_ALPHA||e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5||e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1||e===$e.RGBA_ASTC||e===$e.RGB_ETC1||e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC||e===$e.RGBA_BC7};$e.isColorFormat=function(e){return e===$e.RED||e===$e.ALPHA||e===$e.RGB||e===$e.RGBA||e===$e.LUMINANCE||e===$e.LUMINANCE_ALPHA};$e.isDepthFormat=function(e){return e===$e.DEPTH_COMPONENT||e===$e.DEPTH_STENCIL};$e.isCompressedFormat=function(e){return e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5||e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1||e===$e.RGBA_ASTC||e===$e.RGB_ETC1||e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC||e===$e.RGBA_BC7};$e.isDXTFormat=function(e){return e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5};$e.isPVRTCFormat=function(e){return e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1};$e.isASTCFormat=function(e){return e===$e.RGBA_ASTC};$e.isETC1Format=function(e){return e===$e.RGB_ETC1};$e.isETC2Format=function(e){return e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC};$e.isBC7Format=function(e){return e===$e.RGBA_BC7};$e.compressedTextureSizeInBytes=function(e,t,n){switch(e){case $e.RGB_DXT1:case $e.RGBA_DXT1:case $e.RGB_ETC1:case $e.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case $e.RGBA_DXT3:case $e.RGBA_DXT5:case $e.RGBA_ASTC:case $e.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case $e.RGB_PVRTC_4BPPV1:case $e.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case $e.RGB_PVRTC_2BPPV1:case $e.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case $e.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};$e.textureSizeInBytes=function(e,t,n,i){let o=$e.componentsLength(e);return De.isPacked(t)&&(o=1),o*De.sizeInBytes(t)*n*i};$e.texture3DSizeInBytes=function(e,t,n,i,o){let r=$e.componentsLength(e);return De.isPacked(t)&&(r=1),r*De.sizeInBytes(t)*n*i*o};$e.alignmentInBytes=function(e,t,n){let i=$e.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};$e.createTypedArray=function(e,t,n,i){let o=De.getTypedArrayConstructor(t),r=$e.componentsLength(e)*n*i;return new o(r)};$e.flipY=function(e,t,n,i,o){if(o===1)return e;let r=$e.createTypedArray(t,n,i,o),s=$e.componentsLength(t),a=i*s;for(let c=0;c0&&console.log(`${sp}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),l(c)&&c.length>0&&console.log(`${sp}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),l(c)&&c.length>0&&console.log(`${sp}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(`${sp}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(`${sp}Vertex shader compile log: ${c}`),console.error(`${sp} Vertex shader source: ${n}`),d=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${sp}Fragment shader compile log: ${c}`),console.error(`${sp} Fragment shader source: ${i}`),d=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new ue(d);function h(p,b){if(!l(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${sp}${b} shader translation failed.`);return}console.error(`${sp}Translated ${b} shaderSource: ${f}`)}}function a2e(e,t,n){let i={};for(let o=0;o=0){if(u=n[d.slice(0,f)],!l(u))continue;h=u._locations,h.length<=1&&(p=u.value,b=e.getUniformLocation(t,d),b!==null&&(h.push(b),p.push(e.getUniform(t,b))))}else{h=[];for(let y=0;y{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 oK=new _e;function iK(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 rK(e){let t=new Pre.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if(Jg(e))s=e;else if(!n){let a=qt(`${ja._workerModulePrefix}/${i}.js`);Jg(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=iK(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=` importScripts("${iK(CESIUM_WORKERS)}"); CesiumWorkers["${i}"](); `;return r=iK(a),new Worker(r,o)}if(r=e,n||(r=qt(`${ja._workerModulePrefix+i}.js`)),!dn.supportsEsmWebWorkers())throw new ue("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function R2e(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!dn.supportsWebAssembly()){if(!l(t.fallbackModulePath))throw new ue(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=qt(t.fallbackModulePath),n}n.wasmBinaryFile=qt(t.wasmBinaryFile);let i=await We.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 E2e=(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 ue(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),oK.raiseEvent(s),i(s)}else oK.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},G2e=[];async function L2e(e,t,n){let i=await Promise.resolve(Xre());l(n)?i||(n.length=0):n=G2e;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",E2e(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:qt.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function W2e(e,t,n){++e._activeTasks;try{let i=await L2e(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=rK(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return W2e(this,e,t)};ja.prototype.initWebAssemblyModule=async function(e){if(l(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=rK(this._workerPath),i=await R2e(this,e),o=await Promise.resolve(Xre()),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 ue("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=oK;ja._defaultWorkerModulePrefix="Workers/";ja._workerModulePrefix=ja._defaultWorkerModulePrefix;ja._canTransferArrayBuffer=void 0;var $n=ja;function P0(){}P0._transcodeTaskProcessor=new $n("transcodeKTX2",Number.POSITIVE_INFINITY);P0._readyPromise=void 0;function v2e(){let e=P0._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return P0._transcodeTaskProcessor;throw new ue("KTX2 transcoder could not be initialized.")});P0._readyPromise=e}P0.transcode=function(e,t){return l(P0._readyPromise)||v2e(),P0._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;rs.x&&m.clone(n,s),Xa.y&&m.clone(n,a),Nc.z&&m.clone(n,c)}let h=m.magnitudeSquared(m.subtract(s,i,Qa)),p=m.magnitudeSquared(m.subtract(a,o,Qa)),b=m.magnitudeSquared(m.subtract(c,r,Qa)),f=i,y=s,_=h;p>_&&(_=p,f=o,y=a),b>_&&(_=b,f=r,y=c);let S=pK;S.x=(f.x+y.x)*.5,S.y=(f.y+y.y)*.5,S.z=(f.z+y.z)*.5;let A=m.magnitudeSquared(m.subtract(y,S,Qa)),Z=Math.sqrt(A),V=bK;V.x=i.x,V.y=o.y,V.z=r.z;let E=gK;E.x=s.x,E.y=a.y,E.z=c.z;let G=m.midpoint(V,E,yK),v=0;for(u=0;uv&&(v=I);let X=m.magnitudeSquared(m.subtract(n,S,Qa));if(X>A){let N=Math.sqrt(X);Z=(Z+N)*.5,A=Z*Z;let g=N-Z;S.x=(Z*S.x+g*n.x)/N,S.y=(Z*S.y+g*n.y)/N,S.z=(Z*S.z+g*n.z)/N}}return Zc.x&&m.clone(o,c),gd.y&&m.clone(o,d),Cu.z&&m.clone(o,u)}let b=m.magnitudeSquared(m.subtract(c,r,Qa)),f=m.magnitudeSquared(m.subtract(d,s,Qa)),y=m.magnitudeSquared(m.subtract(u,a,Qa)),_=r,S=c,A=b;f>A&&(A=f,_=s,S=d),y>A&&(A=y,_=a,S=u);let Z=pK;Z.x=(_.x+S.x)*.5,Z.y=(_.y+S.y)*.5,Z.z=(_.z+S.z)*.5;let V=m.magnitudeSquared(m.subtract(S,Z,Qa)),E=Math.sqrt(V),G=bK;G.x=r.x,G.y=s.y,G.z=a.z;let v=gK;v.x=c.x,v.y=d.y,v.z=u.z;let I=m.midpoint(G,v,yK),X=0;for(p=0;pX&&(X=N);let g=m.magnitudeSquared(m.subtract(o,Z,Qa));if(g>V){let C=Math.sqrt(g);E=(E+C)*.5,V=E*E;let R=C-E;Z.x=(E*Z.x+R*o.x)/C,Z.y=(E*Z.y+R*o.y)/C,Z.z=(E*Z.z+R*o.z)/C}}return Ea.x&&m.clone(i,a),Nc.y&&m.clone(i,c),gd.z&&m.clone(i,d)}let p=m.magnitudeSquared(m.subtract(a,o,Qa)),b=m.magnitudeSquared(m.subtract(c,r,Qa)),f=m.magnitudeSquared(m.subtract(d,s,Qa)),y=o,_=a,S=p;b>S&&(S=b,y=r,_=c),f>S&&(S=f,y=s,_=d);let A=pK;A.x=(y.x+_.x)*.5,A.y=(y.y+_.y)*.5,A.z=(y.z+_.z)*.5;let Z=m.magnitudeSquared(m.subtract(_,A,Qa)),V=Math.sqrt(Z),E=bK;E.x=o.x,E.y=r.y,E.z=s.z;let G=gK;G.x=a.x,G.y=c.y,G.z=d.z;let v=m.midpoint(E,G,yK),I=0;for(h=0;hI&&(I=X);let N=m.magnitudeSquared(m.subtract(i,A,Qa));if(N>Z){let g=Math.sqrt(N);V=(V+g)*.5,Z=V*V;let C=g-V;A.x=(V*A.x+C*i.x)/g,A.y=(V*A.y+C*i.y)/g,A.z=(V*A.z+C*i.z)/g}}return V=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,B2e);return m.add(u,i,u),m.clone(u,n.center),n.radius=d,n};var z2e=new m;An.expand=function(e,t,n){n=An.clone(e,n);let i=m.magnitude(m.subtract(t,n.center,z2e));return i>n.radius&&(n.radius=i),n};An.intersectPlane=function(e,t){let n=e.center,i=e.radius,o=t.normal,r=m.dot(o,n)+t.distance;return r<-i?Jt.OUTSIDE:r>1^-(e&1)}Ro.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a>16&255)/255,t.green=(e>>8&255)/255,t.blue=(e&255)/255,t};Ro.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>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 tn=Ro;var hDt=x(T(),1);var Jre=new m,jre=new m,Qre=new m;function oFe(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,W.EPSILON14))return m.clone(m.UNIT_X,o);if(m.equalsEpsilon(e,n,W.EPSILON14))return m.clone(m.UNIT_Y,o);if(m.equalsEpsilon(e,i,W.EPSILON14))return m.clone(m.UNIT_Z,o);r=m.subtract(n,t,Jre),s=m.subtract(i,t,jre),a=m.subtract(e,t,Qre),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,W.EPSILON14))return m.clone(m.UNIT_X,o);if(M.equalsEpsilon(e,n,W.EPSILON14))return m.clone(m.UNIT_Y,o);if(M.equalsEpsilon(e,i,W.EPSILON14))return m.clone(m.UNIT_Z,o);r=M.subtract(n,t,Jre),s=M.subtract(i,t,jre),a=M.subtract(e,t,Qre),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 b=c*h-d*d;if(b!==0)return o.y/=b,o.z/=b,o.x=1-o.y-o.z,o}var ST=oFe;var gDt=x(T(),1);function ap(){this.high=m.clone(m.ZERO),this.low=m.clone(m.ZERO)}ap.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 X0={high:0,low:0};ap.fromCartesian=function(e,t){l(t)||(t=new ap);let n=t.high,i=t.low;return ap.encode(e.x,X0),n.x=X0.high,i.x=X0.low,ap.encode(e.y,X0),n.y=X0.high,i.y=X0.low,ap.encode(e.z,X0),n.z=X0.high,i.z=X0.low,t};var AK=new ap;ap.writeElements=function(e,t,n){ap.fromCartesian(e,AK);let i=AK.high,o=AK.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 Zn=ap;var DDt=x(T(),1);var TDt=x(T(),1);var ZK={};ZK.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function qre(e,t,n){let i=e+t;return W.sign(e)!==W.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))d&&d/c0?[a/e,n/a]:[n/a,a/e]};var Sl=ZK;var EDt=x(T(),1);var ADt=x(T(),1);var VK={};VK.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 CK(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,b=o*a-r*s,f=r*a-h,y=4*p*f-b*b,_,S;if(y<0){let z,J,ee;u*d>=c*h?(z=o,J=p,ee=-2*r*p+o*b):(z=a,J=f,ee=-a*b+2*s*f);let te=-(ee<0?-1:1)*Math.abs(z)*Math.sqrt(-y);S=-ee+te;let $=S/2,pe=$<0?-Math.pow(-$,1/3):Math.pow($,1/3),xe=S===te?-pe:-J/pe;return _=J<=0?pe+xe:-ee/(pe*pe+xe*xe+J),u*d>=c*h?[(_-r)/o]:[-a/(_+s)]}let A=p,Z=-2*r*p+o*b,V=f,E=-a*b+2*s*f,G=Math.sqrt(y),v=Math.sqrt(3)/2,I=Math.abs(Math.atan2(o*G,-Z)/3);_=2*Math.sqrt(-A);let X=Math.cos(I);S=_*X;let N=_*(-X/2-v*Math.sin(I)),g=S+N>2*r?S-r:N-r,C=o,R=g/C;I=Math.abs(Math.atan2(a*G,-E)/3),_=2*Math.sqrt(-V),X=Math.cos(I),S=_*X,N=_*(-X/2-v*Math.sin(I));let L=-a,P=S+N<2*s?S+s:N+s,Y=L/P,O=C*P,k=-g*P-C*L,D=g*L,w=(s*k-r*D)/(-r*k+s*O);return R<=w?R<=Y?w<=Y?[R,w,Y]:[R,Y,w]:[Y,R,w]:R<=Y?[w,R,Y]:w<=Y?[w,Y,R]:[Y,w,R]}VK.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return Sl.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=Sl.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return CK(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):CK(e,t,0,i);if(i===0)return o=Sl.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 CK(e,t,n,i)};var AT=VK;var RK={};RK.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,b=o*o,f=b*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)+b*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function Rh(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=AT.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)=0&&b>=0){let y=Math.sqrt(p),_=Math.sqrt(b);return[d-_,d-y,d+y,d+_]}else{if(p>=0&&b<0)return f=Math.sqrt(p),[d-f,d+f];if(p<0&&b>=0)return f=Math.sqrt(b),[d-f,d+f]}}return[]}else if(u>0){let h=Math.sqrt(u),p=(r+u-s/h)/2,b=(r+u+s/h)/2,f=Sl.computeRealRoots(1,h,p),y=Sl.computeRealRoots(1,-h,b);return f.length!==0?(f[0]+=d,f[1]+=d,y.length!==0?(y[0]+=d,y[1]+=d,f[1]<=y[0]?[f[0],f[1],y[0],y[1]]:y[1]<=f[0]?[y[0],y[1],f[0],f[1]]:f[0]>=y[0]&&f[1]<=y[1]?[y[0],f[0],f[1],y[1]]:y[0]>=f[0]&&y[1]<=f[1]?[f[0],y[0],y[1],f[1]]:f[0]>y[0]&&f[0]0){let h=u[0],p=t-h,b=p*p,f=e/2,y=p/2,_=b-4*i,S=b+4*Math.abs(i),A=s-4*h,Z=s+4*Math.abs(h),V,E;if(h<0||_*Z=g[0]&&N[1]<=g[1]?[g[0],N[0],N[1],g[1]]:g[0]>=N[0]&&g[1]<=N[1]?[N[0],g[0],g[1],N[1]]:N[0]>g[0]&&N[0]u)||(p=m.cross(h,a,ese),f=m.dot(s,p),f<0||b+f>u))return;y=m.dot(c,p)/u}else{if(Math.abs(u)1||(p=m.cross(h,a,ese),f=m.dot(s,p)*_,f<0||b+f>1))return;y=m.dot(c,p)*_}return y};tr.rayTriangle=function(e,t,n,i,o,r){let s=tr.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 aFe=new xn;tr.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=aFe;m.clone(e,a.origin),m.subtract(t,e,a.direction),m.normalize(a.direction,a.direction);let c=tr.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 cFe(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 cs))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var uFe=new m,mFe=new m;tr.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=m.multiplyComponents(n,e.origin,uFe),o=m.multiplyComponents(n,e.direction,mFe),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,pd){u=s*s-d,h=-s+Math.sqrt(u);let f=h/c,y=a/h;return fo.start?i.start:o.start,n.stop=i.stopo.stop||o.start>i.stop)&&!(n.start>r.stop||r.start>n.stop))return r.start>n.start&&(n.start=r.start),r.stop0?b.push(new m(i,o*X,o*-C)):C!==0?(b.push(new m(i,o*X,o*-C)),b.push(new m(i,o*X,o*C)),++I):b.push(new m(i,o*X,o*C))}return b};var GK=new m,tse=new m,nse=new m,DU=new m,bFe=new m,gFe=new q,yFe=new q,xFe=new q,TFe=new q,_Fe=new q,ise=new q,ose=new q,rse=new m,SFe=new m,AFe=new be;tr.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!m.equals(n,m.ZERO)){let G=t.geodeticSurfaceNormal(n,GK);if(m.dot(i,G)>=0)return n}let o=l(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,GK),s=m.normalize(r,r),a=m.mostOrthogonalAxis(r,DU),c=m.normalize(m.cross(a,s,tse),tse),d=m.normalize(m.cross(s,c,nse),nse),u=gFe;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=q.transpose(u,yFe),p=q.fromScale(t.radii,xFe),b=q.fromScale(t.oneOverRadii,TFe),f=_Fe;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 y=q.multiply(q.multiply(h,b,ise),f,ise),_=q.multiply(q.multiply(y,p,ose),u,ose),S=q.multiplyByVector(y,n,bFe),A=tr.quadraticVectorExpression(_,m.negate(S,GK),0,0,1),Z,V,E=A.length;if(E>0){let G=m.clone(m.ZERO,SFe),v=Number.NEGATIVE_INFINITY;for(let X=0;Xv&&(v=g,G=m.clone(Z,G))}let I=t.cartesianToCartographic(G,AFe);return v=W.clamp(v,0,1),V=m.magnitude(m.subtract(G,n,DU))*Math.sqrt(1-v*v),V=o?-V:V,I.height=V,t.cartographicToCartesian(I,new m)}};var ZFe=new m;tr.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)1))return m.multiplyByScalar(o,c,i),m.add(e,i,i),i};tr.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 tr.lineSegmentPlane(e,t,i,u),tr.lineSegmentPlane(e,n,i,h),{positions:[e,t,n,u,h],indices:[0,3,4,1,2,4,1,4,3]};if(a)return tr.lineSegmentPlane(t,n,i,u),tr.lineSegmentPlane(t,e,i,h),{positions:[e,t,n,u,h],indices:[1,3,4,2,0,4,2,4,3]};if(c)return tr.lineSegmentPlane(n,e,i,u),tr.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 tr.lineSegmentPlane(e,n,i,u),tr.lineSegmentPlane(t,n,i,h),{positions:[e,t,n,u,h],indices:[0,1,4,0,4,3,2,3,4]}}else return tr.lineSegmentPlane(n,t,i,u),tr.lineSegmentPlane(e,t,i,h),{positions:[e,t,n,u,h],indices:[2,0,4,2,4,3,1,3,4]};else return tr.lineSegmentPlane(t,e,i,u),tr.lineSegmentPlane(n,e,i,h),{positions:[e,t,n,u,h],indices:[1,2,4,1,4,3,0,3,4]}};var mi=tr;var JDt=x(T(),1);function Za(e,t){this.normal=m.clone(e),this.distance=t}Za.fromPointNormal=function(e,t,n){let i=-m.dot(t,e);return l(n)?(m.clone(t,n.normal),n.distance=i,n):new Za(t,i)};var CFe=new m;Za.fromCartesian4=function(e,t){let n=m.fromCartesian4(e,CFe),i=e.w;return l(t)?(m.clone(n,t.normal),t.distance=i,t):new Za(n,i)};Za.getPointDistance=function(e,t){return m.dot(e.normal,t)+e.distance};var VFe=new m;Za.projectPointOntoPlane=function(e,t,n){l(n)||(n=new m);let i=Za.getPointDistance(e,t),o=m.multiplyByScalar(e.normal,i,VFe);return m.subtract(t,o,n)};var RFe=new F,EFe=new se,GFe=new m;Za.transform=function(e,t,n){let i=e.normal,o=e.distance,r=F.inverseTranspose(t,RFe),s=se.fromElements(i.x,i.y,i.z,o,EFe);s=F.multiplyByVector(r,s,s);let a=m.fromCartesian4(s,GFe);return s=se.divideByScalar(s,m.magnitude(a),s),Za.fromCartesian4(s,n)};Za.clone=function(e,t){return l(t)?(m.clone(e.normal,t.normal),t.distance=e.distance,t):new Za(e.normal,e.distance)};Za.equals=function(e,t){return e.distance===t.distance&&m.equals(e.normal,t.normal)};Za.ORIGIN_XY_PLANE=Object.freeze(new Za(m.UNIT_Z,0));Za.ORIGIN_YZ_PLANE=Object.freeze(new Za(m.UNIT_X,0));Za.ORIGIN_ZX_PLANE=Object.freeze(new Za(m.UNIT_Y,0));var an=Za;var $Dt=x(T(),1);var LK={};LK.calculateACMR=function(e){e=e??B.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(;an&&(n=c),++a,c=t[a]}let r=[];for(let a=0;ai&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};LK.tipsify=function(e){e=e??B.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(g,C,R,L){for(;C.length>=1;){let P=C[C.length-1];if(C.splice(C.length-1,1),g[P].numLiveTriangles>0)return P}for(;o0)return++o,o-1;++o}return-1}function s(g,C,R,L,P,Y,O){let k=-1,D,w=-1,z=0;for(;zw||w===-1)&&(w=D,k=J)),++z}return k===-1?r(L,Y,g,O):k}let a=t.length,c=0,d=0,u=t[d],h=a;if(l(n))c=n+1;else{for(;dc&&(c=u),++d,u=t[d];if(c===-1)return 0;++c}let p=[],b;for(b=0;bi&&(Z.timeStamp=_,++_),++d}y=s(t,i,S,p,_,A,c)}return G};var eE=LK;var Al={};function jU(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function LFe(e){let t=e.length,n=t/3*6,i=Ne.createTypedArray(t,n),o=0;for(let r=0;r=3){let n=(t-2)*6,i=Ne.createTypedArray(t,n);jU(i,0,e[0],e[1],e[2]);let o=6;for(let r=3;r0){let t=e.length-1,n=(t-1)*6,i=Ne.createTypedArray(t,n),o=e[0],r=0;for(let s=1;so&&(o=n[r]);e.indices=eE.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function cse(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 Ie({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function FFe(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=W.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=cse(e.attributes),a=e.indices,c=a.length,d;e.primitiveType===ve.TRIANGLES?d=3:e.primitiveType===ve.LINES?d=2:e.primitiveType===ve.POINTS&&(d=1);for(let u=0;u=W.SIXTY_FOUR_KILOBYTES&&(t.push(new gt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=cse(e.attributes))}o.length!==0&&t.push(new gt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var lse=new m,IFe=new be;Al.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)}return new gt({attributes:u,indices:f,primitiveType:d,boundingSphere:l(y)?new de(y,_):void 0})}Al.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r0&&o.push(IK(t,"geometry")),n.length>0&&(o.push(IK(n,"westHemisphereGeometry")),o.push(IK(n,"eastHemisphereGeometry"))),o};var dm=new m,tE=new m,bZ=new m,gZ=new m;Al.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;d0){for(u=0;u3&&(n[3]=0,n[4]=2,n[5]=3);let i=6;for(let o=3;oo?i>r?s=W.sign(e.y):s=W.sign(n.y):o>r?s=W.sign(t.y):s=W.sign(n.y);let a=s<0;ey(e,a),ey(t,a),ey(n,a)}var hse=new m;function um(e,t,n,i){m.add(e,m.multiplyByScalar(m.subtract(t,e,hse),e.y/(e.y-t.y),hse),n),m.clone(n,i),ey(n,!0),ey(i,!1)}var CT=new m,VT=new m,RT=new m,ET=new m,PK={positions:new Array(7),indices:new Array(9)};function HFe(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;zFe(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=PK.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(um(e,t,CT,RT),um(e,n,VT,ET),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(um(t,n,CT,RT),um(t,e,VT,ET),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(um(n,e,CT,RT),um(n,t,VT,ET),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||(um(n,e,CT,RT),um(n,t,VT,ET),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(um(t,n,CT,RT),um(t,e,VT,ET),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(um(e,t,CT,RT),um(e,n,VT,ET),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=PK.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=CT,c[4]=VT,c[5]=RT,c[6]=ET,c.length=7),PK}function fse(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=K.createTypedArray(r.componentDatatype,r.values)}let i=gt.computeNumberOfVertices(e);return e.indices=Ne.createTypedArray(i,e.indices),t&&(e.boundingSphere=de.fromVertices(n.position.values)),e}function xZ(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 Ie({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new gt({attributes:n,indices:[],primitiveType:e.primitiveType})}function wK(e,t,n){let i=l(e.geometry.boundingSphere);t=fse(t,i),n=fse(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 MK(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,d,u,h,p){let b=e.fromArray(d,r*t,n),f=e.fromArray(d,s*t,i),y=e.fromArray(d,a*t,o);e.multiplyByScalar(b,c.x,b),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(y,c.z,y);let _=e.add(b,f,b);e.add(_,y,_),p&&e.normalize(_,_),e.pack(_,u,h*t)}}var KFe=MK(se,4),JU=MK(m,3),Tse=MK(M,2),JFe=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>W.EPSILON6?1:0},iE=new m,XK=new m,NK=new m,jFe=new m;function HU(e,t,n,i,o,r,s,a,c,d,u,h,p,b,f,y){if(!l(r)&&!l(s)&&!l(a)&&!l(c)&&!l(d)&&b===0)return;let _=m.fromArray(o,e*3,iE),S=m.fromArray(o,t*3,XK),A=m.fromArray(o,n*3,NK),Z=ST(i,_,S,A,jFe);if(l(Z)){if(l(r)&&JU(e,t,n,Z,r,h.normal.values,y,!0),l(d)){let V=m.fromArray(d,e*3,iE),E=m.fromArray(d,t*3,XK),G=m.fromArray(d,n*3,NK);m.multiplyByScalar(V,Z.x,V),m.multiplyByScalar(E,Z.y,E),m.multiplyByScalar(G,Z.z,G);let v;!m.equals(V,m.ZERO)||!m.equals(E,m.ZERO)||!m.equals(G,m.ZERO)?(v=m.add(V,E,V),m.add(v,G,v),m.normalize(v,v)):(v=iE,v.x=0,v.y=0,v.z=0),m.pack(v,h.extrudeDirection.values,y*3)}if(l(u)&&JFe(e,t,n,Z,u,h.applyOffset.values,y),l(s)&&JU(e,t,n,Z,s,h.tangent.values,y,!0),l(a)&&JU(e,t,n,Z,a,h.bitangent.values,y,!0),l(c)&&Tse(e,t,n,Z,c,h.st.values,y),b>0)for(let V=0;V3){let L=R.positions,P=R.indices,Y=P.length;for(let O=0;O0)continue;let c=m.unpack(i,s,Ase);(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,YK);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+30||de.intersectPlane(n,an.ORIGIN_ZX_PLANE)!==Jt.INTERSECTING))return e;if(t.geometryType!==lm.NONE)switch(t.geometryType){case lm.POLYLINES:sIe(e);break;case lm.TRIANGLES:pse(e);break;case lm.LINES:bse(e);break}else BFe(t),t.primitiveType===ve.TRIANGLES?pse(e):t.primitiveType===ve.LINES&&bse(e);return e};var Kn=Al;var GOt=x(T(),1);function oE(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(oE.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}});oE.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,b=this._internalFormat,f=this._pixelDatatype,y=this._preMultiplyAlpha,_=this._flipY,S=4;l(u)&&(S=Ke.alignmentInBytes(p,f,r)),a.pixelStorei(a.UNPACK_ALIGNMENT,S),o?a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.NONE):a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.BROWSER_DEFAULT_WEBGL);let A=!1;if(!this._initialized){let Z;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),_&&(u=Ke.flipY(u,p,f,h,h)),Z=u):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,_),Z=i),A=!0):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),Z=Ke.createTypedArray(p,f,h,h)),a.texImage2D(d,0,b,h,h,0,p,De.toWebGLConstant(f,this._context),Z),this._initialized=!0}A||(l(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),_&&(u=Ke.flipY(u,p,f,r,s)),a.texSubImage2D(d,0,t,n,r,s,p,De.toWebGLConstant(f,this._context),u)):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,_),a.texSubImage2D(d,0,t,n,p,De.toWebGLConstant(f,this._context),i))),a.bindTexture(c,null)};oE.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};oE.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 rE=oE;var vOt=x(T(),1);var QU={DONT_CARE:ne.DONT_CARE,FASTEST:ne.FASTEST,NICEST:ne.NICEST,validate:function(e){return e===QU.DONT_CARE||e===QU.FASTEST||e===QU.NICEST}},mm=Object.freeze(QU);var KOt=x(T(),1);var POt=x(T(),1);var qU={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR};qU.validate=function(e){return e===qU.NEAREST||e===qU.LINEAR};var ci=Object.freeze(qU);var YOt=x(T(),1);var ty={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};ty.validate=function(e){return e===ty.NEAREST||e===ty.LINEAR||e===ty.NEAREST_MIPMAP_NEAREST||e===ty.LINEAR_MIPMAP_NEAREST||e===ty.NEAREST_MIPMAP_LINEAR||e===ty.LINEAR_MIPMAP_LINEAR};var Bt=Object.freeze(ty);var kOt=x(T(),1);var $U={CLAMP_TO_EDGE:ne.CLAMP_TO_EDGE,REPEAT:ne.REPEAT,MIRRORED_REPEAT:ne.MIRRORED_REPEAT,validate:function(e){return e===$U.CLAMP_TO_EDGE||e===$U.REPEAT||e===$U.MIRRORED_REPEAT}},hn=Object.freeze($U);function sE(e){e=e??B.EMPTY_OBJECT;let{wrapR:t=hn.CLAMP_TO_EDGE,wrapS:n=hn.CLAMP_TO_EDGE,wrapT:i=hn.CLAMP_TO_EDGE,minificationFilter:o=Bt.LINEAR,magnificationFilter:r=ci.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(sE.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}}});sE.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};sE.NEAREST=Object.freeze(new sE({wrapR:hn.CLAMP_TO_EDGE,wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST}));var zt=sE;var uBt=x(T(),1);var QOt=x(T(),1);function aIe(e,t){if(!e)throw new fe(t)}var kK=aIe;function cIe(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??K.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;i0&&(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 Zse(e){return e.values.length/e.componentsPerAttribute}function lIe(e){return K.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function dIe(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===K.DOUBLE&&(e[n].componentDatatype=K.FLOAT,e[n].values=K.createTypedArray(K.FLOAT,e[n].values)));let r,s=o.length;if(s>0)for(r=Zse(e[o[0]]),t=1;t0){let d=K.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let h=r*a,p=new ArrayBuffer(h),b={};for(t=0;t=W.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=qe.createIndexBuffer({context:t,typedArray:new Uint32Array(b),usage:i,indexDatatype:Ne.UNSIGNED_INT}):p=qe.createIndexBuffer({context:t,typedArray:new Uint16Array(b),usage:i,indexDatatype:Ne.UNSIGNED_SHORT})),new Lh({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(Lh.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});Lh.prototype.getAttribute=function(e){return this._attributes[e]};function uIe(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=vt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function mIe(e,t){let n=e._attributes,i=n.length;for(let o=0;o1/pi. * * @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 n3t=x(T(),1),yE=`/** * A built-in GLSL floating-point constant for 1/2pi. * * @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 o3t=x(T(),1),xE=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE} * * @name czm_passCesium3DTile * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTile = 5.0; `;var s3t=x(T(),1),TE=`/** * 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 c3t=x(T(),1),_E=`/** * 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 d3t=x(T(),1),SE=`/** * 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 m3t=x(T(),1),AE=`/** * The automatic GLSL constant for {@link Pass#CLASSIFICATION} * * @name czm_passClassification * @glslConstant * * @see czm_pass */ const float czm_passClassification = 7.0; `;var f3t=x(T(),1),ZE=`/** * The automatic GLSL constant for {@link Pass#COMPUTE} * * @name czm_passCompute * @glslConstant * * @see czm_pass */ const float czm_passCompute = 1.0; `;var b3t=x(T(),1),CE=`/** * The automatic GLSL constant for {@link Pass#ENVIRONMENT} * * @name czm_passEnvironment * @glslConstant * * @see czm_pass */ const float czm_passEnvironment = 0.0; `;var y3t=x(T(),1),VE=`/** * The automatic GLSL constant for {@link Pass#GAUSSIAN_SPLATS} * * @name czm_passGaussianSplats * @glslConstant * * @see czm_pass */ const float czm_passGaussianSplats = 11.0; `;var T3t=x(T(),1),RE=`/** * The automatic GLSL constant for {@link Pass#GLOBE} * * @name czm_passGlobe * @glslConstant * * @see czm_pass */ const float czm_passGlobe = 2.0; `;var S3t=x(T(),1),EE=`/** * The automatic GLSL constant for {@link Pass#OPAQUE} * * @name czm_passOpaque * @glslConstant * * @see czm_pass */ const float czm_passOpaque = 8.0; `;var Z3t=x(T(),1),GE=`/** * The automatic GLSL constant for {@link Pass#OVERLAY} * * @name czm_passOverlay * @glslConstant * * @see czm_pass */ const float czm_passOverlay = 12.0; `;var V3t=x(T(),1),LE=`/** * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION} * * @name czm_passTerrainClassification * @glslConstant * * @see czm_pass */ const float czm_passTerrainClassification = 3.0; `;var E3t=x(T(),1),WE=`/** * The automatic GLSL constant for {@link Pass#TRANSLUCENT} * * @name czm_passTranslucent * @glslConstant * * @see czm_pass */ const float czm_passTranslucent = 9.0; `;var L3t=x(T(),1),vE=`/** * The automatic GLSL constant for {@link Pass#VOXELS} * * @name czm_passVoxels * @glslConstant * * @see czm_pass */ const float czm_passVoxels = 10.0; `;var v3t=x(T(),1),FE=`/** * A built-in GLSL floating-point constant for Math.PI. * * @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 I3t=x(T(),1),IE=`/** * A built-in GLSL floating-point constant for pi/4. * * @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 X3t=x(T(),1),PE=`/** * A built-in GLSL floating-point constant for pi/6. * * @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 Y3t=x(T(),1),XE=`/** * A built-in GLSL floating-point constant for pi/3. * * @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 M3t=x(T(),1),NE=`/** * A built-in GLSL floating-point constant for pi/2. * * @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 U3t=x(T(),1),YE=`/** * 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 O3t=x(T(),1),wE=`/** * 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 z3t=x(T(),1),ME=`/** * 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 K3t=x(T(),1),kE=`/** * 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 j3t=x(T(),1),UE=`/** * 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 q3t=x(T(),1),DE=`/** * 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 ezt=x(T(),1),OE=`/** * A built-in GLSL floating-point constant for 3pi/2. * * @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 nzt=x(T(),1),BE=`/** * A built-in GLSL floating-point constant for 2pi. * * @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 ozt=x(T(),1),zE=`/** * 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 szt=x(T(),1),HE=`/** * @name czm_depthRangeStruct * @glslStruct */ struct czm_depthRangeStruct { float near; float far; }; `;var czt=x(T(),1),KE=`/** * 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 dzt=x(T(),1),JE=`/** * 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 mzt=x(T(),1),jE=`/** * 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. *

* All color values (diffuse, specular, emissive) are in linear color space. *

* * @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 fzt=x(T(),1),QE=`/** * 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 bzt=x(T(),1),qE=`/** * DOC_TBA * * @name czm_ray * @glslStruct */ struct czm_ray { vec3 origin; vec3 direction; }; `;var yzt=x(T(),1),$E=`/** * 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 Tzt=x(T(),1),eG=`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 Szt=x(T(),1),tG=`/** * 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 Zzt=x(T(),1),nG=`/** * 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 Vzt=x(T(),1),iG=`/** * 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 Ezt=x(T(),1),oG=`/** * 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 Lzt=x(T(),1),rG=`/** * Converts an RGB color to CIE Yxy. *

The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} *

* * @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 vzt=x(T(),1),sG=`/** * Converts a CIE Yxy color to RGB. *

The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} *

* * @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 Izt=x(T(),1),aG=`// 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 Xzt=x(T(),1),cG=`/** * @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 Yzt=x(T(),1),lG=`/** * 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 color1 or color2. * @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 Mzt=x(T(),1),dG=`/** * 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 Uzt=x(T(),1),uG=`/** * 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 Ozt=x(T(),1),mG=`/** * 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 zzt=x(T(),1),hG=`/** * Determines if the fragment is back facing * * @name czm_backFacing * @glslFunction * * @returns {bool} true if the fragment is back facing; otherwise, false. */ 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 Kzt=x(T(),1),fG=`/** * 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 jzt=x(T(),1),pG=` 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 qzt=x(T(),1),bG=` uniform vec4 shadowMap_cascadeDistances; float czm_cascadeDistance(vec4 weights) { return dot(shadowMap_cascadeDistances, weights); } `;var eHt=x(T(),1),gG=` 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 nHt=x(T(),1),yG=` 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 oHt=x(T(),1),xG=`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 sHt=x(T(),1),TG=`/** * 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 cHt=x(T(),1),_G=`/** * 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 dHt=x(T(),1),SG=`/** * 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 mHt=x(T(),1),AG=`/** * Returns a position in model coordinates relative to eye taking into * account the current scene mode: 3D, 2D, or Columbus view. *

* This uses standard position attributes, position3DHigh, * position3DLow, position2DHigh, and position2DLow, * and should be used when writing a vertex shader for an {@link Appearance}. *

* * @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 fHt=x(T(),1),ZG=`/** * 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 bHt=x(T(),1),CG=`/** * @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 yHt=x(T(),1),VG=`/** * 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 THt=x(T(),1),RG=`/** * 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 SHt=x(T(),1),EG=`// 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 ZHt=x(T(),1),GG=`/** * 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. *

* 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 positionMC, 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 VHt=x(T(),1),LG=`/** * 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 EHt=x(T(),1),WG=`/** * 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 LHt=x(T(),1),vG=`/** * Compares left and right componentwise. Returns true * if they are within epsilon and false otherwise. The inputs * left and right can be floats, vec2s, * vec3s, or vec4s. * * @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} true if the components are within epsilon and false 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 vHt=x(T(),1),FG=`/** * 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 IHt=x(T(),1),IG=`/** * 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 near = 0 and far = 1. *

* 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 XHt=x(T(),1),PG=`/** * 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 YHt=x(T(),1),XG=`/** * 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 MHt=x(T(),1),NG=`/** * 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 UHt=x(T(),1),YG=`/** * 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 OHt=x(T(),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 zHt=x(T(),1),MG=`/** * 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 KHt=x(T(),1),kG=`/** * 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 jHt=x(T(),1),UG=`/** * 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 qHt=x(T(),1),DG=`/** * @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 eKt=x(T(),1),OG=`/** * 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 nKt=x(T(),1),BG=`/** * 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 oKt=x(T(),1),zG=`/** * Determines if a time interval is empty. * * @name czm_isEmpty * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} true if the time interval is empty; otherwise, false. * * @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 sKt=x(T(),1),HG=`/** * Determines if a time interval is empty. * * @name czm_isFull * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} true if the time interval is empty; otherwise, false. * * @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 cKt=x(T(),1),KG=`/** * 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 dKt=x(T(),1),JG=`/** * 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 mKt=x(T(),1),jG=`/** * 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 fKt=x(T(),1),QG=`/** * 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 bKt=x(T(),1),qG=`/** * 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 yKt=x(T(),1),$G=`/** * Computes the size of a pixel in meters at a distance from the eye. *

* Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel. *

* @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. *

* Use this version when scaling by pixel ratio. *

* @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 TKt=x(T(),1),eL=`/** * 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 near = 0 and far = 1. *

* This transform is useful when there is a need to manipulate window coordinates * in a vertex shader as done by {@link BillboardCollection}. *

* 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 SKt=x(T(),1),tL=`/** * 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 ZKt=x(T(),1),nL=`/** * 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 VKt=x(T(),1),iL=` /** * 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 EKt=x(T(),1),oL=`/** * 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 LKt=x(T(),1),rL=`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. *

* This function only handles the lighting calculations. Metallic/roughness * and specular/glossy must be handled separately. See {@MaterialStageFS} *

* * @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 vKt=x(T(),1),sL=`// 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 IKt=x(T(),1),aL=`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 XKt=x(T(),1),cL=`/** * 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 YKt=x(T(),1),lL=`/** * Computes the point along a ray at the given time. time 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 MKt=x(T(),1),dL=`/** * 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 UKt=x(T(),1),uL=`/** * 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 OKt=x(T(),1),mL=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords) { return czm_reverseLogDepth(texture(depthTexture, texCoords).r); } `;var zKt=x(T(),1),hL=`/** * 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 KKt=x(T(),1),fL=`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 jKt=x(T(),1),pL=`/** * 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 qKt=x(T(),1),bL=`/** * 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 eJt=x(T(),1),gL=` 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 nJt=x(T(),1),yL=` 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 oJt=x(T(),1),xL=`/** * 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 sign 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 sJt=x(T(),1),TL=`/** * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector. *

* The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22]. *

* * @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 cJt=x(T(),1),_L=`/** * 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 dJt=x(T(),1),SL=`/** * 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 mJt=x(T(),1),AL=`/** * 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 fJt=x(T(),1),ZL=`/** * 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 bJt=x(T(),1),CL=`/** * Translates a position (or any vec3) that was encoded with {@link EncodedCartesian3}, * and then provided to the shader as separate high and low 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. *

* 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}. *

* * @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 yJt=x(T(),1),VL=`/** * @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 TJt=x(T(),1),RL=`/** * Returns the transpose of the matrix. The input matrix can be * a mat2, mat3, or mat4. * * @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 SJt=x(T(),1),EL=`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 ZJt=x(T(),1),GL=`/** * 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 VJt=x(T(),1),LL=`/** * 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 EJt=x(T(),1),WL=`/** * 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 LJt=x(T(),1),vL=`/** * Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type, * so the return value is an int. *

* 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. *

* * @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 vJt=x(T(),1),FL=`/** * 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 IJt=x(T(),1),IL=`#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. *

* 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. *

* @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 XJt=x(T(),1),PL=`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 czm_viewportTransformation. The transformation from * normalized device coordinates to clip coordinates is done using fragmentCoordinate.w, * 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 YJt=x(T(),1),XL=`// 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 MJt=x(T(),1),NL=`#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. *

* Use this when the vertex shader does not call {@link czm_vertexLogDepth}, for example, when * ray-casting geometry using a full screen quad. *

* @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. *

* Use this when the vertex shader calls {@link czm_vertexLogDepth}. *

* * @name czm_writeLogDepth * @glslFunction */ void czm_writeLogDepth() { #ifdef LOG_DEPTH czm_writeLogDepth(v_depthFromNearPlusOne); #endif } `;var UJt=x(T(),1),YL=`/** * 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 GT={czm_degreesPerRadian:aE,czm_depthRange:cE,czm_epsilon1:lE,czm_epsilon2:dE,czm_epsilon3:uE,czm_epsilon4:mE,czm_epsilon5:hE,czm_epsilon6:fE,czm_epsilon7:pE,czm_infinity:bE,czm_oneOverPi:gE,czm_oneOverTwoPi:yE,czm_passCesium3DTile:xE,czm_passCesium3DTileClassification:TE,czm_passCesium3DTileClassificationIgnoreShow:_E,czm_passCesium3DTileEdges:SE,czm_passClassification:AE,czm_passCompute:ZE,czm_passEnvironment:CE,czm_passGaussianSplats:VE,czm_passGlobe:RE,czm_passOpaque:EE,czm_passOverlay:GE,czm_passTerrainClassification:LE,czm_passTranslucent:WE,czm_passVoxels:vE,czm_pi:FE,czm_piOverFour:IE,czm_piOverSix:PE,czm_piOverThree:XE,czm_piOverTwo:NE,czm_radiansPerDegree:YE,czm_sceneMode2D:wE,czm_sceneMode3D:ME,czm_sceneModeColumbusView:kE,czm_sceneModeMorphing:UE,czm_solarRadius:DE,czm_threePiOver2:OE,czm_twoPi:BE,czm_webMercatorMaxLatitude:zE,czm_depthRangeStruct:HE,czm_material:KE,czm_materialInput:JE,czm_modelMaterial:jE,czm_modelVertexOutput:QE,czm_ray:qE,czm_raySegment:$E,czm_shadowParameters:eG,czm_HSBToRGB:tG,czm_HSLToRGB:nG,czm_RGBToHSB:iG,czm_RGBToHSL:oG,czm_RGBToXYZ:rG,czm_XYZToRGB:sG,czm_acesTonemapping:aG,czm_alphaWeight:cG,czm_antialias:lG,czm_applyHSBShift:dG,czm_approximateSphericalCoordinates:uG,czm_approximateTanh:mG,czm_backFacing:hG,czm_branchFreeTernary:fG,czm_cascadeColor:pG,czm_cascadeDistance:bG,czm_cascadeMatrix:gG,czm_cascadeWeights:yG,czm_clipPolygons:xG,czm_columbusViewMorph:TG,czm_computeAtmosphereColor:_G,czm_computeGroundAtmosphereScattering:SG,czm_computePosition:AG,czm_computeScattering:ZG,czm_cosineAndSine:CG,czm_decodeRGB8:VG,czm_decompressTextureCoordinates:RG,czm_depthClamp:EG,czm_eastNorthUpToEyeCoordinates:GG,czm_ellipsoidContainsPoint:LG,czm_ellipsoidTextureCoordinates:WG,czm_equalsEpsilon:vG,czm_eyeOffset:FG,czm_eyeToWindowCoordinates:IG,czm_fastApproximateAtan:PG,czm_fog:XG,czm_gammaCorrect:NG,czm_geodeticSurfaceNormal:YG,czm_getDefaultMaterial:wG,czm_getDynamicAtmosphereLightDirection:MG,czm_getLambertDiffuse:kG,czm_getSpecular:UG,czm_getWaterNoise:DG,czm_hue:OG,czm_inverseGamma:BG,czm_isEmpty:zG,czm_isFull:HG,czm_latitudeToWebMercatorFraction:KG,czm_lineDistance:JG,czm_linearToSrgb:jG,czm_luminance:QG,czm_maximumComponent:qG,czm_metersPerPixel:$G,czm_modelToWindowCoordinates:eL,czm_multiplyWithColorBalance:tL,czm_nearFarScalar:nL,czm_octDecode:iL,czm_packDepth:oL,czm_pbrLighting:rL,czm_pbrNeutralTonemapping:sL,czm_phong:aL,czm_planeDistance:cL,czm_pointAlongRay:lL,czm_rayEllipsoidIntersectionInterval:dL,czm_raySphereIntersectionInterval:uL,czm_readDepth:mL,czm_readNonPerspective:hL,czm_reverseLogDepth:fL,czm_round:pL,czm_saturation:bL,czm_shadowDepthCompare:gL,czm_shadowVisibility:yL,czm_signNotZero:xL,czm_sphericalHarmonics:TL,czm_srgbToLinear:_L,czm_tangentToEyeSpaceMatrix:SL,czm_textureCube:AL,czm_transformPlane:ZL,czm_translateRelativeToEye:CL,czm_translucentPhong:VL,czm_transpose:RL,czm_unpackClippingExtents:EL,czm_unpackDepth:GL,czm_unpackFloat:LL,czm_unpackTexture:WL,czm_unpackUint:vL,czm_valueTransform:FL,czm_vertexLogDepth:IL,czm_windowToEyeCoordinates:PL,czm_writeDepthClamp:XL,czm_writeLogDepth:NL,czm_writeNonPerspective:YL};var ZQt=x(T(),1);function pIe(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 wL=pIe;function Rse(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;o0;){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=0;--o)i=`${i+t[o].glslSource} `;return i.replace(n.glslSource,"")}function Lse(e,t,n){let i="",o=e.sources;if(l(o))for(let b=0;b-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};Wh.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(l(o))return o.shaderProgram};Wh.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 Oe({sources:[r]})),typeof s=="string"&&(s=new Oe({sources:[s]}));let c=this._context,d=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),h=new $t({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 DK(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;oNIe;++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*W.TWO_PI,o}function wIe(e,t){let n=Math.floor(e/W.TWO_PI);e-=n*W.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=W.zeroToTwoPi(r),e<0&&(r-=W.TWO_PI),r+=n*W.TWO_PI,r}function MIe(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 q(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 kIe=1.0000010178*Cc,UIe=100.46645683*fm,DIe=129597742283429e-5*nu,Mse=16002,kse=21863,Use=32004,Dse=10931,Ose=14529,Bse=16368,zse=15318,Hse=32794,OIe=64*1e-7*Cc,BIe=-152*1e-7*Cc,zIe=62*1e-7*Cc,HIe=-8*1e-7*Cc,KIe=32*1e-7*Cc,JIe=-41*1e-7*Cc,jIe=19*1e-7*Cc,QIe=-11*1e-7*Cc,qIe=-150*1e-7*Cc,$Ie=-46*1e-7*Cc,ePe=68*1e-7*Cc,tPe=54*1e-7*Cc,nPe=14*1e-7*Cc,iPe=24*1e-7*Cc,oPe=-28*1e-7*Cc,rPe=22*1e-7*Cc,Kse=10,Jse=16002,jse=21863,Qse=10931,qse=1473,$se=32004,eae=4387,tae=73,sPe=-325*1e-7,aPe=-322*1e-7,cPe=-79*1e-7,lPe=232*1e-7,dPe=-52*1e-7,uPe=97*1e-7,mPe=55*1e-7,hPe=-41*1e-7,fPe=-105*1e-7,pPe=-137*1e-7,bPe=258*1e-7,gPe=35*1e-7,yPe=-116*1e-7,xPe=-88*1e-7,TPe=-112*1e-7,_Pe=-80*1e-7,TZ=new Q(0,0,ai.TAI);function SPe(e,t){iae(e,TZ);let i=(TZ.dayNumber-t5.dayNumber+(TZ.secondsOfDay-t5.secondsOfDay)/li.SECONDS_PER_DAY)/(li.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=kIe+OIe*Math.cos(Mse*o)+qIe*Math.sin(Mse*o)+BIe*Math.cos(kse*o)+$Ie*Math.sin(kse*o)+zIe*Math.cos(Use*o)+ePe*Math.sin(Use*o)+HIe*Math.cos(Dse*o)+tPe*Math.sin(Dse*o)+KIe*Math.cos(Ose*o)+nPe*Math.sin(Ose*o)+JIe*Math.cos(Bse*o)+iPe*Math.sin(Bse*o)+jIe*Math.cos(zse*o)+oPe*Math.sin(zse*o)+QIe*Math.cos(Hse*o)+rPe*Math.sin(Hse*o),s=UIe+DIe*i+sPe*Math.cos(Kse*o)+fPe*Math.sin(Kse*o)+aPe*Math.cos(Jse*o)+pPe*Math.sin(Jse*o)+cPe*Math.cos(jse*o)+bPe*Math.sin(jse*o)+lPe*Math.cos(Qse*o)+gPe*Math.sin(Qse*o)+dPe*Math.cos(qse*o)+yPe*Math.sin(qse*o)+uPe*Math.cos($se*o)+xPe*Math.sin($se*o)+mPe*Math.cos(eae*o)+TPe*Math.sin(eae*o)+hPe*Math.cos(tae*o)+_Pe*Math.sin(tae*o),a=.0167086342-.0004203654*i,c=102.93734808*fm+11612.3529*nu*i,d=469.97289*nu*i,u=174.87317577*fm-8679.27034*nu*i;return oae(r,a,d,c,u,s,t)}function rae(e,t){iae(e,TZ);let i=(TZ.dayNumber-t5.dayNumber+(TZ.secondsOfDay-t5.secondsOfDay)/li.SECONDS_PER_DAY)/li.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*fm,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,h=83.35324312*fm,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,b=125.04455501*fm,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,y=218.31664563*fm,_=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,S=297.85019547*fm+nu*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),A=93.27209062*fm+nu*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),Z=134.96340251*fm+nu*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),V=357.52910918*fm+nu*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),E=310.17137918*fm-nu*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),G=2*S,v=4*S,I=6*S,X=2*Z,N=3*Z,g=4*Z,C=2*A;a+=3400.4*Math.cos(G)-635.6*Math.cos(G-Z)-235.6*Math.cos(Z)+218.1*Math.cos(G-V)+181*Math.cos(G+Z),c+=.014216*Math.cos(G-Z)+.008551*Math.cos(G-X)-.001383*Math.cos(Z)+.001356*Math.cos(G+Z)-.001147*Math.cos(v-N)-914e-6*Math.cos(v-X)+869e-6*Math.cos(G-V-Z)-627e-6*Math.cos(G)-394e-6*Math.cos(v-g)+282e-6*Math.cos(G-V-X)-279e-6*Math.cos(S-Z)-236e-6*Math.cos(X)+231e-6*Math.cos(v)+229e-6*Math.cos(I-g)-201e-6*Math.cos(X-C),u+=486.26*Math.cos(G-C)-40.13*Math.cos(G)+37.51*Math.cos(C)+25.73*Math.cos(X-C)+19.97*Math.cos(G-V-C),p+=-55609*Math.sin(G-Z)-34711*Math.sin(G-X)-9792*Math.sin(Z)+9385*Math.sin(v-N)+7505*Math.sin(v-X)+5318*Math.sin(G+Z)+3484*Math.sin(v-g)-3417*Math.sin(G-V-Z)-2530*Math.sin(I-g)-2376*Math.sin(G)-2075*Math.sin(G-N)-1883*Math.sin(X)-1736*Math.sin(I-5*Z)+1626*Math.sin(V)-1370*Math.sin(I-N),f+=-5392*Math.sin(G-C)-540*Math.sin(V)-441*Math.sin(G)+423*Math.sin(C)-288*Math.sin(X-C),_+=-3332.9*Math.sin(G)+1197.4*Math.sin(G-Z)-662.5*Math.sin(V)+396.3*Math.sin(Z)-218*Math.sin(G-V);let R=2*E,L=3*E;u+=46.997*Math.cos(E)*i-.614*Math.cos(G-C+E)*i+.614*Math.cos(G-C-E)*i-.0297*Math.cos(R)*o-.0335*Math.cos(E)*o+.0012*Math.cos(G-C+R)*o-16e-5*Math.cos(E)*r+4e-5*Math.cos(L)*r+4e-5*Math.cos(R)*r;let P=2.116*Math.sin(E)*i-.111*Math.sin(G-C-E)*i-.0015*Math.sin(E)*o;p+=P,_+=P,f+=-520.77*Math.sin(E)*i+13.66*Math.sin(G-C+E)*i+1.12*Math.sin(G-E)*i-1.06*Math.sin(C-E)*i+.66*Math.sin(R)*o+.371*Math.sin(E)*o-.035*Math.sin(G-C+R)*o-.015*Math.sin(G-C+E)*o+.0014*Math.sin(E)*r-.0011*Math.sin(L)*r-9e-4*Math.sin(R)*r,a*=FIe;let Y=d+u*nu,O=h+p*nu,k=y+_*nu,D=b+f*nu;return oae(a,c,Y,O,D,k,t)}var nae=.012300034,APe=nae/(nae+1)*-1;function ZPe(e,t){return t=rae(e,t),m.multiplyByScalar(t,APe,t)}var sae=new q(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),DL=new m;BK.computeSunPositionInEarthInertialFrame=function(e,t){return l(e)||(e=Q.now()),l(t)||(t=new m),DL=SPe(e,DL),t=m.negate(DL,t),ZPe(e,DL),m.subtract(t,DL,t),q.multiplyByVector(sae,t,t),t};BK.computeMoonPositionInEarthInertialFrame=function(e,t){return l(e)||(e=Q.now()),t=rae(e,t),q.multiplyByVector(sae,t,t),t};var oy=BK;var F8t=x(T(),1),n5={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};n5.getMorphTime=function(e){return e===n5.SCENE3D?1:e===n5.MORPHING?void 0:0};var re=Object.freeze(n5);var N8t=x(T(),1);function CPe(e){e=e??B.EMPTY_OBJECT,this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??2}var N0=CPe;function _Z(){this.globeDepthTexture=void 0,this.edgeIdTexture=void 0,this.edgeColorTexture=void 0,this.edgeDepthTexture=void 0,this.gamma=void 0,this._viewport=new Qe,this._viewportCartesian4=new se,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 se,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=q.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 q,this._viewRotation=new q,this._inverseViewRotation=new q,this._viewRotation3D=new q,this._inverseViewRotation3D=new q,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 q,this._normal3DDirty=!0,this._normal3D=new q,this._inverseNormalDirty=!0,this._inverseNormal=new q,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new q,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new Zn,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(_Z.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!Qe.equals(e,this._viewport)){Qe.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 cae(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return cae(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),q.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return HK(this),this._view3D}},viewRotation:{get:function(){return HK(this),this._viewRotation}},viewRotation3D:{get:function(){return HK(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return uae(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return uae(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return XPe(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return NPe(this),this._modelView}},modelView3D:{get:function(){return YPe(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return OPe(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return wPe(this),this._inverseModelView}},inverseModelView3D:{get:function(){return MPe(this),this._inverseModelView3D}},viewProjection:{get:function(){return kPe(this),this._viewProjection}},inverseViewProjection:{get:function(){return UPe(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return DPe(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return BPe(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return zPe(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return HPe(this),this._modelViewInfiniteProjection}},normal:{get:function(){return KPe(this),this._normal}},normal3D:{get:function(){return JPe(this),this._normal3D}},inverseNormal:{get:function(){return jPe(this),this._inverseNormal}},inverseNormal3D:{get:function(){return QPe(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 dae(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return dae(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 VPe(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 RPe(e,t){F.clone(t,e._inverseView),F.getMatrix3(t,e._inverseViewRotation)}function EPe(e,t){F.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function GPe(e,t){F.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}var aae=new m,LPe=new F;function WPe(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,aae)):(e._eyeHeight=-n.maximumRadius,m.magnitude(t.positionWC)>0&&(e._eyeEllipsoidNormalEC=m.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,aae)),e._encodedCameraPositionMCDirty=!0,!l(i))return;e._eyeEllipsoidNormalEC=q.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=pt.eastNorthUpToFixedFrame(i,n,LPe);e._enuToModel=F.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=F.inverseTransformation(e._enuToModel,e._modelToEnu),W.equalsEpsilon(n._radii.x,n._radii.y,W.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var zK=new q,vPe=new be;function FPe(e,t){pt.computeIcrfToCentralBodyFixedMatrix(t.time,zK);let n=oy.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);q.multiplyByVector(zK,n,n),m.normalize(n,e._sunDirectionWC),n=q.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),m.normalize(n,n),n=oy.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),q.multiplyByVector(zK,n,n),q.multiplyByVector(e.viewRotation3D,n,n),m.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,vPe);i.project(r,e._sunPositionColumbusView)}_Z.prototype.updateCamera=function(e){VPe(this,e.viewMatrix),RPe(this,e.inverseViewMatrix),WPe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==re.SCENE2D&&e.frustum instanceof fn};_Z.prototype.updateFrustum=function(e){EPe(this,e.projectionMatrix),l(e.infiniteProjectionMatrix)&&GPe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=W.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};_Z.prototype.updatePass=function(e){this._pass=e};var IPe=[],PPe=new N0;_Z.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===re.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),FPe(this,e);let n=e.light??PPe;n instanceof N0?(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=q.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??IPe,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=pt.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 cae(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 XPe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==re.SCENE2D&&e._mode!==re.MORPHING&&!e._orthographicIn3D?F.inverse(e._projection,e._inverseProjection):F.clone(F.ZERO,e._inverseProjection))}function NPe(e){e._modelViewDirty&&(e._modelViewDirty=!1,F.multiplyTransformation(e._view,e._model,e._modelView))}function YPe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,F.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function wPe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,F.inverse(e.modelView,e._inverseModelView))}function MPe(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,F.inverse(e.modelView3D,e._inverseModelView3D))}function kPe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,F.multiply(e._projection,e._view,e._viewProjection))}function UPe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,F.inverse(e.viewProjection,e._inverseViewProjection))}function DPe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,F.multiply(e._projection,e.modelView,e._modelViewProjection))}function OPe(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 BPe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,F.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function zPe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,F.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function HPe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,F.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function KPe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;F.getMatrix3(e.inverseModelView,t),q.transpose(t,t)}}function JPe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;F.getMatrix3(e.inverseModelView3D,t),q.transpose(t,t)}}function jPe(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;F.getMatrix3(e.modelView,t),q.transpose(t,t)}}function QPe(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;F.getMatrix3(e.modelView3D,t),q.transpose(t,t)}}var lae=new m;function dae(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,F.multiplyByPoint(e.inverseModel,e._cameraPosition,lae),Zn.fromCartesian(lae,e._encodedCameraPositionMC))}var qPe=new m,$Pe=new m,eXe=new m,tXe=new m,nXe=new be,iXe=new m,oXe=new F;function rXe(e,t,n,i,o,r,s,a){let c=qPe;c.x=e.y,c.y=e.z,c.z=e.x;let d=$Pe;d.x=n.y,d.y=n.z,d.z=n.x;let u=eXe;u.x=i.y,u.y=i.z,u.z=i.x;let h=tXe;h.x=t.y,h.y=t.z,h.z=t.x,r===re.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,nXe);p.longitude=W.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=W.clamp(p.latitude,-W.PI_OVER_TWO,W.PI_OVER_TWO);let b=s.ellipsoid,f=b.cartographicToCartesian(p,iXe),y=pt.eastNorthUpToFixedFrame(f,b,oXe);return F.multiplyByPointAsVector(y,d,d),F.multiplyByPointAsVector(y,u,u),F.multiplyByPointAsVector(y,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 HK(e){e._view3DDirty&&(e._mode===re.SCENE3D?F.clone(e._view,e._view3D):rXe(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 uae(e){e._inverseView3DDirty&&(F.inverseTransformation(e.view3D,e._inverseView3D),F.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var OL=_Z;function yd(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):sXe(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 ML(this),this._textureCache=new kL;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),vt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),vt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),vt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),vt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),vt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),vt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),vt._maximum3DTextureSize=d.getParameter(d.MAX_3D_TEXTURE_SIZE),vt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),vt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),vt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),vt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),vt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);vt._minimumAliasedLineWidth=u[0],vt._maximumAliasedLineWidth=u[1];let h=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);vt._minimumAliasedPointSize=h[0],vt._maximumAliasedPointSize=h[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);vt._maximumViewportWidth=p[0],vt._maximumViewportHeight=p[1];let b=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);vt._highpFloatSupported=b.precision!==0;let f=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);vt._highpIntSupported=f.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!jr(d,["OES_standard_derivatives"]),this._blendMinmax=!!jr(d,["EXT_blend_minmax"]),this._elementIndexUint=!!jr(d,["OES_element_index_uint"]),this._depthTexture=!!jr(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!jr(d,["EXT_frag_depth"]),this._debugShaders=jr(d,["WEBGL_debug_shaders"]),this._textureFloat=!!jr(d,["OES_texture_float"]),this._textureHalfFloat=!!jr(d,["OES_texture_half_float"]),this._textureFloatLinear=!!jr(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!jr(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!jr(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!jr(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!jr(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!jr(d,["EXT_color_buffer_half_float"]),this._s3tc=!!jr(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!jr(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!jr(d,["WEBGL_compressed_texture_astc"]),this._etc=!!jr(d,["WEBG_compressed_texture_etc"]),this._etc1=!!jr(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!jr(d,["EXT_texture_compression_bptc"]),bd.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let y=r?jr(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=y,vt._maximumTextureFilterAnisotropy=l(y)?d.getParameter(y.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let _,S,A,Z,V,E,G,v,I,X;if(c){let R=this;_=function(){return R._gl.createVertexArray()},S=function(L){R._gl.bindVertexArray(L)},A=function(L){R._gl.deleteVertexArray(L)},Z=function(L,P,Y,O,k){d.drawElementsInstanced(L,P,Y,O,k)},V=function(L,P,Y,O){d.drawArraysInstanced(L,P,Y,O)},E=function(L,P){d.vertexAttribDivisor(L,P)},G=function(L){d.drawBuffers(L)}}else v=jr(d,["OES_vertex_array_object"]),l(v)&&(_=function(){return v.createVertexArrayOES()},S=function(R){v.bindVertexArrayOES(R)},A=function(R){v.deleteVertexArrayOES(R)}),I=jr(d,["ANGLE_instanced_arrays"]),l(I)&&(Z=function(R,L,P,Y,O){I.drawElementsInstancedANGLE(R,L,P,Y,O)},V=function(R,L,P,Y){I.drawArraysInstancedANGLE(R,L,P,Y)},E=function(R,L){I.vertexAttribDivisorANGLE(R,L)}),X=jr(d,["WEBGL_draw_buffers"]),l(X)&&(G=function(R){X.drawBuffersWEBGL(R)});this.glCreateVertexArray=_,this.glBindVertexArray=S,this.glDeleteVertexArray=A,this.glDrawElementsInstanced=Z,this.glDrawArraysInstanced=V,this.glVertexAttribDivisor=E,this.glDrawBuffers=G,this._vertexArrayObject=!!v,this._instancedArrays=!!I,this._drawBuffers=!!X,vt._maximumDrawBuffers=this.drawBuffers?d.getParameter(ne.MAX_DRAW_BUFFERS):1,vt._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 N=new OL,g=new zc(this),C=Ue.fromCache();this._defaultPassState=g,this._defaultRenderState=C,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=N,this._currentRenderState=C,this._currentPassState=g,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let R=0;R"u")throw new ue("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 ue("The browser supports WebGL, but initialization failed.");return r}function aXe(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 cXe(e,t,n,i){let o=`${aXe(e,i)}: ${t.name}(`;for(let r=0;r=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=uXe(this._originalGLContext,e?lXe: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 Jr({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 mXe}}});function mae(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Ue.partialApply(e._gl,o,t,r,n,i)}var KK;typeof WebGLRenderingContext<"u"&&(KK=[ne.BACK]);function i5(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=KK;if(l(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var hXe=new ui;yd.prototype.clear=function(e,t){e=e??hXe,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;mae(this,a,t,!0);let c=e.framebuffer??t.framebuffer;i5(this,c),n.clear(i)};function fXe(e,t,n,i,o){i5(e,t),mae(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function pXe(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()}yd.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,fXe(this,o,t,n,r),pXe(this,e,n,i)};yd.prototype.beginFrame=function(){};yd.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=KK;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=qe.createPixelBuffer({context:this,sizeInBytes:Ke.textureSizeInBytes(c,a,o,r),usage:Fe.DYNAMIC_READ});return i5(this,s),d._bind(),t.readPixels(n,i,o,r,c,De.toWebGLConstant(a,this),0),d._unBind(),d};yd.prototype.readPixels=function(e){let t=this._gl;e=e??B.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=De.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 i5(this,s),t.readPixels(n,i,o,r,Ke.RGBA,De.toWebGLConstant(a,this),d),d};var hae={position:0,textureCoordinates:1};yd.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!l(e)){let t=new gt({attributes:{position:new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:ve.TRIANGLES});e=Bn.fromGeometry({context:this,geometry:t,attributeLocations:hae,bufferUsage:Fe.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};yd.prototype.createViewportQuadCommand=function(e,t){return t=t??B.EMPTY_OBJECT,new et({vertexArray:this.getViewportQuadVertexArray(),primitiveType:ve.TRIANGLES,renderState:t.renderState,shaderProgram:$t.fromCache({context:this,vertexShaderSource:TT,fragmentShaderSource:e,attributeLocations:hae}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};yd.prototype.getObjectByPickColor=function(e){return this._pickObjects.get(e)};function JK(e,t,n){this._pickObjects=e,this.key=t,this.color=n}Object.defineProperties(JK.prototype,{object:{get:function(){return this._pickObjects.get(this.key)},set:function(e){this._pickObjects.set(this.key,e)}}});JK.prototype.destroy=function(){this._pickObjects.delete(this.key)};yd.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new ue("Out of unique Pick IDs.");return this._pickObjects.set(t,e),new JK(this._pickObjects,t,U.fromRgba(t))};yd.prototype.isDestroyed=function(){return!1};yd.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 WT=yd;var d6t=x(T(),1);var U7t=x(T(),1);function SZ(e){e=e??B.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 cs({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:c}),this._colorFramebuffer=new cs({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:c})}SZ.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};SZ.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};SZ.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)};SZ.prototype.isDestroyed=function(){return!1};SZ.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),he(this)};var BL=SZ;var q7t=x(T(),1);var B7t=x(T(),1);var xd={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===xd.RGBA4||e===xd.RGBA8||e===xd.RGBA16F||e===xd.RGBA32F||e===xd.RGB5_A1||e===xd.RGB565||e===xd.DEPTH_COMPONENT16||e===xd.STENCIL_INDEX8||e===xd.DEPTH_STENCIL||e===xd.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ne.FLOAT?xd.RGBA32F:e===ne.HALF_FLOAT_OES?xd.RGBA16F:xd.RGBA8}},Zl=Object.freeze(xd);function zL(e){e=e??B.EMPTY_OBJECT;let t=e.context,n=t._gl,i=vt.maximumRenderbufferSize,o=e.format??Zl.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(zL.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});zL.prototype._getRenderbuffer=function(){return this._renderbuffer};zL.prototype.isDestroyed=function(){return!1};zL.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),he(this)};var iu=zL;function ca(e){e=e??B.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??De.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;s1){let a=Zl.getColorFormat(o);this._colorRenderbuffers[s]=new iu({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:De.UNSIGNED_INT_24_8,sampler:zt.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new iu({context:e,width:t,height:n,format:Zl.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new iu({context:e,width:t,height:n,format:Zl.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:De.UNSIGNED_INT,sampler:zt.NEAREST}):this._depthRenderbuffer=new iu({context:e,width:t,height:n,format:Zl.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new BL({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 cs({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{n.getStatus()===ne.SIGNALED?o():s<=0?r(new ue("Wait for signal timeout")):e(i(o,r,s-1))}}return new Promise((o,r)=>{e(i(o,r,t))})};var jL=FT;var tqt=x(T(),1);function ry(e){e=e??B.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Ke.RGBA,pixelDatatype:o=De.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new zt}=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),b=Ke.isCompressedFormat(p),f=t._gl,y=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=y,this._preMultiplyAlpha=h,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,bae(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");fae(this,n),this._initialized=!0}else pae(this);f.bindTexture(this._textureTarget,null)}function fae(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:b}=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,De.toWebGLConstant(u,n),b),f>1){let y=s,_=a,S=c;for(let A=0;Aa){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 AZ=$K;var gae=16;function Vl(e){e=e??B.EMPTY_OBJECT;let t=e.borderWidthInPixels??1,n=e.initialSize??new M(gae,gae);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(Vl.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}}});Vl.prototype.computeTextureCoordinates=function(e,t){let n=this._texture,i=this._rectangles[e];if(l(t)||(t=new Qe),!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};Vl.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 cs({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 b=0;bnew yae({index:S,image:_})).filter((_,S)=>l(_.image)&&!l(c.get(S))),u=0,h=0,p=0;for(let _=t;_=s*a;)s>a?a*=2:s*=2;d.sort(({image:_},{image:S})=>S.height*S.width-_.height*_.width);let b=new Array(this._nextIndex);for(let _ of this._subRegions.keys())l(c.get(_))&&(b[_]=i[_]);let f,y=!1;for(;!y;){f=new AZ({height:a,width:s,borderPadding:n});let _;for(_=0;_a?a*=2:s*=2;break}b[S]=Z.rectangle}y=_===d.length}this._texturePacker=f,this._texture=this._copyFromTexture(e,s,a,b),r.destroy(),this._rectangles=b,this._guid=qn()};Vl.prototype.getImageIndex=function(e){return this._indexById.get(e)};Vl.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 yae({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}Vl.prototype._addImage=function(e,t){return new Promise((n,i)=>{this._imagesToAddQueue.push(new yae({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};Vl.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{let a=await _Xe(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)};Vl.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};Vl.prototype.addImageSubRegion=function(e,t){let n=this._indexById.get(e);if(!l(n))throw new ue(`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}))};Vl.prototype.isDestroyed=function(){return!1};Vl.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{l(e)&&e(-1)}),he(this)};var IT=Vl;var Gqt=x(T(),1);function Va(e,t,n,i){let o=Va._verifyAttributes(t);n=n??0;let r=[],s={},a,c,d=o.length;for(let h=0;h0?K.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Va._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r0){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;c0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=l(n);if(!o||n.sizeInBytes0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Va.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t0&&(this._hash={},e.length=0)};var Xt=PT;var $qt=x(T(),1);function ou(e,t){e=e??0,this._near=e,t=t??Number.MAX_VALUE,this._far=t}Object.defineProperties(ou.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}}});ou.packedLength=2;ou.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n]=e.far,t};ou.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ou),n.near=e[t++],n.far=e[t],n};ou.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.far===t.far};ou.clone=function(e,t){if(l(e))return l(t)||(t=new ou),t.near=e.near,t.far=e.far,t};ou.prototype.clone=function(e){return ou.clone(this,e)};ou.prototype.equals=function(e){return ou.equals(this,e)};var kt=ou;var n$t=x(T(),1);function pm(e,t,n,i){this.near=e??0,this.nearValue=t??0,this.far=n??1,this.farValue=i??0}pm.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 pm(e.near,e.nearValue,e.far,e.farValue)};pm.packedLength=4;pm.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};pm.unpack=function(e,t,n){return t=t??0,l(n)||(n=new pm),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};pm.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};pm.prototype.clone=function(e){return pm.clone(this,e)};pm.prototype.equals=function(e){return pm.equals(this,e)};var Dt=pm;var o$t=x(T(),1),XT={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},tt=Object.freeze(XT);function bm(e){return e===XT.CLAMP_TO_GROUND||e===XT.CLAMP_TO_3D_TILE||e===XT.CLAMP_TO_TERRAIN}function ZZ(e){return e===XT.RELATIVE_TO_GROUND||e===XT.RELATIVE_TO_3D_TILE||e===XT.RELATIVE_TO_TERRAIN}var s$t=x(T(),1),GXe={CENTER:0,LEFT:1,RIGHT:-1},Yi=Object.freeze(GXe);var c$t=x(T(),1),LXe={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},Jn=Object.freeze(LXe);var d$t=x(T(),1),WXe=Object.freeze({DONE:0,PENDING:1,FAILED:2}),Tt=WXe;var f$t=x(T(),1);function Fh(){fe.throwInstantiationError()}Object.defineProperties(Fh.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});Fh.prototype.getValue=fe.throwInstantiationError;Fh.prototype.equals=fe.throwInstantiationError;Fh.equals=function(e,t){return e===t||l(e)&&e.equals(t)};Fh.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-1;o--)r=t[o],l(r._billboard)&&l(r._position)&&s.set(r.id,new xae(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 xae(r)):(tJ(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],tJ(s.get(r.id),r,a),s.remove(r.id)};function tJ(e,t,n){l(e)&&(e.billboard=void 0,n.removeBillboard(t))}var tW=ay;var Qfn=x(T(),1);var B$t=x(T(),1);var $Xe=new m;function dp(e){e=e??B.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"}dp.fromDimensions=function(e){e=e??B.EMPTY_OBJECT;let t=e.dimensions,n=m.multiplyByScalar(t,.5,new m);return new dp({minimum:m.negate(n,new m),maximum:n,offsetAttribute:e.offsetAttribute})};dp.fromAxisAlignedBoundingBox=function(e){return new dp({minimum:e.minimum,maximum:e.maximum})};dp.packedLength=2*m.packedLength+1;dp.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 _ae=new m,Sae=new m,Tae={minimum:_ae,maximum:Sae,offsetAttribute:void 0};dp.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,_ae),o=m.unpack(e,t+m.packedLength,Sae),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):(Tae.offsetAttribute=r===-1?void 0:r,new dp(Tae))};dp.createGeometry=function(e){let t=e._min,n=e._max;if(m.equals(t,n))return;let i=new yn,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 Ie({componentDatatype:K.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,$Xe),a=m.magnitude(s)*.5;if(l(e._offsetAttribute)){let c=r.length,d=e._offsetAttribute===mn.NONE?0:1,u=new Uint8Array(c/3).fill(d);i.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new gt({attributes:i,indices:o,primitiveType:ve.LINES,boundingSphere:new de(m.ZERO,a),offsetAttribute:e._offsetAttribute})};var Ih=dp;var j$t=x(T(),1);function CZ(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(CZ.prototype,{componentDatatype:{get:function(){return K.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}});CZ.fromColor=function(e){return new CZ(e.red,e.green,e.blue,e.alpha)};CZ.toValue=function(e,t){return l(t)?e.toBytes(t):new Uint8Array(e.toBytes())};CZ.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 Qt=CZ;var een=x(T(),1);function nW(e,t){e=e??0,t=t??Number.MAX_VALUE,this.value=new Float32Array([e,t])}Object.defineProperties(nW.prototype,{componentDatatype:{get:function(){return K.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}});nW.fromDistanceDisplayCondition=function(e){return new nW(e.near,e.far)};nW.toValue=function(e,t){return l(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var ei=nW;var oen=x(T(),1);function eNe(e){e=e??B.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 Ft=eNe;var fen=x(T(),1);var den=x(T(),1);function Sr(e){e=e??B.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(Sr.prototype,{isEmpty:{get:function(){let e=Q.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var VZ={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};Sr.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):(VZ.start=i,VZ.stop=o,VZ.isStartIncluded=r,VZ.isStopIncluded=s,VZ.data=a,new Sr(VZ))};Sr.toIso8601=function(e,t){return`${Q.toIso8601(e.start,t)}/${Q.toIso8601(e.stop,t)}`};Sr.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 Sr(e)};Sr.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)))};Sr.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)))};Sr.intersect=function(e,t,n,i){if(!l(t))return Sr.clone(Sr.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 Sr.clone(Sr.EMPTY,n);let u=e.isStartIncluded,h=e.isStopIncluded,p=t.isStartIncluded,b=t.isStopIncluded,f=Q.lessThan(r,a);return l(n)||(n=new Sr),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&&b||!Q.equals(a,r)&&b,n.data=l(i)?i(e.data,t.data):e.data,n};Sr.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};Sr.prototype.clone=function(e){return Sr.clone(this,e)};Sr.prototype.equals=function(e,t){return Sr.equals(this,e,t)};Sr.prototype.equalsEpsilon=function(e,t,n){return Sr.equalsEpsilon(this,e,t,n)};Sr.prototype.toString=function(){return Sr.toIso8601(this)};Sr.EMPTY=Object.freeze(new Sr({start:new Q,stop:new Q,isStartIncluded:!1,isStopIncluded:!1}));var vn=Sr;var Aae=Object.freeze(Q.fromIso8601("0000-01-01T00:00:00Z")),Zae=Object.freeze(Q.fromIso8601("9999-12-31T24:00:00Z")),tNe=Object.freeze(new vn({start:Aae,stop:Zae})),nNe={MINIMUM_VALUE:Aae,MAXIMUM_VALUE:Zae,MAXIMUM_INTERVAL:tNe},Je=nNe;var yen=x(T(),1);function iW(e,t,n){e=e??0,t=t??0,n=n??0,this.value=new Float32Array([e,t,n])}Object.defineProperties(iW.prototype,{componentDatatype:{get:function(){return K.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}});iW.fromCartesian3=function(e){return new iW(e.x,e.y,e.z)};iW.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 yo=iW;var Sen=x(T(),1);function r5(e){e=e??!0,this.value=r5.toValue(e)}Object.defineProperties(r5.prototype,{componentDatatype:{get:function(){return K.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}});r5.toValue=function(e,t){return l(t)?(t[0]=e,t):new Uint8Array([e])};var Gn=r5;var Nnn=x(T(),1);var Zen=x(T(),1),oW=`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 Ven=x(T(),1),rW=`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 Een=x(T(),1),sW=`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 Len=x(T(),1),aW=`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 ven=x(T(),1),cW=`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 Ien=x(T(),1),lW=`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 ttn=x(T(),1);var Oen=x(T(),1);var Nen=x(T(),1);var iNe={ADD:ne.FUNC_ADD,SUBTRACT:ne.FUNC_SUBTRACT,REVERSE_SUBTRACT:ne.FUNC_REVERSE_SUBTRACT,MIN:ne.MIN,MAX:ne.MAX},Vc=Object.freeze(iNe);var Men=x(T(),1);var oNe={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(oNe);var rNe={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:Vc.ADD,equationAlpha:Vc.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:Vc.ADD,equationAlpha:Vc.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:Vc.ADD,equationAlpha:Vc.ADD,functionSourceRgb:Ko.SOURCE_ALPHA,functionSourceAlpha:Ko.ONE,functionDestinationRgb:Ko.ONE,functionDestinationAlpha:Ko.ONE})},rn=Object.freeze(rNe);var Hen=x(T(),1);var sNe={FRONT:ne.FRONT,BACK:ne.BACK,FRONT_AND_BACK:ne.FRONT_AND_BACK},wi=Object.freeze(sNe);function RZ(e){e=e??B.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(RZ.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}}});RZ.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(` `)};RZ.prototype.isTranslucent=function(){return l(this.material)&&this.material.isTranslucent()||!l(this.material)&&this.translucent};RZ.prototype.getRenderState=function(){let e=this.isTranslucent(),t=Be(this.renderState,!1);return e?(t.depthMask=!1,t.blending=rn.ALPHA_BLEND):t.depthMask=!0,t};RZ.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=rn.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:wi.BACK}),l(n)&&(i=Gt(n,i,!0)),i};var Ao=RZ;var Znn=x(T(),1);var itn=x(T(),1),dW=`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 rtn=x(T(),1),uW=`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 atn=x(T(),1),mW=`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 ltn=x(T(),1),hW=`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 utn=x(T(),1),fW=`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 htn=x(T(),1),pW=`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 ptn=x(T(),1),bW=`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 gtn=x(T(),1),gW=`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 xtn=x(T(),1),yW=`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 _tn=x(T(),1),xW=`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 Atn=x(T(),1),TW=`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 Ctn=x(T(),1),_W=`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 Rtn=x(T(),1),SW=`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 Gtn=x(T(),1),AW=`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 Wtn=x(T(),1),ZW=`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 Ftn=x(T(),1),CW=`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 Ptn=x(T(),1),VW=`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 Ntn=x(T(),1),RW=`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 wtn=x(T(),1),EW=`// 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 je(e){this.type=void 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??Bt.LINEAR,this._magnificationFilter=e.magnificationFilter??ci.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,aNe(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(je._uniformList[this.type])||(je._uniformList[this.type]=Object.keys(this._uniforms))}je._uniformList={};je.fromType=function(e,t){let n=new je({fabric:{type:e}});if(l(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};je.fromTypeAsync=async function(e,t){let n=[],i=new je({fabric:{type:e,uniforms:t}});if(Rae(i,n),await Promise.all(n),n.length=0,l(i._initializationError))throw i._initializationError;return i};function Rae(e,t){t.push(...e._initializationPromises);let n=e.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];Rae(o,t)}}je.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-1)return!0;return!1}function hNe(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&&mNe(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 Vae={mat2:Ji,mat3:q,mat4:F},fNe=/\.ktx2$/i;function pNe(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!l(r)||r===je.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 zt({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.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}Eae(n,e)}}}function Eae(e,t){let i=e.uniforms[t];if(i===je.DefaultImageId)return Promise.resolve();let o=We.createIfNeeded(i);if(!(o instanceof We))return Promise.resolve();let r=We.createIfNeeded(e._texturePaths[t]);if(!(!l(r)||r.url!==o.url))return Promise.resolve();let a;return fNe.test(o.url)?a=bd(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 bNe(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Jr){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),Gae(t,e)}}function Gae(e,t){let i=e.uniforms[t];if(i===je.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=[We.createIfNeeded(i.positiveX).fetchImage(),We.createIfNeeded(i.negativeX).fetchImage(),We.createIfNeeded(i.positiveY).fetchImage(),We.createIfNeeded(i.negativeY).fetchImage(),We.createIfNeeded(i.positiveZ).fetchImage(),We.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 gNe(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&Lae(e,n)}function Lae(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=yNe(o),s;if(r==="channels")s=GW(e,t,o,!1);else{if(r==="sampler2D"){let d=`${t}Dimensions`;TNe(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},Lae(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=GW(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(pNe(t)),e._initializationPromises.push(Eae(e,t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(bNe(t)),e._initializationPromises.push(Gae(e,t));else if(r.indexOf("mat")!==-1){let d=new Vae[r];e._uniforms[c]=function(){return Vae[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function yNe(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 We||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof ImageBitmap||e instanceof OffscreenCanvas)/^([rgba]){1,4}$/i.test(e)?t="channels":e===je.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 xNe(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new je({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=Gt(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;GW(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=GW(e,i,a)}}function GW(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 TNe(e,t,n){return GW(e,t,t,n)}je._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};je.DefaultImageId="czm_defaultImage";je.DefaultCubeMapId="czm_defaultCubeMap";je.ColorType="Color";je._materialCache.addMaterial(je.ColorType,{fabric:{type:je.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}});je.ImageType="Image";je._materialCache.addMaterial(je.ImageType,{fabric:{type:je.ImageType,uniforms:{image:je.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}});je.DiffuseMapType="DiffuseMap";je._materialCache.addMaterial(je.DiffuseMapType,{fabric:{type:je.DiffuseMapType,uniforms:{image:je.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});je.AlphaMapType="AlphaMap";je._materialCache.addMaterial(je.AlphaMapType,{fabric:{type:je.AlphaMapType,uniforms:{image:je.DefaultImageId,channel:"a",repeat:new M(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});je.SpecularMapType="SpecularMap";je._materialCache.addMaterial(je.SpecularMapType,{fabric:{type:je.SpecularMapType,uniforms:{image:je.DefaultImageId,channel:"r",repeat:new M(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});je.EmissionMapType="EmissionMap";je._materialCache.addMaterial(je.EmissionMapType,{fabric:{type:je.EmissionMapType,uniforms:{image:je.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});je.BumpMapType="BumpMap";je._materialCache.addMaterial(je.BumpMapType,{fabric:{type:je.BumpMapType,uniforms:{image:je.DefaultImageId,channel:"r",strength:.8,repeat:new M(1,1)},source:uW},translucent:!1});je.NormalMapType="NormalMap";je._materialCache.addMaterial(je.NormalMapType,{fabric:{type:je.NormalMapType,uniforms:{image:je.DefaultImageId,channels:"rgb",strength:.8,repeat:new M(1,1)},source:xW},translucent:!1});je.GridType="Grid";je._materialCache.addMaterial(je.GridType,{fabric:{type:je.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:yW},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});je.StripeType="Stripe";je._materialCache.addMaterial(je.StripeType,{fabric:{type:je.StripeType,uniforms:{horizontal:!0,evenColor:new U(1,1,1,.5),oddColor:new U(0,0,1,.5),offset:0,repeat:5},source:VW},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});je.CheckerboardType="Checkerboard";je._materialCache.addMaterial(je.CheckerboardType,{fabric:{type:je.CheckerboardType,uniforms:{lightColor:new U(1,1,1,.5),darkColor:new U(0,0,0,.5),repeat:new M(5,5)},source:mW},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});je.DotType="Dot";je._materialCache.addMaterial(je.DotType,{fabric:{type:je.DotType,uniforms:{lightColor:new U(1,1,0,.75),darkColor:new U(0,1,1,.75),repeat:new M(5,5)},source:hW},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});je.WaterType="Water";je._materialCache.addMaterial(je.WaterType,{fabric:{type:je.WaterType,uniforms:{baseWaterColor:new U(.2,.3,.6,1),blendColor:new U(0,1,.699,1),specularMap:je.DefaultImageId,normalMap:je.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:EW},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});je.RimLightingType="RimLighting";je._materialCache.addMaterial(je.RimLightingType,{fabric:{type:je.RimLightingType,uniforms:{color:new U(1,0,0,.7),rimColor:new U(1,1,1,.4),width:.3},source:ZW},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});je.FadeType="Fade";je._materialCache.addMaterial(je.FadeType,{fabric:{type:je.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:gW},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});je.PolylineArrowType="PolylineArrow";je._materialCache.addMaterial(je.PolylineArrowType,{fabric:{type:je.PolylineArrowType,uniforms:{color:new U(1,1,1,1)},source:TW},translucent:!0});je.PolylineDashType="PolylineDash";je._materialCache.addMaterial(je.PolylineDashType,{fabric:{type:je.PolylineDashType,uniforms:{color:new U(1,0,1,1),gapColor:new U(0,0,0,0),dashLength:16,dashPattern:255},source:_W},translucent:!0});je.PolylineGlowType="PolylineGlow";je._materialCache.addMaterial(je.PolylineGlowType,{fabric:{type:je.PolylineGlowType,uniforms:{color:new U(0,.5,1,1),glowPower:.25,taperPower:1},source:SW},translucent:!0});je.PolylineOutlineType="PolylineOutline";je._materialCache.addMaterial(je.PolylineOutlineType,{fabric:{type:je.PolylineOutlineType,uniforms:{color:new U(1,1,1,1),outlineColor:new U(1,0,0,1),outlineWidth:1},source:AW},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});je.ElevationContourType="ElevationContour";je._materialCache.addMaterial(je.ElevationContourType,{fabric:{type:je.ElevationContourType,uniforms:{spacing:100,color:new U(1,0,0,1),width:1},source:pW},translucent:!1});je.ElevationRampType="ElevationRamp";je._materialCache.addMaterial(je.ElevationRampType,{fabric:{type:je.ElevationRampType,uniforms:{image:je.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:bW},translucent:!1});je.SlopeRampMaterialType="SlopeRamp";je._materialCache.addMaterial(je.SlopeRampMaterialType,{fabric:{type:je.SlopeRampMaterialType,uniforms:{image:je.DefaultImageId},source:CW},translucent:!1});je.AspectRampMaterialType="AspectRamp";je._materialCache.addMaterial(je.AspectRampMaterialType,{fabric:{type:je.AspectRampMaterialType,uniforms:{image:je.DefaultImageId},source:dW},translucent:!1});je.ElevationBandType="ElevationBand";je._materialCache.addMaterial(je.ElevationBandType,{fabric:{type:je.ElevationBandType,uniforms:{heights:je.DefaultImageId,colors:je.DefaultImageId},source:fW},translucent:!0});je.WaterMaskType="WaterMask";je._materialCache.addMaterial(je.WaterMaskType,{fabric:{type:je.WaterMaskType,source:RW,uniforms:{waterColor:new U(1,1,1,1),landColor:new U(0,0,0,0)}},translucent:!1});var ji=je;function NT(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.materialSupport??NT.MaterialSupport.TEXTURED;this.material=l(e.material)?e.material:ji.fromType(ji.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??i.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource??i.fragmentShaderSource,this._renderState=Ao.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(NT.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}}});NT.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;NT.prototype.isTranslucent=Ao.prototype.isTranslucent;NT.prototype.getRenderState=Ao.prototype.getRenderState;NT.MaterialSupport={BASIC:Object.freeze({vertexFormat:Xe.POSITION_AND_NORMAL,vertexShaderSource:aW,fragmentShaderSource:sW}),TEXTURED:Object.freeze({vertexFormat:Xe.POSITION_NORMAL_AND_ST,vertexShaderSource:lW,fragmentShaderSource:cW}),ALL:Object.freeze({vertexFormat:Xe.ALL,vertexShaderSource:rW,fragmentShaderSource:oW})};var xo=NT;var ein=x(T(),1);var wnn=x(T(),1),LW=`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 knn=x(T(),1),WW=`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 Dnn=x(T(),1),YT=`in vec4 v_color; void main() { out_FragColor = czm_gammaCorrect(v_color); } `;var Bnn=x(T(),1),vW=`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 M0(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?vW:WW,r=i?YT:LW,s=i?M0.FLAT_VERTEX_FORMAT:M0.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=Ao.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(M0.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}}});M0.VERTEX_FORMAT=Xe.POSITION_AND_NORMAL;M0.FLAT_VERTEX_FORMAT=Xe.POSITION_ONLY;M0.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;M0.prototype.isTranslucent=Ao.prototype.isTranslucent;M0.prototype.getRenderState=Ao.prototype.getRenderState;var bn=M0;var cin=x(T(),1);function EZ(e){this._definitionChanged=new _e,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(EZ.prototype,{isConstant:{get:function(){return j.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color")});EZ.prototype.getType=function(e){return"Color"};var _Ne=new Q;EZ.prototype.getValue=function(e,t){return l(e)||(e=Q.now(_Ne)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};EZ.prototype.equals=function(e){return this===e||e instanceof EZ&&j.equals(this._color,e._color)};var Kt=EZ;var Man=x(T(),1);var xan=x(T(),1);var Gin=x(T(),1);var gin=x(T(),1);function cy(e){e=e??B.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ie.default,this._rectangle=e.rectangle??ce.MAX_VALUE,this._projection=new Ki(this._ellipsoid),this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??2,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1}Object.defineProperties(cy.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});cy.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<=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 Qi=cy;var Wae=new m,vae=new m,Fae=new be,iJ=new m,SNe=new m,Iae=new de,ANe=new Qi,FW=[new be,new be,new be,new be],IW=new M,Gs={};Gs.initialize=function(){let e=Gs._initPromise;return l(e)||(e=We.fetchJson(qt("Assets/approximateTerrainHeights.json")).then(function(t){Gs._terrainHeights=t}),Gs._initPromise=e),e};Gs.getMinimumMaximumHeights=function(e,t){t=t??ie.default;let n=Pae(e),i=Gs._defaultMinTerrainHeight,o=Gs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Gs._terrainHeights[r];l(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(ce.northeast(e,Fae),Wae),t.cartographicToCartesian(ce.southwest(e,Fae),vae),m.midpoint(vae,Wae,iJ);let a=t.scaleToGeodeticSurface(iJ,SNe);if(l(a)){let c=m.distance(iJ,a);i=Math.min(i,-c)}else i=Gs._defaultMinTerrainHeight}return i=Math.max(Gs._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};Gs.getBoundingSphere=function(e,t){t=t??ie.default;let n=Pae(e),i=Gs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Gs._terrainHeights[r];l(s)&&(i=s[1])}let o=de.fromRectangle3D(e,t,0);return de.fromRectangle3D(e,t,i,Iae),de.union(o,Iae,o)};function Pae(e){be.fromRadians(e.east,e.north,0,FW[0]),be.fromRadians(e.west,e.north,0,FW[1]),be.fromRadians(e.east,e.south,0,FW[2]),be.fromRadians(e.west,e.south,0,FW[3]);let t=0,n=0,i=0,o=0,r=Gs._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let d=FW[c];if(ANe.positionToTileXY(d,s,IW),c===0)i=IW.x,o=IW.y;else if(i!==IW.x||o!==IW.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}}Gs._terrainHeightsMaxLevel=6;Gs._defaultMaxTerrainHeight=9e3;Gs._defaultMinTerrainHeight=-1e5;Gs._terrainHeights=void 0;Gs._initPromise=void 0;Object.defineProperties(Gs,{initialized:{get:function(){return l(Gs._terrainHeights)}}});var Wi=Gs;var lon=x(T(),1);var Hin=x(T(),1);var Iin=x(T(),1);function qa(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}qa.fromCorners=function(e,t,n){return l(n)||(n=new qa),n.minimum=m.clone(e,n.minimum),n.maximum=m.clone(t,n.maximum),n.center=m.midpoint(e,t,n.center),n};qa.fromPoints=function(e,t){if(l(t)||(t=new qa),!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;h0?Jt.INSIDE:r+o<0?Jt.OUTSIDE:Jt.INTERSECTING};qa.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};qa.prototype.clone=function(e){return qa.clone(this,e)};qa.prototype.intersectPlane=function(e){return qa.intersectPlane(this,e)};qa.prototype.intersectAxisAlignedBoundingBox=function(e){return qa.intersectAxisAlignedBoundingBox(this,e)};qa.prototype.equals=function(e){return qa.equals(this,e)};var ru=qa;var oJ=new se;function up(e,t){t=t??ie.default,e=t.scaleToGeodeticSurface(e);let n=pt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=m.fromCartesian4(F.getColumn(n,0,oJ)),this._yAxis=m.fromCartesian4(F.getColumn(n,1,oJ));let i=m.fromCartesian4(F.getColumn(n,2,oJ));this._plane=an.fromPointNormal(e,i)}Object.defineProperties(up.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 ru;up.fromPoints=function(e,t){let n=ru.fromPoints(e,ZNe);return new up(n.center,t)};var Xae=new xn,a5=new m;up.prototype.projectPointOntoPlane=function(e,t){let n=Xae;n.origin=e,m.normalize(e,n.direction);let i=mi.rayPlane(n,this._plane,a5);if(l(i)||(m.negate(n.direction,n.direction),i=mi.rayPlane(n,this._plane,a5)),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)}};up.prototype.projectPointsOntoPlane=function(e,t){l(t)||(t=[]);let n=0,i=e.length;for(let o=0;o0?0:v.latitude,C=be.fromRadians(N,e.north,n,XNe),R=be.fromRadians(e.west,e.north,n,NNe),L=be.fromRadians(e.west,g,n,YNe),P=be.fromRadians(e.west,e.south,n,wNe),Y=be.fromRadians(N,e.south,n,MNe),O=i.cartographicToCartesian(C,kNe),k=i.cartographicToCartesian(R,wae),D=i.cartographicToCartesian(L,UNe),w=i.cartographicToCartesian(P,Mae),z=i.cartographicToCartesian(Y,DNe),J=X.projectPointToNearestOnPlane(O,ONe),ee=X.projectPointToNearestOnPlane(k,BNe),H=X.projectPointToNearestOnPlane(D,zNe),te=X.projectPointToNearestOnPlane(w,HNe),$=X.projectPointToNearestOnPlane(z,KNe);return r=Math.min(ee.x,H.x,te.x),s=-r,c=Math.max(ee.y,J.y),a=Math.min(te.y,$.y),R.height=P.height=t,k=i.cartographicToCartesian(R,wae),w=i.cartographicToCartesian(P,Mae),d=Math.min(an.getPointDistance(h,k),an.getPointDistance(h,w)),u=n,Nae(X.origin,X.xAxis,X.yAxis,X.zAxis,r,s,a,c,d,u,o)}let p=e.south>0,b=e.north<0,f=p?e.south:b?e.north:0,y=ce.center(e,Yae).longitude,_=m.fromRadians(y,f,n,i,JNe);_.z=0;let A=Math.abs(_.x)=c?Jt.INSIDE:Jt.INTERSECTING};var Dae=new m,Oae=new m,Bae=new m,oYe=new m,kae=new m,rYe=new m;so.distanceSquaredTo=function(e,t){let n=m.subtract(t,e.center,Uae),i=e.halfAxes,o=q.getColumn(i,0,Dae),r=q.getColumn(i,1,Oae),s=q.getColumn(i,2,Bae),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 b=!u+!h+!p,f,y,_;if(b===1){let V=o;f=r,y=s,h?p||(V=s,y=o):(V=r,f=o),_=m.cross(f,y,kae),V===o?o=_:V===r?r=_:V===s&&(s=_)}else if(b===2){f=o,h?f=r:p&&(f=s);let V=m.UNIT_Y;V.equalsEpsilon(f,W.EPSILON3)&&(V=m.UNIT_X),y=m.cross(f,V,oYe),m.normalize(y,y),_=m.cross(f,y,kae),m.normalize(_,_),f===o?(r=y,s=_):f===r?(s=y,o=_):f===s&&(o=y,r=_)}else b===3&&(o=m.UNIT_X,r=m.UNIT_Y,s=m.UNIT_Z);let S=rYe;S.x=m.dot(n,o),S.y=m.dot(n,r),S.z=m.dot(n,s);let A=0,Z;return S.x<-a?(Z=S.x+a,A+=Z*Z):S.x>a&&(Z=S.x-a,A+=Z*Z),S.y<-c?(Z=S.y+c,A+=Z*Z):S.y>c&&(Z=S.y-c,A+=Z*Z),S.z<-d?(Z=S.z+d,A+=Z*Z):S.z>d&&(Z=S.z-d,A+=Z*Z),A};var sYe=new m,aYe=new m;so.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Kr);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=q.getColumn(a,0,Dae),d=q.getColumn(a,1,Oae),u=q.getColumn(a,2,Bae),h=m.add(c,d,sYe);m.add(h,u,h),m.add(h,s,h);let p=m.subtract(h,t,aYe),b=m.dot(n,p);return o=Math.min(b,o),r=Math.max(b,r),m.add(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.add(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.add(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.subtract(s,c,h),m.add(h,d,h),m.add(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.subtract(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.subtract(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),m.subtract(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),b=m.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),i.start=o,i.stop=r,i};var cYe=new m,lYe=new m,dYe=new m;so.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=q.getColumn(i,0,cYe),r=q.getColumn(i,1,lYe),s=q.getColumn(i,2,dYe);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 uYe=new q;so.computeTransformation=function(e,t){l(t)||(t=new F);let n=e.center,i=q.multiplyByUniformScale(e.halfAxes,2,uYe);return F.fromRotationTranslation(i,n,t)};var mYe=new de;so.isOccluded=function(e,t){let n=de.fromOrientedBoundingBox(e,mYe);return!t.isBoundingSphereVisible(n)};so.prototype.intersectPlane=function(e){return so.intersectPlane(this,e)};so.prototype.distanceSquaredTo=function(e){return so.distanceSquaredTo(this,e)};so.prototype.computePlaneDistances=function(e,t,n){return so.computePlaneDistances(this,e,t,n)};so.prototype.computeCorners=function(e){return so.computeCorners(this,e)};so.prototype.computeTransformation=function(e){return so.computeTransformation(this,e)};so.prototype.isOccluded=function(e){return so.isOccluded(this,e)};so.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&q.equals(e.halfAxes,t.halfAxes)};so.prototype.clone=function(e){return so.clone(this,e)};so.prototype.equals=function(e){return so.equals(this,e)};var en=so;var fon=x(T(),1);var c5={};c5.getHeight=function(e,t,n){return(e-n)*t+n};var hYe=new be;c5.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,hYe);if(!l(r))return m.clone(e,o);let s=c5.getHeight(r.height,n,i);return m.fromRadians(r.longitude,r.latitude,s,t,o)};var Zo=c5;var tan=x(T(),1);var bon=x(T(),1),PW=`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 yon=x(T(),1),ly=`#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 Ton=x(T(),1),zae={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};zae.NUMBER_OF_CLASSIFICATION_TYPES=3;var ti=Object.freeze(zae);var Aon=x(T(),1);var fYe={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},$a=Object.freeze(fYe);var qrn=x(T(),1);var Con=x(T(),1);function pYe(e,t){let n=[],i=e.length,o=0;for(;oTd.MaximumLatitude?e=Td.MaximumLatitude:e<-Td.MaximumLatitude&&(e=-Td.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};Td.MaximumLatitude=Td.mercatorAngleToGeodeticLatitude(Math.PI);Td.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=Td.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)};Td.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=Td.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new be(i,o,r)};var fi=Td;function GYe(e,t,n){let i=!n,o=e.length,r;if(!i&&o>1){let s=e[0].modelMatrix;for(r=1;r=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;dr&&(o=0,r=n[++s].indices.length),i.push({index:s,offset:o,count:p}),o+=p}}function vYe(e,t){let n=[];return sJ(e,"geometry",t,n),sJ(e,"westHemisphereGeometry",t,n),sJ(e,"eastHemisphereGeometry",t,n),n}var U0={};U0.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=WYe(e),t.length>0&&(n=Kn.createAttributeLocations(t[0]),e.createPickOffsets&&(r=vYe(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;u0&&(n.set(c.indices,s),s+=f)}return t.push(n.buffer),{stringTable:i,packedData:n}};U0.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s0){let E=_.length/S;for(V=Ne.createTypedArray(E,y),i=0;i= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; gl_Position *= show; }`,`${i} ${o}`};function $ae(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=Oe.replaceMain(p,"czm_non_compressed_main");let b=`void main() { ${h} czm_non_compressed_main(); }`;return[d,u,p,b].join(` `)}function HYe(e){let t=Oe.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); gl_Position = czm_depthClamp(gl_Position);} `,t}function KYe(e){let t=Oe.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 ece(e,t){let n=e.vertexAttributes}function JYe(e,t){return function(){return e[t]}}var aJ=Math.max(dn.hardwareConcurrency-1,1),l5,jYe=new $n("combineGeometry");function QYe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Qr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],d=[];for(o=0;o0){let y=new Float64Array(h);for(f=[y.buffer],r=0;r0?(e._recomputeBoundingSpheres=!0,e._state=Qr.COMBINED):wW(e,t,Qr.FAILED,void 0)}).catch(function(h){wW(e,t,Qr.FAILED,h)})}}function qYe(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;a0?(e._recomputeBoundingSpheres=!0,e._state=Qr.COMBINED):wW(e,t,Qr.FAILED,void 0)}function $Ye(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;i0||de.intersectPlane(y,an.ORIGIN_ZX_PLANE)!==Jt.INTERSECTING?c.push(y):(d.push(y),u.push(y))}let h=c[0],p=u[0],b=d[0];for(i=1;i0){if(vt.maximumVertexTextureImageUnits===0)throw new ue("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!==Qr.COMPLETE&&this._state!==Qr.COMBINED&&(this.asynchronous?QYe(this,e):qYe(this,e)),this._state===Qr.COMBINED&&(ewe(this,e),nce(this,e),nwe(this,e)),!this.show||this._state!==Qr.COMPLETE)return;this._batchTableOffsetsUpdated||nce(this,e),this._recomputeBoundingSpheres&&$Ye(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??iwe)(this,t,n,d),r&&(this._createShaderProgramFunction??owe)(this,e,n),(o||r)&&(this._createCommandsFunction??rwe)(this,n,i,c,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??swe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var awe=new de,cwe=new de;function dce(e,t,n){if(n===mn.TOP){let i=de.clone(e,awe),o=de.clone(e,cwe);o.center=m.add(o.center,t,o.center),e=de.union(i,o,e)}else n===mn.ALL&&(e.center=m.add(e.center,t,e.center));return e}function lwe(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=K.createTypedArray(o.componentDatatype,r);return l(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function dwe(e,t,n,i,o){return function(r){let s=sce(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var uwe=new m;function mwe(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)&&dce(i,m.fromArray(r.get(),0,uwe),e._offsetInstanceExtend[n]),l(o)&&(i=de.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function hwe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}qr.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 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 gm(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new lJ;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new lJ;if(o.requiresTextureCoordinates=e,n instanceof bn)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}gm.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 bn&&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 bn||(o=t.material.shaderSource),new Oe({defines:i,sources:[o,GZ]})};gm.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 Oe({defines:n,sources:[GZ],pickColorQualifier:"in"})};gm.prototype.createVertexShader=function(e,t,n,i){return yce(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};gm.prototype.createPickVertexShader=function(e,t,n,i){return yce(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var uce=new m,mce=new be,hce={high:0,low:0};function yce(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let d=mce;d.longitude=W.PI,d.latitude=0,d.height=0;let u=s.project(d,uce),h=Zn.encode(u.x,hce);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=mce;p.longitude=-W.PI,p.latitude=0,p.height=0;let b=s.project(p,uce);h=Zn.encode(b.x,hce),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 bn&&c.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(c.push("TEXTURE_COORDINATES"),t||n||c.push("SPHERICAL"),n&&c.push("COLUMBUS_VIEW_2D")),new Oe({defines:c,sources:[o]})}function lJ(){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(lJ.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 fce(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 pwe=[new M,new M,new M,new M];function xce(e,t){let n=pwe,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:K.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/fce(i,o,r),a=1/fce(i,r,o);e.uvMinAndExtents=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var Tce=new be,_ce=new m,bwe=new m,gwe=new m,d5={high:0,low:0};function Sce(e,t,n){let i=Tce;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,_ce);i.latitude=e.north;let r=t.project(i,bwe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,gwe),a=[0,0,0,0],c=[0,0,0,0],d=Zn.encode(o.x,d5);a[0]=d.high,c[0]=d.low,d=Zn.encode(o.y,d5),a[1]=d.high,c[1]=d.low,d=Zn.encode(r.y,d5),a[2]=d.high,c[2]=d.low,d=Zn.encode(s.x,d5),a[3]=d.high,c[3]=d.low,n.planes2D_HIGH=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var ywe=new F,xwe=new F,pce=new m,Twe=new be,_we=[new be,new be,new be,new be,new be,new be,new be,new be];function Swe(e,t,n,i,o,r){let s=ce.center(e,Twe);s.height=n;let a=be.toCartesian(s,t,pce),c=pt.eastNorthUpToFixedFrame(a,t,ywe),d=F.inverse(c,xwe),u=e.west,h=e.east,p=e.north,b=e.south,f=_we;f[0].latitude=b,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=h,f[3].latitude=b,f[3].longitude=h;let y=(u+h)*.5,_=(p+b)*.5;f[4].latitude=b,f[4].longitude=y,f[5].latitude=p,f[5].longitude=y,f[6].latitude=_,f[6].longitude=u,f[7].latitude=_,f[7].longitude=h;let S=Number.POSITIVE_INFINITY,A=Number.NEGATIVE_INFINITY,Z=Number.POSITIVE_INFINITY,V=Number.NEGATIVE_INFINITY;for(let I=0;I<8;I++){f[I].height=n;let X=be.toCartesian(f[I],t,pce);F.multiplyByPoint(d,X,X),X.z=0,S=Math.min(S,X.x),A=Math.max(A,X.x),Z=Math.min(Z,X.y),V=Math.max(V,X.y)}let E=i;E.x=S,E.y=Z,E.z=0,F.multiplyByPoint(c,E,E);let G=o;G.x=A,G.y=Z,G.z=0,F.multiplyByPoint(c,G,G),m.subtract(G,E,o);let v=r;v.x=S,v.y=V,v.z=0,F.multiplyByPoint(c,v,v),m.subtract(v,E,r)}var Awe=new m,Zwe=new m,Cwe=new Zn;gm.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=_ce,s=Awe,a=Zwe;Swe(e,n,o??0,r,s,a);let c={};xce(c,t);let d=Zn.fromCartesian(r,Cwe);return c.southWest_HIGH=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.high,[0,0,0])}),c.southWest_LOW=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.low,[0,0,0])}),c.eastward=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(s,[0,0,0])}),c.northward=new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(a,[0,0,0])}),Sce(e,i,c),c};var Vwe=new m;function bce(e,t,n,i){let o=Tce;o.latitude=e,o.longitude=t,o.height=0;let r=be.toCartesian(o,n,Vwe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=W.fastApproximateAtan2(s,r.z),c=W.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var gce=new M;gm.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=bce(e.south,e.west,n,gce),r=o.x,s=o.y,a=bce(e.north,e.east,n,gce),c=a.x,d=a.y,u=0;s>d&&(u=W.PI-s,s=-W.PI,d+=u),r-=W.EPSILON5,s-=W.EPSILON5,c+=W.EPSILON5,d+=W.EPSILON5;let h=1/(d-s),p=1/(c-r),b={sphericalExtents:new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,h]}),longitudeRotation:new Kc({componentDatatype:K.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return xce(b,t),Sce(e,i,b),b};gm.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)};gm.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 Rwe(e){return Math.max(e.width,e.height)>gm.MAX_WIDTH_FOR_PLANAR_EXTENTS}gm.shouldUseSphericalCoordinates=function(e){return Rwe(e)};gm.MAX_WIDTH_FOR_PLANAR_EXTENTS=W.toRadians(1);var au=gm;var Gsn=x(T(),1);var Ssn=x(T(),1);var Ewe={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(Ewe);var Csn=x(T(),1);var Gwe={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},Ct=Object.freeze(Gwe);var u5={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};u5.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:ni.ALWAYS,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.REPLACE},backFunction:ni.ALWAYS,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.REPLACE},reference:u5.CESIUM_3D_TILE_MASK,mask:u5.CESIUM_3D_TILE_MASK}};var Ht=Object.freeze(u5);function kT(e){e=e??B.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(kT.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}}});kT.isSupported=function(e){return e.context.stencilBuffer};function LZ(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:Ct.KEEP,zFail:Ct.DECREMENT_WRAP,zPass:Ct.KEEP},backFunction:n,backOperation:{fail:Ct.KEEP,zFail:Ct.INCREMENT_WRAP,zPass:Ct.KEEP},reference:Ht.CESIUM_3D_TILE_MASK,mask:Ht.CESIUM_3D_TILE_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:$a.LESS_OR_EQUAL},depthMask:!1}}function uJ(e){return{stencilTest:{enabled:e,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:Ht.CLASSIFICATION_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:rn.PRE_MULTIPLIED_ALPHA_BLEND}}var Lwe={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:Ht.CLASSIFICATION_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function Wwe(e,t,n,i){if(l(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Ue.fromCache(LZ(o,!1)),e._rsStencilDepthPass3DTiles=Ue.fromCache(LZ(o,!0)),e._rsColorPass=Ue.fromCache(uJ(o,!1)),e._rsPickPass=Ue.fromCache(Lwe)}function vwe(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=Oe.replaceMain(s,"czm_non_compressed_main");let a=`void main() { ${r} czm_non_compressed_main(); }`;return[i,o,s,a].join(` `)}}function Fwe(e,t){let n=t.context,i=e._primitive,o=PW;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=Pn._appendDistanceDisplayConditionToShader(i,o),o=Pn._modifyShaderPosition(e,o,t.scene3DOnly),o=Pn._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=vwe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new Oe({defines:[a],sources:[o]}),d=new Oe({sources:[ly]}),u=e._primitive._attributeLocations,h=new au(s,r,e.appearance);if(e._spStencil=$t.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let f=Oe.createPickVertexShaderSource(o);f=Pn._appendShowToShader(i,f),f=Pn._updatePickColorAttribute(f);let y=h.createPickFragmentShader(!1),_=h.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=$t.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:_,fragmentShaderSource:y,attributeLocations:u}),s){let S=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!l(S)){let A=h.createPickFragmentShader(!0),Z=h.createPickVertexShader([a],f,!0,t.mapProjection);S=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:Z,fragmentShaderSource:A,attributeLocations:u})}e._spPick2D=S}}else e._spPick=$t.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});o=Pn._appendShowToShader(i,o),c=new Oe({defines:[a],sources:[o]}),e._sp=$t.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});let p=h.createFragmentShader(!1),b=h.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=$t.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:b,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!l(f)){let y=h.createFragmentShader(!0),_=h.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:_,fragmentShaderSource:y,attributeLocations:u})}e._spColor2D=f}}function Iwe(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;o0&&(c=o[0].attributes,p=au.hasAttributesForSphericalExtents(c),b=au.hasAttributesForTextureCoordinatePlanes(c),h=c.color),s=0;s{l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};kT.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};kT.prototype.isDestroyed=function(){return!1};kT.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 WZ=kT;var Ywe={u_globeMinimumAltitude:function(){return 55e3}};function _d(e){e=e??B.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{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};_d.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};_d.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};_d.prototype.isDestroyed=function(){return!1};_d.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};_d._supportsMaterials=function(e){return e.depthTexture};_d.supportsMaterials=function(e){return _d._supportsMaterials(e.frameState.context)};var Rl=_d;var Van=x(T(),1);function vZ(){fe.throwInstantiationError()}Object.defineProperties(vZ.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});vZ.prototype.getType=fe.throwInstantiationError;vZ.prototype.getValue=fe.throwInstantiationError;vZ.prototype.equals=fe.throwInstantiationError;var Hwe=new Q;vZ.getValue=function(e,t,n){let i;return l(e)||(e=Q.now(Hwe)),l(t)&&(i=t.getType(e),l(i))?((!l(n)||n.type!==i)&&(n=ji.fromType(i)),t.getValue(e,n.uniforms),n):((!l(n)||n.type!==ji.ColorType)&&(n=ji.fromType(ji.ColorType)),U.clone(U.WHITE,n.uniforms.color),n)};var Ar=vZ;function UT(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}UT.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!j.getValueOrDefault(t.show,n,!0)};UT.prototype._setOptions=fe.throwInstantiationError;UT.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 bn({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let b=Ar.getValue(e,d,this._material);this._material=b,h=new xo({material:b,translucent:b.isTranslucent(),closed:p})}if(n)c.vertexFormat=bn.VERTEX_FORMAT,this._primitive=o.add(new Rl({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:h,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),j.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{c.vertexFormat=h.vertexFormat;let b=this._geometryUpdater.createFillGeometryInstance(e);u&&(h.translucent=b.attributes.color.value[3]!==255),this._primitive=i.add(new Pn({geometryInstances:b,appearance:h,asynchronous:!1,shadows:a}))}}if(!n&&l(s.outline)&&s.outline.getValue(e)){let d=this._geometryUpdater.createOutlineGeometryInstance(e),u=j.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new Pn({geometryInstances:d,appearance:new bn({flat:!0,translucent:d.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};UT.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))?(de.clone(o.boundingSphere,e),Tt.DONE):l(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(de.clone(o.boundingSphere,e),Tt.DONE):l(n)&&!n.ready||l(i)&&!i.ready?Tt.PENDING:Tt.FAILED};UT.prototype.isDestroyed=function(){return!1};UT.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 Zi=UT;var sfn=x(T(),1);var Dan=x(T(),1);var Ece={};function MW(e,t){l(Ece[e])||(Ece[e]=!0,console.warn(t??e))}MW.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.";MW.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";MW.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";MW.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var Zt=MW;var Ohn=x(T(),1);var Ban=x(T(),1),Kwe={AUTODETECT:0,ENU:1,INERTIAL:2,VELOCITY:3},D0=Object.freeze(Kwe);var zln=x(T(),1);var Xcn=x(T(),1);var Han=x(T(),1),Jwe={NONE:0,GEODESIC:1,RHUMB:2},cn=Object.freeze(Jwe);var Qan=x(T(),1);var Gce=W.EPSILON10;function jwe(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;sW.EPSILON12);let C=N*(t*t-n*n)/(n*n),R=1+C*(4096+C*(C*(320-175*C)-768))/16384,L=C*(256+C*(C*(74-47*C)-128))/1024,P=g*g,Y=L*X*(g+L*(I*(2*P-1)-L*g*(4*X*X-3)*(4*P-3)/6)/4),O=n*R*(v-Y),k=Math.atan2(b*G,_-A*E),D=Math.atan2(h*G,_*E-A);e._distance=O,e._startHeading=k,e._endHeading=D,e._uSquared=C}var eMe=new m,fJ=new m;function Wce(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,fJ),eMe),r=m.normalize(i.cartographicToCartesian(n,fJ),fJ);$we(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=be.clone(t,e._start),e._end=be.clone(n,e._end),e._start.height=0,e._end.height=0,Qwe(e)}function kW(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new be,this._end=new be,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,l(e)&&l(t)&&Wce(this,e,t,i)}Object.defineProperties(kW.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}}});kW.prototype.setEndPoints=function(e,t){Wce(this,e,t,this._ellipsoid)};kW.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};kW.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,b=n.u8Over256,f=n.u2Over4,y=n.u6Over64,_=n.u4Over16,S=2*p*b*o/3+i*(1-f+7*_/4-15*y/4+579*b/64-(_-15*y/4+187*b/16)*o-(5*y/4-115*b/16)*r-29*b*s/16)+(f/2-_+71*y/32-85*b/16)*a+(5*_/16-5*y/4+383*b/96)*c-h*((y-11*b/2)*a+5*b*c/2)+(29*y/96-29*b/16)*d+539*b*u/1536,A=Math.asin(Math.sin(S)*n.cosineAlpha),Z=Math.atan(n.a/n.b*Math.tan(A));S=S-n.sigma;let V=Math.cos(2*n.sigma+S),E=Math.sin(S),G=Math.cos(S),v=n.cosineU*G,I=n.sineU*E,N=Math.atan2(E*n.sineHeading,v-I*n.cosineHeading)-Lce(n.f,n.sineAlpha,n.cosineSquaredAlpha,S,E,G,V);return l(t)?(t.longitude=this._start.longitude+N,t.latitude=Z,t.height=0,t):new be(this._start.longitude+N,Z,0)};var O0=kW;var ucn=x(T(),1);function bJ(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),b=Math.sin(8*d),f=Math.sin(10*d),y=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)*b-(693*a/1310720+6237*c/5242880)*f+1001*c/8388608*y)}function tMe(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,b=p*c,f=Math.sin(2*i),y=Math.cos(2*i),_=Math.sin(4*i),S=Math.cos(4*i),A=Math.sin(6*i),Z=Math.cos(6*i),V=Math.sin(8*i),E=Math.cos(8*i),G=Math.sin(10*i),v=Math.cos(10*i),I=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*b/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)*b/5242880)*y+(21*i*u/256+483*i*h/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*b/1048576)*S+(151*i*h/4096+4681*i*p/65536+1479*i*b/16384-453*r*b/32768)*Z+(1097*i*p/65536+42783*i*b/1048576)*E+8011*i*b/1048576*v+(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*b/1048576-471*o*b/8192+9*s*b/4096)*f+(21*d/256+21*u/256+533*h/8192-21*o*h/512+197*p/4096-315*o*p/4096+584039*b/16777216-12517*o*b/131072+7*s*b/2048)*_+(151*u/6144+151*h/4096+5019*p/131072-453*o*p/16384+26965*b/786432-8607*o*b/131072)*A+(1097*h/131072+1097*p/65536+225797*b/10485760-1097*o*b/65536)*V+(8011*p/2621440+8011*b/1048576)*G+293393*b/251658240*I}function FZ(e,t){if(e===0)return Math.log(Math.tan(.5*(W.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(W.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function nMe(e,t,n,i,o){let r=FZ(e._ellipticity,n),s=FZ(e._ellipticity,o);return Math.atan2(W.negativePiToPi(i-t),s-r)}function iMe(e,t,n,i,o,r,s){let a=e._heading,c=r-i,d=0;if(W.equalsEpsilon(Math.abs(a),W.PI_OVER_TWO,W.EPSILON8))if(t===n)d=t*Math.cos(o)*W.negativePiToPi(c);else{let u=Math.sin(o);d=t*Math.cos(o)*W.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=bJ(e._ellipticity,t,o);d=(bJ(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(d)}var oMe=new m,pJ=new m;function vce(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,pJ),oMe),r=m.normalize(i.cartographicToCartesian(n,pJ),pJ),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=be.clone(t,e._start),e._start.height=0,e._end=be.clone(n,e._end),e._end.height=0,e._heading=nMe(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=iMe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function Fce(e,t,n,i,o,r){if(n===0)return be.clone(e,r);let s=o*o,a,c,d;if(Math.abs(W.PI_OVER_TWO-Math.abs(t))>W.EPSILON8){let u=bJ(o,i,e.latitude),h=n*Math.cos(t),p=u+h;if(c=tMe(p,o,i),Math.abs(t)0?a=W.negativePiToPi(e.longitude+d):a=W.negativePiToPi(e.longitude-d)}return l(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new be(a,c,0)}function B0(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new be,this._end=new be,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,l(e)&&l(t)&&vce(this,e,t,i)}Object.defineProperties(B0.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}}});B0.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=W.negativePiToPi(t);let h=Fce(e,t,n,r.maximumRadius,u);return!l(o)||l(i)&&!i.equals(o.ellipsoid)?new B0(e,h,r):(o.setEndPoints(e,h),o)};B0.prototype.setEndPoints=function(e,t){vce(this,e,t,this._ellipsoid)};B0.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};B0.prototype.interpolateUsingSurfaceDistance=function(e,t){return Fce(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};B0.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=W.negativePiToPi(e),W.equalsEpsilon(Math.abs(e),Math.PI,W.EPSILON14)&&(e=W.sign(r.longitude)*Math.PI),l(t)||(t=new be),Math.abs(W.PI_OVER_TWO-o)<=W.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(W.equalsEpsilon(Math.abs(W.PI_OVER_TWO-o),W.PI_OVER_TWO,W.EPSILON8))return W.equalsEpsilon(e,r.longitude,W.EPSILON12)?void 0:(t.longitude=e,t.latitude=W.PI_OVER_TWO*W.sign(W.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(W.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),b=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(b/d,n/2))-W.PI_OVER_TWO}while(!W.equalsEpsilon(u,h,W.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};B0.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(W.equalsEpsilon(Math.abs(i),W.PI_OVER_TWO,W.EPSILON8))return;let r=FZ(n,o.latitude),s=FZ(n,e),a=Math.tan(i)*(s-r),c=W.negativePiToPi(o.longitude+a);return l(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new be(c,e,0)};var Rc=B0;var ZJ=[Ki,fi],rMe=ZJ.length,$ce=Math.cos(W.toRadians(30)),Ice=Math.cos(W.toRadians(150)),ele=0,tle=1e3;function uy(e){e=e??B.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??cn.GEODESIC,this._ellipsoid=ie.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(uy.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+ie.packedLength+1+1}}});uy.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;i$ce||rW.PI_OVER_TWO&&(a=!0,s=m.subtract(r,n,Uce),d=c.cartesianToCartographic(s,kce)),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 CMe=new m,Dce=new m;function Oce(e,t,n,i,o,r){let s=m.subtract(t,e,CMe);m.normalize(s,s);let a=n-ele,c=m.multiplyByScalar(s,a,Dce);m.add(e,c,o);let d=i-tle;c=m.multiplyByScalar(s,d,Dce),m.add(t,c,r)}var VMe=new m;function p5(e,t){let n=an.getPointDistance(b5,e),i=an.getPointDistance(b5,t),o=VMe;W.equalsEpsilon(n,0,W.EPSILON2)?(o=z0(t,e,o),m.multiplyByScalar(o,W.EPSILON2,o),m.add(e,o,e)):W.equalsEpsilon(i,0,W.EPSILON2)&&(o=z0(e,t,o),m.multiplyByScalar(o,W.EPSILON2,o),m.add(t,o,t))}function RMe(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(W.equalsEpsilon(n,W.PI,W.EPSILON11)){let o=W.sign(t.longitude);return e.longitude=o*(n-W.EPSILON11),1}else if(W.equalsEpsilon(i,W.PI,W.EPSILON11)){let o=W.sign(e.longitude);return t.longitude=o*(i-W.EPSILON11),2}return 0}var ile=new be,ole=new be,Bce=new m,TJ=new m,zce=new m,Hce=new m,EMe=new m,Kce=new m,GMe=[ile,ole],LMe=new ce,WMe=new m,vMe=new m,FMe=new m,IMe=new m,PMe=new m,XMe=new m,_J=new m,SJ=new m,NMe=new m,YMe=new m,wMe=new m,Jce=new m,MMe=new m,kMe=new m,UMe=new Zn,DMe=new Zn,jce=new m,OMe=new m,Qce=new m,BMe=[new de,new de],rle=[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],qce=rle.length;function zMe(e,t,n,i,o,r,s){let a,c,d=t._ellipsoid,u=n.length/3-1,h=u*8,p=h*4,b=u*36,f=h>65535?new Uint32Array(b):new Uint16Array(b),y=new Float64Array(h*3),_=new Float32Array(p),S=new Float32Array(p),A=new Float32Array(p),Z=new Float32Array(p),V=new Float32Array(p),E,G,v,I;s&&(E=new Float32Array(p),G=new Float32Array(p),v=new Float32Array(p),I=new Float32Array(h*2));let X=r.length/2,N=0,g=ile;g.height=0;let C=ole;C.height=0;let R=Bce,L=TJ;if(s)for(c=0,a=1;a$ce?(Rt=UW(t,g,ke,nt,_J),He=UW(t,C,te,bt,SJ)):En===1?(He=UW(t,C,te,bt,SJ),Rt.x=0,Rt.y=W.sign(g.longitude-Math.abs(C.longitude)),Rt.z=0):(Rt=UW(t,g,ke,nt,_J),He.x=0,He.y=W.sign(g.longitude-C.longitude),He.z=0)}let mt=m.distance(we,H),it=Zn.fromCartesian(Ve,UMe),rt=m.subtract(ee,Ve,NMe),jt=m.normalize(rt,Jce),Cn=m.subtract(we,Ve,YMe);Cn=m.normalize(Cn,Cn);let ct=m.cross(jt,Cn,Jce);ct=m.normalize(ct,ct);let Wt=m.cross(Cn,ke,MMe);Wt=m.normalize(Wt,Wt);let sn=m.subtract(H,ee,wMe);sn=m.normalize(sn,sn);let lt=m.cross(te,sn,kMe);lt=m.normalize(lt,lt);let Xn=mt/Y,pi=$/Y,Di=0,Ut,bo,ro,Fi=0,zn=0;if(s){Di=m.distance(nt,bt),Ut=Zn.fromCartesian(nt,DMe),bo=m.subtract(bt,nt,jce),ro=m.normalize(bo,OMe);let En=ro.x;ro.x=ro.y,ro.y=-En,Fi=Di/N,zn=pe/N}for(O=0;O<8;O++){let En=z+O*4,Ho=D+O*2,Fo=En+3,sa=O<4?1:-1,Ii=O===2||O===3||O===6||O===7?1:-1;m.pack(it.high,_,En),_[Fo]=rt.x,m.pack(it.low,S,En),S[Fo]=rt.y,m.pack(Wt,A,En),A[Fo]=rt.z,m.pack(lt,Z,En),Z[Fo]=Xn*sa,m.pack(ct,V,En);let Io=pi*Ii;Io===0&&Ii<0&&(Io=9),V[Fo]=Io,s&&(E[En]=Ut.high.x,E[En+1]=Ut.high.y,E[En+2]=Ut.low.x,E[En+3]=Ut.low.y,v[En]=-Rt.y,v[En+1]=Rt.x,v[En+2]=He.y,v[En+3]=-He.x,G[En]=bo.x,G[En+1]=bo.y,G[En+2]=ro.x,G[En+3]=ro.y,I[Ho]=Fi*sa,Io=zn*Ii,Io===0&&Ii<0&&(Io=9),I[Ho+1]=Io)}let Dn=FMe,Hi=IMe,Gi=WMe,er=vMe,Lr=ce.fromCartographicArray(GMe,LMe),Vs=Wi.getMinimumMaximumHeights(Lr,d),Wr=Vs.minimumTerrainHeight,On=Vs.maximumTerrainHeight;xe+=Math.abs(Wr),xe+=Math.abs(On),Oce(Ve,we,Wr,On,Dn,Gi),Oce(ee,H,Wr,On,Hi,er);let go=m.multiplyByScalar(ct,W.EPSILON5,Qce);m.add(Dn,go,Dn),m.add(Hi,go,Hi),m.add(Gi,go,Gi),m.add(er,go,er),p5(Dn,Hi),p5(Gi,er),m.pack(Dn,y,w),m.pack(Hi,y,w+3),m.pack(er,y,w+6),m.pack(Gi,y,w+9),go=m.multiplyByScalar(ct,-2*W.EPSILON5,Qce),m.add(Dn,go,Dn),m.add(Hi,go,Hi),m.add(Gi,go,Gi),m.add(er,go,er),p5(Dn,Hi),p5(Gi,er),m.pack(Dn,y,w+12),m.pack(Hi,y,w+15),m.pack(er,y,w+18),m.pack(Gi,y,w+21),k+=2,c+=3,D+=16,w+=24,z+=32,$+=mt,pe+=Di}c=0;let le=0;for(a=0;a 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 Mcn=x(T(),1),OW=`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 Ucn=x(T(),1),BW=`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 Ocn=x(T(),1),zW=`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 nln=x(T(),1);var zcn=x(T(),1),HW=`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 Kcn=x(T(),1),Gl=`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 HMe=`#define CLIP_POLYLINE ${Gl} ${HW}`,KMe=YT;function OT(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=OT.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??HMe,this._fragmentShaderSource=e.fragmentShaderSource??KMe,this._renderState=Ao.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(OT.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}}});OT.VERTEX_FORMAT=Xe.POSITION_ONLY;OT.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;OT.prototype.isTranslucent=Ao.prototype.isTranslucent;OT.prototype.getRenderState=Ao.prototype.getRenderState;var Ws=OT;var bln=x(T(),1);var oln=x(T(),1),KW=`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 sln=x(T(),1),BT=`#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 JMe=`#define CLIP_POLYLINE ${Gl} ${KW}`,jMe=BT;function zT(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=zT.VERTEX_FORMAT;this.material=l(e.material)?e.material:ji.fromType(ji.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??JMe,this._fragmentShaderSource=e.fragmentShaderSource??jMe,this._renderState=Ao.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(zT.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}}});zT.VERTEX_FORMAT=Xe.POSITION_AND_ST;zT.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;zT.prototype.isTranslucent=Ao.prototype.isTranslucent;zT.prototype.getRenderState=Ao.prototype.getRenderState;var ec=zT;function H0(e){e=e??B.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;l(t)||(t=new ec),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=sle(!1),this._renderState3DTiles=sle(!0),this._renderStateMorph=Ue.fromCache({cull:{enabled:!0,face:wi.FRONT},depthTest:{enabled:!0},blending:rn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(H0.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}}});H0.initializeTerrainHeights=function(){return Wi.initialize()};function QMe(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(zW);s=Pn._appendShowToShader(o,s),s=Pn._appendDistanceDisplayConditionToShader(o,s),s=Pn._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(BW);a=Pn._appendShowToShader(o,a),a=Pn._appendDistanceDisplayConditionToShader(o,a),a=Pn._modifyShaderPosition(e,a,t.scene3DOnly);let c=o._batchTable.getVertexShaderCallback()(DW),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],b=new Oe({defines:d,sources:[s]}),f=new Oe({defines:p,sources:[h,c]});e._sp=$t.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:b,fragmentShaderSource:f,attributeLocations:r});let y=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!l(y)){let S=new Oe({defines:d.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});y=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:S,fragmentShaderSource:f,attributeLocations:r})}e._sp2D=y;let _=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!l(_)){let S=new Oe({defines:d.concat([`MAX_TERRAIN_HEIGHT ${Wi._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});c=o._batchTable.getVertexShaderCallback()(OW);let A=new Oe({defines:p,sources:[h,c]});_=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:S,fragmentShaderSource:A,attributeLocations:r})}e._spMorph=_}function sle(e){return Ue.fromCache({cull:{enabled:!0},blending:rn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ni.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ni.EQUAL,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},reference:Ht.CESIUM_3D_TILE_MASK,mask:Ht.CESIUM_3D_TILE_MASK}})}function qMe(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let d=t instanceof Ws?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(d);for(let h=0;h{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};H0.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};H0.isSupported=function(e){return e.frameState.context.depthTexture};H0.prototype.isDestroyed=function(){return!1};H0.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 Ph=H0;var bdn=x(T(),1);var ldn=x(T(),1);var ndn=x(T(),1);var e9e=new M(1,1),t9e=!1,n9e=U.WHITE;function IZ(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(IZ.prototype,{isConstant:{get:function(){return j.isConstant(this._image)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:ye("image"),repeat:ye("repeat"),color:ye("color"),transparent:ye("transparent")});IZ.prototype.getType=function(e){return"Image"};var i9e=new Q;IZ.prototype.getValue=function(e,t){return l(e)||(e=Q.now(i9e)),l(t)||(t={}),t.image=j.getValueOrUndefined(this._image,e),t.repeat=j.getValueOrClonedDefault(this._repeat,e,e9e,t.repeat),t.color=j.getValueOrClonedDefault(this._color,e,n9e,t.color),j.getValueOrDefault(this._transparent,e,t9e)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};IZ.prototype.equals=function(e){return this===e||e instanceof IZ&&j.equals(this._image,e._image)&&j.equals(this._repeat,e._repeat)&&j.equals(this._color,e._color)&&j.equals(this._transparent,e._transparent)};var my=IZ;function o9e(e){if(e instanceof U)return new Kt(e);if(typeof e=="string"||e instanceof We||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new my;return t.image=e,t}}function r9e(e,t){return ye(e,t,o9e)}var nr=r9e;function JW(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties(JW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),dimensions:ye("dimensions"),heightReference:ye("heightReference"),fill:ye("fill"),material:nr("material"),outline:ye("outline"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),shadows:ye("shadows"),distanceDisplayCondition:ye("distanceDisplayCondition")});JW.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 JW(this)};JW.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 HT=JW;var Idn=x(T(),1);var ydn=x(T(),1),s9e={FIXED:0,INERTIAL:1},Mi=Object.freeze(s9e);var Vdn=x(T(),1);function PZ(){fe.throwInstantiationError()}Object.defineProperties(PZ.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError},referenceFrame:{get:fe.throwInstantiationError}});PZ.prototype.getValue=fe.throwInstantiationError;PZ.prototype.getValueInReferenceFrame=fe.throwInstantiationError;PZ.prototype.equals=fe.throwInstantiationError;var cle=new q;PZ.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=pt.computeIcrfToCentralBodyFixedMatrix(e,cle);if(n===Mi.INERTIAL)return q.multiplyByVector(r,t,o);if(n===Mi.FIXED)return q.multiplyByVector(q.transpose(r,cle),t,o)};var Xh=PZ;function KT(e,t){this._definitionChanged=new _e,this._value=m.clone(e),this._referenceFrame=t??Mi.FIXED}Object.defineProperties(KT.prototype,{isConstant:{get:function(){return!l(this._value)||this._referenceFrame===Mi.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var a9e=new Q;KT.prototype.getValue=function(e,t){return l(e)||(e=Q.now(a9e)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};KT.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)};KT.prototype.getValueInReferenceFrame=function(e,t,n){return Xh.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};KT.prototype.equals=function(e){return this===e||e instanceof KT&&m.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Ll=KT;var kdn=x(T(),1);function jW(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties(jW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),positions:ye("positions"),width:ye("width"),height:ye("height"),heightReference:ye("heightReference"),extrudedHeight:ye("extrudedHeight"),extrudedHeightReference:ye("extrudedHeightReference"),cornerType:ye("cornerType"),granularity:ye("granularity"),fill:ye("fill"),material:nr("material"),outline:ye("outline"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),shadows:ye("shadows"),distanceDisplayCondition:ye("distanceDisplayCondition"),classificationType:ye("classificationType"),zIndex:ye("zIndex")});jW.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 jW(this)};jW.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 JT=jW;var Odn=x(T(),1);function c9e(e){return e}function l9e(e,t){return ye(e,t,c9e)}var Wl=l9e;var Qdn=x(T(),1);function QW(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties(QW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),length:ye("length"),topRadius:ye("topRadius"),bottomRadius:ye("bottomRadius"),heightReference:ye("heightReference"),fill:ye("fill"),material:nr("material"),outline:ye("outline"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),numberOfVerticalLines:ye("numberOfVerticalLines"),slices:ye("slices"),shadows:ye("shadows"),distanceDisplayCondition:ye("distanceDisplayCondition")});QW.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 QW(this)};QW.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 jT=QW;var oun=x(T(),1);function qW(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties(qW.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),semiMajorAxis:ye("semiMajorAxis"),semiMinorAxis:ye("semiMinorAxis"),height:ye("height"),heightReference:ye("heightReference"),extrudedHeight:ye("extrudedHeight"),extrudedHeightReference:ye("extrudedHeightReference"),rotation:ye("rotation"),stRotation:ye("stRotation"),granularity:ye("granularity"),fill:ye("fill"),material:nr("material"),outline:ye("outline"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),numberOfVerticalLines:ye("numberOfVerticalLines"),shadows:ye("shadows"),distanceDisplayCondition:ye("distanceDisplayCondition"),classificationType:ye("classificationType"),zIndex:ye("zIndex")});qW.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 qW(this)};qW.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 QT=qW;var uun=x(T(),1);function $W(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties($W.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),radii:ye("radii"),innerRadii:ye("innerRadii"),minimumClock:ye("minimumClock"),maximumClock:ye("maximumClock"),minimumCone:ye("minimumCone"),maximumCone:ye("maximumCone"),heightReference:ye("heightReference"),fill:ye("fill"),material:nr("material"),outline:ye("outline"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),stackPartitions:ye("stackPartitions"),slicePartitions:ye("slicePartitions"),subdivisions:ye("subdivisions"),shadows:ye("shadows"),distanceDisplayCondition:ye("distanceDisplayCondition")});$W.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 $W(this)};$W.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 qT=$W;var gun=x(T(),1);function ev(e){this._definitionChanged=new _e,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??B.EMPTY_OBJECT)}Object.defineProperties(ev.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ye("show"),text:ye("text"),font:ye("font"),style:ye("style"),scale:ye("scale"),showBackground:ye("showBackground"),backgroundColor:ye("backgroundColor"),backgroundPadding:ye("backgroundPadding"),pixelOffset:ye("pixelOffset"),eyeOffset:ye("eyeOffset"),horizontalOrigin:ye("horizontalOrigin"),verticalOrigin:ye("verticalOrigin"),heightReference:ye("heightReference"),fillColor:ye("fillColor"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth"),translucencyByDistance:ye("translucencyByDistance"),pixelOffsetScaleByDistance:ye("pixelOffsetScaleByDistance"),scaleByDistance:ye("scaleByDistance"),distanceDisplayCondition:ye("distanceDisplayCondition"),disableDepthTestDistance:ye("disableDepthTestDistance")});ev.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 ev(this)};ev.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 Nh=ev;var Hun=x(T(),1);var Wun=x(T(),1);var Sun=x(T(),1);var d9e=new m(1,1,1),u9e=m.ZERO,m9e=Pe.IDENTITY;function lle(e,t,n){this.translation=m.clone(e??u9e),this.rotation=Pe.clone(t??m9e),this.scale=m.clone(n??d9e)}lle.prototype.equals=function(e){return this===e||l(e)&&m.equals(this.translation,e.translation)&&Pe.equals(this.rotation,e.rotation)&&m.equals(this.scale,e.scale)};var hy=lle;var CJ=new hy;function tv(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(tv.prototype,{isConstant:{get:function(){return j.isConstant(this._translation)&&j.isConstant(this._rotation)&&j.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:ye("translation"),rotation:ye("rotation"),scale:ye("scale")});var h9e=new Q;tv.prototype.getValue=function(e,t){return l(e)||(e=Q.now(h9e)),l(t)||(t=new hy),t.translation=j.getValueOrClonedDefault(this._translation,e,CJ.translation,t.translation),t.rotation=j.getValueOrClonedDefault(this._rotation,e,CJ.rotation,t.rotation),t.scale=j.getValueOrClonedDefault(this._scale,e,CJ.scale,t.scale),t};tv.prototype.equals=function(e){return this===e||e instanceof tv&&j.equals(this._translation,e._translation)&&j.equals(this._rotation,e._rotation)&&j.equals(this._scale,e._scale)};var $T=tv;var wun=x(T(),1);function K0(e,t){this._propertyNames=[],this._definitionChanged=new _e,l(e)&&this.merge(e,t)}Object.defineProperties(K0.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){let e=this._propertyNames;for(let t=0,n=e.length;t{this._terrainHeight=s.height,this.definitionChanged.raiseEvent()};this._removeCallbackFunc=e.updateHeight(i,r,this._heightReference)};var I9e=new Q;NZ.prototype.getValue=function(e,t){l(e)||(e=Q.now(I9e));let n=j.getValueOrDefault(this._heightReference,e,tt.NONE),i=j.getValueOrDefault(this._extrudedHeightReference,e,tt.NONE);if(n===tt.NONE&&!ZZ(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,fle);if(!l(r)||m.equals(r,m.ZERO)||!l(o.globe))return m.clone(m.ZERO,t);if(m.equalsEpsilon(this._position,r,W.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)};NZ.prototype.isDestroyed=function(){return!1};NZ.prototype.destroy=function(){return l(this._removeEventListener)&&this._removeEventListener(),l(this._removeModeListener)&&this._removeModeListener(),l(this._removeCallbackFunc)&&this._removeCallbackFunc(),he(this)};var i_=NZ;function P9e(e,t,n,i){if(Ci.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 Mh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new i_(this._scene,s,r)}}var q0=P9e;var ple=m.ZERO,ble=new m,X9e=new m,gle=new U;function N9e(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function cu(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new N9e(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}l(Object.create)&&(cu.prototype=Object.create(Ci.prototype),cu.prototype.constructor=cu);Object.defineProperties(cu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});cu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new Gn(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,gle)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,ple,ble))),new Ft({id:t,geometry:Zc.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};cu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,gle),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,ple,ble))),new Ft({id:t,geometry:Ih.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};cu.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};cu.prototype._isHidden=function(e,t){return!l(t.dimensions)||!l(e.position)||Ci.prototype._isHidden.call(this,e,t)};cu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.dimensions.isConstant||!j.isConstant(t.outlineWidth)};cu.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(Je.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==tt.NONE?mn.ALL:void 0};cu.prototype._onEntityPropertyChanged=q0;cu.DynamicGeometryUpdater=YZ;function YZ(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(YZ.prototype=Object.create(Zi.prototype),YZ.prototype.constructor=YZ);YZ.prototype._isHidden=function(e,t,n){let i=j.getValueOrUndefined(e.position,n,X9e),o=this._options.dimensions;return!l(i)||!l(o)||Zi.prototype._isHidden.call(this,e,t,n)};YZ.prototype._setOptions=function(e,t,n){let i=j.getValueOrDefault(t.heightReference,n,tt.NONE),o=this._options;o.dimensions=j.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==tt.NONE?mn.ALL:void 0};var hv=cu;var opn=x(T(),1);function o_(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??Mi.FIXED,this._definitionChanged=new _e,this.setCallback(e,t)}Object.defineProperties(o_.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var Y9e=new Q;o_.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Y9e)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};o_.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};o_.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._callback(e,n);return Xh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};o_.prototype.equals=function(e){return this===e||e instanceof o_&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var fv=o_;var Ghi=x(T(),1);var yhi=x(T(),1);var dpn=x(T(),1);var spn=x(T(),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:Vle,setPrototypeOf:yle,isFrozen:w9e,getPrototypeOf:M9e,getOwnPropertyDescriptor:k9e}=Object,{freeze:Pl,seal:xm,create:x5}=Object,{apply:IJ,construct:PJ}=typeof Reflect<"u"&&Reflect;Pl||(Pl=function(t){return t});xm||(xm=function(t){return t});IJ||(IJ=function(t,n){for(var i=arguments.length,o=new Array(i>2?i-2:0),r=2;r1?n-1:0),o=1;o1?n-1:0),o=1;o2&&arguments[2]!==void 0?arguments[2]:T5;yle&&yle(e,null);let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(w9e(t)||(t[i]=r),o=r)}e[o]=!0}return e}function H9e(e){for(let t=0;t/gm),q9e=xm(/\$\{[\w\W]*/gm),$9e=xm(/^data-[\-\w.\u00B7-\uFFFF]+$/),eke=xm(/^aria-[\-\w]+$/),Rle=xm(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),tke=xm(/^(?:\w+script|data):/i),nke=xm(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ele=xm(/^html$/i),ike=xm(/^[a-z][.\w]*(-[.\w]+)+$/i),Zle=Object.freeze({__proto__:null,ARIA_ATTR:eke,ATTR_WHITESPACE:nke,CUSTOM_ELEMENT:ike,DATA_ATTR:$9e,DOCTYPE_NAME:Ele,ERB_EXPR:Q9e,IS_ALLOWED_URI:Rle,IS_SCRIPT_OR_DATA:tke,MUSTACHE_EXPR:j9e,TMPLIT_EXPR:q9e}),xv={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},oke=function(){return typeof window>"u"?null:window},rke=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 Gle(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:oke(),t=Sn=>Gle(Sn);if(t.version="3.3.3",t.removed=[],!e||!e.document||e.document.nodeType!==xv.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:b}=e,f=c.prototype,y=yv(f,"cloneNode"),_=yv(f,"remove"),S=yv(f,"nextSibling"),A=yv(f,"childNodes"),Z=yv(f,"parentNode");if(typeof s=="function"){let Sn=n.createElement("template");Sn.content&&Sn.content.ownerDocument&&(n=Sn.content.ownerDocument)}let V,E="",{implementation:G,createNodeIterator:v,createDocumentFragment:I,getElementsByTagName:X}=n,{importNode:N}=i,g=Cle();t.isSupported=typeof Vle=="function"&&typeof Z=="function"&&G&&G.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:C,ERB_EXPR:R,TMPLIT_EXPR:L,DATA_ATTR:P,ARIA_ATTR:Y,IS_SCRIPT_OR_DATA:O,ATTR_WHITESPACE:k,CUSTOM_ELEMENT:D}=Zle,{IS_ALLOWED_URI:w}=Zle,z=null,J=Oi({},[...Tle,...LJ,...WJ,...vJ,..._le]),ee=null,H=Oi({},[...Sle,...FJ,...Ale,...y5]),te=Object.seal(x5(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}})),$=null,pe=null,xe=Object.seal(x5(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),le=!0,Te=!0,Se=!1,Ee=!0,Ve=!1,we=!0,ke=!1,nt=!1,bt=!1,Rt=!1,He=!1,mt=!1,it=!0,rt=!1,jt="user-content-",Cn=!0,ct=!1,Wt={},sn=null,lt=Oi({},["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"]),Xn=null,pi=Oi({},["audio","video","img","source","image","track"]),Di=null,Ut=Oi({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),bo="http://www.w3.org/1998/Math/MathML",ro="http://www.w3.org/2000/svg",Fi="http://www.w3.org/1999/xhtml",zn=Fi,Dn=!1,Hi=null,Gi=Oi({},[bo,ro,Fi],EJ),er=Oi({},["mi","mo","mn","ms","mtext"]),Lr=Oi({},["annotation-xml"]),Vs=Oi({},["title","style","font","a","script"]),Wr=null,On=["application/xhtml+xml","text/html"],go="text/html",En=null,Ho=null,Fo=n.createElement("form"),sa=function(Ge){return Ge instanceof RegExp||Ge instanceof Function},Ii=function(){let Ge=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ho&&Ho===Ge)){if((!Ge||typeof Ge!="object")&&(Ge={}),Ge=mp(Ge),Wr=On.indexOf(Ge.PARSER_MEDIA_TYPE)===-1?go:Ge.PARSER_MEDIA_TYPE,En=Wr==="application/xhtml+xml"?EJ:T5,z=lu(Ge,"ALLOWED_TAGS")?Oi({},Ge.ALLOWED_TAGS,En):J,ee=lu(Ge,"ALLOWED_ATTR")?Oi({},Ge.ALLOWED_ATTR,En):H,Hi=lu(Ge,"ALLOWED_NAMESPACES")?Oi({},Ge.ALLOWED_NAMESPACES,EJ):Gi,Di=lu(Ge,"ADD_URI_SAFE_ATTR")?Oi(mp(Ut),Ge.ADD_URI_SAFE_ATTR,En):Ut,Xn=lu(Ge,"ADD_DATA_URI_TAGS")?Oi(mp(pi),Ge.ADD_DATA_URI_TAGS,En):pi,sn=lu(Ge,"FORBID_CONTENTS")?Oi({},Ge.FORBID_CONTENTS,En):lt,$=lu(Ge,"FORBID_TAGS")?Oi({},Ge.FORBID_TAGS,En):mp({}),pe=lu(Ge,"FORBID_ATTR")?Oi({},Ge.FORBID_ATTR,En):mp({}),Wt=lu(Ge,"USE_PROFILES")?Ge.USE_PROFILES:!1,le=Ge.ALLOW_ARIA_ATTR!==!1,Te=Ge.ALLOW_DATA_ATTR!==!1,Se=Ge.ALLOW_UNKNOWN_PROTOCOLS||!1,Ee=Ge.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ve=Ge.SAFE_FOR_TEMPLATES||!1,we=Ge.SAFE_FOR_XML!==!1,ke=Ge.WHOLE_DOCUMENT||!1,Rt=Ge.RETURN_DOM||!1,He=Ge.RETURN_DOM_FRAGMENT||!1,mt=Ge.RETURN_TRUSTED_TYPE||!1,bt=Ge.FORCE_BODY||!1,it=Ge.SANITIZE_DOM!==!1,rt=Ge.SANITIZE_NAMED_PROPS||!1,Cn=Ge.KEEP_CONTENT!==!1,ct=Ge.IN_PLACE||!1,w=Ge.ALLOWED_URI_REGEXP||Rle,zn=Ge.NAMESPACE||Fi,er=Ge.MATHML_TEXT_INTEGRATION_POINTS||er,Lr=Ge.HTML_INTEGRATION_POINTS||Lr,te=Ge.CUSTOM_ELEMENT_HANDLING||{},Ge.CUSTOM_ELEMENT_HANDLING&&sa(Ge.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(te.tagNameCheck=Ge.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ge.CUSTOM_ELEMENT_HANDLING&&sa(Ge.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(te.attributeNameCheck=Ge.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ge.CUSTOM_ELEMENT_HANDLING&&typeof Ge.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(te.allowCustomizedBuiltInElements=Ge.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ve&&(Te=!1),He&&(Rt=!0),Wt&&(z=Oi({},_le),ee=x5(null),Wt.html===!0&&(Oi(z,Tle),Oi(ee,Sle)),Wt.svg===!0&&(Oi(z,LJ),Oi(ee,FJ),Oi(ee,y5)),Wt.svgFilters===!0&&(Oi(z,WJ),Oi(ee,FJ),Oi(ee,y5)),Wt.mathMl===!0&&(Oi(z,vJ),Oi(ee,Ale),Oi(ee,y5))),lu(Ge,"ADD_TAGS")||(xe.tagCheck=null),lu(Ge,"ADD_ATTR")||(xe.attributeCheck=null),Ge.ADD_TAGS&&(typeof Ge.ADD_TAGS=="function"?xe.tagCheck=Ge.ADD_TAGS:(z===J&&(z=mp(z)),Oi(z,Ge.ADD_TAGS,En))),Ge.ADD_ATTR&&(typeof Ge.ADD_ATTR=="function"?xe.attributeCheck=Ge.ADD_ATTR:(ee===H&&(ee=mp(ee)),Oi(ee,Ge.ADD_ATTR,En))),Ge.ADD_URI_SAFE_ATTR&&Oi(Di,Ge.ADD_URI_SAFE_ATTR,En),Ge.FORBID_CONTENTS&&(sn===lt&&(sn=mp(sn)),Oi(sn,Ge.FORBID_CONTENTS,En)),Ge.ADD_FORBID_CONTENTS&&(sn===lt&&(sn=mp(sn)),Oi(sn,Ge.ADD_FORBID_CONTENTS,En)),Cn&&(z["#text"]=!0),ke&&Oi(z,["html","head","body"]),z.table&&(Oi(z,["tbody"]),delete $.tbody),Ge.TRUSTED_TYPES_POLICY){if(typeof Ge.TRUSTED_TYPES_POLICY.createHTML!="function")throw gv('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ge.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw gv('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');V=Ge.TRUSTED_TYPES_POLICY,E=V.createHTML("")}else V===void 0&&(V=rke(b,o)),V!==null&&typeof E=="string"&&(E=V.createHTML(""));Pl&&Pl(Ge),Ho=Ge}},Io=Oi({},[...LJ,...WJ,...K9e]),_c=Oi({},[...vJ,...J9e]),Ds=function(Ge){let Et=Z(Ge);(!Et||!Et.tagName)&&(Et={namespaceURI:zn,tagName:"template"});let pn=T5(Ge.tagName),yr=T5(Et.tagName);return Hi[Ge.namespaceURI]?Ge.namespaceURI===ro?Et.namespaceURI===Fi?pn==="svg":Et.namespaceURI===bo?pn==="svg"&&(yr==="annotation-xml"||er[yr]):!!Io[pn]:Ge.namespaceURI===bo?Et.namespaceURI===Fi?pn==="math":Et.namespaceURI===ro?pn==="math"&&Lr[yr]:!!_c[pn]:Ge.namespaceURI===Fi?Et.namespaceURI===ro&&!Lr[yr]||Et.namespaceURI===bo&&!er[yr]?!1:!_c[pn]&&(Vs[pn]||!Io[pn]):!!(Wr==="application/xhtml+xml"&&Hi[Ge.namespaceURI]):!1},Os=function(Ge){pv(t.removed,{element:Ge});try{Z(Ge).removeChild(Ge)}catch{_(Ge)}},os=function(Ge,Et){try{pv(t.removed,{attribute:Et.getAttributeNode(Ge),from:Et})}catch{pv(t.removed,{attribute:null,from:Et})}if(Et.removeAttribute(Ge),Ge==="is")if(Rt||He)try{Os(Et)}catch{}else try{Et.setAttribute(Ge,"")}catch{}},Z0=function(Ge){let Et=null,pn=null;if(bt)Ge=""+Ge;else{let Es=GJ(Ge,/^[\r\n\t ]+/);pn=Es&&Es[0]}Wr==="application/xhtml+xml"&&zn===Fi&&(Ge=' '+Ge+"");let yr=V?V.createHTML(Ge):Ge;if(zn===Fi)try{Et=new p().parseFromString(yr,Wr)}catch{}if(!Et||!Et.documentElement){Et=G.createDocument(zn,"template",null);try{Et.documentElement.innerHTML=Dn?E:yr}catch{}}let Ka=Et.body||Et.documentElement;return Ge&&pn&&Ka.insertBefore(n.createTextNode(pn),Ka.childNodes[0]||null),zn===Fi?X.call(Et,ke?"html":"body")[0]:ke?Et.documentElement:Ka},_a=function(Ge){return v.call(Ge.ownerDocument||Ge,Ge,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},Rs=function(Ge){return Ge instanceof h&&(typeof Ge.nodeName!="string"||typeof Ge.textContent!="string"||typeof Ge.removeChild!="function"||!(Ge.attributes instanceof u)||typeof Ge.removeAttribute!="function"||typeof Ge.setAttribute!="function"||typeof Ge.namespaceURI!="string"||typeof Ge.insertBefore!="function"||typeof Ge.hasChildNodes!="function")},Th=function(Ge){return typeof a=="function"&&Ge instanceof a};function Po(Sn,Ge,Et){g5(Sn,pn=>{pn.call(t,Ge,Et,Ho)})}let Yc=function(Ge){let Et=null;if(Po(g.beforeSanitizeElements,Ge,null),Rs(Ge))return Os(Ge),!0;let pn=En(Ge.nodeName);if(Po(g.uponSanitizeElement,Ge,{tagName:pn,allowedTags:z}),we&&Ge.hasChildNodes()&&!Th(Ge.firstElementChild)&&Il(/<[/\w!]/g,Ge.innerHTML)&&Il(/<[/\w!]/g,Ge.textContent)||Ge.nodeType===xv.progressingInstruction||we&&Ge.nodeType===xv.comment&&Il(/<[/\w]/g,Ge.data))return Os(Ge),!0;if(!(xe.tagCheck instanceof Function&&xe.tagCheck(pn))&&(!z[pn]||$[pn])){if(!$[pn]&&md(pn)&&(te.tagNameCheck instanceof RegExp&&Il(te.tagNameCheck,pn)||te.tagNameCheck instanceof Function&&te.tagNameCheck(pn)))return!1;if(Cn&&!sn[pn]){let yr=Z(Ge)||Ge.parentNode,Ka=A(Ge)||Ge.childNodes;if(Ka&&yr){let Es=Ka.length;for(let wc=Es-1;wc>=0;--wc){let _h=y(Ka[wc],!0);_h.__removalCount=(Ge.__removalCount||0)+1,yr.insertBefore(_h,S(Ge))}}}return Os(Ge),!0}return Ge instanceof c&&!Ds(Ge)||(pn==="noscript"||pn==="noembed"||pn==="noframes")&&Il(/<\/no(script|embed|frames)/i,Ge.innerHTML)?(Os(Ge),!0):(Ve&&Ge.nodeType===xv.text&&(Et=Ge.textContent,g5([C,R,L],yr=>{Et=bv(Et,yr," ")}),Ge.textContent!==Et&&(pv(t.removed,{element:Ge.cloneNode()}),Ge.textContent=Et)),Po(g.afterSanitizeElements,Ge,null),!1)},ud=function(Ge,Et,pn){if(pe[Et]||it&&(Et==="id"||Et==="name")&&(pn in n||pn in Fo))return!1;if(!(Te&&!pe[Et]&&Il(P,Et))){if(!(le&&Il(Y,Et))){if(!(xe.attributeCheck instanceof Function&&xe.attributeCheck(Et,Ge))){if(!ee[Et]||pe[Et]){if(!(md(Ge)&&(te.tagNameCheck instanceof RegExp&&Il(te.tagNameCheck,Ge)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Ge))&&(te.attributeNameCheck instanceof RegExp&&Il(te.attributeNameCheck,Et)||te.attributeNameCheck instanceof Function&&te.attributeNameCheck(Et,Ge))||Et==="is"&&te.allowCustomizedBuiltInElements&&(te.tagNameCheck instanceof RegExp&&Il(te.tagNameCheck,pn)||te.tagNameCheck instanceof Function&&te.tagNameCheck(pn))))return!1}else if(!Di[Et]){if(!Il(w,bv(pn,k,""))){if(!((Et==="src"||Et==="xlink:href"||Et==="href")&&Ge!=="script"&&O9e(pn,"data:")===0&&Xn[Ge])){if(!(Se&&!Il(O,bv(pn,k,"")))){if(pn)return!1}}}}}}}return!0},md=function(Ge){return Ge!=="annotation-xml"&&GJ(Ge,D)},Uo=function(Ge){Po(g.beforeSanitizeAttributes,Ge,null);let{attributes:Et}=Ge;if(!Et||Rs(Ge))return;let pn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ee,forceKeepAttr:void 0},yr=Et.length;for(;yr--;){let Ka=Et[yr],{name:Es,namespaceURI:wc,value:_h}=Ka,qf=En(Es),eZ=_h,Bs=Es==="value"?eZ:B9e(eZ);if(pn.attrName=qf,pn.attrValue=Bs,pn.keepAttr=!0,pn.forceKeepAttr=void 0,Po(g.uponSanitizeAttribute,Ge,pn),Bs=pn.attrValue,rt&&(qf==="id"||qf==="name")&&(os(Es,Ge),Bs=jt+Bs),we&&Il(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Bs)){os(Es,Ge);continue}if(qf==="attributename"&&GJ(Bs,"href")){os(Es,Ge);continue}if(pn.forceKeepAttr)continue;if(!pn.keepAttr){os(Es,Ge);continue}if(!Ee&&Il(/\/>/i,Bs)){os(Es,Ge);continue}Ve&&g5([C,R,L],ZR=>{Bs=bv(Bs,ZR," ")});let Qk=En(Ge.nodeName);if(!ud(Qk,qf,Bs)){os(Es,Ge);continue}if(V&&typeof b=="object"&&typeof b.getAttributeType=="function"&&!wc)switch(b.getAttributeType(Qk,qf)){case"TrustedHTML":{Bs=V.createHTML(Bs);break}case"TrustedScriptURL":{Bs=V.createScriptURL(Bs);break}}if(Bs!==eZ)try{wc?Ge.setAttributeNS(wc,Es,Bs):Ge.setAttribute(Es,Bs),Rs(Ge)?Os(Ge):xle(t.removed)}catch{os(Es,Ge)}}Po(g.afterSanitizeAttributes,Ge,null)},Qd=function Sn(Ge){let Et=null,pn=_a(Ge);for(Po(g.beforeSanitizeShadowDOM,Ge,null);Et=pn.nextNode();)Po(g.uponSanitizeShadowNode,Et,null),Yc(Et),Uo(Et),Et.content instanceof r&&Sn(Et.content);Po(g.afterSanitizeShadowDOM,Ge,null)};return t.sanitize=function(Sn){let Ge=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Et=null,pn=null,yr=null,Ka=null;if(Dn=!Sn,Dn&&(Sn=""),typeof Sn!="string"&&!Th(Sn))if(typeof Sn.toString=="function"){if(Sn=Sn.toString(),typeof Sn!="string")throw gv("dirty is not a string, aborting")}else throw gv("toString is not a function");if(!t.isSupported)return Sn;if(nt||Ii(Ge),t.removed=[],typeof Sn=="string"&&(ct=!1),ct){if(Sn.nodeName){let _h=En(Sn.nodeName);if(!z[_h]||$[_h])throw gv("root node is forbidden and cannot be sanitized in-place")}}else if(Sn instanceof a)Et=Z0(""),pn=Et.ownerDocument.importNode(Sn,!0),pn.nodeType===xv.element&&pn.nodeName==="BODY"||pn.nodeName==="HTML"?Et=pn:Et.appendChild(pn);else{if(!Rt&&!Ve&&!ke&&Sn.indexOf("<")===-1)return V&&mt?V.createHTML(Sn):Sn;if(Et=Z0(Sn),!Et)return Rt?null:mt?E:""}Et&&bt&&Os(Et.firstChild);let Es=_a(ct?Sn:Et);for(;yr=Es.nextNode();)Yc(yr),Uo(yr),yr.content instanceof r&&Qd(yr.content);if(ct)return Sn;if(Rt){if(He)for(Ka=I.call(Et.ownerDocument);Et.firstChild;)Ka.appendChild(Et.firstChild);else Ka=Et;return(ee.shadowroot||ee.shadowrootmode)&&(Ka=N.call(i,Ka,!0)),Ka}let wc=ke?Et.outerHTML:Et.innerHTML;return ke&&z["!doctype"]&&Et.ownerDocument&&Et.ownerDocument.doctype&&Et.ownerDocument.doctype.name&&Il(Ele,Et.ownerDocument.doctype.name)&&(wc=" `+wc),Ve&&g5([C,R,L],_h=>{wc=bv(wc,_h," ")}),V&&mt?V.createHTML(wc):wc},t.setConfig=function(){let Sn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ii(Sn),nt=!0},t.clearConfig=function(){Ho=null,nt=!1},t.isValidAttribute=function(Sn,Ge,Et){Ho||Ii({});let pn=En(Sn),yr=En(Ge);return ud(pn,yr,Et)},t.addHook=function(Sn,Ge){typeof Ge=="function"&&pv(g[Sn],Ge)},t.removeHook=function(Sn,Ge){if(Ge!==void 0){let Et=U9e(g[Sn],Ge);return Et===-1?void 0:D9e(g[Sn],Et,1)[0]}return xle(g[Sn])},t.removeHooks=function(Sn){g[Sn]=[]},t.removeAllHooks=function(){g=Cle()},t}var Lle=Gle();var ske=0,XJ={};function hp(e,t){let n,i=e;l(XJ[i])?n=XJ[i]:(n=ske++,XJ[i]=n),t=t??!1,this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(hp.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=Lle.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{u[h]=void 0});for(let h=r;h0||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 cke(e,t){if(kh.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),l(e._specularEnvironmentMaps)){let n=new kh(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}Tv.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&&(cke(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)};Tv.prototype.isDestroyed=function(){return!1};Tv.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),he(this)};var s_=Tv;var Opn=x(T(),1),wJ=x($d(),1);var Xpn=x(T(),1);var YJ,Wle="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzNDNmZDVhOC0xMDFjLTQ4YmUtYmQ1YS0zYjdjNTFjMzVlYjMiLCJpZCI6MjU5LCJpYXQiOjE3NzQ0MTY4MDN9.aymrLJz62c7X0uDN4EBrgR6wWDlkoUAhlwzs8e5Hb2U",_5={};_5.defaultAccessToken=Wle;_5.defaultServer=new We({url:"https://api.cesium.com/"});_5.getDefaultTokenCredit=function(e){if(e===Wle){if(!l(YJ)){let t=` This application is using Cesium's default ion access token. Please assign Cesium.Ion.defaultAccessToken with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at https://cesium.com.`;YJ=new yt(t,!0)}return YJ}};var Uh=_5;function Nl(e,t){let n,i=e.externalType,o=l(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:lke};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new ue("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");We.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new wJ.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)&&(Nl.prototype=Object.create(We.prototype),Nl.prototype.constructor=Nl);Nl.fromAssetId=function(e,t){let n=Nl._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new Nl(i,n)})};Object.defineProperties(Nl.prototype,{credits:{get:function(){return l(this._ionRoot)?this._ionRoot.credits:l(this._credits)?this._credits:(this._credits=Nl.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});Nl.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(yt.getIonCredit),i=Uh.getDefaultTokenCredit(t.queryParameters.access_token);return l(i)&&n.push(yt.clone(i)),n};Nl.prototype.clone=function(e){let t=this._ionRoot??this;return l(e)||(e=new Nl(t._ionEndpoint,t._ionEndpointResource)),e=We.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};Nl.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},l(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return We.prototype.fetchImage.call(this,e)};Nl.prototype._makeRequest=function(e){return this._isExternal||new wJ.default(this.url).authority()!==this._ionEndpointDomain?We.prototype._makeRequest.call(this,e):(e.headers=vle(e.headers),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,We.prototype._makeRequest.call(this,e))};Nl._createEndpointResource=function(e,t){t=t??B.EMPTY_OBJECT;let n=t.server??Uh.defaultServer,i=t.accessToken??Uh.defaultAccessToken;n=We.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=vle(o.headers),n.getDerivedResource(o)};function vle(e={}){return e["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e["X-Cesium-Client-Version"]=CESIUM_VERSION),e}function lke(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 ds=Nl;var zpn=x(T(),1);function fp(e){e=e??0,this._array=new Array(e),this._length=e}Object.defineProperties(fp.prototype,{length:{get:function(){return this._length},set:function(e){let t=this._array,n=this._length;if(et.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});fp.prototype.get=function(e){return this._array[e]};fp.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};fp.prototype.peek=function(){return this._array[this._length-1]};fp.prototype.push=function(e){let t=this.length++;this._array[t]=e};fp.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};fp.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};fp.prototype.resize=function(e){this.length=e};fp.prototype.trim=function(e){e=e??this._length,this._array.length=e};var Yl=fp;var jpn=x(T(),1);var $0={X:0,Y:1,Z:2};$0.Y_UP_TO_Z_UP=F.fromRotationTranslation(q.fromArray([1,0,0,0,0,1,0,-1,0]));$0.Z_UP_TO_Y_UP=F.fromRotationTranslation(q.fromArray([1,0,0,0,0,-1,0,1,0]));$0.X_UP_TO_Z_UP=F.fromRotationTranslation(q.fromArray([0,0,1,0,1,0,-1,0,0]));$0.Z_UP_TO_X_UP=F.fromRotationTranslation(q.fromArray([0,0,-1,0,1,0,1,0,0]));$0.X_UP_TO_Y_UP=F.fromRotationTranslation(q.fromArray([0,1,0,-1,0,0,0,0,1]));$0.Y_UP_TO_X_UP=F.fromRotationTranslation(q.fromArray([0,-1,0,1,0,0,0,0,1]));$0.fromName=function(e){return $0[e]};var ao=Object.freeze($0);var Adi=x(T(),1);var $pn=x(T(),1);function Fle(e){e=e??B.EMPTY_OBJECT,this._metadata=e.metadata}Object.defineProperties(Fle.prototype,{metadata:{get:function(){return this._metadata}}});var a_=Fle;var tsi=x(T(),1);var m0n=x(T(),1);var r0n=x(T(),1);var n0n=x(T(),1);function fy(e,t,n){return t=t??0,n=n??e.byteLength-t,e=e.subarray(t,t+n),fy.decode(e)}fy.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)};fy.decodeWithFromCharCode=function(e){let t="",n=dke(e),i=n.length;for(let o=0;o>10)+55296,(r&1023)+56320))}return t};function _v(e,t,n){return t<=e&&e<=n}function dke(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c0){let o=Math.min(t,vt.maximumTextureSize),r=Math.ceil(t/vt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,d=c*.5;n=new M(o,r),i=new se(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(jc.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}}});jc.DEFAULT_COLOR_VALUE=U.WHITE;jc.DEFAULT_SHOW_VALUE=!0;function Ile(e){let t=e._textureDimensions;return t.x*t.y*4}function Ple(e){if(!l(e._batchValues)){let t=Ile(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function Xle(e){if(!l(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}jc.prototype.setShow=function(e,t){if(t&&!l(this._showAlphaProperties))return;let n=Xle(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=Ple(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};jc.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n0){let i=e._pickIds,o=Ile(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c0;){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],b=s[t];for(let f=0;f0?(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} ${Pke(i)}${s}`}};function Yle(e,t){return e=Oe.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 Xke(e,t){let n=`texture(${t}`,i=0,o=e.indexOf(n,i),r;for(;o>-1;){let s=0;for(let d=o;d0?(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 Nke(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===Ad.HIGHLIGHT)return 0;if(n===Ad.REPLACE)return 1;if(n===Ad.MIX)return W.clamp(i,W.EPSILON4,1)}Bo.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return Gt(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 Nke(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};Bo.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var py={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};Bo.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=Yke(this);for(let d=t;d>>Ht.SKIP_LOD_BIT_SHIFT}function zke(e){let t=Be(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=rn.ALPHA_BLEND,t.stencilTest=Ht.setCesium3DTileBit(),t.stencilMask=Ht.CESIUM_3D_TILE_MASK,Ue.fromCache(t)}function Hke(e){let t=Be(e,!0);return t.stencilTest=Ht.setCesium3DTileBit(),t.stencilMask=Ht.CESIUM_3D_TILE_MASK,Ue.fromCache(t)}Bo.prototype.update=function(e,t){this._batchTexture.update(e,t)};Bo.prototype.isDestroyed=function(){return!1};Bo.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),he(this)};var Oh=Bo;var vgn=x(T(),1);var Sbn=x(T(),1);function Kke(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var pp=Kke;var Tgn=x(T(),1);var Zbn=x(T(),1),wZ=`in vec3 position; in float a_batchId; uniform mat4 u_modifiedModelViewProjection; void main() { gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0)); } `;var Ebn=x(T(),1);function Sm(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(Sm.prototype,{show:{get:function(){return this._content.batchTable.getShow(this._batchId)},set:function(e){this._content.batchTable.setShow(this._batchId,e)}},color:{get:function(){return l(this._color)||(this._color=new U),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},polylinePositions:{get:function(){if(l(this._content.getPolylinePositions))return this._content.getPolylinePositions(this._batchId)}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},featureId:{get:function(){return this._batchId}},pickId:{get:function(){return this._content.batchTable.getPickColor(this._batchId)}}});Sm.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};Sm.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};Sm.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};Sm.getPropertyInherited=function(e,t,n){let i=e.batchTable;if(l(i)){if(i.hasPropertyBySemantic(t,n))return i.getPropertyBySemantic(t,n);if(i.hasProperty(t,n))return i.getProperty(t,n)}let o=e.metadata;if(l(o)){if(o.hasPropertyBySemantic(n))return o.getPropertyBySemantic(n);if(o.hasProperty(n))return o.getProperty(n)}let r=e.tile,s=r.metadata;if(l(s)){if(s.hasPropertyBySemantic(n))return s.getPropertyBySemantic(n);if(s.hasProperty(n))return s.getProperty(n)}let a;if(l(r.implicitSubtree)&&(a=r.implicitSubtree.metadata),l(a)){if(a.hasPropertyBySemantic(n))return a.getPropertyBySemantic(n);if(a.hasProperty(n))return a.getProperty(n)}let c=l(e.group)?e.group.metadata:void 0;if(l(c)){if(c.hasPropertyBySemantic(n))return c.getPropertyBySemantic(n);if(c.hasProperty(n))return c.getProperty(n)}let d=e.tileset.metadata;if(l(d)){if(d.hasPropertyBySemantic(n))return d.getPropertyBySemantic(n);if(d.hasProperty(n))return d.getProperty(n)}};Sm.prototype.getPropertyInherited=function(e){return Sm.getPropertyInherited(this._content,this._batchId,e)};Sm.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};Sm.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};Sm.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};Sm.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var Ga=Sm;var Obn=x(T(),1);var Wbn=x(T(),1),UJ=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)})}},DJ=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)})}},Zd=class e{static get version(){return"1.4.0"}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.index0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.lengthr.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=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":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});Zd.max_unop_len=Zd.getMaxKeyLen(Zd.unary_ops);Zd.max_binop_len=Zd.getMaxKeyLen(Zd.binary_ops);var by=e=>new Zd(e).parse(),jke=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(Zd).filter(e=>!jke.includes(e)&&by[e]===void 0).forEach(e=>{by[e]=Zd[e]});by.Jsep=Zd;var Qke="ConditionalExpression",qke={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:Qke,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 :")}})}};by.plugins.register(qke);var Fbn=x(T(),1),$ke={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},Vt=Object.freeze($ke);function Bh(e,t){this._expression=e,e=mUe(e,t),e=fUe(hUe(e)),by.addBinaryOp("=~",0),by.addBinaryOp("!~",0);let n;try{n=by(e)}catch(i){throw new ue(i)}this._runtimeAst=Bi(this,n)}Object.defineProperties(Bh.prototype,{expression:{get:function(){return this._expression}}});var Un={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new M],cartesian3Array:[new m],cartesian4Array:[new se],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 se),this.cartesian4Array[this.cartesian4Index++]}};Bh.prototype.evaluate=function(e,t){Un.reset();let n=this._runtimeAst.evaluate(e);return t instanceof U&&n instanceof se?U.fromCartesian4(n,t):n instanceof M||n instanceof m||n instanceof se?n.clone(t):n};Bh.prototype.evaluateColor=function(e,t){Un.reset();let n=this._runtimeAst.evaluate(e);return U.fromCartesian4(n,t)};Bh.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e} { return ${o}; } `,o};Bh.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};Bh.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=["!","-","+"],kle=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],Cv=/\${(.*?)}/g,tUe=/\\/g,nUe="@#%",iUe=/@#%/g,Z5=new U,C5={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(W.toRadians),degrees:La(W.toDegrees),sign:La(W.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(sUe),fract:La(oUe),length:aUe,normalize:cUe},V5={atan2:S5(Math.atan2,!1),pow:S5(Math.pow,!1),min:S5(Math.min,!0),max:S5(Math.max,!0),distance:lUe,dot:dUe,cross:uUe},zJ={clamp:Ule(W.clamp,!0),mix:Ule(W.lerp,!0)};function oUe(e){return e-Math.floor(e)}function rUe(e){return Math.pow(2,e)}function sUe(e){return W.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),Un.getCartesian2());if(n instanceof m)return m.fromElements(e(n.x),e(n.y),e(n.z),Un.getCartesian3());if(n instanceof se)return se.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Un.getCartesian4());throw new ue(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function S5(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),Un.getCartesian2());if(i instanceof m)return m.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),Un.getCartesian3());if(i instanceof se)return se.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),Un.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),Un.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),Un.getCartesian3());if(i instanceof se&&o instanceof se)return se.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),e(i.w,o.w),Un.getCartesian4());throw new ue(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function Ule(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),Un.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),Un.getCartesian3());if(i instanceof se&&o instanceof se)return se.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),Un.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),Un.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),Un.getCartesian3());if(i instanceof se&&o instanceof se&&r instanceof se)return se.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),Un.getCartesian4());throw new ue(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function aUe(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 se)return se.magnitude(t);throw new ue(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function cUe(e,t){if(typeof t=="number")return 1;if(t instanceof M)return M.normalize(t,Un.getCartesian2());if(t instanceof m)return m.normalize(t,Un.getCartesian3());if(t instanceof se)return se.normalize(t,Un.getCartesian4());throw new ue(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function lUe(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 se&&n instanceof se)return se.distance(t,n);throw new ue(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function dUe(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 se&&n instanceof se)return se.dot(t,n);throw new ue(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function uUe(e,t,n){if(t instanceof m&&n instanceof m)return m.cross(t,n,Un.getCartesian3());throw new ue(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function It(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 mUe(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 hUe(e){return e.replace(tUe,nUe)}function BJ(e){return e.replace(iUe,"\\")}function fUe(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o=0&&r=0?new It(Vt.VARIABLE_IN_STRING,e.value):new It(Vt.LITERAL_STRING,BJ(e.value))}function bUe(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 ue(`${o} is not a function.`);return i===0?o==="test"?new It(Vt.LITERAL_BOOLEAN,!1):new It(Vt.LITERAL_NULL,null):(s=Bi(e,c),a=Bi(e,n[0]),new It(Vt.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=Bi(e,c),new It(Vt.FUNCTION_CALL,o,r);throw new ue(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new It(Vt.LITERAL_COLOR,o);if(r=Bi(e,n[0]),l(n[1])){let c=Bi(e,n[1]);return new It(Vt.LITERAL_COLOR,o,[r,c])}return new It(Vt.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new ue(`${o} requires three arguments.`);return r=[Bi(e,n[0]),Bi(e,n[1]),Bi(e,n[2])],new It(Vt.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new ue(`${o} requires four arguments.`);return r=[Bi(e,n[0]),Bi(e,n[1]),Bi(e,n[2]),Bi(e,n[3])],new It(Vt.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c1)throw new ue(`${o} requires exactly one argument.`);return r=Bi(e,n[0]),new It(Vt.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new ue(`${o} does not take any argument.`);return new It(Vt.UNARY,o)}else if(l(C5[o])){if(i!==1)throw new ue(`${o} requires exactly one argument.`);return r=Bi(e,n[0]),new It(Vt.UNARY,o,r)}else if(l(V5[o])){if(i!==2)throw new ue(`${o} requires exactly two arguments.`);return s=Bi(e,n[0]),a=Bi(e,n[1]),new It(Vt.BINARY,o,s,a)}else if(l(zJ[o])){if(i!==3)throw new ue(`${o} requires exactly three arguments.`);s=Bi(e,n[0]),a=Bi(e,n[1]);let c=Bi(e,n[2]);return new It(Vt.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new It(Vt.LITERAL_BOOLEAN,!1):(r=Bi(e,n[0]),new It(Vt.UNARY,o,r));if(o==="Number")return i===0?new It(Vt.LITERAL_NUMBER,0):(r=Bi(e,n[0]),new It(Vt.UNARY,o,r));if(o==="String")return i===0?new It(Vt.LITERAL_STRING,""):(r=Bi(e,n[0]),new It(Vt.UNARY,o,r));if(o==="regExp")return gUe(e,t)}}throw new ue(`Unexpected function call "${o}".`)}function gUe(e,t){let n=t.arguments;if(n.length===0)return new It(Vt.LITERAL_REGEX,new RegExp);let i=Bi(e,n[0]),o;if(n.length>1){let r=Bi(e,n[1]);if(OJ(i)&&OJ(r)){try{o=new RegExp(BJ(String(i._value)),r._value)}catch(s){throw new ue(s)}return new It(Vt.LITERAL_REGEX,o)}return new It(Vt.REGEX,i,r)}if(OJ(i)){try{o=new RegExp(BJ(String(i._value)))}catch(r){throw new ue(r)}return new It(Vt.LITERAL_REGEX,o)}return new It(Vt.REGEX,i)}function yUe(e){if(SUe(e.name)){let t=AUe(e.name);return t.substr(0,8)==="tiles3d_"?new It(Vt.BUILTIN_VARIABLE,t):new It(Vt.VARIABLE,t)}else{if(e.name==="NaN")return new It(Vt.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new It(Vt.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new It(Vt.LITERAL_UNDEFINED,void 0)}throw new ue(`${e.name} is not defined.`)}function xUe(e){let t=e.property.name;if(t==="PI")return new It(Vt.LITERAL_NUMBER,Math.PI);if(t==="E")return new It(Vt.LITERAL_NUMBER,Math.E)}function TUe(e){if(e.property.name==="POSITIVE_INFINITY")return new It(Vt.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function _Ue(e,t){if(t.object.name==="Math")return xUe(t);if(t.object.name==="Number")return TUe(t);let n,i=Bi(e,t.object);return t.computed?(n=Bi(e,t.property),new It(Vt.MEMBER,"brackets",i,n)):(n=new It(Vt.LITERAL_STRING,t.property.name),new It(Vt.MEMBER,"dot",i,n))}function OJ(e){return e._type>=Vt.LITERAL_NULL}function SUe(e){return e.substr(0,4)==="czm_"}function AUe(e){return e.substr(4)}function Bi(e,t){let n,i,o,r;if(t.type==="Literal")n=pUe(t);else if(t.type==="CallExpression")n=bUe(e,t);else if(t.type==="Identifier")n=yUe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=Bi(e,t.argument);if(eUe.indexOf(i)>-1)n=new It(Vt.UNARY,i,s);else throw new ue(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=Bi(e,t.left),r=Bi(e,t.right),kle.indexOf(i)>-1)n=new It(Vt.BINARY,i,o,r);else throw new ue(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=Bi(e,t.left),r=Bi(e,t.right),kle.indexOf(i)>-1&&(n=new It(Vt.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=Bi(e,t.test);o=Bi(e,t.consequent),r=Bi(e,t.alternate),n=new It(Vt.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=_Ue(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a"?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(V5[e._value])&&(e.evaluate=RUe(e._value)):e._type===Vt.TERNARY?e.evaluate=EUe(e._value):e._type===Vt.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===Vt.ARRAY?e.evaluate=e._evaluateArray:e._type===Vt.VARIABLE?e.evaluate=e._evaluateVariable:e._type===Vt.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===Vt.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===Vt.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===Vt.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===Vt.REGEX?e.evaluate=e._evaluateRegExp:e._type===Vt.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=CUe):e.evaluate=e._evaluateLiteral}function CUe(e){return l(e)?e.content.tileset.timeSinceLoad:0}function VUe(e){let t=C5[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function RUe(e){let t=V5[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function EUe(e){let t=zJ[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 R5(e,t){if(l(e))return e.getPropertyInherited(t)}It.prototype._evaluateLiteral=function(){return this._value};It.prototype._evaluateLiteralColor=function(e){let t=Z5,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 se.fromColor(t,Un.getCartesian4())};It.prototype._evaluateLiteralVector=function(e){let t=Un.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a1)throw new ue(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new ue(`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,Un.getCartesian2());if(n==="vec3")return m.fromArray(t,0,Un.getCartesian3());if(n==="vec4")return se.fromArray(t,0,Un.getCartesian4())};It.prototype._evaluateLiteralString=function(){return this._value};It.prototype._evaluateVariableString=function(e){let t=this._value,n=Cv.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=R5(e,o);l(r)||(r=""),t=t.replace(i,r),Cv.lastIndex+=r.length-i.length,n=Cv.exec(t)}return t};It.prototype._evaluateVariable=function(e){return R5(e,this._value)};function l_(e){return e._value==="feature"}It.prototype._evaluateMemberDot=function(e){if(l_(this._left))return R5(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 se){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]};It.prototype._evaluateMemberBrackets=function(e){if(l_(this._left))return R5(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 se){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]};It.prototype._evaluateArray=function(e){let t=[];for(let n=0;n" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};It.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ue(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};It.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ue(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ue(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};It.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ue(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ue(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};It.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,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.add(t,n,Un.getCartesian3());if(n instanceof se&&t instanceof se)return se.add(t,n,Un.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new ue(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};It.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,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.subtract(t,n,Un.getCartesian3());if(n instanceof se&&t instanceof se)return se.subtract(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new ue(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};It.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,Un.getCartesian2());if(n instanceof M&&typeof t=="number")return M.multiplyByScalar(n,t,Un.getCartesian2());if(t instanceof M&&typeof n=="number")return M.multiplyByScalar(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.multiplyComponents(t,n,Un.getCartesian3());if(n instanceof m&&typeof t=="number")return m.multiplyByScalar(n,t,Un.getCartesian3());if(t instanceof m&&typeof n=="number")return m.multiplyByScalar(t,n,Un.getCartesian3());if(n instanceof se&&t instanceof se)return se.multiplyComponents(t,n,Un.getCartesian4());if(n instanceof se&&typeof t=="number")return se.multiplyByScalar(n,t,Un.getCartesian4());if(t instanceof se&&typeof n=="number")return se.multiplyByScalar(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new ue(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};It.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,Un.getCartesian2());if(t instanceof M&&typeof n=="number")return M.divideByScalar(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.divideComponents(t,n,Un.getCartesian3());if(t instanceof m&&typeof n=="number")return m.divideByScalar(t,n,Un.getCartesian3());if(n instanceof se&&t instanceof se)return se.divideComponents(t,n,Un.getCartesian4());if(t instanceof se&&typeof n=="number")return se.divideByScalar(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new ue(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};It.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,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Un.getCartesian3());if(n instanceof se&&t instanceof se)return se.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new ue(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};It.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 se&&t instanceof se?t.equals(n):t===n};It.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 se&&t instanceof se?!t.equals(n):t!==n};It.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new ue(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};It.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};It.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};It.prototype._evaluateIsExactClass=function(e){return l(e)?e.isExactClass(this._left.evaluate(e)):!1};It.prototype._evaluateIsClass=function(e){return l(e)?e.isClass(this._left.evaluate(e)):!1};It.prototype._evaluateGetExactClassName=function(e){if(l(e))return e.getExactClassName()};It.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};It.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};It.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};It.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 ue(o)}return i};It.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ue(`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)};It.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 ue(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};It.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 ue(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};It.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ue(`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};It.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof M||t instanceof m||t instanceof se)return String(t);throw new ue(`Unexpected function call "${this._value}".`)};function Dle(e){let t=e._left,n=t.length;for(let a=0;a1){let p=d[0],b=d[1];return b!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${b})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(c==="rgb")return i=Ole(this),l(i)?A5(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=Ole(this),l(i)?A5(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(c==="hsl")return i=Dle(this),l(i)?A5(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(c==="hsla")return i=Dle(this),l(i)?(i.alpha!==1&&(t.translucent=!0),A5(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case Vt.LITERAL_VECTOR:u=o.length,h=`${c}(`;for(let p=0;p0;){let u=t.pop();if(U.equals(u.color,a.color))d=HJ(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=HJ(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 KJ(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let d=0;d0;){let h=t.pop();if(U.equals(h.color,r.color))d=KJ(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=KJ(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 wUe(e,t){return t.color.toRgba()-e.color.toRgba()}function MUe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s=y&&s{e.isDestroyed()||(e._error=f)}):void 0}}function n5e(e){l(e._primitive)||(e._primitive=new u_({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)}du.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};du.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};du.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};du.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};du.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=t5e(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)};du.prototype.isDestroyed=function(){return!1};du.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var nb=du;function bp(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,r5e(this,i,o)}Object.defineProperties(bp.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 i5e(e){return function(t,n){l(e._geometries)&&e._geometries.updateCommands(t,n)}}function o5e(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 ue("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;s0)for(i=new Uint16Array(c),s=0;s0)for(o=new Uint16Array(d),s=0;s0)for(r=new Uint16Array(u),s=0;s0&&(b=Zr(i,n,d),n+=d,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let y=h.BOXES_LENGTH??0,_=h.CYLINDERS_LENGTH??0,S=h.ELLIPSOIDS_LENGTH??0,A=h.SPHERES_LENGTH??0,Z=y+_+S+A,V=new Oh(e,Z,b,f,i5e(e));if(e._batchTable=V,Z===0)return;let E=e.tile.computedTransform,G;l(h.RTC_CENTER)&&(G=m.unpack(h.RTC_CENTER),F.multiplyByPoint(E,G,G));let v=o5e(h,p);if(y>0||_>0||S>0||A>0){let I,X,N,g;if(y>0){let C=p.byteOffset+h.BOXES.byteOffset;I=new Float32Array(p.buffer,C,nb.packedBoxLength*y)}if(_>0){let C=p.byteOffset+h.CYLINDERS.byteOffset;X=new Float32Array(p.buffer,C,nb.packedCylinderLength*_)}if(S>0){let C=p.byteOffset+h.ELLIPSOIDS.byteOffset;N=new Float32Array(p.buffer,C,nb.packedEllipsoidLength*S)}if(A>0){let C=p.byteOffset+h.SPHERES.byteOffset;g=new Float32Array(p.buffer,C,nb.packedSphereLength*A)}return e._geometries=new nb({boxes:I,boxBatchIds:v.boxes,cylinders:X,cylinderBatchIds:v.cylinders,ellipsoids:N,ellipsoidBatchIds:v.ellipsoids,spheres:g,sphereBatchIds:v.spheres,center:G,modelMatrix:E,batchTable:V,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function jle(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}}bp.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};bp.prototype.getFeature=function(e){return jle(this),this._features[e]};bp.prototype.applyDebugSettings=function(e,t){l(this._geometries)&&this._geometries.applyDebugSettings(e,t)};bp.prototype.applyStyle=function(e){jle(this),l(this._geometries)&&this._geometries.applyStyle(e,this._features)};bp.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)};bp.prototype.pick=function(e,t,n){};bp.prototype.isDestroyed=function(){return!1};bp.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};var Vv=bp;var IVn=x(T(),1);var Ogn=x(T(),1);var JJ={};JJ.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),Qle(i,o,r,s);return c};JJ.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>>0,jJ=2*h_+1,yy=4,ede=[],tde=[],c5e=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],xy=1,kZ=2,E5=[xy,0,0,xy|kZ];function vs(e){if(!dn.supportsBigInt())throw new ue("S2 required BigInt support");this._cellId=e,this._level=vs.getLevel(e)}vs.fromToken=function(e){return new vs(vs.getIdFromToken(e))};vs.isValidId=function(e){return!(e<=0||e>>BigInt(jJ)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};vs.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?vs.isValidId(vs.getIdFromToken(e)):!1};vs.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};vs.getTokenFromId=function(e){let t=Math.floor(y5e(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};vs.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return h_-(t>>1)};vs.prototype.getChild=function(e){let t=ode(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new vs(n)};vs.prototype.getParent=function(){let e=ode(this._cellId)<>1&1;return ide(i[0],o[0][r^n&1],o[1][r])}function u5e(e,t){let n=nde(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 nde(e){ede.length===0&&p5e();let t=Number(e>>BigInt(jJ)),n=t&xy,i=(1<=0;s--){let c=(1<<2*(s===7?h_-7*yy:yy))-1;n+=Number(e>>BigInt(s*2*yy+1)&BigInt(c))<<2,n=tde[n];let d=s*yy;o+=n>>yy+2<>2&i)<=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function qle(e){return 1/a5e*e}function h5e(e,t){let n=[[],[]],i=f5e(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=G5($le(r)),n[o][1]=G5($le(s))}return n}function f5e(e){return 1<>>0}function $le(e){return 1/s5e*e}function Ty(e,t,n,i,o,r){if(e===yy){let s=(t<>1),n+(s[0]&1),i,o,r^E5[0]),Ty(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^E5[1]),Ty(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^E5[2]),Ty(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^E5[3])}}function p5e(){Ty(0,0,0,0,0,0),Ty(0,0,0,xy,0,xy),Ty(0,0,0,kZ,0,kZ),Ty(0,0,0,xy|kZ,0,xy|kZ)}function ode(e){return e&~e+BigInt(1)}function b5e(e){return BigInt(1)<>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(QJ.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});QJ.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 UZ=QJ;var ayn=x(T(),1);function ob(e){e=e??B.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(ob.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});ob.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};ob.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};ob.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};ob.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};ob.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};ob.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};ob.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var DZ=ob;var lyn=x(T(),1);var L5={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};L5.getBranchingFactor=function(e){switch(e){case L5.OCTREE:return 8;case L5.QUADTREE:return 4}};var Fs=Object.freeze(L5);var xyn=x(T(),1);var fyn=x(T(),1);function tc(){}Object.defineProperties(tc.prototype,{class:{get:function(){fe.throwInstantiationError()}}});tc.prototype.hasProperty=function(e){fe.throwInstantiationError()};tc.prototype.hasPropertyBySemantic=function(e){fe.throwInstantiationError()};tc.prototype.getPropertyIds=function(e){fe.throwInstantiationError()};tc.prototype.getProperty=function(e){fe.throwInstantiationError()};tc.prototype.setProperty=function(e,t){fe.throwInstantiationError()};tc.prototype.getPropertyBySemantic=function(e){fe.throwInstantiationError()};tc.prototype.setPropertyBySemantic=function(e,t){fe.throwInstantiationError()};tc.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))};tc.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return!1;let o=i[e];return l(o)};tc.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};tc.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=Be(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(l(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};tc.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};tc.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return;let o=i[e];if(l(o))return tc.getProperty(o.id,t,n)};tc.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!l(o))return!1;let r=i.propertiesBySemantic[e];return l(r)?tc.setProperty(r.id,t,n,i):!1};var jn=tc;function rb(e){e=e??B.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(rb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});rb.prototype.hasProperty=function(e){return jn.hasProperty(e,this._properties,this._class)};rb.prototype.hasPropertyBySemantic=function(e){return jn.hasPropertyBySemantic(e,this._properties,this._class)};rb.prototype.getPropertyIds=function(e){return jn.getPropertyIds(this._properties,this._class,e)};rb.prototype.getProperty=function(e){return jn.getProperty(e,this._properties,this._class)};rb.prototype.setProperty=function(e,t){return jn.setProperty(e,t,this._properties,this._class)};rb.prototype.getPropertyBySemantic=function(e){return jn.getPropertyBySemantic(e,this._properties,this._class)};rb.prototype.setPropertyBySemantic=function(e,t){return jn.setPropertyBySemantic(e,t,this._properties,this._class)};var Rv=rb;var mxn=x(T(),1);var rxn=x(T(),1);var Cyn=x(T(),1);var un={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"},Qc={INTEGER:"int",UNSIGNED_INTEGER:"uint",FLOAT:"float"};un.typeInfo={INT8:{vectorCompatible:!0,size:1,maximumValue:127,minimumValue:-128,category:Qc.INTEGER},UINT8:{vectorCompatible:!0,size:1,maximumValue:255,minimumValue:0,category:Qc.UNSIGNED_INTEGER},INT16:{vectorCompatible:!0,size:2,maximumValue:32767,minimumValue:-32768,category:Qc.INTEGER},UINT16:{vectorCompatible:!0,size:2,maximumValue:65535,minimumValue:0,category:Qc.UNSIGNED_INTEGER},INT32:{vectorCompatible:!0,size:4,maximumValue:2147483647,minimumValue:-2147483648,category:Qc.INTEGER},UINT32:{vectorCompatible:!0,size:4,maximumValue:4294967295,minimumValue:0,category:Qc.UNSIGNED_INTEGER},INT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("9223372036854775807"),minimumValue:BigInt("-9223372036854775808"),category:Qc.INTEGER,downcastFunction:e=>un.clampToLimits(e,un.INT32)},UINT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("18446744073709551615"),minimumValue:BigInt(0),category:Qc.UNSIGNED_INTEGER,downcastFunction:e=>un.clampToLimits(e,un.UINT32)},FLOAT32:{vectorCompatible:!0,size:4,maximumValue:34028234663852886e22,minimumValue:-34028234663852886e22,category:Qc.FLOAT},FLOAT64:{vectorCompatible:!0,size:8,maximumValue:Number.MAX_VALUE,minimumValue:-Number.MAX_VALUE,category:Qc.FLOAT,downcastFunction:e=>Math.fround(e)}};un.getMinimum=function(e){return un.typeInfo[e].minimumValue};un.getMaximum=function(e){return un.typeInfo[e].maximumValue};un.isIntegerType=function(e){return un.typeInfo[e].category!==Qc.FLOAT};un.isUnsignedIntegerType=function(e){return un.typeInfo[e].category===Qc.UNSIGNED_INTEGER};un.isVectorCompatible=function(e){return un.typeInfo[e].vectorCompatible};un.category=function(e){return un.typeInfo[e].category};un.gpuComponentType=function(e){switch(e){case un.INT64:return"INT32";case un.UINT64:return"UINT32";case un.FLOAT64:return"FLOAT32";default:return e}};un.normalize=function(e,t){return Math.max(Number(e)/Number(un.getMaximum(t)),-1)};un.unnormalize=function(e,t){let n=un.getMaximum(t),i=un.isUnsignedIntegerType(t)?0:-n;return e=W.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===un.INT64||t===un.UINT64)&&dn.supportsBigInt()&&(e=BigInt(e)),e>n?n:er?i:Number(e)}return Math.max(n,Math.min(i,e))};un.downcastFunction=function(e){let n=un.typeInfo[e].downcastFunction;return l(n)?n:i=>i};un.fromComponentDatatype=function(e){switch(e){case K.BYTE:return un.INT8;case K.UNSIGNED_BYTE:return un.UINT8;case K.SHORT:return un.INT16;case K.UNSIGNED_SHORT:return un.UINT16;case K.INT:return un.INT32;case K.UNSIGNED_INT:return un.UINT32;case K.FLOAT:return un.FLOAT32;case K.DOUBLE:return un.FLOAT64}};un.toComponentDatatype=function(e){switch(e){case un.INT8:return K.BYTE;case un.UINT8:return K.UNSIGNED_BYTE;case un.INT16:return K.SHORT;case un.UINT16:return K.UNSIGNED_SHORT;case un.INT32:return K.INT;case un.UINT32:return K.UNSIGNED_INT;case un.FLOAT32:return K.FLOAT;case un.FLOAT64:return K.DOUBLE}};un.getDataViewAccessors=function(e,t){return{[un.UINT8]:{get:e.getUint8.bind(e),set:e.setUint8.bind(e)},[un.INT8]:{get:e.getInt8.bind(e),set:e.setInt8.bind(e)},[un.UINT16]:{get:i=>e.getUint16(i,!0),set:(i,o)=>e.setUint16(i,o,!0)},[un.INT16]:{get:i=>e.getInt16(i,!0),set:(i,o)=>e.setInt16(i,o,!0)},[un.UINT32]:{get:i=>e.getUint32(i,!0),set:(i,o)=>e.setUint32(i,o,!0)},[un.INT32]:{get:i=>e.getInt32(i,!0),set:(i,o)=>e.setInt32(i,o,!0)},[un.FLOAT32]:{get:i=>e.getFloat32(i,!0),set:(i,o)=>e.setFloat32(i,o,!0)},[un.FLOAT64]:{get:i=>e.getFloat64(i,!0),set:(i,o)=>e.setFloat64(i,o,!0)},[un.UINT64]:{get:i=>e.getBigUint64(i,!0),set:(i,o)=>e.setBigUint64(i,BigInt(o),!0)},[un.INT64]:{get:i=>e.getBigInt64(i,!0),set:(i,o)=>e.setBigInt64(i,BigInt(o),!0)}}[t]};var Nt=Object.freeze(un);var zyn=x(T(),1);var Fyn=x(T(),1);var lr={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4",BOOLEAN:"BOOLEAN",STRING:"STRING",ENUM:"ENUM"};lr.isVectorType=function(e){switch(e){case lr.VEC2:case lr.VEC3:case lr.VEC4:return!0;default:return!1}};lr.isMatrixType=function(e){switch(e){case lr.MAT2:case lr.MAT3:case lr.MAT4:return!0;default:return!1}};lr.getComponentCount=function(e){switch(e){case lr.SCALAR:case lr.STRING:case lr.ENUM:case lr.BOOLEAN:return 1;case lr.VEC2:return 2;case lr.VEC3:return 3;case lr.VEC4:return 4;case lr.MAT2:return 4;case lr.MAT3:return 9;case lr.MAT4:return 16}};lr.getMathType=function(e){switch(e){case lr.VEC2:return M;case lr.VEC3:return m;case lr.VEC4:return se;case lr.MAT2:return Ji;case lr.MAT3:return q;case lr.MAT4:return F;default:return}};var xt=Object.freeze(lr);function $r(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.type,i=e.componentType,o=e.enumType,r=l(i)&&(e.normalized??!1)&&Nt.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=Be(e.min,!0),this._max=Be(e.max,!0),this._normalized=r;let s=Be(e.offset,!0),a=Be(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=Be(e.noData,!0),this._default=Be(e.default,!0),this._required=e.required??!0,this._extras=Be(e.extras,!0),this._extensions=Be(e.extensions,!0)}$r.fromJson=function(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.property,i=_5e(n),o=S5e(n,e.enums),r;return l(i)?i?r=l(n.optional)?!n.optional:!0:r=n.required??!1:r=!1,new $r({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($r.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 _5e(e){if(e.type==="ARRAY")return!0;let t=e.type;if(t===xt.SCALAR||xt.isMatrixType(t)||xt.isVectorType(t))return!1;if(l(Nt[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 S5e(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===xt.ENUM)return{type:n,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&i===xt.ENUM)return{type:i,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===xt.SCALAR||xt.isMatrixType(n)||xt.isVectorType(n))return{type:n,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===xt.BOOLEAN||n===xt.STRING)return{type:n,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&(i===xt.BOOLEAN||i===xt.STRING))return{type:i,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(i)&&l(Nt[i]))return{type:xt.SCALAR,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(Nt[n]))return{type:xt.SCALAR,componentType:n,enumType:void 0,valueType:n,isArray:r,isVariableLengthArray:a,arrayLength:s}}$r.prototype.normalize=function(e){return this._normalized?qJ(e,this._valueType,Nt.normalize):e};$r.prototype.unnormalize=function(e){return this._normalized?qJ(e,this._valueType,Nt.unnormalize):e};$r.prototype.applyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:$r.valueTransformInPlace(e,this._offset,this._scale,Nt.applyValueTransform)};$r.prototype.unapplyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:$r.valueTransformInPlace(e,this._offset,this._scale,Nt.unapplyValueTransform)};$r.prototype.expandConstant=function(e,t){t=t??!1;let n=this._isArray,i=this._arrayLength,o=xt.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)};$r.prototype.handleNoData=function(e){let t=this._noData;if(!l(t))return e;if(!cde(e,t))return e};function cde(e,t){if(!Array.isArray(e))return e===t;if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n1;return l(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};$r.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=xt.getMathType(this._type),i=this._isArray,o=xt.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};$r.prototype.validate=function(e){if(!(!l(e)&&l(this._default)))return this._required&&!l(e)?"required property must have a value":this._isArray?A5e(this,e):lde(this,e)};function A5e(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;i1?rde(e,t,n):void 0}if(eNt.getMaximum(t))return rde(e,t,n)}function ade(e,t){return`value ${e} of type ${t} must be finite`}function qJ(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;ie)};var $J=[void 0,"float","vec2","vec3","vec4"],ude=[void 0,"int","ivec2","ivec3","ivec4"],L5e=[void 0,"uint","uvec2","uvec3","uvec4"],W5e={[Qc.FLOAT]:"uintBitsToFloat",[Qc.INTEGER]:"int",[Qc.UNSIGNED_INTEGER]:""};$r.prototype.getGlslTypeWebGL1=function(){let e=xt.getComponentCount(this.type);return this.isArray&&(e=this.arrayLength),this.normalized?$J[e]:ude[e]};$r.prototype.getGlslType=function(){let e=this.valueType,t=xt.getComponentCount(this.type),n=this.isArray?this.arrayLength:1;return t*=n,!Nt.isIntegerType(e)||this.normalized?$J[t]:Nt.isUnsignedIntegerType(e)?L5e[t]:ude[t]};$r.prototype.unpackTextureInShader=function(e,t,n,i){let o=this.getGlslType(),r=Nt.gpuComponentType(this.valueType),s=t.length,a=this.type,c=xt.getComponentCount(a)*(this.isArray?this.arrayLength:1),d=Math.floor(s/c),u=`${n}_rawChannels`,h=`${n}_rawBits`,p=`${n}_unpackedValue`,b=`${o} ${p};`,f=`uint ${h};`;i.push(b),i.push(f);let y=`${$J[s]} ${u} = ${e};`;i.push(y);let _=W5e[Nt.category(r)],S=c>1;for(let A=0;A1?`.${Z}`:"",E=`${h} = czm_unpackTexture(${u}${V});`,G="";S&&(G=`[${A}]`);let v="",I="";if(this.normalized){let N=Nt.getMaximum(r);v=` * ${1/Number(N)}`,I="float"}let X=`${p}${G} = ${I}(${_}(${h}))${v};`;i.push(E),i.push(X)}return p};$r.prototype.unpackTextureInShaderWebGL1=function(e){return this.normalized?e:`${this.getGlslTypeWebGL1()}(255.0 * ${e})`};var gp=$r;function Ev(e){e=e??B.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===xt.STRING,h=r===xt.BOOLEAN,p=0,b;if(a){let g=n.arrayOffsetType??n.offsetType;g=Nt[g]??Nt.UINT32;let C=n.arrayOffsets??n.arrayOffsetBufferView;b=new ej(o[C],g,t+1),p+=b.typedArray.byteLength}let f=xt.getComponentCount(r),y;a?y=b.get(t)-b.get(0):s?y=t*i.arrayLength:y=t;let _=f*y,S;if(u){let g=n.stringOffsetType??n.offsetType;g=Nt[g]??Nt.UINT32;let C=n.stringOffsets??n.stringOffsetBufferView;S=new ej(o[C],g,_+1),p+=S.typedArray.byteLength}(u||h)&&(c=Nt.UINT8);let A;u?A=S.get(_)-S.get(0):h?A=Math.ceil(_/8):A=_;let Z=n.values??n.bufferView,V=new ej(o[Z],c,A);p+=V.typedArray.byteLength;let E=n.offset,G=n.scale,v=i.hasValueTransform||l(E)||l(G);E=E??i.offset,G=G??i.scale,E=mde(E),G=mde(G);let I,X,N=this;u?I=function(g){return I5e(g,N._values,N._stringOffsets)}:h?(I=function(g){return P5e(g,N._values)},X=function(g,C){X5e(g,N._values,C)}):l(d)?(I=function(g){let C=N._values.get(g);return d.namesByValue[C]},X=function(g,C){let R=d.valuesByName[C];N._values.set(g,R)}):(I=function(g){return N._values.get(g)},X=function(g,C){N._values.set(g,C)}),this._arrayOffsets=b,this._stringOffsets=S,this._values=V,this._classProperty=i,this._count=t,this._vectorComponentCount=f,this._min=n.min,this._max=n.max,this._offset=E,this._scale=G,this._hasValueTransform=v,this._getValue=I,this._setValue=X,this._unpackedValues=void 0,this._extras=n.extras,this._extensions=n.extensions,this._byteLength=p}Object.defineProperties(Ev.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}}});Ev.prototype.get=function(e){let t=v5e(this,e);return t=this._classProperty.handleNoData(t),l(t)?(t=this._classProperty.normalize(t),t=O5e(this,t),this._classProperty.unpackVectorAndMatrixTypes(t)):(t=this._classProperty.default,this._classProperty.unpackVectorAndMatrixTypes(t))};Ev.prototype.set=function(e,t){let n=this._classProperty;t=n.packVectorAndMatrixTypes(t),t=B5e(this,t),t=n.unnormalize(t),F5e(this,e,t)};Ev.prototype.getTypedArray=function(){if(l(this._values))return this._values.typedArray};function mde(e){if(!Array.isArray(e))return e;let t=[];for(let n=0;n>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function X5e(e,t,n){let i=e>>3,o=e%8;n?t.typedArray[i]|=1<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 Y5e(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)<96?_-97:_>64?_-39:_+4}for(var S=0,y=0;y=3),c(n.exports.meshopt_spatialSortRemap,b,b.length/f,f*4)},encodeVertexBuffer:function(b,f,y){r(y>0&&y<=256),r(y%4==0);var _=n.exports.meshopt_encodeVertexBufferBound(f,y);return d(n.exports.meshopt_encodeVertexBuffer,_,b,f,y)},encodeVertexBufferLevel:function(b,f,y,_,S){r(y>0&&y<=256),r(y%4==0),r(_>=0&&_<=3),r(S===void 0||S==0||S==1);var A=n.exports.meshopt_encodeVertexBufferBound(f,y);return d(n.exports.meshopt_encodeVertexBufferLevel,A,b,f,y,_,S===void 0?-1:S)},encodeIndexBuffer:function(b,f,y){r(y==2||y==4),r(f%3==0);var _=h(b,y),S=n.exports.meshopt_encodeIndexBufferBound(f,u(_)+1);return d(n.exports.meshopt_encodeIndexBuffer,S,_,f,4)},encodeIndexSequence:function(b,f,y){r(y==2||y==4);var _=h(b,y),S=n.exports.meshopt_encodeIndexSequenceBound(f,u(_)+1);return d(n.exports.meshopt_encodeIndexSequence,S,_,f,4)},encodeGltfBuffer:function(b,f,y,_,S){var A={ATTRIBUTES:this.encodeVertexBufferLevel,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(A[_]),A[_](b,f,y,2,S===void 0?0:S)},encodeFilterOct:function(b,f,y,_){return r(y==4||y==8),r(_>=2&&_<=16),p(n.exports.meshopt_encodeFilterOct,b,f,y,_,16)},encodeFilterQuat:function(b,f,y,_){return r(y==8),r(_>=4&&_<=16),p(n.exports.meshopt_encodeFilterQuat,b,f,y,_,16)},encodeFilterExp:function(b,f,y,_,S){r(y>0&&y%4==0),r(_>=1&&_<=24);var A={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return p(n.exports.meshopt_encodeFilterExp,b,f,y,_,y,S?A[S]:1)},encodeFilterColor:function(b,f,y,_){return r(y==4||y==8),r(_>=2&&_<=16),p(n.exports.meshopt_encodeFilterColor,b,f,y,_,16)}}})();var Wxn=x(T(),1),_y=(function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuec:W:Odkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq;lZkdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl: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:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z:jjjjb8AazazcjdfaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok:XseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:kjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9: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::ioiue99dud99dud99dnaeTmbcbhiabhlindndnal8Uebgv:YgoJ:ji:1Salcof8UebgrciVgw:Y:vgDNJbbbZJbbb:;avcu9kEMgq:lJbbb9p9DTmbaq:Ohkxekcjjjj94hkkalclf8Uebhvalcdf8UebhxabaiarcefciGfcetfak87ebdndnax:YgqaDNJbbbZJbbb:;axcu9kEMgm:lJbbb9p9DTmbam:Ohxxekcjjjj94hxkabaiarciGfgkcd7cetfax87ebdndnav:YgmaDNJbbbZJbbb:;avcu9kEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabaiarcufciGfcetfav87ebdndnawaw2:ZgPaPMaoaoN:taqaqN:tamamN:tgoJbbbbaoJbbbb9GE:raDNJbbbZMgD:lJbbb9p9DTmbaD:Ohrxekcjjjj94hrkabakcetfar87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91: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:K1jjbgeabcifc98GfgbBd:K1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk81dbcjwk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:Kwkl8WNbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuec:q:6dkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq:Ctklbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbfRbbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitc:q1jjbfpbibaic:q:yjjbfRbbgipsaoRbegqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqc:q:yjjbfRbbfhokalc;abfhialcjefaX0meaihlamao9Rc;Fb0mbkkdnaiaX9pmbaici4hlinamao9RcK6mwa5aifhqdndndndndndnaOaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaoclffahc:q:yjjbfRbbfhoxikaqaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaocwffahc:q:yjjbfRbbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpkbbaaaocdffahc:q:yjjbfRbbfhokalcdfhlaiczfgiaX6mbkkaohOaoTmoka5aXfh5a3cefg3cl9hmbkdndndndnawTmbasaYcd4fRbbglciGPlbedwbkaXTmdavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep9Ta8Epxeeeeeeeeeeeeeeeeg8Fp9op9Hp9rg8Eagp9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Ug8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9AbbbaladfhlaoczfgoaX6mbxikkaXTmeavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep:nea8Epxebebebebebebebebg8Fp9op:bep9rg8Eagp:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeg8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9AbbbaladfhlaoczfgoaX6mbxdkkaXTmbcbhocbalcl4gl9Rc8FGhiavcjdfaYfhravaYfpbdbh8Finaravcj;cbfaofpblbggaKaofpblbg8JpmbzeHdOiAlCvXoQrLg8KaQaofpblbg8LaLaofpblbg8MpmbzeHdOiAlCvXoQrLg8NpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ea8Fp9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Fa8Ka8NpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwKDYq8AkEx3m5P8Es8Fgga8La8MpmwKDYq8AkEx3m5P8Es8Fg8JpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9AbbbaradfhraoczfgoaX6mbkkaYclfgYad6mbkaHavcjdfaAad2;8qbbavavcjdfaAcufad2fad;8qbbaAazfhzc9:hoaOhxaOmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdaPaeao9RaoaPfae6Eaofgoae6mbkaial9Rhxkcbc99amax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbk:TseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:2Pliur97eue978Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskaipxFubbFubbFubbFubbgxpklbdnalTmbcbhvabhdinadczfgmampbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblbaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgopklbaiaopklbaiabalcitfgdaeciGglcitgv;8qbbaiaxpkladnalTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblaaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkadaiav;8qbbkk:Iwllue97euo978Jjjjjbca9Rhidnaec98GglTmbcbhvabhoinaocKfpx:ji:1S:ji:1S:ji:1S:ji:1SaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qgxp;6ep;Negmaxaxp:1ep;7egxaxp;KearaDpmbediwDqkzHOAKY8AEgxczp:Reczp:Sep;6egrarp;Meaxczp:Sep;6egDaDp;Meaqczp:Reczp:Sep;6egqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gxp;KepxFFbbFFbbFFbbFFbbgPp9oamaDp;Meaxp;Keczp:Rep9qgDamarp;Meaxp;KeaPp9oamaqp;Meaxp;Keczp:Rep9qgxpmwDKYqk8AExm35Ps8E8Fgrp5eakclp:RegmpEi:T:j83ibawarp5bampEd:T:j83ibaocwfaDaxpmbezHdiOAlvCXorQLgxp5eampEe:T:j83ibaoaxp5bampEb:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiczfpxbbbbbbbbbbbbbbbbgmpklbaiampklbaiabalcitfgoaeciGgvcitgw;8qbbdnavTmbaipx:ji:1S:ji:1S:ji:1S:ji:1SaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qgxp;6ep;Negmaxaxp:1ep;7egxaxp;KearaDpmbediwDqkzHOAKY8AEgxczp:Reczp:Sep;6egrarp;Meaxczp:Sep;6egDaDp;Meaqczp:Reczp:Sep;6egqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gxp;KepxFFbbFFbbFFbbFFbbgPp9oamaDp;Meaxp;Keczp:Rep9qgDamarp;Meaxp;KeaPp9oamaqp;Meaxp;Keczp:Rep9qgxpmwDKYqk8AExm35Ps8E8Fgrp5eakclp:RegmpEi:T:j83iKaiarp5bampEd:T:j83izaiaDaxpmbezHdiOAlvCXorQLgxp5eampEe:T:j83iwaiaxp5bampEb:T:j83ibkaoaiaw;8qbbkk;uddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaic8WfpxbbbbbbbbbbbbbbbbgopklbaicafaopklbaiczfaopklbaiaopklbaiabavcdtfgdalciGgecdtgv;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkadaiav;8qbbkk:CPvdue97euw97eu8Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadpbbbhradpxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpkbbadczfhdaoclfgoal6mbkkalaeSmeaiavpklaaicafabalcdtfgdaeciGglcdtgo;8qbbaiavpklbdnalTmbaipblahraipxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpklakadaicafao;8qbbskaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadczfgspxbFu9hbFu9hbFu9hbFu9hadpbbbgDaspbbbgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblbp9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpkbbadaxarpmbezHdiOAlvCXorQLpkbbadcafhdaoclfgoal6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgrpklbaiarpklbaiabalcitfgdaeciGglcitgo;8qbbaiavpkladnalTmbaipxbFu9hbFu9hbFu9hbFu9haipblbgDaipblzgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblap9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpklzaiaxarpmbezHdiOAlvCXorQLpklbkadaiao;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",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(S){r=S.instance,r.exports.__wasm_call_ctors()});function a(S){for(var A=new Uint8Array(S.length),Z=0;Z96?V-97:V>64?V-39:V+4}for(var E=0,Z=0;Z0?y(S,A,Z,u[V],d[E]):s.then(function(){var G=new Uint8Array(S*A);return c(r,r.exports[u[V]],G,S,A,Z,r.exports[d[E]]),G})}}})();var Ixn=x(T(),1),vxn=(function(){var e="b9H79Tebbbe:6eO9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gouuuuuue999Gvuuuuueu9Gzuuuuuuuuuuu99uuuub9Gquuuuuuu99uueu9GPuuuuuuuuuuu99uueu9Gquuuuuuuu99ueu9Gruuuuuu99eu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9Gluuuub9GiuuueuiLQdilvorlwDiqkxmPszbHHbelve9Weiiviebeoweuec:G:Pdkr:Bdxo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bw8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bD8A9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9O9v9W9K9HtWbqQ9TW79O9V9Wt9F79P9T9W29P9M959t29V9W9W95bkX9TW79O9V9Wt9F79P9T9W29P9M959qV919UWbxQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bmX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2WbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbs59TW79O9V9Wt9F9NW9UWV9HtW9q9V79Pt9P9V9U9sW9T9H9Wbzl79IV9RbHDwebcekdCXqM;YeQdbk;A1er3ue99euE99Que9:r998Jjjjjbcj;sb9Rgs8Kjjjjbcbhzasc:Cefcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkdnamcdGTmbalcrfci4cbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egecdtfaHBdbasaecefBd;8ecbhlcbhednadTmbabheadhOinaHaeydbci4fcb86bbaeclfheaOcufgOmbkcbhlabheadhOinaHaeydbgAci4fgCaCRbbgCceaAcrGgAtV86bbaCcu7aA4ceGalfhlaeclfheaOcufgOmbkcualcdtalcFFFFi0Ehekaecbyd1:jjjbHjjjjbbhzasc:Cefasyd;8egecdtfazBdbasaecefBd;8ealcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8eaHcFeaOz:tjjjbhQdnadTmbaecufhLcbhKindndnaQabaXcdtfgYydbgAc:v;t;h;Ev2aLGgOcdtfgCydbgHcuSmbceheinazaHcdtfydbaASmdaOaefhHaecefheaQaHaLGgOcdtfgCydbgHcu9hmbkkazaKcdtfaABdbaCaKBdbaKhHaKcefhKkaYaHBdbaXcefgXad9hmbkkaQcbyd:m:jjjbH:bjjjbbasasyd;8ecufBd;8ekcbh8AcualcefgecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbhXasc:Cefasyd;8egecdtfaXBdbasaXBdNeasaecefBd;8ecuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbhEasc:Cefasyd;8egecdtfaEBdbasaEBd:yeasaecefBd;8eascNefabadalcbz:cjjjbcualcdtgealcFFFFi0Eg3cbyd1:jjjbHjjjjbbhAasc:Cefasyd;8egHcdtfaABdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhKasc:Cefasyd;8egHcdtfaKBdbasaHcefBd;8eaAaKaialavazasc:Cefz:djjjbalcbyd1:jjjbHjjjjbbh5asc:Cefasyd;8egHcdtfa5BdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egOcdtfaHBdbasaOcefBd;8ea3cbyd1:jjjbHjjjjbbhOasc:Cefasyd;8egCcdtfaOBdbasaCcefBd;8eaHcFeaez:tjjjbh8EaOcFeaez:tjjjbh8FdnalTmbaEcwfhaindnaXa8AgOcefg8AcdtfydbgCaXaOcdtgefydbgHSmbaCaH9RhhaEaHcitfhga8Faefh8Ja8Eaefh8KcbhQindndnagaQcitfydbgLaO9hmba8KaOBdba8JaOBdbxekdnaXaLcdtg8LfgeclfydbgHaeydbgeSmbaEaecitgCfydbaOSmeaHae9Rh8Maecu7aHfhYaaaCfhHcbheinaYaeSmeaecefheaHydbhCaHcwfhHaCaO9hmbkaea8M6meka8Fa8LfgeaOaLaeydbcuSEBdba8KaLaOa8KydbcuSEBdbkaQcefgQah9hmbkka8Aal9hmbkaAhHaKhOa8FhCa8EhQcbheindndnaeaHydbgL9hmbdnaeaOydbgL9hmbaQydbhLdnaCydbgYcu9hmbaLcu9hmba5aefcb86bbxikdnaYcuSmbaLcuSmbaeaYSmbaAaYcdtfydbaAaLcdtfydb9hmba5aefcd86bbxika5aefh8KdnaeaYSmbaeaLSmba8Kce86bbxika8Kcl86bbxdkdnaeaKaLcdtgYfydb9hmbdnaCydbg8KcuSmbaea8KSmbaQydbghcuSmbaeahSmba8FaYfydbggcuSmbagaLSmba8EaYfydbgYcuSmbaYaLSmbdnaAa8KcdtfydbgLaAaYcdtfydb9hmbaLaAahcdtfydbgYSmbaYaAagcdtfydb9hmba5aefcd86bbxlka5aefcl86bbxika5aefcl86bbxdka5aefcl86bbxeka5aefa5aLfRbb86bbkaHclfhHaOclfhOaCclfhCaQclfhQalaecefge9hmbkdnamcaGTmbaEcwfh8Jcbh8Nindndna5a8NfgyRbbg8Pc9:fPibebekdndndnaAa8Ncdtfydbgea8N9hmbdnaqmbcbhgxdkdnazTmbcbhga8NheinagaqazaecdtgefydbfRbbcdGce4VhgaKaefydbgea8N9hmbxikkcbhga8NheinagaqaefRbbcdGce4VhgaKaecdtfydbgea8N9hmbxdkka5aefRbbhexeka8NheindnaXaecdtgafgeclfydbgHaeydbgeSmbaHae9Rh8AaEaecitfh8MaAaafh8Lcbh8Kina8Ma8KcitfydbgYhednindnaXaecdtgLfgeclfydbgHaeydbgeSmbdnaAaEaecitgOfydbcdtfydba8LydbgQ9hmbcehexikaHae9Rhhaecu7aHfhCa8JaOfhHcbheinaCaeSmeaecefheaHydbhOaHcwfhHaAaOcdtfydbaQ9hmbkaeah6hexdkaKaLfydbgeaY9hmbkcbhekagaece7Vhga8Kcefg8Ka8A9hmbkkaKaafydbgea8N9hmbka8PciagceGEhekayae86bbka8Ncefg8Nal9hmbkkdnaqTmbdndnazTmbazheaAhHalhOindnaqaeydbfRbbceGTmba5aHydbfcl86bbkaeclfheaHclfhHaOcufgOmbxdkkaqheaAhHalhOindnaeRbbceGTmba5aHydbfcl86bbkaecefheaHclfhHaOcufgOmbkkaAhealhOa5hHindna5aeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaOcufgOmbkkamceGTmba5healhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcbhIcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhaasc:Cefasyd;8egecdtfaaBdbasaecefBd;8easc:qefcbBdbas9cb83i1eaaaialavazasc1efz:ejjjbh8RdndnaDmbcbhycbhCxekcbhCawhecbhHindnaeIdbJbbbb9ETmbasaCcdtfaHBdbaCcefhCkaeclfheaDaHcefgH9hmbkcuaCal2gecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbhyasc:Cefasyd;8egecdtfayBdbasaecefBd;8ealTmbdnaCmbcbhCxekarcd4h8KdnazTmbaCcdthhcbhXayhYinaoazaXcdtfydba8K2cdtfhLasheaYhHaChOinaHaLaeydbcdtgQfIdbawaQfIdbNUdbaeclfheaHclfhHaOcufgOmbkaYahfhYaXcefgXal9hmbxdkkaCcdthhcbhXayhYinaoaXa8K2cdtfhLasheaYhHaChOinaHaLaeydbcdtgQfIdbawaQfIdbNUdbaeclfheaHclfhHaOcufgOmbkaYahfhYaXcefgXal9hmbkkcualc8S2gHalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbheasc:Cefasyd;8egOcdtfaeBdbasaOcefBd;8eaecbaHz:tjjjbh8ScbhDcbh8KdnaCTmbcbhIaQcbyd1:jjjbHjjjjbbh8Kasc:Cefasyd;8egecdtfa8KBdbasaecefBd;8ea8KcbaHz:tjjjb8AcuaCal2gecltgHaecFFFFb0Ecbyd1:jjjbHjjjjbbhDasc:Cefasyd;8egecdtfaDBdbasaecefBd;8eaDcbaHz:tjjjb8AamcjjjjdGTmbcualcltgealcFFFFb0Ecbyd1:jjjbHjjjjbbhIasc:Cefasyd;8egHcdtfaIBdbasaHcefBd;8eaIcbaez:tjjjb8AkdnadTmbcbhLabhHinaaaHclfydbgXcx2fgeIdbaaaHydbgYcx2fgOIdbgR:tg8UaaaHcwfydbghcx2fgQIdlaOIdlg8V:tg8WNaQIdbaR:tg8XaeIdla8V:tg8YN:tg8Zh80aeIdwaOIdwg81:tgBa8XNaQIdwa81:tg83a8UN:tgUh8Xa8Ya83Na8WaBN:tg8Yh8Udna8Za8ZNa8Ya8YNaUaUNMM:rgBJbbbb9EgOTmba8ZaB:vh80aUaB:vh8Xa8YaB:vh8Uka8SaAaYcdtfydbgQc8S2fgea8UaB:rg8Wa8UNNg85aeIdbMUdbaea8Xa8Wa8XNg86Ng87aeIdlMUdlaea80a8Wa80Ng83Ng88aeIdwMUdwaea86a8UNg86aeIdxMUdxaea83a8UNg89aeIdzMUdzaea83a8XNg8:aeIdCMUdCaea8Ua8Wa80a81Na8UaRNa8Va8XNMM:mgZNg83Ng8UaeIdKMUdKaea8Xa83Ng8XaeId3MUd3aea80a83Ng80aeIdaMUdaaea83aZNg83aeId8KMUd8Kaea8WaeIdyMUdya8SaAaXcdtfydbgXc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdya8SaAahcdtfydbgYc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdydnaITmbdnaOTmba8ZaB:vh8ZaUaB:vhUa8YaB:vh8YkaIaQcltfgeaBJbbbZNg8UaUNg8WaeIdlMUdlaea8Ua8ZNg8XaeIdwMUdwaea8Ua8YNg80aeIdbMUdbaea8UaR:ma8YNaUa8VN:ta81a8ZN:tNg8UaeIdxMUdxaIaXcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxaIaYcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxkaHcxfhHaLcifgLad6mbkkdnalTmbJ;n;m;m89J:v:;;w8ZamczGEh8YcbhOaAhQaahHa8SheindnaOaQydb9hmbaecxfgLaLIdbJbbbbMUdbaeczfgLaLIdbJbbbbMUdbaecCfgLaLIdbJbbbbMUdbaea8YaecyfgLIdbg8ZNg8UaeIdbMUdbaeclfgXa8UaXIdbMUdbaecwfgXa8UaXIdbMUdbaecKfgXaXIdbaHIdbg8Xa8UN:tUdbaHcwfIdbh8Waec3fgXaXIdba8UaHclfIdbg80N:tUdbaecafgXaXIdba8Ua8WN:tUdbaec8KfgXIdbhUaLa8Za8UMUdbaXaUa8Ua8Wa8WNa8Xa8XNa80a80NMMNMUdbkaQclfhQaHcxfhHaec8SfhealaOcefgO9hmbkkdnadTmbcbhhabhYinabahcdtfhXcbhHina5aXaHc:G1jjbfydbcdtfydbgOfRbbhedndna5aYaHfydbgQfRbbgLc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaLcufcFeGce0mba8EaQcdtfydbaO9hmekdnaecufcFeGce0mba8FaOcdtfydbaQ9hmekJbbacJbbacJbbbZaecFeGceSEaLcFeGceSEh88aaaOcx2fgeIdwaaaQcx2fgLIdwgB:tg80:mh86aeIdlaLIdlg83:tg8Z:mh89aeIdbaLIdbgR:tgU:mh8:dnaaaXaHc:K1jjbfydbcdtfydbcx2fgeIdwaB:tg8Va80a80NaUaUNa8Za8ZNMMg8YNa8Va80NaeIdbaR:tg81aUNa8ZaeIdla83:tg85NMMg8Wa80N:tg8Xa8XNa81a8YNa8WaUN:tg8Ua8UNa85a8YNa8Wa8ZN:tg8Wa8WNMM:rg87Jbbbb9ETmba8Xa87:vh8Xa8Wa87:vh8Wa8Ua87:vh8Uka88a8Y:rNg8Ya8XaBNa8UaRNa83a8WNMM:mgZNg87aZNhZa8Xa87Nhna8Wa87Nhca8Ua87Nh9ca8Ya8XNg87a8WNhJa87a8UNh9ea8Ya8WNgTa8UNhSa8Xa87Nh87a8WaTNhTa8Ua8Ya8UNNh9hdnaUa85Na81a89NMg8Xa8XNa8Za8VNa85a86NMg8Ua8UNa80a81Na8Va8:NMg8Wa8WNMM:rg80Jbbbb9ETmba8Xa80:vh8Xa8Wa80:vh8Wa8Ua80:vh8Uka8SaAaQcdtfydbc8S2fgeaeIdba9ha8Ua88a80:rNg80a8UNNMgUMUdbaeaTa8Wa80a8WNg8VNMg81aeIdlMUdlaea87a8Xa80a8XNg8ZNMg85aeIdwMUdwaeaSa8Va8UNMg8VaeIdxMUdxaea9ea8Za8UNMg87aeIdzMUdzaeaJa8Za8WNMg8ZaeIdCMUdCaea9ca8Ua80a8XaBNa8UaRNa83a8WNMMgB:mNg80NMg8UaeIdKMUdKaeaca8Wa80NMg8WaeId3MUd3aeana8Xa80NMg8XaeIdaMUdaaeaZaBa80N:tg80aeId8KMUd8Kaea8YJbbbbMg8YaeIdyMUdya8SaAaOcdtfydbc8S2fgeaUaeIdbMUdbaea81aeIdlMUdlaea85aeIdwMUdwaea8VaeIdxMUdxaea87aeIdzMUdzaea8ZaeIdCMUdCaea8UaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea80aeId8KMUd8Kaea8YaeIdyMUdykaHclfgHcx9hmbkaYcxfhYahcifghad6mbkaCTmbcbhYinJbbbbh8YaaabaYcdtfgeclfydbghcx2fgHIdwaaaeydbggcx2fgOIdwg81:tg8Wa8WNaHIdbaOIdbg85:tg8Xa8XNaHIdlaOIdlg87:tg80a80NMMgRaaaecwfydbgEcx2fgeIdwa81:tg8ZNa8Wa8Wa8ZNa8XaeIdba85:tgUNa80aeIdla87:tgBNMMg8UN:tJbbbbJbbjZaRa8Za8ZNaUaUNaBaBNMMg8VNa8Ua8UN:tg83:va83Jbbbb9BEg83Nh89a8Va8WNa8Za8UN:ta83Nh8:aRaBNa80a8UN:ta83NhZa8Va80NaBa8UN:ta83NhnaRaUNa8Xa8UN:ta83Nhca8Va8XNaUa8UN:ta83Nh9ca8XaBNaUa80N:tg8Ua8UNa80a8ZNaBa8WN:tg8Ua8UNa8WaUNa8Za8XN:tg8Ua8UNMM:rJbbbZNh8UayagaC2g8LcdtfhHayaEaC2g8JcdtfhOayahaC2g8AcdtfhQa81:mhJa87:mh9ea85:mhTcbhLaChXJbbbbhBJbbbbh83JbbbbhRJbbbbh8VJbbbbh81Jbbbbh85Jbbbbh87Jbbbbh88Jbbbbh86inascjdfaLfgecwfa8Ua8:aQIdbaHIdbg8Z:tg80Na89aOIdba8Z:tgUNMg8WNUdbaeclfa8Uana80NaZaUNMg8XNUdbaea8Ua9ca80NacaUNMg80NUdbaecxfa8UaJa8WNa9ea8XNa8ZaTa80NMMMg8ZNUdba8Ua8Wa8XNNa8VMh8Va8Ua8Wa80NNa81Mh81a8Ua8Xa80NNa85Mh85a8Ua8Za8ZNNa8YMh8Ya8Ua8Wa8ZNNaBMhBa8Ua8Xa8ZNNa83Mh83a8Ua80a8ZNNaRMhRa8Ua8Wa8WNNa87Mh87a8Ua8Xa8XNNa88Mh88a8Ua80a80NNa86Mh86aHclfhHaQclfhQaOclfhOaLczfhLaXcufgXmbka8Kagc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8Kahc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8KaEc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdyaDa8LcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaDa8AcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaDa8JcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaYcifgYad6mbkkcbhOdndnamcwGg9imbJbbbbhRcbh6cbh9kcbh0xekcbh6a3cbyd1:jjjbHjjjjbbh0asc:Cefasyd;8egecdtfa0BdbasaecefBd;8ecua0alabadaAz:fjjjbgQcltaQcjjjjiGEcbyd1:jjjbHjjjjbbh9kasc:Cefasyd;8egecdtfa9kBdbasaecefBd;8ea9kaQa0aaalz:gjjjbJFFuuhRaQTmba9kheaQhHinaeIdbg8UaRaRa8U9EEhRaeclfheaHcufgHmbkaQh6kasydNeh9mdnalTmba9mclfhea9mydbhQa5hHalhLcbhOincbaeydbgXaQ9RaHRbbcpeGEaOfhOaHcefhHaeclfheaXhQaLcufgLmbkaOce4hOkcuadaO9Rcifg9ncx2a9nc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh9oasc:Cefasyd;8egecdtfa9oBdbasaecefBd;8ecua9ncdta9ncFFFFi0Ecbyd1:jjjbHjjjjbbh9pasc:Cefasyd;8egecdtfa9pBdbasaecefBd;8ea3cbyd1:jjjbHjjjjbbh8Pasc:Cefasyd;8egecdtfa8PBdbasaecefBd;8ealcbyd1:jjjbHjjjjbbh9qasc:Cefasyd;8egecdtfa9qBdbasaecefBd;8eaxaxNa8RJbbjZamclGEgnanN:vh88Jbbbbh86dnadak9nmbdna9nci6mbasyd:yeh9raCclth9sa9ocwfh9tJbbbbh87Jbbbbh86inascNefabadalaAz:cjjjbabhgcbh8Ncbh3inaba3cdtfh8LcbheindnaAagaefydbgOcdtghfydbgQaAa8Laec:W1jjbfydbcdtfydbgHcdtgEfydbgLSmba5aHfRbbgYcv2a5aOfRbbgXfc;a1jjbfRbbg8AaXcv2aYfg8Jc;a1jjbfRbbg8MVcFeGTmbdnaLaQ9nmba8Jc;G1jjbfRbbcFeGmekdnaXcufcFeGce0mbaYTmba8EahfydbaH9hmekdnaXTmbaYcufcFeGce0mba8FaEfydbaO9hmeka9oa8Ncx2fgQaHaOa8McFeGgLEBdlaQaOaHaLEBdbaQaLa8AGcb9hBdwa8Ncefh8Nkaeclfgecx9hmbkdna3cifg3ad9pmbagcxfhga8Ncifa9n9nmekka8NTmdcbh8Jina8SaAa9oa8Jcx2fghydbgLcdtgQfydbggc8S2fgeIdwaaahydlgXcx2fgHIdwg8XNaeIdzaHIdbg80NaeIdaMg8Ua8UMMa8XNaeIdlaHIdlg8ZNaeIdCa8XNaeId3Mg8Ua8UMMa8ZNaeIdba80NaeIdxa8ZNaeIdKMg8Ua8UMMa80NaeId8KMMM:lh8UJbbbbJbbjZaeIdyg8W:va8WJbbbb9BEh8Wdndnahydwg8LmbJFFuuh83xekJbbbbJbbjZa8SaAaXcdtfydbc8S2fgeIdygU:vaUJbbbb9BEaeIdwaaaLcx2fgHIdwgUNaeIdzaHIdbg8YNaeIdaMgBaBMMaUNaeIdlaHIdlgBNaeIdCaUNaeId3MgUaUMMaBNaeIdba8YNaeIdxaBNaeIdKMgUaUMMa8YNaeId8KMMM:lNh83ka8Wa8UNhBdnaCTmba8KaLc8S2fgOIdwa8XNaOIdza80NaOIdaMg8Ua8UMMa8XNaOIdla8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaXaC2gYcdtfhHaDaLaC2gEcltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8LmbJbbbbh8Wxeka8KaXc8S2fgOIdwaaaLcx2fgeIdwg80NaOIdzaeIdbg8ZNaOIdaMg8Wa8WMMa80NaOIdlaeIdlgUNaOIdCa80NaOId3Mg8Wa8WMMaUNaOIdba8ZNaOIdxaUNaOIdKMg8Wa8WMMa8ZNaOId8KMMMh8WayaEcdtfhHaDaYcltfheaOIdyh8YaChOinaHIdbg8Xa8Xa8YNaecxfIdba80aecwfIdbNa8ZaeIdbNaUaeclfIdbNMMMg8Xa8XM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8WkaBa8U:lMhBa83a8WMh83dndndna5aLfRbbc9:fPddbekaKaQfydbgQaLSmbaAaXcdtfydbhEindndna8EaQcdtgYfydbgecuSmbaAaecdtfydbaESmekdna8FaYfydbgecuSmbaAaecdtfydbaESmekaXheka8KaQc8S2fgOIdwaaaecx2fgHIdwg8XNaOIdzaHIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaHIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaeaC2cdtfhHaDaQaC2cltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkaBa8U:lMhBaKaYfydbgQaL9hmbkka5aXfRbbci9hmea8LTmeaKaXcdtfydbgQaXSmeindndna8EaQcdtgYfydbgecuSmbaAaecdtfydbagSmekdna8FaYfydbgecuSmbaAaecdtfydbagSmekaLheka8KaQc8S2fgOIdwaaaecx2fgHIdwg8XNaOIdzaHIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaHIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaeaC2cdtfhHaDaQaC2cltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbka83a8U:lMh83aKaYfydbgQaX9hmbxdkkdna8Fa8Ea8EaQfydbaXSEaKaQfydbgYcdtfydbgQcu9hmbaKaXcdtfydbhQka8KaYc8S2fgOIdwaaaQcx2fgeIdwg8XNaOIdzaeIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaeIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaQaC2ggcdtfhHaDaYaC2gEcltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8LmbJbbbbh8Wxeka8KaQc8S2fgOIdwaaaYcx2fgeIdwg80NaOIdzaeIdbg8ZNaOIdaMg8Wa8WMMa80NaOIdlaeIdlgUNaOIdCa80NaOId3Mg8Wa8WMMaUNaOIdba8ZNaOIdxaUNaOIdKMg8Wa8WMMa8ZNaOId8KMMMh8WayaEcdtfhHaDagcltfheaOIdyh8YaChOinaHIdbg8Xa8Xa8YNaecxfIdba80aecwfIdbNa8ZaeIdbNaUaeclfIdbNMMMg8Xa8XM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8WkaBa8U:lMhBa83a8WMh83kaha83aBa83aB9DgeEUdwahaLaXaea8Lcb9hGgeEBdlahaXaLaeEBdba8Jcefg8Ja8N9hmbkascjdfcbcj;qbz:tjjjb8Aa9thea8NhHinascjdfaeydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbcefBdbaecxfheaHcufgHmbkcbhecbhHinascjdfaefgOydbhQaOaHBdbaQaHfhHaeclfgecj;qb9hmbkcbhea9thHinascjdfaHydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbgOcefBdba9paOcdtfaeBdbaHcxfhHa8Naecefge9hmbkadak9RgOci9Uh9udnalTmbcbhea8PhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh9va9qcbalz:tjjjbh9waOcO9Uh9xa9uce4h9ycbh3cbh8Adnina9oa9pa8Acdtfydbcx2fg8JIdwg8Ua889Emea3a9u9pmeJFFuuh8Wdna9ya8N9pmba9oa9pa9ycdtfydbcx2fIdwJbb;aZNh8Wkdna8Ua8W9ETmba8Ua869ETmba3a9x0mdkdna9waAa8Jydlg8Mcdtg9zfgEydbgQfg9ARbba9waAa8Jydbggcdtg9Bfydbgefg9CRbbVmba5agfRbbh9Ddna9maecdtfgHclfydbgOaHydbgHSmbaOaH9RhLaaaQcx2fhYaaaecx2fhha9raHcitfhecbhHceh8Ldnindna8PaeydbcdtfydbgOaQSmba8PaeclfydbcdtfydbgXaQSmbaOaXSmbaaaXcx2fgXIdbaaaOcx2fgOIdbg8X:tg8UahIdlaOIdlg80:tg8YNahIdba8X:tgBaXIdla80:tg8WN:tg8Za8UaYIdla80:tg83NaYIdba8X:tg8Va8WN:tg80Na8WahIdwaOIdwgU:tg81Na8YaXIdwaU:tg8XN:tg8Ya8WaYIdwaU:tg85Na83a8XN:tg8WNa8XaBNa81a8UN:tgUa8Xa8VNa85a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmdkaecwfheaHcefgHaL6h8LaLaH9hmbkka8LceGTmba9ycefh9yxekdndndndna9Dc9:fPdebdkagheinaEydbhOdndna8EaecdtgHfydbgecuSmbaAaecdtfydbaOSmekdna8FaHfydbgecuSmbaAaecdtfydbaOSmeka8Mheka8PaHfaeBdbaKaHfydbgeag9hmbxikkdna8Fa8Ea8Ea9Bfydba8MSEaKa9Bfydbggcdtfydbgecu9hmbaKa9zfydbheka8Pa9Bfa8MBdbaeh8Mka8Pagcdtfa8MBdbka9Cce86bba9Ace86bba8JIdwg8Ua86a86a8U9DEh86a9vcefh9vcecda9DceSEa3fh3ka8Acefg8Aa8N9hmbkka9vTmddnalTmbcbhXcbhhindna8PahcdtgefydbgOahSmbaAaOcdtfydbhgdnahaAaefydb9hgEmba8Sagc8S2fgea8Sahc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdyaITmbaIagcltfgeaIahcltfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxkaCTmba8KaOc8S2fgea8Kahc8S2g8LfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9saO2hYaDhHaChQinaHaYfgeaHaXfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaEmbJbbbbJbbjZa8Sa8LfgeIdyg8U:va8UJbbbb9BEaeIdwaaagcx2fgHIdwg8UNaeIdzaHIdbg8WNaeIdaMg8Xa8XMMa8UNaeIdlaHIdlg8XNaeIdCa8UNaeId3Mg8Ua8UMMa8XNaeIdba8WNaeIdxa8XNaeIdKMg8Ua8UMMa8WNaeId8KMMM:lNg8Ua87a87a8U9DEh87kaXa9sfhXahcefghal9hmbkcbhHa8EheindnaeydbgOcuSmbdnaHa8PaOcdtgQfydbgO9hmbcuhOa8EaQfydbgQcuSmba8PaQcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkcbhHa8FheindnaeydbgOcuSmbdnaHa8PaOcdtgQfydbgO9hmbcuhOa8FaQfydbgQcuSmba8PaQcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkka87a86aCEh87cbhHabhecbhOindnaAa8PaeydbcdtfydbgXcdtfydbgQaAa8PaeclfydbcdtfydbgYcdtfydbgLSmbaQaAa8PaecwfydbcdtfydbggcdtfydbghSmbaLahSmbabaHcdtfgQaXBdbaQcwfagBdbaQclfaYBdbaHcifhHkaecxfheaOcifgOad6mbkdndna9imbaHhdxekdnaHak0mbaHhdxekdnaRa879FmbaHhdxekJFFuuhRcbhdabhecbhOindna9ka0aeydbgQcdtfydbcdtfIdbg8Ua879ETmbaeclf8Pdbh9EabadcdtfgLaQBdbaLclfa9E83dba8UaRaRa8U9EEhRadcifhdkaecxfheaOcifgOaH6mbkkadak0mbxdkkascNefabadalaAz:cjjjbkdndnadak0mbadhhxekdna9imbadhhxekdnaRa889FmbadhhxekcehLinaRJbb;aZNg8Ua88a8Ua889DEh8XJbbbbh8Udna6Tmba9khea6hHinaeIdbg8Wa8Ua8Wa8X9FEa8Ua8Wa8U9EEh8UaeclfheaHcufgHmbkkJFFuuhRcbhhabhecbhHindna9ka0aeydbgOcdtfydbcdtfIdbg8Wa8X9ETmbaeclf8Pdbh9EabahcdtfgQaOBdbaQclfa9E83dba8WaRaRa8W9EEhRahcifhhkaecxfheaHcifgHad6mbkdnaLahad9hVceGmbadhhxdka8Ua86a86a8U9DEh86ahak9nmecbhLahhdaRa889FmbkkdnamcjjjjdGTmba9qcbalz:tjjjbh8LdnahTmbabheahhHina8LaeydbgOfce86bba8LaAaOcdtfydbfce86bbaeclfheaHcufgHmbkkascNefabahalaAz:cjjjbdndndnalTmbcbhQasyd:yehEindna8LaQfRbbTmbdna5aQfRbbgecl0mbceaetcQGmekdnaAaQcdtgXfydbgeaQSmbaaaQcx2fgHaaaecx2fge8Pdb83dbaHcwfaecwfydbBdbxeka8SaQc8S2fgLIdyg9ca9cJL:3;rUNg8UMh88aLIdwg9ha8UMhRaLIdlgxa8UMh8VaLIdbg9Fa8UMhUaLIdag9Ga8UaaaQcx2fggIdwg89N:th81aLId3g9Ha8UagIdlg8:N:th85aLIdKg9IagIdbgZa8UN:th8YJbbbbhcaLIdCg9JJbbbbMh87aLIdzg9KJbbbbMhBaLIdxgWJbbbbMh83dndnaCTmbaQhOinJbbbba88a8KaOc8S2fgHIdyg8U:va8UJbbbb9BEh8UaDaOaC2cltfheaHIdaa88Na81Mh81aHId3a88Na85Mh85aHIdKa88Na8YMh8YaHIdCa88Na87Mh87aHIdza88NaBMhBaHIdxa88Na83Mh83aHIdwa88NaRMhRaHIdla88Na8VMh8VaHIdba88NaUMhUaChHina81aecxfIdbg8ZaecwfIdbg8WNa8UN:th81a85a8ZaeclfIdbg8XNa8UN:th85a87a8Wa8XNa8UN:th87aUaeIdbg80a80Na8UN:thUa8Ya8Za80Na8UN:th8YaBa8Wa80Na8UN:thBa83a8Xa80Na8UN:th83aRa8Wa8WNa8UN:thRa8Va8Xa8XNa8UN:th8VaeczfheaHcufgHmbkaKaOcdtfydbgOaQ9hmbkaITmbaIaQcltfgeIdxhSaeIdwhJaeIdlh9eaeIdbh8UxekJbbbbhSJbbbbhJJbbbbh9eJbbbbh8UkaBaU:vg8Xa8YNa81:ta87aBa83aU:vg8WN:tg81a8Va83a8WN:tg8Z:vg80a8Wa8YNa85:tg8VN:th85aJa8Ua8XN:ta9ea8Ua8WN:tg83a80N:tg87aRaBa8XN:ta81a80N:tgB:vgR:mh81a83a8Z:vgJ:mh9ednJbbbba8Ua8UaU:vgTN:ta83aJN:ta87aRN:tg83:la88J:983:g81Ng8U9ETmba81a85Na9ea8VNaTa8YNaS:tMMa83:vhckaU:la8U9ETmba8Z:la8U9ETmbaB:la8U9ETmbaT:macNa8X:ma81acNa85aB:vMgBNa8W:ma9eacNa80:maBNa8Va8Z:vMMg87Na8Y:maU:vMMMh88a9maXfgeclfydbgHaeydbge9RhYaEaecitfhXJbbbbh8UdnaHaeSg8JmbJbbbbh8UaXheaYhOinaaaeclfydbcx2fgHIdwa89:tg8Wa8WNaHIdbaZ:tg8Wa8WNaHIdla8::tg8Wa8WNMMg8Waaaeydbcx2fgHIdwa89:tg8Xa8XNaHIdbaZ:tg8Xa8XNaHIdla8::tg8Xa8XNMMg8Xa8Ua8Ua8X9DEg8Ua8Ua8W9DEh8UaecwfheaOcufgOmbkkaBa89:tg8Wa8WNa88aZ:tg8Wa8WNa87a8::tg8Wa8WNMMa8U:rg8Ua8UN9EmbaLId8Khcdna8JmbcbhOcehLdninaaaXclfydbcx2fgeIdbaaaXydbcx2fgHIdbg8X:tg8Ua8:aHIdlg80:tg8YNaZa8X:tg83aeIdla80:tg8WN:tg8Za8Ua87a80:tgRNa88a8X:tg8Va8WN:tg80Na8Wa89aHIdwgU:tg81Na8YaeIdwaU:tg8XN:tg8Ya8WaBaU:tg85NaRa8XN:tg8WNa8Xa83Na81a8UN:tgUa8Xa8VNa85a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmeaXcwfhXaOcefgOaY6hLaYaO9hmbkkaLceGmekJbbbbJbbjZa9c:va9cJbbbb9BEg8Ua9haBNa9Ka88Na9GMg8Wa8WMMaBNaxa87Na9JaBNa9HMg8Wa8WMMa87Na9Fa88NaWa87Na9IMg8Wa8WMMa88NacMMM:lNa8Ua9ha89Na9KaZNa9GMg8Wa8WMMa89Naxa8:Na9Ja89Na9HMg8Wa8WMMa8:Na9FaZNaWa8:Na9IMg8Wa8WMMaZNacMMM:lNJbb;aZNJ:983:g81M9EmbagaBUdwaga87Udlaga88UdbkaQcefgQal9hmbkaCTmecbhLindna8LaLfRbbTmbaAaLcdtgefydbaL9hmba5aLfhEaaaLcx2fhOaKaefh8JayaLaC2cdtfh8AcbhgincuhQdnaERbbci9hmbaLhQa8JydbgeaLSmbayagcdtgHfhXa8AaHfIdbh8UaLhQinaQhHcuhQdnaXaeaC2cdtfIdba8U9CmbaHcuSmbaHhQa8Kaec8S2fIdya8KaHc8S2fIdy9ETmbaehQkaKaecdtfydbgeaL9hmbkkayagcdtfhXaDagcltfhYaLheinaXaeaC2cdtfJbbbbJbbjZa8KaeaQaQcuSEgHc8S2fIdyg8U:va8UJbbbb9BEaYaHaC2cltfgHIdwaOIdwNaHIdbaOIdbNaHIdlaOIdlNMMaHIdxMNUdbaKaecdtfydbgeaL9hmbkagcefggaC9hmbkkaLcefgLalSmixbkkaCmekcbhCkaiavaoarawaCalaaayazasa8Rasc1efa5a8Laqz:hjjjbkdnamcjjjjlGTmbazmbahTmbcbhQabheina5aeydbgAfRbbc3thLaecwfgKydbhHdndna8EaAcdtgYfydbaeclfgXydbgOSmbcbhCa8FaOcdtfydbaA9hmekcjjjj94hCkaeaLaCVaAVBdba5aOfRbbc3thLdndna8EaOcdtfydbaHSmbcbhCa8FaHcdtfydbaO9hmekcjjjj94hCkaXaLaCVaOVBdba5aHfRbbc3thCdndna8EaHcdtfydbaASmbcbhOa8FaYfydbaH9hmekcjjjj94hOkaKaCaOVaHVBdbaecxfheaQcifgQah6mbkkdnazTmbahTmbahheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPana86:rNUdbkasyd;8egecdtasc:Ceffc98fhHdninaeTmeaHydbcbyd:m:jjjbH:bjjjbbaHc98fhHaecufhexbkkascj;sbf8Kjjjjbahk;Yieouabydlhvabydbclfcbaicdtz:tjjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd1:jjjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:tjjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd:m:jjjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkawclfhwabclfhbaiaDcefgD9hmbkkk:hrdvuv998Jjjjjbca9Rgoczfcwfcbyd11jjbBdbaocb8Pdj1jjb83izaocwfcbydN1jjbBdbaocb8Pd:m1jjb83ibdnadTmbaicd4hrdnabmbdnalTmbcbhwinaealawcdtfydbar2cdtfhDcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxikkarcdthwcbhDincbhiinaoczfaifgqaeaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaeawfheaDcefgDad9hmbxdkkdnalTmbcbhwinabawcx2fgiaealawcdtfydbar2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxdkkarcdthlcbhwaehDinabawcx2fgiaeawar2cdtfgqIdbUdbaiaqIdlUdlaiaqIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaDalfhDawcefgwad9hmbkkJbbbbaoIdbaoIdzgx:tgkakJbbbb9DEgkaoIdlaoIdCgm:tgPaPak9DEgkaoIdwaoIdKgP:tgsasak9DEhsdnabTmbadTmbJbbbbJbbjZas:vasJbbbb9BEhkinabakabIdbax:tNUdbabclfgoakaoIdbam:tNUdbabcwfgoakaoIdbaP:tNUdbabcxfhbadcufgdmbkkdnavTmbavaPUdwavamUdlavaxUdbkask:ZlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvc:G1jjbfydbcdtfydbcdtfydbhodnabalawavfydbcdtfydbgqcdtfgkydbgvaqSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnabaocdtfgkydbgvaoSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnabavfgDydbgvaxSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhvabhocbhkindndnavalydbgq9hmbdnavaoydbgq9hmbaoakBdbakcefhkxdkaoabaqcdtfydbBdbxekaoabaqcdtfydbBdbkaoclfhoalclfhlaeavcefgv9hmbkakk;Jiilud99duabcbaecltz:tjjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakclfgxaqaxIdbMUdbakcwfgxaDaxIdbMUdbakcxfgkakIdbJbbjZMUdbaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhraehkinarcxfgoIdbhDaocbBdbararIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbarclfgoaDaoIdbNUdbarcwfgoaDaoIdbNUdbarczfhrakcufgkmbkkdnalTmbinavadydbcltfgrcxfgkaicwfIdbarcwfIdb:tgDaDNaiIdbarIdb:tgDaDNaiclfIdbarclfIdb:tgDaDNMMgDakIdbgqaqaD9DEUdbadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhrinabarIdbUdbarczfhrabclfhbaecufgembkkk:moerudnaoTmbaecd4hzdnavTmbaicd4hHavcdthOcbhAindnaPaAfRbbTmbaAhednaDTmbaDaAcdtfydbhekdnasTmbasaefRbbceGmekdnamaAfRbbclSmbabaeaz2cdtfgiaraAcx2fgCIdbakNaxIdbMUdbaiaCIdlakNaxIdlMUdlaiaCIdwakNaxIdwMUdwkadaeaH2cdtfhXaqheawhiavhCinaXaeydbcdtgQfaiIdbalaQfIdb:vUdbaeclfheaiclfhiaCcufgCmbkkawaOfhwaAcefgAao9hmbxdkkdnasmbcbheaDhiindnaPaefRbbTmbaehCdnaDTmbaiydbhCkamaefRbbclSmbabaCaz2cdtfgCarIdbakNaxIdbMUdbaCarclfIdbakNaxIdlMUdlaCarcwfIdbakNaxIdwMUdwkaiclfhiarcxfhraoaecefge9hmbxdkkdnaDTmbindnaPRbbTmbasaDydbgefRbbceGmbamRbbclSmbabaeaz2cdtfgearIdbakNaxIdbMUdbaearclfIdbakNaxIdlMUdlaearcwfIdbakNaxIdwMUdwkaPcefhPaDclfhDamcefhmarcxfhraocufgombxdkkazcdthicbheindnaPaefRbbTmbasaefRbbceGmbamaefRbbclSmbabarIdbakNaxIdbMUdbabclfarclfIdbakNaxIdlMUdbabcwfarcwfIdbakNaxIdwMUdbkarcxfhrabaifhbaoaecefge9hmbkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbkRbababaeadaialavaoarawaDaqakaxcjjjjdVamz:bjjjbk:d8Koque99due99duq998Jjjjjbc;Wb9Rgq8Kjjjjbcbhkaqcxfcbc;Kbz:tjjjb8Aaqcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgxBdxaqceBd2axaialavcbcbz:ejjjb8AaqcualcdtalcFFFFi0Egmcbyd1:jjjbHjjjjbbgiBdzaqcdBd2dndnJFF959eJbbjZawJbbjZawJbbjZ9DE:vawJ9VO:d869DEgw:lJbbb9p9DTmbaw:OhPxekcjjjj94hPkadci9Uhsarco9UhzdndnaombaPcd9imekdnalTmbaPcuf:YhwdnaoTmbcbhvaihHaxhOindndnaoavfRbbceGTmbavcjjjjlVhAxekdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHaOcxfhOalavcefgv9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkadTmbcbhkaehvcbhOinakaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgA9haiavydbcdtfydbgXaH9haXaA9hGGfhkavcxfhvaOcifgOad6mbkkarci9UhQdndnaz:Z:rJbbbZMgw:lJbbb9p9DTmbaw:Ohvxekcjjjj94hvkaQ:ZhLcbhKc:bwhzdninakaQ9pmeazaP9Rcd9imeavazcufavaz9iEaPcefavaP9kEhYdnalTmbaYcuf:YhwdnaoTmbcbhOaihHaxhvindndnaoaOfRbbceGTmbaOcjjjjlVhAxekdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHavcxfhvalaOcefgO9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkcbhOdnadTmbaehvcbhHinaOaiavclfydbcdtfydbgAaiavcwfydbcdtfydbgX9haiavydbcdtfydbgraA9haraX9hGGfhOavcxfhvaHcifgHad6mbkkJbbbbh8Adnas:ZgCaL:taY:Ygwaz:Y:tgENak:Zg3aO:Zg5:tNa3aL:tawaP:Y:tg8ENa5aC:tNMg8FJbbbb9BmbaCa3:ta8EaEa5aL:tNNNa8F:vh8AkdndnaOaQ0mbaOhkaYhPxekaOhsaYhzkdndnaKcl0mbdna8AawMJbbbZMgw:lJbbb9p9DTmbaw:Ohvxdkcjjjj94hvxekaPazfcd9ThvkaKcefgKcs9hmbkkdndndnakmbJbbjZhwcbhicdhvaDmexdkalcd4alfhHcehOinaOgvcethOavaH6mbkcbhOaqcuavcdtgYavcFFFFi0Ecbyd1:jjjbHjjjjbbgKBdCaqciBd2aqamcbyd1:jjjbHjjjjbbgzBdKaqclBd2dndndndnalTmbaPcuf:YhwaoTmecbhOaihAaxhHindndnaoaOfRbbceGTmbaOcjjjjlVhXxekdndnaHclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqthXdndnaHcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarVhXdndnaHIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarcCtVhXkaAaXBdbaAclfhAaHcxfhHalaOcefgO9hmbxikkaKcFeaYz:tjjjb8AcbhPcbhvxdkaxhOaihHalhAindndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcCthXdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkarcqtaXVhXdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaHaXarVBdbaOcxfhOaHclfhHaAcufgAmbkkaKcFeaYz:tjjjbhravcufhocbhPcbhYindndndnaraiaYcdtgKfydbgAcm4aA7c:v;t;h;Ev2gvcs4av7aoGgHcdtfgXydbgOcuSmbcehvinaiaOcdtgOfydbaASmdaHavfhOavcefhvaraOaoGgHcdtfgXydbgOcu9hmbkkaXaYBdbaPhvaPcefhPxekazaOfydbhvkazaKfavBdbaYcefgYal9hmbkcuaPc8S2gOaPc;D;O;f8U0Ehvkcbhraqavcbyd1:jjjbHjjjjbbgvBd3aqcvBd2avcbaOz:tjjjbhOdnadTmbaehiinJbbnnJbbjZazaiydbgAcdtfydbgvazaiclfydbgHcdtfydbgYSavazaicwfydbgXcdtfydbgKSGgoEh8EdnaxaHcx2fgHIdbaxaAcx2fgAIdbg5:tgCaxaXcx2fgXIdlaAIdlg8A:tgwNaXIdba5:tg3aHIdla8A:tg8FN:tgLaLNa8FaXIdwaAIdwgE:tgaNawaHIdwaE:tg8FN:tgwawNa8Fa3NaaaCN:tgCaCNMM:rg3Jbbbb9ETmbaLa3:vhLaCa3:vhCawa3:vhwkaOavc8S2fgvavIdbawa8Ea3:rNg3awNNg8FMUdbavaCa3aCNgaNghavIdlMUdlavaLa3aLNg8ENggavIdwMUdwavaaawNgaavIdxMUdxava8EawNg8JavIdzMUdzava8EaCNg8EavIdCMUdCavawa3aLaENawa5Na8AaCNMM:mg8ANg5NgwavIdKMUdKavaCa5NgCavId3MUd3avaLa5NgLavIdaMUdaava5a8ANg5avId8KMUd8Kava3avIdyMUdydnaombaOaYc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava5avId8KMUd8Kava3avIdyMUdyaOaKc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava5avId8KMUd8Kava3avIdyMUdykaicxfhiarcifgrad6mbkkcbhAaqcuaPcdtgvaPcFFFFi0Egicbyd1:jjjbHjjjjbbgHBdaaqcoBd2aqaicbyd1:jjjbHjjjjbbgiBd8KaqcrBd2aHcFeavz:tjjjbhYdnalTmbazhHinJbbbbJbbjZaOaHydbgXc8S2fgvIdygw:vawJbbbb9BEavIdwaxcwfIdbgwNavIdzaxIdbgCNavIdaMgLaLMMawNavIdlaxclfIdbgLNavIdCawNavId3MgwawMMaLNavIdbaCNavIdxaLNavIdKMgwawMMaCNavId8KMMM:lNhwdndnaYaXcdtgvfgXydbcuSmbaiavfIdbaw9ETmekaXaABdbaiavfawUdbkaHclfhHaxcxfhxalaAcefgA9hmbkkJbbbbhwdnaPTmbinaiIdbgCawawaC9DEhwaiclfhiaPcufgPmbkkakcd4akfhOcehiinaigvcethiavaO6mbkcbhiaqcuavcdtgOavcFFFFi0Ecbyd1:jjjbHjjjjbbgHBdyaHcFeaOz:tjjjbhXdnadTmbavcufhrcbhPcbhxindnazaeaxcdtfgvydbcdtfydbgiazavclfydbcdtfydbgOSmbaiazavcwfydbcdtfydbgvSmbaOavSmbaYavcdtfydbhAdndnaYaOcdtfydbgvaYaicdtfydbgi9pmbavaA9pmbaAhlaihoavhAxekdnaAai9pmbaAav9pmbaihlavhoxekavhlaAhoaihAkabaPcx2fgvaABdbavcwfaoBdbavclfalBdbdnaXaoc:3F;N8N2alc:F:b:DD27aAc;D;O:B8J27arGgOcdtfgvydbgicuSmbcehHinaHhvdnabaicx2fgiydbaA9hmbaiydlal9hmbaiydwaoSmikavcefhHaXaOavfarGgOcdtfgvydbgicu9hmbkkavaPBdbaPcefhPkaxcifgxad6mbkaPci2hikdnaDmbcwhvxdkaw:rhwcwhvkaDawUdbkavcdthvdninavTmeavc98fgvaqcxffydbcbyd:m:jjjbH:bjjjbbxbkkaqc;Wbf8Kjjjjbaik:2ldwue9:8Jjjjjbc;Wb9Rgr8Kjjjjbcbhwarcxfcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkarcualcdtalcFFFFi0EgDcbyd1:jjjbHjjjjbbgqBdxarceBd2aqcbaialavcbarcxfz:djjjbcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhkarcxfaryd2gxcdtgmfakBdbaraxcefgPBd2akaialavcbcbz:ejjjb8AarcxfaPcdtfaDcbyd1:jjjbHjjjjbbgvBdbaraxcdfgiBd2arcxfaicdtfcuavalaeadaqz:fjjjbgecltaecjjjjiGEcbyd1:jjjbHjjjjbbgiBdbaiaeavakalz:gjjjbdnadTmbaoaoNhocbhwabhlcbhkindnaiavalydbgecdtfydbcdtfIdbao9ETmbalclf8PdbhsabawcdtfgqaeBdbaqclfas83dbawcifhwkalcxfhlakcifgkad6mbkkaxcifhlamarcxffcwfhkdninalTmeakydbcbyd:m:jjjbH:bjjjbbakc98fhkalcufhlxbkkarc;Wbf8Kjjjjbawk:XCoDud99vue99vuo998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:tjjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdxawceBd2aqaeadaicbcbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd1:jjjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhDcbhCadhXcbhQinaeaDcufaeaD9iEaPcefaeaP9kEhLdndnadTmbaLcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMgK:lJbbb9p9DTmbaK:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbh3cbh5indnaEaxa5cdtfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbaeaYSmbcehiinaEamaifaAGgmcdtfg8AydbgecuSmeaicefhiaeaY9hmbkka8AaYBdba3aecuSfh3a5cefg5ad9hmbxdkkazcFeasz:tjjjb8Acbh3kJbbbbh8EdnaX:ZgKaH:taL:YgOaD:Y:tg8FNaC:Zgaa3:Zgh:tNaaaH:taOaP:Y:tggNahaK:tNMg8JJbbbb9BmbaKaa:taga8FahaH:tNNNa8J:vh8EkaPaLa3ar0giEhPaCa3aiEhCdna3arSmbaLaDaiEgDaP9Rcd9imbdndnaQcl0mbdna8EaOMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPaDfcd9Theka3aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdKawclBd2aPcuf:YhKdndnadTmbaqhiaxheadhmindndnaiIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbhDcbh3indndndnaEaxa3cdtgLfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbcehiinaxaecdtgefydbaYSmdamaifheaicefhiaEaeaAGgmcdtfg8Aydbgecu9hmbkka8Aa3BdbaDhiaDcefhDxeka5aefydbhika5aLfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:tjjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBd3awcvBd2aecbaiz:tjjjbh8Aavcd4hxdnadTmbdnalTmbaxcdthEa5hYaqhealhmadhAina8AaYydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaYclfhYaecxfheamaEfhmaAcufgAmbxdkka5hmaqheadhYina8Aamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaYcufgYmbkkdnaDTmba8AhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhYawcuaDcdtgLaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBdaawcoBd2awaicbyd1:jjjbHjjjjbbgEBd8KaecFeaLz:tjjjbh3dnadTmbJbbjZJbbjZaK:vaPceSEaoNgOaONhKaxcdthxalheinaKaec;81jjbalEgmIdwa8Aa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndna3aAcdtgifgmydbcuSmbaEaifIdbaO9ETmekamaYBdbaEaifaOUdbka5clfh5aqcxfhqaeaxfheadaYcefgY9hmbkkaba3aLzMjjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Ydidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:tjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;7idqui998Jjjjjbc;Wb9Rgl8Kjjjjbalcxfcbc;Kbz:tjjjb8Aadcd4adfhvcehoinaogrcethoarav6mbkalcuarcdtgoarcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdxavcFeaoz:tjjjbhwdnadTmbaicd4hDarcufhqcbhkindndnawcbaeakaD2cdtfgrydlgiaicjjjj94SEgocH4ao7c:F:b:DD2cbarydbgxaxcjjjj94SEgocH4ao7c;D;O:B8J27cbarydwgmamcjjjj94SEgrcH4ar7c:3F;N8N27aqGgvcdtfgrydbgocuSmbam::hPai::hsax::hzcehiinaihrdnaeaoaD2cdtfgiIdbaz9CmbaiIdlas9CmbaiIdwaP9BmikarcefhiawavarfaqGgvcdtfgrydbgocu9hmbkkarakBdbakhokabakcdtfaoBdbakcefgkad9hmbkkcbhrdninarc98Smealcxfarfydbcbyd:m:jjjbH:bjjjbbarc98fhrxbkkalc;Wbf8Kjjjjbk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd:q:jjjbge9Rcifc98GaefgbBd:q:jjjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbeeeeeebebbeeebeebbbbebebbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:GNbb",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()});function o(A){for(var Z=new Uint8Array(A.length),V=0;V96?E-97:E>64?E-39:E+4}for(var G=0,V=0;V=3),a(n.exports.meshopt_generatePositionRemap,A,A.length/Z,Z)},simplify:function(A,Z,V,E,G,v){r(A instanceof Uint32Array||A instanceof Int32Array||A instanceof Uint16Array||A instanceof Int16Array),r(A.length%3==0),r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(E>=0&&E<=A.length),r(E%3==0),r(G>=0);for(var I=0,X=0;X<(v?v.length:0);++X)r(v[X]in S),I|=S[v[X]];var N=A.BYTES_PER_ELEMENT==4?A:new Uint32Array(A),g=u(n.exports.meshopt_simplify,N,A.length,Z,Z.length/V,V*4,E,G,I);return g[0]=A instanceof Uint32Array?g[0]:new A.constructor(g[0]),g},simplifyWithAttributes:function(A,Z,V,E,G,v,I,X,N,g){r(A instanceof Uint32Array||A instanceof Int32Array||A instanceof Uint16Array||A instanceof Int16Array),r(A.length%3==0),r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(E instanceof Float32Array),r(E.length==G*(Z.length/V)),r(G>=0),r(I==null||I instanceof Uint8Array),r(I==null||I.length==Z.length/V),r(X>=0&&X<=A.length),r(X%3==0),r(N>=0),r(Array.isArray(v)),r(G>=v.length),r(v.length<=32);for(var C=0;C=0);for(var R=0,C=0;C<(g?g.length:0);++C)r(g[C]in S),R|=S[g[C]];var L=A.BYTES_PER_ELEMENT==4?A:new Uint32Array(A),P=h(n.exports.meshopt_simplifyWithAttributes,L,A.length,Z,Z.length/V,V*4,E,G*4,new Float32Array(v),I,X,N,R);return P[0]=A instanceof Uint32Array?P[0]:new A.constructor(P[0]),P},simplifyWithUpdate:function(A,Z,V,E,G,v,I,X,N,g){r(A instanceof Uint32Array||A instanceof Int32Array||A instanceof Uint16Array||A instanceof Int16Array),r(A.length%3==0),r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(E instanceof Float32Array),r(E.length==G*(Z.length/V)),r(G>=0),r(I==null||I instanceof Uint8Array),r(I==null||I.length==Z.length/V),r(X>=0&&X<=A.length),r(X%3==0),r(N>=0),r(Array.isArray(v)),r(G>=v.length),r(v.length<=32);for(var C=0;C=0);for(var R=0,C=0;C<(g?g.length:0);++C)r(g[C]in S),R|=S[g[C]];var L=A.BYTES_PER_ELEMENT==4?A:new Uint32Array(A),P=p(n.exports.meshopt_simplifyWithUpdate,L,A.length,Z,Z.length/V,V*4,E,G*4,new Float32Array(v),I,X,N,R);if(A!==L)for(var C=0;C=3),b(n.exports.meshopt_simplifyScale,A,A.length/Z,Z*4)},simplifyPoints:function(A,Z,V,E,G,v){return r(A instanceof Float32Array),r(A.length%Z==0),r(Z>=3),r(V>=0&&V<=A.length/Z),E?(r(E instanceof Float32Array),r(E.length%G==0),r(G>=3),r(A.length/Z==E.length/G),f(n.exports.meshopt_simplifyPoints,A,A.length/Z,Z*4,E,G*4,v,V)):f(n.exports.meshopt_simplifyPoints,A,A.length/Z,Z*4,void 0,0,0,V)},simplifySloppy:function(A,Z,V,E,G,v){r(A instanceof Uint32Array||A instanceof Int32Array||A instanceof Uint16Array||A instanceof Int16Array),r(A.length%3==0),r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(E==null||E instanceof Uint8Array),r(E==null||E.length==Z.length/V),r(G>=0&&G<=A.length),r(G%3==0),r(v>=0);var I=A.BYTES_PER_ELEMENT==4?A:new Uint32Array(A),X=y(n.exports.meshopt_simplifySloppy,I,A.length,Z,Z.length/V,V*4,E,G,v);return X[0]=A instanceof Uint32Array?X[0]:new A.constructor(X[0]),X},simplifyPrune:function(A,Z,V,E){r(A instanceof Uint32Array||A instanceof Int32Array||A instanceof Uint16Array||A instanceof Int16Array),r(A.length%3==0),r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(E>=0);var G=A.BYTES_PER_ELEMENT==4?A:new Uint32Array(A),v=_(n.exports.meshopt_simplifyPrune,G,A.length,Z,Z.length/V,V*4,E);return v=A instanceof Uint32Array?v:new A.constructor(v),v}}})();var Nxn=x(T(),1),Pxn=(function(){var e="b9H79Tebbbe96x9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gouuuuuueu9Gruuuuuuub9Gxuuuuuuuuuuuueu9Gxuuuuuuuuuuu99eu9GPuuuuuuuuuuuuu99b9Gouuuuuub9GluuuubiCAdilvorwDqooqkbiibeilve9Weiiviebeoweuecj:Pdkr;Zeqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeY9TW79O9V9Wt9F9I919P29K9nW79O2Wt7S2W94bd39TW79O9V9Wt9F9I919P29K9nW79O2Wt79t9W9Ht9P9H2bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7bw39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bqE9TW79O9V9Wt9F9J9V9T9W91tW9t9W9OWVW9c9V919U9K7bkL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbxl79IV9RbmDwebcekdzHq:Y:beAdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek;z8JDPue99eux99due99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:pjjjb8Adndnalcb9imbaoal9nmbamcuaocdtaocFFFFi0Egscbyd;01jjbHjjjjbbgzBd:CwamceBd;8wamascbyd;01jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;01jjbHjjjjbbgOBd:KwamciBd;8waihsalhAinazasydbcdtfcbBdbasclfhsaAcufgAmbkaihsalhAinazasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkaihsalhCcbhXindnazasydbcdtgQfgAydbcb9imbaHaQfaXBdbaAaAydbgQcjjjj94VBdbaQaXfhXkasclfhsaCcufgCmbkalci9UhLdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhXaHaAydbcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaXcdtfgXaXydbgXcefBdbaOaXcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaihsalhAindnazasydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaHaCfgCaCydbaQ9RBdbkasclfhsaAcufgAmbxdkkamcuaocdtgsaocFFFFi0EgAcbyd;01jjbHjjjjbbgzBd:CwamceBd;8wamaAcbyd;01jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;01jjbHjjjjbbgOBd:KwamciBd;8wazcbasz:pjjjbhXalci9UhLaihsalhAinaXasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkdnaoTmbcbhsaHhAaXhCaohQinaAasBdbaAclfhAaCydbasfhsaCclfhCaQcufgQmbkkdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhQaHaAydbcdtfgKaKydbgKcefBdbaOaKcdtfasBdbaHaQcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaoTmbcbhsaohAinaHasfgCaCydbaXasfydb9RBdbasclfhsaAcufgAmbkkamaLcbyd;01jjbHjjjjbbgsBd:OwamclBd;8wascbaLz:pjjjbhYamcuaLcK2alcjjjjd0Ecbyd;01jjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihAa8AhsaLhrJbbbbh5inavaAclfydbaK2cdtfgCIdlh8EavaAydbaK2cdtfgXIdlhEavaAcwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgasaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbasclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyascxfa8EaE:tg8Eagah:tggNa8FaE:tg8Faaah:tgaN:tgEJbbbbJbbjZa8Ja8K:tg8Ja8FNa8La8K:tg8Ka8EN:tghahNaEaENaaa8KNaga8JN:tgEaENMM:rg8K:va8KJbbbb9BEg8ENUdbasczfaEa8ENUdbascCfaha8ENUdbascwfa8Maya8NMMJbbnn:vUdba5a8KMh5aAcxfhAascKfhsarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;01jjbHjjjjbbgCBd:WwamcoBd;8waq:Zhhdna3mbcbhsaChAinaAasBdbaAclfhAaLascefgs9hmbkkaEahNhhamcuaLcltalcFFFFd0Ecbyd;01jjbHjjjjbbg8PBd:0wamcrBd;8wcba8Pa8AaCaLcbz:djjjb8AJFFuuh8MJFFuuh8NJFFuuhydnalci6mbJFFuuhya8AhsaLhAJFFuuh8NJFFuuh8MinascwfIdbgEa8Ma8MaE9EEh8MasclfIdbgEa8Na8NaE9EEh8NasIdbgEayayaE9EEhyascKfhsaAcufgAmbkkah:rhEamaocetgscuaocu9kEcbyd;01jjbHjjjjbbgCBd:4wdndnaoal9nmbaihsalhAinaCasydbcetfcFFi87ebasclfhsaAcufgAmbxdkkaCcFeasz:pjjjb8AkaEJbbbZNh8JcuhIdnalci6mbcbhAJFFuuhEa8AhscuhIinascwfIdba8M:tghahNasIdbay:tghahNasclfIdba8N:tghahNMM:rghaEaIcuSahaE9DVgXEhEaAaIaXEhIascKfhsaLaAcefgA9hmbkkamczfcbcjwz:pjjjb8Aamcwf9cb83ibam9cb83iba8JaxNh8RJbbjZak:th8Lcbh8SJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8Ycbh8ZcbhPinJbbbbhEdna8STmbJbbjZa8S:Z:vhEkJbbbbhhdna8Ya8YNa8Wa8WNa8Xa8XNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8VaENh8Ka8UaENh8EaRaENh5aIhLdndndndndna8SaPVTmbamydwg80Tmea8YahNh8Fa8XahNhaa8WahNhgaeamydbcdtfh81cbh3JFFuuhEcvhQcuhLindnaza81a3cdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAindndnaCaiaAydbgKcx2fgsclfydbgrcetf8Vebcs4aCasydbgXcetf8Vebcs4faCascwfydbglcetf8Vebcs4fgombcbhsxekcehsazaXcdtfydbgXceSmbcehsazarcdtfydbgrceSmbcehsazalcdtfydbglceSmbdnarcdSaXcdSfalcdSfcd6mbaocefhsxekaocdfhskdnasaQ9kmba8AaKcK2fgXIdwa8K:tghahNaXIdba5:tghahNaXIdla8E:tghahNMM:ra8J:va8LNJbbjZMJ9VO:d86JbbjZaXIdCa8FNaXIdxagNaaaXIdzNMMakN:tghahJ9VO:d869DENghaEasaQ6ahaE9DVgXEhEaKaLaXEhLasaQaXEhQkaAclfhAavcufgvmbkka3cefg3a809hmbkkaLcu9hmekama8KUd:ODama8EUd:KDama5Ud:GDamcuBd:qDamcFFF;7rBdjDa8Pcba8AaYamc:GDfamc:qDfamcjDfz:ejjjbamyd:qDhLdndnaxJbbbb9ETmba8SaD6mbaLcuSmeceh3amIdjDa8R9EmixdkaLcu9hmekdna8STmbabaPcltfgzam8Pib83dbazcwfamcwf8Pib83dbaPcefhPkc3hzinazc98Smvamc:Cwfazfydbcbyd;41jjbH:bjjjbbazc98fhzxbkkcbh3a8Saq9pmbamydwaCaiaLcx2fgsydbcetf8Vebcs4aCascwfydbcetf8Vebcs4faCasclfydbcetf8Vebcs4ffaw9nmekcbhscbhAdna8ZTmbcbhAamczfhXinamczfaAcdtfaXydbgQBdbaXclfhXaAaYaQfRbbTfhAa8Zcufg8ZmbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDaAc;8eaAclfc:bd6Eh8ZinamcjDfasfcFFF;7rBdbasclfgscz9hmbka8Zcdth80dnalTmbaeaXcdtfhocbhrindnazaoarcdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAcuhQcuhsinazaiaAydbgKcx2fgXclfydbcdtfydbazaXydbcdtfydbfazaXcwfydbcdtfydbfgXasaXas6gXEhsaKaQaXEhQaAclfhAavcufgvmbkaQcuSmba8AaQcK2fgAIdwa8M:tgEaENaAIdbay:tgEaENaAIdla8N:tgEaENMM:rhEcbhAindndnasamc:qDfaAfgvydbgX6mbasaX9hmeaEamcjDfaAfIdb9FTmekavasBdbamc:GDfaAfaQBdbamcjDfaAfaEUdbxdkaAclfgAcz9hmbkkarcefgral9hmbkkamczfa80fhQcbhscbhAindnamc:GDfasfydbgXcuSmbaQaAcdtfaXBdbaAcefhAkasclfgscz9hmbkaAa8Zfg8ZTmbJFFuuhhcuhKamczfhsa8ZhvcuhQina8AasydbgXcK2fgAIdwa8M:tgEaENaAIdbay:tgEaENaAIdla8N:tgEaENMM:rhEdndnazaiaXcx2fgAclfydbcdtfydbazaAydbcdtfydbfazaAcwfydbcdtfydbfgAaQ6mbaAaQ9hmeaEah9DTmekaEhhaAhQaXhKkasclfhsavcufgvmbkaKcuSmbaKhLkdnamaiaLcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YkcbhXinaOaHaraXcdtfydbcdtgAfydbcdtfgKhsazaAfgvydbgQhAdnaQTmbdninasydbaLSmeasclfhsaAcufgATmdxbkkasaKaQcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaLcK2fgsIdbhEasIdlhhasIdwh8KasIdxh8EasIdzh5asIdCh8FaYaLfce86bba8Ya8FMh8Ya8Xa5Mh8Xa8Wa8EMh8Wa8Va8KMh8Va8UahMh8UaRaEMhRamydxh8Sxbkkamc:WDf8KjjjjbaPk:joivuv99lu8Jjjjjbca9Rgo8Kjjjjbdndnalcw0mbaiydbhraeabcitfgwalcdtciVBdlawarBdbdnalcd6mbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkkalabfhwxekcbhqaoczfcwfcbBdbao9cb83izaocwfcbBdbao9cb83ibJbbjZhkJbbjZhxinadaiaqcdtfydbcK2fhDcbhwinaoczfawfgraDawfIdbgmarIdbgP:tgsaxNaPMgPUdbaoawfgrasamaP:tNarIdbMUdbawclfgwcx9hmbkJbbjZakJbbjZMgk:vhxaqcefgqal9hmbkcbhradcbcecdaoIdlgmaoIdwgP9GEgwaoIdbgsaP9GEawasam9GEgzcdtgwfhHaoczfawfIdbhmaihwalhDinaiarcdtfgqydbhOaqawydbgABdbawaOBdbawclfhwaraHaAcK2fIdbam9DfhraDcufgDmbkdndnarcv6mbavc8X9kmbaralc98f6mekaiydbhraeabcitfgwalcdtciVBdlawarBdbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkalabfhwxekaeabcitfgwamUdbawawydlc98GazVBdlabcefaeadaiaravcefgqz:djjjbhDawawydlciGaDabcu7fcdtVBdlaDaeadaiarcdtfalar9Raqz:djjjbhwkaocaf8Kjjjjbawk;yddvue99dninabaecitfgrydlgwcl6mednawciGgDci9hmbabaecitfhbcbhecehqindnaiabydbgDfRbbmbcbhqadaDcK2fgkIdwalIdw:tgxaxNakIdbalIdb:tgxaxNakIdlalIdl:tgxaxNMM:rgxaoIdb9DTmbaoaxUdbavaDBdbarydlhwkabcwfhbaecefgeawcd46mbkaqceGTmdarawciGBdlskdnabcbawcd4gwalaDcdtfIdbarIdb:tgxJbbbb9FEgkaw7aecefgwfgecitfydlabakawfgwcitfydlVci0mbaraDBdlkabawadaialavaoz:ejjjbax:laoIdb9Fmbkkkjlevudnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0abydxaq9pVakVgDce9hmbavawcltfgxab8Pdb83dbaxcwfabcwfgx8Pdb83dbabydbhqdnaxydbgkTmbaoaqcdtfhxakhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkabaqakfBdbabydxhxab9cb83dwababydlaxci2fBdlaP8Vebhscbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk:zPrHue99eue99eue99eu8Jjjjjbc;W;Gb9Rgx8KjjjjbdndnalmbcbhmxekcbhPaxc:m;Gbfcbc;Kbz:pjjjb8Aaxcualci9UgscltascjjjjiGEcbyd;01jjbHjjjjbbgzBd:m9GaxceBd;S9GaxcuascK2gHcKfalcpFFFe0Ecbyd;01jjbHjjjjbbgOBd:q9GaxcdBd;S9Gdnalci6gAmbarcd4hCascdthXaOhQazhLinavaiaPcx2fgrydbaC2cdtfhKavarcwfydbaC2cdtfhYavarclfydbaC2cdtfh8AcbhraLhEinaQarfgmaKarfg3Idbg5a8Aarfg8EIdbg8Fa5a8F9DEg5UdbamaYarfgaIdbg8Fa5a8Fa59DEg8FUdbamcxfgma3Idbg5a8EIdbgha5ah9EEg5UdbamaaIdbgha5aha59EEg5UdbaEa8Fa5MJbbbZNUdbaEaXfhEarclfgrcx9hmbkaQcKfhQaLclfhLaPcefgPas9hmbkkaOaHfgr9cb83dbarczf9cb83dbarcwf9cb83dbaxcuascx2gralc:bjjjl0Ecbyd;01jjbHjjjjbbgCBdN9GaxciBd;S9GascdthgazarfhvaChHazhLcbhPinaxcbcj;Gbz:pjjjbhEaPas2cdthadnaAmbaLhrash3inaEarydbgmc8F91cjjjj94Vam7gmcQ4cx2fg8Ea8EydwcefBdwaEamcd4cFrGcx2fg8Ea8EydbcefBdbaEamcx4cFrGcx2fgmamydlcefBdlarclfhra3cufg3mbkkazaafh8AaCaafhXcbhmcbh3cbh8EcbhainaEamfgrydbhQara3BdbarcwfgKydbhYaKaaBdbarclfgrydbhKara8EBdbaQa3fh3aYaafhaaKa8Efh8Eamcxfgmcj;Gb9hmbkdnaAmbcbhravhminamarBdbamclfhmasarcefgr9hmbkaAmbavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cd4cFrGcx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3BdbarclfhramcufgmmbkaHhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cx4cFrGcx2fg8Ea8Eydlg8EcefBdlava8Ecdtfa3BdbarclfhramcufgmmbkavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91cjjjj94Va8E7cQ4cx2fg8Ea8Eydwg8EcefBdwaXa8Ecdtfa3BdbarclfhramcufgmmbkkaHagfhHaLagfhLaPcefgPci9hmbkaEaocetgrcuaocu9kEcbyd;01jjbHjjjjbbgKBd:y9GaEclBd;S9Gdndnaoal9nmbaihralhminaKarydbcetfcFFi87ebarclfhramcufgmmbxdkkaKcFearz:pjjjb8AkcbhmaEascbyd;01jjbHjjjjbbg8ABd:C9GaOaCaCascdtfaCascitfa8AascbazaKaiawaDaqakz:hjjjbcbh8Ednalci6gambcbh8Ea8Ahrash3ina8EarRbbfh8Earcefhra3cufg3mbkkaEcwf9cb83ibaE9cb83ibalawc9:fgrfcufar9UhrasaDfcufaD9Uh3dnaambara3ara30EhYcbhra8Ehacbhmincbh3dnarTmba8AarfRbbceSh3kamaEaiaCydbcx2fgQydbaQclfydbaQcwfydbaKabaeadamawaqa3a3ce7a8EaY9nVaaamfaY6VGz:fjjjbfhmaCclfhCaaa8AarfRbb9Rhaasarcefgr9hmbkaEydxTmbabamcltfgraE8Pib83dbarcwfaEcwf8Pib83dbamcefhmkczhrinarc98SmeaEc:m;Gbfarfydbcbyd;41jjbH:bjjjbbarc98fhrxbkkaxc;W;Gbf8Kjjjjbamk:YKDQue99lue99iul9:eur99lu8Jjjjjbc;qb9RgP8Kjjjjbaxhsaxhzdndnavax0gHmbdnavTmbcbhOaehzavhAinawaDazydbcx2fgCcwfydbcetfgX8VebhQawaCclfydbcetfgL8VebhKawaCydbcetfgC8VebhYaXce87ebaLce87ebaCce87ebaOaKcs4aYcs4faQcs4ffhOazclfhzaAcufgAmbkaehzavhAinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaAcufgAmbkcehzaqhsaOaq0mekalce86bbalcefcbavcufz:pjjjb8AxekaPaiBdxaPadBdwaPaeBdlavakaqci9Ug8Aaka8Aak6EaHEgK9RhEaxaK9Rh3aKcufh5aKceth8EaKcdtgCc98fh8FavcitgOaC9Rarfc98fhaascufhhavcufhgaraOfh8JJbbjZas:Y:vh8KaravcdtgYfc94fh8LcbazceakaxSEg8Mcdtg8N9RhyJFFuuh8PcuhIcbh8Rcbh8SinaPclfa8ScdtfydbhQaPc8WfcKfcb8Pd:y1jjbgR83ibaPc8Wfczfcb8Pd:q1jjbg8U83ibaPc8Wfcwfcb8Pd11jjbg8V83ibaPcb8Pdj1jjbg8W83i8WaPczfcKfaR83ibaPczfczfa8U83ibaPczfcwfa8V83ibaPa8W83izaQaYfh8XcbhXinabaQaXcdtgLfydbcK2fhAcbhzinaPc8WfazfgCaAazfgOIdbg8YaCIdbg8Za8Ya8Z9DEUdbaCczfgCaOcxfIdbg8YaCIdbg8Za8Ya8Z9EEUdbazclfgzcx9hmbkaPIdnaPId8W:tg80aPId9iaPIdU:tg81NhBaba8XaXcu7cdtfydbcK2fhAcbhzaPId80h83aPId9ehUinaPczfazfgCaAazfgOIdbg8YaCIdbg8Za8Ya8Z9DEUdbaCczfgCaOcxfIdbg8YaCIdbg8Za8Ya8Z9EEUdbazclfgzcx9hmbkaraLfgzaUa83:tg8Ya81Na80a8YNaBMMUdbazaYfaPId8KaPIdC:tg8YaPIdyaPIdK:tg8ZNaPIdaaPIdz:tg80a8YNa80a8ZNMMUdbaXcefgXav9hmbkcbh85dnaHmbcbhAaQhza8JhCavhXinawaDazydbcx2fgOcwfydbcetfgL8Vebh8XawaOclfydbcetfg868Vebh85awaOydbcetfgO8Vebh87aLce87eba86ce87ebaOce87ebaCaAa85cs4a87cs4fa8Xcs4ffgABdbazclfhzaCclfhCaXcufgXmbkavhCinawaDaQydbcx2fgzcwfydbcetfcFFi87ebawazclfydbcetfcFFi87ebawazydbcetfcFFi87ebaQclfhQaCcufgCmbka8Jh85kdndndndndndndndndndna8Eav0mba8Eax0meavaK6mda5aE9pmDcehLaEhXa85Tmlxrka5ag9pmwa8Eax9nmdxlkdnavavaK9UgzaK29Raza320mba5aE9pmwa85Th88ceh86aEhLxvka5ag6mixrka5ag9pmokcbhLaghXa85mikJFFuuh8YcbhQa5hzindnazcefgCaK6mbaLavaC9RgOaK6GmbarazcdtfIdbg8ZaC:YNa8Lavaz9RcdtfIdbg80aO:YNMg81a8Y9Embdndna8KaOahf:YNgB:lJbbb9p9DTmbaB:OhAxekcjjjj94hAka80asaA2aO9R:YNh80dndna8Kazasf:YNgB:lJbbb9p9DTmbaB:OhOxekcjjjj94hOkamasaO2aC9R:Ya8ZNa80MNa81Mg8Za8Ya8Za8Y9DgOEh8YaCaQaOEhQkaza8MfgzaX6mbxlkka85Th88cbh86aghLkJFFuuh8YcbhQaEhCaahAa8FhOaKhzindnazazaK9UgXaK29RaXa320mbdna86TmbaCaCaK9UgXaK29RaXa320mekaraOfIdbg8Zaz:YNaAIdbg80aC:YNMg81a8Y9EmbazhXaCh8Xdna88mba85aOfydbgXh8Xkdndna8Ka8Xahf:YNgB:lJbbb9p9DTmbaB:Oh87xekcjjjj94h87ka80asa872a8X9R:YNh80dndna8KaXahf:YNgB:lJbbb9p9DTmbaB:Oh8Xxekcjjjj94h8Xkamasa8X2aX9R:Ya8ZNa80MNa81Mg8Za8Ya8Za8Y9DgXEh8YazaQaXEhQkaCa8M9RhCaAayfhAaOa8NfhOaza8MfgzcufaL6mbxdkkJFFuuh8YcbhQaEhCaahAa8FhOaKhzindnazaK6mbaLaCaK6GmbaraOfIdbg8Zaz:YNaAIdbg80aC:YNMg81a8Y9Embdndna8Ka85aOfydbg8Xahf:YNgB:lJbbb9p9DTmbaB:Oh86xekcjjjj94h86kamasa862a8X9R:YgBa8ZNa80aBNMNa81Mg8Za8Ya8Za8Y9Dg8XEh8YazaQa8XEhQkaCa8M9RhCaAayfhAaOa8NfhOaza8MfgzcufaX6mbkkaQTmba8Ya8P9DTmba8Yh8PaQh8Ra8ShIka8Scefg8Sci9hmbkdndnaoc8X9kmbaIcb9omeka8Acufh86cbhYindndndnavaY9RaxaYaxfav0Eg8XTmbcbhAaeaYcdtfgzhCa8XhXinawaDaCydbcx2fgOcwfydbcetfgQ8VebhbawaOclfydbcetfgL8VebhrawaOydbcetfgO8VebhKaQce87ebaLce87ebaOce87ebaAarcs4aKcs4fabcs4ffhAaCclfhCaXcufgXmbka8XhOinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaOcufgOmbkaAaq0mekalaYfgzce86bbazcefcba8Xcufz:pjjjb8AxekalaYfgzce86bbazcefcba86z:pjjjb8Aa8Ah8Xka8XaYfgYav9pmdxbkkaravcdtg8XfhLdna8RTmbaPclfaIcdtfydbhza8RhCinaLazydbfcb86bbazclfhzaCcufgCmbkkdnava8R9nmbaPclfaIcdtfydba8Rcdtfhzava8R9RhCinaLazydbfce86bbazclfhzaCcufgCmbkkcbhYindnaYaISmbcbhzaraPclfaYcdtfydbgKa8Xz:ojjjbhCavhXa8RhOinaKaOazaLaCydbgQfRbbgAEcdtfaQBdbaCclfhCaOaAfhOazaA9RcefhzaXcufgXmbkkaYcefgYci9hmbkabaeadaiala8RaocefgCarawaDaqakaxamz:hjjjbabaea8Rcdtgzfadazfaiazfala8Rfava8R9RaCarawaDaqakaxamz:hjjjbkaPc;qbf8Kjjjjbk;Nkovud99euv99eul998Jjjjjbc:W;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:W:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaoc8Wfawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeaocbBd8Sao9cb83iKao9cb83izaoczfaoc8Wfawci2cxaoc8Sfcbcrz:jjjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:W:qefawcxaoc8Sfcbciz:jjjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:W:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:W:qefheaoc8WfhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabaxUd8KabasUdaabazUd3abaCaxaPN:tUdKabaXasaPN:tUdCabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabae86b8UdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabav86bRdndnazJbbj:;azJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;azJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohqxekcjjjj94hqkabaq86b8SdndnaecKtcK91:YJbb;:9c:vax:t:lavcKtcK91:YJbb;:9c:vas:t:laqcKtcK91:YJbb;:9c:vaz:t:lakMMMJbb;:9cNJbbjZMgk:lJbbb9p9DTmbak:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbkaoc:W;aef8Kjjjjbk;Iwwvul99iud99eue99eul998Jjjjjbcje9Rgr8Kjjjjbavcd4hwaicd4hDdndnaoTmbarc;abfcbaocdtgvz:pjjjb8Aarc;Gbfcbavz:pjjjb8AarhvarcafhiaohqinavcFFF97BdbaicFFF;7rBdbaiclfhiavclfhvaqcufgqmbkdnadTmbcbhkinaeakaD2cdtfgvIdwhxavIdlhmavIdbhPalakaw2cdtfIdbhsarc;abfhzarhiarc;GbfhHarcafhqc:G1jjbhvaohOinasavcwfIdbaxNavIdbaPNavclfIdbamNMMgAMhCakhXdnaAas:tgAaqIdbgQ9DgLmbaHydbhXkaHaXBdbakhXdnaCaiIdbgK9EmbazydbhXaKhCkazaXBdbaiaCUdbaqaAaQaLEUdbavcxfhvaqclfhqaHclfhHaiclfhiazclfhzaOcufgOmbkakcefgkad9hmbkkadThkJbbbbhCcbhXarc;abfhvarc;Gbfhicbhqinalavydbgzaw2cdtfIdbalaiydbgHaw2cdtfIdbaeazaD2cdtfgzIdwaeaHaD2cdtfgHIdw:tgsasNazIdbaHIdb:tgsasNazIdlaHIdl:tgsasNMM:rMMgsaCasaC9EgzEhCaqaXazEhXaiclfhiavclfhvaoaqcefgq9hmbkaCJbbbZNhKxekadThkcbhXJbbbbhKkJbbbbhCdnaearc;abfaXcdtgifydbgqaD2cdtfgvIdwaearc;GbfaifydbgzaD2cdtfgiIdwgm:tgsasNavIdbaiIdbgY:tgAaANavIdlaiIdlgP:tgQaQNMM:rgxJbbbb9ETmbaxalaqaw2cdtfIdbMalazaw2cdtfIdb:taxaxM:vhCkasaCNamMhmaQaCNaPMhPaAaCNaYMhYdnakmbaDcdthvawcdthiindnalIdbg8AaecwfIdbam:tgCaCNaeIdbaY:tgsasNaeclfIdbaP:tgAaANMM:rgQMgEaK9ETmbJbbbbhxdnaQJbbbb9ETmbaEaK:taQaQM:vhxkaxaCNamMhmaxaANaPMhPaxasNaYMhYa8AaKaQMMJbbbZNhKkaeavfhealaifhladcufgdmbkkabaKUdxabamUdwabaPUdlabaYUdbarcjef8Kjjjjbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz1jjjbarcj8Wf8Kjjjjbk:Reeeu8Jjjjjbca9Rgo8Kjjjjbab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbdnadTmbaocbBd3ao9cb83iwao9cb83ibaoaeadaialaoc3falEavcbalEcrz:jjjjbabao8Pib83dbabao8Piw83dwkaocaf8Kjjjjbk:3lequ8JjjjjbcjP9Rgl8Kjjjjbcbhvalcjxfcbaiz:pjjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjxfaDcefRbbfRbb9RcFeGci6aoalcjxfaDRbbfRbb9RcFeGci6faoalcjxfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2zMjjjb8Aakalcjxffaocefgo86bbaxalcjxffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjxffao86bbarcifhravcefgvad9hmbkalcFeaicetz:pjjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkcetfgw8UebgDcu9kmbawax87ebaocjlfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjlfaDz:ojjjb8AalcjPf8Kjjjjbk9teiucbcbyd;81jjbgeabcifc98GfgbBd;81jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;81jjbgeabcrfc94GfgbBd;81jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;81jjbge9Rcifc98GaefgbBd;81jjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkk:nedbcjwktFFuuFFuuFFuubbbbFFuFFFuFFFuFbbbbbbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;0wkxebbbdbbbjNbb",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(y){n=y.instance,n.exports.__wasm_call_ctors()});function o(y){for(var _=new Uint8Array(y.length),S=0;S96?A-97:A>64?A-39:A+4}for(var Z=0,S=0;S=3),r(A>0&&A<=256),r(Z>=1&&Z<=512),V=V||0;var E=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsFlex,E,_,_.length/S,S*4,A,Z,Z,V,0)},buildMeshletsFlex:function(y,_,S,A,Z,V,E,G){r(y.length%3==0),r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),r(A>0&&A<=256),r(Z>=1&&V<=512),r(Z<=V),E=E||0,G=G||0;var v=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsFlex,v,_,_.length/S,S*4,A,Z,V,E,G)},buildMeshletsSpatial:function(y,_,S,A,Z,V,E){r(y.length%3==0),r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),r(A>0&&A<=256),r(Z>=1&&V<=512),r(Z<=V),E=E||0;var G=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsSpatial,G,_,_.length/S,S*4,A,Z,V,E)},extractMeshlet:function(y,_){return r(_>=0&&_=3);var A=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return b(A,_,_.length/S,S*4)},computeMeshletBounds:function(y,_,S){return r(y.meshletCount!=0),r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),p(y,_,_.length/S,S*4)},computeSphereBounds:function(y,_,S,A){return r(y instanceof Float32Array),r(y.length%_==0),r(_>=3),r(!S||S instanceof Float32Array),r(!S||S.length%A==0),r(!S||A>=1),r(!S||y.length/_==S.length/A),A=A||0,f(y,y.length/_,_*4,S,A*4)}}})();var nj=class extends qi{constructor(t){super(),t=t??B.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,b,f,y,_;if(Vi(c,"EXT_meshopt_compression")){let A=c.extensions.EXT_meshopt_compression;d=A.buffer,u=A.byteOffset??0,h=A.byteLength,p=!0,b=A.byteStride,f=A.count,y=A.mode,_=A.filter??"NONE"}let S=i.buffers[d];this._hasMeshopt=p,this._meshoptByteStride=b,this._meshoptCount=f,this._meshoptMode=y,this._meshoptFilter=_,this._resourceCache=n,this._gltfResource=r,this._baseResource=s,this._buffer=S,this._bufferId=d,this._byteOffset=u,this._byteLength=h,this._cacheKey=a,this._bufferLoader=void 0,this._typedArray=void 0,this._state=ft.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=ft.LOADING,this._promise=J5e(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 J5e(e){try{let t=j5e(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);_y.decodeGltfBuffer(s,o,r,e._typedArray,e._meshoptMode,e._meshoptFilter),e._typedArray=s}return e._state=ft.READY,e}catch(t){if(e.isDestroyed())return;throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load buffer view",t)}}function j5e(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 OZ=nj;var pTn=x(T(),1);var iTn=x(T(),1);var p_=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 ue("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])}};p_._maxDecodingConcurrency=Math.max(dn.hardwareConcurrency-1,1);p_._decoderTaskProcessor=void 0;p_._taskProcessorReady=!1;p_._error=void 0;var sb=p_;var sTn=x(T(),1);var Nn={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 Q5e(e){switch(e){case Nn.POSITION:return"positionMC";case Nn.NORMAL:return"normalMC";case Nn.TANGENT:return"tangentMC";case Nn.TEXCOORD:return"texCoord";case Nn.COLOR:return"color";case Nn.JOINTS:return"joints";case Nn.WEIGHTS:return"weights";case Nn.FEATURE_ID:return"featureId";case Nn.SCALE:return"scale";case Nn.ROTATION:return"rotation";case Nn.CUMULATIVE_DISTANCE:return"cumulativeDistance"}}Nn.hasSetIndex=function(e){switch(e){case Nn.POSITION:case Nn.NORMAL:case Nn.TANGENT:case Nn.CUMULATIVE_DISTANCE:return!1;case Nn.TEXCOORD:case Nn.COLOR:case Nn.JOINTS:case Nn.WEIGHTS:case Nn.FEATURE_ID:case Nn.SCALE:case Nn.ROTATION:return!0}};Nn.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return Nn.POSITION;case"NORMAL":return Nn.NORMAL;case"TANGENT":return Nn.TANGENT;case"TEXCOORD":return Nn.TEXCOORD;case"COLOR":return Nn.COLOR;case"JOINTS":return Nn.JOINTS;case"WEIGHTS":return Nn.WEIGHTS;case"_FEATURE_ID":return Nn.FEATURE_ID;case"KHR_gaussian_splatting:SCALE":case"_SCALE":return Nn.SCALE;case"KHR_gaussian_splatting:ROTATION":case"_ROTATION":return Nn.ROTATION;case"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE":return Nn.CUMULATIVE_DISTANCE}};Nn.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return Nn.POSITION;case"RGBA":case"RGB":case"RGB565":return Nn.COLOR;case"NORMAL":case"NORMAL_OCT16P":return Nn.NORMAL;case"BATCH_ID":return Nn.FEATURE_ID}};Nn.getGlslType=function(e){switch(e){case Nn.POSITION:case Nn.NORMAL:case Nn.TANGENT:return"vec3";case Nn.TEXCOORD:return"vec2";case Nn.COLOR:return"vec4";case Nn.JOINTS:return"ivec4";case Nn.WEIGHTS:return"vec4";case Nn.FEATURE_ID:return"int";case Nn.SCALE:return"vec3";case Nn.ROTATION:return"vec4";case Nn.CUMULATIVE_DISTANCE:return"float";case Nn.OPACITY:return"float"}};Nn.getVariableName=function(e,t){let n=Q5e(e);return l(t)&&(n+=`_${t}`),n};var ot=Object.freeze(Nn);var ij=class extends qi{constructor(t){super(),t=t??B.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=ft.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=ft.LOADING,this._promise=q5e(this),this._promise)}process(t){if(this._state===ft.READY)return!0;if(this._state!==ft.PROCESSING||(l(this._dracoError)&&bde(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 b=eDe(p);l(b)&&o.accessors[i.attributes[p]].componentType===K.FLOAT&&(d.includes(b)||d.push(b))}let u={array:new Uint8Array(this._bufferViewTypedArray),bufferView:a,compressedAttributes:c,dequantizeInShader:!0,attributesToSkipTransform:d},h=sb.decodeBufferView(u);if(!l(h))return!1;this._decodePromise=$5e(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 q5e(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=ft.PROCESSING,e)}catch(n){if(e.isDestroyed())return;bde(e,n)}}function bde(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load Draco",t)}async function $5e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=ft.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var b_={};b_[ot.POSITION]="POSITION";b_[ot.NORMAL]="NORMAL";b_[ot.COLOR]="COLOR";b_[ot.TEXCOORD]="TEX_COORD";function eDe(e){for(let t in b_)if(b_.hasOwnProperty(t)&&e.startsWith(t))return b_[t]}var BZ=ij;var ETn=x(T(),1);var xTn=x(T(),1);function tDe(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 We.supportsImageBitmapOptions().then(function(c){return c?Promise.resolve(We.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new We({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 ab=tDe;var Lv=class extends qi{constructor(t){super(),t=t??B.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=ft.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=nDe(this),this._promise):(this._promise=iDe(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 gde(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 nDe(e){e._state=ft.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 rDe(i);if(e.isDestroyed())return;let r=gde(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=ft.READY,e}catch(n){return e.isDestroyed()?void 0:yde(e,n,"Failed to load embedded image")}}async function iDe(e){e._state=ft.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await aDe(i);if(e.isDestroyed())return;let r=gde(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=ft.READY,e}catch(o){return e.isDestroyed()?void 0:yde(e,o,`Failed to load image: ${n}`)}}function yde(e,t,n){return e.unload(),e._state=ft.FAILED,Promise.reject(e.getError(n,t))}function oDe(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 ue("Image format is not recognized")}async function rDe(e){let t=oDe(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return bd(n)}return Lv._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var sDe=/(^data:image\/ktx2)|(\.ktx2$)/i;function aDe(e){let t=e.getUrlComponent(!1,!0);return sDe.test(t)?bd(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}Lv._loadImageFromTypedArray=ab;var zZ=Lv;var UTn=x(T(),1);var LTn=x(T(),1),cDe={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},Gc=Object.freeze(cDe);var oj=class extends qi{constructor(t){super(),t=t??B.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,b=i.accessors[o].componentType;this._resourceCache=n,this._gltfResource=r,this._baseResource=s,this._gltf=i,this._accessorId=o,this._indexDatatype=b,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=ft.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=dDe(this),this._promise):(this._promise=uDe(this),this._promise)}process(t){if(this._state===ft.READY)return!0;if(this._state!==ft.LOADED&&this._state!==ft.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=K.fromTypedArray(n),this._indexDatatype=i)}catch(r){sj(this,r)}if(!l(n))return!1;let o;if(this._loadBuffer&&this._asynchronous){let r=lDe;if(r.set(n,i,t.context),!t.jobScheduler.execute(r,Gc.BUFFER))return!1;o=r.buffer}else this._loadBuffer&&(o=xde(n,i,t.context));return this.unload(),this._buffer=o,this._typedArray=this._loadTypedArray?n:void 0,this._state=ft.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}},rj=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=xde(this.typedArray,this.indexDatatype,this.context)}};function xde(e,t,n){let i=qe.createIndexBuffer({typedArray:e,context:n,usage:Fe.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}var lDe=new rj;async function dDe(e){e._state=ft.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=ft.LOADED,e)}catch(n){if(e.isDestroyed())return;sj(e,n)}}async function uDe(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=ft.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=mDe(e,a),e._state=ft.PROCESSING,e}catch(s){if(e.isDestroyed())return;sj(e,s)}}function mDe(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Ne.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,Ea("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Ne.UNSIGNED_BYTE?u=new Uint8Array(c,d,r):s===Ne.UNSIGNED_SHORT?u=new Uint16Array(c,d,r):s===Ne.UNSIGNED_INT&&(u=new Uint32Array(c,d,r)),u}function sj(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load index buffer",t)}var HZ=oj;var OAn=x(T(),1);var u_n=x(T(),1);var OTn=x(T(),1);function hDe(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=hDe;var QTn=x(T(),1);var HTn=x(T(),1);function fDe(e,t){return l(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var Ir=fDe;function nn(){}nn.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}}};nn.object=function(e,t){if(l(e)){let n=e.length;for(let i=0;i0)return i.byteStride}return K.getSizeInBytes(t.componentType)*uu(t.type)}var Cd=bDe;function gDe(e){Ye.accessor(e,function(n){l(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),Ye.bufferView(e,function(n){l(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),Ye.mesh(e,function(n){Ye.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)}})}),Ye.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}}),Ye.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(l(o)){let r=e.bufferViews[o];r.target=ne.ELEMENT_ARRAY_BUFFER}}),Ye.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)&&Ye.materialValue(n,function(c){l(c.index)&&g_(c)}),g_(n.emissiveTexture),g_(n.normalTexture),g_(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,g_(s.baseColorTexture),g_(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,g_(a.specularGlossinessTexture))}),Ye.animation(e,function(n){Ye.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=yDe(e);return Ye.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]}),Ye.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 yDe(e){let t={};return Ye.animation(e,function(n){Ye.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 g_(e){l(e)&&(e.texCoord=e.texCoord??0)}var Wv=gDe;var p_n=x(T(),1);function xDe(e){return Ye.shader(e,function(t){F5(t)}),Ye.buffer(e,function(t){F5(t)}),Ye.image(e,function(t){F5(t)}),F5(e),e}function F5(e){e.extras=l(e.extras)?e.extras:{},e.extras._pipeline=l(e.extras._pipeline)?e.extras._pipeline:{}}var Sy=xDe;var L_n=x(T(),1);var S_n=x(T(),1);var y_n=x(T(),1);function TDe(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 vv=TDe;function _De(e,t){let n=e.extensionsUsed;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),vv(e,t),n.length===0&&delete e.extensionsUsed}}var y_=_De;var SDe=4;function ADe(e){if(Dh(e)!=="glTF")throw new ue("File is not valid binary glTF");let n=Tde(e,0,5),i=n[1];if(i!==1&&i!==2)throw new ue("Binary glTF version is not 1 or 2");return i===1?ZDe(e,n):CDe(e,n)}function Tde(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r0){let h=u.binary_glTF??u.KHR_binary_glTF;l(h)&&(h.extras._pipeline.source=d,delete h.uri)}return y_(c,"KHR_binary_glTF"),c}function CDe(e,t){let n=t[2],i=12,o,r;for(;i0){let a=s[0];a.extras._pipeline.source=r}}return o}var x_=ADe;var I_n=x(T(),1);function VDe(e){return Ye.shader(e,function(t){I5(t)}),Ye.buffer(e,function(t){I5(t)}),Ye.image(e,function(t){I5(t)}),I5(e),e}function I5(e){l(e.extras)&&(l(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var Fv=VDe;var mAn=x(T(),1);var Y_n=x(T(),1);function RDe(e,t){let n=e.extensionsUsed;l(n)||(n=[],e.extensionsUsed=n),la(n,t,!0)}var Cm=RDe;var K_n=x(T(),1);var k_n=x(T(),1);function EDe(e){switch(e){case K.BYTE:return function(t,n,i,o,r){for(let s=0;s-1:!1}var vDe=[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 FDe(e,t){if(!l(e))return t;for(let n=0;n<4;n++)if(vDe.indexOf(e[n])===-1)return t;return e}function IDe(e){let t={},n={},i=e.techniques;return l(i)&&(Ye.technique(e,function(o,r){let s=o.states;if(l(s)){let a=n[r]={};if(_de(s,ne.BLEND)){a.alphaMode="BLEND";let c=s.functions;l(c)&&(l(c.blendEquationSeparate)||l(c.blendFuncSeparate))&&(t[r]={blendEquation:c.blendEquationSeparate??LDe,blendFactors:FDe(c.blendFuncSeparate,WDe)})}_de(s,ne.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(l(e.extensions)||(e.extensions={}),Cm(e,"KHR_blend")),Ye.material(e,function(o){if(l(o.technique)){let r=n[o.technique];Ye.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 Iv=IDe;var mSn=x(T(),1);var rSn=x(T(),1);function PDe(e,t){let n=e.extensionsRequired;l(n)||(n=[],e.extensionsRequired=n),la(n,t,!0),Cm(e,t)}var Pv=PDe;function XDe(e){let t=e.techniques,n={},i={},o={};if(l(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,Ye.technique(e,function(a,c){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(Ye.techniqueAttribute(a,function(h,p){u=a.parameters[h],d.attributes[p]={semantic:u.semantic}}),Ye.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},b=e.shaders[h.fragmentShader];p.fragmentShader=la(r.shaders,b,!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"),Pv(e,"KHR_techniques_webgl"))}return Ye.material(e,function(r){if(l(r.technique)){let s={technique:i[r.technique]};Ye.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 Xv=XDe;var ASn=x(T(),1);var gSn=x(T(),1);function NDe(e,t){Do.typeOf.object("material",e),Do.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=Ye.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 KZ=NDe;var Sde=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function YDe(e,t){return t=t??Sde,Sde.forEach(function(n){t.indexOf(n)>-1&&MDe(e,n)}),e}var wDe={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function MDe(e,t){let n=wDe[t],i=e[n];if(l(i)){let o=0,r=xp[t](e),s=i.length;for(let a=0;at&&o.attributes[c]--}),Ye.meshPrimitiveTarget(o,function(a){Ye.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})}),Ye.skin(e,function(i){l(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),Ye.animation(e,function(i){Ye.animationSampler(i,function(o){l(o.input)&&o.input>t&&o.input--,l(o.output)&&o.output>t&&o.output--})})};yp.buffer=function(e,t){e.buffers.splice(t,1),Ye.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--})};yp.bufferView=function(e,t){if(e.bufferViews.splice(t,1),Ye.accessor(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Ye.shader(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Ye.image(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Ir(e,"KHR_draco_mesh_compression")&&Ye.mesh(e,function(i){Ye.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--})}),Ir(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(Ir(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(l(o)){let r=o.length;for(let s=0;st&&u.values--,l(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,l(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};yp.image=function(e,t){e.images.splice(t,1),Ye.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})};yp.mesh=function(e,t){e.meshes.splice(t,1),Ye.node(e,function(i){l(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};yp.node=function(e,t){e.nodes.splice(t,1),Ye.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})}),Ye.animation(e,function(i){Ye.animationChannel(i,function(o){l(o.target)&&l(o.target.node)&&o.target.node>t&&o.target.node--})}),Ye.technique(e,function(i){Ye.techniqueUniform(i,function(o){l(o.node)&&o.node>t&&o.node--})}),Ye.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}))}),Ye.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};yp.material=function(e,t){e.materials.splice(t,1),Ye.mesh(e,function(i){Ye.meshPrimitive(i,function(o){l(o.material)&&o.material>t&&o.material--})})};yp.sampler=function(e,t){e.samplers.splice(t,1),Ye.texture(e,function(i){l(i.sampler)&&i.sampler>t&&--i.sampler})};yp.texture=function(e,t){if(e.textures.splice(t,1),Ye.material(e,function(i){KZ(i,function(o,r){r.index>t&&--r.index})}),Ir(e,"EXT_feature_metadata")){Ye.mesh(e,function(r){Ye.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;ht&&--b.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(Ir(e,"EXT_mesh_features")&&Ye.mesh(e,function(i){Ye.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;dt&&--u.texture.index}}}})}),Ir(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(l(o)){let r=o.length;for(let s=0;st&&--u.index}}}}};function xp(){}xp.accessor=function(e){let t={};return Ye.mesh(e,function(n){Ye.meshPrimitive(n,function(i){Ye.meshPrimitiveAttribute(i,function(r){t[r]=!0}),Ye.meshPrimitiveTarget(i,function(r){Ye.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;l(o)&&(t[o]=!0)})}),Ye.skin(e,function(n){l(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),Ye.animation(e,function(n){Ye.animationSampler(n,function(i){l(i.input)&&(t[i.input]=!0),l(i.output)&&(t[i.output]=!0)})}),Ir(e,"EXT_mesh_gpu_instancing")&&Ye.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})}),Ir(e,"CESIUM_primitive_outline")&&Ye.mesh(e,function(n){Ye.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};xp.buffer=function(e){let t={};return Ye.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};xp.bufferView=function(e){let t={};if(Ye.accessor(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Ye.shader(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Ye.image(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Ir(e,"KHR_draco_mesh_compression")&&Ye.mesh(e,function(n){Ye.meshPrimitive(n,function(i){l(i.extensions)&&l(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),Ir(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(Ir(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(l(i)){let o=i.length;for(let r=0;r0&&(t[n.mesh]=!0)}}),t};function Ade(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!Ade(e,o,n)}).length===0}xp.node=function(e){let t={};return Ye.skin(e,function(n){l(n.skeleton)&&(t[n.skeleton]=!0),Ye.skinJoint(n,function(i){t[i]=!0})}),Ye.animation(e,function(n){Ye.animationChannel(n,function(i){l(i.target)&&l(i.target.node)&&(t[i.target.node]=!0)})}),Ye.technique(e,function(n){Ye.techniqueUniform(n,function(i){l(i.node)&&(t[i.node]=!0)})}),Ye.node(e,function(n,i){Ade(e,i,t)||(t[i]=!0)}),t};xp.material=function(e){let t={};return Ye.mesh(e,function(n){Ye.meshPrimitive(n,function(i){l(i.material)&&(t[i.material]=!0)})}),t};xp.texture=function(e){let t={};if(Ye.material(e,function(n){KZ(n,function(i){t[i]=!0})}),Ir(e,"EXT_feature_metadata")){Ye.mesh(e,function(o){Ye.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;u0)for(s.mesh=n.meshes[c[0]],t=1;t0&&l(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[c[0]]}delete s.skeletons}l(s.jointName)&&delete s.jointName}),Ye.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=0&&(a=r.substring(0,s),c=r.substring(s));let d,u=lOe[a];l(u)?(d=u+c,t[r]=d):l(cOe[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)}})}),Ye.technique(e,function(n){Ye.techniqueParameter(n,function(i){let o=t[i.semantic];l(o)&&(i.semantic=o)})})}function uOe(e){Ye.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 lj(e,t){return l(t.byteStride)&&t.byteStride!==0?t.byteStride:Cd(e,t)}function mOe(e){Ye.buffer(e,function(t){l(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),Ye.accessor(e,function(t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n],o=lj(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function hOe(e){let t,n,i,o=e.bufferViews,r={};Ye.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];l(c.bufferView)&&(r[c.bufferView]=!0)});let s={};Ye.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,b){return p.byteOffset-b.byteOffset});let d=0,u=0,h=c.length;for(t=0;t=0;--r)if(i[r]===t){i.splice(r,1);return}}}),Ye.node(e,function(n,i){if(l(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),Rde(n)&&Ede(e,i))}}),delete e.nodes[t]}function pOe(e){return Ye.node(e,function(t,n){Rde(t)&&Ede(e,n)}),e}function bOe(e){Ye.animation(e,function(t){Ye.animationSampler(t,function(n){let i=e.accessors[n.input];if(!l(i.min)||!l(i.max)){let o=T_(e,i);i.min=o.min,i.max=o.max}})})}function gOe(e){Ye.accessor(e,function(t){if(l(t.min)||l(t.max)){let n=T_(e,t);l(t.min)&&(t.min=n.min),l(t.max)&&(t.max=n.max)}})}function yOe(e){e.asset=e.asset??{},e.asset.version="2.0",Vde(e),qDe(e),pOe(e),$De(e),eOe(e),nOe(e),oOe(e),mOe(e),hOe(e),fOe(e),bOe(e),gOe(e),rOe(e),sOe(e),aOe(e),dOe(e),Mv(e),uOe(e),Iv(e),Xv(e),tOe(e)}var xOe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],TOe=["u_diffuse","u_diffuse_mat"];function dj(e){e.pbrMetallicRoughness=l(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function uj(e){return l(e.index)}function mj(e){return Array.isArray(e)&&e.length===4}function Gde(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 _Oe(e,t){t=t??{};let n=t.baseColorTextureNames??xOe,i=t.baseColorFactorNames??TOe;Ye.material(e,function(o){Ye.materialValue(o,function(r,s){n.indexOf(s)!==-1&&uj(r)?(dj(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&mj(r)&&(dj(o),o.pbrMetallicRoughness.baseColorFactor=Gde(r))})}),__(e,"KHR_techniques_webgl"),__(e,"KHR_blend")}function cj(e,t){l(t)&&(mj(t)?e.pbrMetallicRoughness.baseColorFactor=Gde(t):uj(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function Cde(e,t){l(t)&&(mj(t)?e.emissiveFactor=t.slice(0,3):uj(t)&&(e.emissiveTexture=t))}function SOe(e){Ye.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;dj(t),n.technique==="CONSTANT"?(Cm(e,"KHR_materials_unlit"),t.extensions=l(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},cj(t,s),cj(t,o)):(cj(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")}),__(e,"KHR_materials_common")}var kv=zDe;var CAn=x(T(),1);function qc(){}qc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;l(n)&&l(n.message)&&(i+=` ${n.message}`);let o=new ue(i);return l(n)&&(o.stack=`Original stack: ${n.stack} Handler stack: ${o.stack}`),o};qc.getNodeTransform=function(e){return l(e.matrix)?e.matrix:F.fromTranslationQuaternionRotationScale(l(e.translation)?e.translation:m.ZERO,l(e.rotation)?e.rotation:Pe.IDENTITY,l(e.scale)?e.scale:m.ONE)};qc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;rQOe);var d=me(Ide.url)}var u="./this.program",h=Ide.url;if(c)d("node:fs"),h.startsWith("file:")&&d("node:path").dirname(d("node:url").fileURLToPath(h)),1>8&ze;return Re}var _,S,A,Z,V,E,G,v,I,X,N,g,C=!1;function R(){var me=qk.buffer;A=new Int8Array(me),V=new Int16Array(me),r.HEAPU8=Z=new Uint8Array(me),E=new Uint16Array(me),G=new Int32Array(me),v=new Uint32Array(me),r.HEAPF32=I=new Float32Array(me),X=new Float64Array(me),N=new BigInt64Array(me),g=new BigUint64Array(me)}function L(me){var oe;throw(oe=r.onAbort)==null||oe.call(r,me),me="Aborted("+me+")",b(me),f=!0,me=new WebAssembly.RuntimeError(me+". Build with -sASSERTIONS for more info."),S?.(me),me}var P;async function Y(me){return me}async function O(me){var oe=P;try{var Ae=await Y(oe);return await WebAssembly.instantiate(Ae,me)}catch(Re){b(`failed to asynchronously prepare wasm: ${Re}`),L(Re)}}async function k(me){return O(me)}var D=me=>{for(;0{var me=r.preRun.shift();z.push(me)},ee={},H=me=>{for(;me.length;){var oe=me.pop();me.pop()(oe)}};function te(me){return this.O(v[me>>2])}var $={},pe={},xe={},le=class extends Error{constructor(me){super(me),this.name="InternalError"}},Te=(me,oe,Ae)=>{function Re(At){if(At=Ae(At),At.length!==me.length)throw new le("Mismatched type converter count");for(var Vn=0;Vnxe[At]=oe);var ze=Array(oe.length),_t=[],ut=0;for(let[At,Vn]of oe.entries())pe.hasOwnProperty(Vn)?ze[At]=pe[Vn]:(_t.push(Vn),$.hasOwnProperty(Vn)||($[Vn]=[]),$[Vn].push(()=>{ze[At]=pe[Vn],++ut,ut===_t.length&&Re(ze)}));_t.length===0&&Re(ze)},Se=me=>{for(var oe="";;){var Ae=Z[me++];if(!Ae)return oe;oe+=String.fromCharCode(Ae)}},Ee=class extends Error{constructor(me){super(me),this.name="BindingError"}},Ve=me=>{throw new Ee(me)};function we(me,oe,Ae={}){var Re=oe.name;if(!me)throw new Ee(`type "${Re}" must have a positive integer typeid pointer`);if(pe.hasOwnProperty(me)){if(Ae.Aa)return;throw new Ee(`Cannot register type '${Re}' twice`)}pe[me]=oe,delete xe[me],$.hasOwnProperty(me)&&(oe=$[me],delete $[me],oe.forEach(ze=>ze()))}function ke(me,oe,Ae={}){return we(me,oe,Ae)}var nt=(me,oe,Ae)=>{switch(oe){case 1:return Ae?Re=>A[Re]:Re=>Z[Re];case 2:return Ae?Re=>V[Re>>1]:Re=>E[Re>>1];case 4:return Ae?Re=>G[Re>>2]:Re=>v[Re>>2];case 8:return Ae?Re=>N[Re>>3]:Re=>g[Re>>3];default:throw new TypeError(`invalid integer width (${oe}): ${me}`)}},bt=me=>{throw new Ee(me.M.R.N.name+" instance already deleted")},Rt=!1,He=()=>{},mt=me=>globalThis.FinalizationRegistry?(Rt=new FinalizationRegistry(oe=>{oe=oe.M,--oe.count.value,oe.count.value===0&&(oe.V?oe.Y.Z(oe.V):oe.R.N.Z(oe.P))}),mt=oe=>{var Ae=oe.M;return Ae.V&&Rt.register(oe,{M:Ae},oe),oe},He=oe=>{Rt.unregister(oe)},mt(me)):(mt=oe=>oe,me);function it(){}var rt=(me,oe)=>Object.defineProperty(oe,"name",{value:me}),jt={},Cn=(me,oe,Ae)=>{if(me[oe].U===void 0){var Re=me[oe];me[oe]=function(...ze){if(!me[oe].U.hasOwnProperty(ze.length))throw new Ee(`Function '${Ae}' called with an invalid number of arguments (${ze.length}) - expects one of (${me[oe].U})!`);return me[oe].U[ze.length].apply(this,ze)},me[oe].U=[],me[oe].U[Re.$]=Re}},ct=(me,oe,Ae)=>{if(r.hasOwnProperty(me)){if(Ae===void 0||r[me].U!==void 0&&r[me].U[Ae]!==void 0)throw new Ee(`Cannot register public name '${me}' twice`);if(Cn(r,me,me),r[me].U.hasOwnProperty(Ae))throw new Ee(`Cannot register multiple overloads of a function with the same number of arguments (${Ae})!`);r[me].U[Ae]=oe}else r[me]=oe,r[me].$=Ae},Wt=me=>{me=me.replace(/[^a-zA-Z0-9_]/g,"$");var oe=me.charCodeAt(0);return 48<=oe&&57>=oe?`_${me}`:me};function sn(me,oe,Ae,Re,ze,_t,ut,At){this.name=me,this.constructor=oe,this.ba=Ae,this.Z=Re,this.W=ze,this.va=_t,this.fa=ut,this.ta=At,this.Ca=[]}var lt=(me,oe,Ae)=>{for(;oe!==Ae;){if(!oe.fa)throw new Ee(`Expected null or instance of ${Ae.name}, got an instance of ${oe.name}`);me=oe.fa(me),oe=oe.W}return me},Xn=me=>{if(me===null)return"null";var oe=typeof me;return oe==="object"||oe==="array"||oe==="function"?me.toString():""+me};function pi(me,oe){if(oe===null){if(this.ia)throw new Ee(`null is not a valid ${this.name}`);return 0}if(!oe.M)throw new Ee(`Cannot pass "${Xn(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Ee(`Cannot pass deleted object as a pointer of type ${this.name}`);return lt(oe.M.P,oe.M.R.N,this.N)}function Di(me,oe){if(oe===null){if(this.ia)throw new Ee(`null is not a valid ${this.name}`);if(this.ha){var Ae=this.ka();return me!==null&&me.push(this.Z,Ae),Ae}return 0}if(!oe||!oe.M)throw new Ee(`Cannot pass "${Xn(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Ee(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ga&&oe.M.R.ga)throw new Ee(`Cannot convert argument of type ${oe.M.Y?oe.M.Y.name:oe.M.R.name} to parameter type ${this.name}`);if(Ae=lt(oe.M.P,oe.M.R.N,this.N),this.ha){if(oe.M.V===void 0)throw new Ee("Passing raw pointer to smart pointer is illegal");switch(this.Ha){case 0:if(oe.M.Y===this)Ae=oe.M.V;else throw new Ee(`Cannot convert argument of type ${oe.M.Y?oe.M.Y.name:oe.M.R.name} to parameter type ${this.name}`);break;case 1:Ae=oe.M.V;break;case 2:if(oe.M.Y===this)Ae=oe.M.V;else{var Re=oe.clone();Ae=this.Da(Ae,Io(()=>Re.delete())),me!==null&&me.push(this.Z,Ae)}break;default:throw new Ee("Unsupported sharing policy")}}return Ae}function Ut(me,oe){if(oe===null){if(this.ia)throw new Ee(`null is not a valid ${this.name}`);return 0}if(!oe.M)throw new Ee(`Cannot pass "${Xn(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Ee(`Cannot pass deleted object as a pointer of type ${this.name}`);if(oe.M.R.ga)throw new Ee(`Cannot convert argument of type ${oe.M.R.name} to parameter type ${this.name}`);return lt(oe.M.P,oe.M.R.N,this.N)}var bo=(me,oe,Ae)=>oe===Ae?me:Ae.W===void 0?null:(me=bo(me,oe,Ae.W),me===null?null:Ae.ta(me)),ro={},Fi=(me,oe)=>{if(oe===void 0)throw new Ee("ptr should not be undefined");for(;me.W;)oe=me.fa(oe),me=me.W;return ro[oe]},zn=(me,oe)=>{if(!oe.R||!oe.P)throw new le("makeClassHandle requires ptr and ptrType");if(!!oe.Y!=!!oe.V)throw new le("Both smartPtrType and smartPtr must be specified");return oe.count={value:1},mt(Object.create(me,{M:{value:oe,writable:!0}}))};function Dn(me,oe,Ae,Re,ze,_t,ut,At,Vn,si,gn){this.name=me,this.N=oe,this.ia=Ae,this.ga=Re,this.ha=ze,this.Ba=_t,this.Ha=ut,this.pa=At,this.ka=Vn,this.Da=si,this.Z=gn,ze||oe.W!==void 0?this.S=Di:(this.S=Re?pi:Ut,this.T=null)}var Hi=(me,oe,Ae)=>{if(!r.hasOwnProperty(me))throw new le("Replacing nonexistent public symbol");r[me].U!==void 0&&Ae!==void 0?r[me].U[Ae]=oe:(r[me]=oe,r[me].$=Ae)},Gi=(me,oe)=>{me=Se(me);var Ae=Pie.get(oe);if(typeof Ae!="function")throw new Ee(`unknown function pointer with signature ${me}: ${oe}`);return Ae};class er extends Error{}var Lr=me=>{me=ZR(me);var oe=Se(me);return Bg(me),oe},Vs=(me,oe)=>{function Ae(_t){ze[_t]||pe[_t]||(xe[_t]?xe[_t].forEach(Ae):(Re.push(_t),ze[_t]=!0))}var Re=[],ze={};throw oe.forEach(Ae),new er(`${me}: `+Re.map(Lr).join([", "]))},Wr=(me,oe)=>{for(var Ae=[],Re=0;Re>2]);return Ae};function On(me){for(var oe=1;oeut)throw new Ee("argTypes array size mismatch! Must at least get return value and 'this' types!");var At=oe[1]!==null&&Ae!==null,Vn=On(oe);Ae=!oe[0].oa;var si=oe[0],gn=oe[1];for(Re=[me,Ve,Re,ze,H,si.O.bind(si),gn?.S.bind(gn)],ze=2;ze{me=me.trim();let oe=me.indexOf("(");return oe===-1?me:me.slice(0,oe)},Ho=[],Fo=[0,1,,1,null,1,!0,1,!1,1],sa=me=>{9{if(!me)throw new Ee(`Cannot use deleted val. handle = ${me}`);return Fo[me]},Io=me=>{switch(me){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let oe=Ho.pop()||Fo.length;return Fo[oe]=me,Fo[oe+1]=1,oe}},_c={name:"emscripten::val",O:me=>{var oe=Ii(me);return sa(me),oe},S:(me,oe)=>Io(oe),X:te,T:null},Ds=(me,oe,Ae)=>{switch(oe){case 1:return Ae?function(Re){return this.O(A[Re])}:function(Re){return this.O(Z[Re])};case 2:return Ae?function(Re){return this.O(V[Re>>1])}:function(Re){return this.O(E[Re>>1])};case 4:return Ae?function(Re){return this.O(G[Re>>2])}:function(Re){return this.O(v[Re>>2])};default:throw new TypeError(`invalid integer width (${oe}): ${me}`)}},Os=(me,oe)=>{var Ae=pe[me];if(Ae===void 0)throw me=`${oe} has unknown type ${Lr(me)}`,new Ee(me);return Ae},os=(me,oe)=>{switch(oe){case 4:return function(Ae){return this.O(I[Ae>>2])};case 8:return function(Ae){return this.O(X[Ae>>3])};default:throw new TypeError(`invalid float width (${oe}): ${me}`)}},Z0=(me,oe,Ae)=>{let Re=(ze,_t)=>{let ut=0;return{next(){if(ut>=ze)return{done:!0};let At=ut;return ut++,{value:_t(At),done:!1}},[Symbol.iterator](){return this}}};me[Symbol.iterator]||(me[Symbol.iterator]=function(){let ze=this[oe]();return Re(ze,_t=>this[Ae](_t))})},_a=Object.assign({optional:!0},_c),Rs=(me,oe,Ae)=>{var Re=Z;if(!(0=ut){if(oe>=Ae)break;Re[oe++]=ut}else if(2047>=ut){if(oe+1>=Ae)break;Re[oe++]=192|ut>>6,Re[oe++]=128|ut&63}else if(65535>=ut){if(oe+2>=Ae)break;Re[oe++]=224|ut>>12,Re[oe++]=128|ut>>6&63,Re[oe++]=128|ut&63}else{if(oe+3>=Ae)break;Re[oe++]=240|ut>>18,Re[oe++]=128|ut>>12&63,Re[oe++]=128|ut>>6&63,Re[oe++]=128|ut&63,_t++}}return Re[oe]=0,oe-ze},Th=me=>{for(var oe=0,Ae=0;Ae=Re?oe++:2047>=Re?oe+=2:55296<=Re&&57343>=Re?(oe+=4,++Ae):oe+=3}return oe},Po=new TextDecoder,Yc=(me,oe,Ae,Re)=>{if(Ae=oe+Ae,Re)return Ae;for(;me[oe]&&!(oe>=Ae);)++oe;return oe},ud=new TextDecoder("utf-16le"),md=(me,oe,Ae)=>(me>>=1,ud.decode(E.subarray(me,Yc(E,me,oe/2,Ae)))),Uo=(me,oe,Ae)=>{if(Ae??(Ae=2147483647),2>Ae)return 0;Ae-=2;var Re=oe;Ae=Ae<2*me.length?Ae/2:me.length;for(var ze=0;ze>1]=me.charCodeAt(ze),oe+=2;return V[oe>>1]=0,oe-Re},Qd=me=>2*me.length,Sn=(me,oe,Ae)=>{var Re="";me>>=2;for(var ze=0;!(ze>=oe/4);ze++){var _t=v[me+ze];if(!_t&&!Ae)break;Re+=String.fromCodePoint(_t)}return Re},Ge=(me,oe,Ae)=>{if(Ae??(Ae=2147483647),4>Ae)return 0;var Re=oe;Ae=Re+Ae-4;for(var ze=0;ze>2]=_t,oe+=4,oe+4>Ae)break}return G[oe>>2]=0,oe-Re},Et=me=>{for(var oe=0,Ae=0;Ae{var oe=pn.length;return pn.push(me),oe},Ka=(me,oe)=>{for(var Ae=Array(me),Re=0;Re>2],`parameter ${Re}`);return Ae},Es=(me,oe,Ae)=>{var Re=[];return me=me(Re,Ae),Re.length&&(v[oe>>2]=Io(Re)),me},wc={},_h=me=>{var oe=wc[me];return oe===void 0?Se(me):oe},qf={},eZ=()=>{var me;if(!Bs){var oe={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((me=globalThis.navigator)==null?void 0:me.language)??"C").replace("-","_")+".UTF-8",_:u||"./this.program"},Ae;for(Ae in qf)qf[Ae]===void 0?delete oe[Ae]:oe[Ae]=qf[Ae];var Re=[];for(Ae in oe)Re.push(`${Ae}=${oe[Ae]}`);Bs=Re}return Bs},Bs,Qk=[null,[],[]];if((()=>{let me=it.prototype;Object.assign(me,{isAliasOf:function(Ae){if(!(this instanceof it&&Ae instanceof it))return!1;var Re=this.M.R.N,ze=this.M.P;Ae.M=Ae.M;var _t=Ae.M.R.N;for(Ae=Ae.M.P;Re.W;)ze=Re.fa(ze),Re=Re.W;for(;_t.W;)Ae=_t.fa(Ae),_t=_t.W;return Re===_t&&ze===Ae},clone:function(){if(this.M.P||bt(this),this.M.ea)return this.M.count.value+=1,this;var Ae=mt,Re=Object,ze=Re.create,_t=Object.getPrototypeOf(this),ut=this.M;return Ae=Ae(ze.call(Re,_t,{M:{value:{count:ut.count,da:ut.da,ea:ut.ea,P:ut.P,R:ut.R,V:ut.V,Y:ut.Y}}})),Ae.M.count.value+=1,Ae.M.da=!1,Ae},delete(){if(this.M.P||bt(this),this.M.da&&!this.M.ea)throw new Ee("Object already scheduled for deletion");He(this);var Ae=this.M;--Ae.count.value,Ae.count.value===0&&(Ae.V?Ae.Y.Z(Ae.V):Ae.R.N.Z(Ae.P)),this.M.ea||(this.M.V=void 0,this.M.P=void 0)},isDeleted:function(){return!this.M.P},deleteLater:function(){if(this.M.P||bt(this),this.M.da&&!this.M.ea)throw new Ee("Object already scheduled for deletion");return this.M.da=!0,this}});let oe=Symbol.dispose;oe&&(me[oe]=me.delete)})(),Object.assign(Dn.prototype,{wa(me){return this.pa&&(me=this.pa(me)),me},ma(me){var oe;(oe=this.Z)==null||oe.call(this,me)},X:te,O:function(me){function oe(){return this.ha?zn(this.N.ba,{R:this.Ba,P:Ae,Y:this,V:me}):zn(this.N.ba,{R:this,P:me})}var Ae=this.wa(me);if(!Ae)return this.ma(me),null;var Re=Fi(this.N,Ae);if(Re!==void 0)return Re.M.count.value===0?(Re.M.P=Ae,Re.M.V=me,Re.clone()):(Re=Re.clone(),this.ma(me),Re);if(Re=this.N.va(Ae),Re=jt[Re],!Re)return oe.call(this);Re=this.ga?Re.sa:Re.pointerType;var ze=bo(Ae,this.N,Re.N);return ze===null?oe.call(this):this.ha?zn(Re.N.ba,{R:Re,P:ze,Y:this,V:me}):zn(Re.N.ba,{R:Re,P:ze})}}),r.print&&(p=r.print),r.printErr&&(b=r.printErr),r.thisProgram&&(u=r.thisProgram),r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);0L(""),r:me=>{var oe=ee[me];delete ee[me];var Ae=oe.ka,Re=oe.Z,ze=oe.na,_t=ze.map(ut=>ut.za).concat(ze.map(ut=>ut.Fa));Te([me],_t,ut=>{var At={},Vn,si;for([Vn,si]of ze.entries()){let gn=ut[Vn],Or=si.xa,Br=si.ya,Sa=ut[Vn+ze.length],xl=si.Ea,om=si.Ga;At[si.ua]={read:C0=>gn.O(Or(Br,C0)),write:(C0,CR)=>{var qd=[];xl(om,C0,Sa.S(qd,CR)),H(qd)},optional:gn.optional}}return[{name:oe.name,O:gn=>{var Or={},Br;for(Br in At)Or[Br]=At[Br].read(gn);return Re(gn),Or},S:(gn,Or)=>{for(var Br in At)if(!(Br in Or||At[Br].optional))throw new TypeError(`Missing field: "${Br}"`);var Sa=Ae();for(Br in At)At[Br].write(Sa,Or[Br]);return gn!==null&&gn.push(Re,Sa),Sa},X:te,T:Re}]})},o:(me,oe,Ae,Re,ze)=>{oe=Se(oe),Re=Re===0n;let _t=ut=>ut;if(Re){let ut=8*Ae;_t=At=>BigInt.asUintN(ut,At),ze=_t(ze)}ke(me,{name:oe,O:_t,S:(ut,At)=>(typeof At=="number"&&(At=BigInt(At)),At),X:nt(oe,Ae,!Re),T:null})},C:(me,oe,Ae,Re)=>{oe=Se(oe),ke(me,{name:oe,O:function(ze){return!!ze},S:function(ze,_t){return _t?Ae:Re},X:function(ze){return this.O(Z[ze])},T:null})},k:(me,oe,Ae,Re,ze,_t,ut,At,Vn,si,gn,Or,Br)=>{gn=Se(gn),_t=Gi(ze,_t),At&&(At=Gi(ut,At)),si&&(si=Gi(Vn,si)),Br=Gi(Or,Br);var Sa=Wt(gn);ct(Sa,function(){Vs(`Cannot construct ${gn} due to unbound types`,[Re])}),Te([me,oe,Ae],Re?[Re]:[],xl=>{if(xl=xl[0],Re)var om=xl.N,C0=om.ba;else C0=it.prototype;xl=rt(gn,function(...lH){if(Object.getPrototypeOf(this)!==CR)throw new Ee(`Use 'new' to construct ${gn}`);if(qd.aa===void 0)throw new Ee(`${gn} has no accessible constructor`);var Xie=qd.aa[lH.length];if(Xie===void 0)throw new Ee(`Tried to invoke ctor of ${gn} with invalid number of parameters (${lH.length}) - expected (${Object.keys(qd.aa).toString()}) parameters instead!`);return Xie.apply(this,lH)});var CR=Object.create(C0,{constructor:{value:xl}});xl.prototype=CR;var qd=new sn(gn,xl,CR,Br,om,_t,At,si);if(qd.W){var VR;(VR=qd.W).la??(VR.la=[]),qd.W.la.push(qd)}return om=new Dn(gn,qd,!0,!1,!1),VR=new Dn(gn+"*",qd,!1,!1,!1),C0=new Dn(gn+" const*",qd,!1,!0,!1),jt[me]={pointerType:VR,sa:C0},Hi(Sa,xl),[om,VR,C0]})},g:(me,oe,Ae,Re,ze,_t)=>{var ut=Wr(oe,Ae);ze=Gi(Re,ze),Te([],[me],At=>{At=At[0];var Vn=`constructor ${At.name}`;if(At.N.aa===void 0&&(At.N.aa=[]),At.N.aa[oe-1]!==void 0)throw new Ee(`Cannot register multiple constructors with identical number of parameters (${oe-1}) for class '${At.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return At.N.aa[oe-1]=()=>{Vs(`Cannot construct ${At.name} due to unbound types`,ut)},Te([],ut,si=>(si.splice(1,0,null),At.N.aa[oe-1]=go(Vn,si,null,ze,_t),[])),[]})},b:(me,oe,Ae,Re,ze,_t,ut,At,Vn)=>{var si=Wr(Ae,Re);oe=Se(oe),oe=En(oe),_t=Gi(ze,_t),Te([],[me],gn=>{function Or(){Vs(`Cannot call ${Br} due to unbound types`,si)}gn=gn[0];var Br=`${gn.name}.${oe}`;oe.startsWith("@@")&&(oe=Symbol[oe.substring(2)]),At&&gn.N.Ca.push(oe);var Sa=gn.N.ba,xl=Sa[oe];return xl===void 0||xl.U===void 0&&xl.className!==gn.name&&xl.$===Ae-2?(Or.$=Ae-2,Or.className=gn.name,Sa[oe]=Or):(Cn(Sa,oe,Br),Sa[oe].U[Ae-2]=Or),Te([],si,om=>(om=go(Br,om,gn,_t,ut,Vn),Sa[oe].U===void 0?(om.$=Ae-2,Sa[oe]=om):Sa[oe].U[Ae-2]=om,[])),[]})},A:me=>ke(me,_c),s:(me,oe,Ae,Re,ze)=>{switch(oe=Se(oe),ze=ze===0?"object":ze===1?"number":"string",ze){case"object":let ut=function(){};ut.values={},ke(me,{name:oe,constructor:ut,valueType:ze,O:function(At){return this.constructor.values[At]},S:(At,Vn)=>Vn.value,X:Ds(oe,Ae,Re),T:null}),ct(oe,ut);break;case"number":var _t={};ke(me,{name:oe,ja:_t,valueType:ze,O:At=>At,S:(At,Vn)=>Vn,X:Ds(oe,Ae,Re),T:null}),ct(oe,_t),delete r[oe].$;break;case"string":_t={},ke(me,{name:oe,ra:{},qa:{},ja:_t,valueType:ze,O:function(At){return this.qa[At]},S:function(At,Vn){return this.ra[Vn]},X:Ds(oe,Ae,Re),T:null}),ct(oe,_t),delete r[oe].$}},d:(me,oe,Ae)=>{var Re=Os(me,"enum");switch(oe=Se(oe),Re.valueType){case"object":me=Re.constructor,Re=Object.create(Re.constructor.prototype,{value:{value:Ae},constructor:{value:rt(`${Re.name}_${oe}`,function(){})}}),me.values[Ae]=Re,me[oe]=Re;break;case"number":Re.ja[oe]=Ae;break;case"string":Re.ra[oe]=Ae,Re.qa[Ae]=oe,Re.ja[oe]=oe}},n:(me,oe,Ae)=>{oe=Se(oe),ke(me,{name:oe,O:Re=>Re,S:(Re,ze)=>ze,X:os(oe,Ae),T:null})},m:(me,oe,Ae,Re,ze,_t,ut)=>{var At=Wr(oe,Ae);me=Se(me),me=En(me),ze=Gi(Re,ze),ct(me,function(){Vs(`Cannot call ${me} due to unbound types`,At)},oe-1),Te([],At,Vn=>(Vn=[Vn[0],null].concat(Vn.slice(1)),Hi(me,go(me,Vn,null,ze,_t,ut),oe-1),[]))},c:(me,oe,Ae,Re,ze)=>{oe=Se(oe);let _t=At=>At;if(Re===0){var ut=32-8*Ae;_t=At=>At<>>ut,ze=_t(ze)}ke(me,{name:oe,O:_t,S:(At,Vn)=>Vn,X:nt(oe,Ae,Re!==0),T:null})},j:(me,oe,Ae,Re)=>{Ae=Se(Ae),Re=Se(Re),Te([],[me,oe],ze=>(Z0(ze[0].N.ba,Ae,Re),[]))},a:(me,oe,Ae)=>{function Re(_t){return new ze(A.buffer,v[_t+4>>2],v[_t>>2])}var ze=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][oe];Ae=Se(Ae),ke(me,{name:Ae,O:Re,X:Re},{Aa:!0})},h:me=>{ke(me,_a)},B:(me,oe)=>{oe=Se(oe),ke(me,{name:oe,O(Ae){var Re=(Re=Ae+4)?Po.decode(Z.subarray(Re,Yc(Z,Re,v[Ae>>2],!0))):"";return Bg(Ae),Re},S(Ae,Re){Re instanceof ArrayBuffer&&(Re=new Uint8Array(Re));var ze=typeof Re=="string";if(!(ze||ArrayBuffer.isView(Re)&&Re.BYTES_PER_ELEMENT==1))throw new Ee("Cannot pass non-string to std::string");var _t=ze?Th(Re):Re.length,ut=cH(4+_t+1),At=ut+4;return v[ut>>2]=_t,ze?Rs(Re,At,_t+1):Z.set(Re,At),Ae!==null&&Ae.push(Bg,ut),ut},X:te,T(Ae){Bg(Ae)}})},f:(me,oe,Ae)=>{if(Ae=Se(Ae),oe===2)var Re=md,ze=Uo,_t=Qd;else Re=Sn,ze=Ge,_t=Et;ke(me,{name:Ae,O:ut=>{var At=Re(ut+4,v[ut>>2]*oe,!0);return Bg(ut),At},S:(ut,At)=>{if(typeof At!="string")throw new Ee(`Cannot pass non-string to C++ string type ${Ae}`);var Vn=_t(At),si=cH(4+Vn+oe);return v[si>>2]=Vn/oe,ze(At,si+4,Vn+oe),ut!==null&&ut.push(Bg,si),si},X:te,T(ut){Bg(ut)}})},i:(me,oe,Ae,Re,ze,_t)=>{ee[me]={name:Se(oe),ka:Gi(Ae,Re),Z:Gi(ze,_t),na:[]}},e:(me,oe,Ae,Re,ze,_t,ut,At,Vn,si)=>{ee[me].na.push({ua:Se(oe),za:Ae,xa:Gi(Re,ze),ya:_t,Fa:ut,Ea:Gi(At,Vn),Ga:si})},D:(me,oe)=>{oe=Se(oe),ke(me,{oa:!0,name:oe,O:()=>{},S:()=>{}})},q:(me,oe,Ae)=>{var[Re,...ze]=Ka(me,oe);oe=Re.S.bind(Re);var _t=ze.map(Vn=>Vn.X.bind(Vn));me--;var ut={toValue:Ii};switch(me=_t.map((Vn,si)=>{var gn=`argFromPtr${si}`;return ut[gn]=Vn,`${gn}(args${si?"+"+8*si:""})`}),Ae){case 0:var At="toValue(handle)";break;case 2:At="new (toValue(handle))";break;case 3:At="";break;case 1:ut.getStringOrSymbol=_h,At="toValue(handle)[getStringOrSymbol(methodName)]"}return At+=`(${me})`,Re.oa||(ut.toReturnWire=oe,ut.emval_returnValue=Es,At=`return emval_returnValue(toReturnWire, destructorsRef, ${At})`),At=`return function (handle, methodName, destructorsRef, args) { ${At} }`,Ae=new Function(Object.keys(ut),At)(...Object.values(ut)),At=`methodCaller<(${ze.map(Vn=>Vn.name)}) => ${Re.name}>`,yr(rt(At,Ae))},F:sa,p:(me,oe,Ae,Re,ze)=>pn[me](oe,Ae,Re,ze),E:me=>{var oe=Ii(me);H(oe),sa(me)},t:(me,oe,Ae,Re)=>{var ze=new Date().getFullYear(),_t=new Date(ze,0,1).getTimezoneOffset();ze=new Date(ze,6,1).getTimezoneOffset(),v[me>>2]=60*Math.max(_t,ze),G[oe>>2]=+(_t!=ze),oe=ut=>{var At=Math.abs(ut);return`UTC${0<=ut?"-":"+"}${String(Math.floor(At/60)).padStart(2,"0")}${String(At%60).padStart(2,"0")}`},me=oe(_t),oe=oe(ze),ze<_t?(Rs(me,Ae,17),Rs(oe,Re,17)):(Rs(me,Re,17),Rs(oe,Ae,17))},z:me=>{var oe=Z.length;if(me>>>=0,2147483648=Ae;Ae*=2){var Re=oe*(1+.2/Ae);Re=Math.min(Re,me+100663296);e:{Re=(Math.min(2147483648,65536*Math.ceil(Math.max(me,Re)/65536))-qk.buffer.byteLength+65535)/65536|0;try{qk.grow(Re),R();var ze=1;break e}catch{}ze=void 0}if(ze)return!0}return!1},u:(me,oe)=>{var Ae=0,Re=0,ze;for(ze of eZ()){var _t=oe+Ae;v[me+Re>>2]=_t,Ae+=Rs(ze,_t,1/0)+1,Re+=4}return 0},v:(me,oe)=>{var Ae=eZ();v[me>>2]=Ae.length,me=0;for(var Re of Ae)me+=Th(Re)+1;return v[oe>>2]=me,0},w:()=>52,x:function(){return 70},l:(me,oe,Ae,Re)=>{for(var ze=0,_t=0;_t>2],At=v[oe+4>>2];oe+=8;for(var Vn=0;Vn>2]=ze,0}},$k;return $k=await(async function(){function me(Ae){return Ae=$k=Ae.exports,ZR=Ae.J,cH=r._malloc=Ae.K,Bg=r._free=Ae.L,qk=Ae.G,Pie=Ae.I,R(),$k}var oe={a:KGe};return r.instantiateWasm?new Promise(Ae=>{r.instantiateWasm(oe,(Re,ze)=>{Ae(me(Re))})}):(P??(P=y(`\0asm\0\0\0\xD79\`\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\0\0\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~~~\0\`\0\x7F\` \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F~\x7F\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~~\x7F\0\`\x7F~\x7F~\`\x7F\x7F~\x7F\x7F\0\` \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\f\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F~\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F~~\x7F\`\x7F\x7F\x7F\x7F~~\x7F\`\x7F\x7F\x7F\x7F|\x7F\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F\x7F\x7F\x7F\x7F|\`\x7F~\x7F\x7F\x7F\`\x7F~\0\`\x7F|\0\`~~~~\x7F\`~\x7F\x7F\`\x7F\x7F\x7F~\x7F\0\`\x7F\x7F\x7F~~\`~~|\`\x7F|\`\x7F\x7F\x7F|\`\x7F\x7F\x7F}\`\x7F\x7F~\0\`~~}\`\x7F\x7F~\`\x7F~~~\0\`~~~\x7F\`|\x7F|\`\x7F\x7F\x7F}\x7F\`\x7F\x7F\x7F}\0\`\x7F\x7F}\0\xC1 aa\0\x07ab\0ac\0 ad\0\x07ae\0af\0\x07ag\0\vah\0ai\0\vaj\0\bak\0"al\0am\0an\0\x07ao\0#ap\0$aq\0ar\0as\0 at\0\bau\0av\0aw\0\0ax\0%ay\0\raz\0\0aA\0aB\0aC\0\baD\0aE\0aF\0\x8D\x8B\0\0\0\0\r\x07\0\b \0\0\0\0\0\0\0\0\0\0\0&\0\0 \0\0\0'\0\f\f\0\r(\x07\r\x07\0\0\0\0\0)\0 \x07\x07\0\r \0\0\0* \r\0\0 \v\b\x07\0\0  \b\0+\0\0,\x07-\0\r\0\x07\b\0\x07\b\x07\x07\x07\0\0 \f\f \f\f\0 \f\0\0\0\x1B\x1B\0\0 \0\0\x07\v \v\v \v\v\0\r\b./\x07\0012\b34\0 \0\0\0\0\0\0\b\0\b\0 5\0\b\x07678\x07\x07\v\v\v \b\b\b\x07\0\0\0\0\0\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0 \0 \f\f\x07 \0 \x07\v\v\0\f\f !  !  \0\b\b \b \0\0\b\0\0\0\0\0\0\0\0\0\0\b\0\r\x07p\xFD\xFD\x07\x82\x80\x80\b\x7FA\xC0\xEC\v\x07\x1BG\0H\0\xAAI\0J\0\xD4K\0/L\0! \xAE\0A\v\xFC\x95\xF3\xEF\xD4\xCD\xC9\x81\xFA\xBE\xB7\xAE\xA5\x9D\x9B\x81\xFA\x91\x87\xFC\xF1\xEF\xEE\xEA\xD8\xD7\xE1\xE0\xDF\xDE\xDD,\xD8\xD7\xD5\xDC\xDB\xD3\xDA\xD9\xD5\xD8\xD7\xD3\xD6\xD5\xCC\xD3\xD28\xA9\xA8\xA7\xA6\xC3\xA3\xC2\xA2\xA1\xA088\x9F\x9E\x9D\xC6\x9C\xC6\xB0\x8C\x8D\x8B\x90\x8F\x8E\x81\xC0\x8A\x89\x88\x87\x95\xC1\x94\x92\x93\x91\x9B\xC5\x9A\x99\x98\xC1\x97\x96K\x86\x85\x84\xA0!\xF2\x8D\x8B\x89\x86\x84\x82\x80\xFE\xFB\xF9\xF7\xF5\xF3\xF0\xF5\xBD\xBC\xF0\xAF\xAD\xAC\xAB\xAA\xF1\xA9\xA8\xA7\xF6\xA4\xA3\xA2\xA1\xA08\x9F\x9E\xE6\x9C\x99\x97\x95\x93\x90\xE5\x9A\x98\x96\x94\x92\x8Fq,,\xBB\xBA\xB9\xB8\xB6\xB5\xB4\xB3\xF1\xB2\xB1\xB0,\xEF\xEF{\xA1\xA1\xA6\xA1,\xEC\xEB{88\xEA\x8B,\xEC\xEB{88\xEA\x8B,\xE9\xE8{88\xE7\x8B,\xE9\xE8{88\xE7\x8Bq,\x83\x82\x81q,\x80\xFF\xFE,\xFD\xFC\xFB\xFA\x9E\x9E\xF9\xF8\xF7\xF6\xF5,\xF4\xF2\xF1\xF0\x97\x97\xEE\xED\xEC\xEB\xEA,\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2,\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDAq,\x8F\xD9\xD8\xD7\xD6\xD5\xD3\x8E\x8A\x85\xF8\xF4\x81\xFDq,\x8F\xD2\xD1\xD0\xCF\xCE\xCC\x8C\x88\x83\xF6\xF2\xFF\xFA\xAE\xE4\xCB\xAE\xE4\xCA,\x8E\x8EFFF\x878[[,\x8E\x8EFFF\x878[[,\x8D\x8DFFF\x868[[,\x8D\x8DFFF\x868[[,\xC8\xC7,\xC6\xC5,\xC4\xC3,\xC2\xC1,\xF7\xC0\xC2,\xF7\xBF\xC2\xA4\xA5q,\xA0\xA0\xDB,\xDB,\xED\xE2\xE5\xEC,\xE3\xE6\xEB,\xE4\xE7\xE9,\xE8\f( \xC9\xCB\b\x8B\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0\v\x82\f\b\x7F@ \0E\r\0 \0A\bk" \0Ak(\0"Axq"\0j!@ Aq\r\0 AqE\r  (\0"k"A\x8C\xD8(\0I\r \0 j!\0@@@A\x90\xD8(\0 G@ (\f! A\xFFM@  (\b"G\rA\xFC\xD7A\xFC\xD7(\0A~ Avwq6\0\f\v (!\x07  G@ (\b" 6\f  6\b\f\v ("\x7F Aj ("E\r Aj\v!@ ! "Aj! ("\r\0 Aj! ("\r\0\v A\x006\0\f\v ("AqAG\rA\x84\xD8 \x006\0  A~q6  \0Ar6  \x006\0\v  6\f  6\b\f\vA\0!\v \x07E\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ wq6\0\f\v@  \x07(F@ \x07 6\f\v \x07 6\v E\r\v  \x076 ("@  6  6\v ("E\r\0  6  6\v  O\r\0 ("AqE\r\0@@@@ AqE@A\x94\xD8(\0 F@A\x94\xD8 6\0A\x88\xD8A\x88\xD8(\0 \0j"\x006\0  \0Ar6 A\x90\xD8(\0G\rA\x84\xD8A\x006\0A\x90\xD8A\x006\0\vA\x90\xD8(\0"\x07 F@A\x90\xD8 6\0A\x84\xD8A\x84\xD8(\0 \0j"\x006\0  \0Ar6 \0 j \x006\0\v Axq \0j!\0 (\f! A\xFFM@ (\b" F@A\xFC\xD7A\xFC\xD7(\0A~ Avwq6\0\f\v  6\f  6\b\f\v (!\b  G@ (\b" 6\f  6\b\f\v ("\x7F Aj ("E\r Aj\v!@ ! "Aj! ("\r\0 Aj! ("\r\0\v A\x006\0\f\v  A~q6  \0Ar6 \0 j \x006\0\f\vA\0!\v \bE\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ wq6\0\f\v@  \b(F@ \b 6\f\v \b 6\v E\r\v  \b6 ("@  6  6\v ("E\r\0  6  6\v  \0Ar6 \0 j \x006\0  \x07G\r\0A\x84\xD8 \x006\0\v \0A\xFFM@ \0A\xF8qA\xA4\xD8j!\x7FA\xFC\xD7(\0"A \0Avt"\0qE@A\xFC\xD7 \0 r6\0 \f\v (\b\v!\0  6\b \0 6\f  6\f  \x006\b\vA! \0A\xFF\xFF\xFF\x07M@ \0A& \0A\bvg"kvAq AtrA>s!\v  6 B\x007 AtA\xAC\xDAj!\x7F@\x7FA\x80\xD8(\0"A t"qE@A\x80\xD8  r6\0  6\0A!A\b\f\v \0A AvkA\0 AG\x1Bt! (\0!@ "(Axq \0F\r Av! At!  Aqj"("\r\0\v  6A! !A\b\v!\0 "\f\v (\b" 6\f  6\bA!\0A\b!A\0\v!  j 6\0  6\f \0 j 6\0A\x9C\xD8A\x9C\xD8(\0Ak"\0A\x7F \0\x1B6\0\v\v\xA0\x7F \0( \0,\0\v" A\0H\x1B" I@  k"@\x7F  \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B" \0(  \x1B"kM@ Av\f\v \0   j k  \xA4 \0-\0\v\v! \0(\0 \0 \xC0A\0H\x1B" j! !@ @ A\0:\0\0 Ak! Aj!\f\v\v  j!@ \0,\0\vA\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  jA\0:\0\0\v\v@ \0,\0\vA\0H@ \0 6 \0(\0!\0\f\v \0 A\xFF\0q:\0\v\v \0 jA\0:\0\0\v0\x7F@ \0A\xEC\xDEF\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v\v%\0 \0 ("\x006\0 \0A\xEC\xDEG@ \0 \0(Aj6\v\v\x8B\x7F~@ \0)p"PE  \0)x \0(" \0(,"k\xAC|"WqE@#\0Ak"$\0A\x7F!@ \0\xC8\r\0 \0 AjA \0( \0AG\r\0 -\0!\v Aj$\0 "A\0N\r \0(! \0(,!\v \0B\x7F7p \0 6h \0   k\xAC|7xA\x7F\v B|! \0(! \0(\b!@ \0)p"P\r\0  }"  k\xACY\r\0  \xA7j!\v \0 6h \0  \0(,"\0 k\xAC|7x \0 O@ Ak :\0\0\v \v\xB1\x7F@ \xA5" \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B"M@ \0(\0 \0 \x1B!@ \x7F At"@   \xFC \0\0\v \0,\0\v Av\v\xC0A\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  AtjA\x006\0\f\v \0   k \0(  \x1B"\0A\0 \0  \xDE\v\v\r\0 \0  y\xE0\v\0 \0\xBC \xBCsAs\v\0 \0\xBD \xBDsAs\v\xE5\x7FA\xE8\xDE-\0\0@A\xE4\xDE(\0\v#\0A k"$\0@@@ A\bj" \0At"j\x7FA \0tA\xFF\xFF\xFF\xFF\x07q"ArE@ (\0\f\v \0A\xAFA\xD7 \x1B\xBB\v"6\0 A\x7FF\r \0Aj"\0AG\r\0\vA\0\xBAE@A\xF8\xFC\0! A\xF8\xFC\0AhE\rA\x90\xFD\0! A\x90\xFD\0AhE\rA\0!\0A\xA8\xDC-\0\0E@@ \0At \0A\xD7\xBB6\xF8\xDB \0Aj"\0AG\r\0\vA\xA8\xDCA:\0\0A\x90\xDCA\xF8\xDB(\x006\0\vA\xF8\xDB! A\bj"\0A\xF8\xDBAhE\rA\x90\xDC! \0A\x90\xDCAhE\rA/"E\r\v  )7  )7\b  )\b7\0\f\vA\0!\v A j$\0A\xE8\xDEA:\0\0A\xE4\xDE 6\0 \v\xCB \x7F ~#\0A\xE0\0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83"\fB \x88! B0\x88\xA7A\xFF\xFFq!\x07@@ B0\x88\xA7A\xFF\xFFq" A\xFF\xFFkA\x82\x80~O@ \x07A\xFF\xFFkA\x81\x80~K\r\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"\rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T \rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\v\f\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\v !\f\v  \rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  \x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\vB\0!\f\v \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\vB\0!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  \r\x84B\0!P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\v\f\v \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\v\f\v  \r\x84P@B\0!\f\v  \x84P@B\0!\f\v \rB\xFF\xFF\xFF\xFF\xFF\xFF?X@ A\xD0\0j  \f  \f \fP"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6A k! )X"\fB \x88! )P!\v B\xFF\xFF\xFF\xFF\xFF\xFF?V\r\0 A@k   P"\b\x1ByB\xC0\0B\0 \b\x1B|\xA7"\bAk6  \bkAj! )H! )@!\v \x07 j jA\xFF\xFF\0k!@ B\x86"B \x88B\x80\x80\x80\x80\b\x84" B \x88"~" B\x86"B \x88" B\x80\x80\x84"\r~|" T\xAD  B1\x88 \x84B\xFF\xFF\xFF\xFF\x83" \fB\xFF\xFF\xFF\xFF\x83"\f~|" T\xAD|  \r~|   B\x80\x80\xFE\xFF\x83" \f~"  ~|" T\xAD    B\xFF\xFF\xFF\xFF\x83"~|"V\xAD||"V\xAD|  \r~"  \f~|" T\xADB \x86 B \x88\x84|   B \x86|"V\xAD|  \r ~"\r \f~|"\f  ~|"  ~|"B \x88  V\xAD \f \rT\xAD  \fT\xAD||B \x86\x84|" T\xAD|    ~"\f  ~|"B \x88  \fT\xADB \x86\x84|" T\xAD B \x86|" T\xAD||" T\xAD|  B \x86"  ~|" T\xAD|" T\xAD|" T\xAD|"B\x80\x80\x80\x80\x80\x80\xC0\0\x83PE@ Aj!\f\v B?\x88 B\x86 B?\x88\x84! B\x86 B?\x88\x84! B\x86! B\x86\x84!\v A\xFF\xFFN@ \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\vB\0!\f\v~ A\0L@A k"\x07A\xFF\0M@ A0j   A\xFF\0j"6 A j   6 Aj   \x07g    \x07g )0 )8\x84B\0R\xAD ) )\x84\x84! )( )\x84! )\0! )\b\f\vB\0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \xADB0\x86\x84\v \v\x84!\v P B\0Y B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7FQ\x1BE@ \v B|"P\xAD|!\v\f\v  B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x85\x84PE@ !\f\v \v  B\x83|" T\xAD|!\v\v \0 7\0 \0 \v7\b A\xE0\0j$\0\v\0 \0!\vr\x7F#\0Ak"$\0  \x006 \0(\0A\x7FG@  Aj6\f  A\fj6\b A\bj!@ \0(\0AF\r\0\v \0(\0E@ \0A6\0 \xF2 \0A\x7F6\0\v\v \0( Aj$\0Ak\v\xB2\x7F#\0Ak"$\0 \0 \0(Aj6  \x006\f@A\xF8\xDE(\0A\xF4\xDE(\0"\0kAu M\x7F@ Aj"\0A\xF8\xDE(\0A\xF4\xDE(\0"kAu"K@#\0A k"\x07$\0@ \0 k"A\xFC\xDE(\0A\xF8\xDE(\0"kAuM@A\xF4\xDE \xB9\f\v A\xF4\xDE(\0kAu j"\0A\x80\x80\x80\x80O@0\0\vA\xFF\xFF\xFF\xFFA\xFC\xDE(\0A\xF4\xDE(\0k"Au" \0 \0 I\x1B A\xFC\xFF\xFF\xFF\x07O\x1B!A\xF8\xDE(\0A\xF4\xDE(\0kAu!A\0! \x07A\fj"\0A\x80\xDF6 \0A\x006\f @A\x80\xDF \xE3!\v \0 6\0 \0  Atj"6\b \0  Atj6\f \0 6 \0 \xCFA\xF4\xDE \0\x96 \0\xD4 \0(\0"@ \0(\f \0( \xE2\v\v \x07A j$\0\f\v \0 I@A\xF8\xDE  \0Atj6\0\v\vA\xF4\xDE(\0 \0\v Atj(\0"\0E\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v (\f!\0 A\x006\fA\xF4\xDE(\0 Atj \x006\0 (\f!\0 A\x006\f@ \0E\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v Aj$\0\v\xBC(\v\x7F#\0Ak" $\0@@@@@@@@@@ \0A\xF4M@A\xFC\xD7(\0"A \0A\vjA\xF8q \0A\vI\x1B"Av"\0v"Aq@@ A\x7FsAq \0j"At"A\xA4\xD8j"\0 (\xAC\xD8"(\b"F@A\xFC\xD7 A~ wq6\0\f\v  \x006\f \0 6\b\v A\bj!\0  Ar6  j" (Ar6\f\v\v A\x84\xD8(\0"\bM\r @@A \0t"A\0 kr  \0tqh"At"A\xA4\xD8j" (\xAC\xD8"\0(\b"F@A\xFC\xD7 A~ wq"6\0\f\v  6\f  6\b\v \0 Ar6 \0 j"\x07  k"Ar6 \0 j 6\0 \b@ \bAxqA\xA4\xD8j!A\x90\xD8(\0!\x7F A \bAvt"qE@A\xFC\xD7  r6\0 \f\v (\b\v!  6\b  6\f  6\f  6\b\v \0A\bj!\0A\x90\xD8 \x076\0A\x84\xD8 6\0\f\v\vA\x80\xD8(\0"\vE\r \vhAt(\xAC\xDA"(Axq k! !@@ ("\0E@ ("\0E\r\v \0(Axq k"   I"\x1B! \0  \x1B! \0!\f\v\v (!  (\f"\0G@ (\b" \x006\f \0 6\b\f \v ("\x7F Aj ("E\r Aj\v!@ !\x07 "\0Aj! \0("\r\0 \0Aj! \0("\r\0\v \x07A\x006\0\f \vA\x7F! \0A\xBF\x7FK\r\0 \0A\vj"Axq!A\x80\xD8(\0"\x07E\r\0A!\bA\0 k! \0A\xF4\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtkA>j!\b\v@@@ \bAt(\xAC\xDA"E@A\0!\0\f\vA\0!\0 A \bAvkA\0 \bAG\x1Bt!@@ (Axq k" O\r\0 ! "\r\0A\0! !\0\f\v \0 ("   AvAqj("F\x1B \0 \x1B!\0 At! \r\0\v\v \0 rE@A\0!A \bt"\0A\0 \0kr \x07q"\0E\r \0hAt(\xAC\xDA!\0\v \0E\r\v@ \0(Axq k" I!   \x1B! \0  \x1B! \0("\x7F  \0(\v"\0\r\0\v\v E\r\0 A\x84\xD8(\0 kO\r\0 (!\b  (\f"\0G@ (\b" \x006\f \0 6\b\f\b\v ("\x7F Aj ("E\r Aj\v!@ ! "\0Aj! \0("\r\0 \0Aj! \0("\r\0\v A\x006\0\f\x07\v A\x84\xD8(\0"M@A\x90\xD8(\0!\0@  k"AO@ \0 j" Ar6 \0 j 6\0 \0 Ar6\f\v \0 Ar6 \0 j" (Ar6A\0!A\0!\vA\x84\xD8 6\0A\x90\xD8 6\0 \0A\bj!\0\f \v A\x88\xD8(\0"I@A\x88\xD8  k"6\0A\x94\xD8A\x94\xD8(\0"\0 j"6\0  Ar6 \0 Ar6 \0A\bj!\0\f \vA\0!\0 A/j"\x7FA\xD4\xDB(\0@A\xDC\xDB(\0\f\vA\xE0\xDBB\x7F7\0A\xD8\xDBB\x80\xA0\x80\x80\x80\x807\0A\xD4\xDB A\fjApqA\xD8\xAA\xD5\xAAs6\0A\xE8\xDBA\x006\0A\xB8\xDBA\x006\0A\x80 \v"j"A\0 k"\x07q" M\r\bA\xB4\xDB(\0"@A\xAC\xDB(\0"\b j" \bM  Ir\r \v@A\xB8\xDB-\0\0AqE@@@@@A\x94\xD8(\0"@A\xBC\xDB!\0@ \0(\0"\b M@  \b \0(jI\r\v \0(\b"\0\r\0\v\vA\0v"A\x7FF\r !A\xD8\xDB(\0"\0Ak" q@  k  jA\0 \0kqj!\v  M\rA\xB4\xDB(\0"\0@A\xAC\xDB(\0" j"\x07 M \0 \x07Ir\r\v v"\0 G\r\f\v  k \x07q"v" \0(\0 \0(jF\r !\0\v \0A\x7FF\r A0j M@ \0!\f\vA\xDC\xDB(\0"  kjA\0 kq"vA\x7FF\r  j! \0!\f\v A\x7FG\r\vA\xB8\xDBA\xB8\xDB(\0Ar6\0\v v"A\x7FFA\0v"\0A\x7FFr \0 Mr\r \0 k" A(jM\r\vA\xAC\xDBA\xAC\xDB(\0 j"\x006\0A\xB0\xDB(\0 \0I@A\xB0\xDB \x006\0\v@A\x94\xD8(\0"@A\xBC\xDB!\0@  \0(\0" \0("jF\r \0(\b"\0\r\0\v\f\vA\x8C\xD8(\0"\0A\0 \0 M\x1BE@A\x8C\xD8 6\0\vA\0!\0A\xC0\xDB 6\0A\xBC\xDB 6\0A\x9C\xD8A\x7F6\0A\xA0\xD8A\xD4\xDB(\x006\0A\xC8\xDBA\x006\0@ \0At" A\xA4\xD8j"6\xAC\xD8  6\xB0\xD8 \0Aj"\0A G\r\0\vA\x88\xD8 A(k"\0Ax kA\x07q"k"6\0A\x94\xD8  j"6\0  Ar6 \0 jA(6A\x98\xD8A\xE4\xDB(\x006\0\f\v  M  Kr\r \0(\fA\bq\r \0  j6A\x94\xD8 Ax kA\x07q"\0j"6\0A\x88\xD8A\x88\xD8(\0 j" \0k"\x006\0  \0Ar6  jA(6A\x98\xD8A\xE4\xDB(\x006\0\f\vA\0!\0\f\vA\0!\0\f\vA\x8C\xD8(\0 K@A\x8C\xD8 6\0\v  j!A\xBC\xDB!\0@@  \0(\0"G@ \0(\b"\0\r\f\v\v \0-\0\fA\bqE\r\vA\xBC\xDB!\0@@ \0(\0" M@   \0(j"I\r\v \0(\b!\0\f\v\vA\x88\xD8 A(k"\0Ax kA\x07q"k"\x076\0A\x94\xD8  j"6\0  \x07Ar6 \0 jA(6A\x98\xD8A\xE4\xDB(\x006\0  A' kA\x07qjA/k"\0 \0 AjI\x1B"A\x1B6 A\xC4\xDB)\x007 A\xBC\xDB)\x007\bA\xC4\xDB A\bj6\0A\xC0\xDB 6\0A\xBC\xDB 6\0A\xC8\xDBA\x006\0 Aj!\0@ \0A\x076 \0A\bj \0Aj!\0 I\r\0\v  F\r\0  (A~q6   k"Ar6  6\0\x7F A\xFFM@ A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\fA\f!A\b\f\vA!\0 A\xFF\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtrA>s!\0\v  \x006 B\x007 \0AtA\xAC\xDAj!@@A\x80\xD8(\0"A \0t"qE@A\x80\xD8  r6\0  6\0\f\v A \0AvkA\0 \0AG\x1Bt!\0 (\0!@ "(Axq F\r \0Av! \0At!\0  Aqj"("\r\0\v  6\v  6A\b! "!\0A\f\f\v (\b"\0 6\f  6\b  \x006\bA\0!\0A!A\f\v j 6\0  j \x006\0\vA\x88\xD8(\0"\0 M\r\0A\x88\xD8 \0 k"6\0A\x94\xD8A\x94\xD8(\0"\0 j"6\0  Ar6 \0 Ar6 \0A\bj!\0\f\vA\xF8\xD7A06\0A\0!\0\f\v \0 6\0 \0 \0( j6 Ax kA\x07qj"\b Ar6 Ax kA\x07qj"  \bj"k!\x07@A\x94\xD8(\0 F@A\x94\xD8 6\0A\x88\xD8A\x88\xD8(\0 \x07j"\x006\0  \0Ar6\f\vA\x90\xD8(\0 F@A\x90\xD8 6\0A\x84\xD8A\x84\xD8(\0 \x07j"\x006\0  \0Ar6 \0 j \x006\0\f\v ("\0AqAF@ \0Axq! (\f!@ \0A\xFFM@ (\b" F@A\xFC\xD7A\xFC\xD7(\0A~ \0Avwq6\0\f\v  6\f  6\b\f\v (!@  G@ (\b"\0 6\f  \x006\b\f\v@ ("\0\x7F Aj ("\0E\r Aj\v!@ ! \0"Aj! \0("\0\r\0 Aj! ("\0\r\0\v A\x006\0\f\vA\0!\v E\r\0@ ("\0At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ \0wq6\0\f\v@  (F@  6\f\v  6\v E\r\v  6 ("\0@  \x006 \0 6\v ("\0E\r\0  \x006 \0 6\v \x07 j!\x07  j"(!\0\v  \0A~q6  \x07Ar6  \x07j \x076\0 \x07A\xFFM@ \x07A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A \x07Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\f\vA! \x07A\xFF\xFF\xFF\x07M@ \x07A& \x07A\bvg"\0kvAq \0AtrA>s!\v  6 B\x007 AtA\xAC\xDAj!\0@@A\x80\xD8(\0"A t"qE@A\x80\xD8  r6\0 \0 6\0\f\v \x07A AvkA\0 AG\x1Bt! \0(\0!@ "\0(Axq \x07F\r Av! At! \0 Aqj"("\r\0\v  6\v  \x006  6\f  6\b\f\v \0(\b" 6\f \0 6\b A\x006  \x006\f  6\b\v \bA\bj!\0\f\v@ \bE\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj \x006\0 \0\rA\x80\xD8 \x07A~ wq"\x076\0\f\v@  \b(F@ \b \x006\f\v \b \x006\v \0E\r\v \0 \b6 ("@ \0 6  \x006\v ("E\r\0 \0 6  \x006\v@ AM@   j"\0Ar6 \0 j"\0 \0(Ar6\f\v  Ar6  j" Ar6  j 6\0 A\xFFM@ A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\f\vA!\0 A\xFF\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtrA>s!\0\v  \x006 B\x007 \0AtA\xAC\xDAj!@@ \x07A \0t"qE@A\x80\xD8  \x07r6\0  6\0  6\f\v A \0AvkA\0 \0AG\x1Bt!\0 (\0!@ "(Axq F\r \0Av! \0At!\0  Aqj"\x07("\r\0\v \x07 6  6\v  6\f  6\b\f\v (\b"\0 6\f  6\b A\x006  6\f  \x006\b\v A\bj!\0\f\v@ E\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj \x006\0 \0\rA\x80\xD8 \vA~ wq6\0\f\v@  (F@ \x006\f\v \x006\v \0E\r\v \0 6 ("@ \0 6  \x006\v ("E\r\0 \0 6  \x006\v@ AM@   j"\0Ar6 \0 j"\0 \0(Ar6\f\v  Ar6  j" Ar6  j 6\0 \b@ \bAxqA\xA4\xD8j!\0A\x90\xD8(\0!\x7FA \bAvt"\x07 qE@A\xFC\xD7  \x07r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\vA\x90\xD8 6\0A\x84\xD8 6\0\v A\bj!\0\v Aj$\0 \0\v\0\x9C\0\v;\x7F#\0Ak"$\0  \x006\f (\f"\0(\0"@ \0 6 \0(\b !\v Aj$\0\vu~ \0  ~  ~| B \x88" B \x88"~| B\xFF\xFF\xFF\xFF\x83" B\xFF\xFF\xFF\xFF\x83"~"B \x88  ~|"B \x88|  ~ B\xFF\xFF\xFF\xFF\x83|"B \x88|7\b \0 B\xFF\xFF\xFF\xFF\x83 B \x86\x847\0\v\xC1\x7F \0-\0\0A qE@@ \0("\x7F  \0\xC9\r \0(\v \0("k I@ \0   \0($\0\f\v@@ E \0(PA\0Hr\r\0 !@  j"Ak-\0\0A G@ Ak"\r\f\v\v \0   \0($\0 I\r  k! \0(!\f\v !\v   Y \0 \0( j6\v\v\v\x7FA9" \0(\x006\0 \v\xC0\x7F@  kAH\r\0 \0( \0,\0\v" A\0H\x1BE\r\0  \x8F \0(\0 \0 \0,\0\v"A\0H"\x1B" \0(  \x1Bj! Ak!\0@@@ -\0\0"Ak! \0 M\r\0 A\xFFqA\xFD\0M@ (\0 G\r\v Aj!   kAJj!\f\v\v A\xFFqA\xFD\0K\r \0(\0Ak I\r\v A6\0\v\vP~@ A\xC0\0q@  A@j\xAD\x86!B\0!\f\v E\r\0  \xAD"\x86 A\xC0\0 k\xAD\x88\x84!  \x86!\v \0 7\0 \0 7\b\vi\x7F#\0A\x80k"$\0 A\x80\xC0q  LrE@    k"A\x80 A\x80I"\x1B\xC6 E@@ \0 A\x803 A\x80k"A\xFFK\r\0\v\v \0  3\v A\x80j$\0\v\0A\0\v<\x7FA \0 \0AM\x1B!@@ /"\0\r\0A\xB4\xEC(\0"E\r\0 \r\0\f\v\v \0E@0\0\v \0\v \0 \0(\0C\v \0 \0(\0A\xC0\v\xCD \x7F~#\0A\xF0\0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83! @@ P" B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83" B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0}B\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FT P\x1BE@ B\0R B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0}"\vB\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FV \vB\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FQ\x1B\r\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84! !\f\v P B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0   \x85  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x85\x84P"\x1B!B\0  \x1B!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P\r  \x84P@  \x84B\0R\r  \x83!  \x83!\f\v  \x84PE\r\0 ! !\f\v    T V Q\x1B"\b\x1B!   \b\x1B"\fB\xFF\xFF\xFF\xFF\xFF\xFF?\x83!   \b\x1B"\vB0\x88\xA7A\xFF\xFFq!\x07 \fB0\x88\xA7A\xFF\xFFq"E@ A\xE0\0j P"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6 )h! )\`! A k!\v   \b\x1B! \vB\xFF\xFF\xFF\xFF\xFF\xFF?\x83! \x07~  A\xD0\0j     P"\x07\x1ByB\xC0\0B\0 \x07\x1B|\xA7"\x07Ak6A \x07k!\x07 )P! )X\vB\x86 B=\x88\x84B\x80\x80\x80\x80\x80\x80\x80\x84! B\x86 B=\x88\x84  \x85!~ B\x86"  \x07F\r\0  \x07k"\x07A\xFF\0K@B\0!B\f\v A@k  A\x80 \x07k6 A0j   \x07g )8! )0 )@ )H\x84B\0R\xAD\x84\v! B\x80\x80\x80\x80\x80\x80\x80\x84!\v B\x86! @ B\0S@B\0!B\0! \x85  \v\x85\x84P\r }! \v } V\xAD}"B\xFF\xFF\xFF\xFF\xFF\xFF\xFFV\r A j     P"\x07\x1ByB\xC0\0B\0 \x07\x1B\x84\xA7A\fk"\x076  \x07k! )(! ) !\f\v |" T\xAD  \v||"B\x80\x80\x80\x80\x80\x80\x80\b\x83P\r\0 B\x83 B?\x86 B\x88\x84\x84! Aj! B\x88!\v \fB\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83! A\xFF\xFFN@ B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!B\0!\f\vA\0!\x07@ A\0J@ !\x07\f\v Aj   A\xFF\0j6   A kg )\0 ) )\x84B\0R\xAD\x84! )\b!\v B=\x86 B\x88\x84! B\x88B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \x07\xADB0\x86\x84 \x84!@@ \xA7A\x07q"AG@    AK\xAD|"V\xAD|!\f\v    B\x83|"V\xAD|!\f\v E\r\v\v \0 7\0 \0 7\b A\xF0\0j$\0\v \0 \0A\x9C\xE0^\v \0 \0A\xA4\xE0^\v\x84\x7F~#\0Ak"$\0 \0~ E@B\0\f\v   Au"s k"\xADB\0 g"A\xD1\0j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85A\x9E\x80 k\xADB0\x86|B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7FB\0 A\0H\x1B\x84! )\0\v7\0 \0 7\b Aj$\0\v1\x7F \0(\f" \0(F@ \0 \0(\0((\0\0\v -\0\0 \0 Aj6\f\v'\x7F \0(\f" \0(F@ \0 \0(\0($\0\0\v -\0\0\v1\x7F \0(\f" \0(F@ \0 \0(\0((\0\0\v (\0 \0 Aj6\f\v'\x7F \0(\f" \0(F@ \0 \0(\0($\0\0\v (\0\v\xAA\f\b\x7F\x7FA\0 E\r\0 \0A\x7Fs! AO@@ AqE\r\0 -\0\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Aj! Ak!\f\v \0! !\f\v \0! !\f\v \0! !\v An"\bAll! @ \bAk" E@A\0!\f\v !\0A\0!@ \0( \x07s"\x07AvA\xFC\x07q(\xE0S \x07AvA\xFC\x07q(\xE0K \x07AvA\xFC\x07q(\xE0C \x07A\xFFqAt(\xE0;sss!\x07 \0(\f s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0(\b s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0( s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0(\0 s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0Aj!\0 Ak" \r\0\v  \bAljAk!\v  j! ( (\f (\b ( (\0 s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 \x07ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s! Aj!\v A\x07K@@ -\0\0 sA\xFFqAt(\xE03 A\bvs"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0\x07 \0sA\xFFqAt(\xE03s! A\bj! A\bk"A\x07K\r\0\v\v@ E\r\0 -\0\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs!\v A\x7Fs\v\v\x97\x7F#\0A@j"$\0 \0 \0(\0"A\bk(\0"j!@ Ak(\0"( (F@A\0  \x1B!\0\f\v \0 N@ B\x007 A\x006  6\f  \x006\b  6 B\x007 B\x007$ B\x007, A\x006< B\x81\x80\x80\x80\x80\x80\x80\x8074  Aj  AA\0 (\0(\v\0 (\r\v B\x007 A\x006 A\x98\xC46\f  \x006\b  6 B\x007 B\x007$ B\x007, B\x007\x003 A\x006< A:\0;  Aj AA\0 (\0( \0A\0!\0@@ ((\0\v (A\0 ($AF\x1BA\0 ( AF\x1BA\0 (,AF\x1B!\0\f\v (AG@ (,\r ( AG\r ($AG\r\v (!\0\v A@k$\0 \0\v\0 \0A\x006\b \0B\x007\0\vc\0 (A\xB0q"A F@ \v@ AG\r\0@@ \0-\0\0"A+k\0\0\v \0Aj\v A0G  \0kAHr\r\0 \0-\0A rA\xF8\0G\r\0 \0Aj!\0\v \0\v1\x7FA\xCC\xCF(\0! \0@A\xCC\xCFA\xD4\xCE \0 \0A\x7FF\x1B6\0\vA\x7F  A\xD4\xCEF\x1B\v\0 \0(\0"\0@ \0H\v\vA\x7F \0 7p \0 \0(, \0("k\xAC7x \0 P  \0(\b"\0 k\xACYr\x7F \0  \xA7j\v6h\vs\x7F \0A\x90\xFC\x006\0 \0(@ \0((!@ @A\0 \0 Ak"At" \0($j(\0 \0( j(\0\x07\0\f\v\v \0Aj\xF3 \0( ! \0($! \0(0! \0(<!\v \0\v\xEC\x7F \0E@A\xC8\xCC(\0@A\xC8\xCC(\0L!\vA\xF8\xCD(\0@A\xF8\xCD(\0L r!\vA\xB0\xCE(\0"\0@@ \0(L \0( \0(G@ \0L r!\v \0(8"\0\r\0\v\v \v \0(LA\0H!@@ \0( \0(F\r\0 \0A\0A\0 \0($\0 \0(\r\0A\x7F!\f\v \0(" \0(\b"G@ \0  k\xACA \0((\0\vA\0! \0A\x006 \0B\x007 \0B\x007 \r\0\v \v-\0 E@ \0( (F\v \0 F@A\v \0( (\x9BE\v\xDB\x7F#\0Ak"$\0  6\fA\0!@ \x7FA \0 A\fj(\r\0A A\xC0\0 \0:" (\0(\f\0E\r\0  A\0 (\0(4\0!@@ \0Q A0k! \0 A\fj( AHr\r\0 A\xC0\0 \0:" (\0(\f\0E\r Ak!  A\0 (\0(4\0 A lj!\f\v\v \0 A\fj(E\rA\v (\0r6\0\v Aj$\0 \v\xF6\x7F#\0Ak"$\0  6\f@@ \0 A\fj)@A\0!A!\f\vA\0!A! \0;"\x07A\0H\r\0 (\b \x07Atj-\0\0A\xC0\0qE\r\0  \x07A\0 (\0($\0!@@ \0S A0k! \0 A\fj) AHr\r\0 \0;"A\0H\r (\b Atj-\0\0A\xC0\0qE\r Ak!  A\0 (\0($\0 A lj!\f\v\v \0 A\fj)E\rA!\v  (\0 r6\0\v Aj$\0 \v\x90\x7F#\0Ak"$\0  6\f  H6\b (\f!#\0Ak"$\0  6\f  6\bA\x7F!@A\0A\0  \x9A"A\0H\r\0 \0 Aj"/"\x006\0 \0E\r\0 \0   (\f\x9A!\v Aj$\0 A\bjI Aj$\0 \v\f\0 \0(\0B \0\v.\0@ \0(A\xCA\0q"\0@ \0A\xC0\0F@A\b\v \0A\bG\rA\vA\0\vA \v\f\0 \0(\0@ \0\v\xCE~\x7F#\0Ak"$\0 \xBD"B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x07\x83! \0~ B4\x88B\xFF\x83"PE@ B\xFFR@ B\x88! B\x80\xF8\0|! B<\x86\f\v B\x88!B\xFF\xFF! B<\x86\f\v P@B\0!B\0\f\v  B\0 y\xA7"\x07A1j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85!A\x8C\xF8\0 \x07k\xAD! )\0\v7\0 \0 B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83 B0\x86\x84 \x847\b Aj$\0\v\0 \0A\x80\x80\x80\x80O@A\xBFA\0\xDC\0\v \0At9\v\x85\x7F#\0Ak"\b$\0 \b 6\b \b 6\f \bAj" $ =! \b(# A\x006\0A\0!@@  \x07F r\r@ \bA\fj \bA\bj(\r\0@ (\0A\0 (\0(4\0A%F@ Aj \x07F\rA\0!\x7F@ (A\0 (\0(4\0"A\xC5\0F\r\0A! A\xFFqA0F\r\0 \f\v A\bj \x07F\rA\b! ! (\bA\0 (\0(4\0\v! \b \0 \b(\f \b(\b      \0(\0($\f\x006\f  jAj!\f\v A (\0 (\0(\f\0@@ \x07 Aj"G@ A (\0 (\0(\f\0\r\v\v@ \bA\fj \bA\bj(\r A \b(\fC (\0(\f\0E\r \b(\fB\f\0\v\0\v \b(\fC (\0(\0 (\0 (\0(\0F@ \b(\fB Aj!\f\v A6\0\v (\0!\f\v\v A6\0\v \bA\fj \bA\bj(@  (\0Ar6\0\v \b(\f \bAj$\0\v\xB1\x7F#\0Ak"\b$\0 \b 6\b \b 6\f \bAj" $ >! \b(# A\x006\0A\0!@@  \x07F r\r@ \bA\fj \bA\bj)\r\0@ ,\0\0A\0 (\0($\0A%F@ Aj \x07F\rA\0!\x7F@ ,\0A\0 (\0($\0"A\xC5\0F\r\0A! A\xFFqA0F\r\0 \f\v Aj \x07F\rA! ! ,\0A\0 (\0($\0\v! \b \0 \b(\f \b(\b      \0(\0($\f\x006\f  jAj!\f\v@ ,\0\0"A\0H\r\0 (\b" Atj-\0\0AqE\r\0@@ \x07 Aj"F@ \x07!\f\v ,\0\0"A\0H\r\0  Atj-\0\0Aq\r\v\v@ \bA\fj \bA\bj)\r \b(\fA"A\x80q\r (\b A\xFF\0qAtj-\0\0AqE\r \b(\f@\f\0\v\0\v \b(\fA\xC0 (\0(\f\0 ,\0\0 (\0(\f\0F@ \b(\f@ Aj!\f\v A6\0\v (\0!\f\v\v A6\0\v \bA\fj \bA\bj)@  (\0Ar6\0\v \b(\f \bAj$\0\v<\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0 (\b6\b \0 )\x007\0 A\0:\0\v A\0:\0\0\v\0 @ \0  \xFC \0\0\v \0\v\xC3\x7F#\0Ak"\x07$\0@ \0E\r\0 (\f!  k"A\0J@ \0   \0(\0(0\0 G\r\v  k" H@ \x07Aj" k" \xE1 \0 \x07(  \x07,\0A\0H\x1B  \0(\0(0\0!    G\r\v  k"A\0J@ \0   \0(\0(0\0 G\r\v A\x006\f \0!\b\v \x07Aj$\0 \b\v\f\0 \0A\x82\x86\x80 6\0\0\v\xCC\x7F#\0Ak"\x07$\0@ \0E\r\0 (\f!  kAu"A\0J@ \0   \0(\0(0\0 G\r\v  kAu" H@ \x07Aj" k" \xDF \0 \x07(  \x07,\0A\0H\x1B  \0(\0(0\0!    G\r\v  kAu"A\0J@ \0   \0(\0(0\0 G\r\v A\x006\f \0!\b\v \x07Aj$\0 \b\v9\x7F#\0Ak"$\0  6\f  H6\b \0A  (\f\x9A A\bjI Aj$\0\vK\x7F \0(\0!\0 -" \0(\f \0(\b"kAuI\x7F  Atj(\0A\0GA\0\vE@0\0\v \0(\b Atj(\0\v\0 \0A F \0A kAIr\v\xD7\x7F@A\x84\xCC(\0"\0A\0N@ \0E\rA\x84\xCF(\0 \0A\xFF\xFF\xFF\xFFqG\r\v@A\x88\xCC(\0A F\r\0A\xCC\xCB(\0"\0A\xC8\xCB(\0F\r\0A\xCC\xCB \0Aj6\0 \0A :\0\0\vA\xB8\xCB\x9F\vA\x84\xCCA\x84\xCC(\0"\0A\xFF\xFF\xFF\xFF \0\x1B6\0@@A\x88\xCC(\0A F\r\0A\xCC\xCB(\0"\0A\xC8\xCB(\0F\r\0A\xCC\xCB \0Aj6\0 \0A :\0\0\f\vA\xB8\xCB\x9F\vA\x84\xCC(\0A\x84\xCCA\x006\0\v+\x7F#\0Ak"$\0  6\fA\xB8\xCB \0 A\0A\0\xD0 Aj$\0\v^\x7F \0A\x006\b \0B\x007\0 (\0! (" k"Au"@ \0 \xA8 \0(! E  FrE@   \xFC \0\0\v \0  j6\v \0\v?\x7F@ \0 F\r\0@ \0 Ak"O\r \0-\0\0! \0 -\0\0:\0\0  :\0\0 \0Aj!\0\f\0\v\0\v\v\xDB\x7F~A!@ \0B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 \0 \x84  \x84\x84P@A\0\v  \x83B\0Y@ \0 T  S  Q\x1B@A\x7F\v \0 \x85  \x85\x84B\0R\v \0 V  U  Q\x1B@A\x7F\v \0 \x85  \x85\x84B\0R!\v \v'\x7F#\0Ak"$\0  6\f \0A\xE4\0  \x9A Aj$\0\v\xD7\x7F#\0Ak"$\0 \0A\x006#\0Ak"$\0 A\0:\0@ \0 \0(\0"A\fk(\0j"(E@  \0 (H"\x7F \xC4 \0(\0 \vA\fk(\0j(E:\0\f\v A\x99\v Aj$\0A! -\0AF@ \0 \0 \0(\0A\fk(\0j("   (\0( \0"6AA\0  G\x1B!\v \0 \0(\0A\fk(\0j \x99 Aj$\0\vP~@ A\xC0\0q@  A@j\xAD\x88!B\0!\f\v E\r\0 A\xC0\0 k\xAD\x86  \xAD"\x88\x84!  \x88!\v \0 7\0 \0 7\b\vC\x7F@ E\r\0@ \0-\0\0" -\0\0"F@ Aj! \0Aj!\0 Ak"\r\f\v\v  k!\v \v \0A\x97\xD6\0\v\x88\x7F@ \xA5"A\xF7\xFF\xFF\xFFI@@@ AO@ Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\f\v \0 :\0\v E\r\v At"E\r\0 \0  \xFC \0\0\v \0 AtjA\x006\0\f\v0\0\v\v\xBB\x7F (\0!\x07A\0 \0(\0" \0(A\xE3\0F"\x1BA\x7FA (\0" k"At  F\x1B A\xFF\xFF\xFF\xFF\x07O\x1B"\b\x9D"@@ E@ \0 6\0\f\v \0(\0! @   \xFC \0\0\v \0 6\0 E\r\0  \0(\0 \0(\0!\v \0A\xE4\x006   \x07 kj6\0  \0(\0 \bA|qj6\0\v0\0\vA\x7F#\0Ak"$\0  6\fA\xB0 A\xFC A\xDD,A A\fj"4A\xFC A\xE1,A 4 Aj$\0 \0\v\xFA\x7F#\0Ak" $\0 \x006\f@@@ (\0"\v G\r\0 (\` \0F\x7FA+ \0 (dG\rA-\v!\0  \vAj6\0 \v \0:\0\0\f\v@ \0 G\r\0 ( ,\0\v"\0 \0A\0H\x1BE\r\0A\0!\0 \b(\0" \x07kA\x9FJ\r (\0!\0 \b Aj6\0  \x006\0\f\vA\x7F!\0 A\xE8\0j A\fj\xB1 kAu"AJ\r@@@ A\bk\0\0\v  J\r\f\v AG AHr\r\0 (\0" F  kAJr\r Ak-\0\0A0G\rA\0!\0 A\x006\0  Aj6\0  -\0\xD0\x85:\0\0\f\v  (\0"\0Aj6\0 \0 A\xD0\x85j-\0\0:\0\0  (\0Aj6\0A\0!\0\f\vA\0!\0 A\x006\0\v Aj$\0 \0\v \0 \0A\xE4\xE0^\v\xFC\x7F#\0Ak" $\0 \0:\0@@@ (\0"\v G\r\0 \0A\xFFq"\f -\0F\x7FA+ \f -\0G\rA-\v!\0  \vAj6\0 \v \0:\0\0\f\v@ \0 G\r\0 ( ,\0\v"\0 \0A\0H\x1BE\r\0A\0!\0 \b(\0" \x07kA\x9FJ\r (\0!\0 \b Aj6\0  \x006\0\f\vA\x7F!\0 Aj Aj\xB4 k"AJ\r@@@ A\bk\0\0\v  J\r\f\v AG AHr\r\0 (\0" F  kAJr\r Ak-\0\0A0G\rA\0!\0 A\x006\0  Aj6\0  -\0\xD0\x85:\0\0\f\v  (\0"\0Aj6\0 \0 A\xD0\x85j-\0\0:\0\0  (\0Aj6\0A\0!\0\f\vA\0!\0 A\x006\0\v Aj$\0 \0\v \0 \0A\xDC\xE0^\v\0 \0\vf\x7F~#\0Ak"$\0 \0~ E@B\0\f\v  \xADB\0A\xF0\0 g"Ask6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85A\x9E\x80 k\xADB0\x86|! )\0\v7\0 \0 7\b Aj$\0\v\0 \0A\xDF\0q \0 \0A\xE1\0kAI\x1B\v<\0 \0A\x006\b \0B\x007\0 \0 (\x006\0 \0 (6 \0 (\b6\b A\x006\b B\x007\0\v,\x7F \0A\x006\b \0B\x007\0 \0 (\0" ("  k\xC2 \0\vW\x7F~@A\xCC\xCC(\0"\xAD \0\xADB\x07|B\xF8\xFF\xFF\xFF\x83|"B\xFF\xFF\xFF\xFFX@ \xA7"\0?\0AtM\r \0\r\vA\xF8\xD7A06\0A\x7F\vA\xCC\xCC \x006\0 \v\xA7\x7F \0( \0(\0"kAu" I@#\0A k"$\0@  k" \0(\b \0("kAuM@ \0 \xB9\f\v A\fj \0  \0(\0kAu j\x86 \0( \0(\0kAu \0\xB8" \xCF \0 \x96 \xB5\v A j$\0\v  I@ \0  Atj6\v\vt\x7F~ \0B\x80\x80\x80\x80Z@@ Ak" \0" \0B \x80"\0B ~}\xA7A0r:\0\0 B\xFF\xFF\xFF\xFF\x9FV\r\0\v\v \0PE@ \0\xA7!@ Ak"  A n"A lkA0r:\0\0 A K !\r\0\v\v \v}\x7F@@ \0"AqE\r\0 -\0\0E@A\0\v@ Aj"AqE\r -\0\0\r\0\v\f\v@ "Aj!A\x80\x82\x84\b (\0"k rA\x80\x81\x82\x84xqA\x80\x81\x82\x84xF\r\0\v@ "Aj! -\0\0\r\0\v\v  \0k\v\xBF\x7F \0( \0(\0"k" I@#\0A k"$\0@  k" \0(\b \0("kM@ \0 \x96\f\v  A\fj \0  j \0(\0k\x83 \0( \0(\0k \0\x8C"(\b"j!@  G@ A\0:\0\0 Aj!\f\v\v  6\b \0 \xA9 \x87\v A j$\0\v  I@ \0  j6\v\v\v\0  6\0A\v<\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0 (\b6\b \0 )\x007\0 A\0:\0\v A\x006\0\vK\x7F#\0Ak"$\0 A\fj" $  n" (\0(\0\x006\0 \0  (\0(\0 (\f# Aj$\0\vD\x7F#\0Ak"$\0 A\fj" \0$ ="\0A\xD0\x85A\xEA\x85  \0(\0(0\0 (\f# Aj$\0 \vK\x7F#\0Ak"$\0 A\fj" $  p" (\0(\0\0:\0\0 \0  (\0(\0 (\f# Aj$\0\v\x7F\x7F@ y"A\xF7\xFF\xFF\xFF\x07I@@@ A\vO@ A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\f\v \0 :\0\v E\r\v E\r\0 \0  \xFC \0\0\v \0 jA\0:\0\0\f\vi\0\v\vF\x7F \0A\x80\xFA\0(\0"6\0 \0 A\fk(\0jA\xA0\xFA\0(\x006\0 \0A\xA4\xFA\0(\x006\b \0A\fj\xB0 \0A@kK \0\v\xB5\x07\x7F\x7F \0A\xFF\xFFq! \0Av! AF@  -\0\0j"\0A\xF1\xFFk \0 \0A\xF0\xFFK\x1B"\0 j"At"A\x80\x80\x7F A\x80\x80\x80\x80O@\x85\0\vA\xFF\xFF\xFF\xFF \0(\b \0(\0k"\0Au"   I\x1B \0A\xFC\xFF\xFF\xFF\x07O\x1B\v?\x7F \0(! \0(\b!@  G@ \0 Ak"6\b\f\v\v \0(\0"@ \0(\f !\v\vI\x7F \0("A\bu! \0(\0"\0  Aq\x7F (\0 j(\0 \v j A Aq\x1B  \0(\0( \0\v\xF1\x7FA\xF6\xFF\xFF\xFF\x07 k O@A\xF7\xFF\xFF\xFF\x07!\b \0(\0 \0 \0,\0\vA\0H\x1B! A\xF2\xFF\xFF\xFFM@A\v  j" At"\b  \bK\x1B"A\x07rAj A\vI\x1B!\b\v \b9! @  \xFC \0\0\v @  j \x07 \xFC \0\0\v   j" k"\x07E  FrE@  j j  j j \x07\xFC \0\0\v A G@ !\v \0 6\0 \0 \bA\x80\x80\x80\x80xr6\b \0  j \x07j"\x006 \0 jA\0:\0\0\vi\0\v,\x7F \0 A\xC0\x84=n"At/\xC0\xBB;\0\0 \0Aj  A\xC0\x84=lk\xAB\v\0A\v;\0 \0 6 \0 \x7F 9A\0\v"6\0 \0  j"6\b \0  j6\f \0 6 \0\v\b\0A\xFF\xFF\xFF\xFF\x07\v\0A\xFF\0\v?\x7F@ \0 F\r\0@ \0 Ak"O\r \0(\0! \0 (\x006\0  6\0 \0Aj!\0\f\0\v\0\v\v\xCB \x7F#\0Ak" $\0 =! Aj n" (\0(\0@ (\b ,\0"\x07 \x07A\0H\x1BE@ \0   (\0(0\0    \0kAtj"6\0\f\v  6\0@@ \0"\x07-\0\0"\bA+k\0\0\v \b\xC0 (\0(,\0!\x07  (\0"\bAj6\0 \b \x076\0 \0Aj!\x07\v@  \x07kAH\r\0 \x07-\0\0A0G\r\0 \x07-\0A rA\xF8\0G\r\0 A0 (\0(,\0!\b  (\0"\vAj6\0 \v \b6\0 \x07,\0 (\0(,\0!\b  (\0"\vAj6\0 \v \b6\0 \x07Aj!\x07\v \x07 c  (\0(\0\0!A\0!\vA\0!\b \x07!\x7F  M\x7F  \x07 \0kAtj (\0\x8F (\0@ ("\f Aj"\r ,\0A\0H"\x1B \bj-\0\0E\r\0 \v \f \r \x1B \bj,\0\0G\r\0  (\0"\vAj6\0 \v 6\0A\0!\v \b \b (\b ,\0"\f \fA\0H\x1BAkIj!\b\v ,\0\0 (\0(,\0!\f  (\0"\rAj6\0 \r \f6\0 Aj! \vAj!\v\f\v\v!\v     \0kAtj  F\x1B6\0 Aj  Aj$\0\v\xD0\x7F A\x80q@ \0A+:\0\0 \0Aj!\0\v A\x80\bq@ \0A#:\0\0 \0Aj!\0\v A\x84q"A\x84G@ \0A\xAE\xD4\0;\0\0 \0Aj!\0\v A\x80\x80q!@ -\0\0"@ \0 :\0\0 \0Aj!\0 Aj!\f\v\v \0\x7F@ A\x80G@ AG\rA\xC6\0A\xE6\0 \x1B\f\vA\xC5\0A\xE5\0 \x1B\f\vA\xC1\0A\xE1\0 \x1B A\x84F\r\0A\xC7\0A\xE7\0 \x1B\v:\0\0 A\x84G\v\xB4\x7F~@@@@@@ AkAw\b\0\v \0\x7F  k"AL@A= A\xC0\0 B\x84y\xA7kA\xD1 lA\fv"  At)\xD0\xC2TkAjH\r\v\x7F B\xFF\xFF\xFF\xFFX@  \xA7\xAD\f\v B\x80\xC8\xAF\xA0%Z@  B\x80\xC8\xAF\xA0%\x80"B\x80\xC8\xAF\xA0%~}!  \xA7\xAD!\v  B\x80\xC2\xD7/\x80"\xA7At/\xC0\xBB;\0\0 Aj  B\x80\xC2\xD7/~}\xA7\x8A\v!A\0\v6\f\v \0A\xC0\0 B\x84y\xA7k"  kJ\x7FA=  j"!\x7F BT\x7F@ Ak" \xA7Aq-\0\x91:\0\0 B\x88"B\0R\r\0\vA\0 Ak" \xA7AtA! Aj p" (\0(\0@ (\b ,\0"\x07 \x07A\0H\x1BE@ \0   (\0( \0    \0kj"6\0\f\v  6\0@@ \0"\x07-\0\0"\bA+k\0\0\v \b\xC0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 \0Aj!\x07\v@  \x07kAH\r\0 \x07-\0\0A0G\r\0 \x07-\0A rA\xF8\0G\r\0 A0 (\0(\0!\b  (\0"\vAj6\0 \v \b:\0\0 \x07,\0 (\0(\0!\b  (\0"\vAj6\0 \v \b:\0\0 \x07Aj!\x07\v \x07 c  (\0(\0\0!A\0!\vA\0!\b \x07!\x7F  M\x7F  \x07 \0kj (\0c (\0@ ("\f Aj"\r ,\0A\0H"\x1B \bj-\0\0E\r\0 \v \f \r \x1B \bj,\0\0G\r\0  (\0"\vAj6\0 \v :\0\0A\0!\v \b \b (\b ,\0"\f \fA\0H\x1BAkIj!\b\v ,\0\0 (\0(\0!\f  (\0"\rAj6\0 \r \f:\0\0 Aj! \vAj!\v\f\v\v!\v     \0kj  F\x1B6\0 Aj  Aj$\0\v\x9A\x7F@@@@@@ AkAw\b\0\v \0\x7F  k"A L@A= A ArgkA\xD1 lA\fv"  At(\x90\xBBIkAjH\r\v  \xAD!A\0\v6\f\v \0A Argk"  kJ\x7FA=  j"!\x7F AI\x7F@ Ak" Aq-\0\x91:\0\0 Av"\r\0\vA\0 Ak" AtA"\rE\rA!\v\f\v (\0\v!\bA\0!\r \x07/<@A!\v\f\v \x07/:@A\r!\v\f\v \x07/8@A\f!\v\f\v \x07/6@A\v!\v\f\v \x07/4@A !\v\f\v \x07/2@A !\v\f\v \x07/0@A\b!\v\f\v \x07/.@A\x07!\v\f\v \x07/,@A!\v\f\v \x07/*@A!\v\f\v \x07/(@A!\v\f\v \x07/&@A!\v\f\v \x07/$@A!\v\f\v \x07/"@A!\fA!\vA!\bA\0\f\v  (\0"\0Aj6\0 \0A\xC06\0  (\0"\0Aj6\0 \0A\xC06\0A!\f\f\v \b \v \b \vI\x1B!A!\b@@ \x07A j \bAtj/\0\r \bAj"\b \vG\r\0\v \v!\b\v  \b  \bK\x1B!\fA\v! A\x7F! \x07/""AK\rA AtkA\xFE\xFFq \x07/$"k"A\0H\r At \x07/&"k"A\0H\r At \x07/("k"A\0H\r At \x07/*"k"A\0H\r At \x07/,"k"A\0H\r At \x07/."k"A\0H\r At \x07/0"k"A\0H\r At \x07/2"k"A\0H\r At \x07/4"k"A\0H\r At \x07/6"\x1Bk"A\0H\r At \x07/8"k"A\0H\r At \x07/:"k"A\0H\r At \x07/<"k"A\0H\r At" \rI  \rGA\0 \0E r\x1Br\rA\0! \x07A\0; \x07 ; \x07  j"; \x07  j";\b \x07  j"; \x07  j";\f \x07  j"; \x07  j"; \x07  j"; \x07  j"; \x07  j"; \x07  \x1Bj"; \x07  j"; \x07  j"; \x07  j;@ E\r\0 AG@ Aq A~q!A\0! @  Atj/\0"@ \x07 Atj" /\0"Aj;\0  Atj ;\0\v  Ar"Atj/\0"@ \x07 Atj" /\0"Aj;\0  Atj ;\0\v Aj! Aj" G\r\0\vE\r\v  Atj/\0"E\r\0 \x07 Atj" /\0"Aj;\0  Atj ;\0\vA!A\0! "!A\0!@@@ \0\0\vA! \fA K\rA\x81!A\xD0\xED\0!A\x90\xED\0!A!\f\v \0AF!A\0!A\xD0\xEE\0!A\x90\xEE\0! \0AG@\f\vA! \fA K\r\vA \ft"Ak! (\0!A\0! \f! A\0!A\0!\rA\x7F!@A t!@@\x7FA\0   Atj/\0" AjK\r\0 I@A\0! A\xE0\0\f\v  kAt"\0j/\0! \0 j-\0\0\v!\0A\x7F \b k"t!\x1B  \r vAtj! ! @  \x1Bj" Atj" ;  :\0  \0:\0\0 \r\0\vA \bAkt! @ "\0Av! \0 \rq\r\0\v \x07A j \bAtj" /\0Ak" ;\0 \0Ak \rq \0jA\0 \0\x1B!\r Aj! A\xFF\xFFqE@ \b \vF\r   Atj/\0Atj/\0!\b\v \b \fM\r\0 \r q"\0 F\r\0\vA \b  \f \x1B"k" t! \b \vI@ \v k! \b! @@  \x07A j Atj/\0k"A\0L\r At! Aj" j" \vI\r\0\v ! \vA t!\vA!   j"A\xD4Kq  A\xD0Kqr\r (\0" \0Atj" \f:\0 :\0\0  Atj" kAv; \0!\f\v\v \r@  \rAtj"\0A\0; \0 :\0 \0A\xC0\0:\0\0\v  (\0 Atj6\0\v  \f6\0A\0! \v \v\x9C\x7F ,\0\vA\0N@ \0 (\b6\b \0 )\x007\0\v (\0!@@@ ("A M@ \0 :\0\v\f\v A\xF7\xFF\xFF\xFF\x07O\r A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v Aj"@ \0  \xFC \0\0\v\f\vi\0\v\v\xCC\x7F@A\xF6\xFF\xFF\xFF\x07 k O@ \0,\0\vA\0H! \0(\0A\xF7\xFF\xFF\xFF\x07! A\xF2\xFF\xFF\xFFM@A\v  j" At"  K\x1B"A\x07rAj A\vI\x1B!\v \0 \x1B! 9! @   \xFC \0\0\v@  F\r\0  k"\x07E\r\0  j  j \x07\xFC \0\0\v A G@ !\v \0 6\0 \0 A\x80\x80\x80\x80xr6\b\f\vi\0\v \0 6\v\0 \0 \0(\0A\fk(\0j"\0 jK \0\vK\x7F \0("A\bu!\x07 \0(\0"\0   Aq\x7F (\0 \x07j(\0 \x07\v j A Aq\x1B  \0(\0(\v\0\v\x9A\0 \0A:\x005@  \0(G\r\0 \0A:\x004@ \0("E@ \0A6$ \0 6 \0 6 AG\r \0(0AF\r\f\v  F@ \0("AF@ \0 6 !\v \0(0AG\r AF\r\f\v \0 \0($Aj6$\v \0A:\x006\v\vv\x7F \0($"E@ \0 6 \0 6 \0A6$ \0 \0(86\v@@ \0( \0(8G\r\0 \0( G\r\0 \0(AG\r \0 6\v \0A:\x006 \0A6 \0 Aj6$\v\v\x8D\x7F ( \0(\0" \0("kj!  k"@   \xFC \0\0\v  6 \0 \0(\0"6 \0 (6\0  6 \0(! \0 (\b6  6\b \0(\b! \0 (\f6\b  6\f  (6\0\v\x85\x7F@@@ \0,\0\v"A\0N@A ! A F\r \0 AjA\xFF\0q:\0\v\f\v \0(" \0(\bA\xFF\xFF\xFF\xFF\x07qAk"G\r\v \0 A  \xA4 !\v \0 Aj6 \0(\0!\0\v \0 j"\0A\0:\0 \0 :\0\0\v,\x7F \0 A\x90\xCE\0n"At/\xC0\xBB;\0\0 \0Aj  A\x90\xCE\0lk\xAC\v4\x7F \0 A\xE4\0n"At/\xC0\xBB;\0\0 \0  A\xE4\0lkAt/\xC0\xBB;\0 \0Aj\v\xE9\x7F A\xBF\x84=M@ A\x8F\xCE\0M@ A\xE3\0M@ A M@ \0 A0r:\0\0 \0Aj\v \0 At/\xC0\xBB;\0\0 \0Aj\v A\xE7\x07M@ \0 A\xFF\xFFqA\xE4\0n"A0r:\0\0 \0  A\xE4\0lkA\xFF\xFFqAt/\xC0\xBB;\0 \0Aj\v \0 \xAC\v A\x9F\x8DM@ \0 A\x90\xCE\0n"A0j:\0\0 \0Aj  A\x90\xCE\0lk\xAC\v \0 \xAB\v A\xFF\xC1\xD7/M@ A\xFF\xAC\xE2M@ \0 A\xC0\x84=n"A0j:\0\0 \0Aj  A\xC0\x84=lk\xAB\v \0 \x8A\v A\xFF\x93\xEB\xDCM@ \0 A\x80\xC2\xD7/n"A0j:\0\0 \0Aj  A\x80\xC2\xD7/lk\x8A\v \0 A\x80\xC2\xD7/n"At/\xC0\xBB;\0\0 \0Aj  A\x80\xC2\xD7/lk\x8A\v\0 \0(\b*G@ \0(\b\xA6\v \0\v+\x7F#\0Ak"$\0  H6\f \0 \xC5 A\fjI Aj$\0\v\0 \0A\xE8\xF5\x006\0 \0A j  \0\xC3\vT\x7F#\0Ak"$\0\x7F (\0!  \0kAu"@@ \0  \0(\0F\r \0Aj!\0 Ak"\r\0\v\vA\0\v"\0  \0\x1B Aj$\0\v\x9F\x7F#\0Ak"\f$\0 \f \x006\f@@ \0 F@ -\0\0AG\rA\0!\0 A\0:\0\0  (\0"Aj6\0 A.:\0\0 \x07( \x07,\0\v" A\0H\x1BE\r (\0" \bkA\x9FJ\r (\0! Aj6\0  6\0\f\v@@ \0 G\r\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 -\0\0AG\r (\0"\0 \bkA\x9FJ\r (\0! \0Aj6\0 \0 6\0A\0!\0 A\x006\0\f\v \v \vA\xF0\0j \fA\fj\xB1 \vk"\0Au"A\x1BJ\r A\xD0\x85j,\0\0!@@ \0A{q"\0A\xD8\0G@ \0A\xE0\0G\r  (\0"G@A\x7F!\0 Ak,\0\0s ,\0\0sG\r\v  Aj6\0  :\0\0\f\v A\xD0\0:\0\0\f\v s"\0 ,\0\0G\r\0  \0\xB9:\0\0 -\0\0AG\r\0 A\0:\0\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 (\0"\0 \bkA\x9FJ\r\0 (\0! \0Aj6\0 \0 6\0\v  (\0"\0Aj6\0 \0 :\0\0A\0!\0 AJ\r (\0Aj6\0\f\vA\0!\0\f\vA\x7F!\0\v \fAj$\0 \0\vy\x7F#\0Ak"$\0 A\fj" $ ="A\xD0\x85A\xEC\x85  (\0(0\0  n" (\0(\f\0\x006\0   (\0(\0\x006\0 \0  (\0(\0 (\f# Aj$\0\v*\x7F#\0Ak"$\0 \0 ,\0\0  \0k\xCA"\0  \0\x1B Aj$\0\v\x7F \0\xD4 \0(\0"@ \0(\f !\v\v\x97\x7F#\0Ak"\f$\0 \f \0:\0@@ \0 F@ -\0\0AG\rA\0!\0 A\0:\0\0  (\0"Aj6\0 A.:\0\0 \x07( \x07,\0\v" A\0H\x1BE\r (\0" \bkA\x9FJ\r (\0! Aj6\0  6\0\f\v@@ \0 G\r\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 -\0\0AG\r (\0"\0 \bkA\x9FJ\r (\0! \0Aj6\0 \0 6\0A\0!\0 A\x006\0\f\v \v \vAj \fAj\xB4 \vk"A\x1BJ\r A\xD0\x85j,\0\0!@@@@ A~qAk\0\v  (\0"G@A\x7F!\0 Ak,\0\0s ,\0\0sG\r\v  Aj6\0  :\0\0\f\v A\xD0\0:\0\0\f\v s"\0 ,\0\0G\r\0  \0\xB9:\0\0 -\0\0AG\r\0 A\0:\0\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 (\0"\0 \bkA\x9FJ\r\0 (\0! \0Aj6\0 \0 6\0\v  (\0"\0Aj6\0 \0 :\0\0A\0!\0 AJ\r (\0Aj6\0\f\vA\0!\0\f\vA\x7F!\0\v \fAj$\0 \0\vy\x7F#\0Ak"$\0 A\fj" $ >"A\xD0\x85A\xEC\x85  (\0( \0  p" (\0(\f\0\0:\0\0   (\0(\0\0:\0\0 \0  (\0(\0 (\f# Aj$\0\vI\x7F \0 6 \0A\x006\f @ U!\v \0 6\0 \0  Atj"6\b \0  Atj6\f \0 6 \0\v6\x7F \0(" Atj!@  F@ \0 6 A\x006\0 Aj!\f\v\v\v~\x7F~#\0A\xA0k"$\0  6<  6 A\x7F6 Aj"B\0J   A\xAD )\b! )\0!\x07 @  (\x88  ( (\x7F#\0Ak"$\0  \x006\f\x7F \0AO@A\xAE A\fj\xC7A\0\f\v \0At(\x98-\v Aj$\0\v\x85\x7F@  k"A\xF7\xFF\xFF\xFF\x07I@@ A M@ \0 :\0\v\f\v A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v  k"E  FrE@ \0  \xFC \0\0\v \0 jA\0:\0\0\f\vi\0\v\v6\x7F \0(\b" Atj!@  FE@ A\x006\0 Aj!\f\v\v \0 6\b\vD\x7F#\0Ak"$\0 \0(\0!\0  6\b  \x006 A\x9F6\0A\xED\v a\`A\xB0\xF1\0(\0L Aj$\0\v\`\x7F  \0(" k"\x07j! !@  M@ \0 6 \x07E  FrE@  \x07k  \x07\xFC \0\0\v  -\0\0:\0\0 Aj! Aj!\f\v\v\v\0 \0(\0"\0@ \0\v\v\f\0  \0(\0\0\0\v+\x7F \0(! \0(\b!@  G@ \0 Ak"6\b\f\v\v\v\x07\0 \0\0\v\x7F#\0Ak"$\0  \x006\0A\xEC \xDC\0\v\0  \0(\0j 6\0\v\r\0  \0(\0j(\0\vQ\x7F@ E\r\0 A\x8C\xC6E"E\r\0 (\b \0(\bA\x7Fsq\r\0 \0(\f( (\f(G\r\0 \0(( ((F!\v \v{\x7F \0("Aq!\x7F -\x007AF@ A\bu" E\r (\0 j(\0\f\v A\bu E\r\0  \0(\0(68A\0!A\0\v! \0(\0"\0   j A Aq\x1B \0(\0(\b\0\v\r\0 \0( (F\v\xF6\x7F#\0Ak"$\0  6\fA\x94\xC4(\0" \0 \xCB \0y \0jAk-\0\0A G@@@ (L"\0A\0N@ \0E\rA\x84\xCF(\0 \0A\xFF\xFF\xFF\xFFqG\r\v@ (PA F\r\0 ("\0 (F\r\0  \0Aj6 \0A :\0\0\f\v \x9F\f\v  (L"\0A\xFF\xFF\xFF\xFF \0\x1B6L@@ (PA F\r\0 ("\0 (F\r\0  \0Aj6 \0A :\0\0\f\v \x9F\v (L A\x006L\v\v\x9C\0\v\x88\x7F@@@ \0,\0\v"A\0N@A! AF\r \0 AjA\xFF\0q:\0\v\f\v \0(" \0(\bA\xFF\xFF\xFF\xFF\x07qAk"G\r\v \0 A  \xFF !\v \0 Aj6 \0(\0!\0\v \0 Atj"\0A\x006 \0 6\0\v\x9B\x7FA\xF6\xFF\xFF\xFF k O@A\xF7\xFF\xFF\xFF! \0(\0 \0 \0,\0\vA\0H\x1B! A\xF2\xFF\xFF\xFFM@  j" At"  K\x1BArAj! \v U!@ E\r\0 At"\bE\r\0  \b\xFC \0\0\v@ E\r\0 At"\bE\r\0  Atj \x07 \b\xFC \0\0\v   j"\bk!\x07@  \bF\r\0 \x07At"E\r\0  At"\bj Atj \b j Atj \xFC \0\0\v AG@ !\v \0 6\0 \0 A\x80\x80\x80\x80xr6\b \0  j \x07j"\x006  \0AtjA\x006\0\v0\0\v\x8A\x7F A\xF7\xFF\xFF\xFFI@@ AM@ \0 :\0\v\f\v Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v ! \0!@ @  6\0 Ak! Aj!\f\v\v \0 AtjA\x006\0\v0\0\v\xA0\x7F \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B" O@ \0(\0 \0 \x1B!@ \x7F @   \xFC \0\0\v \0,\0\v Av\v\xC0A\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  jA\0:\0\0\v \0   k \0(  \x1B"\0A\0 \0  \x89\v\x87\x7F A\xF7\xFF\xFF\xFF\x07I@@ A M@ \0 :\0\v\f\v A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v ! \0!@ @  :\0\0 Ak! Aj!\f\v\v \0 jA\0:\0\0\vi\0\v\0 \0 F@ \0A\0:\0x\v !\v<\x7F#\0Ak"$\0@@ AK\r\0 \0-\0xAq\r\0 \0A:\0x\f\v U!\0\v Aj$\0 \0\v \0 \0\xAE!\v\0 \0A\xF0\x906\0 \0Aj  \0\v\0 \0A\xC8\x906\0 \0A\fj  \0\v\x80\x7F !\0@@  \x07M \0 Or\r\0 \0,\0\0"A\xFFq!\x7FA A\0N\r\0 ABI\r A_M@  \0kAH\r \0-\0A\xC0qA\x80G\rA\f\v AoM@  \0kAH\r \0-\0 \0,\0!@@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\v A\xA0\x7FN\r\f\v A\xBF\x7FJ\r\vA\xC0qA\x80G\rA\f\v  \0kAH AtKr\r \0-\0! \0-\0!\b \0,\0!@@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v \bA\xC0qA\x80G A\xC0qA\x80Gr A?q \bAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrrA\xFF\xFF\xC3\0Kr\rA\v! \x07Aj!\x07 \0 j!\0\f\v\v \0 k\v\xB8\x7F#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O  OrE@ ,\0\0"\bA\xFFq!\x7F \bA\0N@ A\xFF\xFF\xC3\0K\rA\f\v \bABI\r \bA_M@A  kAH\rA!\b -\0" A\xC0qA\x80G\r A?q AtA\xC0qr!A\f\v \bAoM@A!\b  k" AH\r ,\0! @@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\b\v A\xA0\x7FH\r\f\x07\v A\xBF\x7FJ\r\v AF\r -\0"\bA\xC0qA\x80G\r \bA?q A\ftA\x80\xE0q A?qAtrr!A\f\v \bAtK\rA!\b  k" AH\r ,\0! @@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\x07\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v AF\r -\0"\vA\xC0qA\x80G\r AF\r -\0" A\xC0qA\x80G\rA!\b A?q \vAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrr"A\xFF\xFF\xC3\0K\rA\v!\b  6\0 \0  \bj"6\f \0 Aj"6\b\f\v\v  I!\b\v \b\f\vA\v  \0(\f6\0 \x07 \0(\b6\0 \0Aj$\0\v\xF5\0#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O@A\0!\f\vA! (\0"A\xFF\xFF\xC3\0K A\x80pqA\x80\xB0Fr\r\0@ A\xFF\0M@A!  \0(\b"kA\0L\r \0 Aj6\b  :\0\0\f\v A\xFFM@  \0(\b"kAH\r \0 Aj6\b  AvA\xC0r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\f\v  \0(\b"k! A\xFF\xFFM@ AH\r \0 Aj6\b  A\fvA\xE0r:\0\0 \0 \0(\b"Aj6\b  AvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\f\v AH\r \0 Aj6\b  AvA\xF0r:\0\0 \0 \0(\b"Aj6\b  A\fvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  AvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\v \0 \0(\fAj"6\f\f\v\v \f\vA\v  \0(\f6\0 \x07 \0(\b6\0 \0Aj$\0\v\x92\x7F !\0@@  M \0 Or\r\0\x7F \0Aj \0-\0\0"\xC0A\0N\r\0 A\xC2I\r A\xDFM@  \0kAH\r \0-\0A\xC0qA\x80G\r \0Aj\f\v A\xEFM@  \0kAH\r \0-\0 \0,\0!@@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\v A\xA0\x7FN\r\f\v A\xBF\x7FJ\r\vA\xC0qA\x80G\r \0Aj\f\v  \0kAH A\xF4Kr  kAIr\r \0-\0!\x07 \0-\0!\b \0,\0!@@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v \bA\xC0qA\x80G \x07A\xC0qA\x80Gr \x07A?q \bAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrrA\xFF\xFF\xC3\0Kr\r Aj! \0Aj\v!\0 Aj!\f\v\v \0 k\v\x81\x7F#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O  OrE@A! \0\x7F -\0\0"\xC0A\0N@  ;\0A\f\v A\xC2I\r A\xDFM@A  kAH\r -\0"\bA\xC0qA\x80G\r  \bA?q AtA\xC0qr;\0A\f\v A\xEFM@A!  k" AH\r ,\0!\b@@ A\xEDG@ A\xE0G\r \bA\`qA\xA0\x7FG\r\b\f\v \bA\xA0\x7FN\r\x07\f\v \bA\xBF\x7FJ\r\v AF\r -\0" A\xC0qA\x80G\r  A?q \bA?qAt A\ftrr;\0A\f\v A\xF4K\rA!  k" AH\r -\0"\v\xC0!\b@@@@ A\xF0k\0\v \bA\xF0\0jA\xFFqA0O\r\x07\f\v \bA\x90\x7FN\r\f\v \bA\xBF\x7FJ\r\v AF\r -\0"\bA\xC0qA\x80G\r AF\r -\0" A\xC0qA\x80G\r  kAH\rA! A?q" \bAt"\fA\xC0q \vA\ftA\x80\xE0q A\x07q"AtrrrA\xFF\xFF\xC3\0K\r  \fA\xC0\x07qrA\x80\xB8r;  \bAvAq \vAt" A\xC0q A\btr A! Aj p"\f \f(\0(\0  6\0@@ \0"\b-\0\0"A+k\0\0\v \xC0 (\0(\0!  (\0"\x07Aj6\0 \x07 :\0\0 \0Aj!\b\v@@  \b"kAL\r\0 -\0\0A0G\r\0 -\0A rA\xF8\0G\r\0 A0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 ,\0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 Aj"\b!@  M\r ,\0\0*!\xB8E\r Aj!\f\0\v\0\v@  M\r ,\0\0*!\xB7E\r Aj!\f\0\v\0\v@ (\b ,\0"\x07 \x07A\0H\x1BE@ \b  (\0 (\0( \0  (\0  \bkj6\0\f\v \b c \f \f(\0(\0\0! \b!\x07@  \x07M@  \b \0kj (\0c@ (" Aj" ,\0A\0H"\x1B \rj,\0\0A\0L\r\0 \v   \x1B \rj,\0\0G\r\0  (\0"\vAj6\0 \v :\0\0A\0!\v \r \r (\b ,\0" A\0H\x1BAkIj!\r\v \x07,\0\0 (\0(\0!  (\0"Aj6\0  :\0\0 \x07Aj!\x07 \vAj!\v\f\v\v\v@@@  M@ !\x07\f\v Aj!\x07 ,\0\0"A.G\r \f \f(\0(\f\0\0!  (\0"\bAj6\0 \b :\0\0\v \x07  (\0 (\0( \0  (\0  \x07kj"6\0     \0kj  F\x1B6\0 Aj  Aj$\0\v  (\0(\0!  (\0"\bAj6\0 \b :\0\0 \x07!\f\0\v\0\v\xB9\x7F#\0A@j"$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! A3j!@ E A\x80qEr\r\0 \b@ A0:\x003 A4j!\f\v \x07A\bG\r\0 A0:\x003 A\xD8\0A\xF8\0 A\x80\x80q\x1B:\x004 A5j!\v A(j  A@k  \x94 ((!@ A\x88\x80qA\x88\x80G\r\0@  F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v A3j"  G! Aj"\x07 $    Aj" A\fj A\bj \x07\x93 (# \0  (\f (\b  Z A@k$\0\v\xED\b\x7F#\0Ak"$\0A\xA5\bAA\xA0 A\xEE AAA\0A\0\fA\x92\fAA\xF4 A\xA8!AAA\0A\0\fA\x88\xCE-\0\0E@A\x88\xCEA:\0\0A\xAC!A\xB8\xC8\x07\vA\xFC A\x9C%A\xD4%A\0A\x8A&AA\x8D&A\0A\x8D&A\0A\x83A\x8F&A\x07 A\xFC AA\x94&A\x98&A"A\b#\0Ak"\0$\0 \0A 6\fA\xFC A\x9CAA\x9C&A\xA8&A# \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A 6\fA\xFC A\xEDAA\xB0&A\xC0&A$ \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\v6\fA\xFC A\x83AA\xC8&A\xD0&A% \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\f6\fA\xFC A\xBF AA\xF8&A\x84'A& \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\r6\fA\xFC A\xBB AA\x90'A\xA0'A' \0A\fj4A\0A\0A\0 \0Aj$\0A\xFC A\xB8\xC8A\x83A\xBF  A\x94\xCE-\0\0E@A\x94\xCEA:\0\0A\xA8'A\xC0\xC7\x07\vA\xB4*A\xE0*A\x98+A\0A\xCE+AA\x8D&A\0A\x8D&A\0A\xD7A\xD1+A A\xB4*AA\xD4+A\xD8+A(A#\0Ak"\0$\0 \0A6\fA\xB4*A\x9CAA\xDC+A\xE8+A) \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xEDAA\xF0+A\x80,A* \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\x83AA\x88,A\x90,A+ \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xBF AA\x9C,A\xA8,A, \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xBB AA\xB0,A\xC0,A- \0A\fj4A\0A\0A\0 \0Aj$\0A\xB4*A\xC0\xC7A\x83A\xBF  A\xB0 A\xA9A\xC6,AA\xC8,A\b AjA\xEB A\0\x92A\xB6A\x92#\0Ak"\0$\0 \0A\b6\fA\xB0 A\xC2A\xA8\xC7A\xD4,A \0A\fj"4A\xA8\xC7A\xD8,A\x1B 4 \0Aj$\0A\x8A\vA\flA\xDF\vAlA\x94\vA$lA\xE6\vA0lA\xF5 A<lA\xC8A\xC8\0lA\xB0 A\xE8,A\x94AAA\0A\xE8,A\xA3A\0A\xE8,A\xBDAA\xE8,A\xB9AA\xE8,A\xB5AA\xE8,A\xB1AA\xE8,A\x9FAA\xE8,A\x9BAA\xE8,A\x93A\x07A\xE8,A\x8FA\bA\xD0 A\xFC A\x89-AA\x8B-A\b#\0Ak"\0$\0 \0A\x006\fA\xD0 A\x83A\xE8,A\x8E-A \0A\fj"4A\xE8,A\x92-A! 4 \0Aj$\0A\xD0  Aj$\0\v3\x7F  \0("j!@  F@ \0 6 A\0:\0\0 Aj!\f\v\v\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9D6\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v8\x7F#\0Ak"$\0  6\f  H6\b \0A\xEC\r (\f\xA9 A\bjI Aj$\0\v\xB1~\x7F#\0A k"\b$\0@@@  G@A\xF8\xD7(\0!\fA\xF8\xD7A\x006\0#\0Ak" $\0*#\0Ak" $\0#\0Ak"\v$\0 \v  \bAjA\xBA \v)\0! \v)\b7\b 7\0 \vAj$\0 )\0! )\b7\b 7\0 Aj$\0 )\0! \b )\b7 \b 7\b Aj$\0 \b)! \b)\b!A\xF8\xD7(\0"E\r \b( G\r ! !\x07 A\xC4\0G\r\f\v A6\0\f\vA\xF8\xD7 \f6\0 \b( F\r\v A6\0 ! \x07!\v \0 7\0 \0 7\b \bA j$\0\v\xC0\x7F|#\0Ak"$\0@@@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0*#\0Ak"$\0  \0 A\fjA\xBA )\0 )\b\xC4! Aj$\0@A\xF8\xD7(\0"\0@ (\f F\r\f\vA\xF8\xD7 6\0 (\f G\r\f\v \0A\xC4\0G\r\f\v A6\0\f\vD\0\0\0\0\0\0\0\0!\v A6\0\v Aj$\0 \v\xBC\x7F}#\0Ak"$\0@@@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0*#\0Ak"$\0  \0 A\fjA\0\xBA )\0 )\b\xAB! Aj$\0@A\xF8\xD7(\0"\0@ (\f F\r\f\vA\xF8\xD7 6\0 (\f G\r\f\v \0A\xC4\0G\r\f\v A6\0\f\vC\0\0\0\0!\v A6\0\v Aj$\0 \v\xBD\x7F~#\0Ak"$\0~ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0B\x7F\f\vA\xF8\xD7 6\0 (\f F\r\0\f\vB\0 \x07} \x07 A-F\x1B\f\v\v A6\0B\0\v Aj$\0\v\xD8\x7F~#\0Ak"$\0\x7F@ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0F \x07B\xFF\xFF\xFF\xFFVr\r\f\vA\xF8\xD7 6\0  (\fG\r \x07B\x80\x80\x80\x80T\r\v A6\0A\x7F\f\v\v A6\0A\0\f\vA\0 \x07\xA7"\0k \0 A-F\x1B\v Aj$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9D6\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xDB\x7F~#\0Ak"$\0\x7F@ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0F \x07B\xFF\xFFVr\r\f\vA\xF8\xD7 6\0  (\fG\r \x07B\x80\x80T\r\v A6\0A\xFF\xFF\f\v\v A6\0A\0\f\vA\0 \x07\xA7"\0k \0 A-F\x1B\v Aj$\0A\xFF\xFFq\v\xAC\x7F~#\0Ak"$\0@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xA3!@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F B\0U\x1B!\f\vA\xF8\xD7 6\0 (\f F\r\v\v A6\0B\0!\v Aj$\0 \v\xDD\x7F~#\0Ak"$\0\x7F@ \0 G@@A\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xA3!@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0A\xFF\xFF\xFF\xFF\x07 B\0U\r\f\vA\xF8\xD7 6\0 (\f F\r\0\f\v B\xFF\xFF\xFF\xFFwW@ A6\0\f\v B\x80\x80\x80\x80\bY@ A6\0A\xFF\xFF\xFF\xFF\x07\f\v \xA7\f\v\v A6\0A\0\f\vA\x80\x80\x80\x80x\v Aj$\0\v\x88\x7F@  kAu"A\xF7\xFF\xFF\xFFI@@ AM@ \0 :\0\v\f\v Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v  k"E  FrE@ \0  \xFC \0\0\v \0 jA\x006\0\f\v0\0\v\v\0 \0  B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\xBE\v\x86\b\x7F (\0!@@@@@@@\x7F@@@@ E\r\0 (\0"E\r\0 \0E@ !\f\v A\x006\0 !\f\v@A\xCC\xCF(\0(\0E@ \0E\r E\r\f !@ ,\0\0"@ \0 A\xFF\xBFq6\0 \0Aj!\0 Aj! Ak"\r\f\v\v \0A\x006\0 A\x006\0  k\v ! \0E\r\f\v y\vA!\x07\f\vA\0\f\vA\v!\x07@ \x07E@ -\0\0Av"Ak Au jrA\x07K\r\x7F Aj" A\x80\x80\x80qE\r\0 ,\0\0A@N@ Ak!\f\x07\v Aj" A\x80\x80 qE\r\0 ,\0\0A@N@ Ak!\f\x07\v Aj\v! Ak!A!\x07\f\v@@ Aq ,\0\0"A\0Lr\r\0 (\0"A\x81\x82\x84\bk rA\x80\x81\x82\x84xq\r\0@ Ak! "Aj! ("A\x81\x82\x84\bk rA\x80\x81\x82\x84xqE\r\0\v\v \xC0A\0J@ Ak! Aj!\f\v\v A\xFFqA\xC2k"A2K\r Aj! At(\x80\x84!A\0!\x07\f\0\v\0\v@ \x07E@ E\r\x07@@ -\0\0"\x07\xC0"A\0L\r\0 Aq AIrE@@@ (\0"A\x81\x82\x84\bk rA\x80\x81\x82\x84xq\r \0 A\xFFq6\0 \0 -\06 \0 -\06\b \0 -\06\f \0Aj!\0 Aj! Ak"AK\r\0\v -\0\0!\v A\xFFq!\x07 \xC0A\0L\r\v \0 \x076\0 \0Aj!\0 Aj! Ak"\r\f \v\v \x07A\xC2k"A2K\r Aj! At(\x80\x84!A!\x07\f\v -\0\0"\bAv"Ak  AujrA\x07K\r@@\x7F Aj" \bA\x80k Atr"\x07A\0N\r\0 -\0\0A\x80k"A?K\r  \x07At"\br!\x07 Aj" \bA\0N\r\0 -\0\0A\x80k"A?K\r  \x07Atr!\x07 Aj\v! \0 \x076\0 Ak! \0Aj!\0\f\vA\xF8\xD7A6\0 Ak!\f\vA\0!\x07\f\0\v\0\v Ak! \r -\0\0!\v A\xFFq\r\0 \0@ \0A\x006\0 A\x006\0\v  k\vA\xF8\xD7A6\0 \0E\r\v  6\0\vA\x7F\v  6\0 \v#\x7F \0!@ "Aj! (\0\r\0\v  \0kAu\v\0 \0\xBA@ \0!\v\v%\x7F#\0Ak"$\0  6\f \0A\xE9 \xA9 Aj$\0\v3\x7F A\x80\x80\x80\x80O@\x85\0\v \0 U"6 \0 6\0 \0  Atj6\b\v\xC9\x7F~#\0A\x90k"$\0 A\0A\x90\xFC\v\0 A\x7F6L  \x006, A\xE2\x006  \x006T ! !#\0A\xB0k"$\0 (L@@ (E@ \xC8 (E\r\v -\0\0"E\r@@@@@ A\xFFq"\0_@@ "Aj! -\0_\r\0\v B\0J@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v_\r\0\v (! )pB\0Y@  Ak"6\v  (,k\xAC )x ||!\f\v\x7F@@ \0A%F@ -\0"\0A*F\r \0A%G\r\v B\0J@ -\0\0A%F@@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"_\r\0\v Aj!\f\v ("\0 (hG@  \0Aj6 \0-\0\0!\f\v %!\v -\0\0 G@ )pB\0Y@  (Ak6\v A\0N \rr\r \f \v ( (,k\xAC )x ||! !\f\vA\0!\x07 Aj\f\v@ \0A0k"\0A K\r\0 -\0A$G\r\0#\0Ak" 6\f   \0AtjAk  \0AK\x1B"\0Aj6\b \0(\0!\x07 Aj\f\v (\0!\x07 Aj! Aj\v!A\0!\vA\0! -\0\0"A0kA\xFFqA M@@ A l A\xFFqjA0k! -\0! Aj! A0kA\xFFqA I\r\0\v\v A\xFFqA\xED\0G\x7F A\0! \x07A\0G!\v -\0!A\0! Aj\v"Aj!A!\0@@@@@@ A\xFFqA\xC1\0k:        \0      \v Aj  -\0A\xE8\0F"\0\x1B!A~A\x7F \0\x1B!\0\f\v Aj  -\0A\xEC\0F"\0\x1B!AA \0\x1B!\0\f\vA!\0\f\vA!\0\f\vA\0!\0 !\vA \0 -\0\0"\0A/qAF"\x1B!@ \0A r \0 \x1B"\fA\xDB\0F\r\0@ \fA\xEE\0G@ \fA\xE3\0G\rA  AL\x1B!\f\v \x07  \xAA\f\v B\0J@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v_\r\0\v (! )pB\0Y@  Ak"6\v  (,k\xAC )x ||!\v  \xAC"J@ ("\0 (hG@  \0Aj6\f\v %A\0H\r\v )pB\0Y@  (Ak6\vA!@@@@@@@@@@@@ \fA\xD8\0k!\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\0\v \fA\xC1\0k"\0AKA \0tA\xF1\0qEr\r \v A\bj  A\0\xAD )xB\0 ( (,k\xAC}Q\r \x07E\r )! )\b! \x07 \v \fArA\xF3\0F@ A jA\x7FA\x81\xC6 A\0:\0 \fA\xF3\0G\r\b A\0:\0A A\0:\0. A\x006*\f\b\v A j -\0"\0A\xDE\0F"A\x81\xC6 A\0:\0 Aj Aj \x1B!\x7F@@ AA \x1Bj-\0\0"A-G@ A\xDD\0F\r \0A\xDE\0G!\b \f\v  \0A\xDE\0G"\b:\0N\f\v  \0A\xDE\0G"\b:\0~\v Aj\v!@@ -\0\0"\0A-G@ \0E\r \0A\xDD\0F\r \f\vA-!\0 -\0"E A\xDD\0Fr\r\0 Aj!@  Ak-\0\0"M@ !\0\f\v@ Aj" A jj \b:\0\0  -\0\0"\0I\r\0\v\v !\v A j \0j \b:\0 Aj!\f\0\v\0\vA\b!\f\vA !\f\vA\0!\vB\0!A\0!A\0!A\0!#\0Ak"\b$\0@ AG A$MqE@A\xF8\xD7A6\0\f\v@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0_\r\0\v@@ \0A+k\0\0\vA\x7FA\0 \0A-F\x1B! ("\0 (hG@  \0Aj6 \0-\0\0!\0\f\v %!\0\v@@@@ A\0G AGq \0A0GrE@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A_qA\xD8\0F@A!\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0AI\r )pB\0Y@  (Ak6\v B\0J\f\v \rA\b!\f\v A \x1B" \0A\xF1\x81j-\0\0K\r\0 )pB\0Y@  (Ak6\v B\0JA\xF8\xD7A6\0\f\v A G\r\0 \0A0k"A M@A\0!\0@ \0A l j"\0A\x99\xB3\xE6\xCCI\x7F (" (hG@  Aj6 -\0\0\f\v %\vA0k"A Mq\r\0\v \0\xAD!\v A K\r B ~! \xAD!@@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A0k"A M  |"B\x9A\xB3\xE6\xCC\x99\xB3\xE6\xCCTqE@ A M\r\f\v B ~" \xAD"B\x7F\x85X\r\v\vA !\f\v@@  Akq@  \0A\xF1\x81j-\0\0"K\r\f\v  \0A\xF1\x81j-\0\0"M\r AlAvA\x07q,\0\xF1\x83!@   t"r! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M"E A\x80\x80\x80\xC0\0Iq\r\0\v \xAD! \rB\x7F \xAD"\x88" T\r@ \xADB\xFF\x83  \x86\x84! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M\r  X\r\0\v\f\v@   lj! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M"E A\xC7\xE3\xF18Iq\r\0\v \xAD! \r \xAD!@  ~" \xADB\xFF\x83"B\x7F\x85V\r  |! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M\r \b B\0 B\02 \b)\bP\r\0\v\v\v  \0A\xF1\x81j-\0\0M\r\0@ \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\vA\xF1\x81j-\0\0K\r\0\vA\xF8\xD7A\xC4\x006\0A\0!B\x7F!\v )pB\0Y@  (Ak6\v ArE B\x7FQq@A\xF8\xD7A\xC4\x006\0B~!\f\v  \xAC"\x85 }!\v \bAj$\0 )xB\0 ( (,k\xAC}Q\r \x07E \fA\xF0\0GrE@ \x07 >\0\f\v \x07  \xAA\f\v \x07  \xAB8\0\f\v \x07  \xC49\0\f\v \x07 7\0 \x07 7\b\f\vA Aj \fA\xE3\0G"\x1B!\b\x7F AF@ \x07! \v@ \bAt/"E\r\v B\x007\xA8A\0!@@@ !\0@ \x7F (" (hG@  Aj6 -\0\0\f\v %\v"j-\0!E\r  :\0\x1B Aj A\x1BjA A\xA8j\x98"A~F\r\0 A\x7FF@A\0! \f\v \0@ \0 Atj (6\0 Aj!\v \vE  \bGr\r\0\v \0 \bAtAr"\bAt\x9D"\r\0\vA\0! \0! A!\v\f\b\vA\0! \0 A\xA8j\x7F (\xA8A\0\vE\r\v \0! \f\v \v@A\0! \b/"E\r@ !\0@ \x7F (" (hG@  Aj6 -\0\0\f\v %\v"j-\0!E@ \0! A\0\f\v \0 j :\0\0 Aj" \bG\r\0\v \0 \bAtAr"\b\x9D"\r\0\vA\0! \0! A!\v\f\vA\0! \x07@@ \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0j-\0!@  \x07j \0:\0\0 Aj!\f \x07"\0! A\0\f\v\0\v\0\v@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v j-\0!\r\0\vA\0!\0A\0! A\0\v! (! )pB\0Y@  Ak"6\v )x  (,k\xAC|"P   QrEr\r \v@ \x07 \x006\0\v \fA\xE3\0F\r\0 @ AtjA\x006\0\v E@A\0! \f\v  jA\0:\0\0\v ( (,k\xAC )x ||! \r \x07A\0Gj!\r\v Aj! -\0"\r\f\v\vA!\vA\0! A\0! \v \rA\x7F \r\x1B!\r\v \vE\r ! !\f\vA\x7F!\r\v A\xB0j$\0 A\x90j$\0 \r\vC\0@ \0E\r\0@@@@ Aj\0\v \0 <\0\0\v \0 =\0\v \0 >\0\v \0 7\0\v\v\xE4\x7F~#\0A k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!\x07@ B0\x88B\xFF\xFF\x83"\b\xA7"A\x81\xFF\0kA\xFDM@ \x07B\x88\xA7!@ \0P B\xFF\xFF\xFF\x83"\x07B\x80\x80\x80\bT \x07B\x80\x80\x80\bQ\x1BE@ Aj!\f\v \0 \x07B\x80\x80\x80\b\x85\x84B\0R\r\0 Aq j!\vA\0  A\xFF\xFF\xFFK"\x1B!A\x81\x81\x7FA\x80\x81\x7F \x1B j!\f\v \0 \x07\x84P \bB\xFF\xFFRrE@ \x07B\x88\xA7A\x80\x80\x80r!A\xFF!\f\v A\xFE\x80K@A\xFF!\f\vA\x80\xFF\0A\x81\xFF\0 \bP"\x1B" k"A\xF0\0J@A\0!A\0!\f\v \x07 \x07B\x80\x80\x80\x80\x80\x80\xC0\0\x84 \x1B!\x07A\0!  G@ Aj \0 \x07A\x80 k6 ) )\x84B\0R!\v  \0 \x07 g )\b"\0B\x88\xA7!@ )\0 \xAD\x84"\x07P \0B\xFF\xFF\xFF\x83"\0B\x80\x80\x80\bT \0B\x80\x80\x80\bQ\x1BE@ Aj!\f\v \x07 \0B\x80\x80\x80\b\x85\x84B\0R\r\0 Aq j!\v A\x80\x80\x80s  A\xFF\xFF\xFFK"\x1B!\v A j$\0 B \x88\xA7A\x80\x80\x80\x80xq Atr r\xBE\v\x89\x7F~@@\x7F@@\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A+k\0\0\v A-F E\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A:k"AuKr\r \0)pB\0S\r \0 \0(Ak6\f\v A:k! !A\0\v! AvI\r\0@ A0kA O\r\0A\0!@  A lj\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v!A0k! A\xCC\x99\xB3\xE6\0H A0k"A Mq\r\0\v \xAC! A O\r\0@ \xAD B ~|!\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A0k"A M B0}"B\xAE\x8F\x85\xD7\xC7\xC2\xEB\xA3Sq\r\0\v A O\r\0@\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\vA0kA I\r\0\v\v \0)pB\0Y@ \0 \0(Ak6\vB\0 }  \x1B!\f\vB\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F! \0)pB\0S\r\0 \0 \0(Ak6B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\v \v\x842\x7F\x07~|#\0A0k"\r$\0@@ AK\r\0 At"(\xDC\x81! (\xD0\x81!@\x7F (" (hG@  Aj6 -\0\0\f\v %\v"_\r\0\vA!\b@@ A+k\0\0\vA\x7FA A-F\x1B!\b (" (hG@  Aj6 -\0\0!\f\v %!\v@@ A_qA\xC9\0F@@ A\x07F\r\x7F (" (hG@  Aj6 -\0\0\f\v %\v! ,\0\xAF\b Aj! A rF\r\0\v\v AG@ A\bF"\f\r E AIr\r \f\r\v )p"B\0Y@  (Ak6\v E AIr\r\0 B\0S!@ E@  (Ak6\v Ak"AK\r\0\v\vB\0!#\0Ak"$\0 \b\xB2C\0\0\x80\x7F\x94\xBC"A\xFF\xFF\xFFq!\b\x7F Av"A\xFFq"@ A\xFFG@ \b\xADB\x86! A\xFFqA\x80\xFF\0j\f\v \b\xADB\x86!A\xFF\xFF\f\vA\0 \bE\r\0  \b\xADB\0 \bg"A\xD1\0j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85! )\0!A\x89\xFF\0 k\v! \r 7\0 \r \xADB0\x86 Av\xADB?\x86\x84 \x847\b Aj$\0 \r)\b! \r)\0!\f\v@@@@@@ \r\0A\0! A_qA\xCE\0G\r\0@ AF\r\x7F (" (hG@  Aj6 -\0\0\f\v %\v! ,\0\xFC\r Aj! A rF\r\0\v\v \0\v@\x7F (" (hG@  Aj6 -\0\0\f\v %\vA(F@A!\f\vB\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0! )pB\0S\r  (Ak6\f\v@\x7F (" (hG@  Aj6 -\0\0\f\v %\v"A0kA I A\xC1\0kAIr A\xDF\0FrE A\xE1\0kAOqE@ Aj!\f\v\vB\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0! A)F\r )p"B\0Y@  (Ak6\v@ @ \r\f\vA\xF8\xD7A6\0B\0!\f\v@ B\0Y@  (Ak6\v Ak"\r\0\v\f\v )pB\0Y@  (Ak6\vA\xF8\xD7A6\0\v B\0J\f\v@ A0G\r\0\x7F (" (hG@  Aj6 -\0\0\f\v %\vA_qA\xD8\0F@#\0A\xB0k"$\0\x7F (" (hG@  Aj6 -\0\0\f\v %\v!@\x7F@ A0G@@ A.G\r (" (hF\r\0  Aj6 -\0\0\f\v (" (hG\x7FA!  Aj6 -\0\0A! %\v!\f\v\v %\v"A0G@A!\v\f\v@ B}!\x7F (" (hG@  Aj6 -\0\0\f\v %\v"A0F\r\0\vA!\vA!\vB\x80\x80\x80\x80\x80\x80\xC0\xFF?!@@ !@@ A0k"\x07A I\r\0 A.G"\f A r"A\xE1\0kAKq\r \f\r\0 \v\rA!\v !\f\v A\xD7\0k \x07 A9J\x1B!@ B\x07W@  Atj! \f\v BX@ A0j ? A j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFD?+ Aj )0 )8 ) " )("+  ) )  < )\b! )\0!\f\v E r\r\0 A\xD0\0j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF?+ A@k )P )X  \0 \b \b \b \v B\0R\x1B \v \bAkA\xFFq"G\x1B  \vF\x1B! \vAk!  \vG\r\0\v Ak! \b! E\r\0\v AkA\xFFq" F@ A\x90j"\b A\xFEjA\xFFqAtj" (\0 At \bj(\0r6\0 !\v A j! A\x90j Atj 6\0\f\v\v@@ AjA\xFFq!\b A\x90j AkA\xFFqAtj!@A A A-J\x1B!@@ !A\0!@@@  jA\xFFq" F\r\0 A\x90j Atj(\0" At(\xA0\x81"I\r\0  I\r Aj"AG\r\v\v A$G\r\0B\0!A\0!B\0!@   jA\xFFq"F@ AjA\xFFq"At jA\x006\x8C\v A\x80j A\x90j Atj(\0r A\xF0j  B\0B\x80\x80\x80\x80\xE5\x9A\xB7\x8E\xC0\0+ A\xE0j )\xF0 )\xF8 )\x80 )\x88< )\xE8! )\xE0! Aj"AG\r\0\v A\xD0j \f? A\xC0j   )\xD0 )\xD8+B\0! )\xC8! )\xC0! A\xF1\0j" k" A\0 A\0J\x1B  H"\b\x1B"\x07A\xF0\0M\r\f\v  j! !  F\r\0\vA\x80\x94\xEB\xDC v!\vA\x7F tA\x7Fs!A\0! !@ A\x90j"\x07 Atj"  (\0" vj"6\0 AjA\xFFq  E  Fq"\x1B! A k \x1B! q \vl! AjA\xFFq" G\r\0\v E\r  \bG@ At \x07j 6\0 \b!\f\v  (\0Ar6\0\f\v\v\v A\x90jA\xE1 \x07k\xC8T A\xB0j )\x90 )\x98 \xB1 )\xB8! )\xB0! A\x80jA\xF1\0 \x07k\xC8T A\xA0j   )\x80 )\x88\xAE A\xF0j   )\xA0" )\xA8"\xBC A\xE0j   )\xF0 )\xF8< )\xE8! )\xE0!\v@ AjA\xFFq" F\r\0@ A\x90j Atj(\0"A\xFF\xC9\xB5\xEEM@ E AjA\xFFq Fq\r A\xF0j \f\xB7D\0\0\0\0\0\0\xD0?\xA2T A\xE0j   )\xF0 )\xF8< )\xE8! )\xE0!\f\v A\x80\xCA\xB5\xEEG@ A\xD0j \f\xB7D\0\0\0\0\0\0\xE8?\xA2T A\xC0j   )\xD0 )\xD8< )\xC8! )\xC0!\f\v \f\xB7!\x1B  AjA\xFFqF@ A\x90j \x1BD\0\0\0\0\0\0\xE0?\xA2T A\x80j   )\x90 )\x98< )\x88! )\x80!\f\v A\xB0j \x1BD\0\0\0\0\0\0\xE8?\xA2T A\xA0j   )\xB0 )\xB8< )\xA8! )\xA0!\v \x07A\xEF\0K\r\0 A\xD0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFF?\xAE )\xD0 )\xD8B\0B\0d\r\0 A\xC0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFF?< )\xC8! )\xC0!\v A\xB0j    < A\xA0j )\xB0 )\xB8  \xBC )\xA8! )\xA0!@ Ak A\xFF\xFF\xFF\xFF\x07qN\r\0  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x837\x98  7\x90 A\x80j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF?+ )\x90 )\x98B\x80\x80\x80\x80\x80\x80\x80\xB8\xC0\0\xB2! )\x88  A\0N"\x1B! )\x80  \x1B! \b \x07 G A\0Hrq  B\0B\0dA\0GqE   j"A\xEE\0jNq\r\0A\xF8\xD7A\xC4\x006\0\v A\xF0j   \xB0 )\xF8! )\xF0\v! \r 7( \r 7 A\x90\xC6\0j$\0 \r)(! \r) !\f\vB\0!\f\vB\0!\v \0 7\0 \0 7\b \rA0j$\0\v\xC0\x7F~#\0A\x80k"$\0@@@  B\0B\0dE\r\0\x7F B\xFF\xFF\xFF\xFF\xFF\xFF?\x83! \x7F B0\x88\xA7A\xFF\xFFq"\x07A\xFF\xFFG@A \x07\rAA  \x84P\x1B\f\v  \x84P\v\vE\r\0 B0\x88\xA7"\bA\xFF\xFFq"A\xFF\xFFG\r\v Aj    +  )" )"  \xAF )\b! )\0!\f\v  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83" dA\0L@   d@ !\f\v A\xF0\0j  B\0B\0+ )x! )p!\f\v B0\x88\xA7A\xFF\xFFq!\x07 ~  A\xE0\0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xBB\xC0\0+ )h" B0\x88\xA7A\xF8\0k! )\`\v! \x07E@ A\xD0\0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xBB\xC0\0+ )X" B0\x88\xA7A\xF8\0k!\x07 )P!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83B\x80\x80\x80\x80\x80\x80\xC0\0\x84!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83B\x80\x80\x80\x80\x80\x80\xC0\0\x84!  \x07J@@~ \v}  V\xAD}" B\0Y@  }"\x84P@ A j  B\0B\0+ )(! ) !\f\v B\x86 B?\x88\x84\f\v B\x86 B?\x88\x84\v! B\x86! Ak" \x07J\r\0\v \x07!\v@ \v}  V\xAD}" B\0S@ ! \f\v  }"\x84B\0R\r\0 A0j  B\0B\0+ )8! )0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?X@@ B?\x88 Ak! B\x86! B\x86\x84" B\x80\x80\x80\x80\x80\x80\xC0\0T\r\0\v\v \bA\x80\x80q!\x07 A\0L@ A@k  B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 A\xF8\0j \x07r\xADB0\x86\x84B\0B\x80\x80\x80\x80\x80\x80\xC0\xC3?+ )H! )@!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83  \x07r\xADB0\x86\x84!\v \0 7\0 \0 7\b A\x80j$\0\v\x87\x7F~#\0A\xD0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83!\f B0\x88\xA7A\xFF\xFFq!\x07@@ B0\x88\xA7A\xFF\xFFq"\bA\xFF\xFFkA\x82\x80~O@ \x07A\xFF\xFFkA\x81\x80~K\r\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f\f\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f !\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\0!B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\f\f\v \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\0!\f\v  \x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0 \f  \x84P\x1B!\fB\0!\f\v  \x84P@ \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?X@ A\xC0j   P"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6A k! )\xC8! )\xC0!\v B\xFF\xFF\xFF\xFF\xFF\xFF?V\r\0 A\xB0j  \v  \v \vP" \x1ByB\xC0\0B\0 \x1B|\xA7" Ak6  jAk! )\xB8!\v )\xB0!\v A\xA0j \vB\x80\x80\x80\x80\x80\x80\xC0\0\x84"B\x86 B1\x88\x84"B\0B\x80\x80\x80\x80\xB0\xE6\xBC\x82\xF5\0 }"B\02 A\x90jB\0 )\xA8}B\0 B\02 A\x80j )\x98B\x86 )\x90B?\x88\x84"B\0 B\02 A\xF0j B\0B\0 )\x88}B\02 A\xE0j )\xF8B\x86 )\xF0B?\x88\x84"B\0 B\02 A\xD0j B\0B\0 )\xE8}B\02 A\xC0j )\xD8B\x86 )\xD0B?\x88\x84"B\0 B\02 A\xB0j B\0B\0 )\xC8}B\02 A\xA0j B\0 )\xB8B\x86 )\xB0B?\x88\x84B}"B\02 A\x90j B\x86B\0 B\02 A\xF0\0j B\0B\0 )\xA8 )\xA0" )\x98|" T\xAD| BV\xAD|}B\02 A\x80jB }B\0 B\02  \b \x07kj"\bA\xFF\xFF\0j!~ )p"B\x86"\r )\x88"B\x86 )\x80B?\x88\x84|"B\xE7\xEC\0}"B \x88" B\x80\x80\x80\x80\x80\x80\xC0\0\x84"B\x86"B \x88"~" B\x86"B \x88"\v  V\xAD \r V\xAD )xB\x86 B?\x88\x84 B?\x88|||B}"B \x88"~|"\r T\xAD \r \r B\xFF\xFF\xFF\xFF\x83" B?\x88" B\x86\x84B\xFF\xFF\xFF\xFF\x83" ~|"\rV\xAD|  ~|  ~" ~|" T\xADB \x86 B \x88\x84| \r B \x86|" \rT\xAD|   B\xFF\xFF\xFF\xFF\x83" ~"\r  \v~|" \rT\xAD    B\xFE\xFF\xFF\xFF\x83"\r~|"V\xAD||"V\xAD|   ~" \r ~|"  ~|" \v ~|"B \x88 V\xAD  T\xAD  V\xAD||B \x86\x84|" T\xAD|     \r~" \v ~|"B \x88  T\xADB \x86\x84|" T\xAD B \x86|" V\xAD||"V\xAD|   B \x86" \r ~| T\xADB\x7F\x85"V  Rq\xAD|"V\xAD|"B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0X@  \x84! A\xD0\0j  B\x80\x80\x80\x80\x80\x80\xC0\0T"\x07\xAD"\v\x86"  \v\x86 B\x88 \x07A?s\xAD\x88\x84"  2 \bA\xFE\xFF\0j  \x07\x1BAk! B1\x86 )X} )P"B\0R\xAD}!\vB\0 }\f\v A\xE0\0j B?\x86 B\x88\x84" B\x88"  2 B0\x86 )h} )\`"B\0R\xAD}!\v !B\0 }\v! A\xFF\xFFN@ \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v~ A\0J@ \vB\x86 B?\x88\x84! B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \xADB0\x86\x84!\v B\x86\f\v A\x8F\x7FL@B\0!\f\v A@k A kg A0j   A\xF0\0j6 A j   )@" )H"\v2 )8 )(B\x86 ) "B?\x88\x84} )0" B\x86"T\xAD}!  }\v! Aj  BB\02   BB\02 \v  B\x83" |"T   T\xAD|" V  Q\x1B\xAD|" T\xAD|"   B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T  )V  )"V  Q\x1Bq\xAD|"V\xAD|"  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T  )\0V  )\b"V  Q\x1Bq\xAD|" T\xAD| \f\x84!\f\v \0 7\0 \0 \f7\b A\xD0j$\0\v\xBF\x7F#\0A\xD0\0k"$\0@ A\x80\x80N@ A j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF\xFF\0+ )(! ) ! A\xFF\xFFI@ A\xFF\xFF\0k!\f\v Aj  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF\xFF\0+A\xFD\xFF  A\xFD\xFFO\x1BA\xFE\xFFk! )! )!\f\v A\x81\x80\x7FJ\r\0 A@k  B\0B\x80\x80\x80\x80\x80\x80\x809+ )H! )@! A\xF4\x80~K@ A\x8D\xFF\0j!\f\v A0j  B\0B\x80\x80\x80\x80\x80\x80\x809+A\xE8\x81}  A\xE8\x81}M\x1BA\x9A\xFEj! )8! )0!\v   B\0 A\xFF\xFF\0j\xADB0\x86+ \0 )\b7\b \0 )\x007\0 A\xD0\0j$\0\v<\0 \0 7\0 \0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x83B0\x88\xA7 B0\x88\xA7A\x80\x80qr\xADB0\x86\x847\b\v\xC0\x7F~A\x7F!@ \0B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Rq\r\0 \0  \x84\x84P@A\0\v  \x83B\0Y@  R  Sq\r \0  \x85\x84B\0R\v \0B\0R  U  Q\x1B\r\0 \0  \x85\x84B\0R!\v \v8\0 \0A\xD0k \0 \0A\x93\xF1\xFF\xFF\x07J\x1B"\0Aq@A\0\v \0A\xECj"\0A\xE4\0o@A\v \0A\x90oE\v\x85\x7F~#\0A\x80k"\b$\0 @\x7F@@\x7F@@@ -\0\0"A%G@ \r \f\x07\vA\0!A! @ -\0"\x07A-k\0\v \x07A\xDF\0F\r \x07\r\v \0 j :\0\0 Aj\f\v \x07! -\0!\x07A! \vA\0!@\x7F  j \x07"A+Fj" ,\0\0A0kA M@ \bA\fjA B\xFF\xFF\xFF\xFF\xBE\xA7! \b(\f\f\v \b 6\fA\0! \v"\x07-\0\0"A\xC3\0k"\vAKA \vtA\x99\x80\x80qEr\r\0 "\r\0 \x07 G!\v A\xCF\0F A\xC5\0Fr\x7F \x07-\0! \x07Aj \x07\v! \bAj!\x07 ! A\0!#\0A\xD0\0k"\v$\0A\x8A !\rA0!A\xA8\x80\b!\f@ \b\x7F@@@@@@@\x7F@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@@@@@@@ \xC0"A%kV!---------------------------'-\x07\b ---\r---- ------\0&-\b-\v--\f--%-\x1B-\v ("AM\r"\f*\v ("AK\r) A\x87\x80\bj\f"\v ("A\vK\r( A\x8E\x80\bj\f!\v ("A\vK\r' A\x9A\x80\bj\f \v 4B\xEC|B\xE4\0\x7F!\f#\vA\xDF\0!\v 4\f!\f!\vA\xD2!\r\f\v 4"B\xEC|!@ ("AL@  B\xEB| \xBDAF\x1B!\f\v A\xE9I\r\0 B\xED|  \xBDAF\x1B!\v A\xE7\0F\r\f \v 4\b!\f\vA! (\b"E@B\f!\f \v \xAC"B\f}  A\fJ\x1B!\f\v (Aj\xAC!A!\f\v (Aj\xAC!\f\x1B\v 4!\f\v \bA6|A\xD4!\f\vA\xA7\x80\bA\xA6\x80\b (\bA\vJ\x1B\f\vA\xF7!\r\f\vA\0!\fA\0!#\0Ak"$\0 4!~ ("\rA\fO@ \r \rA\fm"A\flk"A\fj  A\0H\x1B!\r  Auj\xAC |!\v A\fj! B}B\x88X@ \xA7"\fA\xC4\0kAu!@ \x7F \fAqE@ Ak! E\rA\f\v E\rA\0\v6\0\v \fA\x80\xE7\x84l A\x80\xA3ljA\x80\xD6\xAF\xE3\x07j\xAC\f\v B\xE4\0}" B\x90\x7F"B\x90~}"B?\x87\xA7 \xA7j!@@@ \xA7"A\x90j  B\0S\x1B"\x7F\x7F A\xC8N@ A\xACO@A!\f A\xACk\f\vA!\f A\xC8k\f\v A\xE4\0k  A\xE3\0J"\f\x1B\v"\rA\0A\v! \r\f\v Av! AqE! E\r\v  6\0\v B\x80\xE7\x84~  \fAl A\xE1\0ljj k\xACB\x80\xA3~|B\x80\xAA\xBA\xC3|\v! \rAtA\x80\xFE\0j(\0"A\x80\xA3j  (\f\x1B  \rAJ\x1B! (\f! 4\b! 4! 4\0 Aj$\0  \xAC| Ak\xACB\x80\xA3~| B\x90~| B<~|| 4$}\f\b\v 4\0!\f\v \bA6|A\xD6!\f\vA\xE4!\r\f\v ("A\x07 \x1B\xAC\f\v ( (kA\x07jA\x07n\xAD!\f\v ( (AjA\x07pkA\x07jA\x07n\xAD!\f\v \xBD\xAD!\f\v 4\v!A!\f\vA\xA9\x80\b!\f\f \vA\xAA\x80\b!\f\f \v 4B\xEC|B\xE4\0\x81" B?\x87"\x85 }!\f \v 4"B\xEC|! B\xA4?S\r \v 70 \b \x07A\x9B \vA0je6| \x07!\f\v ( A\0H@ \bA\x006|A\xD7!\f\v \v ($"A\x90m"A\xE4\0l  A\x90lk\xC1As!\v \0 6 \0B\x007 AtA\xAC\xDAj!@@A\x80\xD8(\0"A t"\x07qE@A\x80\xD8  \x07r6\0  \x006\0 \0 6\f\v A AvkA\0 AG\x1Bt! (\0!@ "(Axq F\r Av! At!  Aqj"\x07("\r\0\v \x07 \x006 \0 6\v \0 \x006\f \0 \x006\b\v (\b" \x006\f  \x006\b \0A\x006 \0 6\f \0 6\b\v\v\0 \0E@A\0\v \0 \xC5\v\0 \0  A4A5\xD0\v-\0 \0A\xCC\0j1 \0A@k1 \0A4j1 \0A(j1 \0Aj1 \0Aj1\v\xBC\0@@@@@@@@@@@ A k\0\b \b  \b \x07\v  (\0"Aj6\0 \0 (\x006\0\v  (\0"Aj6\0 \0 2\x007\0\v  (\0"Aj6\0 \0 3\x007\0\v  (\0"Aj6\0 \0 0\0\x007\0\v  (\0"Aj6\0 \0 1\0\x007\0\v  (\0A\x07jAxq"A\bj6\0 \0 +\x009\0\v \0  \0\v\v  (\0"Aj6\0 \0 4\x007\0\v  (\0"Aj6\0 \0 5\x007\0\v  (\0A\x07jAxq"A\bj6\0 \0 )\x007\0\vo\x7F \0(\0",\0\0A0k"A K@A\0\v@A\x7F! A\xCC\x99\xB3\xE6\0M@A\x7F  A l"j  A\xFF\xFF\xFF\xFF\x07sK\x1B!\v \0 Aj"6\0 ,\0 ! !A0k"A I\r\0\v \v\xF5\x7F~#\0A@j"\b$\0 \b 6< \bA)j! \bA'j! \bA(j!@@@@@A\0!\x07@ !\r \x07 A\xFF\xFF\xFF\xFF\x07sJ\r \x07 j!@@@@ "\x07-\0\0"\v@@@@ \vA\xFFq"E@ \x07!\f\v A%G\r \x07!\v@ \v-\0A%G@ \v!\f\v \x07Aj!\x07 \v-\0 \vAj"!\vA%F\r\0\v\v \x07 \rk"\x07 A\xFF\xFF\xFF\xFF\x07s"J\r \0@ \0 \r \x073\v \x07\r\x07 \b 6< Aj!\x07A\x7F!@ ,\0A0k" A K\r\0 -\0A$G\r\0 Aj!\x07A! !\v \b \x076\b \b \bA\bj"\x0760A\x7F! \x07\v!\vA\0!\x07@@ \v(\0"\rE\r\0 \bAj \r\xCA"\rA\0H\r \r \x07kK\r\0 \vAj!\v \x07 \rj"\x07 I\r\v\vA=! \x07A\0H\r\f \0A  \x07 \f7 \x07E@A\0!\x07\f\vA\0! \b(0!\v@ \v(\0"\rE\r \bAj" \r\xCA"\r j" \x07K\r \0 \r3 \vAj!\v \x07 K\r\0\v\v \0A  \x07 \fA\x80\xC0\0s7  \x07 \x07 H\x1B!\x07\f\b\v  A\0Hq\r A=! \0 \b+0  \f \x07 \0"\x07A\0N\r\x07\f \v \x07-\0!\v \x07Aj!\x07\f\0\v\0\v \0\r E\rA!\x07@  \x07Atj(\0"\0@  \x07Atj \0  \xCDA! \x07Aj"\x07A G\r\f\v\v\v \x07A O@A!\f \v@  \x07Atj(\0\rA! \x07Aj"\x07A G\r\0\v\f \vA! \f\v \b \x07:\0'A! !\r \v!\f\v \rk"\v \vJ\x1B" A\xFF\xFF\xFF\xFF\x07sJ\rA=!   j" H\x1B"\x07 K\r \0A \x07 \f7 \0  3 \0A0 \x07 \fA\x80\x80s7 \0A0  \vA\07 \0 \r \v3 \0A \x07 \fA\x80\xC0\0s7 \b(! ( ,\0\v"\0 \0A\0H"\0\x1B@ (\0  \0\x1B-\0\0 A- (\0(\0A\xFFqF!\x07\v A\x006\xA0 B\x007\x98 A\x006\x90 B\x007\x88 A\x006\x80 B\x007x  \x07 A\xACj A\xA8j A\xA7j A\xA6j A\x98j A\x88j A\xF8\0j A\xF4\0j\xFC@\x7F\x7F ("\v ,\0\v"\b \bA\0H\x1B"\0 (t" J@ \0 kAtj (| ,\0\x83"\0 \0A\0H\x1Bj (\x8C ,\0\x93"\0 \0A\0H\x1BjAj\f\v (| ,\0\x83"\0 \0A\0H\x1Bj (\x8C ,\0\x93"\0 \0A\0H\x1BjAj\v"\0A\xE5\0I@A\0! Aj\f\v \0/"E\r -\0\v!\b (!\v \v"\0 A\fj A\bj ( (\0  \b\xC0A\0H"\x1B"\f \f \v \b \x1Bj \x07 A\xA8j ,\0\xA7 ,\0\xA6 A\x98j" A\x88j"\x07 A\xF8\0j"\b \xFB  \0 (\f (\b  Z ! \b  \x07    (\xAC# A\xB0j$\0\v0\0\v\xDB\b\x7F#\0A\xB0k"\0$\0 \0 7 \0 7 \0 \0A\xC0j"\x076\xBC \0A\xD0j! @ \x07A\xE3 \0Aje"\x07A\xE4\0O@*!\x07 \0 7\0 \0 7\b \0A\xBCj \x07A\xE3 \0P"\x07A\x7FF\r \0(\xBC!\r \x07/"\v! \vE\r\v \0A\xCCj"\b $ \b>" \0(\xBC"\b \x07 \bj (\0( \0 \x07A\0J@ \0(\xBC-\0\0A-F! \v \0A\x006\xC0 \0B\x007\xB8 \0A\x006\xB0 \0B\x007\xA8 \0A\x006\xA0 \0B\x007\x98  \0A\xCCj \0A\xC8j \0A\xC7j \0A\xC6j \0A\xB8j \0A\xA8j \0A\x98j \0A\x94j\xFC@\x7F \0(\x94"\b \x07H@ \b \x07 \bkAtj \0(\x9C \0,\0\xA3" A\0H\x1Bj \0(\xAC \0,\0\xB3" A\0H\x1BjAj\f\v \b \0(\x9C \0,\0\xA3" A\0H\x1Bj \0(\xAC \0,\0\xB3" A\0H\x1BjAj\v"A\xE5\0I@ \0A0j!\f\v /"\f! \fE\r\v  \0A,j \0A(j ( \x07 j  \0A\xC8j \0,\0\xC7 \0,\0\xC6 \0A\xB8j" \0A\xA8j"\x07 \0A\x98j" \b\xFB   \0(, \0((  Z \f!   \x07    \0(\xCC# \v! \r! \0A\xB0j$\0\v0\0\v\xC0\x7F#\0A\xC0k"\0$\0 \0 6\xB8 \0 6\xBC \0A\xE3\x006 \0 \0A j6 \0Aj"\x07 $ \x07=! \0A\0:\0 \0A\xBCj   \x07 (  \0Aj  \0Aj \0Aj \0A\xB0j\x80@@ ,\0\vA\0H@ (\0A\x006\0 A\x006\f\v A\0:\0\v A\x006\0\v \0-\0AF@  A- (\0(,\0\xDD\v A0 (\0(,\0! \0("Ak! \0(!@@  O\r\0 (\0 G\r\0 Aj!\f\v\v#\0Ak"$\0@  F\r\0 ,\0\v! (\b!\b (!\x07  (\0  ,\0\v" A\0H" \x1B"\vO  \v ( \x1BAtjAjIqE@ \x07  A\0H" \x1B"  k"Au" j!\x07 \bA\xFF\xFF\xFF\xFF\x07qAkA \x1B"\b kK@  \b \x07 \bk  \xFF\v At (\0  ,\0\vA\0H\x1Bj! @   \xFC \0\0\v  jA\x006\0 ,\0\vA\0H@  \x076\f\v  \x07A\xFF\0q:\0\v\f\v Aj"\x07  \xA2 ( \x07 ,\0"A\0H" \x1B!@ (\b  \x1B" (\bA\xFF\xFF\xFF\xFF\x07qAkA ,\0\v"\bA\0H"\x1B" ( \b \x1B"kM@ E\r (\0  \bA\0H\x1B!\b At" @ \b Atj  \xFC \0\0\v  j!@ ,\0\vA\0H@  6\f\v  A\xFF\0q:\0\v\v \b AtjA\x006\0\f\v   j k  A\0  \xDE\v \x07 \v Aj$\0\v \0A\xBCj \0A\xB8j(@  (\0Ar6\0\v \0(\xBC \0(# \0(! \0A\x006 @  \0(\0\v \0A\xC0j$\0\v\xDD\x7F#\0A\xF0k"\x07$\0 \x07 6\xE8 \x07 6\xEC \x07A\xE3\x006\xCC \x07 \x07A\xD0j6\xC8 \x07A\xC0j" $ =!\0 \x07A\0:\0\xBF@ \x07A\xECj    (  \x07A\xBFj \0 \x07A\xC8j \x07A\xC4j \x07A\xE0j\x80E\r\0 \x07A\xEE\x1B(\0\x006\0\xB7 \x07A\xE7\x1B)\0\x007\xB0 \0 \x07A\xB0j \x07A\xBAj \x07A\x80j \0(\0(0\0 \x07Aj!\0@ \x07(\xC4" \x07(\xC8"k"A\x89N@ AvAj/"\0!\b \0E\r\v \0! \x07-\0\xBFAF@ \0A-:\0\0 \0Aj!\v \x07A\xA8j!@  M@@ A\0:\0\0 \x07 6\0 \0 \x07\xA7AG\r\0 \b!\f\v  \x07A\xB0j \x07A\x80j"  \xB1 kAuj-\0\0:\0\0 Aj! Aj! \x07(\xC4!\f\v\v0\0\v0\0\v \x07A\xECj \x07A\xE8j(@  (\0Ar6\0\v \x07(\xEC \x07(\xC0# \x07(\xC8!\0 \x07A\x006\xC8 \0@ \0 \x07(\xCC\0\v \x07A\xF0j$\0\v\xAE\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xE3\x006 \0 \0A j6 \0Aj"\x07 $ \x07>! \0A\0:\0 \0A\x8Cj   \x07 (  \0Aj  \0Aj \0Aj \0A\x84j\x85@@ ,\0\vA\0H@ (\0A\0:\0\0 A\x006\f\v A\0:\0\v A\0:\0\0\v \0-\0AF@  A- (\0(\0\xAA\v A0 (\0(\0 \0("Ak! \0(!A\xFFq!@@  O\r\0 -\0\0 G\r\0 Aj!\f\v\v#\0Ak"$\0@  F\r\0 ,\0\v! (\b!\b (!\x07  (\0  ,\0\v" A\0H" \x1B"\vO  \v ( \x1BjAjIqE@ \x07  A\0H" \x1B"  k"j!\x07  \bA\xFF\xFF\xFF\xFF\x07qAkA \x1B"\b kK@  \b \x07 \bk  \xA4\v (\0  ,\0\vA\0H\x1B j! @   \xFC \0\0\v  jA\0:\0\0 ,\0\vA\0H@  \x076\f\v  \x07A\xFF\0q:\0\v\f\v Aj"\x07  \xCE ( \x07 ,\0"A\0H" \x1B!@ (\b  \x1B" (\bA\xFF\xFF\xFF\xFF\x07qAkA ,\0\v"\bA\0H"\x1B" ( \b \x1B"kM@ E\r (\0  \bA\0H\x1B!\b @  \bj  \xFC \0\0\v  j!@ ,\0\vA\0H@  6\f\v  A\xFF\0q:\0\v\v  \bjA\0:\0\0\f\v   j k  A\0  \x89\v \x07 \v Aj$\0\v \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0(# \0(! \0A\x006 @  \0(\0\v \0A\x90j$\0\v\xD1\x7F#\0A\x90k"\x07$\0 \x07 6\x88 \x07 6\x8C \x07A\xE3\x006\x9C \x07 \x07A\xA0j6\x98 \x07A\x90j" $ >!\0 \x07A\0:\0\x8F@ \x07A\x8Cj    (  \x07A\x8Fj \0 \x07A\x98j \x07A\x94j \x07A\x84j\x85E\r\0 \x07A\xEE\x1B(\0\x006\0\x87 \x07A\xE7\x1B)\0\x007\x80 \0 \x07A\x80j \x07A\x8Aj \x07A\xF6\0j \0(\0( \0 \x07Aj!\0@ \x07(\x94" \x07(\x98"k"A\xE3\0N@ Aj/"\0!\b \0E\r\v \0! \x07-\0\x8FAF@ \0A-:\0\0 \0Aj!\v \x07A\x80j!@  M@@ A\0:\0\0 \x07 6\0 \0 \x07\xA7AG\r\0 \b!\f\v  \x07A\xF6\0j  \xB4 \x07k \x07j-\0 :\0\0 Aj! Aj! \x07(\x94!\f\v\v0\0\v0\0\v \x07A\x8Cj \x07A\x88j)@  (\0Ar6\0\v \x07(\x8C \x07(\x90# \x07(\x98!\0 \x07A\x006\x98 \0@ \0 \x07(\x9C\0\v \x07A\x90j$\0\v\0A\xFC \v\xC7\x7F#\0A\xA0k"\b$\0 \b \bA\xA0j"6\f#\0A\x90k"\x07$\0 \x07 \x07A\x84j6 \0A\bj \x07A j" \x07Aj   \x88 \x07B\x007 \x07 6\f \b(\f \bAj"kAu! \0(\b!\0#\0Ak"$\0  \0H6\f  \x07A\fj  \x07Aj\xA4!\0 A\fjI Aj$\0 \0A\x7FF@0\0\v \b  \0Atj6\f \x07A\x90j$\0 \b(\f!\0#\0Ak"$\0#\0Ak"$\0#\0Ak"$\0  6\f@ \0 G@ A\fj (\0\xBE Aj!\f\v\v  6\b  (\f6\f Aj$\0  )\b7\b Aj$\0 (\f Aj$\0 $\0\v\xB8\0#\0A\x80k"$\0  A\xF4\0j6\f \0A\bj Aj" A\fj   \x88 (\f!\0#\0Ak"$\0#\0Ak"$\0#\0Ak"$\0  6\f@ \0 G@ A\fj ,\0\0\xC0 Aj!\f\v\v  6\b  (\f6\f Aj$\0  )\b7\b Aj$\0 (\f Aj$\0 A\x80j$\0\v\xB8\r\x7F#\0A0k"\x07$\0 \x07 6, A\x006\0 \x07 $ \x07=!\b \x07(\0#\x7F@@@@@@@@@@@@@@@@@@@@@@@@@@ A\xC1\0k9\0\x07 \0\b \v\f\r\v\v \0 Aj \x07A,j   \b\x8B\f\v \0 Aj \x07A,j   \b\x8A\f\v \0A\bj \0(\b(\f\0\0! \x07 \0 \x07(,     (\0  ,\0\v"\0A\0H"\x1B"  ( \0 \x1BAtjV6,\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AkAKrE@  \x006\f\f\v  Ar6\0\v\f\v \x07A\xA8\x86)\x007 \x07A\xA0\x86)\x007 \x07A\x98\x86)\x007\b \x07A\x90\x86)\x007\0 \x07 \0      \x07 \x07A jV6,\f\v \x07A\xC8\x86)\x007 \x07A\xC0\x86)\x007 \x07A\xB8\x86)\x007\b \x07A\xB0\x86)\x007\0 \x07 \0      \x07 \x07A jV6,\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AJrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AkA\vKrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0A\xEDJrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0Ak"\0A\vKrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0A;JrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j!\0#\0Ak"$\0  6\f@@ \0 A\fj(\r\0 \bA \0: \b(\0(\f\0E\r\0 \0Q\f\v\v \0 A\fj(@  (\0Ar6\0\v Aj$\0\f\r\v \x07A,j!@ \0A\bj \0(\b(\b\0\0"\0( \0,\0\v" A\0H\x1BA\0 \0( \0,\0" A\0H\x1BkF@  (\0Ar6\0\f\v   \0 \0Aj \b A\0\x95" \0G (\b"A\fGrE@ A\x006\b\f\v  \0kA\fG A\vJrE@  A\fj6\b\v\v\f\f\v \x07A\xD0\x86A,\xFC \0\0 \x07 \0      \x07 \x07A,jV6,\f\v\v \x07A\x90\x87(\x006 \x07A\x88\x87)\x007\b \x07A\x80\x87)\x007\0 \x07 \0      \x07 \x07AjV6,\f \v \x07A,j   \bAN!\0@ (\0"Aq \0A!\b \x07(\0#\x7F@@@@@@@@@@@@@@@@@@@@@@@@@@ A\xC1\0k9\0\x07 \0\b \v\f\r\v\v \0 Aj \x07A\fj   \b\x8E\f\v \0 Aj \x07A\fj   \b\x8D\f\v \0A\bj \0(\b(\f\0\0! \x07 \0 \x07(\f     (\0  ,\0\v"\0A\0H"\x1B"  ( \0 \x1BjW6\f\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AkAKrE@  \x006\f\f\v  Ar6\0\v\f\v \x07B\xA5\xDA\xBD\xA9\xC2\xEC\xCB\x92\xF9\x007\0 \x07 \0      \x07 \x07A\bjW6\f\f\v \x07B\xA5\xB2\xB5\xA9\xD2\xAD\xCB\x92\xE4\x007\0 \x07 \0      \x07 \x07A\bjW6\f\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AJrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AkA\vKrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0A\xEDJrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0Ak"\0A\vKrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0A;JrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj!\0#\0Ak"$\0  6\f@@ \0 A\fj)\r\0 \0;"A\0H\r\0 \b(\b Atj-\0\0AqE\r\0 \0S\f\v\v \0 A\fj)@  (\0Ar6\0\v Aj$\0\f\r\v \x07A\fj!@ \0A\bj \0(\b(\b\0\0"\0( \0,\0\v" A\0H\x1BA\0 \0( \0,\0" A\0H\x1BkF@  (\0Ar6\0\f\v   \0 \0Aj \b A\0\x97" \0G (\b"A\fGrE@ A\x006\b\f\v  \0kA\fG A\vJrE@  A\fj6\b\v\v\f\f\v \x07A\xF8\x85(\0\x006\0\x07 \x07A\xF1\x85)\0\x007\0 \x07 \0      \x07 \x07A\vjW6\f\f\v\v \x07A\x80\x86-\0\0:\0 \x07A\xFC\x85(\0\x006\0 \x07 \0      \x07 \x07AjW6\f\f \v \x07A\fj   \bAO!\0@ (\0"Aq \0A! (\b# Aj A\fj   \x8C (\f Aj$\0\vM\x7F#\0Ak"$\0  6\f A\bj" $ >! (\b# \0 Aj A\fj   \x8D (\f Aj$\0\vM\x7F#\0Ak"$\0  6\f A\bj" $ >! (\b# \0 Aj A\fj   \x8E (\f Aj$\0\vC\0 \0      \0A\bj \0(\b(\0\0"\0(\0 \0 \0,\0\v"A\0H"\x1B"  \0(  \x1BjW\v;\x7F#\0Ak"$\0 B\xA5\x90\xE9\xA9\xD2\xC9\xCE\x92\xD3\x007\b \0      A\bj Aj"W $\0\v+\x7F  ("A\xB5\xFB~qA\x88r6    \x91  6\v\xB7\x07\x7F\x7F#\0A\x90k"\0$\0 \0B%7\x88 \0A\x88j"\x07ArA\x82 (\x91!\b \0 \0A\xE0j" 6\xDC*!@\x7F@\x7F@ \b@ (\b!\b \0 70 \0 7( \0 \b6  \x07 \0A j]"AJ\r\f\v \0 7P \0 7X \0A\xE0j  \0A\x88j"\x07 \0A\xD0\0j]"AL\r*! \0 7@ \0 7H \0A\xDCj  \x07 \0A@kP\f\v*! (\b!\x07 \0 7 \0 7\b \0 \x076\0 \0A\xDCj  \0A\x88j \0P\v"A\x7FF\r \0(\xDC\f\vA\0\v \0(\xDC"\x07  \x07j" G!\v@ \0A\xE0j \x07F@ \0A\xF0\0j!A\0!\b\f\v At/"\b! \bE\r\v \0A\xE4\0j"\f $ \x07 \v  \0A\xEC\0j \0A\xE8\0j \f\x90 \0(d#   \0(l \0(h  \\! \b!! \0A\x90j$\0 \f\v0\0\v\v\x9A\x07\x7F\x7F#\0A\xF0k"\0$\0 \0B%7\xE8 \0A\xE8j"ArA\xD7 (\x91!\x07 \0 \0A\xC0j"\b6\xBC*!@\x7F@\x7F@ \x07@ (\b!\x07 \0 9 \0 \x076 \b   \0Aj]"AJ\r\f\v \0 90 \0A\xC0j  \0A\xE8j" \0A0j]"AL\r*! \0 9 \0A\xBCj   \0A jP\f\v*! (\b! \0 9\b \0 6\0 \0A\xBCj  \0A\xE8j \0P\v"A\x7FF\r \0(\xBC\f\vA\0\v \0(\xBC"  j" G! @ \0A\xC0j F@ \0A\xD0\0j!A\0!\x07\f\v At/"\x07! \x07E\r\v \0A\xC4\0j"\v $   \0A\xCC\0j \0A\xC8\0j \v\x90 \0(D#   \0(L \0(H  \\! \x07!! \0A\xF0j$\0 \f\v0\0\v\v\xC7\x7F#\0A\xF0k"\0$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! \0A\xD0j!@ A\x80qE Pr\r\0 \b@ \0A0:\0\xD0 Ar!\f\v \x07A\bG\r\0 \0A0:\0\xD0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0\xD1 \0A\xD0jAr!\v \0A\xC8j  \0A\xE8j  \x92 \0(\xC8!\x07@ A\x88\x80qA\x88\x80G\r\0@  \x07F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v \0A\xD0j" \x07 G! \0Aj"\b $   \x07 \0Aj" \0A\fj \0A\bj \b\x90 \0(#   \0(\f \0(\b  \\ \0A\xF0j$\0\v\r\0    \x91\v\xA8\x7F~#\0A\xF0k"$\0 A\xD0j!\0~ ("A\xCA\0q"\x07A\bF"\b B\0YrE@  \x07A\xC0\0F\r A-:\0\xD0 \0Ar!\0B\0 }\f\v \v! \b \x07A\xC0\0F" r A\x80qE B\0SrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ A\x80qE Pr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xC8j \0 A\xE8j \b\x92@ A\x88\x80qA\x88\x80F@@ \0 (\xC8"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (\xC8!\v A\xD0j"\0  G!\x07 Aj"\b $ \0 \x07  Aj"\0 A\fj A\bj \b\x90 (#  \0 (\f (\b  \\ A\xF0j$\0\v\xA5\x7F#\0A\x90k"$\0 A\x83j!\0\x7F ("A\xCA\0q"\x07A\bF"\b A\0NrE@  \x07A\xC0\0F\r A-:\0\x83 A\x84j!\0A\0 k\f\v \v! \b \x07A\xC0\0F" r A\x80qE A\0HrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ E A\x80qEr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xF8\0j \0 A\x90j \b\x94@ A\x88\x80qA\x88\x80F@@ \0 (x"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (x!\v A\x83j"\0  G! Aj"\x07 $ \0   Aj"\0 A\fj A\bj \x07\x90 (#  \0 (\f (\b  \\ A\x90j$\0\v\xDE\x7F#\0Ak"$\0  6\f@ -\0AqE@ \0     \0(\0( \0!\f\v  $ n!\0 (\0#  \0 \0(\0AA \x1Bj(\0\0 (\0"  ,\0\v"A\0H\x1B!@   \xC0A\0H"\0\x1B ( A\xFFq \0\x1BAtj F@ (\f!   A\fj (\0\xBE Aj! (\0! -\0\v!\f\v\v\v Aj$\0 \v+\x7F  ("A\xB5\xFB~qA\x88r6    \x94  6\v\xB7\x07\x7F\x7F#\0A\xE0k"\0$\0 \0B%7\xD8 \0A\xD8j"\x07ArA\x82 (\x91!\b \0 \0A\xB0j" 6\xAC*!@\x7F@\x7F@ \b@ (\b!\b \0 70 \0 7( \0 \b6  \x07 \0A j]"AJ\r\f\v \0 7P \0 7X \0A\xB0j  \0A\xD8j"\x07 \0A\xD0\0j]"AL\r*! \0 7@ \0 7H \0A\xACj  \x07 \0A@kP\f\v*! (\b!\x07 \0 7 \0 7\b \0 \x076\0 \0A\xACj  \0A\xD8j \0P\v"A\x7FF\r \0(\xAC\f\vA\0\v \0(\xAC"\x07  \x07j" G!\v@ \0A\xB0j \x07F@ \0A\xF0\0j!A\0!\b\f\v At/"\b! \bE\r\v \0A\xE4\0j"\f $ \x07 \v  \0A\xEC\0j \0A\xE8\0j \f\x93 \0(d#   \0(l \0(h  Z! \b!! \0A\xE0j$\0 \f\v0\0\v\v\x9A\x07\x7F\x7F#\0A\xC0k"\0$\0 \0B%7\xB8 \0A\xB8j"ArA\xD7 (\x91!\x07 \0 \0A\x90j"\b6\x8C*!@\x7F@\x7F@ \x07@ (\b!\x07 \0 9 \0 \x076 \b   \0Aj]"AJ\r\f\v \0 90 \0A\x90j  \0A\xB8j" \0A0j]"AL\r*! \0 9 \0A\x8Cj   \0A jP\f\v*! (\b! \0 9\b \0 6\0 \0A\x8Cj  \0A\xB8j \0P\v"A\x7FF\r \0(\x8C\f\vA\0\v \0(\x8C"  j" G! @ \0A\x90j F@ \0A\xD0\0j!A\0!\x07\f\v At/"\x07! \x07E\r\v \0A\xC4\0j"\v $   \0A\xCC\0j \0A\xC8\0j \v\x93 \0(D#   \0(L \0(H  Z! \x07!! \0A\xC0j$\0 \f\v0\0\v\v\xC3\x7F#\0A\xF0\0k"\0$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! \0A\xD0\0j!@ A\x80qE Pr\r\0 \b@ \0A0:\0P Ar!\f\v \x07A\bG\r\0 \0A0:\0P \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0Q \0A\xD0\0jAr!\v \0A\xC8\0j  \0A\xE8\0j  \x92 \0(H!\x07@ A\x88\x80qA\x88\x80G\r\0@  \x07F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v \0A\xD0\0j" \x07 G! \0Aj"\b $   \x07 \0Aj" \0A\fj \0A\bj \b\x93 \0(#   \0(\f \0(\b  Z \0A\xF0\0j$\0\v\r\0    \x94\v\xA5\x7F~#\0A\xF0\0k"$\0 A\xD0\0j!\0~ ("A\xCA\0q"\x07A\bF"\b B\0YrE@  \x07A\xC0\0F\r A-:\0P \0Ar!\0B\0 }\f\v \v! \b \x07A\xC0\0F" r A\x80qE B\0SrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ A\x80qE Pr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xC8\0j \0 A\xE8\0j \b\x92@ A\x88\x80qA\x88\x80F@@ \0 (H"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (H!\v A\xD0\0j"\0  G!\x07 Aj"\b $ \0 \x07  Aj"\0 A\fj A\bj \b\x93 (#  \0 (\f (\b  Z A\xF0\0j$\0\v\x9D\x7F#\0A@j"$\0 A3j!\0\x7F ("A\xCA\0q"\x07A\bF"\b A\0NrE@  \x07A\xC0\0F\r A-:\x003 A4j!\0A\0 k\f\v \v! \b \x07A\xC0\0F" r A\x80qE A\0HrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ E A\x80qEr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A(j \0 A@k \b\x94@ A\x88\x80qA\x88\x80F@@ \0 (("F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v ((!\v A3j"\0  G! Aj"\x07 $ \0   Aj"\0 A\fj A\bj \x07\x93 (#  \0 (\f (\b  Z A@k$\0\v\xDB\x7F#\0Ak"$\0  6\f@ -\0AqE@ \0     \0(\0( \0!\f\v  $ p!\0 (\0#  \0 \0(\0AA \x1Bj(\0\0 (\0"  ,\0\v"A\0H\x1B!@   \xC0A\0H"\0\x1B ( A\xFFq \0\x1Bj F@ (\f!   A\fj ,\0\0\xC0 Aj! (\0! -\0\v!\f\v\v\v Aj$\0 \v\xED\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC \0A\x006\xD8 \0B\x007\xD0 \0Aj" $ ="A\xD0\x85A\xEA\x85 \0A\xE0j (\0(0\0 \0(# \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xCCCA  \0A\xBCj \0A\bjA\0 \0A\xD0j \0Aj \0A\fj \0A\xE0jm\r\0 \0(\xCCB\f\v\v \0A\xC0j" \0(\xBC k" \0(\xC0 \0,\0\xCB!*! \0 6\0  A\0H\x1B  \0\x98AG@ A6\0\v \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xC0j  \0A\xD0j  \0A\xD0j$\0\v\xBD\x7F~\x7F#\0A\xF0k"\0$\0 \0 6\xE8 \0 6\xEC \0A\xDCj  \0A\xF0j \0A\xECj \0A\xE8j\xB3 \0A\x006\xD8 \0B\x007\xD0 \0A\xD0j"A " \0 \0(\xD0  \0,\0\xDBA\0H\x1B"6\xCC \0 \0A j6 \0A\x006 \0A:\0 \0A\xC5\0:\0A\0!@@@@ \0A\xECj \0A\xE8j(\r\0 \0(\xCC  \0(\xD4 \0,\0\xDB" A\0H\x1B"jF@ \0A\xD0j" At" A \0(\xD8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xDBA\0N\x1B" \0 \0(\xD0  \0,\0\xDBA\0H\x1B" j6\xCC\v \0(\xECC \0Aj \0Aj  \0A\xCCj \0(\xEC \0(\xE8 \0A\xDCj \0A j \0Aj \0Aj \0A\xF0j\xB2\r\0 \rA\0! \0(\xCC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xE0 \0,\0\xE7" A\0H\x1BE\r\0 \0-\0AqE\r\0 \0(" \0A jkA\x9FJ\r\0 \0 Aj6  \0(6\0\v \0  \0(\xCC \x99 \0)\0!\b  \0)\b7\b  \b7\0 \0A\xDCj \0A j \0( 5 \0A\xECj \0A\xE8j(@  (\0Ar6\0\v \0(\xEC \0A\xD0j  \0A\xDCj  \0A\xF0j$\0\f\vA!\v \0(\xECB\f\0\v\0\v\v\xA6\x7F\x7F#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC \0A\xCCj  \0A\xE0j \0A\xDCj \0A\xD8j\xB3 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\xDCj \0A\xD8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xDCC \0A\x07j \0Aj  \0A\xBCj \0(\xDC \0(\xD8 \0A\xCCj \0Aj \0A\fj \0A\bj \0A\xE0j\xB2\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD0 \0,\0\xD7" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9A9\0 \0A\xCCj \0Aj \0(\f 5 \0A\xDCj \0A\xD8j(@  (\0Ar6\0\v \0(\xDC \0A\xC0j  \0A\xCCj  \0A\xE0j$\0\f\vA!\v \0(\xDCB\f\0\v\0\v\v\xA6\x7F\x7F#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC \0A\xCCj  \0A\xE0j \0A\xDCj \0A\xD8j\xB3 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\xDCj \0A\xD8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xDCC \0A\x07j \0Aj  \0A\xBCj \0(\xDC \0(\xD8 \0A\xCCj \0Aj \0A\fj \0A\bj \0A\xE0j\xB2\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD0 \0,\0\xD7" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9B8\0 \0A\xCCj \0Aj \0(\f 5 \0A\xDCj \0A\xD8j(@  (\0Ar6\0\v \0(\xDC \0A\xC0j  \0A\xCCj  \0A\xE0j$\0\f\vA!\v \0(\xDCB\f\0\v\0\v\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9C7\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\x07\0 \0(\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9F;\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA07\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA16\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\x99\x8B.\x7F}|#\0Ak"$\0  6\f A\x006\b B\x007\0    j"  k\xC2#\0A\xE0\0k"%$\0 %A\bj! (\0"! ( k!#\0A\xC0k"$\0 A\x006\xA0 B\x007\x98 A\x006\xB0 B\x007\xA8 A\xB4j"A\x006\b B\x007\0 A\x80\xC0\0\xB6 A\x80\xC0\0\x96 A\fjA\0A0\xFC\v\0  6\b  6@\x7F Aj!\v\x7FAzA\x94-\0\0A1G\r\0A~ \vE\r \vA\x006 \v( "E@ \vA\x006( \vA/6 A/!\v \v($E@ \vA06$\vA| \v((AA\xD07 \0"E\r \v 6 A\x0068  \v6\0 A\xB4\xFE\x006A~!@ \vE\r\0 \v( E\r\0 \v($"E\r\0 \v("E\r\0 (\0 \vG\r\0 (A\xB4\xFE\0kAK\r\0@@ (8"@ ((AG\r\v A6( A6\f\f\v \v((  \0 A\x0068 \v( A6( A6\fE\r\v \v($E\r\0 \v("E\r\0 (\0 \vG\r\0 (A\xB4\xFE\0kAK\r\0A\0! A\x0064 B\x007, A\x006 \vA\x006\b \vB\x007 (\f"@ \v Aq60\v B\x007< A\x006$ A\x80\x806 B\x80\x80\x80\x80p7 B\xB4\xFE\x007 B\x81\x80\x80\x80p7\xC47  A\xB4 j"6p  6T  6P\vA\0 E\r\0 \v((  \v($\0 \vA\x006 \v\vE@ A\x006\xAC@@  (\0"6  ( k6A\0!\v#\0Ak"$\0A~!\x1B@ Aj"\rE\r\0 \r( E\r\0 \r($E\r\0 \r("\x07E\r\0 \x07(\0 \rG\r\0 \x07("A\xB4\xFE\0kAK\r\0 \r(\f"E\r\0 \r(\0"E@ \r(\r\v A\xBF\xFE\0F@ \x07A\xC0\xFE\x006A\xC0\xFE\0!\v \x07A\xDC\0j!- \x07A\xF2\0j!. \x07A\xF4j!" \x07A\xD8\0j!& \x07A\xF0\0j!# \x07A\xB4 j! \x07A\xF4\0j! \x07(@! \x07(\x958\0 \fAj!\f\f\v\v  \fAtj  \fj-\0\0\xB3C\0\0\x80=\x94C\0\0 \xC1\x928\0 \fAj!\f\f\v\v\v \bA\x90j$\0 \xCC %A\xE0\0j$\0 1 Aj$\0\v\x81\x7F#\0A k"$\0  6@ -\0AqE@ A\x7F6\0 \0      \0(\0(\0!@@@ (\0\0\v A\0:\0\0\f\v A:\0\0\f\v A:\0\0 A6\0\f\v  $ =! (\0#  $ n!\0 (\0#  \0 \0(\0(\0 A\fr \0 \0(\0(\0  Aj   Aj"  A\x95 F:\0\0 (!@ A\fk " G\r\0\v\v A j$\0 \v\xEE\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\x006\xD8 \0B\x007\xD0 \0Aj" $ >"A\xD0\x85A\xEA\x85 \0A\xE0j (\0( \0 \0(# \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 6\f \0A\x006\b@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0A  \0A\xBCj \0A\bjA\0 \0A\xD0j \0Aj \0A\fj \0A\xE0jo\r\0 \0(\x8C@\f\v\v \0A\xC0j" \0(\xBC k" \0(\xC0 \0,\0\xCB!*! \0 6\0  A\0H\x1B  \0\x98AG@ A6\0\v \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\v\xBE\x7F~\x7F#\0A\xA0k"\0$\0 \0 6\x98 \0 6\x9C \0A\xE0j  \0A\xF0j \0A\xEFj \0A\xEEj\xB7 \0A\x006\xD8 \0B\x007\xD0 \0A\xD0j"A " \0 \0(\xD0  \0,\0\xDBA\0H\x1B"6\xCC \0 \0A j6 \0A\x006 \0A:\0 \0A\xC5\0:\0A\0!@@@@ \0A\x9Cj \0A\x98j)\r\0 \0(\xCC  \0(\xD4 \0,\0\xDB" A\0H\x1B"jF@ \0A\xD0j" At" A \0(\xD8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xDBA\0N\x1B" \0 \0(\xD0  \0,\0\xDBA\0H\x1B" j6\xCC\v \0(\x9CA\xC0 \0Aj \0Aj  \0A\xCCj \0,\0\xEF \0,\0\xEE \0A\xE0j \0A j \0Aj \0Aj \0A\xF0j\xB6\r\0 \rA\0! \0(\xCC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xE4 \0,\0\xEB" A\0H\x1BE\r\0 \0-\0AqE\r\0 \0(" \0A jkA\x9FJ\r\0 \0 Aj6  \0(6\0\v \0  \0(\xCC \x99 \0)\0!\b  \0)\b7\b  \b7\0 \0A\xE0j \0A j \0( 5 \0A\x9Cj \0A\x98j)@  (\0Ar6\0\v \0(\x9C \0A\xD0j  \0A\xE0j  \0A\xA0j$\0\f\vA!\v \0(\x9C@\f\0\v\0\v\v\xA7\x7F\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xD0j  \0A\xE0j \0A\xDFj \0A\xDEj\xB7 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0 \0A\x07j \0Aj  \0A\xBCj \0,\0\xDF \0,\0\xDE \0A\xD0j \0Aj \0A\fj \0A\bj \0A\xE0j\xB6\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD4 \0,\0\xDB" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9A9\0 \0A\xD0j \0Aj \0(\f 5 \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\f\vA!\v \0(\x8C@\f\0\v\0\v\v\xA7\x7F\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xD0j  \0A\xE0j \0A\xDFj \0A\xDEj\xB7 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0 \0A\x07j \0Aj  \0A\xBCj \0,\0\xDF \0,\0\xDE \0A\xD0j \0Aj \0A\fj \0A\bj \0A\xE0j\xB6\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD4 \0,\0\xDB" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9B8\0 \0A\xD0j \0Aj \0(\f 5 \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\f\vA!\v \0(\x8C@\f\0\v\0\v\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9C7\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9F;\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA07\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA16\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\x81\x7F#\0A k"$\0  6@ -\0AqE@ A\x7F6\0 \0      \0(\0(\0!@@@ (\0\0\v A\0:\0\0\f\v A:\0\0\f\v A:\0\0 A6\0\f\v  $ >! (\0#  $ p!\0 (\0#  \0 \0(\0(\0 A\fr \0 \0(\0(\0  Aj   Aj"  A\x97 F:\0\0 (!@ A\fk " G\r\0\v\v A j$\0 \v@\x7FA\0!\0\x7F  F\x7F \0 (\0 \0Atj"\0A\x80\x80\x80\x80\x7Fq"Av r \0s!\0 Aj!\f\v\v\v\v\0 \0  \xA2\vT\x7F@@  G@A\x7F!\0  F\r (\0" (\0"H\r  J@A Aj! Aj!\f\v\0\v\v  G!\0\v \0\v@\x7FA\0!\0\x7F  F\x7F \0 ,\0\0 \0Atj"\0A\x80\x80\x80\x80\x7Fq"Av r \0s!\0 Aj!\f\v\v\v\v\0 \0  \xCE\v^\x7F   kj!@@  G@A\x7F!\0  F\r ,\0\0" ,\0\0"\x07H\r  \x07J@A Aj! Aj!\f\v\0\v\v  G!\0\v \0\vT\x7F  \0(T" A\0 A\x80j"\xCA" k  \x1B"   K\x1B"Y \0  j"6T \0 6\b \0  j6 \v\xA8\x7F \0(T"(\0! (" \0( \0("\x07k"  I\x1B"@  \x07 Y  (\0 j"6\0  ( k"6\v    K\x1B"@   Y  (\0 j"6\0  ( k6\v A\0:\0\0 \0 \0(,"6 \0 6 \v\b\0 \0K!\v\0 \0 \0(\0A\fk(\0j\xC0\v\0 \0 \0(\0A\fk(\0j\x81\v \0 \0A\bk\xC0\v \0 \0A\bk\x81\v\0 \0  )\bA\0  (\0(\0\v \0 \0\xB0!\v\x95\x7F~ (," ("I@  6, !\vB\x7F! @ Aq"\x07E AF \x07AFqr\r\0 @  ( A j ,\0+A\0H\x1Bk\xAC! \v@@@ \0\v A\bq@ (\f (\bk\xAC!\b\f\v  (k\xAC!\b\f\v !\b\v  \b|"B\0S  Ur\r\0 A\bq!@ P\r\0 @ (\fE\r\v AqE\r\0 E\r\v @  6  (\b \xA7j6\f\v Aq@  ( \xA7j6\v ! \v \0 7\b \0B\x007\0\v\x99\b\x7F A\x7FF@A\0\v \0(\b! \0(\f! \0\x7F \0(" \0(G@ \0(,\f\v \0-\x000AqE@A\x7F\v \0(,!\x07 \0(! \0A j"A\0\xAA A \0((A\xFF\xFF\xFF\xFF\x07qAk \0,\0+A\0N\x1B" \0 \0(  \0,\0+"\bA\0H" \x1B"6 \0  \0($ \b \x1Bj6 \0   kj"6  \x07 kj\v" Aj"  I\x1B"6, \0-\x000A\bq@ \0 6 \0 \0( \0A j \0,\0+A\0H\x1B"6\b \0   kj6\f\v \0 \xC0\xC3\v\x8E\x7F \0(," \0("I@ \0 6, !\v\x7FA\x7F \0(\f" \0(\bM\r\0 A\x7FF@ \0 6 \0 Ak6\fA\0\v \0-\x000AqE@A\x7F Ak-\0\0 A\xFFqG\r\v \0 6 \0 Ak"\x006\f \0 :\0\0 \v\v_\x7F \0(," \0("I@ \0 6, !\vA\x7F!@ \0-\x000A\bqE\r\0  \0("K\x7F \0 6  \v \0(\f"\0M\r\0 \0-\0\0!\v \v\0 \0 \0(\0A\fk(\0j\xC1\v \0 \0A\bk\xC1\v \0 \0A\f\xA5\v\0 \0AjK \0A\bk\v\f\0 \0A\fjK \0\v\0 \0 \0(\0A\fk(\0j\xC1\v \0 \0A\xA5\v\f\0 \0AjK \0\v\0 \0 \0(\0A\fk(\0j\xC5\v \0 \0A\b\xA5\v\f\0 \0A\bjK \0\v\x96\x7F@@  L\r\0 \0(" \0("O@ \0 -\0\0 \0(\0(4\0A\x7FF\r Aj! Aj!\f \0  k"  k"  J\x1B"\x7F @   \xFC \0\0\v \0( \v j6  j!  j!\f\v\0\v\v \v3\x7FA\x7F! \0 \0(\0($\0\0A\x7FG@ \0(\f"-\0\0! \0 Aj6\f\v \v\0A\x7F\v\x91\x7F@@  L\r\0@ \0(\f" \0("I@ \0  k"  k"  J\x1B"\x7F @   \xFC \0\0\v \0(\f \v j6\f\f\v \0 \0(\0((\0\0"A\x7FF\r  :\0\0A!\v  j!  j!\f\v\v \v\0 \0B\x7F7\b \0B\x007\0\v\0 \0B\x7F7\b \0B\x007\0\v\0 \0\v\f\0 \0\xC3 \0!\v\f\0 \0(<\x9E\v;\x7F \0(<#\0Ak"\0$\0  A\xFFq \0A\bj\x9E! \0)\b! \0Aj$\0B\x7F  \x1B\v)\0  (\0A\x07jAxq"Aj6\0 \0 )\0 )\b\xC49\0\v\xB4\x7F|~#\0A\xB0k"\v$\0 \vA\x006,@ \xBD"B\0S@A!A\x9D ! \x9A"\xBD!\f\v A\x80q@A!A\xA0 !\f\vA\xA3 A\x9E Aq"\x1B! E!\v@ B\x80\x80\x80\x80\x80\x80\x80\xF8\xFF\0\x83B\x80\x80\x80\x80\x80\x80\x80\xF8\xFF\0Q@ \0A  Aj" A\xFF\xFF{q7 \0  3 \0A\xFB\rA\xED A q"\x1BA\xCEA\x97 \x1B  b\x1BA3 \0A   A\x80\xC0\0s7    J\x1B!\r\f\v \vAj!@@@  \vA,j\xD1" \xA0"D\0\0\0\0\0\0\0\0b@ \v \v(,"Ak6, A r"A\xE1\0G\r\f\v A r"A\xE1\0F\r \v(,!\f\f\v \v Ak"\f6, D\0\0\0\0\0\0\xB0A\xA2!\vA  A\0H\x1B! \vA0jA\xA0A\0 \fA\0N\x1Bj"!\x07@ \x07 \xFC"6\0 \x07Aj!\x07  \xB8\xA1D\0\0\0\0e\xCD\xCDA\xA2"D\0\0\0\0\0\0\0\0b\r\0\v@ \fA\0L@ \f! \x07! !\b\f\v !\b \f! @A AO\x1B!@ \x07Ak" \bI\r\0 \xAD!\x1BB\0!@  5\0 \x1B\x86 |" B\x80\x94\xEB\xDC\x80"B\x80\x94\xEB\xDC~}>\0 Ak" \bO\r\0\v B\x80\x94\xEB\xDCT\r\0 \bAk"\b >\0\v@ \b \x07"I@ Ak"\x07(\0E\r\v\v \v \v(, k" 6, !\x07 A\0J\r\0\v\v A\0H@ AjA nAj! A\xE6\0F!@A A\0 k" A O\x1B!\r@  \bM@A\0A \b(\0\x1B!\x07\f\vA\x80\x94\xEB\xDC \rv!A\x7F \rtA\x7Fs!A\0! \b!\x07@ \x07 \x07(\0" \rv j6\0  q l! \x07Aj"\x07 I\r\0\vA\0A \b(\0\x1B!\x07 E\r\0  6\0 Aj!\v \v \v(, \rj" 6,  \x07 \bj"\b \x1B" Atj   kAu J\x1B! A\0H\r\0\v\vA\0! @  \bM\r\0  \bkAuA l! A !\x07 \b(\0"A I\r\0@ Aj!  \x07A l"\x07O\r\0\v\v A\0 A\xE6\0G\x1Bk A\xE7\0F A\0Gqk"  kAuA lA kH@ \vA0jA\x84\`A\xA4b \fA\0H\x1Bj A\x80\xC8\0j"\fA m"Atj!\rA !\x07 \f A lk"A\x07L@@ \x07A l!\x07 Aj"A\bG\r\0\v\v@ \r(\0"\f \f \x07n" \x07lk"E \rAj" Fq\r\0@ AqE@D\0\0\0\0\0\0@C! \x07A\x80\x94\xEB\xDCG \b \rOr\r \rAk-\0\0AqE\r\vD\0\0\0\0\0@C!\vD\0\0\0\0\0\0\xE0?D\0\0\0\0\0\0\xF0?D\0\0\0\0\0\0\xF8?  F\x1BD\0\0\0\0\0\0\xF8?  \x07Av"F\x1B  K\x1B!@ \r\0 -\0\0A-G\r\0 \x9A! \x9A!\v \r \f k"6\0  \xA0 a\r\0 \r  \x07j"6\0 A\x80\x94\xEB\xDCO@@ \rA\x006\0 \b \rAk"\rK@ \bAk"\bA\x006\0\v \r \r(\0Aj"6\0 A\xFF\x93\xEB\xDCK\r\0\v\v  \bkAuA l! A !\x07 \b(\0"A I\r\0@ Aj!  \x07A l"\x07O\r\0\v\v \rAj"   I\x1B!\v@ "\f \bM"\x07E@ Ak"(\0E\r\v\v@ A\xE7\0G@ A\bq!\f\v A\x7FsA\x7F A \x1B" J A{Jq"\x1B j! A\x7FA~ \x1B j! A\bq"\r\0Aw!@ \x07\r\0 \fAk(\0"E\r\0A !A\0! A p\r\0@ "\x07Aj!  A l"pE\r\0\v \x07A\x7Fs!\v \f kAuA l! A_qA\xC6\0F@A\0!  jA k"A\0 A\0J\x1B"  J\x1B! \f\vA\0!  j jA k"A\0 A\0J\x1B"  J\x1B! \vA\x7F!\r A\xFD\xFF\xFF\xFF\x07A\xFE\xFF\xFF\xFF\x07 r"\x1BJ\r A\0GjAj!@ A_q"\x07A\xC6\0F@ A\xFF\xFF\xFF\xFF\x07sJ\r A\0 A\0J\x1B!\f\v  Au"s k\xAD x"kAL@@ Ak"A0:\0\0  kAH\r\0\v\v Ak" :\0\0 AkA-A+ A\0H\x1B:\0\0  k" A\xFF\xFF\xFF\xFF\x07sJ\r\v  j" A\xFF\xFF\xFF\xFF\x07sJ\r \0A   j" 7 \0  3 \0A0  A\x80\x80s7@@@ \x07A\xC6\0F@ \vAjA r!  \b \b K\x1B"!\b@ \b5\0 x!@  \bG@  \vAjM\r@ Ak"A0:\0\0  \vAjK\r\0\v\f\v  G\r\0 Ak"A0:\0\0\v \0   k3 \bAj"\b M\r\0\v @ \0A\x9AA3\v A\0L \b \fOr\r@ \b5\0 x" \vAjK@@ Ak"A0:\0\0  \vAjK\r\0\v\v \0 A A N\x1B3 A k! \bAj"\b \fO\r A J ! \r\0\v\f\v@ A\0H\r\0 \f \bAj \b \fI\x1B! \vAjA r!\f \b!\x07@ \f \x075\0 \fx"F@ Ak"A0:\0\0\v@ \x07 \bG@  \vAjM\r@ Ak"A0:\0\0  \vAjK\r\0\v\f\v \0 A3 Aj! rE\r\0 \0A\x9AA3\v \0  \f k"  H\x1B3 k! \x07Aj"\x07 O\r A\0N\r\0\v\v \0A0 AjAA\07 \0   k3\f\v !\v \0A0 A jA A\07\v \0A  A\x80\xC0\0s7   J\x1B!\r\f\v  AtAuA qj! @ A\vK\r\0A\f k!D\0\0\0\0\0\x000@!@ D\0\0\0\0\0\x000@\xA2! Ak"\r\0\v -\0\0A-F@  \x9A \xA1\xA0\x9A!\f\v  \xA0 \xA1!\v  \v(,"\x07 \x07Au"s k\xAD x"F@ Ak"A0:\0\0 \v(,!\x07\v Ar! A q!\f Ak" Aj:\0\0 AkA-A+ \x07A\0H\x1B:\0\0 A\bqE A\0Lq!\b \vAj!\x07@ \x07" \xFC"A\x90\xF5\0j-\0\0 \fr:\0\0  \xB7\xA1D\0\0\0\0\0\x000@\xA2"D\0\0\0\0\0\0\0\0a \bq \x07Aj"\x07 \vAjkAGrE@ A.:\0 Aj!\x07\v D\0\0\0\0\0\0\0\0b\r\0\vA\x7F!\r A\xFD\xFF\xFF\xFF\x07  k"\bj"kJ\r\0 \0A   Aj \x07 \vAj"k"\x07 \x07Ak H\x1B \x07 \x1B"j" 7 \0 3 \0A0   A\x80\x80s7 \0  \x073 \0A0  \x07kA\0A\07 \0  \b3 \0A   A\x80\xC0\0s7    J\x1B!\r\v \vA\xB0j$\0 \r\v\0B\0\v\xD6\x07\x7F#\0A k"$\0  \0("6 \0(!  6  6   k"6  j! Aj!A!\x07\x7F@@@ \0(< A A\fj\v\x9E@ !\f\v@  (\f"F\r A\0H@ !\f\v A\bA\0  ("\bK" \x1Bj"  \bA\0 \x1Bk"\b (\0j6\0 A\fA \x1Bj" (\0 \bk6\0  k! \0(< " \x07 k"\x07 A\fj\v\x9EE\r\0\v\v A\x7FG\r\v \0 \0(,"6 \0 6 \0  \0(0j6 \f\v \0A\x006 \0B\x007 \0 \0(\0A r6\0A\0 \x07AF\r\0  (k\v A j$\0\v\x89\x7F#\0Ak"\0$\0@ \0A\fj \0A\bj\r\0A\xEC\xDB \0(\fAtAj/"6\0 E\r\0 \0(\b/"@A\xEC\xDB(\0" \0(\fAtjA\x006\0  E\r\vA\xEC\xDBA\x006\0\v \0Aj$\0A\x84\xCEA\x006\0A\x80\xCEA6\0\x95A\x84\xCEA\xA0\xCE(\x006\0A\xA0\xCEA\x80\xCE6\0A\xA4\xCEA.6\0A\xA8\xCEA\x006\0\xCCA\xA8\xCEA\xA0\xCE(\x006\0A\xA0\xCEA\xA4\xCE6\0A\xCC\xCFA\xD4\xCE6\0A\xA4\xCFA\x80\x806\0A\xA0\xCFA\xC0\xEC6\0A\x84\xCFA*6\0A\xA8\xCFA\xB0\xCB(\x006\0\v\v\xBF\xBE(\0A\x80\b\v\x940123456789abcdefghijklmnopqrstuvwxyz\0load_spz\0infinity\0February\0January\0July\0Thursday\0Tuesday\0Wednesday\0Saturday\0Sunday\0Monday\0Friday\0May\0%m/%d/%y\0-+ 0X0x\0-0X+0X 0X-0x+0x 0x\0Nov\0Thu\0August\0unsigned short\0unsigned int\0invalid literal/lengths set\0invalid code lengths set\0unknown header flags set\0invalid distances set\0get\0Oct\0float\0invalid bit length repeat\0Sat\0numPoints\0colors\0UnpackOptions\0positions\0rotations\0too many length or distance symbols\0invalid stored block lengths\0scales\0alphas\0[SPZ: ERROR] Check failed: %s:%d: %s\0vf32_ptr\0Apr\0vector\0money_get error\0[SPZ ERROR] deserializePackedGaussians: read error\0October\0November\0September\0December\0unsigned char\0Mar\0/emsdk/emscripten/system/lib/libcxxabi/src/private_typeinfo.cpp\0Sep\0%I:%M:%S %p\0Sun\0Jun\0Mon\0nan\0Jan\0coordinateSystem\0CoordinateSystem\0Jul\0bool\0April\0invalid code -- missing end-of-block\0incorrect header check\0incorrect length check\0incorrect data check\0push_back\0invalid distance too far back\0Fri\0sh\0header crc mismatch\0March\0Aug\0unsigned long long\0unsigned long\0std::wstring\0basic_string\0std::string\0std::u16string\0std::u32string\0inf\x000123456789abcdef\0%.0Lf\0%Lf\0resize\0invalid window size\0true\0Tue\0false\0invalid block type\0June\0double\0shDegree\0bad_array_new_length was thrown in -fno-exceptions mode\0invalid literal/length code\0invalid distance code\0RawGaussianCloud\0unknown compression method\0[SPZ ERROR] deserializePackedGaussians: header not found\0%0*lld\0%*lld\0+%lld\0%+.4ld\0void\0locale not supported\0antialiased\0Wed\0%Y-%m-%d\0[SPZ ERROR] deserializePackedGaussians: Too many points: %d\0[SPZ ERROR] deserializePackedGaussians: Unsupported SH degree: %d\0[SPZ ERROR] deserializePackedGaussians: version not supported: %d\0Dec\0./spz/src/cc/load-spz.cc\0Feb\0%a %b %d %H:%M:%S %Y\0POSIX\0VectorUInt8T\0%H:%M:%S\0NAN\0PM\0AM\0%H:%M\0LC_ALL\0ASCII\0LANG\0RUF\0LUF\0INF\0RDF\0LDF\0UNSPECIFIED\0C\0RUB\0LUB\0RDB\0LDB\0catching a class without an object?\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\x000123456789\0C.UTF-8\x0001234567\0VectorFloat32\x0001\x001.3.1\0.\0-\0(packed.alphas.size()) == (numPoints)\0(null)\0(packed.colors.size()) == (numPoints * 3)\0(packed.scales.size()) == (numPoints * 3)\0(packed.sh.size()) == (numPoints * shDim * 3)\0(packed.rotations.size()) == (numPoints * (packed.usesQuaternionSmallestThree ? 4 : 3))\0(packed.positions.size()) == (numPoints * 3 * (usesFloat16 ? 2 : 3))\0%\0length_error was thrown in -fno-exceptions mode with message "%s"\0[SPZ: ERROR] Unsupported SH degree: %d \0 \0\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0A\xA0 \v\xB60\0\0\xF0c\0\0\xF0c\0\0P\0\0\xA4d\0\x008\0\0N3spz13GaussianCloudE\0\0\0\xA4d\0\0X\0\0N3spz13UnpackOptionsE\0ppiip\0\xF0c\0\0|\0\0\xA4d\0\0\x84\0\0NSt3__26vectorIfNS_9allocatorIfEEEE\0ipp\0(e\0\0\xD4\0\0\0\0\0\0\0\0\0\xEC\0\0\0\0\0\x008\0\0\0\0\0\0h\0\0\0\0\0\0NSt3__28optionalIfEE\0\0\0\0\xCCd\0\0\xF8\0\0(\0\0NSt3__227__optional_move_assign_baseIfLb1EEE\0\0\0\0\xCCd\0\x004\0\0d\0\0NSt3__227__optional_copy_assign_baseIfLb1EEE\0\0\0\0\xCCd\0\0p\0\0\x98\0\0NSt3__220__optional_move_baseIfLb1EEE\0\0\0\xCCd\0\0\xA4\0\0\xCC\0\0NSt3__220__optional_copy_baseIfLb1EEE\0\0\0\xCCd\0\0\xD8\0\0\0\0NSt3__223__optional_storage_baseIfLb0EEE\0\0\0\0\xA4d\0\0\f\0\0NSt3__224__optional_destruct_baseIfLb1EEE\0\0\0\xA4d\0\0@\0\0NSt3__218__sfinae_ctor_baseILb1ELb1EEE\0\0\xA4d\0\0p\0\0NSt3__220__sfinae_assign_baseILb1ELb1EEE\0\0\0\0\x84e\0\0\xAC\0\0\0\0\0\0|\0\0PNSt3__26vectorIfNS_9allocatorIfEEEE\0\0\0\0\x84e\0\0\xE4\0\0\0\0\0|\0\0PKNSt3__26vectorIfNS_9allocatorIfEEEE\0pp\0v\0vp\0\0\0\x9C\0\0pp\0\0\x98c\0\0|\0\x008d\0\0vppf\0\0\0\0\x98c\0\0|\0\0\xFCc\0\x008d\0\0vppif\0\0\0\xFCc\0\0|\0\0ipp\0\\\0\x008d\0\0\xA4d\0\0d\0\0N10emscripten3valE\0\0\xAC\0\0|\0\0\xFCc\0\0pppi\0\0\0\0\0\0\0\0\xA8c\0\0|\0\0\xFCc\0\x008d\0\0ippif\0\0\0(e\0\0\xD0\0\0\0\0\0\0\0\0\0\xE8\0\0\0\0\0\x008\0\0\0\0\0\0h\0\0\0\0\0\0NSt3__28optionalIhEE\0\0\0\0\xCCd\0\0\xF4\0\0$\0\0NSt3__227__optional_move_assign_baseIhLb1EEE\0\0\0\0\xCCd\0\x000\0\0\`\0\0NSt3__227__optional_copy_assign_baseIhLb1EEE\0\0\0\0\xCCd\0\0l\0\0\x94\0\0NSt3__220__optional_move_baseIhLb1EEE\0\0\0\xCCd\0\0\xA0\0\0\xC8\0\0NSt3__220__optional_copy_baseIhLb1EEE\0\0\0\xCCd\0\0\xD4\0\0\0\0\0NSt3__223__optional_storage_baseIhLb0EEE\0\0\0\0\xA4d\0\0\b\0\0NSt3__224__optional_destruct_baseIhLb1EEE\0\0\0\xA4d\0\0<\0\0NSt3__26vectorIhNS_9allocatorIhEEEE\0\x84e\0\0p\0\0\0\0\0\x004\0\0PNSt3__26vectorIhNS_9allocatorIhEEEE\0\0\0\0\x84e\0\0\xA8\0\0\0\0\x004\0\0PKNSt3__26vectorIhNS_9allocatorIhEEEE\0pp\0vp\0\`\0\0pp\0\0\x98c\0\x004\0\0\xC0c\0\0vppi\0\0\0\0\x98c\0\x004\0\0\xFCc\0\0\xC0c\0\0vppii\0\0\0\xFCc\0\x004\0\0ipp\0\\\0\0\xC0c\0\0\xA8\0\x004\0\0\xFCc\0\0pppi\0\0\0\0\xA8c\0\x004\0\0\xFCc\0\0\xC0c\0\0ippii\0p\0vp\0ipp\0vppi\0ipp\0vppi\0ppp\0vppp\0\0\0Xd\0\0p\0\0N3spz16CoordinateSystemE\0p\0vp\0ipp\0vppi\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\xA4d\0\0\xB0\0\0NSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\xA4d\0\0\xF8\0\0NSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE\0\0\xA4d\0\0@\0\0NSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE\0\0\0\xA4d\0\0\x8C\0\0NSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE\0\0\0\xA4d\0\0\xD8\0\0N10emscripten11memory_viewIcEE\0\0\xA4d\0\0\0\0\0N10emscripten11memory_viewIaEE\0\0\xA4d\0\0(\0\0N10emscripten11memory_viewIhEE\0\0\xA4d\0\0P\0\0N10emscripten11memory_viewIsEE\0\0\xA4d\0\0x\0\0N10emscripten11memory_viewItEE\0\0\xA4d\0\0\xA0\0\0N10emscripten11memory_viewIiEE\0\0\xA4d\0\0\xC8\0\0N10emscripten11memory_viewIjEE\0\0\xA4d\0\0\xF0\0\0N10emscripten11memory_viewIlEE\0\0\xA4d\0\0\0\0N10emscripten11memory_viewImEE\0\0\xA4d\0\0@\0\0N10emscripten11memory_viewIxEE\0\0\xA4d\0\0h\0\0N10emscripten11memory_viewIyEE\0\0\xA4d\0\0\x90\0\0N10emscripten11memory_viewIfEE\0\0\xA4d\0\0\xB8\0\0N10emscripten11memory_viewIdEE\0A\xE43\v\xA1(\x960\x07w,a\xEE\xBAQ \x99\xC4m\x07\x8F\xF4jp5\xA5c\xE9\xA3\x95d\x9E2\x88\xDB\xA4\xB8\xDCy\xE9\xD5\xE0\x88\xD9\xD2\x97+L\xB6 \xBD|\xB1~\x07-\xB8\xE7\x91\xBF\x90d\xB7\xF2 \xB0jHq\xB9\xF3\xDEA\xBE\x84}\xD4\xDA\xEB\xE4\xDDmQ\xB5\xD4\xF4\xC7\x85\xD3\x83V\x98l\xC0\xA8kdz\xF9b\xFD\xEC\xC9e\x8AO\\\xD9lcc=\xFA\xF5\r\b\x8D\xC8 n;^iL\xE4A\`\xD5rqg\xA2\xD1\xE4jm\r\xA8Zjz\v\xCF\xE4\x9D\xFF \x93'\xAE\0 \xB1\x9E\x07}D\x93\xF0\xD2\xA3\b\x87h\xF2\xFE\xC2i]Wb\xF7\xCBge\x80q6l\xE7knv\x1B\xD4\xFE\xE0+\xD3\x89Zz\xDA\xCCJ\xDDgo\xDF\xB9\xF9\xF9\xEF\xBE\x8EC\xBE\xB7\xD5\x8E\xB0\`\xE8\xA3\xD6\xD6~\x93\xD1\xA1\xC4\xC2\xD88R\xF2\xDFO\xF1g\xBB\xD1gW\xBC\xA6\xDD\xB5?K6\xB2H\xDA+\r\xD8L\x1B \xAF\xF6J6\`zA\xC3\xEF\`\xDFU\xDFg\xA8\xEF\x8En1y\xBEiF\x8C\xB3a\xCB\x83f\xBC\xA0\xD2o%6\xE2hR\x95w\f\xCCG\v\xBB\xB9"/&U\xBE;\xBA\xC5(\v\xBD\xB2\x92Z\xB4+j\xB3\\\xA7\xFF\xD7\xC21\xCF\xD0\xB5\x8B\x9E\xD9,\xAE\xDE[\xB0\xC2d\x9B&\xF2c\xEC\x9C\xA3ju \x93m\xA9 \x9C?6\xEB\x85g\x07rW\0\x82J\xBF\x95z\xB8\xE2\xAE+\xB1{8\x1B\xB6\f\x9B\x8E\xD2\x92\r\xBE\xD5\xE5\xB7\xEF\xDC|!\xDF\xDB\v\xD4\xD2\xD3\x86B\xE2\xD4\xF1\xF8\xB3\xDDhn\x83\xDA\xCD\xBE\x81[&\xB9\xF6\xE1w\xB0owG\xB7\xE6Z\b\x88pj\xFF\xCA;f\\\v\xFF\x9Ee\x8Fi\xAEb\xF8\xD3\xFFkaE\xCFlx\xE2 \xA0\xEE\xD2\r\xD7T\x83N\xC2\xB39a&g\xA7\xF7\`\xD0MGiI\xDBwn>Jj\xD1\xAE\xDCZ\xD6\xD9f\v\xDF@\xF0;\xD87S\xAE\xBC\xA9\xC5\x9E\xBB\xDE\x7F\xCF\xB2G\xE9\xFF\xB50\xF2\xBD\xBD\x8A\xC2\xBA\xCA0\x93\xB3S\xA6\xA3\xB4$6\xD0\xBA\x93\xD7\xCD)W\xDET\xBFg\xD9#.zf\xB3\xB8Ja\xC4\x1Bh]\x94+o*7\xBE\v\xB4\xA1\x8E\f\xC3\x1B\xDFZ\x8D\xEF-\0\0\0\0F;ge\x8Cv\xCE\xCA\xCAM\xA9\xAFY\xEB\xEDN\xD0\x8A+\xD5\x9D#\x84\x93\xA6D\xE1\xB2\xD6\xDB\x9D\xF4\xED\xBC\xF8>\xA0Wx\x9Br2\xEB=6\xD3\xADQ\xB6gK\xF8!p\x9F|%\xAB\xC6\xE0c\x90\xA1\x85\xA9\xDD\b*\xEF\xE6oO|@+\xAE:{L\xCB\xF06\xE5d\xB6\r\x82\x97}}\xD1Fz\x1B\v\xD3\xB7]0\xB4\xD2\xCE\x96\xF03\x88\xAD\x97VB\xE0>\xF9\xDBY\x9C\vP\xFCMk\x9B\x7F\x87&2\xD0\xC1U\xB5R\xBBT\x80v1\xDE\xCD\xDF\x9E\x98\xF6\xB8\xFB\xB9\x86'\x87\xFF\xBD@\xE25\xF0\xE9Ms\xCB\x8E(\xE0m\xCA\xC9\xA6V\xAD\xACl\x1B* cf.\xFB:\xFAh\xC0]\x9F\xA2\x8D\xF40\xE4\xB6\x93Uw\xD7\xB41+\xB0\xD1\xFBf~\xBD]~\x1B\x9C-\xE1g\xDA\x86[/\xADV\`H\xC8\xC5\xC6\f)\x83\xFDkLI\xB0\xC2\xE3\x8B\xA5\x86\xA0\xF85P\x9B\x9FP\x9A\xD66\xFF\xDC\xEDQ\x9AOK{ pr\xC3=\xDB\xB1\x85\xBC\xD4\xA4v#\xA8\xE2MD\xCD(\0\xEDbn;\x8A\x07\xFD\x9D\xCE\xE6\xBB\xA6\xA9\x83q\xEB\0,7\xD0gI3\v>\xD5u0Y\xB0\xBF}\xF0\xF9F\x97zj\xE0\xD3\x9B,\xDB\xB4\xFE\xE6\x96Q\xA0\xADz4\x81\xDD\xE5H\xC7\xE6\x82-\r\xAB+\x82K\x90L\xE7\xD86\b\x9E\rocT@\xC6\xCC{\xA1\xA9\xF0/[\xCBcJ\x91\x86\xCA\xE5\xD7\xBD\xAD\x80D\x1B\xE9a \x8E\xC8m'\xAB\x8EV@\xCE\xAF&\xDF\xB2\xE9\xB8\xD7#Pxekv\xF6\xCD2\xFC\xB0\xF6U\x99z\xBB\xFC6<\x80\x9BS8[\xC2\xCF~\`\xA5\xAA\xB4-\f\xF2k\`a\xB0/\x81'\x8BH\xE4\xED\xC6\xE1K\xAB\xFD\x86.\x8A\x8DR\xCC\xB6~7\xFB\xD7\x98@\xC0\xB0\xFD\xD3f\xF4\x95]\x93y_:\xD6+]\xB3,@\xF1kj{\x96\xA06?\xA1\xE6\rX\xC4u\xAB%3\x90{@\xF9\xDD\xD2\xEF\xBF\xE6\xB5\x8A\x9E\x96*\xF6\xD8\xADM\x93\xE0\xE4[P&\xDFkA\xBA\xD7&\xE8\x91\x8Fp\xB0m\f\xF6Vwi<\x1B\xDE\xC6z \xB9\xA3\xE9\x86\xFDB\xAF\xBD\x9A'e\xF03\x88#\xCBT\xED:\xE0 ^|\xDBn;\xB6\x96\xC7\x94\xF0\xAD\xA0\xF1c\v\xE4%0\x83u\xEF}*\xDA\xA9FM\xBF\x886\xD2\xC3\xCE\r\xB5\xA6@ B{{l\xD1\xDD?\x8D\x97\xE6X\xE8]\xAB\xF1G\x1B\x90\x96"K\xCF\xBEYp\xA8\xDB\x93=t\xD5fF\xA0"\xF0\0\x9BE\x95\xCA\xD6\xEC:\x8C\xED\x8B_\xAD\x9D#\xEB\xA6sF!\xEB\xDA\xE9g\xD0\xBD\x8C\xF4v\xF9m\xB2M\x9E\bx\x007\xA7>;P\xC21\xB0\xF5Dw\x8B\x92!\xBD\xC6;\x8E\xFB\xFD\\\xEBh[ .\`\x7Fo\xE4-\xD6\xC0\xA2\xB1\xA5\x83f.\xD9\xC5]I\xBC\xE0I+\x87v\xDA\x8D\xC3\x97\x9C\xB6\xA4\xF2V\xFB\r]\xC0j8\x1B3\xA4R T\xC1\x98m\xFDn\xDEV\x9A\vM\xF0\xDE\xEA\v\xCB\xB9\x8F\xC1\x86 \x87\xBDwE\xA6\xCD\xE89\xE0\xF6\x8F\\*\xBB&\xF3l\x80A\x96\xFF&w\xB9bsP\xCB\xBD5k\xAC\xD8\0\0\0\0X\x80\xE2\xD7\xF1\xB4t\xA9\x86V\xA3\xE2\rh\xE9\xBA\x8D\x8A>\v\xDC\x9DK\x8B>J\x85\xA1 \xDD\x9DC\xDEt\x1B},\x9B\xF7\xAAg\xC9\xE0?\x90+7\x96}\x94\xCE\x96\x9FC ;BR\xBB\xA0\xC4\xFB=\xF6g\xA3\xBD\xB0\xE86*\xFA\xB0\xB6\xC8-0\x9E\x8EA\xB0|Y\x8F&\xE3\xD7\xA6\xCD~ Wn&\xA0\xB5\xB9m+\x8B\xF35\xABi$\x9C-?\x87\xC4\xAD\xDDPv\x84&L\xF6f\xF1\xE5p0R\xBD\xF0\xD2\x85\xF6{\xEC\xCF\xAE\xFB\x07}X\xBB_\xFD\xBAl\x91k%/\xC9\xEB\xC7\xF8\`m\x91[8\xEDs\x8CsfM\xC6+\xE6\xAF\x82\`\xF9\xB2\xDA\xE0\x1BeM\xC65F\xCD$\xE2\xEFKrA\xB7\xCB\x90\x96\xFC@\xAE\xDC\xA4\xC0L\v\rF\xA8U\xC6\xF8\x7F\x9BPg<\xC3\xD0\x85\xEBjV\xD3H2\xD61\x9Fy]\xD5!\xDD\xED\x88[\xBB\xA1\xD0\xDBYv(\xEC\bMpl\xEA\x9A\xD9\xEA\xBC9\x81j^\xEE\xCA\xE1\`\xA4\x92a\x82s;\xE7\xD4\xD0cg6\x07\xAD\xF1\xA9D\xF5qK\x93\\\xF70w\xFF\xE7O\xFC\xC1\xAD|#z\xBE\xFAu\xD9\xE6z\x97"\xD7J^zW\xA8\x89\xD3\xD1\xFE*\x8BQ\xFD\xC0\xDA"\xB7\x98Z\xC0\`1\xDC\x96\xC3i\\t\xA7\xCA\xEBW\xFFJ \x80V\xCC_#L\xBD\xF4E\xC7\x83\xBEGai\xB4\xC17\xCA\xECA\xD5<\x9A\x8Ckdn\xBC\xCD\x9C8\x95\xDA\xC8\xDE\x97\xE4\x82\x86U/\x91P\xF6w\xB2!\xB9\x87-b\xE1\x07\xCF\xB5H\x81\x99{\xC1[\x8AE\x8B \xA7\\\xAA\x8C\xF1\xFF\xF2\f(6\xA1\xCExn!,\xAF\xC7\xA7z\f\x9F'\x98\xDB\xD4\xAC\xA6\x91\x8C,DF%\xAA\xE5}*\xF02\xB3\xBCoq\xEB<\x8D\xA6B\xBA\xDB:9\xD2Q\xB1\x07\x98 1\xE5O\xA0\xB7\xB3\xEC\xF87Q;P\xD8\x9A\bX\xF3M\xA1\xDE\xA5\xEE\xF9^G9\xB2\xD5ys\xEAU\x9B\xA4C\xD3\xCD\x07\x1BS/\xD0\xD5\xC5\xB0\x93\x8DERD$\xC3\xE7|C\xE607\xC8\xD8zoH:\xAD\xC6\xCEl\x9EN\x8E\xD9Z\xE3S\x89c\xB1^\xAB\xE5\xE7\xFD\xF3e*\xB8\xEE;\`\xE0n\xD9\xB7I\xE8\x8Fhm\xC3\xDF\xFE\xF2\x80\x87~W.\xF8F\xF4vx\xA4#=\xF3\x9Aiesx\xBE\xCC\xF5.\x94u\xCC\xCAD\xAE\x95\xBC.wk\xB5\xA8!\xC8\xED(\xC3\xA6\xA3\xFDU\xFE#\x82W\xA5I!%\xAB\xF6\xC1\xB34\xB5\x993\xD6b0\xB5\x80\xC1h5b#\xBE\\\\{>\xBE\x8B\xD2\xB8\xE8(\x8A8 \xFFN\x95\xD7\xAF5x\xBF\x93c\xDB\xE7\x81\f\xAC\x98\xBFF\xF4]\x91]\x9E\v2\xE9\xE5\xCB\x88v\xA6\x93\b\x94q:\x8E\xC2\xD2b )\x85Oq\xFC\x98\xD8\x83\xAA;\x80H\xECx4\xD7 \xB4\xFB\0\x892\xAD\xA3\xD1\xB2Ot\x9A9q>\xC2\xB9\x93\xE9k?\xC5J3\xBF'\x9D\xFD)\xB8\xDE\xA5\xA9Z \f/\f\xAAT\xAF\xEE}$\xD07G\xA42\xE0\xEE"dC\xB6\xA2\x86\x94r[\xC4*\x8F\xB9\x83 \xEF\xB0\xDB\x89\rg\x903-\xC8\x82\xD1\xFAa\x87Y9\x84e\x8E\xF7\xFA\xCD\xAF\x92N\xB9^\x94\xACn\x92$M\x9Fp\xF3\xE4&P\xBC\x99\xC4\x87lB\x9D\xF14\xC2\x7F&\x9DD)\x85\xC5\xC4\xCBR\x8EO\xF5\xD6\xCF\xCF\x7FIAl'\xC9\xA3\xBB\xE9_<\xF8\xB1\xDF\xDE/Y\x88\x8C@\xD9j[\vRTS\xD2\xB6\xC6\xFAT\xE0e\xA2\xD4\xB2fy\xDF\xE2>\xF9=5\x97\x7Fk\x96\xCF\xFF\x89A\x84t\xB7\v\xDC\xF4U\xDCur\x7F-\xF2\xE1\xA8\xE3d~\xEB\xBB\xE4\x9C<b\xCA\x9FJ\xE2(HiY\xE9\xF4\xD5\xF0o\xA2v\xA8\xEF@\xA1\0\0\0\0\xE1\xB6R\xEF\x83k\xD4b\xDD\x86\xEA\xD7\xA8\v\xE7a\xFA\xE4\x85\xBC|d .\xE1\f\xAEQ\xED\xF8\x8F\xC5\x85ns\xD7\xFD y\xF9\xEB\xCF\xAB\xF3\x89-h\xA4\x7F\xF6\\\xA3.\xF9\xEA\xF1\xC1\x9B7w+z\x81%\xC4\x8B\v%\xFF=Y\xCA\x9D\xE0\xDF |V\x8D\xCF\xF2\xF29\xF5D\xA0\xD6\x97\x99&\x8D\x88QbP\xC8\xCB\xE7\xB1~\x99\b\xD3\xA3\xE22M\rVc\xEC\xB7\xA91\xD5t\xB7\xE94\xC2\xE5\\f\x9A\xF0\xBD\xD0\xC8\xDF\rN\xF5>\xBBZ\xB12\xFB\xBB\x07\`\xD9\xDA\xE6\xFE8l\xB4H\x94h\xC9\xA9":&\xCB\xFF\xBC\xCC*I\xEE#NC\xC0\xC2\xAF\xF5\x92-\xCD(\xC7,\x9EF(D:9\xDE\xA5\x8Ck1\xC7Q\xED\xDB&\xE7\xBF4B\xED\x91\xD5\xA3[\xC3:\xC1\x86E\xD0 0?\x81\xE6k\xAE\`P9A\x8D\xBF\xAB\xE3;\xEDD\x871\xC3\xA5f\x87\x91JZ\xA0\xE5\xECEO\x8DH:\xB9l\xFEhV#\xEE\xBC\xEF\x95\xBCS\x8B\x9F\x92\xB2j)\xC0]\b\xF4F\xB7\xE9BX\x99\xBA\xC8\x80x\f\x9Ao\xD1\x85\xFBgNj\x9Fm\`\x8B~\xDB2d\xB4\x8E\xFD\xB0\xE6a\x95\x99\x97t\xA2\xCBx\x7FM\x92\xF7\xC9}\x93\xC31\x9Crucs\xA8\xE5\x99\xF1\xB7v\xB1^-\xF3P\xE8\x7F25\xF9\xF6\xD3\x83\xAB\xB7\x89\x85\xF8V?\xD74\xE2Q\xFD\xD5T\xBD\xF0|\xE4\\F.\v>\x9B\xA8\xE1\xDF-\xFA\xBB'\xD4\xEFZ\x91\x86\x008L\0\xEA\xD9\xFAR\xA9\x8E\xDDH\xB4\xDC2*iZ\xD8\xCB\xDF\b7\xAF\xD5&\xD6Nct9,\xBE\xF2\xD3\xCD\b\xA0<\xA5\xAC\xDF\xCAD\x8D%&\xC7\v\xCF\xC7qY \xA3{w\xC1B\xCD%. \xA3\xC4\xC1\xA6\xF1+\xE1\x96\xE6\0 \xB4\xFBb\xFD2\x83K\`\xFE\xE7AN\xF7\xF0d*\x9A\x85\x9C\xC8\xF5\xED8\xB7\f\x8E\xE5\xECnSc\x8F\xE51\xE9\xEB\xEF\b YM\xE7h\x84\xCB\r\x892\x99\xE2\xF9\xCAE:|\xD5z\xA1\x91?\x9B\xC3\xD0\xFF\xED1\xAB\xBF\xDE|v94\x9D\xC0k\xDB\xF5d-\xD2F\xC2v\xC0(\x97\xB9\x92\xC7\xF3\xB3\xBC&\xEE\xC9p\xD8h#\x91n:\xCC\xD1.\xA0I0\x98\xF2\xA6REtL\xB3\xF3&\xA3\xD7\xF9\bB6OZ\xADT\x92\xDCG\xB5$\x8E\xA8\xDD\x80\xF1^<6\xA3\xB1^\xEB%[\xBF]w\xB4\xDBWYU:\xE1\v\xBAX<\x8DP\xB9\x8A\xDF\xBF\xC9rg(\xC4Q\x88J\xD7b\xAB\xAF\x85\x8D\xCF\xA5\xABl.\xF9\x83L\xCE\x7Fi\xADx-\x86\xC5\xDCRp$j\0\x9FF\xB7\x86u\xA7\xD4\x9A\xC3\v\xFA{"\xBD\xA8\x94@\`.~\xA1\xD6|\x91\0\0\0\0C\xCB\xA6\x87\xC7\x90<\xD4\x84[\x9AS\xCF'\bs\x8C\xEC\xAE\xF4\b\xB74\xA7K|\x92 \x9EO\xE6\xDD\x84\xB6aY\xDF,2\x8A\xB5Qh\x95\xA3\xBE\x96\xF8$A\xD53\x82\xC6}\x99Q>R\xF7\x90\xBA m\xC3\xF9\xC2\xCBD\xB2\xBEYd\xF1u\xFF\xE3u.e\xB06\xE5\xC37\xE3\xD6A\xF1\xA0\xE7v$F}%g\x8D\xDB\xA2,\xF1I\x82o:\xEF\xEBauV\xA8\xAA\xD3\xD1\xFA2\xA3.\xB9\xF9\xA9=\xA2\x9F\xFA~i9}5\xAB]v\xDE\r\xDA\xF2\x85\x97\x89\xB1N1d}\xB3\xC8'\xB6O\xA3\xED\x8F\xE0&)\x9B\xABZ\xBB\xBB\xE8\x91\xDC;BN.x\x89\xE8\xA9\xFC\xD2r\xFA\xBF\xD4}j*V\xBB)\xE1\xF0<\xAD\xBAjo\xEEq\xCC\xE8\xA5\r^\xC8\xE6\xC6\xF8Ob\x9Db!V\xC4\x9B\x89\xFCJ\xCA7\xB1\xCDNl+\x9E\r\xA7\x8DF\xDB9\xB9\xBE\x81K#\xED\xC2\x80\x85j\xB3\x07\xACTx\xA1+\xD0#;x\x93\xE8\x9D\xFF\xD8\x94\xDF\x9B_\xA9X3\v\\\xCF\x95\x8CW\xE5sM\x9CC\xF4\xC9\xC7\xD9\xA7\x8A\f\x7F \xC1p\xED\0\x82\xBBK\x87\xE0\xD1\xD4E+wS\x90\xF5\x95\xD3\xD3SW\x88\xC9ACo\xC6_?\xFD\xE6\xF4[a\x98\xAF\xC12\xDBdg\xB5s\xCE\xB4d0\xE3\xB4^\x88\xB0\xF7\x95.7\xBC\xE9\xBC\xFF"\x90{y\x80\xC38\xB2&D\xED\x81\xA4\x82\xAEJ*\x98Vi\xDA>\xD1"\xA6\xAC\xF1am v\xE56\x90%\xA6\xFD6\xA2\xE8\xCB\x8C\xBA\xAB\0*=/[\xB0nl\x90\xE9'\xEC\x84\xC9d'"N\xE0|\xB8\xA3\xB7\x9Av\x84\x9C\\5O:\xDB\xB1\xA0\x88\xF2\xDF\xB9\xA3\x94/\xFAh2\xA8~3\xA8\xFB=\xF8|\x95R\xDD\xAD\xD6\x99{*R\xC2\xE1y G\xFEZu\xD5\xDE\xBEsY\x9D\xE5\xE9 \xDE.O\x8D\v\xCDKH\xD6k\xCC\xCC\x8D\xF1\x9F\x8FFW\xC4:\xC58\x87\xF1c\xBF\xAA\xF9\xEC@a_k\xF9/\x94Q2\x89\xD5i@\x96\xA2\xB5\xC7\xDD\xDE'\xE7\x9E\x81\`N\x1B3Y\x85\xBD\xB4\x8C\xB6?r\xCF}\x99\xF5K&\xA6\b\xED\xA5!C\x917\0Z\x91\x86\x84\v\xD5\xC7\xCA\xADRo\`~\x83,\xAB\xD8\xA8\xF0BW\xEB;\xE4\xD0\xA0Gv\xF0\xE3\x8C\xD0wg\xD7J$$\xEC\xA3\xF1/ne\xB2\xE4\xC8\xE26\xBFR\xB1ut\xF46>\bf}\xC3\xC0\x91\xF9\x98Z\xC2\xBAS\xFCE\xAE\xCA\xE7_el\`\xDB>\xF63\x98\xF5P\xB4\xD3\x89\xC2\x94\x90Bd\xFE@W\xD2X\xC7\x82\xE1\xDA\xC1*|\x86Eq\xE6\xD5\xBA@RM\xC6\xD2r\rt\xF5\x8AV\xEE\xA6\xC9\x9DH!a7\x9B\xF0"\xFC=w\xA6\xA7\xA7$\xE5l\xA3\xAE\x93\x83\xED\xDB5i\x80\xAFW*K \xD0\xFFx\x8B\xBC\xB3-\x918\xE8\xB7\xC2{#E0_\x83es\x94%\xE2\xF7\xCF\xBF\xB1\xB46\xE6\x9Ci\xC9\xA5W\xCFN!\fUb\xC7\xF3\x9A)\xBBa\xBAjp\xC7=\xEE+]n\xAD\xE0\xFB\xE9x\xD3y/;\xDF\xA8\xBFCE\xFB\xFC\x88\xE3|\xB7\xF4q\\\xF4?\xD7\xDBpdM\x883\xAF\xEB\x9B8\xDE\xD8\xCE\x9EY\\\x95 ^\xA2\x8DT"0\xAD\xE9\x96*\x93\xB2\fy\xD0y\xAA\xFEJ(8F\x81\x8E\xBF\xC2\xDA\xEC\x81\xB2k\xCAm K\x89\xA6\x86\xCC\r\xFD\x9FN6\xBA\0\0\0\0\0\b\0\x07\0 \0\0 \0\0\v\0\0\f\0\0\r\0\0\0\0\0A\x90\xDC\0\v\xA2\`\x07\0\0\0\bP\0\0\b\0\bs\0\x07\0\0\bp\0\0\b0\0\0 \xC0\0\x07 \0\0\b\`\0\0\b \0\0 \xA0\0\0\b\0\0\0\b\x80\0\0\b@\0\0 \xE0\0\x07\0\0\bX\0\0\b\0\0 \x90\0\x07;\0\0\bx\0\0\b8\0\0 \xD0\0\x07\0\0\bh\0\0\b(\0\0 \xB0\0\0\b\b\0\0\b\x88\0\0\bH\0\0 \xF0\0\x07\0\0\bT\0\0\b\0\b\xE3\0\x07+\0\0\bt\0\0\b4\0\0 \xC8\0\x07\r\0\0\bd\0\0\b$\0\0 \xA8\0\0\b\0\0\b\x84\0\0\bD\0\0 \xE8\0\x07\b\0\0\b\\\0\0\b\0\0 \x98\0\x07S\0\0\b|\0\0\b<\0\0 \xD8\0\x07\0\0\bl\0\0\b,\0\0 \xB8\0\0\b\f\0\0\b\x8C\0\0\bL\0\0 \xF8\0\x07\0\0\bR\0\0\b\0\b\xA3\0\x07#\0\0\br\0\0\b2\0\0 \xC4\0\x07\v\0\0\bb\0\0\b"\0\0 \xA4\0\0\b\0\0\b\x82\0\0\bB\0\0 \xE4\0\x07\x07\0\0\bZ\0\0\b\0\0 \x94\0\x07C\0\0\bz\0\0\b:\0\0 \xD4\0\x07\0\0\bj\0\0\b*\0\0 \xB4\0\0\b \0\0\b\x8A\0\0\bJ\0\0 \xF4\0\x07\0\0\bV\0\0\b\0@\b\0\0\x073\0\0\bv\0\0\b6\0\0 \xCC\0\x07\0\0\bf\0\0\b&\0\0 \xAC\0\0\b\0\0\b\x86\0\0\bF\0\0 \xEC\0\x07 \0\0\b^\0\0\b\0\0 \x9C\0\x07c\0\0\b~\0\0\b>\0\0 \xDC\0\x07\x1B\0\0\bn\0\0\b.\0\0 \xBC\0\0\b\0\0\b\x8E\0\0\bN\0\0 \xFC\0\`\x07\0\0\0\bQ\0\0\b\0\b\x83\0\x07\0\0\bq\0\0\b1\0\0 \xC2\0\x07 \0\0\ba\0\0\b!\0\0 \xA2\0\0\b\0\0\b\x81\0\0\bA\0\0 \xE2\0\x07\0\0\bY\0\0\b\0\0 \x92\0\x07;\0\0\by\0\0\b9\0\0 \xD2\0\x07\0\0\bi\0\0\b)\0\0 \xB2\0\0\b \0\0\b\x89\0\0\bI\0\0 \xF2\0\x07\0\0\bU\0\0\b\0\b\x07+\0\0\bu\0\0\b5\0\0 \xCA\0\x07\r\0\0\be\0\0\b%\0\0 \xAA\0\0\b\0\0\b\x85\0\0\bE\0\0 \xEA\0\x07\b\0\0\b]\0\0\b\0\0 \x9A\0\x07S\0\0\b}\0\0\b=\0\0 \xDA\0\x07\0\0\bm\0\0\b-\0\0 \xBA\0\0\b\r\0\0\b\x8D\0\0\bM\0\0 \xFA\0\x07\0\0\bS\0\0\b\0\b\xC3\0\x07#\0\0\bs\0\0\b3\0\0 \xC6\0\x07\v\0\0\bc\0\0\b#\0\0 \xA6\0\0\b\0\0\b\x83\0\0\bC\0\0 \xE6\0\x07\x07\0\0\b[\0\0\b\x1B\0\0 \x96\0\x07C\0\0\b{\0\0\b;\0\0 \xD6\0\x07\0\0\bk\0\0\b+\0\0 \xB6\0\0\b\v\0\0\b\x8B\0\0\bK\0\0 \xF6\0\x07\0\0\bW\0\0\b\0@\b\0\0\x073\0\0\bw\0\0\b7\0\0 \xCE\0\x07\0\0\bg\0\0\b'\0\0 \xAE\0\0\b\x07\0\0\b\x87\0\0\bG\0\0 \xEE\0\x07 \0\0\b_\0\0\b\0\0 \x9E\0\x07c\0\0\b\x7F\0\0\b?\0\0 \xDE\0\x07\x1B\0\0\bo\0\0\b/\0\0 \xBE\0\0\b\0\0\b\x8F\0\0\bO\0\0 \xFE\0\`\x07\0\0\0\bP\0\0\b\0\bs\0\x07\0\0\bp\0\0\b0\0\0 \xC1\0\x07 \0\0\b\`\0\0\b \0\0 \xA1\0\0\b\0\0\0\b\x80\0\0\b@\0\0 \xE1\0\x07\0\0\bX\0\0\b\0\0 \x91\0\x07;\0\0\bx\0\0\b8\0\0 \xD1\0\x07\0\0\bh\0\0\b(\0\0 \xB1\0\0\b\b\0\0\b\x88\0\0\bH\0\0 \xF1\0\x07\0\0\bT\0\0\b\0\b\xE3\0\x07+\0\0\bt\0\0\b4\0\0 \xC9\0\x07\r\0\0\bd\0\0\b$\0\0 \xA9\0\0\b\0\0\b\x84\0\0\bD\0\0 \xE9\0\x07\b\0\0\b\\\0\0\b\0\0 \x99\0\x07S\0\0\b|\0\0\b<\0\0 \xD9\0\x07\0\0\bl\0\0\b,\0\0 \xB9\0\0\b\f\0\0\b\x8C\0\0\bL\0\0 \xF9\0\x07\0\0\bR\0\0\b\0\b\xA3\0\x07#\0\0\br\0\0\b2\0\0 \xC5\0\x07\v\0\0\bb\0\0\b"\0\0 \xA5\0\0\b\0\0\b\x82\0\0\bB\0\0 \xE5\0\x07\x07\0\0\bZ\0\0\b\0\0 \x95\0\x07C\0\0\bz\0\0\b:\0\0 \xD5\0\x07\0\0\bj\0\0\b*\0\0 \xB5\0\0\b \0\0\b\x8A\0\0\bJ\0\0 \xF5\0\x07\0\0\bV\0\0\b\0@\b\0\0\x073\0\0\bv\0\0\b6\0\0 \xCD\0\x07\0\0\bf\0\0\b&\0\0 \xAD\0\0\b\0\0\b\x86\0\0\bF\0\0 \xED\0\x07 \0\0\b^\0\0\b\0\0 \x9D\0\x07c\0\0\b~\0\0\b>\0\0 \xDD\0\x07\x1B\0\0\bn\0\0\b.\0\0 \xBD\0\0\b\0\0\b\x8E\0\0\bN\0\0 \xFD\0\`\x07\0\0\0\bQ\0\0\b\0\b\x83\0\x07\0\0\bq\0\0\b1\0\0 \xC3\0\x07 \0\0\ba\0\0\b!\0\0 \xA3\0\0\b\0\0\b\x81\0\0\bA\0\0 \xE3\0\x07\0\0\bY\0\0\b\0\0 \x93\0\x07;\0\0\by\0\0\b9\0\0 \xD3\0\x07\0\0\bi\0\0\b)\0\0 \xB3\0\0\b \0\0\b\x89\0\0\bI\0\0 \xF3\0\x07\0\0\bU\0\0\b\0\b\x07+\0\0\bu\0\0\b5\0\0 \xCB\0\x07\r\0\0\be\0\0\b%\0\0 \xAB\0\0\b\0\0\b\x85\0\0\bE\0\0 \xEB\0\x07\b\0\0\b]\0\0\b\0\0 \x9B\0\x07S\0\0\b}\0\0\b=\0\0 \xDB\0\x07\0\0\bm\0\0\b-\0\0 \xBB\0\0\b\r\0\0\b\x8D\0\0\bM\0\0 \xFB\0\x07\0\0\bS\0\0\b\0\b\xC3\0\x07#\0\0\bs\0\0\b3\0\0 \xC7\0\x07\v\0\0\bc\0\0\b#\0\0 \xA7\0\0\b\0\0\b\x83\0\0\bC\0\0 \xE7\0\x07\x07\0\0\b[\0\0\b\x1B\0\0 \x97\0\x07C\0\0\b{\0\0\b;\0\0 \xD7\0\x07\0\0\bk\0\0\b+\0\0 \xB7\0\0\b\v\0\0\b\x8B\0\0\bK\0\0 \xF7\0\x07\0\0\bW\0\0\b\0@\b\0\0\x073\0\0\bw\0\0\b7\0\0 \xCF\0\x07\0\0\bg\0\0\b'\0\0 \xAF\0\0\b\x07\0\0\b\x87\0\0\bG\0\0 \xEF\0\x07 \0\0\b_\0\0\b\0\0 \x9F\0\x07c\0\0\b\x7F\0\0\b?\0\0 \xDF\0\x07\x1B\0\0\bo\0\0\b/\0\0 \xBF\0\0\b\0\0\b\x8F\0\0\bO\0\0 \xFF\0\0\0\x1B\0A\0@\0!\0  \0\b\x81\0@\0\0\0\x81\0\x1B\x07\0a\0\`\01\00\r\0\f\xC1\0@\0\0\0\0\0\0\x07\0\b\0 \0 \0\v\0\r\0\0\0\0\0\x1B\0\0#\0+\x003\0;\0C\0S\0c\0s\0\x83\0\xA3\0\xC3\0\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xCB\0M\0\0\0\0\0\0\0\0\x07\0 \0\r\0\0\0!\x001\0A\0a\0\x81\0\xC1\0\x81\b\f 0@\`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1B\0\x1B\0\0\0\0\0@\0@\0\xBE\xF3\xF8y\xECa\xF6?\xDE\xAA\x8C\x80\xF7{\xD5\xBF=\x88\xAFJ\xEDq\xF5?\xDBm\xC0\xA7\xF0\xBE\xD2\xBF\xB0\xF0\xF09\x95\xF4?g:Q\x7F\xAE\xD0\xBF\x85\xB8\xB0\x95\xC9\xF3?\xE9$\x82\xA6\xD81\xCB\xBF\xA5d\x88\f\r\xF3?Xw\xC0 OW\xC6\xBF\xA0\x8E\v{"^\xF2?\0\x81\x9C\xC7+\xAA\xC1\xBF?4JJ\xBB\xF1?^\x8C\xCEvN\xBA\xBF\xBA\xE5\x8A\xF0X#\xF1?\xCCaZ<\x97\xB1\xBF\xA7\0\x99A?\x95\xF0?\f\xE18\xF4R\xA2\xBF\0\0\0\0\0\0\xF0?\0\0\0\0\0\0\0\0\xACG\x9A\xFD\x8C\`\xEE?\x84Y\xF2]\xAA\xA5\xAA?\xA0j\xB3\xA4\xEC?\xB4.6\xAAS^\xBC?\xE6\xFCjW6 \xEB?\b\xDB w\xE5&\xC5?-\xAA\xA1c\xD1\xC2\xE9?pG"\r\x86\xC2\xCB?\xEDAx\xE6\x86\xE8?\xE1~\xA0\xC8\x8B\xD1?bHS\xF5\xDCg\xE7? \xEE\xB6W0\xD4?\xEF9\xFA\xFEB.\xE6?4\x83\xB8H\xA3\xD0\xBFj\v\xE0\v[W\xD5?#A \xF2\xFE\xFF\xDF\xBF\xB8e\0A\xC0\xF1\0\vA\0\v\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\v\0\0\0\0\0\0\0\0\0  \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\xF2\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\xF2\0\v\f\0A\xD7\xF2\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\xF3\0\v\0A\x91\xF3\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\xF3\0\v\0A\xCB\xF3\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\xF4\0\v\0\0\0\0\0\0\0\0\0 \0A\xB3\xF4\0\v\0A\xBF\xF4\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\xF4\0\v\0A\xF9\xF4\0\v\xB8\x07\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0\0\0\0X;\0\x006\0\0\x007\0\0\x008\0\0\x009\0\0\0:\0\0\0;\0\0\0<\0\0\0=\0\0\0>\0\0\0?\0\0\0@\0\0\0A\0\0\0B\0\0\0C\0\0\0\0\0\0\0t<\0\0D\0\0\0E\0\0\x008\0\0\x009\0\0\0F\0\0\0G\0\0\0<\0\0\0=\0\0\0>\0\0\0H\0\0\0@\0\0\0I\0\0\0B\0\0\0J\0\0\0\xCCd\0\0,;\0\0>\0\0NSt3__29basic_iosIcNS_11char_traitsIcEEEE\0\0\0\xA4d\0\0\`;\0\0NSt3__215basic_streambufIcNS_11char_traitsIcEEEE\0\0\0\0(e\0\0\xAC;\0\0\0\0\0\0\0\0\0 ;\0\0\xF4\xFF\xFFNSt3__213basic_istreamIcNS_11char_traitsIcEEEE\0\0(e\0\0\xF4;\0\0\0\0\0\0\0\0\0 ;\0\0\xF4\xFF\xFFNSt3__213basic_ostreamIcNS_11char_traitsIcEEEE\0\0(e\0\0D<\0\0\0\0\0\0\0\0\x94;\0\0\0\0\0\xDC;\0\0\b\0\0NSt3__214basic_iostreamIcNS_11char_traitsIcEEEE\0\xCCd\0\0\x80<\0\0X;\0\0NSt3__215basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\0@\0\0\0\0\0\0\0\xB4=\0\0K\0\0\0L\0\0\x008\0\0\0\xF8\xFF\xFF\xFF\xB4=\0\0M\0\0\0N\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF\xB4=\0\0O\0\0\0P\0\0\0\xD0<\0\x004=\0\0p=\0\0\x84=\0\0\x98=\0\0\xAC=\0\0\\=\0\0H=\0\0\xF8<\0\0\xE4<\0\0@\0\0\0\0\0\0\0$<\0\0Q\0\0\0R\0\0\x008\0\0\0\xF8\xFF\xFF\xFF$<\0\0S\0\0\0T\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF$<\0\0U\0\0\0V\0\0\0@\0\0\0\0\0\0\0\x94;\0\0W\0\0\0X\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF\x94;\0\0Y\0\0\0Z\0\0\x008\0\0\0\0\0\0\0\xDC;\0\0[\0\0\0\\\0\0\0\xC8\xFF\xFF\xFF\xC8\xFF\xFF\xFF\xDC;\0\0]\0\0\0^\0\0\0\xCCd\0\0\xC0=\0\0$<\0\0NSt3__218basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\0\0\0\0\0\0>\0\0_\0\0\0\`\0\0\0\xA4d\0\0 >\0\0NSt3__28ios_baseE\0A\xC0\xFC\0\v#\xDE\x95\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@>\0\0\0\0\0C.UTF-8\0A\x90\xFD\0\vT>\0A\xB0\xFD\0\vGLC_CTYPE\0\0\0\0LC_NUMERIC\0\0LC_TIME\0\0\0\0\0LC_COLLATE\0\0LC_MONETARY\0LC_MESSAGES\0A\x84\xFE\0\v-\x80\xDE(\0\x80\xC8M\0\0\xA7v\0\x004\x9E\0\x80\xC7\0\x80\x9F\xEE\0\0~\x80\\@\x80\xE9g\0\xC8\x90\0U\xB8.\0A\xC0\xFE\0\v\xD2Sun\0Mon\0Tue\0Wed\0Thu\0Fri\0Sat\0Sunday\0Monday\0Tuesday\0Wednesday\0Thursday\0Friday\0Saturday\0Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec\0January\0February\0March\0April\0May\0June\0July\0August\0September\0October\0November\0December\0AM\0PM\0%a %b %e %T %Y\0%m/%d/%y\0%H:%M:%S\0%I:%M:%S %p\0\0\0%m/%d/%y\x000123456789\0%a %b %e %T %Y\0%H:%M:%S\0\0\0\0\0^[yY]\0^[nN]\0yes\0no\0A\xA0\x81\v\xE1\xD1t\x9E\0W\x9D\xBD*\x80pR\xFF\xFF>' \0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\0\x005\0\0\0q\0\0\0k\xFF\xFF\xFF\xCE\xFB\xFF\xFF\x92\xBF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\b \xFF\xFF\xFF\xFF\xFF\xFF\xFF \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0\0\0\0\0\0\0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x07\0\0\xC0\b\0\0\xC0 \0\0\xC0 \0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3 \0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0\0\0\x000123456789abcdefABCDEFxX+-pPiInN\0%I:%M:%S %p%H:%M\0A\x90\x86\v\x81%\0\0\0m\0\0\0/\0\0\0%\0\0\0d\0\0\0/\0\0\0%\0\0\0y\0\0\0%\0\0\0Y\0\0\0-\0\0\0%\0\0\0m\0\0\0-\0\0\0%\0\0\0d\0\0\0%\0\0\0I\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0p\0\0\0\0\0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0A\xA0\x87\ve%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0\0\0\0\0\0M\0\0t\0\0\0u\0\0\0v\0\0\0\0\0\0\0dM\0\0w\0\0\0x\0\0\0v\0\0\0y\0\0\0z\0\0\0{\0\0\0|\0\0\0}\0\0\0~\0\0\0\x7F\0\0\0\x80\0A\x90\x88\v\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\x002\0\x002\0\x002\0\x002\0\x002\0\x002\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\0A\x94\x90\v\xED\xBCL\0\0\x81\0\0\0\x82\0\0\0v\0\0\0\x83\0\0\0\x84\0\0\0\x85\0\0\0\x86\0\0\0\x87\0\0\0\x88\0\0\0\x89\0\0\0\0\0\0\0\x98M\0\0\x8A\0\0\0\x8B\0\0\0v\0\0\0\x8C\0\0\0\x8D\0\0\0\x8E\0\0\0\x8F\0\0\0\x90\0\0\0\0\0\0\0\xBCM\0\0\x91\0\0\0\x92\0\0\0v\0\0\0\x93\0\0\0\x94\0\0\0\x95\0\0\0\x96\0\0\0\x97\0\0\0t\0\0\0r\0\0\0u\0\0\0e\0\0\0\0\0\0\0f\0\0\0a\0\0\0l\0\0\0s\0\0\0e\0\0\0\0\0\0\0%\0\0\0m\0\0\0/\0\0\0%\0\0\0d\0\0\0/\0\0\0%\0\0\0y\0\0\0\0\0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0\0\0\0\0%\0\0\0a\0\0\0 \0\0\0%\0\0\0b\0\0\0 \0\0\0%\0\0\0d\0\0\0 \0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0Y\0\0\0\0\0\0\0%\0\0\0I\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0p\0A\x8C\x93\v\xFD'\x9CI\0\0\x98\0\0\0\x99\0\0\0v\0\0\0\xCCd\0\0\xA8I\0\0\xF0a\0\0NSt3__26locale5facetE\0\0\0\0\0\0\0J\0\0\x98\0\0\0\x9A\0\0\0v\0\0\0\x9B\0\0\0\x9C\0\0\0\x9D\0\0\0\x9E\0\0\0\x9F\0\0\0\xA0\0\0\0\xA1\0\0\0\xA2\0\0\0\xA3\0\0\0\xA4\0\0\0\xA5\0\0\0\xA6\0\0\0(e\0\0$J\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x008J\0\0\0\0\0NSt3__25ctypeIwEE\0\0\0\xA4d\0\0@J\0\0NSt3__210ctype_baseE\0\0\0\0\0\0\0\0\x88J\0\0\x98\0\0\0\xA7\0\0\0v\0\0\0\xA8\0\0\0\xA9\0\0\0\xAA\0\0\0\xAB\0\0\0\xAC\0\0\0\xAD\0\0\0\xAE\0\0\0(e\0\0\xA8J\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xCCJ\0\0\0\0\0NSt3__27codecvtIcc11__mbstate_tEE\0\0\0\xA4d\0\0\xD4J\0\0NSt3__212codecvt_baseE\0\0\0\0\0\0K\0\0\x98\0\0\0\xAF\0\0\0v\0\0\0\xB0\0\0\0\xB1\0\0\0\xB2\0\0\0\xB3\0\0\0\xB4\0\0\0\xB5\0\0\0\xB6\0\0\0(e\0\0\0\0?\0\0@\0\0A\0\0B\0\0C\0\0D\0\0E\0\0F\0\0(e\0\0V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000U\0\0\0\0\0NSt3__210moneypunctIwLb0EEE\0\0\0\0\0pV\0\0\x98\0\0\0G\0\0v\0\0\0H\0\0I\0\0J\0\0K\0\0L\0\0M\0\0N\0\0O\0\0P\0\0(e\0\0\x90V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000U\0\0\0\0\0NSt3__210moneypunctIwLb1EEE\0\0\0\0\0\xC8V\0\0\x98\0\0\0Q\0\0v\0\0\0R\0\0S\0\0(e\0\0\xE8V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000W\0\0\0\0\0\0NSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE\0\0\0\xA4d\0\x008W\0\0NSt3__211__money_getIcEE\0\0\0\0\0\0\0\0pW\0\0\x98\0\0\0T\0\0v\0\0\0U\0\0V\0\0(e\0\0\x90W\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xD8W\0\0\0\0\0\0NSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE\0\0\0\xA4d\0\0\xE0W\0\0NSt3__211__money_getIwEE\0\0\0\0\0\0\0\0X\0\0\x98\0\0\0W\0\0v\0\0\0X\0\0Y\0\0(e\0\x008X\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\x80X\0\0\0\0\0\0NSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE\0\0\0\xA4d\0\0\x88X\0\0NSt3__211__money_putIcEE\0\0\0\0\0\0\0\0\xC0X\0\0\x98\0\0\0Z\0\0v\0\0\0[\0\0\\\0\0(e\0\0\xE0X\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0(Y\0\0\0\0\0\0NSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE\0\0\0\xA4d\0\x000Y\0\0NSt3__211__money_putIwEE\0\0\0\0\0\0\0\0lY\0\0\x98\0\0\0]\0\0v\0\0\0^\0\0_\0\0\`\0\0(e\0\0\x8CY\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xA4Y\0\0\0\0\0NSt3__28messagesIcEE\0\0\0\0\xA4d\0\0\xACY\0\0NSt3__213messages_baseE\0\0\0\0\0\xE4Y\0\0\x98\0\0\0a\0\0v\0\0\0b\0\0c\0\0d\0\0(e\0\0Z\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xA4Y\0\0\0\0\0NSt3__28messagesIwEE\0\0\0\0S\0\0\0u\0\0\0n\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0M\0\0\0o\0\0\0n\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0T\0\0\0u\0\0\0e\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0W\0\0\0e\0\0\0d\0\0\0n\0\0\0e\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0T\0\0\0h\0\0\0u\0\0\0r\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0F\0\0\0r\0\0\0i\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0S\0\0\0a\0\0\0t\0\0\0u\0\0\0r\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0S\0\0\0u\0\0\0n\0\0\0\0\0\0\0M\0\0\0o\0\0\0n\0\0\0\0\0\0\0T\0\0\0u\0\0\0e\0\0\0\0\0\0\0W\0\0\0e\0\0\0d\0\0\0\0\0\0\0T\0\0\0h\0\0\0u\0\0\0\0\0\0\0F\0\0\0r\0\0\0i\0\0\0\0\0\0\0S\0\0\0a\0\0\0t\0\0\0\0\0\0\0J\0\0\0a\0\0\0n\0\0\0u\0\0\0a\0\0\0r\0\0\0y\0\0\0\0\0\0\0F\0\0\0e\0\0\0b\0\0\0r\0\0\0u\0\0\0a\0\0\0r\0\0\0y\0\0\0\0\0\0\0M\0\0\0a\0\0\0r\0\0\0c\0\0\0h\0\0\0\0\0\0\0A\0\0\0p\0\0\0r\0\0\0i\0\0\0l\0\0\0\0\0\0\0M\0\0\0a\0\0\0y\0\0\0\0\0\0\0J\0\0\0u\0\0\0n\0\0\0e\0\0\0\0\0\0\0J\0\0\0u\0\0\0l\0\0\0y\0\0\0\0\0\0\0A\0\0\0u\0\0\0g\0\0\0u\0\0\0s\0\0\0t\0\0\0\0\0\0\0S\0\0\0e\0\0\0p\0\0\0t\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0O\0\0\0c\0\0\0t\0\0\0o\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0N\0\0\0o\0\0\0v\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0D\0\0\0e\0\0\0c\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0J\0\0\0a\0\0\0n\0\0\0\0\0\0\0F\0\0\0e\0\0\0b\0\0\0\0\0\0\0M\0\0\0a\0\0\0r\0\0\0\0\0\0\0A\0\0\0p\0\0\0r\0\0\0\0\0\0\0J\0\0\0u\0\0\0n\0\0\0\0\0\0\0J\0\0\0u\0\0\0l\0\0\0\0\0\0\0A\0\0\0u\0\0\0g\0\0\0\0\0\0\0S\0\0\0e\0\0\0p\0\0\0\0\0\0\0O\0\0\0c\0\0\0t\0\0\0\0\0\0\0N\0\0\0o\0\0\0v\0\0\0\0\0\0\0D\0\0\0e\0\0\0c\0\0\0\0\0\0\0A\0\0\0M\0\0\0\0\0\0\0P\0\0\0M\0A\x94\xBB\v\x98 \0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\xCA\x9A;\0\0\0\0\0\0\0\x0000010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899\0\0\0\0\0\0\0\x00000000010010001101000101011001111000100110101011110011011110111100010203040506071011121314151617202122232425262730313233343536374041424344454647505152535455565760616263646566677071727374757677000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0d\0\0\0\0\0\0\0\xE8\0\0\0\0\0\0'\0\0\0\0\0\0\xA0\x86\0\0\0\0\0@B\0\0\0\0\0\x80\x96\x98\0\0\0\0\0\0\xE1\xF5\0\0\0\0\0\xCA\x9A;\0\0\0\0\0\xE4\vT\0\0\0\0\xE8vH\0\0\0\0\xA5\xD4\xE8\0\0\0\0\xA0rN \0\0\0@z\xF3Z\0\0\0\x80\xC6\xA4~\x8D\0\0\0\xC1o\xF2\x86#\0\0\0\x8A]xEc\0\0d\xA7\xB3\xB6\xE0\r\0\0\xE8\x89#\xC7\x8A\xA4d\0\0\xF8a\0\0NSt3__214__shared_countE\0\0\0\0hf\0\0\xCCd\0\0$b\0\0\x98e\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\xCCd\0\0Tb\0\0b\0\0N10__cxxabiv117__class_type_infoE\0\0\0\xCCd\0\0\x84b\0\0b\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\xCCd\0\0\xB4b\0\0xb\0\0N10__cxxabiv119__pointer_type_infoE\0\xCCd\0\0\xE4b\0\0b\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\xCCd\0\0c\0\0xb\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0dc\0\0g\0\0h\0\0i\0\0j\0\0k\0\0\xCCd\0\0pc\0\0b\0\0N10__cxxabiv123__fundamental_type_infoE\0Pc\0\0\xA0c\0\0v\0Dn\0\0\0\0Pc\0\0\xB0c\0\0b\0\0\0Pc\0\0\xBCc\0\0c\0\0\0Pc\0\0\xC8c\0\0h\0\0\0Pc\0\0\xD4c\0\0a\0\0\0Pc\0\0\xE0c\0\0s\0\0\0Pc\0\0\xECc\0\0t\0\0\0Pc\0\0\xF8c\0\0i\0\0\0Pc\0\0d\0\0j\0\0\0Pc\0\0d\0\0l\0\0\0Pc\0\0d\0\0m\0\0\0Pc\0\0(d\0\0x\0\0\0Pc\0\x004d\0\0y\0\0\0Pc\0\0@d\0\0f\0\0\0Pc\0\0Ld\0\0d\0\0\0\0\0\0\0ld\0\0g\0\0l\0\0i\0\0j\0\0m\0\0\xCCd\0\0xd\0\0b\0\0N10__cxxabiv116__enum_type_infoE\0\0\0\0\0\0\0\0Hb\0\0g\0\0n\0\0i\0\0j\0\0o\0\0p\0\0q\0\0r\0\0\0\0\0\0\xECd\0\0g\0\0s\0\0i\0\0j\0\0o\0\0t\0\0u\0\0v\0\0\xCCd\0\0\xF8d\0\0Hb\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\0He\0\0g\0\0w\0\0i\0\0j\0\0o\0\0x\0\0y\0\0z\0\0\xCCd\0\0Te\0\0Hb\0\0N10__cxxabiv121__vmi_class_type_infoE\0\0\0\0\0\0\0\xA8b\0\0g\0\0{\0\0i\0\0j\0\0|\0\0\xA4d\0\0\xA0e\0\0St9type_info\0A\xB1\xCB\v\b \0\0\0\0\0\0\0A\xC4\xCB\v1\0A\xDC\xCB\v2\0\0\x003\0\0\0\xF8g\0\0\0\0A\xF4\xCB\v\0A\x84\xCC\v\xFF\xFF\xFF\xFF \0A\xC8\xCC\v!\xB8e\0\0@v\0%m/%d/%y\0\0\0\b%H:%M:%S\0\0\0\b\0A\xF4\xCC\ve\0A\x8C\xCD\v 2\0\0\0f\0\x004v\0A\xA4\xCD\v\0A\xB4\xCD\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xF8\xCD\vhf`)),me((await k(oe)).instance))})(),(function(){function me(){var oe;if(r.calledRun=!0,!f){if(C=!0,$k.H(),_?.(r),(oe=r.onRuntimeInitialized)==null||oe.call(r),r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;){var Ae=r.postRun.shift();w.push(Ae)}D(w)}}if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)J();D(z),r.setStatus?(r.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>r.setStatus(""),1),me()},1)):me()})(),C?o=r:o=new Promise((me,oe)=>{_=me,S=oe}),o}var tC=(e,t,n)=>{let i=e.vf32_ptr(t),o=t.size(),r=i>>2,s=e.HEAPF32.slice(r,r+o);if(n!==void 0)for(let a=0;a1/(1+Math.exp(-e)),KOe=e=>t=>t*e+.5,JOe=(e,t,n)=>{let i=n?.colorScaleFactor??.282;return{numPoints:t.numPoints,shDegree:t.shDegree,antialiased:t.antialiased,positions:tC(e,t.positions),scales:tC(e,t.scales,Math.exp),rotations:tC(e,t.rotations),alphas:tC(e,t.alphas,HOe),colors:tC(e,t.colors,KOe(i)),sh:tC(e,t.sh)}},jOe=(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))},Pde=async(e,t)=>{var n;let i=await zOe(),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=JOe(i,a,t);return jOe(i,a),c}catch(s){throw s}finally{r!==null&&i._free(r)}};var QOe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var qOe=[0,9,24,45],$Oe=14,eBe=1.6*1024*1024*1024;function tBe(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 nBe(e,t){let n=$Oe+(qOe[t]??0);return e*n*Float32Array.BYTES_PER_ELEMENT*2}var zj=class extends qi{constructor(t){super(),t=t??B.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=ft.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=ft.LOADING,this._promise=iBe(this),this._promise)}process(t){if(this._state===ft.READY)return!0;if(this._state!==ft.PROCESSING||(l(this._spzError)&&Hj(this,this._spzError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let n=tBe(this._gltf,this._primitive);if(l(n)){let o=nBe(n.numPoints,n.shDegree);if(o>eBe){let r=Math.round(o/1048576);return Hj(this,new ue(`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=Pde(this._bufferViewTypedArray,{unpackOptions:{coordinateSystem:"UNSPECIFIED"}});if(!l(i))return!1;this._decodePromise=oBe(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 iBe(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=ft.PROCESSING,e)}catch(n){if(e.isDestroyed())return;Hj(e,n)}}function Hj(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load SPZ",t)}async function oBe(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={gcloud:n},e._state=ft.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._spzError=n}}var Uv=zj;var ECn=x(T(),1);var _Cn=x(T(),1);var oCn=x(T(),1);function Dv(e){e=e??B.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=Be(e.extras,!0),this._extensions=Be(e.extensions,!0)}Dv.fromJson=function(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=gp.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new Dv({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties(Dv.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}}});Dv.BATCH_TABLE_CLASS_NAME="_batchTable";var Hh=Dv;var fCn=x(T(),1);var cCn=x(T(),1);function U5(e){e=e??B.EMPTY_OBJECT;let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=Be(e.extras,!0),this._extensions=Be(e.extensions,!0)}U5.fromJson=function(e){return new U5({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(U5.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 Ov=U5;function D5(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a>t};nc.fromSubtreeJson=async function(e,t,n,i,o){let r=new nc(e,i,o),s;l(t)?s={json:t,binary:void 0}:s=lBe(n);let a=s.json;r._subtreeJson=a;let c;if(Vi(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(l(a.tileMetadata)){let A=a.tileMetadata;c=a.propertyTables[A]}let d=[];if(l(a.contentMetadata)){let A=a.contentMetadata.length;for(let Z=0;Z0;u=u||h;for(let p=0;p0){let g=t.getContentMetadataView(a,E);X=Ey.parseAllBoundingVolumeSemantics("CONTENT",g)}let N=LBe(b,X);l(N)&&(I.boundingVolume=N),f.push(Gt(I,s.contentHeaders[E]))}let y=Ude(c,s,a),_={boundingVolume:b,geometricError:y,refine:s.refine,contents:f},S=!0,A=Be(s.tileHeader,S);delete A.boundingVolume,delete A.transform,delete A.metadata;let Z=Gt(_,A,S),V=Hde(e,s.baseResource,Z,n);return V.implicitCoordinates=a,V.implicitSubtree=t,V.metadata=c,V.hasImplicitContentMetadata=p,V}function B5(e,t){return l(e)&&l(t)&&(l(t.minimumHeight)||l(t.maximumHeight))&&(Vi(e,"3DTILES_bounding_volume_S2")||l(e.region))}function qj(e,t){l(t)&&(Vi(e,"3DTILES_bounding_volume_S2")?EBe(e.extensions["3DTILES_bounding_volume_S2"],t.minimumHeight,t.maximumHeight):l(e.region)&&RBe(e.region,t.minimumHeight,t.maximumHeight))}function RBe(e,t,n){l(t)&&(e[4]=t),l(n)&&(e[5]=n)}function EBe(e,t,n){l(t)&&(e.minimumHeight=t),l(n)&&(e.maximumHeight=n)}function GBe(e,t,n,i,o,r){let s;return!l(r)||!l(r.boundingVolume)||!B5(r.boundingVolume,r)&&B5(e.boundingVolume,r)?s=Dde(e,t,n,i??!1,o):s=r.boundingVolume,qj(s,r),s}function LBe(e,t){let n;return l(t)&&(n=t.boundingVolume),B5(n,t)?qj(n,t):B5(e,t)&&(n=Be(e,!0),qj(n,t)),n}function Dde(e,t,n,i,o){let r=e.boundingVolume;return Vi(r,"3DTILES_bounding_volume_S2")?Ode(i,o,n,t.level,t.x,t.y,t.z):l(r.region)?{region:zde(r.region,t.level,t.x,t.y,t.z)}:{box:Bde(r.box,t.level,t.x,t.y,t.z)}}function Ode(e,t,n,i,o,r,s){let a=t._boundingVolume;if(e)return{extensions:{"3DTILES_bounding_volume_S2":{token:ib.getTokenFromId(a.s2Cell._cellId),minimumHeight:a.minimumHeight,maximumHeight:a.maximumHeight}}};let c=Number(t._boundingVolume.s2Cell._cellId>>BigInt(61)),d=c%2===0?MZ.encode2D(i,o,r):MZ.encode2D(i,r,o),u=ib.fromFacePositionLevel(c,BigInt(d),i),h,p;if(l(s)){let b=(a.maximumHeight+a.minimumHeight)/2;h=n<4?a.minimumHeight:b,p=n<4?b:a.maximumHeight}else h=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:ib.getTokenFromId(u._cellId),minimumHeight:h,maximumHeight:p}}}}var WBe=new m,vBe=new m,Qj=new m,FBe=new q;function Bde(e,t,n,i,o){if(t===0)return e;let r=m.unpack(e,0,vBe),s=q.unpack(e,3,FBe),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,WBe);l(o)&&(u=-1+(2*o+1)*a,h.z=a);let p=m.fromElements(c,d,u,Qj);p=q.multiplyByVector(s,p,Qj),p=m.add(p,r,Qj);let b=q.clone(s);b=q.multiplyByScale(b,h,b);let f=new Array(12);return m.pack(p,f),q.pack(b,f,3),f}var IBe=new ce;function zde(e,t,n,i,o){if(t===0)return e.slice();let r=ce.unpack(e,0,IBe),s=e[4],a=e[5],c=Math.pow(2,-t),d=c*r.width,u=W.negativePiToPi(r.west+n*d),h=W.negativePiToPi(u+d),p=c*r.height,b=W.negativePiToPi(r.south+i*p),f=W.negativePiToPi(b+p),y=s,_=a;if(l(o)){let S=c*(a-s);y+=o*S,_=y+S}return[u,b,h,f,y,_]}function PBe(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=Dde(i,o,n,!1,t),s=Ude(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=Hde(e,i.baseResource,c,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function Hde(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}Ul.prototype.hasProperty=function(e,t){return!1};Ul.prototype.getFeature=function(e){};Ul.prototype.applyDebugSettings=function(e,t){};Ul.prototype.applyStyle=function(e){};Ul.prototype.update=function(e,t){};Ul.prototype.pick=function(e,t,n){};Ul.prototype.isDestroyed=function(){return!1};Ul.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),he(this)};Ul._deriveBoundingBox=Bde;Ul._deriveBoundingRegion=zde;Ul._deriveBoundingVolumeS2=Ode;var oC=Ul;var xQn=x(T(),1);var XVn=x(T(),1),XBe={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},Rd=Object.freeze(XBe);var lQn=x(T(),1);var s1n=x(T(),1);var MVn=x(T(),1);function rC(e,t){this._distance=t,this._normal=new Kde(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(rC.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)}}});rC.fromPlane=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance):t=new rC(e.normal,e.distance),t};rC.clone=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance,t):new rC(e.normal,e.distance)};function Kde(e,t){this._clippingPlane=t,this._cartesian3=m.clone(e)}Object.defineProperties(Kde.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 Qs=rC;function $c(e){e=e??B.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 _e,this.planeRemoved=new _e,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?$de:eue,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;o0&&(r=Jt.OUTSIDE);for(let s=0;s80*n){a=e[0],c=e[1];let u=a,h=c;for(let p=n;pu&&(u=b),f>h&&(h=f)}d=Math.max(u-a,h-c),d=d!==0?32767/d:0}return jv(r,s,n,a,c,d,0),s}function oue(e,t,n,i,o){let r;if(o===n3e(e,t,n,i)>0)for(let s=t;s=t;s-=i)r=iue(s/i|0,e[s],e[s+1],r);return r&&sC(r,r.next)&&(qv(r),r=r.next),r}function S_(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(sC(n,n.next)||ms(n.prev,n,n.next)===0)){if(qv(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function jv(e,t,n,i,o,r,s){if(!e)return;!s&&r&&jBe(e,i,o,r);let a=e;for(;e.prev!==e.next;){let c=e.prev,d=e.next;if(r?UBe(e,i,o,r):kBe(e)){t.push(c.i,e.i,d.i),qv(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=DBe(S_(e),t),jv(e,t,n,i,o,r,2)):s===2&&OBe(e,t,n,i,o,r):jv(S_(e),t,n,i,o,r,1);break}}}function kBe(e){let t=e.prev,n=e,i=e.next;if(ms(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=Math.min(o,r,s),h=Math.min(a,c,d),p=Math.max(o,r,s),b=Math.max(a,c,d),f=i.next;for(;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=h&&f.y<=b&&Jv(o,a,r,c,s,d,f.x,f.y)&&ms(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function UBe(e,t,n,i){let o=e.prev,r=e,s=e.next;if(ms(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,b=Math.min(a,c,d),f=Math.min(u,h,p),y=Math.max(a,c,d),_=Math.max(u,h,p),S=$j(b,f,t,n,i),A=$j(y,_,t,n,i),Z=e.prevZ,V=e.nextZ;for(;Z&&Z.z>=S&&V&&V.z<=A;){if(Z.x>=b&&Z.x<=y&&Z.y>=f&&Z.y<=_&&Z!==o&&Z!==s&&Jv(a,u,c,h,d,p,Z.x,Z.y)&&ms(Z.prev,Z,Z.next)>=0||(Z=Z.prevZ,V.x>=b&&V.x<=y&&V.y>=f&&V.y<=_&&V!==o&&V!==s&&Jv(a,u,c,h,d,p,V.x,V.y)&&ms(V.prev,V,V.next)>=0))return!1;V=V.nextZ}for(;Z&&Z.z>=S;){if(Z.x>=b&&Z.x<=y&&Z.y>=f&&Z.y<=_&&Z!==o&&Z!==s&&Jv(a,u,c,h,d,p,Z.x,Z.y)&&ms(Z.prev,Z,Z.next)>=0)return!1;Z=Z.prevZ}for(;V&&V.z<=A;){if(V.x>=b&&V.x<=y&&V.y>=f&&V.y<=_&&V!==o&&V!==s&&Jv(a,u,c,h,d,p,V.x,V.y)&&ms(V.prev,V,V.next)>=0)return!1;V=V.nextZ}return!0}function DBe(e,t){let n=e;do{let i=n.prev,o=n.next.next;!sC(i,o)&&sue(i,n,n.next,o)&&Qv(i,o)&&Qv(o,i)&&(t.push(i.i,n.i,o.i),qv(n),qv(n.next),n=e=o),n=n.next}while(n!==e);return S_(n)}function OBe(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&$Be(s,a)){let c=aue(s,a);s=S_(s,s.next),c=S_(c,c.next),jv(s,t,n,i,o,r,0),jv(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function BBe(e,t,n,i){let o=[];for(let r=0,s=t.length;r=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.x&&n.x>=c&&i!==n.x&&rue(os.x||n.x===s.x&&JBe(s,n)))&&(s=n,u=h)}n=n.next}while(n!==a);return s}function JBe(e,t){return ms(e.prev,e,t.prev)<0&&ms(t.next,e,e.next)<0}function jBe(e,t,n,i){let o=e;do o.z===0&&(o.z=$j(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,QBe(o)}function QBe(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;d0||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 $j(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 qBe(e){let t=e,n=e;do(t.x=(e-s)*(r-a)&&(e-s)*(i-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(o-s)*(i-a)}function Jv(e,t,n,i,o,r,s,a){return!(e===s&&t===a)&&rue(e,t,n,i,o,r,s,a)}function $Be(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!e3e(e,t)&&(Qv(e,t)&&Qv(t,e)&&t3e(e,t)&&(ms(e.prev,e,t.prev)||ms(e,t.prev,t))||sC(e,t)&&ms(e.prev,e,e.next)>0&&ms(t.prev,t,t.next)>0)}function ms(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function sC(e,t){return e.x===t.x&&e.y===t.y}function sue(e,t,n,i){let o=H5(ms(e,t,n)),r=H5(ms(e,t,i)),s=H5(ms(n,i,e)),a=H5(ms(n,i,t));return!!(o!==r&&s!==a||o===0&&z5(e,n,t)||r===0&&z5(e,i,t)||s===0&&z5(n,e,i)||a===0&&z5(n,t,i))}function z5(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 H5(e){return e>0?1:e<0?-1:0}function e3e(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&&sue(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function Qv(e,t){return ms(e.prev,e,e.next)<0?ms(e,t,e.next)>=0&&ms(e,e.prev,t)>=0:ms(e,t,e.prev)<0||ms(e,e.next,t)<0}function t3e(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 aue(e,t){let n=e4(e.i,e.x,e.y),i=e4(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 iue(e,t,n,i){let o=e4(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 qv(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 e4(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function n3e(e,t,n,i){let o=0;for(let r=t,s=n-i;r0?Ks.COUNTER_CLOCKWISE:Ks.CLOCKWISE};Gy.triangulate=function(e,t){let n=M.packArray(e);return t4(n,t,2)};var uue=new m,mue=new m,hue=new m,cue=new m,lue=new m,due=new m,db=new m,fue=new M,pue=new M,bue=new M,aC=new M;Gy.computeSubdivision=function(e,t,n,i,o){o=o??W.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;a0;){let Z=s.pop(),V=s.pop(),E=s.pop(),G=m.fromArray(d,E*3,uue),v=m.fromArray(d,V*3,mue),I=m.fromArray(d,Z*3,hue),X,N,g;r&&(X=M.fromArray(u,E*2,fue),N=M.fromArray(u,V*2,pue),g=M.fromArray(u,Z*2,bue));let C=m.multiplyByScalar(m.normalize(G,cue),y,cue),R=m.multiplyByScalar(m.normalize(v,lue),y,lue),L=m.multiplyByScalar(m.normalize(I,due),y,due),P=m.magnitudeSquared(m.subtract(C,R,db)),Y=m.magnitudeSquared(m.subtract(R,L,db)),O=m.magnitudeSquared(m.subtract(L,C,db)),k=Math.max(P,Y,O),D,w,z;k>S?P===k?(D=`${Math.min(E,V)} ${Math.max(E,V)}`,a=f[D],l(a)||(w=m.add(G,v,db),m.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[D]=a,r&&(z=M.add(X,N,aC),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(E,a,Z),s.push(a,V,Z)):Y===k?(D=`${Math.min(V,Z)} ${Math.max(V,Z)}`,a=f[D],l(a)||(w=m.add(v,I,db),m.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[D]=a,r&&(z=M.add(N,g,aC),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(V,a,E),s.push(a,Z,E)):O===k&&(D=`${Math.min(Z,E)} ${Math.max(Z,E)}`,a=f[D],l(a)||(w=m.add(I,G,db),m.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[D]=a,r&&(z=M.add(g,X,aC),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(Z,a,V),s.push(a,E,V)):(b.push(E),b.push(V),b.push(Z))}let A={attributes:{position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:d})},indices:b,primitiveType:ve.TRIANGLES};return r&&(A.attributes.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:u})),new gt(A)};var r3e=new be,s3e=new be,a3e=new be,n4=new be;Gy.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??W.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;a0;){let E=s.pop(),G=s.pop(),v=s.pop(),I=m.fromArray(d,v*3,uue),X=m.fromArray(d,G*3,mue),N=m.fromArray(d,E*3,hue),g,C,R;r&&(g=M.fromArray(u,v*2,fue),C=M.fromArray(u,G*2,pue),R=M.fromArray(u,E*2,bue));let L=e.cartesianToCartographic(I,r3e),P=e.cartesianToCartographic(X,s3e),Y=e.cartesianToCartographic(N,a3e);S.setEndPoints(L,P);let O=S.surfaceDistance;A.setEndPoints(P,Y);let k=A.surfaceDistance;Z.setEndPoints(Y,L);let D=Z.surfaceDistance,w=Math.max(O,k,D),z,J,ee,H,te;w>_?O===w?(z=`${Math.min(v,G)} ${Math.max(v,G)}`,a=f[z],l(a)||(J=S.interpolateUsingFraction(.5,n4),ee=(L.height+P.height)*.5,H=m.fromRadians(J.longitude,J.latitude,ee,e,db),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(te=M.add(g,C,aC),M.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(v,a,E),s.push(a,G,E)):k===w?(z=`${Math.min(G,E)} ${Math.max(G,E)}`,a=f[z],l(a)||(J=A.interpolateUsingFraction(.5,n4),ee=(P.height+Y.height)*.5,H=m.fromRadians(J.longitude,J.latitude,ee,e,db),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(te=M.add(C,R,aC),M.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(G,a,v),s.push(a,E,v)):D===w&&(z=`${Math.min(E,v)} ${Math.max(E,v)}`,a=f[z],l(a)||(J=Z.interpolateUsingFraction(.5,n4),ee=(Y.height+L.height)*.5,H=m.fromRadians(J.longitude,J.latitude,ee,e,db),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(te=M.add(R,g,aC),M.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(E,a,G),s.push(a,v,G)):(b.push(v),b.push(G),b.push(E))}let V={attributes:{position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:d})},indices:b,primitiveType:ve.TRIANGLES};return r&&(V.attributes.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:u})),new gt(V)};Gy.scaleToGeodeticHeight=function(e,t,n,i){n=n??ie.default;let o=i3e,r=o3e;if(t=t??0,i=i??!0,l(e)){let s=e.length;for(let a=0;a10&&t*2>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n};Ly.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};Ly.prototype.contains=function(e){return this._array.indexOf(e)!==-1};Ly.prototype.clear=function(){this._array.length=this._offset=this._length=0};Ly.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var Wy=Ly;var Cr={};Cr.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;c0;){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;d0?new Array(o):void 0;for(let a=0;aW.PI){let c=s;s=a,a=c}if(!(r.longitudea))return n.cartographicToCartesian(r)}function g3e(e,t,n,i){if(i===cn.RHUMB)return b3e(e,t,n);let o=mi.lineSegmentPlane(e,t,an.ORIGIN_XY_PLANE);if(l(o))return n.scaleToGeodeticSurface(o,o)}var y3e=new be;function x3e(e,t,n){let i=[],o,r,s,a,c,d=0;for(;dt.cartesianToCartographic(h,y3e).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=g3e(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 Tue(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)),b=i[p];if(!l(b)){++c;continue}let{visited:f,type:y,next:_}=b;if(b.visited=!0,y===0){if(_===0){let V=i[p-(s?1:-1)];if(V?.position===c+1)V.visited=!0;else{++c;continue}}if(!f&&s&&_>0||r===c&&!s&&_<0){++c;continue}}if(!(s?y>=0:y<=0)){++c;continue}f||u.push(c);let A=p+(s?1:-1),Z=i[A];if(!l(Z)){++c;continue}c=Z.position}while(c=0&&c!==r&&a.lengthd.theta-u.theta);let c=s[0].z>=0;o=Tue(i,o,s,a,1,0,c)}return i};Cr.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new Wy;c.enqueue(e);let d=l(r);for(;c.length!==0;){let u=c.dequeue(),h=u.positions,p=u.holes,b,f;if(i)for(f=h.length,b=0;b1){for(let v of G)c.enqueue(new Ec(v,p));continue}}let A=h.slice(),Z=l(p)?p.length:0,V=[],E;for(b=0;bMath.PI&&(e-=W.TWO_PI),e}}});var cC=new be,V3e=new m;hs.prototype.getLatitude=function(e){l(e)||(e=ie.default),cC.latitude=this.conformalLatitude,cC.longitude=this.longitude,cC.height=0;let t=this.ellipsoid.cartographicToCartesian(cC,V3e);return e.cartesianToCartographic(t,cC),cC.latitude};var R3e=new xn,E3e=new m,G3e=new m;hs.fromCartesian=function(e,t){let n=W.signNotZero(e.z),i=hs.NORTH_POLE_TANGENT_PLANE,o=hs.SOUTH_POLE;n<0&&(i=hs.SOUTH_POLE_TANGENT_PLANE,o=hs.NORTH_POLE);let r=R3e;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=m.subtract(r.origin,o,E3e),m.normalize(r.direction,r.direction);let s=mi.rayPlane(r,i.plane,G3e),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 hs(new M(c,d),i)};hs.fromCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i=0?s:s+W.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!==cn.RHUMB){let p=M.subtract(t.position,e.position,H3e),b=M.dot(t.position,p)/M.dot(p,p);if(b>0&&b<1){let f=M.add(t.position,M.multiplyByScalar(p,-b,p),K3e),y=el.clone(t,J3e);y.position=f;let _=y.getLatitude(n);r.south=Math.min(r.south,_),r.north=Math.max(r.north,_),Math.abs(c)>Math.abs(_)&&(d=_)}}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 Vue=new el,j3e=new el,Em={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};Gm.computeRectangleFromPositions=function(e,t,n,i){if(l(i)||(i=new ce),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,Em.northAngle=0,Em.southAngle=0,Em.westOverIdl=Number.POSITIVE_INFINITY,Em.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=el.fromCartesian(e[0],j3e);for(let s=1;sEm.eastOverIdl-Em.westOverIdl&&(i.west=Em.westOverIdl,i.east=Em.eastOverIdl,i.east>W.PI&&(i.east=i.east-W.TWO_PI),i.west>W.PI&&(i.west=i.west-W.TWO_PI)),W.equalsEpsilon(Math.abs(Em.northAngle),W.TWO_PI,W.EPSILON10)&&(i.north=W.PI_OVER_TWO,i.east=W.PI,i.west=-W.PI),W.equalsEpsilon(Math.abs(Em.southAngle),W.TWO_PI,W.EPSILON10)&&(i.south=-W.PI_OVER_TWO,i.east=W.PI,i.west=-W.PI),i};var Q3e=new el;function q3e(e,t,n){return e.height>=W.PI||e.width>=W.PI?el.fromCartesian(t[0],Q3e).tangentPlane:Ls.fromPoints(t,n)}var Rue=new be;function $3e(e,t,n){return(i,o)=>{if(e.height>=W.PI||e.width>=W.PI){if(e.south<0&&e.north>0){l(o)||(o=[]);for(let s=0;s=W.PI||e.width>=W.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,Rue);return l(r)||(r=new M),r.x=s.longitude/W.PI,r.y=s.latitude/W.PI_OVER_TWO,r}return el.fromCartesian(o,r)};let i=Ls.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function tze(e,t,n,i){return(o,r)=>!i&&(e.height>=W.PI_OVER_TWO||e.width>=2*W.PI_OVER_THREE)?ii.splitPolygonsOnEquator(o,t,n,r):o}function nze(e,t,n,i){if(t.height>=W.PI||t.width>=W.PI)return Qe.fromRectangle(t,void 0,Sue);let o=e,r=Ls.fromPoints(o,n);return ii.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,Sue)}Gm.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 b=e.rectangle,f=ii.polygonsFromHierarchy(r,h,$3e(b,p,n),!s,n,tze(b,n,d,s)),y=f.hierarchy,_=f.polygons,S=function(L){return L},A=h?ii.polygonsFromHierarchy(u,!0,S,!1,n).polygons:void 0;if(y.length===0)return;let Z=y[0].outerRing,V=nze(Z,b,n,o),E=[],G=e._height,v=e._extrudedHeight,I=e._perPositionHeightExtrude||!W.equalsEpsilon(G,v,0,W.EPSILON2),X={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:q3e(b,Z,n).plane.normal,projectTo2d:eze(b,Z,n),boundingRectangle:V,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},N;if(I)for(X.extrude=!0,X.top=a,X.bottom=c,X.shadowVolume=e._shadowVolume,X.offsetAttribute=e._offsetAttribute,N=0;N<_.length;N++){let L=D3e(n,_[N],h?A[N]:void 0,i,y[N],s,a,c,t,d),P;a&&c?(P=L.topAndBottom,X.geometry=ii.scaleToGeodeticHeightExtruded(P.geometry,G,v,n,s)):a?(P=L.topAndBottom,P.geometry.attributes.position.values=Ri.scaleToGeodeticHeight(P.geometry.attributes.position.values,G,n,!s),X.geometry=P.geometry):c&&(P=L.topAndBottom,P.geometry.attributes.position.values=Ri.scaleToGeodeticHeight(P.geometry.attributes.position.values,v,n,!0),X.geometry=P.geometry),(a||c)&&(X.wall=!1,P.geometry=i4(X),E.push(P));let Y=L.walls;X.wall=!0;for(let O=0;O 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 Is(e){e=e??B.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 _e,this.polygonRemoved=new _e,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;idC.equals(t,e))};Is.prototype.remove=function(e){let t=this._polygons,n=t.findIndex(i=>dC.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};function sze(e,t,n){let i=Math.max(e.height*t,0),o=Math.max(e.width*t,0),r=ce.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 aze(e,t){let i=[],o=e.length;for(let a=0;aa.extent),s=new Map;return i.forEach((a,c)=>a.polygonIndices.forEach(d=>s.set(d,c))),{extentsList:r,extentsIndexByPolygon:s}}Is.prototype.removeAll=function(){let e=this._polygons,t=e.length;for(let n=0;nu.computeSphericalExtents()),{extentsList:r,extentsIndexByPolygon:s}=aze(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 b=o[u];t[c++]=b.south,t[c++]=b.west,t[c++]=b.north-b.south,t[c++]=b.east-b.west;for(let f=0;fs+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 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=Le.OVERLAY,i}Is.prototype.queueCommands=function(e){l(this._signedDistanceComputeCommand)&&e.commandList.push(this._signedDistanceComputeCommand)};function dze(e){let t=e._polygonsTexture,n=e._extentsTexture;return new _l({fragmentShaderSource:$v,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 Lue=new ce,uze=new ce,mze=new ce;Is.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=Jt.OUTSIDE;this.inverse&&(o=Jt.INSIDE);let r=e.rectangle;if(!l(r)&&l(e.boundingVolume?.computeCorners)){let s=e.boundingVolume.computeCorners();r=ce.fromCartesianArray(s,t,Lue)}l(r)||(r=ce.fromBoundingSphere(e.boundingSphere,t,Lue));for(let s=0;s= 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 REn=x(T(),1),t2=`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 GEn=x(T(),1),n2=`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 WEn=x(T(),1),i2=`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 FEn=x(T(),1),o2=`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 yi(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??B.EMPTY_OBJECT;let t=Math.max(Math.floor(Math.min(e.mipmapLevels??7,Math.log2(vt.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=yi.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??yi.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties(yi.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}}});yi._maximumComputeCommandCount=8;yi._activeComputeCommandCount=0;yi._nextFrameCommandQueue=[];yi._queueCommand=(e,t)=>{if(yi._activeComputeCommandCount>=yi._maximumComputeCommandCount){yi._nextFrameCommandQueue.push(e);return}t.commandList.push(e),yi._activeComputeCommandCount++};yi._updateCommandQueue=e=>{if(yi._maximumComputeCommandCount=Math.log2(vt.maximumCubeMapSize),yi._nextFrameCommandQueue.length>0&&yi._activeComputeCommandCounts,u_enuToFixedFrame:()=>c,u_faceDirection:()=>Jr.getDirection(h,vue),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,yze)},owner:e});f.postExecute=()=>{if(e.isDestroyed()||f.canceled){yi._activeComputeCommandCount--;return}let y=e._radianceMapComputeCommands;y[b]=void 0;let _=new cs({context:n,colorTextures:[e._radianceMapTextures[b]]});_._bind(),e._radianceCubeMap[h].copyFromFramebuffer(),_._unBind(),_.destroy(),yi._activeComputeCommandCount--,y.some(l)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=f,yi._queueCommand(f,t),u++}e._radianceCommandsDirty=!1}}function Tze(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 zt({minificationFilter:Bt.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0))},u=(p,b,f,y,_)=>()=>{if(e.isDestroyed()||p.canceled){yi._activeComputeCommandCount--;return}let S=e._convolutionComputeCommands;S[b]=void 0,n.copyFace(t,f,y,_),c++,yi._activeComputeCommandCount--,f.destroy(),e._specularMapTextures[b]=void 0,d()},h=0;for(let p=1;pp/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>Jr.getDirection(b,vue)}});S.postExecute=u(S,h,f,b,p),e._convolutionComputeCommands[h]=S,yi._queueCommand(S,t),++h}r/=2,s/=2}d()}var Fue=new M(3,3);function _ze(e,t){let n=t.context,i=Fue,o=e._irradianceMapTexture;l(o)&&!o.isDestroyed()&&o.destroy(),o=new Lt({context:n,width:i.x,height:i.y,pixelDatatype:De.FLOAT,pixelFormat:Ke.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;l(r)||(r=new Oe({sources:[t2]}),e._irradianceMapFS=r);let s=new _l({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){yi._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,yi._activeComputeCommandCount--},e._irradianceComputeCommand=s,yi._queueCommand(s,t),e._irradianceTextureDirty=!0}function Sze(e,t){let n=t.context;if(!l(e._irradianceMapTexture))return;let i=new cs({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=Fue,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}yi.prototype.update=function(e){let t=e.mode;if(!(yi.isDynamicUpdateSupported(e)&&this._mipmapLevels>=1)||!this.enabled||!this.shouldUpdate||!l(this._position)||t===re.MORPHING){this._shouldRegenerateShaders=!1;return}yi._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=pze(this,e)||i===mb.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&&(xze(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(Tze(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(_ze(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){Sze(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};yi.prototype.isDestroyed=function(){return!1};yi.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;tvt.maximumTextureSize||a>vt.maximumTextureSize){Zt("PropertyTableTextureExceedsMaximumSize",`Cannot create a texture for the property table "${e.name}" because it exceeds the maximum texture size of ${vt.maximumTextureSize}.`);return}let c=Lze(s,r),d=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST});return Lt.create({context:i,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,sampler:d,flipY:!1,source:{width:r,height:a,arrayBufferView:c}})}function Eze(e,t,n,i){let o=[],r=n.properties;for(let[s,a]of Object.entries(r)){if(!a.isGpuCompatible(l2))continue;let c=e[s],d=l(c)?t[c.values]:Gze(a,i),u=d.length,h=a.cpuBytesPerElement(),p=u/h;if(p!==i)throw new ue(`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 Gze(e,t){let n=e.noData,i=xt.getComponentCount(e.type),o=e.isArray?e.arrayLength:1;e.type===xt.ENUM&&(n=e.enumType.valuesByName[n]),i===1&&(n=[n]),o===1&&(n=[n]);let r=e.cpuBytesPerElement(),s=Nt.getSizeInBytes(e.valueType),a=new ArrayBuffer(r*t),c=new DataView(a),d=Nt.getDataViewAccessors(c,e.valueType);for(let u=0;u=r;)S=o[S-r];o.push(S),s[y]=_}_>Jze&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):_>jze&&t instanceof Uint8Array&&(t=new Uint16Array(t)),y===c?(c=_,t[a]=_):y===d?(d=_,t[a+1]=_):(u=_,t[a+2]=_),y=Yue(i,c,d,u,p,b,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function Yue(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,d=0,u=l4(e,t,a,c,d);if(u===0)return t;let h=0,p=o?1:0,b=r?1:0,f=l4(e,n,h,p,b);if(f===0)return n;let y=s?1:0,_=0,S=r?1:0,A=l4(e,i,y,_,S);if(A===0)return i;let Z=u&f&A,V,E,G;if(Z&1)V=0,E=1,G=2;else if(Z&2)V=0,G=1,E=2;else if(Z&4)E=0,V=1,G=2;else if(Z&8)E=0,G=1,V=2;else if(Z&16)G=0,V=1,E=2;else if(Z&32)G=0,E=1,V=2;else{let N=d4(u),g=d4(f),C=d4(A);return N>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}q5.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;a1;)i>>=1,r.push(wue(i));let s=new Lt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:Ke.LUMINANCE,sampler:new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR_MIPMAP_LINEAR,magnificationFilter:ci.LINEAR})});return t.outlineTexture=s,s};function wue(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 Mue(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n{this._resourcesLoaded=!0}).catch(r=>{this._processError=r})),l(this._processError)){this._state=ir.FAILED;let r=this._processError;this._processError=void 0,eD(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===ir.FAILED)return!1;let i=!1;try{i=this._process(t)}catch(r){this._state=ir.FAILED,eD(this,r)}let o=!1;try{o=this._processTextures(t)}catch(r){this._textureState=ir.FAILED,eD(this,r)}return this._incrementallyLoadTextures?i:i&&o}isUnloaded(){return this._state===ir.UNLOADED}unload(){l(this._gltfJsonLoader)&&!this._gltfJsonLoader.isDestroyed()&&Xi.unload(this._gltfJsonLoader),this._gltfJsonLoader=void 0,KKe(this),Que(this),JKe(this),jKe(this),QKe(this),qKe(this),this._components=void 0,this._typedArray=void 0,this._state=ir.UNLOADED}};async function PHe(e){e._state=ir.LOADING,e._textureState=ir.LOADING;try{let t=Xi.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=ir.LOADED,e._textureState=ir.LOADED,e)}catch(t){if(e.isDestroyed())return;e._state=ir.FAILED,e._textureState=ir.FAILED,eD(e,t)}}async function XHe(e,t){dn.supportsWebP.initialized||await dn.supportsWebP.initialize(),e._supportedImageFormats=new h2({webp:dn.supportsWebP(),basis:t.context.supportsBasis});let n=HKe(e,t);return e._state=ir.PROCESSING,e._textureState=ir.PROCESSING,l(e._gltfJsonLoader)&&e._releaseGltfJson&&(Xi.unload(e._gltfJsonLoader),e._gltfJsonLoader=void 0),n}function eD(e,t){throw e.unload(),e.getError("Failed to load glTF",t)}function NHe(e,t){let n=!0,i=e._geometryLoaders;for(let s=0;s{let a=1/0,c=-1/0,d=1/0,u=-1/0,h=1/0,p=-1/0;for(let b=0;b{l(o)&&l(o.attributes)&&l(o.attributes[p])?eKe(S,A,s,a):l(r)?tKe(S,A,s,a):nKe(d,u,S,A,s,a)},S}function ome(e,t,n,i,o,r,s,a,c){let d=n.modelSemantic,u=d===ot.POSITION,h=d===ot.FEATURE_ID,p=u&&!s&&e._loadAttributesFor2D&&!c.scene3DOnly,b=u&&e._enablePick&&!c.context.webgl2,f=e._loadForClassification&&h,y=e._loadAttributesAsTypedArray,_=!y,S=y||p||b||f,V=ime(e,t,n,i,o,r,a?!1:_,a?!0:S,c),E=new E_.AttributeLoadPlan(V);return E.loadBuffer=_,E.loadTypedArray=S,E}function iKe(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=f4(e,Ps,i),d=c.modelSemantic,u=d===Ps.TRANSLATION||d===Ps.ROTATION||d===Ps.SCALE,h=d===Ps.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,b=e._enablePick&&!o.context.webgl2,f=!p,y=e._loadAttributesFor2D&&!o.scene3DOnly;return ime(e,t,c,void 0,void 0,void 0,f,p||h&&(!a||y||b),o)}function oKe(e,t,n,i,o,r){let s=e.gltfJson.accessors[t],a=s.bufferView,c=n.extensions??B.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 hHe;h.count=s.count;let p=e._loadAttributesAsTypedArray,b=(e._loadIndicesForWireframe||e._enablePick)&&!r.context.webgl2,f=e._loadForClassification&&i,_=!p,S=p||b||f||u,V=kHe(e,t,n,d,o?!1:_,o?!0:S,r),E=e._geometryLoaders.length;e._geometryLoaders.push(V);let G=V.load();e._loaderPromises.push(G),e._geometryCallbacks[E]=()=>{h.indexDatatype=V.indexDatatype,h.buffer=V.buffer,h.typedArray=V.typedArray};let v=new E_.IndicesLoadPlan(h);return v.loadBuffer=_,v.loadTypedArray=S,v}function Ol(e,t,n,i){let o=e.gltfJson,r=Vd.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!l(r))return;let s=Xi.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=Vd.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=ir.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 rKe(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,c=new LHe;return l(i)&&(c.diffuseTexture=Ol(e,i,n)),l(o)&&(c.specularGlossinessTexture=Ol(e,o,n)),c.diffuseFactor=Ed(se,r),c.specularFactor=Ed(m,s),c.glossinessFactor=a,c}function sKe(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,c=new GHe;return l(i)&&(c.baseColorTexture=Ol(e,i,n)),l(o)&&(c.metallicRoughnessTexture=Ol(e,o,n)),c.baseColorFactor=Ed(se,r),c.metallicFactor=s,c.roughnessFactor=a,c}function aKe(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new WHe;return l(o)&&(a.specularTexture=Ol(e,o,n)),l(s)&&(a.specularColorTexture=Ol(e,s,n)),a.specularFactor=i,a.specularColorFactor=Ed(m,r),a}function cKe(e,t,n){let{anisotropyStrength:i=u4.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=u4.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new u4;return l(r)&&(s.anisotropyTexture=Ol(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function lKe(e,t,n){let{clearcoatFactor:i=m4.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=m4.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,c=new m4;return l(o)&&(c.clearcoatTexture=Ol(e,o,n)),l(s)&&(c.clearcoatRoughnessTexture=Ol(e,s,n)),l(a)&&(c.clearcoatNormalTexture=Ol(e,a,n)),c.clearcoatFactor=i,c.clearcoatRoughnessFactor=r,c}function dKe(e){if(!l(e))return;let t=new vHe;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 uKe(e,t,n){let i=new FHe,o=t.extensions??B.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=rKe(e,r,n):(l(d)&&(i.metallicRoughness=sKe(e,d,n)),l(s)&&!i.unlit&&(i.specular=aKe(e,s,n)),l(a)&&!i.unlit&&(i.anisotropy=cKe(e,a,n)),l(c)&&!i.unlit&&(i.clearcoat=lKe(e,c,n))),l(t.emissiveTexture)&&(i.emissiveTexture=Ol(e,t.emissiveTexture,n)),l(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=Ol(e,t.normalTexture,n)),l(t.occlusionTexture)&&(i.occlusionTexture=Ol(e,t.occlusionTexture,n)),i.emissiveFactor=Ed(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=dKe(o.BENTLEY_materials_line_style),i}function rme(e,t){let n=new que;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 sme(e,t,n,i){let o=new que,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=nme(r.attribute),o.positionalLabel=i,o}function ame(e,t){let n=new eme;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 cme(e,t,n,i){let o=new eme,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 mKe(e,t,n,i){let o=new $ue;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=Ol(e,r,n,zt.NEAREST);let a=(l(r.channels)?r.channels:[0]).map(function(c){return"rgba".charAt(c)}).join("");return o.textureReader.channels=a,o}function hKe(e,t,n,i,o,r){let s=new $ue,a=t.featureIds,c=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=Ol(e,c,i,zt.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function fKe(e,t,n,i,o){let r=new fHe,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=f4(e,ot,u),b=ome(e,h,p,s,a,c,d,n,o);r.attributes.push(b.attribute),i.attributePlans.push(b)}return r}function pKe(e){let i=e?.KHR_gaussian_splatting?.extensions?.KHR_gaussian_splatting_compression_spz_2;if(l(i))return i}function lme(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??B.EMPTY_OBJECT,r=Ed(se,o.baseColorFactor);return l(r)?r:new se(1,1,1,1)}function bKe(e){switch(e){case K.UNSIGNED_BYTE:return 255;case K.UNSIGNED_SHORT:return 65535;case K.UNSIGNED_INT:return 4294967295;default:throw new ue("EXT_mesh_primitive_edge_visibility line strings indices must use unsigned scalar component types.")}}function gKe(e,t,n){if(!l(t)||t.length===0)return;let i=new Array(t.length);for(let o=0;on[s]);let r=t.inverseBindMatrices;if(l(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=Iy(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(F.IDENTITY);return i}function FKe(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!l(n))return[];let i=n.map(function(r,s){let a=vKe(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r=s.clientWidth)d=!0;else{if(Z.x>s.clientWidth*.5){a.width=Z.x,c.frustum.right=p.x-S,il=C2(r,n,c,il),Wc.clipToGLWindowCoordinates(a,il,b4),a.x+=Z.x,c.position.x=-c.position.x;let V=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-V,il=C2(r,n,c,il),Wc.clipToGLWindowCoordinates(a,il,g4)}else{a.x+=Z.x,a.width-=Z.x,c.frustum.left=-p.x-S,il=C2(r,n,c,il),Wc.clipToGLWindowCoordinates(a,il,b4),a.x=a.x-a.width,c.position.x=-c.position.x;let V=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-V,il=C2(r,n,c,il),Wc.clipToGLWindowCoordinates(a,il,g4)}m.clone(b,c.position),c.frustum=f.clone(),i=M.clone(b4,i),(i.x<0||i.x>s.clientWidth)&&(i.x=g4.x)}}if(o.mode!==re.SCENE2D||d){if(il=C2(r,n,c,il),il.z<0&&!(c.frustum instanceof fn)&&!(c.frustum instanceof ls))return;i=Wc.clipToGLWindowCoordinates(a,il,i)}return i.y=s.clientHeight-i.y,i};Wc.worldToDrawingBufferCoordinates=function(e,t,n){if(n=Wc.worldToWindowCoordinates(e,t,n),!!l(n))return Wc.transformWindowToDrawingBuffer(e,n,n)};var gb=new m,cJe=new be;Wc.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===re.SCENE3D)return m.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,cJe);if(!l(r))return;if(o.project(r,gb),i===re.COLUMBUS_VIEW)return m.fromElements(gb.z,gb.x,gb.y,n);if(i===re.SCENE2D)return m.fromElements(0,gb.x,gb.y,n);let s=e.morphTime;return m.fromElements(W.lerp(gb.z,t.x,s),W.lerp(gb.x,t.y,s),W.lerp(gb.y,t.z,s),n)};var fme=new m,pme=new m,bme=new F;Wc.clipToGLWindowCoordinates=function(e,t,n){return m.divideByScalar(t,t.w,fme),F.computeViewportTransformation(e,0,1,bme),F.multiplyByPoint(bme,fme,pme),M.fromCartesian3(pme,n)};Wc.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 lJe=new se,gme=new se;Wc.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 b=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,b)-1;n=c*(1-a/(f+a))/(c-a)}let d=e.view.passState.viewport,u=se.clone(se.UNIT_W,lJe);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,gme);let b=1/h.w;m.multiplyByScalar(h,b,h)}else{let b=p.offCenterFrustum;l(b)&&(p=b),h=gme,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 co=Wc;var fFn=x(T(),1);var R2n=x(T(),1);var bC={};bC._deprecationWarning=Ea;var yb=Uint32Array.BYTES_PER_ELEMENT;bC.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=yb;let r=o.getUint32(t,!0);if(r!==1)throw new ue(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=yb;let s=o.getUint32(t,!0);t+=yb;let a=o.getUint32(t,!0);t+=yb;let c=o.getUint32(t,!0);t+=yb;let d=o.getUint32(t,!0);t+=yb;let u=o.getUint32(t,!0);t+=yb;let h;d>=570425344?(t-=yb*2,h=a,d=c,u=0,a=0,c=0,bC._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-=yb,h=d,d=a,u=c,a=0,c=0,bC._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 b=new Uint8Array(e,t,c);t+=c;let f,y;d>0&&(f=Zr(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let _=n+s-t;if(_===0)throw new ue("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,_):(bC._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+_))),{batchLength:h,featureTableJson:p,featureTableBinary:b,batchTableJson:f,batchTableBinary:y,gltf:S}};var V2=bC;var W2n=x(T(),1);function R2(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function yme(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return l(a)||(a=K.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function dJe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return l(r)||(r=K.createTypedArray(n,i),o[t]=r),r}R2.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(t=t??K.UNSIGNED_INT,n=n??1,yme(this,e,t,n,1,i.byteOffset)):i};R2.prototype.hasProperty=function(e){return l(this.json[e])};R2.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(l(i.componentType)&&(t=K.fromName(i.componentType)),yme(this,e,t,n,this.featuresLength,i.byteOffset)):dJe(this,e,t,i)};R2.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;a0&&(f=Zr(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let _=n+s-t;if(_===0)throw new ue("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,_):(nD._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+_))),{gltfFormat:h,featureTableJson:p,featureTableBinary:b,batchTableJson:f,batchTableBinary:y,gltf:S}};var W2=nD;var Tb={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},iD=Tn.Attribute,WJe=Tn.FeatureIdAttribute,Zme=Tn.Instances,S4=class extends qi{constructor(t){super(),t=t??B.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??ao.Y,u=t.forwardAxis??ao.X,h=t.loadAttributesAsTypedArray??!1,p=t.loadIndicesForWireframe??!1,b=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=b,this._enablePick=f,this._state=Tb.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=W2.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 ue("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=c;let d=a.getGlobalProperty("RTC_CENTER",K.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=Sd(t.gltf);p=p.replace(/[\s\0]+$/,"");let b=this._baseResource.getDerivedResource({url:p});u.gltfResource=b,u.baseResource=b}else u.gltfResource=this._i3dmResource,u.typedArray=t.gltf;let h=new mu(u);return this._gltfLoader=h,this._state=Tb.LOADING,this._promise=h.load().then(()=>{if(!this.isDestroyed())return this._state=Tb.PROCESSING,this}).catch(p=>{if(!this.isDestroyed())throw vJe(this,p)}),this._promise}process(t){if(this._state===Tb.READY)return!0;let n=this._gltfLoader,i=!1;if(this._state===Tb.PROCESSING&&(i=n.process(t)),!i)return!1;let o=n.components;return o.transform=F.multiplyTransformation(this._transform,o.transform,o.transform),PJe(this,o,t),FJe(this,o),this._components=o,this._arrayBuffer=void 0,this._state=Tb.READY,!0}isUnloaded(){return this._state===Tb.UNLOADED}unload(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),MJe(this),this._components=void 0,this._arrayBuffer=void 0,this._state=Tb.UNLOADED}};function vJe(e,t){return e.unload(),e._state=Tb.FAILED,e.getError("Failed to load i3dm",t)}function FJe(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(l(n.json))o=xb({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new Dl({name:Hh.BATCH_TABLE_CLASS_NAME,count:i});o=new Wa({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var oD=new m,A4=new Array(4),IJe=new F;function PJe(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",K.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=NJe(o,r),h;c&&(h=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let b=new Float32Array(r),f=m.unpackArray(u),y=new m,_=new m,S=new m,A=new m,Z=new q,V=new Pe,E=new Array(4),G=new m,v=new Array(3),I=new F;if(!l(s)||m.equals(m.unpack(s),m.ZERO)){let k=de.fromPoints(f);for(i=0;i0&&(k.instances=O?XJe(X):X,O=!0)}}function XJe(e){let t=new Zme;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;o=n[t]){if(t+1=0&&e>=n[t-1])return t-1;let o;if(e>n[t])for(o=t;o=n[o]&&e=0&&!(e>=n[o]&&en&&(r=Math.floor((e-n)/o)+1,e-=r*o),e};gC.prototype.clampTime=function(e){let t=this.times;return W.clamp(e,t[0],t[t.length-1])};var Co=gC;function yC(e){this._value=e,this._valueType=Co.getPointType(e)}Object.defineProperties(yC.prototype,{value:{get:function(){return this._value}}});yC.prototype.findTimeInterval=function(e){};yC.prototype.wrapTime=function(e){return 0};yC.prototype.clampTime=function(e){return 0};yC.prototype.evaluate=function(e,t){let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var F2=yC;var KIn=x(T(),1);var PIn=x(T(),1);function xC(e){e=e??B.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=Co.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(xC.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});xC.prototype.findTimeInterval=Co.prototype.findTimeInterval;xC.prototype.wrapTime=Co.prototype.wrapTime;xC.prototype.clampTime=Co.prototype.clampTime;xC.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 Xy=xC;var YIn=x(T(),1);var Cme={};Cme.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=0;--a)s[a]=m.subtract(r[a],m.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var TC=Cme;var Vme=[],Rme=[],Eme=[],Gme=[];function UJe(e,t,n){let i=Vme,o=Eme,r=Rme,s=Gme;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;a0&&e.afterRender.push(a._raiseStartEvent)),a.loop===Rd.REPEAT)b=b-Math.floor(b);else if(a.loop===Rd.MIRRORED_REPEAT){let S=Math.floor(b),A=b-S;b=S%2===1?1-A:A}a.reverse&&(b=1-b);let _=b*d*a.multiplier;_=W.clamp(_,a.localStartTime,a.localStopTime),a.animate(_),a.update.numberOfListeners>0&&(a._updateEventTime=_,e.afterRender.push(a._raiseUpdateEvent)),i=!0,y||(a._state=qh.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&rD.push(a))}}n=rD.length;for(let s=0;sW.EPSILON3}};var B2=vme;var RXn=x(T(),1);var xXn=x(T(),1),z2=`#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 Fme={name:"ImageBasedLightingPipelineStage"},tje=new M;Fme.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,ge.FRAGMENT),r.addUniform("vec2","model_iblFactor",ge.FRAGMENT),kh.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",ge.FRAGMENT),l(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,ge.BOTH),l(a)&&l(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,ge.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,ge.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",ge.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,ge.FRAGMENT),l(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||l(s)?(r.addDefine("SPECULAR_IBL",void 0,ge.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,ge.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",ge.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",ge.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,ge.FRAGMENT)),r.addFragmentLines(z2);let c={model_iblFactor:function(){return M.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,tje)},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=Gt(c,e.uniformMap)};var H2=Fme;var kXn=x(T(),1);var PXn=x(T(),1);var nje=W.EPSILON16;function E4(e){e=e??B.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(E4.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=W.clamp(e,this.minimumValue,this.maximumValue),W.equalsEpsilon(this._currentValue,e,nje)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var ije=new m,R4=new q;E4.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=ije,o;switch(t){case nl.XROTATE:o=q.fromRotationX(W.toRadians(n),R4),e=F.multiplyByMatrix3(e,o,e);break;case nl.YROTATE:o=q.fromRotationY(W.toRadians(n),R4),e=F.multiplyByMatrix3(e,o,e);break;case nl.ZROTATE:o=q.fromRotationZ(W.toRadians(n),R4),e=F.multiplyByMatrix3(e,o,e);break;case nl.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case nl.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case nl.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=F.multiplyByTranslation(e,i,e);break;case nl.XSCALE:i.x=n,i.y=1,i.z=1,e=F.multiplyByScale(e,i,e);break;case nl.YSCALE:i.x=1,i.y=n,i.z=1,e=F.multiplyByScale(e,i,e);break;case nl.ZSCALE:i.x=1,i.y=1,i.z=n,e=F.multiplyByScale(e,i,e);break;case nl.UNIFORMSCALE:e=F.multiplyByUniformScale(e,n,e);break;default:break}return e};var K2=E4;function sD(e){e=e??B.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,oje(this)}Object.defineProperties(sD.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 oje(e){let n=e.articulation.stages,i=n.length,o=e._runtimeStages,r=e._runtimeStagesByName;for(let s=0;s 0.0 && clipDistance < clippingPlanesEdgeWidth) { color = clippingPlanesEdgeColor; } } `;var Ime={name:"ModelClippingPlanesPipelineStage"},aje=new M;Ime.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,ge.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,ge.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,ge.FRAGMENT),us.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,ge.FRAGMENT);let s=us.getTextureResolution(i,o,aje);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,ge.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,ge.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",ge.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",ge.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",ge.FRAGMENT),r.addFragmentLines(Q2);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=Gt(a,e.uniformMap)};var q2=Ime;var bNn=x(T(),1);var cNn=x(T(),1),$2=`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 dNn=x(T(),1),eF=`void modelClippingPolygonsStage() { vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); } `;var Pme={name:"ModelClippingPolygonsPipelineStage"};Pme.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,ge.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,ge.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,ge.BOTH),o.addUniform("sampler2D","model_clippingDistance",ge.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",ge.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines($2),o.addFragmentLines(eF);let r={model_clippingDistance:function(){return i.clippingTexture??n.context.defaultTexture},model_clippingExtents:function(){return i.extentsTexture??n.context.defaultTexture}};e.uniformMap=Gt(r,e.uniformMap)};var tF=Pme;var xNn=x(T(),1);function Xme(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(Xme.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 nF=Xme;var hYn=x(T(),1);var KNn=x(T(),1);var _Nn=x(T(),1),iF=`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 ANn=x(T(),1),oF=`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 CNn=x(T(),1),rF=`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 aD=new F,cje=new F,lje=new F,Yme={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:Dme,_transformsToTypedArray:L4};Yme.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(iF);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,d=n.mode!==re.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,h=[];Zje(e,n,i,h,d,u),Rje(e,n,i,h);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,ge.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",ge.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",ge.VERTEX),p.u_instance_modifiedModelView=function(){let b=F.multiplyTransformation(s.modelMatrix,a.components.transform,aD);return d?F.multiplyTransformation(n.context.uniformState.view3D,b,aD):(n.mode!==re.SCENE3D&&(b=pt.basisTo2D(n.mapProjection,b,aD)),F.multiplyTransformation(n.context.uniformState.view,b,aD))},p.u_instance_nodeTransform=function(){return F.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,cje)},r.addVertexLines(rF)):r.addVertexLines(oF),d){r.addDefine("USE_2D_INSTANCING",void 0,ge.VERTEX),r.addUniform("mat4","u_modelView2D",ge.VERTEX);let b=n.context,f=F.fromTranslation(c.instancingReferencePoint2D,new F);p.u_modelView2D=function(){return F.multiplyTransformation(b.uniformState.view,f,lje)}}e.uniformMap=Gt(p,e.uniformMap),e.instanceCount=o,oi(e.attributes,h)};var sF=new F,dje=new m;function uje(e,t,n,i,o){let r=F.multiplyTransformation(t,e,sF);return r=F.multiplyTransformation(r,n,sF),o=pt.basisTo2D(i.mapProjection,r,o),o}function mje(e,t,n,i,o){let r=F.fromTranslation(e,sF),s=F.multiplyTransformation(t,r,sF);s=F.multiplyTransformation(s,n,sF);let a=F.getTranslation(s,dje);return o=co.computeActualEllipsoidPosition(i,a,o),o}function wme(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 Mme=new F,kme=new F,hje=new F,fje=new m;function pje(e,t,n,i){let o=Mme,r=kme;wme(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:Mt.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var aF=Yme;var $Nn=x(T(),1);var v4={};v4.name="ModelMatrixUpdateStage";v4.update=function(e,t,n){let i=n.mode!==re.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;Ome(e,t,o,e.transformToRoot),e._transformDirty=!1}};function Eje(e,t,n){e.modelMatrix=F.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=St.getCullFace(e.modelMatrix,e.primitiveType)}function Ome(e,t,n,i){let o;i=F.multiplyTransformation(i,e.transform,new F),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return c.textureDimensions}),e.uniformMap=Gt(o,e.uniformMap)};var mF=Jme;var GYn=x(T(),1);var jme={name:"ClassificationPipelineStage"};jme.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,ge.BOTH);let o=e.runtimePrimitive;l(o.batchLengths)||Lje(t,o)};function Lje(e,t){let n=St.getAttributeBySemantic(e,ot.POSITION);if(!l(n))throw new ue("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=St.getAttributeBySemantic(e,ot.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],b=0;for(let y=1;yMje(i,t,n)):[]}function Mje(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=St,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),d=new Array(c.length);for(let u=0;uUje(n,t)):[]}function Uje(e,t){let{sanitizeGlslIdentifier:n}=St,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;al(s.class)&&r.has(String(s.id))).flatMap(s=>Bje(s,r,i,o))}function Bje(e,t,n,i){let{sanitizeGlslIdentifier:o}=St,r=e.class,s=n?.classes[r.id],a=t.get(String(e.id))??{},c=a.shaderDestination??ge.BOTH,d=e.properties,u=r.properties,h=[],p=0;for(let[b,f]of Object.entries(u)){if(!f.isGpuCompatible(Dje))continue;let y=d[b],_=ge.intersection(s4e(b,i),c);if(_===ge.NONE){p++;continue}h.push({metadataVariable:o(b),property:y,classProperty:f,type:f.type,glslType:f.getGlslType(),propertyStatistics:s?.properties[b],shaderDestination:_,propertyTable:e,featureIdVariableName:a.variableName,propertyInfoIndex:p}),p++}return h}function zje(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;ah),i.addStructField(Ei.STRUCT_ID_METADATA_FS,s,r);let y=`attributes.texCoord_${c}`,_=y;if(l(p)&&!q.equals(p,q.IDENTITY)){let G=`${b}Transform`;i.addUniform("mat3",G,ge.FRAGMENT),o[G]=function(){return p},_=`vec2(${G} * vec3(${y}, 1.0))`}let S=`texture(${b}, ${_}).${d}`,A=a.classProperty,Z;n?Z=A.unpackTextureInShader(S,d,r,f):Z=A.unpackTextureInShaderWebGL1(S);let V=X4({valueExpression:Z,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:ge.FRAGMENT,property:a}),E=`metadata.${r} = ${V};`;f.push(E),i.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_FS,f)}function I4(e,t){let n=t.classProperty,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=the(Ei.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Ei.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_FS,s),ge.includesVertexShader(r)&&(e.addStructField(Ei.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function P4(e,t){let{propertyStatistics:n}=t;if(!l(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===xt.ENUM)return;let s=Ei.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=the(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(Ei.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_FS,c),ge.includesVertexShader(t.shaderDestination)&&(e.addStructField(Ei.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function t4e(e,t,n){n4e(e,t,n),I4(e.shaderBuilder,t),P4(e.shaderBuilder,t)}function n4e(e,t,n){let{shaderBuilder:i,uniformMap:o}=e,{metadataVariable:r,glslType:s,property:a,featureIdVariableName:c,propertyTable:d,propertyInfoIndex:u}=t;if(!n){Zt("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,ge.BOTH),o[h]=()=>d.texture);let b=t.shaderDestination;ge.includesVertexShader(b)&&i.addStructField(Ei.STRUCT_ID_METADATA_VS,s,r),ge.includesFragmentShader(b)&&i.addStructField(Ei.STRUCT_ID_METADATA_FS,s,r);let y=`ivec2(${`featureIds.${c}`}, ${u})`,_=`texelFetch(${h}, ${y}, 0)`,S=t.classProperty,A=S.unpackTextureInShader(_,"rgba",r,p),Z=X4({valueExpression:A,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:b,property:a??S}),V=`metadata.${r} = ${Z};`;p.push(V),ge.includesVertexShader(b)&&i.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_VS,p),ge.includesFragmentShader(b)&&i.addFunctionLines(Ei.FUNCTION_ID_INITIALIZE_METADATA_FS,p)}function the(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 X4(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 i4e(e,t){let n=new Set,i=new Set;return o4e(e,n,i),r4e(e,t,n,i),{usedInVertex:n,usedInFragment:i}}function o4e(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 r4e(e,t,n,i){let o=e.style;if(!(l(o)&&t.primitiveType===ve.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 s4e(e,t){let n=t.usedInFragment.has(e)?ge.FRAGMENT:ge.NONE,i=t.usedInVertex.has(e)?ge.VERTEX:ge.NONE;return ge.union(n,i)}var Lm=Ei;var Ewn=x(T(),1),a4e={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},ky=Object.freeze(a4e);var va={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:Zt};va.process=function(e,t,n){let{shaderBuilder:i,model:o,alphaOptions:r}=e,{customShader:s}=o,{lightingModel:a,translucencyMode:c}=s;l(a)&&(e.lightingOptions.lightingModel=a),c===ky.TRANSLUCENT?r.pass=Le.TRANSLUCENT:c===ky.OPAQUE&&(r.pass=void 0);let d=p4e(s,t,e);if(!d.customShaderEnabled)return;if(x4e(i,s,d),d.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,ge.BOTH),l(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,ge.VERTEX),l(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,ge.FRAGMENT);let p=Sb.getDefineName(s.mode);i.addDefine(p,void 0,ge.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let b=u[p];i.addUniform(b.type,p)}let h=s.varyings;for(let p in h)if(h.hasOwnProperty(p)){let b=h[p];i.addVarying(b,p)}e.uniformMap=Gt(e.uniformMap,s.uniformMap)};function c4e(e){let t={};for(let n=0;na.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 rhe(e,t){for(let n in e)if(e.hasOwnProperty(n)&&!t.has(n))return va._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 AF=va;var Jwn=x(T(),1);var ZF={name:"DequantizationPipelineStage",FUNCTION_ID_DEQUANTIZATION_STAGE_VS:"dequantizationStage",FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:"void dequantizationStage(inout ProcessedAttributes attributes)"};ZF.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=l(o.classificationType);i.addDefine("USE_DEQUANTIZATION",void 0,ge.VERTEX),i.addFunction(ZF.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,ZF.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,ge.VERTEX);let s=t.attributes;for(let a=0;a 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 ahe={name:"EdgeDetectionPipelineStage"};ahe.process=function(e){e.shaderBuilder.addFragmentLines([VF])};var RF=ahe;var NMn=x(T(),1);var nMn=x(T(),1),EF=`// 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 oMn=x(T(),1),GF=`#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 gMn=x(T(),1);var N4=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=tn.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=Mt.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=K.getSizeInBytes(s),p=o*h;if(!l(u)||u===p){let Z=K.createTypedArray(s,r);return c.getBufferData(Z,d),Z}let b=new Uint8Array(c.sizeInBytes);c.getBufferData(b);let f=K.createTypedArray(s,r),y=u??p,_=new DataView(b.buffer,b.byteOffset,b.byteLength),S=new Array(o),A=e.createComponentsReader(s);for(let Z=0;Z2*((S+128)/255)-1,b=new Uint16Array(i.silhouetteNormals.length),f=new m,y=new M;for(let S=0;S0?m.normalize(f,f):(f.x=0,f.y=0,f.z=1),tn.octEncodeInRange(f,255,y);let V=y.x&255,E=y.y&255;b[S]=E<<8|V}let _=Math.floor(b.length/2);d=new Uint32Array(_);for(let S=0;S<_;S++){let A=b[S*2],Z=b[S*2+1];d[S]=A|Z<<16}}for(let p=0;p=0&&A>8&255,u),tn.octDecode(g>>16&255,g>>24&255,h),Z=u.x,V=u.y,E=u.z,G=h.x,v=h.y,I=h.z,X=!0}if(!X){if(!l(_)||_.length===0)continue;let C=_[0]*3;if(Z=r[C],V=r[C+1],E=r[C+2],_.length>1){let P=_[1]*3;G=r[P],v=r[P+1],I=r[P+2]}else G=-Z,v=-V,I=-E}let N=p*6;a[N]=Z,a[N+1]=V,a[N+2]=E,a[N+3]=G,a[N+4]=v,a[N+5]=I}return a}function R4e(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,b=0,f=t.materialColor;if(a){let y=0,_=d.length,S=n;for(let A=0;A+2<_;A+=3){let Z=d[A],V=d[A+1],E=d[A+2];for(let G=0;G<3;G++){let v,I;G===0?(v=Z,I=V):G===1?(v=V,I=E):(v=E,I=Z);let X=Math.floor(y/4),N=y%4*2;if(y++,X>=S.length)break;let C=S[X]>>N&3;if(C===0)continue;let R=Math.min(v,I),L=Math.max(v,I),P=`${R},${L}`;if(p.has(P))continue;p.add(P),u.push(v,I);let Y=-1;C===1&&(Y=b,b++),h.push({edgeType:C,triangleIndex:Math.floor(A/3),edgeIndex:G,mateVertexIndex:Y,currentTriangleVertices:[Z,V,E],color:f})}}}if(c)for(let y=0;y0&&(v<0||v>=s||I<0||I>=s))continue;let X=Math.min(v,I),N=Math.max(v,I),g=`${X},${N}`;p.has(g)||(p.add(g),u.push(v,I),h.push({edgeType:2,triangleIndex:-1,edgeIndex:-1,mateVertexIndex:-1,currentTriangleVertices:void 0,color:l(Z)?Z:void 0}))}}return{edgeIndices:u,edgeData:h,silhouetteEdgeCount:b}}function E4e(e){if(!l(e))return;let t=St.getAttributeBySemantic(e,ot.COLOR);if(!l(t))return;let n=Mt.getNumberOfComponents(t.type);if(n!==3&&n!==4)return;let i=t.typedArray;if(l(i)||(i=ol.readAttributeAsTypedArray(t)),!l(i))return;let o=t.count;if(!l(o)||o===0||i.length=w){z(it);return}let jt=rt*4,Cn=it*4;k[Cn]=D[jt],k[Cn+1]=D[jt+1],k[Cn+2]=D[jt+2],k[Cn+3]=D[jt+3]}for(let it=0;it=0&&On65534,nt=ke?new Uint32Array(we):new Uint16Array(we);for(let it=0;it0){let it=He.featureIds[0];if(l(it.setIndex)){let rt=He.attributes.find(jt=>jt.semantic===ot.FEATURE_ID&&jt.setIndex===it.setIndex);if(l(rt)){let jt=l(rt.typedArray)?rt.typedArray:ol.readAttributeAsTypedArray(rt),Cn=new Float32Array(Z);for(let Wt=0;Wt0}}var LF=che;var d9n=x(T(),1);var wMn=x(T(),1),WF=`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 kMn=x(T(),1),vF=`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 jMn=x(T(),1);var DMn=x(T(),1),RC=`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 FF={name:"SelectedFeatureIdPipelineStage",STRUCT_ID_SELECTED_FEATURE:"SelectedFeature",STRUCT_NAME_SELECTED_FEATURE:"SelectedFeature"};FF.process=function(e,t,n){let i=e.shaderBuilder;e.hasPropertyTable=!0;let o=e.model,r=e.runtimeNode.node,s=L4e(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),W4e(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===ge.BOTH&&i.addVertexLines(RC),i.addFragmentLines(RC)};function lhe(e){return e instanceof Tn.FeatureIdTexture?"HAS_SELECTED_FEATURE_ID_TEXTURE":"HAS_SELECTED_FEATURE_ID_ATTRIBUTE"}function dhe(e){return e instanceof Tn.FeatureIdTexture?ge.FRAGMENT:ge.BOTH}function L4e(e,t,n){let i,o;return l(t.instances)&&(o=St.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(o))?(i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:dhe(o),featureIdDefine:lhe(o)}):(o=St.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:dhe(o),featureIdDefine:lhe(o)})}function W4e(e){e.addStructField(FF.STRUCT_ID_SELECTED_FEATURE,"int","id"),e.addStructField(FF.STRUCT_ID_SELECTED_FEATURE,"vec2","st"),e.addStructField(FF.STRUCT_ID_SELECTED_FEATURE,"vec4","color")}var Uy=FF;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",ge.VERTEX),i.addStruct(Fa.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"ProcessedAttributes",ge.FRAGMENT),i.addStruct(Uy.STRUCT_ID_SELECTED_FEATURE,Uy.STRUCT_NAME_SELECTED_FEATURE,ge.BOTH),i.addFunction(Fa.FUNCTION_ID_INITIALIZE_ATTRIBUTES,Fa.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,ge.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,ge.VERTEX),i.addFunction(Fa.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,Fa.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,ge.FRAGMENT),o.type===Pr.TILE_PNTS&&i.addDefine("HAS_SRGB_COLOR",void 0,ge.FRAGMENT);let r=n.mode!==re.SCENE3D&&!n.scene3DOnly&&o._projectTo2D,s=l(e.runtimeNode.node.instances),a=r&&!s,c=t.attributes.length;for(let d=0;d1?(b=e.attributeIndex,e.attributeIndex+=h):p&&!a?b=0:b=e.attributeIndex++;let f=!p&&t.primitiveType===ve.POINTS&&n.context.webgl2?"flat":void 0;v4e(e,u,b,h,r,s,f)}k4e(i,t.attributes),t.primitiveType===ve.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(vF),i.addFragmentLines(WF)};function v4e(e,t,n,i,o,r,s){let a=e.shaderBuilder,c=St.getAttributeInfo(t),d=o&&!r;i>1?P4e(e,t,n,i):I4e(e,t,n,d),N4e(a,c,d),X4e(a,c,s),l(t.semantic)&&F4e(a,t),Y4e(a,c,o),w4e(a,c,d),M4e(a,c)}function F4e(e,t){let{semantic:n,setIndex:i}=t;switch(n){case ot.NORMAL:e.addDefine("HAS_NORMALS");break;case ot.TANGENT:e.addDefine("HAS_TANGENTS");break;case ot.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case ot.TEXCOORD:case ot.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function I4e(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:c}=l(o)?o:t;r===ot.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===ot.POSITION,u=d?0:n,h=Mt.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 b=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:b,count:t.count,componentsPerAttribute:h,componentDatatype:K.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function P4e(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=l(o)?o:t,d=Mt.getNumberOfComponents(s)/i,u=K.getSizeInBytes(a),h=d*u,p=t.byteStride;for(let b=0;b=o&&(f=o-1);let y=b/d|0;return y>=r&&(y=r-1),l(n)?(n.x=f,n.y=y,n):new M(f,y)};var Xs=Dy;var A9n=x(T(),1);var Y4,uhe="AAPTaUFUfciXgT4YKNZew9lUqpQ..yIoArbcKGeWnsxrcf8Sk9LLcQN1dML2469i9e8v1mZyMILiwWzGR3sxU2vr8L749gvuB4ERujd1vMmNwfZTbCPPaJ1vtts4rXZ3DZEhW9L3GKH6KRRfqXy77cdjc7mg3iIVkWEg8yhReRsNIyw-nlzduhCipHDMwkkx-GmOxnsNYE-0CE2uEB9Mm8b6UppjohI1tn864yN1vLTJMP1vCRFD2b0uyE0vqzx-cE12TppkVQQ4Ry9apOVC3AT1_oO2ZY8gh",EC={};EC.defaultAccessToken=uhe;EC.defaultWorldImageryServer=new We({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});EC.defaultWorldHillshadeServer=new We({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});EC.defaultWorldOceanServer=new We({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});EC.getDefaultTokenCredit=function(e){if(e===uhe){if(!l(Y4)){let t=' This application is using a default ArcGIS access token. Please assign Cesium.ArcGisMapService.defaultAccessToken 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 https://developers.arcgis.com/.';Y4=new yt(t,!0)}return Y4}};var hu=EC;var G9n=x(T(),1);function w4(e){e=e??B.EMPTY_OBJECT,this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=We.createIfNeeded(e.missingImageUrl),n=this;function i(r){l(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=Ah(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,c=r.width,d=e.pixelsToCheck;for(let u=0,h=d.length;a&&u0&&(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)}w4.prototype.isReady=function(){return this._isReady};w4.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=Ah(e),o=e.width;for(let r=0,s=t.length;r1&&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])};M4.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r)&&(typeof r=="object"?i+=``:i+=``)}return i+="
${o}${t(r)}
${o}${r}
",i}this.description=t(e)};var ef=M4;var Y9n=x(T(),1);function GC(){fe.throwInstantiationError()}Object.defineProperties(GC.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}});GC.prototype.getTileCredits=function(e,t,n){fe.throwInstantiationError()};GC.prototype.requestImage=function(e,t,n,i){fe.throwInstantiationError()};GC.prototype.pickFeatures=function(e,t,n,i,o){fe.throwInstantiationError()};var U4e=/\.ktx2$/i;GC.loadImage=function(e,t){let n=We.createIfNeeded(t);return U4e.test(n.url)?bd(n):l(e)&&l(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var fu=GC;var M9n=x(T(),1),D4e={SATELLITE:1,OCEANS:2,HILLSHADE:3},tf=Object.freeze(D4e);function mhe(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new Qi({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new yt(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}mhe.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 PF({missingImageUrl:hhe(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 O4e(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 Xs({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new Qi({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new ue(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 fi,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 ce(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=ce.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 ue(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}l(e.copyrightText)&&e.copyrightText.length>0&&(l(t.credit)?t.tileCredits=[new yt(e.copyrightText)]:t.credit=new yt(e.copyrightText))}function B4e(e,t){let n=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(n+=`: ${t.message}`),new ue(n)}async function z4e(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();O4e(i,t)}catch(i){B4e(e,i)}}function Ap(e){e=e??B.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 Qi({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 yt(t)),this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new _e}Ap.fromBasemapType=async function(e,t){t=t??B.EMPTY_OBJECT;let n,i,o;switch(e){case tf.SATELLITE:{n=t.token??hu.defaultAccessToken,i=We.createIfNeeded(hu.defaultWorldImageryServer),i.appendForwardSlash();let r=hu.getDefaultTokenCredit(n);l(r)&&(o=yt.clone(r))}break;case tf.OCEANS:{n=t.token??hu.defaultAccessToken,i=We.createIfNeeded(hu.defaultWorldOceanServer),i.appendForwardSlash();let r=hu.getDefaultTokenCredit(n);l(r)&&(o=yt.clone(r))}break;case tf.HILLSHADE:{n=t.token??hu.defaultAccessToken,i=We.createIfNeeded(hu.defaultWorldHillshadeServer),i.appendForwardSlash();let r=hu.getDefaultTokenCredit(n);l(r)&&(o=yt.clone(r))}break;default:}return Ap.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function hhe(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(Ap.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}}});Ap.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=We.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&n.setQueryParameters({token:t.token});let i=new Ap(t);i._resource=n;let o=new mhe(t);return(t.usePreCachedTilesIfAvailable??!0)&&await z4e(n,o),o.build(i),i};Ap.prototype.getTileCredits=function(e,t,n){return this._tileCredits};Ap.prototype.requestImage=function(e,t,n,i){return fu.loadImage(this,hhe(this,e,t,n,i))};Ap.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=W.toDegrees(i),a=W.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new be(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 b=[],f=p.results;if(!l(f))return b;for(let y=0;y0?n.raiseEvent(c):l(t)&&console.log(`An error occurred in "${t.constructor.name}": ${Zp(i)}`),c};cD.reportSuccess=function(e){l(e)&&(e.timesRetried=-1)};var jo=cD;var gkn=x(T(),1),K4e={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"},LC=Object.freeze(K4e);var Tkn=x(T(),1);function XF(e){}XF.prototype.isReady=function(){return!0};XF.prototype.shouldDiscardImage=function(e){return XF.EMPTY_IMAGE===e};var lD;Object.defineProperties(XF,{EMPTY_IMAGE:{get:function(){return l(lD)||(lD=new Image,lD.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),lD}}});var WC=XF;function fhe(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}fhe.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;no.coverageAreas?.some(r=>l(r.bbox)))),t.attributionList=i}function j4e(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i+=`: ${t.message}`),jo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new ue(i)}async function Q4e(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 J4e(r,t)}catch(r){j4e(e,r,n)}}function da(e){e=e??B.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??LC.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new WC),this._proxy=e.proxy,this._credit=new yt(``),this._tilingScheme=new Xs({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 _e}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??B.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??LC.AERIAL,o=We.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 fhe(t);return await Q4e(s,c),c.build(a),a};var q4e=new ce;da.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,q4e);return tQe(this._attributionList,n,i)};da.prototype.requestImage=function(e,t,n,i){let o=fu.loadImage(this,$4e(this,e,t,n,i));if(l(o))return o.catch(function(r){return l(r.blob)&&r.blob.size===0?WC.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<=0;--o){let r=1<=h.zoomMin&&t<=h.zoomMax){let p=ce.intersection(n,h.bbox,eQe);l(p)&&(c=!0)}}c&&i.push(s.credit)}return i}da._metadataCache={};var NF=da;var hUn=x(T(),1);var qkn=x(T(),1);var phe=/{[^}]+}/g,bhe={x:rQe,y:aQe,z:dQe,s:uQe,reverseX:sQe,reverseY:cQe,reverseZ:lQe,westDegrees:mQe,southDegrees:hQe,eastDegrees:fQe,northDegrees:pQe,westProjected:bQe,southProjected:gQe,eastProjected:yQe,northProjected:xQe,width:TQe,height:_Qe},nQe=Gt(bhe,{i:SQe,j:AQe,reverseI:ZQe,reverseJ:CQe,longitudeDegrees:RQe,latitudeDegrees:EQe,longitudeProjected:GQe,latitudeProjected:LQe,format:vQe});function YF(e){e=e??B.EMPTY_OBJECT,this._errorEvent=new _e;let t=We.createIfNeeded(e.url),n=We.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 Xs({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=ce.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new yt(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=Gt(bhe,r),a=Gt(nQe,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(YF.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}}});YF.prototype.getTileCredits=function(e,t,n){};YF.prototype.requestImage=function(e,t,n,i){return fu.loadImage(this,iQe(this,e,t,n,i))};YF.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=oQe(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 dD=!1,pu=new ce,uD=!1,wF=new ce;function iQe(e,t,n,i,o){dD=!1,uD=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},d=s.match(phe);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 k4=!1,FC=new M,U4=!1;function oQe(e,t,n,i,o,r,s){dD=!1,uD=!1,k4=!1,U4=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},h=c.match(phe);return l(h)&&h.forEach(function(p){let b=p.substring(1,p.length-1);l(d[b])&&(u[b]=d[b](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function IC(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 rQe(e,t,n,i){return IC(e,"{x}",t)}function sQe(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return IC(e,"{reverseX}",o)}function aQe(e,t,n,i){return IC(e,"{y}",n)}function cQe(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return IC(e,"{reverseY}",o)}function lQe(e,t,n,i){let o=e.maximumLevel,r=l(o)&&it.rectangle.east&&(e.east=t.rectangle.east),e.southt.rectangle.north&&(e.north=t.rectangle.north),e}function yhe(e,t,n){let i=e.positionToTileXY(ce.southwest(t),n),o=e.positionToTileXY(ce.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}Wm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,d,u,h,p=[],b=e.childNodes[0].childNodes;for(let I=0;I`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new _e}Object.defineProperties(Ld.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}}});Ld.fromUrl=async function(e,t,n){n=n??{};let i=n.path??"/default_map",o=We.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 xhe(n);s.channel=t,await PQe(r,s);let a=new Ld(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};Ld.prototype.getTileCredits=function(e,t,n){};Ld.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 fu.loadImage(this,o)};Ld.prototype.pickFeatures=function(e,t,n,i,o){};Ld._logoUrl=void 0;Object.defineProperties(Ld,{logoUrl:{get:function(){return l(Ld._logoUrl)||(Ld._logoUrl=qt("Assets/Images/google_earth_credit.png")),Ld._logoUrl},set:function(e){Ld._logoUrl=e}}});var MF=Ld;var FUn=x(T(),1);var XQe=/\/$/,The=new yt('© Mapbox © OpenStreetMap Improve this map');function PC(e){e=e??B.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=We.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();XQe.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 yt(s))):s=The,this._resource=i,this._imageryProvider=new ps({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(PC.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}}});PC.prototype.getTileCredits=function(e,t,n){};PC.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};PC.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};PC._defaultCredit=The;var kF=PC;var BUn=x(T(),1);function W_(e){e=e??B.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??ce.MAX_VALUE,n=new Qi({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 _e;let i=e.credit;typeof i=="string"&&(i=new yt(i)),this._credit=i;let o=We.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(W_.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 NQe(e,t,n,i){let o=`Failed to load image ${e.url}`;l(t)&&l(t.message)&&(o+=`: ${t.message}`);let r=jo.reportError(i,n,l(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return O4(e,n,r);throw l(n)&&(n._hasError=!0),new ue(o)}async function O4(e,t,n){try{return await fu.loadImage(null,e)}catch(i){return NQe(e,i,t,n)}}W_.fromUrl=async function(e,t){let n=We.createIfNeeded(e),i=await O4(n);t=t??B.EMPTY_OBJECT;let o=new W_({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};W_.prototype.getTileCredits=function(e,t,n){};W_.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!l(this._image)){let o=await O4(this._resource,this);return this._image=o,jo.reportSuccess(this._errorEvent),o}return this._image};W_.prototype.pickFeatures=function(e,t,n,i,o){};var UF=W_;var p5n=x(T(),1);var QUn=x(T(),1);function YQe(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=wQe:e==="xml"?n=DQe:(e==="html"||e==="text")&&(n=_he)),this.callback=n}function wQe(e){let t=[],n=e.features;for(let i=0;i0)for(let r=0;r\s*<\/body>/im,jQe=//im,QQe=/([\s\S]*)<\/title>/im;function _he(e){if(JQe.test(e)||jQe.test(e))return;let t,n=QQe.exec(e);n&&n.length>1&&(t=n[1]);let i=new ef;return i.name=t,i.description=e,i.data=e,[i]}var nf=YQe;var o5n=x(T(),1);function DF(e){e=e??B.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(DF.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)}}});DF.prototype.getFromCache=function(e,t,n,i){let o=She(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};DF.prototype.checkApproachingInterval=function(e,t,n,i){let o=She(e,t,n),r=this._tilesRequestedForInterval,s=Ahe(this),a={key:o,priorityFunction:i.priorityFunction};(!l(s)||!Zhe(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};DF.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=Ahe(this);if(l(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=Zhe(this,c,r),a||s.push(c)}}};function She(e,t,n){return`${e}-${t}-${n}`}function qQe(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function Ahe(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 Zhe(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=qQe(s),c=new xr({throttle:!1,throttleByServer:!0,type:Hs.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 v_=DF;var $Qe=[3034,3035,3042,3043,3044],e8e=[4471,4559];function of(e){if(e=e??B.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=We.createIfNeeded(e.url),n=We.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(of.DefaultParameters,!0),n.setQueryParameters(of.GetFeatureInfoDefaultParameters,!0),l(e.parameters)&&t.setQueryParameters(Che(e.parameters)),l(e.getFeatureInfoParameters)&&n.setQueryParameters(Che(e.getFeatureInfoParameters));let i=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new v_({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,d,u){return Vhe(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 fi?"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&&!e8e.includes(a)||$Qe.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof fi?"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 ps({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Qi({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??of.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function Vhe(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 t8e(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(of.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}}});of.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};of.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=Vhe(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};of.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return t8e(this,e,t,n,i,o,s)};of.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});of.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});of.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new nf("json","application/json")),Object.freeze(new nf("xml","text/xml")),Object.freeze(new nf("text","text/html"))]);function Che(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var OF=of;var V5n=x(T(),1);function bu(e){e=e??B.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=We.createIfNeeded(e.url),n=We.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(bu.DefaultParameters,!0),this._useKvp=!0):(t.setTemplateValues(bu.DefaultParameters,!0),this._useKvp=!1),this._useKvp){n.setQueryParameters(bu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setQueryParameters(Rhe(e.getFeatureInfoParameters));let u={infoformat:"{format}",i:"{i}",j:"{j}"};n.setQueryParameters(u,!0)}else n.setTemplateValues(bu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setTemplateValues(Rhe(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 v_({clock:e.clock,times:e.times,requestImageFunction:function(u,h,p,b,f){return Ehe(d,u,h,p,b,f)},reloadFunction:function(){l(d._reload)&&d._reload()}})),this._errorEvent=new _e,this._tileProvider=new ps({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Xs({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??bu.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures??(this._useKvp||l(e.getFeatureInfoUrl)),customTags:i8e(this)})}function Ehe(e,t,n,i,o,r){let s=e._tileProvider;return Ghe(e,s._resource,r),s.requestImage(t,n,i,o)}function n8e(e,t,n,i,o,r,s){let a=e._tileProvider;return Ghe(e,a._pickFeaturesResource,s),a.pickFeatures(t,n,i,o,r)}Object.defineProperties(bu.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}}});bu.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};bu.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=Ehe(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};bu.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return n8e(this,e,t,n,i,o,s)};bu.DefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});bu.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetFeatureInfo"});bu.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new nf("json","application/json")),Object.freeze(new nf("xml","text/xml")),Object.freeze(new nf("text","text/html"))]);function Ghe(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=Gt(r,i)),l(o)&&(r=Gt(r,o)),t.setQueryParameters(r)}}function i8e(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 Rhe(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var BF=bu;var M5n=x(T(),1);var L5n=x(T(),1);var XC={};XC.defaultApiKey=void 0;XC.mapTilesApiEndpoint=new We({url:"https://tile.googleapis.com/"});XC.defaultStreetViewStaticApiKey=void 0;XC.streetViewStaticApiEndpoint=new We({url:"https://maps.googleapis.com/maps/api/streetview"});XC.getDefaultCredit=function(){return new yt('<img alt="Google" src="proxy.php?url=https%3A%2F%2Fassets.ion.cesium.com%2Fgoogle-credit.png" style="vertical-align:-6px">',!0)};var ua=XC;var Lhe=/\/$/;function Zb(e){e=e??B.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 ds?e.url:We.createIfNeeded(e.url??ua.mapTilesApiEndpoint),n=t.getUrlComponent();Lhe.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 yt(o)));let r=new ps({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(Zb.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}}});Zb.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=Whe(e),i=ds._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},H4(s,r,i)};Zb.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 r8e(e);return new Zb({...n,...e,credit:e.credit??ua.getDefaultCredit()})};Zb.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};Zb.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])};Zb.prototype.pickFeatures=function(e,t,n,i,o){};Zb.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(o8e(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 yt(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function o8e(e,t,n){return(await e.getDerivedResource({url:t,queryParameters:{zoom:n,north:90,south:-90,east:180,west:-180},data:JSON.stringify(B.EMPTY_OBJECT)}).fetchJson()).copyright}function Whe(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 r8e(e){let{language:t,region:n,key:i,url:o}=e,r=Whe(e),s=o.url??o;Lhe.test(s)||(s+="/");let a=await We.post({url:`${s}v1/createSession`,queryParameters:{key:i},data:JSON.stringify({...r,language:t,region:n})});return JSON.parse(a)}var zF=Zb;var K5n=x(T(),1);var s8e=/\/$/;function NC(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 ds?e.url:We.createIfNeeded(e.url??"https://atlas.microsoft.com/"),i=n.getUrlComponent();s8e.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 yt(r)));let s=new ps({...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(NC.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}}});NC.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};NC.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])};NC.prototype.pickFeatures=function(e,t,n,i,o){};NC.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(a8e(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 yt(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function a8e(e,t,n,i,o){return(await e.getDerivedResource({url:t,queryParameters:{zoom:o,bounds:"-180,-90,180,90"},data:JSON.stringify(B.EMPTY_OBJECT)}).fetchJson()).copyrights}var HF=NC;var c8e=async(e,t,n)=>Oy.fromUrl(new ds(t,n)),l8e=async(e,{options:t})=>Ab.fromUrl(e,t),d8e=async(e,{options:t})=>NF.fromUrl(e,t),u8e=async(e,{options:t})=>{let n=t.channel;return delete t.channel,MF.fromUrl(e,n,t)},m8e=async(e,{options:t})=>new kF({url:e,...t}),h8e=async(e,{options:t})=>UF.fromUrl(e,t),f8e=async(e,{options:t})=>Oy.fromUrl(e,t),p8e=async(e,{options:t})=>new ps({url:e,...t}),b8e=async(e,{options:t})=>new OF({url:e,...t}),g8e=async(e,{options:t})=>new BF({url:e,...t}),H4=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new ds(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 zF({...t.options,url:i})},y8e=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new ds(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 HF({...t.options,url:i})},x8e={ARCGIS_MAPSERVER:l8e,BING:d8e,GOOGLE_EARTH:u8e,MAPBOX:m8e,SINGLE_TILE:h8e,TMS:f8e,URL_TEMPLATE:p8e,WMS:b8e,WMTS:g8e,GOOGLE_2D_MAPS:H4,AZURE_MAPS:y8e,defaultFactoryCallback:c8e},YC=Object.freeze(x8e);function Cp(e){e=e??B.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 _e}Object.defineProperties(Cp.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(){}}});Cp.fromAssetId=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ds._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=Cp._endpointCache[i];l(o)||(o=n.fetchJson(),Cp._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new ue(`Cesium ion asset ${e} is not an imagery asset.`);let s=r.externalType,a=YC.defaultFactoryCallback;r=Be(r,!0),r.options=r.options??{};let c=r.options?.url;if(delete t.url,l(s)&&(a=YC[s],!l(a)))throw new ue(`Unrecognized Cesium ion imagery type: ${s}`);let d=await a(c,r,n),u=new Cp(t);return d.errorEvent.addEventListener(function(h){h.provider=u,u._errorEvent.raiseEvent(h)}),u._tileCredits=ds.getCreditsFromEndpoint(r,n),u._imageryProvider=d,u};Cp.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return l(i)?this._tileCredits.concat(i):this._tileCredits};Cp.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};Cp.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};Cp._endpointCache={};var Bl=Cp;var xDn=x(T(),1),T8e={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},Cb=Object.freeze(T8e);function _8e(e){e=e??B.EMPTY_OBJECT;let t=e.style??Cb.AERIAL;return Bl.fromAssetId(t)}var Vb=_8e;var LDn=x(T(),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 vhe=[];Ns.getRegularGridIndices=function(e,t){let n=vhe[e];l(n)||(vhe[e]=n=[]);let i=n[t];return l(i)||(e*t<W.SIXTY_FOUR_KILOBYTES?i=n[t]=new Uint16Array((e-1)*(t-1)*6):i=n[t]=new Uint32Array((e-1)*(t-1)*6),Xhe(e,t,i,0)),i};var Fhe=[];Ns.getRegularGridIndicesAndEdgeIndices=function(e,t){let n=Fhe[e];l(n)||(Fhe[e]=n=[]);let i=n[t];if(!l(i)){let o=Ns.getRegularGridIndices(e,t),r=Phe(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 Ihe=[];Ns.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){let n=Ihe[e];l(n)||(Ihe[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=Phe(e,t),h=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,b=u.eastIndicesNorthToSouth,f=u.northIndicesWestToEast,y=Ne.createTypedArray(c,d);Xhe(e,t,y,0),Ns.addSkirtIndices(h,p,b,f,o,y,r),i=n[t]={indices:y,westIndicesSouthToNorth:h,southIndicesEastToWest:p,eastIndicesNorthToSouth:b,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=bD(e,a,r,s),a+=e.length,s=bD(t,a,r,s),a+=t.length,s=bD(n,a,r,s),a+=n.length,bD(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],b=t[0],f=o,y=f+e.length-1,_=y+1,S=_+t.length-1,A=S+1,Z=A+n.length-1,V=Z+1,E=V+i.length-1;r[d+0]=u,r[d+1]=f,r[d+2]=S,r[d+3]=b,r[d+4]=_,r[d+5]=Z,r[d+6]=p,r[d+7]=A,r[d+8]=E,r[d+9]=h,r[d+10]=V,r[d+11]=y};function Phe(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 Xhe(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 bD(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 zo=Ns;var vDn=x(T(),1),KF=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(u_texture, v_textureCoordinates); } `;var IDn=x(T(),1),JF=`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 kDn=x(T(),1);var XDn=x(T(),1),S8e={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},Qn=Object.freeze(S8e);function wC(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}wC.createPlaceholder=function(e){let t=new wC(e,0,0,0);return t.addReference(),t.state=Qn.PLACEHOLDER,t};wC.prototype.addReference=function(){++this.referenceCount};wC.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};wC.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 MC=wC;var BDn=x(T(),1);function K4(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}K4.prototype.freeResources=function(){l(this.readyImagery)&&this.readyImagery.releaseReference(),l(this.loadingImagery)&&this.loadingImagery.releaseReference()};K4.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 kC=K4;function ki(e,t){this._imageryProvider=e,this._readyEvent=new _e,this._errorEvent=new _e,t=t??B.EMPTY_OBJECT,e=e??B.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??ki.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??ki.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??ki.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??ki.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??ki.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??ki.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??ki.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??ki.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??ce.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new kC(MC.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??ki.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD}Object.defineProperties(ki.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}}});ki.DEFAULT_BRIGHTNESS=1;ki.DEFAULT_CONTRAST=1;ki.DEFAULT_HUE=0;ki.DEFAULT_SATURATION=1;ki.DEFAULT_GAMMA=1;ki.DEFAULT_SPLIT=Fr.NONE;ki.DEFAULT_MINIFICATION_FILTER=Bt.LINEAR;ki.DEFAULT_MAGNIFICATION_FILTER=ci.LINEAR;ki.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;ki.fromProviderAsync=function(e,t){let n=new ki(void 0,t);return R8e(n,Promise.resolve(e)),n};ki.fromWorldImagery=function(e){return e=e??B.EMPTY_OBJECT,ki.fromProviderAsync(Vb({style:e.style}),e)};ki.prototype.isBaseLayer=function(){return this._isBaseLayer};ki.prototype.isDestroyed=function(){return!1};ki.prototype.destroy=function(){return he(this)};var whe=new ce,Nhe=new ce,J4=new ce,Mhe=new ce;ki.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return ce.intersection(e.rectangle,t)};ki.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 fi&&e.rectangle.north<fi.MaximumLatitude&&e.rectangle.south>-fi.MaximumLatitude,s=ce.intersection(o.rectangle,this._rectangle,whe),a=ce.intersection(e.rectangle,s,Nhe);if(!l(a)){if(!this.isBaseLayer())return!1;let R=s,L=e.rectangle;a=Nhe,L.south>=R.north?a.north=a.south=R.north:L.north<=R.south?a.north=a.south=R.south:(a.south=Math.max(L.south,R.south),a.north=Math.min(L.north,R.north)),L.west>=R.east?a.west=a.east=R.east:L.east<=R.west?a.west=a.east=R.west:(a.west=Math.max(L.west,R.west),a.east=Math.min(L.east,R.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),h=C8e(this,u,c);h=Math.max(0,h);let p=o.maximumLevel;if(h>p&&(h=p),l(o.minimumLevel)){let R=o.minimumLevel;h<R&&(h=R)}let b=o.tilingScheme,f=b.positionToTileXY(ce.northwest(a),h),y=b.positionToTileXY(ce.southeast(a),h),_=e.rectangle.width/512,S=e.rectangle.height/512,A=b.tileXYToRectangle(f.x,f.y,h);Math.abs(A.south-e.rectangle.north)<S&&f.y<y.y&&++f.y,Math.abs(A.east-e.rectangle.west)<_&&f.x<y.x&&++f.x;let Z=b.tileXYToRectangle(y.x,y.y,h);Math.abs(Z.north-e.rectangle.south)<S&&y.y>f.y&&--y.y,Math.abs(Z.west-e.rectangle.east)<_&&y.x>f.x&&--y.x;let V=ce.clone(e.rectangle,Mhe),E=b.tileXYToRectangle(f.x,f.y,h),G=ce.intersection(E,s,J4),v;r?(b.rectangleToNativeRectangle(V,V),b.rectangleToNativeRectangle(E,E),b.rectangleToNativeRectangle(G,G),b.rectangleToNativeRectangle(s,s),v=b.tileXYToNativeRectangle.bind(b),_=V.width/512,S=V.height/512):v=b.tileXYToRectangle.bind(b);let I,X=0,N=1,g;!this.isBaseLayer()&&Math.abs(G.west-V.west)>=_&&(X=Math.min(1,(G.west-V.west)/V.width)),!this.isBaseLayer()&&Math.abs(G.north-V.north)>=S&&(N=Math.max(0,(G.north-V.south)/V.height));let C=N;for(let R=f.x;R<=y.x;R++)if(I=X,E=v(R,f.y,h),G=ce.simpleIntersection(E,s,J4),!!l(G)){X=Math.min(1,(G.east-V.west)/V.width),R===y.x&&(this.isBaseLayer()||Math.abs(G.east-V.east)<_)&&(X=1),N=C;for(let L=f.y;L<=y.y;L++){if(g=N,E=v(R,L,h),G=ce.simpleIntersection(E,s,J4),!l(G))continue;N=Math.max(0,(G.south-V.south)/V.height),L===y.y&&(this.isBaseLayer()||Math.abs(G.south-V.south)<S)&&(N=0);let P=new se(I,N,X,g),Y=this.getImageryFromCache(R,L,h);i.imagery.splice(n,0,new kC(Y,P,r)),++n}}return!0};ki.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,whe),i=c.rectangleToNativeRectangle(i,Mhe)}let o=i.width,r=i.height,s=o/n.width,a=r/n.height;return new se(s*(i.west-n.west)/o,a*(i.south-n.south)/r,s,a)};ki.prototype._requestImagery=function(e){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,jo.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===bi.CANCELLED){e.state=Qn.UNLOADED,e.request=void 0;return}e.state=Qn.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=jo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new xr({throttle:!1,throttleByServer:!0,type:Hs.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)),a.then(function(c){i(c)}).catch(function(c){o(c)})}r()};ki.prototype._createTextureWebGL=function(e,t){let n=new zt({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})};ki.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 fi?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=Qn.TEXTURE_LOADED};function Yhe(e,t,n){return`${e}:${t}:${n}`}ki.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===Bt.LINEAR&&i===ci.LINEAR&&!Ke.isCompressedFormat(t.pixelFormat)&&W.isPowerOfTwo(t.width)&&W.isPowerOfTwo(t.height)){n=Bt.LINEAR_MIPMAP_LINEAR;let r=vt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=Yhe(n,i,s),c=e.cache.imageryLayerMipmapSamplers;l(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let d=c[a];l(d)||(d=c[a]=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(mm.NICEST),t.sampler=d}else{let r=Yhe(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;l(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];l(a)||(a=s[r]=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};ki.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 _l({persists:!0,owner:this,preExecute:function(c){Z8e(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};ki.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};ki.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){l(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};ki.prototype.getImageryFromCache=function(e,t,n,i){let o=khe(e,t,n),r=this._imageryCache[o];return l(r)||(r=new MC(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};ki.prototype.removeImageryFromCache=function(e){let t=khe(e.x,e.y,e.level);delete this._imageryCache[t]};function khe(e,t,n){return JSON.stringify([e,t,n])}var gD={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new M,texture:void 0},A8e=dn.supportsTypedArrays()?new Float32Array(128):void 0;function Z8e(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 _=new Float32Array(256),S=0;for(let G=0;G<64;++G){let v=G/63;_[S++]=0,_[S++]=v,_[S++]=1,_[S++]=v}let A={position:0,webMercatorT:1},Z=zo.getRegularGridIndices(2,64),V=qe.createIndexBuffer({context:t,typedArray:Z,usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT});o.vertexArray=new Bn({context:t,attributes:[{index:A.position,vertexBuffer:qe.createVertexBuffer({context:t,typedArray:_,usage:Fe.STATIC_DRAW}),componentsPerAttribute:2},{index:A.webMercatorT,vertexBuffer:qe.createVertexBuffer({context:t,sizeInBytes:512,usage:Fe.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:V});let E=new Oe({sources:[JF]});o.shaderProgram=$t.fromCache({context:t,vertexShaderSource:E,fragmentShaderSource:KF,attributeLocations:A}),o.sampler=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR,magnificationFilter:ci.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;gD.textureDimensions.x=r,gD.textureDimensions.y=s,gD.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});W.isPowerOfTwo(r)&&W.isPowerOfTwo(s)&&h.generateMipmap(mm.NICEST);let p=i.south,b=i.north,f=A8e,y=0;for(let _=0;_<64;++_){let S=_/63,A=W.lerp(p,b,S);a=Math.sin(A);let V=(.5*Math.log((1+a)/(1-a))-c)*u;f[y++]=V,f[y++]=V}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=h,e.uniformMap=gD,e.vertexArray=o.vertexArray}function C8e(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 V8e(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function R8e(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){V8e(e._errorEvent,i)}}var bs=ki;var FOn=x(T(),1),j4=class{constructor(){this.alpha=!1,this.brightness=!1,this.contrast=!1,this.hue=!1,this.saturation=!1,this.gamma=!1,this.colorToAlpha=!1}},jF=j4;var fBn=x(T(),1);var MOn=x(T(),1);var POn=x(T(),1),Q4=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}},UC=Q4;var E8e=new ce,Uhe=new ce,G8e=new ce,L8e=new ce,W8e=new ce,v8e=new ce,q4=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=ce.intersection(o.rectangle,n.rectangle,E8e),a=o.tilingScheme,c=e._computeImageryRange(t,s,a,r),d=L8e;a.rectangleToNativeRectangle(t,d);let u=W8e;a.rectangleToNativeRectangle(s,u);let h=(b,f,y)=>{let _=a.tileXYToRectangle(b,f,y),S=ce.intersection(_,s,G8e);if(!l(S))return;let A=v8e;return a.rectangleToNativeRectangle(S,A),A};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(ce.northwest(r),o),a=i.positionToTileXY(ce.southeast(r),o),c=new UC;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 ce),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=ce.intersection(t,n,Uhe);return l(i)?i:e._clampRectangle(t,n,Uhe)}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),b=new e(a,d,i,h,p);s.push(b)}}return s}static _localizeToCartesianRectangle(t,n,i){l(i)||(i=new UC);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}},DC=q4;var $On=x(T(),1);var $4=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 Qe;Qe.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=ol.readAttributeAsTypedArray(t),r=t.type,s=Mt.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 ce);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 be;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:ot.TEXCOORD,setIndex:0,componentDatatype:K.FLOAT,type:Mt.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}}},F_=$4;var tBn=x(T(),1);var eQ=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}},QF=eQ;var tQ=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=qe.createVertexBuffer({context:t,typedArray:r.typedArray,usage:Fe.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=F_.createCartographicPositions(o,s,h),b=F_.computeCartographicBoundingRectangle(p),f=new QF(p,r,b,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=F_.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 DC.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 DC._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=St.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}},I_=tQ;var bBn=x(T(),1),nQ=class{constructor(t,n,i,o,r){this.imageryLayer=t,this.texture=n,this.textureTranslationAndScale=i,this.textureCoordinateRectangle=o,this.imageryTexCoordAttributeSetIndex=r}},qF=nQ;var F8e=!1,I8e=new ce,P8e=new ce,iQ=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=I_._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&&(Zt("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=Mt.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,ge.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 jF;for(let i=0;i<t.length;i++){let o=t[i];n.alpha|=o.alpha!==1,n.brightness|=o.brightness!==bs.DEFAULT_BRIGHTNESS,n.contrast|=o.contrast!==bs.DEFAULT_CONTRAST,n.hue|=o.hue!==bs.DEFAULT_HUE,n.saturation|=o.saturation!==bs.DEFAULT_SATURATION,n.gamma|=o.gamma!==bs.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]",ge.FRAGMENT),t.addUniform("vec4","u_imageryTextureCoordinateRectangle[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),t.addUniform("vec4","u_imageryTextureTranslationAndScale[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.alpha&&t.addUniform("float","u_imageryTextureAlpha[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.brightness&&t.addUniform("float","u_imageryTextureBrightness[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.contrast&&t.addUniform("float","u_imageryTextureContrast[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.hue&&t.addUniform("float","u_imageryTextureHue[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.saturation&&t.addUniform("float","u_imageryTextureSaturation[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.gamma&&t.addUniform("float","u_imageryTextureOneOverGamma[IMAGERY_TEXTURE_UNITS]",ge.FRAGMENT),n.colorToAlpha&&t.addUniform("vec4","u_imageryTextureColorToAlpha[IMAGERY_TEXTURE_UNITS]",ge.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,ge.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));"]),F8e&&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)",ge.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 se,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],b=e._createImageryInput(s,p,d,a);l(b)&&o.push(b)}}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 se(c.minX,c.minY,c.maxX,c.maxY);return new qF(t,s,a,d,o)}static _computeTextureTranslationAndScale(t,n,i){let o=t.imageryProvider.tilingScheme,r=o.rectangleToNativeRectangle(n,I8e),s=o.rectangleToNativeRectangle(i,P8e);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 se(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}},$F=iQ;var wBn=x(T(),1);var WBn=x(T(),1),eI=`#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 FBn=x(T(),1),X8e={UNLIT:0,PBR:1},Vp=Object.freeze(X8e);var Dhe={name:"LightingPipelineStage"};Dhe.process=function(e,t){let{model:n,lightingOptions:i,shaderBuilder:o}=e;if(l(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,ge.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",ge.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}let{lightingModel:r}=i;r===Vp.PBR?o.addDefine("LIGHTING_PBR",void 0,ge.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,ge.FRAGMENT),o.addFragmentLines(eI)};var tI=Dhe;var n3n=x(T(),1);var kBn=x(T(),1),nI=`// 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; } vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform) { return vec2(textureTransform * vec3(texCoord, 1.0)); } #ifdef HAS_NORMAL_TEXTURE vec2 getNormalTexCoords() { vec2 texCoord = TEXCOORD_NORMAL; #ifdef HAS_NORMAL_TEXTURE_TRANSFORM texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0)); #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 = texture(u_normalTexture, normalTexCoords).rgb; 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 = texture(u_normalTexture, normalTexCoords).rgb; 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 = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform); #endif vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords)); #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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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{Material:N8e,MetallicRoughness:oQ,SpecularGlossiness:rQ,Specular:Ohe,Clearcoat:Bhe}=Tn,zhe={name:"MaterialPipelineStage",_processTexture:Wd,_processTextureTransform:Hhe};zhe.process=function(e,t,n){let i=t.material,{model:o,uniformMap:r,shaderBuilder:s}=e,a=l(o.classificationType),c=a,{defaultTexture:d,defaultNormalTexture:u,defaultEmissiveTexture:h}=n.context;M8e(i,r,s,d,u,h,c),l(i.specularGlossiness)?k8e(i.specularGlossiness,r,s,d,c):(l(i.specular)&&St.supportedExtensions.KHR_materials_specular&&U8e(i.specular,r,s,d,c),l(i.anisotropy)&&St.supportedExtensions.KHR_materials_anisotropy&&O8e(i.anisotropy,r,s,d,c),l(i.clearcoat)&&St.supportedExtensions.KHR_materials_clearcoat&&B8e(i.clearcoat,r,s,d,c),z8e(i.metallicRoughness,r,s,d,c));let p=St.getAttributeBySemantic(t,ot.NORMAL),b=l(o.pointCloudShading)&&!o.pointCloudShading.normalShading,f=e.lightingOptions;i.unlit||!p||a||b?f.lightingModel=Vp.UNLIT:f.lightingModel=Vp.PBR;let y=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=y;let _=e.alphaOptions;i.alphaMode===Tp.BLEND?_.pass=Le.TRANSLUCENT:i.alphaMode===Tp.MASK&&(_.alphaCutoff=i.alphaCutoff),l(i.pointDiameter)&&(s.addDefine("HAS_POINT_DIAMETER",void 0,ge.BOTH),s.addUniform("float","u_pointDiameter",ge.VERTEX),r.u_pointDiameter=function(){return i.pointDiameter*n.pixelRatio}),l(i.lineStyle)&&Y8e(i.lineStyle,t,n,r,s),s.addFragmentLines(nI),i.doubleSided&&s.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,ge.BOTH)};function Y8e(e,t,n,i,o){let{width:r,pattern:s}=e;l(r)&&(o.addUniform("float","u_lineWidth",ge.VERTEX),i.u_lineWidth=function(){return r*n.pixelRatio}),l(s)&&(o.addDefine("HAS_LINE_PATTERN",void 0,ge.BOTH),o.addUniform("float","u_linePattern",ge.FRAGMENT),o.addVarying("float","v_lineCoord"),i.u_linePattern=function(){return s});let a=St.getAttributeBySemantic(t,ot.CUMULATIVE_DISTANCE);if(l(s)&&l(a)&&(t.primitiveType===ve.LINES||t.primitiveType===ve.TRIANGLE_STRIP)){o.addDefine("HAS_LINE_CUMULATIVE_DISTANCE",void 0,ge.VERTEX),a.normalized&&o.addDefine("LINE_CUM_DIST_NORMALIZED",void 0,ge.VERTEX),o.addUniform("float","u_cumulativeDistanceMax",ge.VERTEX),o.addUniform("float","u_pixelsPerWorld",ge.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=St.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 Hhe(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,ge.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,ge.FRAGMENT),t[s]=function(){return n.transform}}function w8e(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_SCALE`;e.addDefine(r,void 0,ge.FRAGMENT);let s=`${i}Scale`;e.addUniform("float",s,ge.FRAGMENT),t[s]=function(){return n.scale}}function Wd(e,t,n,i,o,r){e.addUniform("sampler2D",i,ge.FRAGMENT),t[i]=function(){return n.texture??r};let s=`HAS_${o}_TEXTURE`;e.addDefine(s,void 0,ge.FRAGMENT);let c=`v_texCoord_${n.texCoord}`,d=`TEXCOORD_${o}`;e.addDefine(d,c,ge.FRAGMENT);let u=n.transform;l(u)&&!q.equals(u,q.IDENTITY)&&Hhe(e,t,n,i,o);let{scale:h}=n;l(h)&&h!==1&&w8e(e,t,n,i,o)}function M8e(e,t,n,i,o,r,s){let{emissiveFactor:a,emissiveTexture:c,normalTexture:d,occlusionTexture:u}=e;l(a)&&!m.equals(a,N8e.DEFAULT_EMISSIVE_FACTOR)&&(n.addUniform("vec3","u_emissiveFactor",ge.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,ge.FRAGMENT),l(c)&&!s&&Wd(n,t,c,"u_emissiveTexture","EMISSIVE",r)),l(d)&&!s&&Wd(n,t,d,"u_normalTexture","NORMAL",o),l(u)&&!s&&Wd(n,t,u,"u_occlusionTexture","OCCLUSION",i)}function k8e(e,t,n,i,o){let{diffuseTexture:r,diffuseFactor:s,specularGlossinessTexture:a,specularFactor:c,glossinessFactor:d}=e;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,ge.FRAGMENT),l(r)&&!o&&Wd(n,t,r,"u_diffuseTexture","DIFFUSE",i),l(s)&&!se.equals(s,rQ.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",ge.FRAGMENT),t.u_diffuseFactor=function(){return e.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,ge.FRAGMENT)),l(a)&&!o&&Wd(n,t,a,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i),l(c)&&!m.equals(c,rQ.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_legacySpecularFactor",ge.FRAGMENT),t.u_legacySpecularFactor=function(){return e.specularFactor},n.addDefine("HAS_LEGACY_SPECULAR_FACTOR",void 0,ge.FRAGMENT)),l(d)&&d!==rQ.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",ge.FRAGMENT),t.u_glossinessFactor=function(){return e.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,ge.FRAGMENT))}function U8e(e,t,n,i,o){let{specularTexture:r,specularFactor:s,specularColorTexture:a,specularColorFactor:c}=e;n.addDefine("USE_SPECULAR",void 0,ge.FRAGMENT),l(r)&&!o&&Wd(n,t,r,"u_specularTexture","SPECULAR",i),l(s)&&s!==Ohe.DEFAULT_SPECULAR_FACTOR&&(n.addUniform("float","u_specularFactor",ge.FRAGMENT),t.u_specularFactor=function(){return e.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,ge.FRAGMENT)),l(a)&&!o&&Wd(n,t,a,"u_specularColorTexture","SPECULAR_COLOR",i),l(c)&&!m.equals(c,Ohe.DEFAULT_SPECULAR_COLOR_FACTOR)&&(n.addUniform("vec3","u_specularColorFactor",ge.FRAGMENT),t.u_specularColorFactor=function(){return e.specularColorFactor},n.addDefine("HAS_SPECULAR_COLOR_FACTOR",void 0,ge.FRAGMENT))}var D8e=new m;function O8e(e,t,n,i,o){let{anisotropyStrength:r,anisotropyRotation:s,anisotropyTexture:a}=e;n.addDefine("USE_ANISOTROPY",void 0,ge.FRAGMENT),l(a)&&!o&&Wd(n,t,a,"u_anisotropyTexture","ANISOTROPY",i);let c=Math.cos(s),d=Math.sin(s);n.addUniform("vec3","u_anisotropy",ge.FRAGMENT),t.u_anisotropy=function(){return m.fromElements(c,d,r,D8e)}}function B8e(e,t,n,i,o){let{clearcoatFactor:r,clearcoatTexture:s,clearcoatRoughnessFactor:a,clearcoatRoughnessTexture:c,clearcoatNormalTexture:d}=e;n.addDefine("USE_CLEARCOAT",void 0,ge.FRAGMENT),l(r)&&r!==Bhe.DEFAULT_CLEARCOAT_FACTOR&&(n.addUniform("float","u_clearcoatFactor",ge.FRAGMENT),t.u_clearcoatFactor=function(){return e.clearcoatFactor},n.addDefine("HAS_CLEARCOAT_FACTOR",void 0,ge.FRAGMENT)),l(s)&&!o&&Wd(n,t,s,"u_clearcoatTexture","CLEARCOAT",i),l(a)&&r!==Bhe.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_clearcoatRoughnessFactor",ge.FRAGMENT),t.u_clearcoatRoughnessFactor=function(){return e.clearcoatRoughnessFactor},n.addDefine("HAS_CLEARCOAT_ROUGHNESS_FACTOR",void 0,ge.FRAGMENT)),l(c)&&!o&&Wd(n,t,c,"u_clearcoatRoughnessTexture","CLEARCOAT_ROUGHNESS",i),l(d)&&!o&&Wd(n,t,d,"u_clearcoatNormalTexture","CLEARCOAT_NORMAL",i)}function z8e(e,t,n,i,o){n.addDefine("USE_METALLIC_ROUGHNESS",void 0,ge.FRAGMENT);let r=e.baseColorTexture;l(r)&&!o&&Wd(n,t,r,"u_baseColorTexture","BASE_COLOR",i);let s=e.baseColorFactor;l(s)&&!se.equals(s,oQ.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",ge.FRAGMENT),t.u_baseColorFactor=function(){return e.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,ge.FRAGMENT));let a=e.metallicRoughnessTexture;l(a)&&!o&&Wd(n,t,a,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let c=e.metallicFactor;l(c)&&c!==oQ.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",ge.FRAGMENT),t.u_metallicFactor=function(){return e.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,ge.FRAGMENT));let d=e.roughnessFactor;l(d)&&d!==oQ.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",ge.FRAGMENT),t.u_roughnessFactor=function(){return e.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,ge.FRAGMENT))}var iI=zhe;var r3n=x(T(),1);var zl={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"};zl.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine(zl.METADATA_PICKING_VALUE_TYPE,"float",ge.FRAGMENT),i.addDefine(zl.METADATA_PICKING_VALUE_STRING,"0.0",ge.FRAGMENT),i.addDefine(zl.METADATA_PICKING_VALUE_COMPONENT_X,"0.0",ge.FRAGMENT),i.addDefine(zl.METADATA_PICKING_VALUE_COMPONENT_Y,"0.0",ge.FRAGMENT),i.addDefine(zl.METADATA_PICKING_VALUE_COMPONENT_Z,"0.0",ge.FRAGMENT),i.addDefine(zl.METADATA_PICKING_VALUE_COMPONENT_W,"0.0",ge.FRAGMENT),i.addFunction("metadataPickingStage","void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)",ge.FRAGMENT),i.addFunctionLines("metadataPickingStage",[`${zl.METADATA_PICKING_VALUE_TYPE} value = ${zl.METADATA_PICKING_VALUE_TYPE}(${zl.METADATA_PICKING_VALUE_STRING});`,`metadataValues.x = ${zl.METADATA_PICKING_VALUE_COMPONENT_X};`,`metadataValues.y = ${zl.METADATA_PICKING_VALUE_COMPONENT_Y};`,`metadataValues.z = ${zl.METADATA_PICKING_VALUE_COMPONENT_Z};`,`metadataValues.w = ${zl.METADATA_PICKING_VALUE_COMPONENT_W};`],ge.FRAGMENT)};var gu=zl;var p3n=x(T(),1);var a3n=x(T(),1),oI=`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,ge.VERTEX),q8e(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!==ot.POSITION&&p!==ot.NORMAL&&p!==ot.TANGENT||(K8e(e,h,e.attributeIndex,a),e.attributeIndex++)}}$8e(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,ge.VERTEX),n.addVertexLines(oI);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=Gt(s,e.uniformMap)};var H8e={attributeString:void 0,functionId:void 0};function K8e(e,t,n,i){let o=e.shaderBuilder;J8e(e,t,n);let r=j8e(t,H8e);Q8e(o,r,i)}function J8e(e,t,n){let i={index:n,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:Mt.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function j8e(e,t){switch(e.semantic){case ot.POSITION:t.attributeString="Position",t.functionId=vc.FUNCTION_ID_GET_MORPHED_POSITION;break;case ot.NORMAL:t.attributeString="Normal",t.functionId=vc.FUNCTION_ID_GET_MORPHED_NORMAL;break;case ot.TANGENT:t.attributeString="Tangent",t.functionId=vc.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function Q8e(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 q8e(e){e.addFunction(vc.FUNCTION_ID_GET_MORPHED_POSITION,vc.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,ge.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,ge.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,ge.VERTEX),e.addFunctionLines(vc.FUNCTION_ID_GET_MORPHED_TANGENT,["vec3 morphedTangent = tangent;"])}function $8e(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 rI=vc;var C3n=x(T(),1);var Khe={name:"PickingPipelineStage"};Khe.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)e7e(e,t,a,i);else if(l(a))t7e(e,i);else{let c=Jhe(e),d=i.createPickId(c);s._pipelineResources.push(d),s._pickIds.push(d),r.addUniform("vec4","czm_pickColor",ge.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return d.color},e.pickId="czm_pickColor"}};function Jhe(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(Pr.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 e7e(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;l(i.featureTableId)?o=i.featureTableId:l(n)?(r=St.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=St.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",ge.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 t7e(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=Jhe(e,h),b=t.createPickId(p);s.push(b),i[h]=b;let f=b.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=qe.createVertexBuffer({context:t,typedArray:o,usage:Fe.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.statistics.addBuffer(a,!1),s.push(a);let d={index:e.attributeIndex++,vertexBuffer:a,componentsPerAttribute:4,componentDatatype:K.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1};e.attributes.push(d);let u=e.shaderBuilder;u.addDefine("USE_PICKING",void 0,ge.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor"}var sI=Khe;var H3n=x(T(),1);var R3n=x(T(),1),n7e={ADD:0,REPLACE:1},dr=Object.freeze(n7e);var G3n=x(T(),1),aI=`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 i7e=new se,Qhe={name:"PointCloudStylingPipelineStage"};Qhe.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 y=a7e(a),_=c7e(r,y);l7e(i,_);let A=d7e(_).indexOf("normalMC")>=0,Z=St.getAttributeBySemantic(t,ot.NORMAL);if(A&&!Z)throw new ue("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,ge.VERTEX),_.styleTranslucent&&(e.alphaOptions.pass=Le.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,ge.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,ge.VERTEX);let h,p,b;Pr.is3DTiles(o.type)&&(p=!0,h=o.content,b=h.tile.refine===dr.ADD),i.addUniform("vec4","model_pointCloudParameters",ge.VERTEX),i.addVertexLines(aI);let f=e.uniformMap;f.model_pointCloudParameters=function(){let y=i7e,_=1;p&&(_=b?5:h.tileset.memoryAdjustedScreenSpaceError),y.x=u.maximumAttenuation??_,y.x*=n.pixelRatio;let S=o7e(e,t,u,h);y.y=S*u.geometricErrorScale;let A=n.context,Z=n.camera.frustum,V;return n.mode===re.SCENE2D||Z instanceof fn?V=Number.POSITIVE_INFINITY:V=A.drawingBufferHeight/n.camera.frustum.sseDenominator,y.z=V,p&&(y.w=h.tileset.timeSinceLoad),y}};var jhe=new m;function o7e(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=St.getAttributeBySemantic(t,ot.POSITION),r=o.count,s=e.runtimeNode.transform,a=m.subtract(o.max,o.min,jhe);a=F.multiplyByPointAsVector(s,a,jhe);let c=a.x*a.y*a.z;return W.cbrt(c/r)}var r7e={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},s7e={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function a7e(e){let t=Be(s7e);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 sQ="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function c7e(e,t){let n=r7e,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${sQ})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${sQ})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${sQ})`,t,i),n.styleTranslucent=l(n.colorStyleFunction)&&i.translucent,n}function l7e(e,t){let n=t.colorStyleFunction;l(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,ge.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;l(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,ge.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,ge.VERTEX),e.addVertexLines(o))}function aQ(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 d7e(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return l(t)&&aQ(t,o),l(n)&&aQ(n,o),l(i)&&aQ(i,o),o}var cI=Qhe;var ozn=x(T(),1);var J3n=x(T(),1),lI=`void primitiveOutlineStage() { v_outlineCoordinates = a_outlineCoordinates; } `;var Q3n=x(T(),1),dI=`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 qhe={name:"PrimitiveOutlinePipelineStage"};qhe.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,ge.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:Mt.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",ge.FRAGMENT);let a=R_.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",ge.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",ge.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(lI),i.addFragmentLines(dI)};var uI=qhe;var dzn=x(T(),1);var $he={name:"PrimitiveStatisticsPipelineStage",_countGeometry:efe,_count2DPositions:tfe,_countMorphTargetAttributes:nfe,_countMaterialTextures:ife,_countFeatureIdTextures:ofe,_countBinaryMetadata:rfe};$he.process=function(e,t,n){let i=e.model,o=i.statistics;efe(o,t),tfe(o,e.runtimePrimitive),nfe(o,t),ife(o,t.material),ofe(o,t.featureIds),rfe(o,i)};function efe(e,t){let n=l(t.indices)?t.indices.count:St.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===ve.POINTS?e.pointsLength+=n:ve.isTriangles(i)&&(e.trianglesLength+=u7e(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 u7e(e,t){switch(e){case ve.TRIANGLES:return t/3;case ve.TRIANGLE_STRIP:case ve.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function tfe(e,t){let n=t.positionBuffer2D;l(n)&&e.addBuffer(n,!0)}function nfe(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 ife(e,t){let n=m7e(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 m7e(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 ofe(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 rfe(e,t){let n=t.structuralMetadata;l(n)&&(h7e(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 h7e(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 mI=$he;var Czn=x(T(),1);var f7e=new F,p7e=new F,sfe={name:"SceneMode2DPipelineStage"};sfe.process=function(e,t,n){let i=St.getAttributeBySemantic(t,ot.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=F.multiplyTransformation(s,a,f7e),d=y7e(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=d;let h=e.runtimeNode.node.instances;if(l(h))return;if(l(i.typedArray)){let y=_7e(i,c,d,n);u.positionBuffer2D=y,r._modelResources.push(y),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,ge.VERTEX),o.addUniform("mat4","u_modelView2D",ge.VERTEX);let p=F.fromTranslation(d.center,new F),b=n.context,f={u_modelView2D:function(){return F.multiplyTransformation(b.uniformState.view,p,p7e)}};e.uniformMap=Gt(f,e.uniformMap)};var b7e=new m,g7e=new m;function y7e(e,t,n){let i=F.multiplyByPoint(t,e.positionMin,b7e),o=co.computeActualEllipsoidPosition(n,i,i),r=F.multiplyByPoint(t,e.positionMax,g7e),s=co.computeActualEllipsoidPosition(n,r,r);return de.fromCornerPoints(o,s,new de)}var afe=new m;function x7e(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,afe),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 T7e(e,t,n,i){let o;l(e.quantization)?o=x7e(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,afe);if(isNaN(d.x)||isNaN(d.y)||isNaN(d.z))continue;let u=F.multiplyByPoint(t,d,d),h=co.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 _7e(e,t,n,i){let o=Be(i);o.mode=re.COLUMBUS_VIEW;let r=n.center,s=T7e(e,t,r,o),a=qe.createVertexBuffer({context:i.context,typedArray:s,usage:Fe.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var hI=sfe;var Fzn=x(T(),1);var Rzn=x(T(),1),fI=`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 P_={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};P_.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,ge.VERTEX),A7e(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,ge.VERTEX),n.addVertexLines(fI);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=Gt(r,e.uniformMap)};function S7e(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===ot.JOINTS||r.semantic===ot.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function A7e(e,t){e.addFunction(P_.FUNCTION_ID_GET_SKINNING_MATRIX,P_.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,ge.VERTEX),e.addFunctionLines(P_.FUNCTION_ID_GET_SKINNING_MATRIX,["mat4 skinnedMatrix = mat4(0);"]);let i,o,r=["x","y","z","w"],s=S7e(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(P_.FUNCTION_ID_GET_SKINNING_MATRIX,[d])}e.addFunctionLines(P_.FUNCTION_ID_GET_SKINNING_MATRIX,["return skinnedMatrix;"])}var pI=P_;var Mzn=x(T(),1);var Pzn=x(T(),1),bI=`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 cfe={name:"VerticalExaggerationPipelineStage"},Z7e=new M;cfe.process=function(e,t,n){let{shaderBuilder:i,uniformMap:o}=e;i.addVertexLines(bI),i.addDefine("HAS_VERTICAL_EXAGGERATION",void 0,ge.VERTEX),i.addUniform("vec2","u_verticalExaggerationAndRelativeHeight",ge.VERTEX),o.u_verticalExaggerationAndRelativeHeight=function(){return M.fromElements(n.verticalExaggeration,n.verticalExaggerationRelativeHeight,Z7e)}};var gI=cfe;var nHn=x(T(),1);var Bzn=x(T(),1);var cQ={};function C7e(e){let t=Ne.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 V7e(e,t){let n=t.length,i=Ne.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 R7e(e){let t=e-2,n=2+t*4,i=Ne.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 E7e(e,t){let i=t.length-2,o=2+i*4,r=Ne.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 G7e(e){let t=e-2,n=2+t*4,i=Ne.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 L7e(e,t){let i=t.length-2,o=2+i*4,r=Ne.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}cQ.createWireframeIndices=function(e,t,n){let i=l(n);if(e===ve.TRIANGLES)return i?V7e(t,n):C7e(t);if(e===ve.TRIANGLE_STRIP)return i?E7e(t,n):R7e(t);if(e===ve.TRIANGLE_FAN)return i?L7e(t,n):G7e(t)};cQ.getWireframeIndicesCount=function(e,t){return e===ve.TRIANGLES?t*2:e===ve.TRIANGLE_STRIP||e===ve.TRIANGLE_FAN?2+(t-2)*4:t};var OC=cQ;var lfe={name:"WireframePipelineStage"};lfe.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,ge.FRAGMENT);let o=e.model,r=W7e(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=ve.LINES,e.count=OC.getWireframeIndicesCount(a,c)};function W7e(e,t,n){let o=St.getAttributeBySemantic(e,ot.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):Ne.createTypedArray(o,h),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=OC.createWireframeIndices(a,o,s),d=Ne.fromSizeInBytes(c.BYTES_PER_ELEMENT);return qe.createIndexBuffer({context:n.context,typedArray:c,usage:Fe.STATIC_DRAW,indexDatatype:d})}var yI=lfe;function dfe(e){e=e??B.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=[]}dfe.prototype.configurePipeline=function(e){let t=this.pipelineStages;t.length=0;let n=this.primitive,i=this.node,o=this.model,r=o.customShader,s=o.style,a=e.context.webgl2,d=e.mode!==re.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=e.verticalExaggeration!==1&&o.hasVerticalExaggeration,h=l(n.morphTargets)&&n.morphTargets.length>0,p=l(i.skin),b=l(o.imageryLayers),f=l(r),_=!(f&&l(r.fragmentShaderText))||r.mode!==Sb.REPLACE_MATERIAL,S=St.hasQuantizedAttributes(n.attributes),A=o.debugWireframe&&ve.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),Z=o.pointCloudShading,V=l(Z)&&Z.attenuation,E=l(Z)&&Z.backFaceCulling,G=n.primitiveType===ve.POINTS&&(l(s)||V||E),v=o._enableShowOutline&&l(n.outlineCoordinates),I=l(n.edgeVisibility),X=v7e(o,i,n),N=l(o.classificationType);d&&t.push(hI),t.push(IF),A&&t.push(yI),N&&t.push(hF),h&&t.push(rI),p&&t.push(pI),G&&t.push(cI),S&&t.push(CF),b&&(v?Zt("outlines-and-draping","Primitive outlines disable imagery draping"):t.push($F)),_&&t.push(iI),t.push(My),t.push(Lm),t.push(gu),X.hasPropertyTable&&(t.push(Uy),t.push(mF),t.push(bF)),u&&t.push(gI),f&&t.push(AF),t.push(tI),o.allowPicking&&t.push(sI),v&&t.push(uI),I&&(e.edgeVisibilityRequested=!0,t.push(LF),t.push(RF)),t.push(uF),t.push(mI)};function v7e(e,t,n){let i;return l(t.instances)&&(i=St.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(i))?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:(i=St.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),l(i)?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var xI=dfe;var MHn=x(T(),1);function lQ(e){e=e??B.EMPTY_OBJECT,this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],F7e(this)}Object.defineProperties(lQ.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 F7e(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=ufe(u,h,new F);a.push(p)}}function ufe(e,t,n){let i=F.multiplyTransformation(e.transformToRoot,e.transform,n);return n=F.multiplyTransformation(i,t,n),n}lQ.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]=ufe(i,o,e[n])}};var TI=lQ;var KHn=x(T(),1);var UHn=x(T(),1);function I7e(){this.pass=void 0,this.alphaCutoff=void 0}var X_=I7e;function P7e(e){this.shaderBuilder=new Y0,this.model=e,this.uniformMap={},this.alphaOptions=new X_,this.renderStateOptions=Ue.getState(Ue.fromCache({depthTest:{enabled:!0,func:$a.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1,this.nodeRenderResources=[]}var _I=P7e;var rKn=x(T(),1);var jHn=x(T(),1),SI=`void silhouetteStage(inout vec4 color) { if(model_silhouettePass) { color = czm_gammaCorrect(model_silhouetteColor); } }`;var qHn=x(T(),1),AI=`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 yD={name:"ModelSilhouettePipelineStage"};yD.silhouettesLength=0;yD.process=function(e,t,n){l(t._silhouetteId)||(t._silhouetteId=++yD.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,ge.BOTH),i.addVertexLines(AI),i.addFragmentLines(SI),i.addUniform("vec4","model_silhouetteColor",ge.FRAGMENT),i.addUniform("float","model_silhouetteSize",ge.VERTEX),i.addUniform("bool","model_silhouettePass",ge.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=Gt(o,e.uniformMap),e.hasSilhouette=!0};var ZI=yD;var mKn=x(T(),1);var aKn=x(T(),1),CI=`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 xD={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};xD.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,ge.FRAGMENT),i.addFragmentLines(CI);let o={};i.addUniform("float",xD.SPLIT_DIRECTION_UNIFORM_NAME,ge.FRAGMENT),o[xD.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=Gt(o,e.uniformMap)};var VI=xD;var pKn=x(T(),1);function X7e(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=Be(e.uniformMap),this.alphaOptions=Be(e.alphaOptions),this.renderStateOptions=Be(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 RI=X7e;var RKn=x(T(),1);var xKn=x(T(),1);function N7e(e){e=e??B.EMPTY_OBJECT,this.lightingModel=e.lightingModel??Vp.UNLIT}var EI=N7e;function Y7e(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=Be(e.uniformMap),this.alphaOptions=Be(e.alphaOptions),this.renderStateOptions=Be(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:St.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=St.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=de.fromCornerPoints(this.positionMin,this.positionMax,new de),this.lightingOptions=new EI,this.pickId=void 0}var GI=Y7e;var GJn=x(T(),1);var UKn=x(T(),1);function uQ(e){e=e??B.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=[],U7e(this)}function w7e(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:Ct.KEEP,zFail:Ct.DECREMENT_WRAP,zPass:Ct.KEEP},backFunction:e,backOperation:{fail:Ct.KEEP,zFail:Ct.INCREMENT_WRAP,zPass:Ct.KEEP},reference:Ht.CESIUM_3D_TILE_MASK,mask:Ht.CESIUM_3D_TILE_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:$a.LESS_OR_EQUAL},depthMask:!1}}var M7e={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:Ht.CLASSIFICATION_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:rn.PRE_MULTIPLIED_ALPHA_BLEND},k7e={stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ni.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:Ht.CLASSIFICATION_MASK},stencilMask:Ht.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},ffe=[];function U7e(e){let t=e._command,n=ffe;if(e._useDebugWireframe){t.pass=Le.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=LI(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=Le.TERRAIN_CLASSIFICATION,s=dQ(t,r),a=mfe(t,r);n.length=0,n.push(s,a),e._commandListTerrain=LI(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=hfe(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=Le.CESIUM_3D_TILE_CLASSIFICATION,s=dQ(t,r),a=mfe(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=LI(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=hfe(e,n,e._commandList3DTilesPicking))}}function LI(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],b=et.shallowClone(p);b.count=d,b.offset=u,n.push(b)}}return n}function dQ(e,t){let n=et.shallowClone(e);n.cull=!1,n.pass=t;let i=t===Le.TERRAIN_CLASSIFICATION?ni.ALWAYS:ni.EQUAL,o=w7e(i);return n.renderState=Ue.fromCache(o),n}function mfe(e,t){let n=et.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=Ue.fromCache(M7e),n}var D7e=[];function hfe(e,t,n){let i=Ue.fromCache(k7e),o=t[0],r=t[1],s=et.shallowClone(o);s.cull=!0,s.pickOnly=!0;let a=et.shallowClone(r);a.cull=!0,a.pickOnly=!0,a.renderState=i,a.pickId=e._pickId;let c=D7e;return c.length=0,c.push(s,a),LI(e,c,n)}Object.defineProperties(uQ.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=de.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});uQ.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){oi(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&oi(t,this._commandListTerrain),this._classifies3DTiles&&oi(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=Le.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=dQ(this._command,o),s=ffe;s.length=0,s.push(r),this._commandListIgnoreShow=LI(this,s,this._commandListIgnoreShow)}oi(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&oi(t,this._commandListTerrainPicking),this._classifies3DTiles&&oi(t,this._commandList3DTilesPicking)),t};var WI=uQ;var lJn=x(T(),1);function vI(e){e=e??B.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===Le.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=de.clone(t.boundingVolume),this._modelMatrix2D=new F,this._boundingVolume2D=new de,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,O7e(this)}function Rp(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}Rp.clone=function(e){return new Rp({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function O7e(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 Rp({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new Rp({command:Q7e(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new Rp({command:o6e(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new Rp({command:r6e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new Rp({command:q7e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new Rp({command:$7e(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 Rp({command:e6e(t,r,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._edgeCommand)}}Object.defineProperties(vI.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=de.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,z7e(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,H7e(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,K7e(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,J7e(this))}}});function B7e(e,t){let n=e._modelMatrix;e._modelMatrix2D=F.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=W.sign(n[13])*2*W.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=de.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function z7e(e){let t=e.shadows,n=Ln.castShadows(t),i=Ln.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 H7e(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=Be(r.renderState,!0);s.cull.enabled=t,r.renderState=Ue.fromCache(s)}}}function K7e(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=Be(r.renderState,!0);s.cull.face=t,r.renderState=Ue.fromCache(s)}}}function J7e(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}}}vI.prototype.pushCommands=function(e,t){let n=mQ(this,e);n&&!this._has2DCommands&&(j7e(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(B7e(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&l(i)&&(i!==$h.ALL_OPAQUE&&By(t,this._translucentCommand,n),i===$h.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||By(o._backfaceCommands,this._skipLodBackfaceCommand,n),t6e(this,r,n),By(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){By(t,this._silhouetteModelCommand,n);return}return By(t,this._originalCommand,n),this._needsEdgeCommands&&By(t,this._edgeCommand,n),t}};vI.prototype.pushSilhouetteCommands=function(e,t){let n=mQ(this,e);return By(t,this._silhouetteColorCommand,n),t};vI.prototype.pushEdgeCommands=function(e,t){if(!l(this._edgeCommand))return t;let n=mQ(this,e);return By(t,this._edgeCommand,n),t};function By(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function mQ(e,t){if(t.mode!==re.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*W.PI;return o<s&&r>s||o<-s&&r>-s}function N_(e,t){if(!l(t))return;let n=Rp.clone(t),i=et.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 j7e(e){N_(e,e._originalCommand),N_(e,e._translucentCommand),N_(e,e._skipLodBackfaceCommand),N_(e,e._skipLodStencilCommand),N_(e,e._silhouetteModelCommand),N_(e,e._silhouetteColorCommand),N_(e,e._edgeCommand)}function Q7e(e){let t=et.shallowClone(e);t.pass=Le.TRANSLUCENT;let n=Be(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=rn.ALPHA_BLEND,t.renderState=Ue.fromCache(n),t}function q7e(e,t){let n=t._silhouetteId%255,i=et.shallowClone(e),o=Be(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=Ue.fromCache(o),i}function $7e(e,t){let n=t._silhouetteId%255,i=et.shallowClone(e),o=Be(e.renderState,!0);o.cull.enabled=!1,(e.pass===Le.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Le.TRANSLUCENT,o.depthMask=!1,o.blending=rn.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=Be(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Ue.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function e6e(e,t){let n=t.edgeGeometry,i=et.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=Be(e.uniformMap);return o.u_isEdgePass=function(){return!0},i.uniformMap=o,i.uniformMap=o,i.castShadows=!1,i.receiveShadows=!1,i}function t6e(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=n6e(o);if(r!==s){let a=i6e(r),c=Be(o.renderState,!0);c.stencilTest.reference=a,o.renderState=Ue.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function n6e(e){return(e.renderState.stencilTest.reference&Ht.SKIP_LOD_MASK)>>>Ht.SKIP_LOD_BIT_SHIFT}function i6e(e){return Ht.CESIUM_3D_TILE_MASK|e<<Ht.SKIP_LOD_BIT_SHIFT}function o6e(e){let t=et.shallowClone(e),n=Be(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=Be(t.uniformMap),o=new M(5,5);return i.u_polygonOffset=function(){return o},t.renderState=Ue.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function r6e(e){let t=et.shallowClone(e),n=Be(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=Ht.SKIP_LOD_MASK,i.reference=Ht.CESIUM_3D_TILE_MASK,i.frontFunction=ni.GREATER_OR_EQUAL,i.frontOperation.zPass=Ct.REPLACE,i.backFunction=ni.GREATER_OR_EQUAL,i.backOperation.zPass=Ct.REPLACE,n.stencilMask=Ht.CESIUM_3D_TILE_MASK|Ht.SKIP_LOD_MASK,t.renderState=Ue.fromCache(n),t}var FI=vI;var uJn=x(T(),1),II=`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 hJn=x(T(),1),PI=` 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 pfe(){}pfe.buildModelDrawCommand=function(e,t){let n=e.shaderBuilder,i=s6e(e,n,t),o=a6e(e,i,t),r=e.model;return l(r.classificationType)?new WI({primitiveRenderResources:e,command:o}):new FI({primitiveRenderResources:e,command:o})};function s6e(e,t,n){t.addVertexLines(II),t.addFragmentLines(PI);let i=e.model,o=t.buildShaderProgram(n.context);return i._pipelineResources.push(o),o}function a6e(e,t,n){let i=c6e(e),o=new Bn({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===re.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 S=c?a._computedModelMatrix:a._computedModelMatrix2D;d=F.multiplyTransformation(S,e.runtimeNode.computedTransform,new F),u=de.transform(e.boundingSphere,d)}let h=Be(Ue.fromCache(e.renderStateOptions),!0);h.cull.face=St.getCullFace(d,e.primitiveType),h=Ue.fromCache(h);let p=l(r.classificationType),b=p?!1:Ln.castShadows(r.shadows),f=p?!1:Ln.receiveShadows(r.shadows),y=p?void 0:e.pickId;return new et({boundingVolume:u,modelMatrix:d,uniformMap:e.uniformMap,renderState:h,vertexArray:o,shaderProgram:t,cull:r.cull,pass:s,count:e.count,owner:r,pickId:y,pickMetadataAllowed:!0,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:b,receiveShadows:f})}function c6e(e){let t=e.wireframeIndexBuffer;if(l(t))return t;let n=e.indices;if(l(n))return n.buffer}var XI=pfe;function rl(e){e=e??B.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=St.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new F),this._runtimeArticulations={},l6e(this)}Object.defineProperties(rl.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 l6e(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;bfe(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let A=0;A<s;A++){let Z=r[A],V=new J2({articulation:Z,sceneGraph:e}),E=V.name;a[E]=V}let c=t.nodes,d=c.length;e._runtimeNodes=new Array(d);let h=n.nodes.length,p=F.IDENTITY;for(let A=0;A<h;A++){let Z=n.nodes[A],V=gfe(e,Z,p);e._rootNodes.push(V)}let b=t.skins,f=e._runtimeSkins,y=b.length;for(let A=0;A<y;A++){let Z=b[A];f.push(new TI({skin:Z,sceneGraph:e}))}let _=e._skinnedNodes,S=_.length;for(let A=0;A<S;A++){let Z=_[A],V=e._runtimeNodes[Z],G=c[Z].skin.index;V._runtimeSkin=f[G],V.updateJointMatrices()}e.applyArticulations()}function bfe(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 d6e=new m;function u6e(e,t){let n=e._computedModelMatrix,i=F.getTranslation(n,d6e);if(!m.equals(i,m.ZERO))e._computedModelMatrix2D=pt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=pt.ellipsoidTo2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=F.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=de.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function gfe(e,t,n){let i=[],o=St.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),b=gfe(e,h,p);i.push(b)}let s=new dF({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 xI({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 nF(u,s);u._nodesByName[d]=h}return c}var m6e=new m,h6e=new m,f6e=new m,p6e=new m;rl.prototype.buildDrawCommands=function(e){let t=this.buildRenderResources(e);this.computeBoundingVolumes(t),this.createDrawCommands(t,e)};rl.prototype.buildRenderResources=function(e){let t=this._model,n=new _I(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 RI(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 GI(a,d);a.primitiveRenderResources[c]=h;for(let p=0;p<u.length;p++)u[p].process(h,d.primitive,e)}}return n};rl.prototype.computeBoundingVolumes=function(e){let t=this._model,n=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,m6e),i=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,h6e);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=de.clone(u.boundingSphere,new de);let h=F.multiplyByPoint(a,u.positionMin,f6e),p=F.multiplyByPoint(a,u.positionMax,p6e);m.minimumByComponent(n,h,n),m.maximumByComponent(i,p,i)}}this._boundingSphere=de.fromCornerPoints(n,i,new de),this._boundingSphere=de.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=de.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=de.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};rl.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=XI.buildModelDrawCommand(a,t);s.drawCommand=c}}};rl.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(wy),!l(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(H2),n.isClippingEnabled()&&t.push(q2),n.isClippingPolygonsEnabled()&&t.push(tF),n.hasSilhouette(e)&&t.push(ZI),l(n.splitDirection)&&n.splitDirection!==Fr.NONE&&t.push(VI),Pr.is3DTiles(n.type)&&t.push(U2),i&&t.push(B2))};rl.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!==re.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)}}};rl.prototype.updateModelMatrix=function(e,t){bfe(this,e),t.mode!==re.SCENE3D&&u6e(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};rl.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 yfe(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);yfe(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 TD(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];yfe(e,c,t,n,i)}}var b6e={backFaceCulling:void 0};rl.prototype.updateBackFaceCulling=function(e){let t=b6e;t.backFaceCulling=e,TD(this,!1,g6e,t)};function g6e(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var y6e={shadowMode:void 0};rl.prototype.updateShadows=function(e){let t=y6e;t.shadowMode=e,TD(this,!1,x6e,t)};function x6e(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var T6e={debugShowBoundingVolume:void 0};rl.prototype.updateShowBoundingVolume=function(e){let t=T6e;t.debugShowBoundingVolume=e,TD(this,!1,_6e,t)};function _6e(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var xfe=[],Tfe=[],S6e={frameState:void 0,hasSilhouette:void 0};rl.prototype.pushDrawCommands=function(e){let t=xfe;t.length=0;let n=Tfe;n.length=0;let i=S6e;i.hasSilhouette=this._model.hasSilhouette(e),i.frameState=e,TD(this,!0,A6e,i),oi(e.commandList,t),oi(e.commandList,n)};function A6e(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=xfe,s=Tfe,a=e.drawCommand;a.pushCommands(n,n.commandList),i&&!o.pick&&a.pushSilhouetteCommands(n,r),l(a.pushEdgeCommands)&&a.pushEdgeCommands(n,s)}rl.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)};rl.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var NI=rl;var cjn=x(T(),1);function zy(){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(zy.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}}});zy.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()};zy.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};zy.prototype.addTexture=function(e){this._textureIdByteLengths.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes,this._textureIdByteLengths[e._id]=e.sizeInBytes)};zy.prototype.getTextureIds=function(){return Object.keys(this._textureIdByteLengths)};zy.prototype.getTextureByteLengthById=function(e){return this._textureIdByteLengths[e]};zy.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var YI=zy;var Bjn=x(T(),1);var Zfe=x(tU(),1);var _jn=x(T(),1);var _fe={},Y_=Uint32Array.BYTES_PER_ELEMENT;_fe.parse=function(e,t){t=t??0;let n=new Uint8Array(e),i=new DataView(e);t+=Y_;let o=i.getUint32(t,!0);if(o!==1)throw new ue(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=Y_,t+=Y_;let r=i.getUint32(t,!0);if(r===0)throw new ue("Feature table must have a byte length greater than zero");t+=Y_;let s=i.getUint32(t,!0);t+=Y_;let a=i.getUint32(t,!0);t+=Y_;let c=i.getUint32(t,!0);t+=Y_;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 b=new Qh(d,u),f=b.getGlobalProperty("POINTS_LENGTH");if(b.featuresLength=f,!l(f))throw new ue("Feature table global property: POINTS_LENGTH must be defined");let y=b.getGlobalProperty("RTC_CENTER",K.FLOAT,3);l(y)&&(y=m.unpack(y));let _=C6e(b,h);if(_.rtcCenter=y,_.pointsLength=f,!_.hasPositions){let S=V6e(b);_.positions=S,_.hasPositions=_.hasPositions||l(S)}if(!_.hasPositions)throw new ue("Either POSITION or POSITION_QUANTIZED must be defined.");if(!_.hasNormals){let S=E6e(b);_.normals=S,_.hasNormals=_.hasNormals||l(S)}if(!_.hasColors){let S=R6e(b);_.colors=S,_.hasColors=_.hasColors||l(S),_.hasConstantColor=l(_.constantColor),_.isTranslucent=l(S)&&S.isTranslucent}if(!_.hasBatchIds){let S=G6e(b);_.batchIds=S,_.hasBatchIds=_.hasBatchIds||l(S)}if(_.hasBatchIds){let S=b.getGlobalProperty("BATCH_LENGTH");if(!l(S))throw new ue("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");_.batchLength=S}return(l(h)||l(p))&&(_.batchTableJson=h,_.batchTableBinary=p),Z6e(_),_};function Z6e(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)Zt("PntsParser-invalidBinaryBodyReference",`The point cloud data contained a binary property ${r} that could not be resolved - skipping`),delete t[r]}function C6e(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,y=s.byteLength;if(!l(o)||!l(f)||!l(y))throw new ue("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+y),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 b;return l(i)&&(b={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:Gt(o,r),dequantizeInShader:!0}),{draco:b,hasPositions:c,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:h}}function V6e(e){let t=e.json,n;if(l(t.POSITION))return n=e.getPropertyArray("POSITION",K.FLOAT,3),{name:ot.POSITION,semantic:ot.POSITION,typedArray:n,isQuantized:!1,componentDatatype:K.FLOAT,type:Mt.VEC3};if(l(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",K.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",K.FLOAT,3);if(!l(i))throw new ue("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",K.FLOAT,3);if(!l(r))throw new ue("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:ot.POSITION,semantic:ot.POSITION,typedArray:n,isQuantized:!0,componentDatatype:K.FLOAT,type:Mt.VEC3,quantizedRange:o,quantizedVolumeOffset:m.unpack(r),quantizedVolumeScale:m.unpack(i),quantizedComponentDatatype:K.UNSIGNED_SHORT,quantizedType:Mt.VEC3}}}function R6e(e){let t=e.json,n;if(l(t.RGBA))return n=e.getPropertyArray("RGBA",K.UNSIGNED_BYTE,4),{name:ot.COLOR,semantic:ot.COLOR,setIndex:0,typedArray:n,componentDatatype:K.UNSIGNED_BYTE,type:Mt.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(l(t.RGB))return n=e.getPropertyArray("RGB",K.UNSIGNED_BYTE,3),{name:"COLOR",semantic:ot.COLOR,setIndex:0,typedArray:n,componentDatatype:K.UNSIGNED_BYTE,type:Mt.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(l(t.RGB565))return n=e.getPropertyArray("RGB565",K.UNSIGNED_SHORT,1),{name:"COLOR",semantic:ot.COLOR,setIndex:0,typedArray:n,componentDatatype:K.FLOAT,type:Mt.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(l(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",K.UNSIGNED_BYTE,4),o=i[3],r=U.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:ot.COLOR,semantic:ot.COLOR,setIndex:0,constantColor:r,componentDatatype:K.FLOAT,type:Mt.VEC4,isQuantized:!1,isTranslucent:s}}}function E6e(e){let t=e.json,n;if(l(t.NORMAL))return n=e.getPropertyArray("NORMAL",K.FLOAT,3),{name:ot.NORMAL,semantic:ot.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:K.FLOAT,type:Mt.VEC3};if(l(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",K.UNSIGNED_BYTE,2),{name:ot.NORMAL,semantic:ot.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:Mt.VEC2,quantizedComponentDatatype:K.UNSIGNED_BYTE,componentDatatype:K.FLOAT,type:Mt.VEC3}}function G6e(e){let t=e.json;if(l(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",K.UNSIGNED_SHORT,1);return{name:ot.FEATURE_ID,semantic:ot.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:K.fromTypedArray(n),type:Mt.SCALAR}}}var w_=_fe;var L6e=Tn.Components,W6e=Tn.Scene,v6e=Tn.Node,F6e=Tn.Primitive,I6e=Tn.Attribute,Sfe=Tn.Quantization,P6e=Tn.FeatureIdAttribute,X6e=Tn.Material,N6e=Tn.MetallicRoughness,hQ=class extends qi{constructor(t){super(),t=t??B.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=ft.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=w_.parse(this._arrayBuffer,this._byteOffset),this._state=ft.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===ft.READY)return!0;if(this._state===ft.PROCESSING){if(l(this._decodePromise))return!1;this._decodePromise=Y6e(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 Y6e(e,t){let i=e._parsedContent.draco,o;if(l(i)?o=sb.decodePointCloud(i,t):o=Promise.resolve(),!!l(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return l(r)&&w6e(e,i,r),j6e(e,t),e._state=ft.READY,e}).catch(function(r){e.unload(),e._state=ft.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function w6e(e,t,n){e._state=ft.READY;let i=e._parsedContent,o;if(l(n.POSITION)){if(o={name:"POSITION",semantic:ot.POSITION,typedArray:n.POSITION.array,componentDatatype:K.FLOAT,type:Mt.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?K.UNSIGNED_BYTE:K.UNSIGNED_SHORT,o.quantizedType=Mt.VEC3}i.positions=o}if(l(n.NORMAL)){if(o={name:"NORMAL",semantic:ot.NORMAL,typedArray:n.NORMAL.array,componentDatatype:K.FLOAT,type:Mt.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=K.UNSIGNED_BYTE,o.quantizedType=Mt.VEC2}i.normals=o}if(l(n.RGBA)?i.colors={name:"COLOR",semantic:ot.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:K.UNSIGNED_BYTE,type:Mt.VEC4,normalized:!0,isTranslucent:!0}:l(n.RGB)&&(i.colors={name:"COLOR",semantic:ot.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:K.UNSIGNED_BYTE,type:Mt.VEC3,normalized:!0,isTranslucent:!1}),l(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:ot.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:K.fromTypedArray(a),type:Mt.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:M6e(d.componentsPerAttribute),componentType:k6e(d.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function M6e(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function k6e(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 wI(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new Sfe,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new Sfe;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 I6e;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=tn.decodeRGB565(i)),l(t.constantColor)){let a=new Array(4);r.constant=U.pack(t.constantColor,a)}else{let a=qe.createVertexBuffer({typedArray:i,context:n,usage:Fe.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===ot.POSITION&&s&&(r.typedArray=i),r}var Afe,_D;function U6e(e){if(!l(_D)){Afe=new Zfe.default(0),_D=new Array(e);for(let t=0;t<e;++t)_D[t]=Afe.random()}return _D}var D6e=new m,O6e=new m,B6e=new m;function z6e(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=U6e(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=m.fromElements(s,s,s,D6e),d=m.fromElements(a,a,a,O6e),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,B6e),m.minimumByComponent(c,p,c),m.maximumByComponent(d,p,d);e.min=m.clone(c),e.max=m.clone(d)}var H6e={name:ot.COLOR,semantic:ot.COLOR,setIndex:0,constantColor:U.DARKGRAY,componentDatatype:K.FLOAT,type:Mt.VEC4,isQuantized:!1,isTranslucent:!1};function K6e(e,t,n){let i=[],o,r=t.positions;return l(r)&&(z6e(r),o=wI(e,r,n),o.count=t.pointsLength,i.push(o)),l(t.normals)&&(o=wI(e,t.normals,n),i.push(o)),l(t.colors)?(o=wI(e,t.colors,n),i.push(o)):(o=wI(e,H6e,n),i.push(o)),l(t.batchIds)&&(o=wI(e,t.batchIds,n),i.push(o)),i}function J6e(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?xb({count:n??i,batchTable:o,binaryBody:r,parseAsPropertyAttributes:s,customAttributeOutput:t}):new Wa({schema:{},propertyTables:[]})}function j6e(e,t){let n=e._parsedContent,i=new N6e;i.metallicFactor=0,i.roughnessFactor=.9;let o=new X6e;o.metallicRoughness=i;let r=n.colors;l(r)&&r.isTranslucent&&(o.alphaMode=Tp.BLEND);let s=!l(n.normals);o.unlit=s;let a=new F6e;if(a.attributes=K6e(e,n,t),a.primitiveType=ve.POINTS,a.material=o,l(n.batchIds)){let b=new P6e;b.propertyTableId=0,b.setIndex=0,b.positionalLabel="featureId_0",a.featureIds.push(b)}let c=new v6e;c.index=0,c.primitives=[a];let d=new W6e;d.nodes=[c],d.upAxis=ao.Z,d.forwardAxis=ao.X;let u=new L6e;u.scene=d,u.nodes=[c];let h=[];u.structuralMetadata=J6e(n,h),h.length>0&&Q6e(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 Q6e(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=qe.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Fe.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}var MI=hQ;var d4n=x(T(),1);var q6e=new m,$6e=new m,eqe=new m,tqe=new F,nqe=new F,iqe=new F,oqe=new be,rqe=new de;function BC(e,t,n,i,o,r,s){if(!e._ready||n.mode===re.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,b=F.clone(h.computedTransform,tqe),f=F.clone(c.computedModelMatrix,nqe),y=p.instances;l(y)&&y.transformInWorldSpace&&(f=F.multiplyTransformation(e.modelMatrix,c.components.transform,f),b=F.multiplyTransformation(c.axisCorrectionMatrix,h.computedTransform,b));let _=F.multiplyTransformation(f,b,iqe);n.mode!==re.SCENE3D&&(_=pt.basisTo2D(n.mapProjection,_,_));let S=[];if(l(y)){let Z=y.attributes[0].count,V=y.attributes[0].componentDatatype,E=12,G=h.transformsTypedArray;if(!l(G)){let v=h.instancingTransformsBuffer;l(v)&&n.context.webgl2&&(G=K.createTypedArray(V,Z*E),v.getBufferData(G))}if(l(G))for(let v=0;v<Z;v++){let I=v*E,X=new F(G[I],G[I+1],G[I+2],G[I+3],G[I+4],G[I+5],G[I+6],G[I+7],G[I+8],G[I+9],G[I+10],G[I+11],0,0,0,1);y.transformInWorldSpace?(F.multiplyTransformation(X,b,X),F.multiplyTransformation(f,X,X)):F.multiplyTransformation(X,_,X),S.push(X)}}S.length===0&&S.push(_);let A=h.runtimePrimitives.length;for(let Z=0;Z<A;Z++){let V=h.runtimePrimitives[Z],E=V.primitive;if(l(V.boundingSphere)&&!l(y)){let J=de.transform(V.boundingSphere,_,rqe),ee=mi.raySphere(t,J);if(!l(ee))continue}let G=St.getAttributeBySemantic(E,ot.POSITION),v=G.byteOffset,I=G.byteStride,X=G.count;if(!l(E.indices))continue;let N=E.indices.typedArray;if(!l(N)){let J=E.indices.buffer,ee=E.indices.count,H=E.indices.indexDatatype;l(J)&&n.context.webgl2&&(H===Ne.UNSIGNED_BYTE?N=new Uint8Array(ee):H===Ne.UNSIGNED_SHORT?N=new Uint16Array(ee):H===Ne.UNSIGNED_INT&&(N=new Uint32Array(ee)),J.getBufferData(N))}let g=G.typedArray,C=G.componentDatatype,R=G.type,L=G.quantization;l(L)&&(C=G.quantization.componentDatatype,R=G.quantization.type);let P=Mt.getNumberOfComponents(R),Y=K.getSizeInBytes(C),O=!l(g)&&l(I)&&I!==P*Y,k=P,D=0;O&&(k=I/Y,D=v/Y);let w=X*k;if(!l(g)){let J=G.buffer;l(J)&&n.context.webgl2&&(g=K.createTypedArray(C,w),J.getBufferData(g,O?0:v,0,w)),L&&G.normalized&&(g=tn.dequantize(g,C,R,X))}if(!l(N)||!l(g))return;r=r??ie.default,i=i??1,o=o??0;let z=N.length;for(let J=0;J<z;J+=3){let ee=N[J],H=N[J+1],te=N[J+2];for(let $ of S){let pe=fQ(g,ee,D,k,L,$,i,o,r,q6e),xe=fQ(g,H,D,k,L,$,i,o,r,$6e),le=fQ(g,te,D,k,L,$,i,o,r,eqe),Te=mi.rayTriangleParametric(t,pe,xe,le,e.backFaceCulling??!0);l(Te)&&Te<a&&Te>=0&&(a=Te)}}}}if(a!==Number.MAX_VALUE){if(s=xn.getPoint(t,a,s),n.mode!==re.SCENE3D){m.fromElements(s.y,s.z,s.x,s);let u=n.mapProjection,h=u.ellipsoid,p=u.unproject(s,oqe);h.cartographicToCartesian(p,s)}return s}}function fQ(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=tn.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&&Zo.getPosition(d,c,s,a,d),d}var x4n=x(T(),1);var m4n=x(T(),1),pQ=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}},kI=pQ;var bQ=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 I_(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 kI(r)}}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteModelPrimitiveImageries(),he(this)}},UI=bQ;function Eo(e){e=e??B.EMPTY_OBJECT,this._loader=e.loader,this._resource=e.resource,this.type=e.type??Pr.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=q.clone(q.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 Y2(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??tl.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??Le.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 de,this._initialRadius=void 0,this._heightReference=e.heightReference??tt.NONE,this._heightDirty=this._heightReference!==tt.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 Sp(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;l(s)&&s.owner===void 0?us.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?Kh.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._modelImagery=new UI(this),this._lightColor=m.clone(e.lightColor),this._imageBasedLighting=l(e.imageBasedLighting)?e.imageBasedLighting:new s_,this._shouldDestroyImageBasedLighting=!l(e.imageBasedLighting),this._environmentMapManager=void 0;let c=new hb(e.environmentMapOptions);hb.setOwner(c,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??Ln.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===Pr.GLTF&&Zt("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 yt(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??Fr.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this._classificationType=e.classificationType,this._statistics=new YI,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 _e,this._readyEvent=new _e,this._texturesReadyEvent=new _e,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function gQ(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function sqe(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 k2({model:e,propertyTable:s});n.push(a)}return n}function aqe(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=St.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=St.getFeatureIdsByLabel(c.featureIds,n);if(l(d))return d.propertyTableId}if(t._featureTables.length===1)return 0}function TQ(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(Eo.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=kt.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){TQ(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=TQ(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 Rfe(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===Pr.GLTF&&Zt("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&&(us.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(Kh.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&&(hb.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}}});Eo.prototype.getNode=function(e){return this._nodesByName[e]};Eo.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};Eo.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};Eo.prototype.getExtension=function(e){return this._loader.components.extensions[e]};Eo.prototype.makeStyleDirty=function(){this._styleDirty=!0};Eo.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var cqe=new F,lqe=new q,dqe=new F;Eo.prototype.update=function(e){let t=!1;try{t=uqe(this,e)}catch(i){if(!this._loader.incrementallyLoadTextures&&i.name==="TextureError")gQ(this,i);else{let o=St.getError("model",this._resource,i);gQ(this,o)}}if(mqe(this,e),hqe(this,e),fqe(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let i=this._loader.components;if(!l(i)){if(this._loader.isUnloaded())return;let s=St.getError("model",this._resource,new ue("Failed to load model."));gQ(s),this._rejectLoad=this._rejectLoad&&this._rejectLoad(s)}let o=i.structuralMetadata;l(o)&&o.propertyTableCount>0&&sqe(this,o);let r=new NI({model:this,modelComponents:i});this._sceneGraph=r,this._gltfCredits=r.components.asset.credits}if(!this._resourcesLoaded||e.mode===re.MORPHING)return;let n=this._modelImagery;if(n.update(e),!(!n.ready&&!(this._content?.tileset?._asynchronouslyLoadImagery??!1))){if(pqe(this),bqe(this),gqe(this,e),yqe(this),xqe(this,e),Tqe(this,e),_qe(this,e),Sqe(this,e),Aqe(this,e),Zqe(this,e),Cqe(this,e),this._defaultTexture=e.context.defaultTexture,Vqe(this,e),Rqe(this,e),Eqe(this),Gqe(this,e),Fqe(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)),Wqe(this),Iqe(this,e),Pqe(this),Xqe(this,e)}};function uqe(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function mqe(e,t){l(e._customShader)&&e._customShader.update(t)}function hqe(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 fqe(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function pqe(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;l(n)&&n.propertyTableCount>0&&(e.featureTableId=aqe(t,e),e._styleDirty=!0,e.resetDrawCommands())}function bqe(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function gqe(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&&Vfe(e)}function Vfe(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=$h.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function yqe(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 xqe(e,t){e._silhouetteDirty&&(Efe(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function Tqe(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function _qe(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 Sqe(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 Aqe(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function Zqe(e,t){let n=t.fog.enabled&&t.fog.renderable;n!==e._fogRenderable&&(e.resetDrawCommands(),e._fogRenderable=n)}function Cqe(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 Vqe(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function Rqe(e,t){F.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=F.clone(e.modelMatrix,e._modelMatrix))}var Hy=new m,yQ=new be;function Eqe(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===tt.NONE){e._clampedModelMatrix=void 0;return}let n=t.ellipsoid??ie.default,i=e.modelMatrix;Hy.x=i[12],Hy.y=i[13],Hy.z=i[14];let o=n.cartesianToCartographic(Hy);l(e._clampedModelMatrix)||(e._clampedModelMatrix=F.clone(i,new F)),e._removeUpdateHeightCallback=t.updateHeight(o,Cfe(e,n,o),e.heightReference);let r=t.getHeight(o,e.heightReference);if(l(r)){let s=Cfe(e,n,o);be.clone(o,yQ),yQ.height=r,s(yQ)}e._heightDirty=!1,e._updateModelMatrix=!0}function Gqe(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;Rfe(e,n),Lqe(e,n,t)}function Rfe(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=de.transform(e._boundingSphere,t,e._boundingSphere)}function Lqe(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,Hy),e._sceneMode!==re.SCENE3D&&co.computeActualEllipsoidPosition(n,Hy,Hy);let s=e._boundingSphere.radius,a=Nqe(Hy,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 Wqe(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 vqe=new q(1,0,0,0,0,1,0,-1,0);function Fqe(e,t){let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=e.referenceMatrix??n,o=t.context,r=lqe,s=cqe;if(s=F.multiply(o.uniformState.view3D,i,s),r=F.getRotation(s,r),r=q.transpose(r,r),e._iblReferenceFrameMatrix=q.multiply(vqe,r,e._iblReferenceFrameMatrix),e.isClippingEnabled()){let a=dqe;a=F.multiply(o.uniformState.view3D,i,a),a=F.multiply(a,e._clippingPlanes.modelMatrix,a),e._clippingPlanesMatrix=F.inverseTranspose(a,e._clippingPlanesMatrix)}}function Iqe(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 Pqe(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(l(e._credit)){let s=yt.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=yt.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=yt.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function Xqe(e,t){let n=wqe(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&&(Mqe(e,t),e._sceneGraph.pushDrawCommands(t))}var xQ=new de;function Nqe(e,t,n){return xQ.center=e,xQ.radius=t,n.camera.getPixelSize(xQ,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}var SD=new m;function Cfe(e,t,n){return function(i){ZZ(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,SD);let o=e._clampedModelMatrix;F.clone(e.modelMatrix,o),o[12]=SD.x,o[13]=SD.y,o[14]=SD.z,e._heightDirty=!0}}var Yqe=new m;function wqe(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===re.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=F.getTranslation(e.modelMatrix,Yqe);co.computeActualEllipsoidPosition(t,s,s),r=m.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function Mqe(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}Eo.prototype.isTranslucent=function(){let e=this.color;return l(e)&&e.alpha>0&&e.alpha<1};Eo.prototype.isInvisible=function(){let e=this.color;return l(e)&&e.alpha===0};function Efe(e){return e.context.stencilBuffer}Eo.prototype.hasSilhouette=function(e){return Efe(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!l(this._classificationType)};Eo.prototype.hasSkipLevelOfDetail=function(e){if(!Pr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};Eo.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return l(e)&&e.enabled&&e.length!==0};Eo.prototype.pick=function(e,t,n,i,o){return BC(this,e,t,n,i,o)};Eo.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return l(e)&&e.enabled&&e.length!==0};Eo.prototype.isDestroyed=function(){return!1};Eo.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)};Eo.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};Eo.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};Eo.fromGltfAsync=async function(e){e=e??B.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=We.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=We.createIfNeeded(t);let r=new mu(n),a=l(e.content)?Pr.TILE_GLTF:Pr.GLTF,c=n.gltfResource,d=DI(r,a,e);d.resource=c,d.environmentMapOptions=e.environmentMapOptions;try{await r.load()}catch(b){throw r.destroy(),St.getError("model",c,b)}let u=e.gltfCallback;l(u)&&u(r.gltfJson);let h=new Eo(d),p=h._resource.credits;if(l(p)){let b=p.length;for(let f=0;f<b;f++)h._resourceCredits.push(yt.clone(p[f]))}return h};Eo.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 G2(t);try{await n.load();let i=DI(n,Pr.TILE_B3DM,e);return new Eo(i)}catch(i){throw n.destroy(),i}};Eo.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new MI(t);try{await n.load();let i=DI(n,Pr.TILE_PNTS,e);return new Eo(i)}catch(i){throw n.destroy(),i}};Eo.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 v2(t);try{await n.load();let i=DI(n,Pr.TILE_I3DM,e);return new Eo(i)}catch(i){throw n.destroy(),i}};Eo.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new L2(t),i=DI(n,Pr.TILE_GEOJSON,e);return new Eo(i)};var kqe=new U;Eo.prototype.applyColorAndShow=function(e){let t=U.clone(this._color,kqe),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,TQ(t,this._color)&&this.resetDrawCommands()};Eo.prototype.applyStyle=function(e){let t=this.type===Pr.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),Vfe(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function DI(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}}var yu=Eo;function gs(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(gs.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}}});gs.prototype.getTextureIds=function(){return this._model.statistics.getTextureIds()};gs.prototype.getTextureByteLengthById=function(e){return this._model.statistics.getTextureByteLengthById(e)};gs.prototype.getExtension=function(e){return this._model.getExtension(e)};gs.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;return t.featureTables[n].getFeature(e)};gs.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return l(i)?n.featureTables[i].hasProperty(e,t):!1};gs.prototype.applyDebugSettings=function(e,t){t=e?t:U.WHITE,this.featuresLength===0?this._model.color=t:l(this.batchTable)&&this.batchTable.setAllColor(t)};gs.prototype.applyStyle=function(e){this._model.style=e};gs.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:Rd.REPEAT}),this._ready=!0)};gs.prototype.isDestroyed=function(){return!1};gs.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),he(this)};gs.fromGltf=async function(e,t,n,i){let o=new gs(e,t,n),s=OI(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let c=await yu.fromGltfAsync(s);return o._model=c,o};gs.fromB3dm=async function(e,t,n,i,o){let r=new gs(e,t,n),a=OI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=c;let d=await yu.fromB3dm(a);return r._model=d,r};gs.fromI3dm=async function(e,t,n,i,o){let r=new gs(e,t,n),a=OI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await yu.fromI3dm(a);return r._model=c,r};gs.fromPnts=async function(e,t,n,i,o){let r=new gs(e,t,n),a=OI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await yu.fromPnts(a);return r._model=c,r};gs.fromGeoJson=async function(e,t,n,i){let o=new gs(e,t,n),s=OI(e,t,o,{geoJson:i,resource:n}),a=await yu.fromGeoJson(s);return o._model=a,o};gs.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 OI(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Le.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};return Gt(i,o)}var xu=gs;var SQn=x(T(),1);function vm(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(vm.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}}});vm.fromJson=function(e,t,n,i){let o=new vm(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};vm.prototype.hasProperty=function(e,t){return!1};vm.prototype.getFeature=function(e){};vm.prototype.applyDebugSettings=function(e,t){};vm.prototype.applyStyle=function(e){};vm.prototype.update=function(e,t){};vm.prototype.pick=function(e,t,n){};vm.prototype.isDestroyed=function(){return!1};vm.prototype.destroy=function(){return he(this)};var BI=vm;var xei=x(T(),1);var Zqn=x(T(),1);var z8n=x(T(),1);var ZQn=x(T(),1),zI=`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 VQn=x(T(),1),HI=`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 i8n=x(T(),1);var vQn=x(T(),1);var EQn=x(T(),1),Uqe=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),Ys=Uqe;function rf(e){this._billboardCollection=e,this._id=void 0,this._loadState=Ys.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(rf.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===Ys.LOADED}},hasImage:{get:function(){return this._loadState!==Ys.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});rf.prototype.unload=async function(){this._loadState!==Ys.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=Ys.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};rf.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===Ys.LOADING||t.loadState===Ys.LOADED){rf.clone(s,this);return}l(s)||(s=new rf(o),r.set(e,s)),s._id=this._id=e,s._loadState=this._loadState=Ys.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=Ys.ERROR,s._loadError=u,this._id!==e)return;this._loadState=Ys.ERROR,this._loadError=u;return}if(!l(a)||a===-1){if(s._loadState=Ys.FAILED,s._index=-1,this._id!==e)return;this._loadState=Ys.FAILED,this._index=-1;return}s._index=a,s._loadState=Ys.LOADED;let d=c.rectangles[a];s._width=d.width,s._height=d.height,this._id===e&&(this._index=a,this._loadState=Ys.LOADED,this._width=d.width,this._height=d.height,this.dirty=!0)};rf.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)};rf.prototype.loadImageSubRegion=async function(e,t,n){let i;try{this._loadState=Ys.LOADING,i=await n}catch(o){this._loadState=Ys.ERROR,this._loadError=o;return}this._id===e&&(this._loadState=Ys.LOADED,this.setImageSubRegion(i,t))};rf.prototype.setImageSubRegion=function(e,t){if(this._index!==e){if(!l(e)||e===-1){this._loadState=Ys.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}};rf.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};rf.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 Rb=rf;function vi(e,t){e=e??B.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=Dt.clone(n)),l(i)&&(i=Dt.clone(i)),l(o)&&(o=Dt.clone(o)),l(r)&&(r=kt.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??tt.NONE,this._verticalOrigin=e.verticalOrigin??Jn.CENTER,this._horizontalOrigin=e.horizontalOrigin??Yi.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 Rb(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=re.SCENE3D,this._clusterShow=!0,this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??Fr.NONE,this._positionFromParent=!1}var Gfe=vi.SHOW_INDEX=0,ZD=vi.POSITION_INDEX=1,Pfe=vi.PIXEL_OFFSET_INDEX=2,Dqe=vi.EYE_OFFSET_INDEX=3,Oqe=vi.HORIZONTAL_ORIGIN_INDEX=4,Bqe=vi.VERTICAL_ORIGIN_INDEX=5,zqe=vi.SCALE_INDEX=6,Lfe=vi.IMAGE_INDEX_INDEX=7,Wfe=vi.COLOR_INDEX=8,Hqe=vi.ROTATION_INDEX=9,Kqe=vi.ALIGNED_AXIS_INDEX=10,Jqe=vi.SCALE_BY_DISTANCE_INDEX=11,jqe=vi.TRANSLUCENCY_BY_DISTANCE_INDEX=12,Qqe=vi.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,qqe=vi.DISTANCE_DISPLAY_CONDITION=14,$qe=vi.DISABLE_DEPTH_DISTANCE=15;vi.TEXTURE_COORDINATE_BOUNDS=16;var vfe=vi.SDF_INDEX=17,e$e=vi.SPLIT_DIRECTION_INDEX=18;vi.NUMBER_OF_PROPERTIES=19;function Vr(e,t){let n=e._billboardCollection;l(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(vi.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Vr(this,Gfe))}},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,ZD))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),Vr(this,ZD))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;M.equals(t,e)||(M.clone(e,t),Vr(this,Pfe))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Dt.equals(t,e)||(this._scaleByDistance=Dt.clone(e,t),Vr(this,Jqe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Dt.equals(t,e)||(this._translucencyByDistance=Dt.clone(e,t),Vr(this,jqe))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;Dt.equals(t,e)||(this._pixelOffsetScaleByDistance=Dt.clone(e,t),Vr(this,Qqe))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;m.equals(t,e)||(m.clone(e,t),Vr(this,Dqe))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,Vr(this,Oqe))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,Vr(this,Bqe))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,Vr(this,zqe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Vr(this,Wfe))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,Vr(this,Hqe))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;m.equals(t,e)||(m.clone(e,t),Vr(this,Kqe))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){this._width!==e&&(this._width=e,Vr(this,Lfe))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){this._height!==e&&(this._height=e,Vr(this,Lfe))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,Vr(this,Wfe))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){kt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=kt.clone(e,this._distanceDisplayCondition),Vr(this,qqe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Vr(this,$qe))}},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,ZD)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Vr(this,Gfe))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Vr(this,vfe))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Vr(this,vfe))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Vr(this,e$e))}}});vi.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};vi.prototype._updateClamping=function(){vi._updateClamping(this._billboardCollection,this)};var CD=new be;vi._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===tt.NONE||r)&&l(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===tt.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);ZZ(t._heightReference)&&(t._mode===re.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height),t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),be.clone(s,CD);let c=n.getHeight(s,t._heightReference);l(c)&&(CD.height=c),a(CD)};vi.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};vi.prototype.setImage=function(e,t){this._computeImageTextureProperties(e,t),this._imageTexture.loadImage(this._imageId,t,this._imageWidth,this._imageHeight)};vi.prototype.setImageTexture=function(e){Rb.clone(e,this._imageTexture)};var Ffe=512;vi.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 We?n=t._url:l(t.src)&&(n=t.src),this._imageId=e??n??qn(),l(this._width)&&l(this._height)&&!this._sizeInMeters&&t$e(n)&&(this._imageWidth=Math.min(this._width,Ffe),this._imageHeight=Math.min(this._height,Ffe))};function t$e(e){return l(e)?Zh(e)?e.startsWith("data:image/svg+xml"):L0(e)==="svg":!1}vi.prototype.setImageSubRegion=function(e,t){this._imageTexture.addImageSubRegion(e,t)};vi.prototype._setTranslate=function(e){let t=this._translate;M.equals(t,e)||(M.clone(e,t),Vr(this,Pfe))};vi.prototype._getActualPosition=function(){return l(this._clampedPosition)?this._clampedPosition:this._actualPosition};vi.prototype._setActualPosition=function(e){l(this._clampedPosition)||m.clone(e,this._actualPosition),Vr(this,ZD)};var Ife=new se;vi._computeActualPosition=function(e,t,n,i){return l(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===re.SCENE3D?t:(F.multiplyByPoint(i,t,Ife),co.computeActualEllipsoidPosition(n,Ife))};var Xfe=new m;vi._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=F.multiplyByPoint(e,t,Xfe),a=co.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(l(a))return M.add(a,i,a),a};var AD=new M(0,0);vi.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;l(t)||(t=new M),M.clone(this._pixelOffset,AD),M.add(AD,this._translate,AD);let i=n.modelMatrix,o=this._position;if(l(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==re.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,CD);o=a.cartographicToCartesian(c,Xfe),i=F.IDENTITY}return vi._computeScreenSpacePosition(i,o,this._eyeOffset,AD,e,t)};vi.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===Yi.RIGHT?s-=i:e.horizontalOrigin===Yi.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===Jn.BOTTOM||e.verticalOrigin===Jn.BASELINE?a-=o:e.verticalOrigin===Jn.CENTER&&(a-=o*.5),l(n)||(n=new Qe),n.x=s,n.y=a,n.width=i,n.height=o,n};vi.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)&&Dt.equals(this._scaleByDistance,e._scaleByDistance)&&Dt.equals(this._translucencyByDistance,e._translucencyByDistance)&&Dt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&kt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};vi.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 Go=vi;var r8n=x(T(),1),n$e={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},Qo=Object.freeze(n$e);var a8n=x(T(),1),i$e={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Ia=Object.freeze(i$e);var o$e=Go.SHOW_INDEX,KI=Go.POSITION_INDEX,Yfe=Go.PIXEL_OFFSET_INDEX,wfe=Go.EYE_OFFSET_INDEX,r$e=Go.HORIZONTAL_ORIGIN_INDEX,s$e=Go.VERTICAL_ORIGIN_INDEX,a$e=Go.SCALE_INDEX,M_=Go.IMAGE_INDEX_INDEX,Mfe=Go.COLOR_INDEX,c$e=Go.ROTATION_INDEX,l$e=Go.ALIGNED_AXIS_INDEX,kfe=Go.SCALE_BY_DISTANCE_INDEX,Ufe=Go.TRANSLUCENCY_BY_DISTANCE_INDEX,Dfe=Go.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,Ofe=Go.DISTANCE_DISPLAY_CONDITION,d$e=Go.DISABLE_DEPTH_DISTANCE,u$e=Go.TEXTURE_COORDINATE_BOUNDS,Bfe=Go.SDF_INDEX,zfe=Go.SPLIT_DIRECTION_INDEX,VQ=Go.NUMBER_OF_PROPERTIES,No={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 Im(e){e=e??B.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;l(t)||(t=new IT),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(VQ),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new de,this._baseVolumeWC=new de,this._baseVolume2D=new de,this._boundingVolume=new de,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??Qo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=re.SCENE3D,this._buffersUsage=[Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.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(Im.prototype,{length:{get:function(){return RQ(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 Hfe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Im.prototype.add=function(e){let t=new Go(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t};Im.prototype.remove=function(e){return this.contains(e)?(this._billboards[e._index]=void 0,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Im.prototype.removeAll=function(){Hfe(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0};function RQ(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}}Im.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]};Im.prototype.contains=function(e){return l(e)&&e._billboardCollection===this};Im.prototype.get=function(e){return RQ(this),this._billboards[e]};function Nfe(e){let t=e.cache.billboardCollection_indexBufferInstanced;return l(t)||(t=qe.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function m$e(e){let t=e.cache.billboardCollection_vertexBufferInstanced;return l(t)||(t=qe.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Fe.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}Im.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<VQ;++i){let o=n[i]===0?Fe.STATIC_DRAW:Fe.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function h$e(e,t,n,i,o){let r=[{index:No.positionHighAndScale,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[KI]},{index:No.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[KI]},{index:No.compressedAttribute0,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[Yfe]},{index:No.compressedAttribute1,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[Ufe]},{index:No.compressedAttribute2,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[Mfe]},{index:No.eyeOffset,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[wfe]},{index:No.scaleByDistance,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[kfe]},{index:No.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[Dfe]},{index:No.compressedAttribute3,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[Ofe]},{index:No.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[u$e]},{index:No.splitDirection,componentsPerAttribute:1,componentDatatype:K.FLOAT,usage:n[zfe]},{index:No.direction,componentsPerAttribute:2,componentDatatype:K.FLOAT,vertexBuffer:m$e(e)}];return l(i)&&r.push({index:No.a_batchId,componentsPerAttribute:1,componentDatatype:K.FLOAT,bufferUsage:Fe.STATIC_DRAW}),o&&r.push({index:No.sdf,componentsPerAttribute:2,componentDatatype:K.FLOAT,usage:n[Bfe]}),new w0(e,r,t,!0)}var _Q=new Zn;function Kfe(e,t,n,i){let o=n[No.positionHighAndScale],r=n[No.positionLowAndRotation],s=i._getActualPosition();e._mode===re.SCENE3D&&(de.expand(e._baseVolume,s,e._baseVolume),e._boundingVolumeDirty=!0),Zn.fromCartesian(s,_Q);let a=i.scale,c=i.rotation;c!==0&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,a);let d=_Q.high,u=_Q.low;o(i._index,d.x,d.y,d.z,a),r(i._index,u.x,u.y,u.z,c)}var Ky=new M,Fm=32768,EQ=65536,SQ=4096,k_=256,f$e=128,p$e=32,b$e=8,VD=4,g$e=1/256,Jfe=new Qe;function jfe(e,t,n,i){let o=n[No.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,b=i.show&&i.clusterShow;i.color.alpha===0&&(b=!1),p===Jn.BASELINE&&(p=Jn.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&h===Yi.CENTER,e._allVerticalCenter=e._allVerticalCenter&&p===Jn.CENTER;let f=0,y=0;if(i.ready){let v=i.computeTextureCoordinates(Jfe);f=v.x,y=v.y}let _=Math.floor(W.clamp(s,-Fm,Fm)+Fm)*f$e;_+=(h+1)*p$e,_+=(p+1)*b$e,_+=(b?1:0)*VD;let S=Math.floor(W.clamp(a,-Fm,Fm)+Fm)*k_,A=Math.floor(W.clamp(d*VD,-Fm,Fm)+Fm)*k_,Z=(W.clamp(u*VD,-Fm,Fm)+Fm)*g$e,V=Math.floor(Z),E=Math.floor((Z-V)*k_);S+=V,A+=E,Ky.x=f,Ky.y=y;let G=tn.compressTextureCoordinates(Ky);o(i._index,_,S,A,G)}function Qfe(e,t,n,i){let o=n[No.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=W.clamp(h,0,EQ),b=0;Math.abs(m.magnitudeSquared(r)-1)<W.EPSILON6&&(b=tn.octEncodeFloat(r)),a=W.clamp(a,0,1),a=a===1?255:a*255|0,p=p*k_+a,d=W.clamp(d,0,1),d=d===1?255:d*255|0,b=b*k_+d,o(i._index,p,b,s,c)}function ZQ(e,t,n,i){let o=n[No.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)<W.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=tn.encodeRGB8(r),p=tn.encodeRGB8(s),b=U.floatToByte(r.alpha)*EQ+U.floatToByte(s.alpha)*k_+(a*2+c),f=d*VD+u;o(i._index,h,p,b,f)}function CQ(e,t,n,i){let o=n[No.eyeOffset],r=i.eyeOffset,s=r.z;if(i._heightReference!==tt.NONE&&(s*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(r.x),Math.abs(r.y),Math.abs(s)),Ky.x=0,Ky.y=0,i.ready){let c=i.computeTextureCoordinates(Jfe);Ky.x=c.width,Ky.y=c.height}let a=tn.compressTextureCoordinates(Ky);o(i._index,r.x,r.y,s,a)}function qfe(e,t,n,i){let o=n[No.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 $fe(e,t,n,i){let o=n[No.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 epe(e,t,n,i){let o=n[No.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=bm(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(W.clamp(h,0,SQ)),b=Math.floor(W.clamp(u,0,SQ)),f=p*SQ+b;o(i._index,r,s,c,f)}function tpe(e,t,n,i){if(bm(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[No.textureCoordinateBoundsOrLabelTranslate],r=0,s=0;l(i._labelTranslate)&&(r=i._labelTranslate.x,s=i._labelTranslate.y),o(i._index,r,s,0,0)}function y$e(e,t,n,i){if(!l(e._batchTable))return;let o=n[No.a_batchId],r=i._batchIndex;o(i._index,r)}function npe(e,t,n,i){if(!e._sdf)return;let o=n[No.sdf],r=i.outlineColor,s=i.outlineWidth,a=tn.encodeRGB8(r),c=s/Ia.RADIUS,d=U.floatToByte(r.alpha)*EQ+U.floatToByte(c)*k_;o(i._index,a,d)}function ipe(e,t,n,i){let o=n[No.splitDirection],r=0,s=i.splitDirection;l(s)&&(r=s),o(i._index,r)}function x$e(e,t,n,i){Kfe(e,t,n,i),jfe(e,t,n,i),Qfe(e,t,n,i),ZQ(e,t,n,i),CQ(e,t,n,i),qfe(e,t,n,i),$fe(e,t,n,i),epe(e,t,n,i),tpe(e,t,n,i),y$e(e,t,n,i),npe(e,t,n,i),ipe(e,t,n,i)}function AQ(e,t,n,i,o,r){let s;i.mode===re.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=Go._computeActualPosition(d,u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):de.expand(s,h,s))}r&&de.fromPoints(a,s)}function T$e(e,t){let n=t.mode,i=e._billboards,o=e._billboardsToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==re.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===re.SCENE3D||n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&AQ(e,i,i.length,t,r,!0)):n===re.MORPHING?AQ(e,i,i.length,t,r,!0):(n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&AQ(e,o,e._billboardsToUpdateIndex,t,r,!1)}function _$e(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 S$e(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=Le.OVERLAY,i}var A$e=[];Im.prototype.update=function(e){if(RQ(this),!this.show)return;let t=e.context;if(!t.instancedArrays||!(vt.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 v=0;v<i;++v){let I=n[v];l(I.loadError)&&(console.error(`Error loading image for billboard: ${I.loadError}`),I.image=void 0),I.textureDirty&&this._updateBillboard(I,M_),I.show&&(o=o&&I.ready)}let r=this._textureAtlas;if(e.afterRender.push(()=>{if(!this.isDestroyed())return r.update(e.context)}),!l(r.texture))return;T$e(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,b=p.pick;if(u||!b&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let v=0;v<VQ;++v)c[v]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),i>0){this._vaf=h$e(t,i,this._buffersUsage,this._batchTable,this._sdf),h=this._vaf.writers;for(let v=0;v<i;++v){let I=this._billboards[v];I._dirty=!1,I.textureDirty=!1,x$e(this,e,h,I)}this._vaf.commit(Nfe(t))}this._billboardsToUpdateIndex=0}else if(a>0){let v=A$e;v.length=0,(c[KI]||c[c$e]||c[a$e])&&v.push(Kfe),(c[M_]||c[Yfe]||c[r$e]||c[s$e]||c[o$e])&&(v.push(jfe),v.push(CQ)),(c[M_]||c[l$e]||c[Ufe])&&(v.push(Qfe),v.push(ZQ)),(c[M_]||c[Mfe])&&v.push(ZQ),(c[M_]||c[wfe])&&v.push(CQ),c[kfe]&&v.push(qfe),c[Dfe]&&v.push($fe),(c[Ofe]||c[d$e]||c[M_]||c[KI])&&v.push(epe),(c[M_]||c[KI])&&v.push(tpe),c[Bfe]&&v.push(npe),c[zfe]&&v.push(ipe);let I=v.length;if(h=this._vaf.writers,a/i>.1){for(let X=0;X<a;++X){let N=s[X];N._dirty=!1,N.textureDirty=!1;for(let g=0;g<I;++g)v[g](this,e,h,N)}this._vaf.commit(Nfe(t))}else{for(let X=0;X<a;++X){let N=s[X];N._dirty=!1,N.textureDirty=!1;for(let g=0;g<I;++g)v[g](this,e,h,N);this._vaf.subCommit(N._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,de.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,y=F.IDENTITY;e.mode===re.SCENE3D?(y=this.modelMatrix,f=de.clone(this._baseVolumeWC,this._boundingVolume)):f=de.clone(this._baseVolume2D,this._boundingVolume),_$e(this,e,f);let _=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,_){this._blendOption===Qo.OPAQUE||this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Ue.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!0}):this._rsOpaque=void 0;let v=this._blendOption===Qo.TRANSLUCENT;this._blendOption===Qo.TRANSLUCENT||this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Ue.fromCache({depthTest:{enabled:!0,func:v?ne.LEQUAL:ne.LESS},depthMask:v,blending:rn.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let S,A,Z,V,E;if(_||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){S=HI,A=zI,E=["INSTANCED"],l(this._batchTable)&&(E.push("VECTOR_TILE"),S=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(S),A=this._batchTable.getFragmentShaderCallback(!1,void 0)(A)),Z=new Oe({defines:E,sources:[S]}),this._shaderRotation&&Z.defines.push("ROTATION"),this._shaderAlignedAxis&&Z.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&Z.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&Z.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&Z.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&Z.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&Z.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&Z.defines.push("VS_THREE_POINT_DEPTH_CHECK");let v=1-Ia.CUTOFF;this._sdf&&Z.defines.push("SDF");let I=l(this._batchTable)?"VECTOR_TILE":"";this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT&&(V=new Oe({defines:["OPAQUE",I],sources:[A]}),this._shaderClampToGround&&V.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(V.defines.push("SDF"),V.defines.push(`SDF_EDGE ${v}`)),this._sp=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:Z,fragmentShaderSource:V,attributeLocations:No}),V=new Oe({defines:["TRANSLUCENT",I],sources:[A]}),this._shaderClampToGround&&V.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(V.defines.push("SDF"),V.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=$t.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:Z,fragmentShaderSource:V,attributeLocations:No})),this._blendOption===Qo.OPAQUE&&(V=new Oe({defines:[I],sources:[A]}),this._shaderClampToGround&&V.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(V.defines.push("SDF"),V.defines.push(`SDF_EDGE ${v}`)),this._sp=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:Z,fragmentShaderSource:V,attributeLocations:No})),this._blendOption===Qo.TRANSLUCENT&&(V=new Oe({defines:[I],sources:[A]}),this._shaderClampToGround&&V.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(V.defines.push("SDF"),V.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=$t.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:Z,fragmentShaderSource:V,attributeLocations:No})),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 G=e.commandList;if(p.render||p.pick){let v=this._colorCommands,I=this._blendOption===Qo.OPAQUE,X=this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT,N=this._vaf.va,g=N.length,C=this._uniforms,R;l(this._batchTable)?(C=this._batchTable.getUniformMapCallback()(C),R=this._batchTable.getPickId()):R="v_pickColor",v.length=g;let L=X?g*2:g;for(let P=0;P<L;++P){let Y=v[P];l(Y)||(Y=v[P]=new et);let O=I||X&&P%2===0;Y.pass=O||!X?Le.OPAQUE:Le.TRANSLUCENT,Y.owner=this;let k=X?Math.floor(P/2):P;Y.boundingVolume=f,Y.modelMatrix=y,Y.count=N[k].indicesCount,Y.shaderProgram=O?this._sp:this._spTranslucent,Y.uniformMap=C,Y.vertexArray=N[k].va,Y.renderState=O?this._rsOpaque:this._rsTranslucent,Y.debugShowBoundingVolume=this.debugShowBoundingVolume,Y.pickId=R,Y.count=6,Y.instanceCount=i,G.push(Y)}this.debugShowTextureAtlas&&(l(this.debugCommand)||(this.debugCommand=S$e(this,e.context)),G.push(this.debugCommand))}this._allBillboardsReady=o};Im.prototype.isDestroyed=function(){return!1};Im.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(),Hfe(this._billboards),he(this)};var Tu=Im;var t7n=x(T(),1);var K8n=x(T(),1);function Z$e(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 U_=Z$e;function ic(e,t,n,i,o){this._content=e,this._billboard=n,this._label=i,this._polyline=o,this._batchId=t,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),zC(this)}var C$e=new be;Object.defineProperties(ic.prototype,{show:{get:function(){return this._label.show},set:function(e){this._label.show=e,this._billboard.show=e,this._polyline.show=e}},color:{get:function(){return this._color},set:function(e){this._color=U.clone(e,this._color),zC(this)}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=e,zC(this)}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=U.clone(e,this._pointOutlineColor),zC(this)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=e,zC(this)}},labelColor:{get:function(){return this._label.fillColor},set:function(e){this._label.fillColor=e,this._polyline.show=this._label.show&&e.alpha>0}},labelOutlineColor:{get:function(){return this._label.outlineColor},set:function(e){this._label.outlineColor=e}},labelOutlineWidth:{get:function(){return this._label.outlineWidth},set:function(e){this._label.outlineWidth=e}},font:{get:function(){return this._label.font},set:function(e){this._label.font=e}},labelStyle:{get:function(){return this._label.style},set:function(e){this._label.style=e}},labelText:{get:function(){return this._label.text},set:function(e){l(e)||(e=""),this._label.text=e}},backgroundColor:{get:function(){return this._label.backgroundColor},set:function(e){this._label.backgroundColor=e}},backgroundPadding:{get:function(){return this._label.backgroundPadding},set:function(e){this._label.backgroundPadding=e}},backgroundEnabled:{get:function(){return this._label.showBackground},set:function(e){this._label.showBackground=e}},scaleByDistance:{get:function(){return this._label.scaleByDistance},set:function(e){this._label.scaleByDistance=e,this._billboard.scaleByDistance=e}},translucencyByDistance:{get:function(){return this._label.translucencyByDistance},set:function(e){this._label.translucencyByDistance=e,this._billboard.translucencyByDistance=e}},distanceDisplayCondition:{get:function(){return this._label.distanceDisplayCondition},set:function(e){this._label.distanceDisplayCondition=e,this._polyline.distanceDisplayCondition=e,this._billboard.distanceDisplayCondition=e}},heightOffset:{get:function(){return this._heightOffset},set:function(e){let t=this._heightOffset??0,n=this._content.tileset.ellipsoid,i=n.cartesianToCartographic(this._billboard.position,C$e);i.height=i.height-t+e;let o=n.cartographicToCartesian(i);this._billboard.position=o,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],o],this._heightOffset=e}},anchorLineEnabled:{get:function(){return this._polyline.show},set:function(e){this._polyline.show=e}},anchorLineColor:{get:function(){return this._polyline.material.uniforms.color},set:function(e){this._polyline.material.uniforms.color=U.clone(e,this._polyline.material.uniforms.color)}},image:{get:function(){return this._billboardImage},set:function(e){let t=this._billboardImage!==e;this._billboardImage=e,t&&zC(this)}},disableDepthTestDistance:{get:function(){return this._label.disableDepthTestDistance},set:function(e){this._label.disableDepthTestDistance=e,this._billboard.disableDepthTestDistance=e}},horizontalOrigin:{get:function(){return this._billboard.horizontalOrigin},set:function(e){this._billboard.horizontalOrigin=e}},verticalOrigin:{get:function(){return this._billboard.verticalOrigin},set:function(e){this._billboard.verticalOrigin=e}},labelHorizontalOrigin:{get:function(){return this._label.horizontalOrigin},set:function(e){this._label.horizontalOrigin=e}},labelVerticalOrigin:{get:function(){return this._label.verticalOrigin},set:function(e){this._label.verticalOrigin=e}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickIds:{get:function(){let e=this._pickIds;return e[0]=this._billboard.pickId,e[1]=this._label.pickId,e[2]=this._polyline.pickId,e}}});ic.defaultColor=U.WHITE;ic.defaultPointOutlineColor=U.BLACK;ic.defaultPointOutlineWidth=0;ic.defaultPointSize=8;function zC(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??ic.defaultColor,i=e._pointOutlineColor??ic.defaultPointOutlineColor,o=e._pointOutlineWidth??ic.defaultPointOutlineWidth,r=e._pointSize??ic.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(),b=JSON.stringify([h,r,p,o]);t.setImage(b,U_(u,h,p,o,r))}ic.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};ic.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};ic.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};ic.prototype.getPropertyInherited=function(e){return Ga.getPropertyInherited(this._content,this._batchId,e)};ic.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};ic.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};ic.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};ic.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var Eb=ic;var K7n=x(T(),1);var s7n=x(T(),1);function V$e(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 D_;function R$e(e,t){if(e==="")return;t=t??B.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(D_)||(l(u.imageSmoothingEnabled)?D_="imageSmoothingEnabled":l(u.mozImageSmoothingEnabled)?D_="mozImageSmoothingEnabled":l(u.webkitImageSmoothingEnabled)?D_="webkitImageSmoothingEnabled":l(u.msImageSmoothingEnabled)&&(D_="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[D_]=!1,d.style.visibility="hidden",document.body.appendChild(d);let h=V$e(u,e);d.dimensions=h,document.body.removeChild(d),d.style.visibility="";let p=!/\S/.test(e),b=i&&!p?Math.ceil(r/2):0,f=b*2,y=-h.minx+b,_=Math.ceil(h.width)+y+c+b,S=h.height+c+f,A=h.ascent+a+b;if(d.width=_,d.height=S,u.font=n,u.lineJoin="round",u.lineWidth=r,u[D_]=!1,s!==U.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,d.width,d.height)),i){let Z=t.strokeColor??U.BLACK;u.strokeStyle=Z.toCssColorString(),u.strokeText(e,y+a,A)}if(o){let Z=t.fillColor??U.WHITE;u.fillStyle=Z.toCssColorString(),u.fillText(e,y+a,A)}return d}var O_=R$e;var ppe=x(ape(),1);var V7n=x(T(),1);var d7n=x(T(),1),G$e={FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2},ur=Object.freeze(G$e);var cpe={},lpe=0,L$e=256,W$e=new U(.165,.165,.165,.8),v$e=new M(7,5),qs=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function B_(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function jI(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function QI(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function upe(e){let t=cpe[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(QI(n,"line-height"));isNaN(i)&&(i=void 0),t={family:QI(n,"font-family"),size:QI(n,"font-size").replace("px",""),style:QI(n,"font-style"),weight:QI(n,"font-weight"),lineHeight:i},document.body.removeChild(n),lpe<L$e&&(cpe[e._font]=t,lpe++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight,e._lineHeight=t.lineHeight}function sf(e,t){e=e??B.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=Dt.clone(n)),l(i)&&(i=Dt.clone(i)),l(o)&&(o=Dt.clone(o)),l(r)&&(r=kt.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??W$e),this._backgroundPadding=M.clone(e.backgroundPadding??v$e),this._style=e.style??ur.FILL,this._verticalOrigin=e.verticalOrigin??Jn.BASELINE,this._horizontalOrigin=e.horizontalOrigin??Yi.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??tt.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,upe(this),this._updateClamping()}Object.defineProperties(sf.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),jI(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(this._text!==e){this._text=e;let t=sf.filterUnsupportedCharacters(e);this._renderedText=sf.enableRightToLeftDetection?Y$e(t):t,B_(this)}}},font:{get:function(){return this._font},set:function(e){this._font!==e&&(this._font=e,B_(this),upe(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){let t=this._fillColor;U.equals(t,e)||(U.clone(e,t),B_(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),B_(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,B_(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){this._showBackground!==e&&(this._showBackground=e,B_(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),jI(this))}},style:{get:function(){return this._style},set:function(e){this._style!==e&&(this._style=e,B_(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(!Dt.equals(t,e)){this._translucencyByDistance=Dt.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(!Dt.equals(t,e)){this._pixelOffsetScaleByDistance=Dt.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(!Dt.equals(t,e)){this._scaleByDistance=Dt.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,jI(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),jI(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),jI(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!kt.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=kt.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}}});sf.prototype._updateClamping=function(){Go._updateClamping(this._labelCollection,this)};sf.prototype.computeScreenSpacePosition=function(e,t){l(t)||(t=new M);let i=this._labelCollection.modelMatrix,o=l(this._actualClampedPosition)?this._actualClampedPosition:this._position;return Go._computeScreenSpacePosition(i,o,this._eyeOffset,this._pixelOffset,e,t)};sf.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===Jn.BOTTOM||e.verticalOrigin===Jn.BASELINE?o-=s:e.verticalOrigin===Jn.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 b=0;b<p;++b){let f=h[b],y=f.billboard;if(!l(y))continue;let _=t.x+y._translate.x,S=t.y-y._translate.y,A=f.dimensions.width*a,Z=f.dimensions.height*a;e.verticalOrigin===Jn.BOTTOM||e.verticalOrigin===Jn.BASELINE?S-=Z:e.verticalOrigin===Jn.CENTER&&(S-=Z*.5),e._verticalOrigin===Jn.TOP?S+=Ia.PADDING*a:(e._verticalOrigin===Jn.BOTTOM||e._verticalOrigin===Jn.BASELINE)&&(S-=Ia.PADDING*a),i=Math.min(i,_),o=Math.min(o,S),d=Math.max(d,_+A),u=Math.max(u,S+Z)}r=d-i,s=u-o}return l(n)||(n=new Qe),n.x=i,n.y=o,n.width=r,n.height=s,n};sf.filterUnsupportedCharacters=function(e){let t=new RegExp(/[\u0000-\u0008\u000E-\u001F\u00ad\u202a-\u206f\u200b-\u200f]/,"g");return e.replace(t,"")};sf.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)&&Dt.equals(this._translucencyByDistance,e._translucencyByDistance)&&Dt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Dt.equals(this._scaleByDistance,e._scaleByDistance)&&kt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id};sf.prototype.isDestroyed=function(){return!1};sf.enableRightToLeftDetection=!1;function F$e(e,t){let n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,o=[],r="",s=qs.LTR,a="",c=e.length;for(let d=0;d<c;++d){let u=e.charAt(d);t.test(u)?a=qs.RTL:n.test(u)?a=qs.LTR:i.test(u)?a=qs.BRACKETS:a=qs.WEAK,d===0&&(s=a),s===a&&a!==qs.BRACKETS?r+=u:(r!==""&&o.push({Type:s,Word:r}),s=a,r=u)}return o.push({Type:a,Word:r}),o}function I$e(e){return e.split("").reverse().join("")}function qI(e,t,n){return e.slice(0,t)+n+e.slice(t)}function P$e(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}var X$e="\u05D0-\u05EA",N$e="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",dpe=new RegExp(`[${X$e}${N$e}]`);function Y$e(e){let t=e.split(` `),n="";for(let i=0;i<t.length;i++){let o=t[i],r=dpe.test(o.charAt(0)),s=F$e(o,dpe),a=0,c="";for(let d=0;d<s.length;++d){let u=s[d],h=u.Type===qs.BRACKETS?P$e(u.Word):I$e(u.Word);r?u.Type===qs.RTL?(c=h+c,a=0):u.Type===qs.LTR?(c=qI(c,a,u.Word),a+=u.Word.length):(u.Type===qs.WEAK||u.Type===qs.BRACKETS)&&(u.Type===qs.WEAK&&s[d-1].Type===qs.BRACKETS?c=h+c:s[d-1].Type===qs.RTL?(c=h+c,a=0):s.length>d+1?s[d+1].Type===qs.RTL?(c=h+c,a=0):(c=qI(c,a,u.Word),a+=u.Word.length):c=qI(c,0,h)):u.Type===qs.RTL?c=qI(c,a,h):u.Type===qs.LTR?(c+=u.Word,a=c.length):(u.Type===qs.WEAK||u.Type===qs.BRACKETS)&&(d>0&&s[d-1].Type===qs.RTL?s.length>d+1?s[d+1].Type===qs.RTL?c=qI(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 Jy=sf;var bpe=x(mpe(),1);function M$e(){this.dimensions=void 0,this.billboardTexture=void 0,this.billboard=void 0}var k$e=1.2,hpe="ID_WHITE_PIXEL",GQ=new M(4,4),U$e=new Qe(1,1,1,1);function D$e(e,t){let n=t._backgroundBillboardTexture;if(!n.hasImage){let o=document.createElement("canvas");o.width=GQ.x,o.height=GQ.y;let r=o.getContext("2d");r.fillStyle="#fff",r.fillRect(0,0,o.width,o.height),n.loadImage(hpe,o),n.addImageSubRegion(hpe,U$e)}let i=e.add({collection:t});return i.setImageTexture(n),i._positionFromParent=!0,i._labelTranslate=new M,i}var Gb={};function O$e(e,t,n,i,o,r){return Gb.font=t,Gb.fillColor=n,Gb.strokeColor=i,Gb.strokeWidth=o,Gb.padding=Ia.PADDING,Gb.fill=r===ur.FILL||r===ur.FILL_AND_OUTLINE,Gb.stroke=r===ur.OUTLINE||r===ur.FILL_AND_OUTLINE,Gb.backgroundColor=U.BLACK,O_(e,Gb)}function LQ(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 B$e=new bpe.default,z$e=/\s/;function H$e(e,t){let n=t._renderedText,i=B$e.splitGraphemes(n),o=i.length,r=t._glyphs,s=r.length;if(t._relativeSize=t._fontSize/Ia.FONT_SIZE,o<s)for(let p=o;p<s;++p)LQ(e,r[p]);r.length=o;let a=t._backgroundBillboard,c=e._backgroundBillboardCollection;t._showBackground&&!l(a)&&(a=D$e(c,e),t._backgroundBillboard=a),K$e(c,t,a);let d=e._glyphBillboardCollection,u=d.billboardTextureCache,h=e._textDimensionsCache;for(let p=0;p<o;++p){let b=i[p],f=t._verticalOrigin,y=JSON.stringify([b,t._fontFamily,t._fontStyle,t._fontWeight,+f]),_=h[y],S=u.get(y);if(!l(S)||!l(_)){S=new Rb(d),u.set(y,S);let E=`${t._fontStyle} ${t._fontWeight} ${Ia.FONT_SIZE}px ${t._fontFamily}`,G=O$e(b,E,U.WHITE,U.WHITE,0,ur.FILL);if(_=G.dimensions,h[y]=_,G.width>0&&G.height>0&&!z$e.test(b)){let v=(0,ppe.default)(G,{cutoff:Ia.CUTOFF,radius:Ia.RADIUS}),I=G.getContext("2d"),X=G.width,N=G.height,g=I.getImageData(0,0,X,N);for(let C=0;C<X;C++)for(let R=0;R<N;R++){let L=R*X+C,P=v[L]*255,Y=L*4;g.data[Y+0]=P,g.data[Y+1]=P,g.data[Y+2]=P,g.data[Y+3]=P}I.putImageData(g,0,0),S.loadImage(y,G)}}let A=r[p];if(l(A)||(A=new M$e,A.dimensions=_,A.billboardTexture=S,r[p]=A),A.billboardTexture.id!==y&&(A.billboardTexture=S,A.dimensions=_),!S.hasImage){LQ(e,A);continue}let Z=A.billboard,V=e._spareBillboards;l(Z)||(V.length>0?Z=V.pop():(Z=d.add({collection:e}),Z._labelDimensions=new M,Z._labelTranslate=new M,Z._positionFromParent=!0),A.billboard=Z),Z.setImageTexture(S),Z.show=t._show,Z.position=t._position,Z.eyeOffset=t._eyeOffset,Z.pixelOffset=t._pixelOffset,Z.horizontalOrigin=Yi.LEFT,Z.verticalOrigin=t._verticalOrigin,Z.heightReference=t._heightReference,l(t._clampedPosition)&&(Z._clampedPosition=t._clampedPosition),Z.scale=t.totalScale,Z.pickPrimitive=t,Z.id=t._id,Z.translucencyByDistance=t._translucencyByDistance,Z.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,Z.scaleByDistance=t._scaleByDistance,Z.distanceDisplayCondition=t._distanceDisplayCondition,Z.disableDepthTestDistance=t._disableDepthTestDistance,Z._batchIndex=t._batchIndex,Z.outlineColor=t.outlineColor,t.style===ur.FILL_AND_OUTLINE?(Z.color=t._fillColor,Z.outlineWidth=t.outlineWidth):t.style===ur.FILL?(Z.color=t._fillColor,Z.outlineWidth=0):t.style===ur.OUTLINE&&(Z.color=U.TRANSPARENT,Z.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function K$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=Yi.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 fpe(e,t,n){return t===Yi.CENTER?-e/2:t===Yi.RIGHT?-(e+n.x):n.x}var Xr=new M,J$e=new M;function j$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,J$e);h.x/=e._relativeSize,h.y/=e._relativeSize;for(let X=0;X<d;++X){if(n.charAt(X)===` `){r.push(i),++c,i=0;continue}let g=t[X].dimensions;l(g)&&(a=Math.max(a,g.height-g.descent),s=Math.max(s,g.descent),i+=g.width-g.minx,X<d-1&&(i+=t[X+1].dimensions.minx),o=Math.max(o,i))}r.push(i);let p=a+s,b=e.totalScale,f=e._horizontalOrigin,y=e._verticalOrigin,_=0,S=r[_],A=fpe(S,f,h),Z=(l(e._lineHeight)?e._lineHeight:k$e*e._fontSize)/e._relativeSize,V=Z*(c-1),E=o,G=p+V;l(u)&&(E+=h.x*2,G+=h.y*2,u._labelHorizontalOrigin=f),Xr.x=A*b,Xr.y=0;let v=!0,I=0;for(let X=0;X<d;++X){if(n.charAt(X)===` `){++_,I+=Z,S=r[_],A=fpe(S,f,h),Xr.x=A*b,v=!0;continue}let N=t[X],g=N.dimensions;if(l(g)&&(y===Jn.TOP?(Xr.y=g.height-a-h.y,Xr.y+=Ia.PADDING):y===Jn.CENTER?Xr.y=(V+g.height-a)/2:y===Jn.BASELINE?(Xr.y=V,Xr.y-=Ia.PADDING):(Xr.y=V+s+h.y,Xr.y-=Ia.PADDING),Xr.y=(Xr.y-g.descent-I)*b,v&&(Xr.x-=Ia.PADDING*b,v=!1),l(N.billboard)&&(N.billboard._setTranslate(Xr),N.billboard._labelDimensions.x=E,N.billboard._labelDimensions.y=G,N.billboard._labelHorizontalOrigin=f,bm(e.heightReference)&&(N.billboard._labelTranslate=M.clone(Xr,N.billboard._labelTranslate))),X<d-1)){let C=t[X+1];Xr.x+=(g.width-g.minx+C.dimensions.minx)*b}}l(u)&&n.split(` `).join("").length>0&&(f===Yi.CENTER?A=-o/2-h.x:f===Yi.RIGHT?A=-(o+h.x*2):A=0,Xr.x=A*b,y===Jn.TOP?Xr.y=p-a-s:y===Jn.CENTER?Xr.y=(p-a)/2-s:y===Jn.BASELINE?Xr.y=-h.y-s:Xr.y=0,Xr.y=Xr.y*b,u.width=E,u.height=G,u._setTranslate(Xr),u._labelTranslate=M.clone(Xr,u._labelTranslate))}function gpe(e,t){let n=t._glyphs;for(let i=0,o=n.length;i<o;++i)LQ(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??B.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=new Tu({scene:this._scene,textureAtlas:new IT({initialSize:GQ}),coarseDepthTestDistance:e.coarseDepthTestDistance,threePointDepthTestDistance:e.threePointDepthTestDistance});this._backgroundBillboardCollection=t,this._backgroundBillboardTexture=new Rb(t),this._glyphBillboardCollection=new Tu({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??Qo.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 Jy(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),gpe(this,e),!0}return!1};Ep.prototype.removeAll=function(){let e=this._labels;for(let t=0,n=e.length;t<n;++t)gpe(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&&(H$e(this,s),s._rebindAllGlyphs=!1),s._repositionAllGlyphs&&(j$e(s),s._repositionAllGlyphs=!1);let c=s._glyphs.length-a;this._totalGlyphCount+=c}let o=n.length>0?Qo.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 Gp=Ep;var oqn=x(T(),1);var j7n=x(T(),1),$I=`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 T6n=x(T(),1);var c6n=x(T(),1);var Hl={};Hl.numberOfPoints=function(e,t,n){let i=m.distance(e,t);return Math.ceil(i/n)};Hl.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 Q$e=new be;Hl.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,Q$e).height}return i};var q$e=new F,$$e=new m,ype=new m,eet=new an(m.UNIT_X,0),xpe=new m,tet=new an(m.UNIT_X,0),net=new m,iet=new m,vQ=[];function _pe(e,t,n){let i=vQ;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 GD=new be,ED=new be,jy=new m,FQ=new m,oet=new m,WQ=new O0,eP=new Rc;function ret(e,t,n,i,o,r,s,a){let c=i.scaleToGeodeticSurface(e,FQ),d=i.scaleToGeodeticSurface(t,oet),u=Hl.numberOfPoints(e,t,n),h=i.cartesianToCartographic(c,GD),p=i.cartesianToCartographic(d,ED),b=_pe(u,o,r);WQ.setEndPoints(h,p);let f=WQ.surfaceDistance/u,y=a;h.height=o;let _=i.cartographicToCartesian(h,jy);m.pack(_,s,y),y+=3;for(let S=1;S<u;S++){let A=WQ.interpolateUsingSurfaceDistance(S*f,ED);A.height=b[S],_=i.cartographicToCartesian(A,jy),m.pack(_,s,y),y+=3}return y}function set(e,t,n,i,o,r,s,a){let c=i.cartesianToCartographic(e,GD),d=i.cartesianToCartographic(t,ED),u=Hl.numberOfPointsRhumbLine(c,d,n);c.height=0,d.height=0;let h=_pe(u,o,r);eP.ellipsoid.equals(i)||(eP=new Rc(void 0,void 0,i)),eP.setEndPoints(c,d);let p=eP.surfaceDistance/u,b=a;c.height=o;let f=i.cartographicToCartesian(c,jy);m.pack(f,s,b),b+=3;for(let y=1;y<u;y++){let _=eP.interpolateUsingSurfaceDistance(y*p,ED);_.height=h[y],f=i.cartographicToCartesian(_,jy),m.pack(f,s,b),b+=3}return b}Hl.wrapLongitude=function(e,t){let n=[],i=[];if(l(e)&&e.length>0){t=t??F.IDENTITY;let o=F.inverseTransformation(t,q$e),r=F.multiplyByPoint(o,m.ZERO,$$e),s=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_Y,ype),ype),a=an.fromPointNormal(r,s,eet),c=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_X,xpe),xpe),d=an.fromPointNormal(r,c,tet),u=1;n.push(m.clone(e[0]));let h=n[0],p=e.length;for(let b=1;b<p;++b){let f=e[b];if(an.getPointDistance(d,h)<0||an.getPointDistance(d,f)<0){let y=mi.lineSegmentPlane(h,f,a,net);if(l(y)){let _=m.multiplyByScalar(s,5e-9,iet);an.getPointDistance(a,h)<0&&m.negate(_,_),n.push(m.add(y,_,new m)),i.push(u+1),m.negate(_,_),n.push(m.add(y,_,new m)),u=1}}n.push(m.clone(e[b])),u++,h=f}i.push(u)}return{positions:n,lengths:i}};Hl.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 y=i.scaleToGeodeticSurface(t[0],FQ);if(o=r?o[0]:o,o!==0){let _=i.geodeticSurfaceNormal(y,jy);m.multiplyByScalar(_,o,_),m.add(y,_,y)}return[y.x,y.y,y.z]}let s=e.minDistance;if(!l(s)){let y=e.granularity??W.RADIANS_PER_DEGREE;s=W.chordLength(y,i.maximumRadius)}let a=0,c;for(c=0;c<n-1;c++)a+=Hl.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 y=t[c],_=t[c+1],S=r?o[c]:o,A=r?o[c+1]:o;h=ret(y,_,s,i,S,A,u,h)}vQ.length=0;let p=t[n-1],b=i.cartesianToCartographic(p,GD);b.height=r?o[n-1]:o;let f=i.cartographicToCartesian(b,jy);return m.pack(f,u,d-3),u};var Tpe=new be,aet=new be;Hl.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 S=i.scaleToGeodeticSurface(t[0],FQ);if(o=r?o[0]:o,o!==0){let A=i.geodeticSurfaceNormal(S,jy);m.multiplyByScalar(A,o,A),m.add(S,A,S)}return[S.x,S.y,S.z]}let s=e.granularity??W.RADIANS_PER_DEGREE,a=0,c,d=i.cartesianToCartographic(t[0],Tpe),u;for(c=0;c<n-1;c++)u=i.cartesianToCartographic(t[c+1],aet),a+=Hl.numberOfPointsRhumbLine(d,u,s),d=be.clone(u,Tpe);let h=(a+1)*3,p=new Array(h),b=0;for(c=0;c<n-1;c++){let S=t[c],A=t[c+1],Z=r?o[c]:o,V=r?o[c+1]:o;b=set(S,A,s,i,Z,V,p,b)}vQ.length=0;let f=t[n-1],y=i.cartesianToCartographic(f,GD);y.height=r?o[n-1]:o;let _=i.cartographicToCartesian(y,jy);return m.pack(_,p,h-3),p};Hl.generateCartesianArc=function(e){let t=Hl.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};Hl.generateCartesianRhumbArc=function(e){let t=Hl.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 $i=Hl;function _u(e,t){e=e??B.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=ji.fromType(ji.ColorType,{color:new U(1,1,1,1)}));let n=e.positions;l(n)||(n=[]),this._positions=n,this._actualPositions=Oo(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=$i.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(Ape),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=de.fromPoints(this._actualPositions),this._boundingVolumeWC=de.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new de}var Spe=_u.POSITION_INDEX=0,cet=_u.SHOW_INDEX=1,det=_u.WIDTH_INDEX=2,uet=_u.MATERIAL_INDEX=3,tP=_u.POSITION_SIZE_INDEX=4,met=_u.DISTANCE_DISPLAY_CONDITION=5,Ape=_u.NUMBER_OF_PROPERTIES=6;function Lb(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;l(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(_u.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,Lb(this,cet))}},positions:{get:function(){return this._positions},set:function(e){let t=Oo(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)&&Lb(this,tP),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=de.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=de.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),Lb(this,Spe),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Lb(this,uet))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,Lb(this,det))}},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,Lb(this,tP)}}},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){kt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=kt.clone(e,this._distanceDisplayCondition),Lb(this,met))}}});_u.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[Spe]>0||this._propertiesChanged[tP]>0;if((!F.equals(e,this._modelMatrix)||i)&&(this._segments=$i.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=de.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=F.clone(e,this._modelMatrix),this._segments.positions.length!==t)Lb(this,tP);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){Lb(this,tP);break}}};_u.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};_u.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<Ape-1;++t)e[t]=0};_u.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var Pm=_u;var het=Pm.SHOW_INDEX,fet=Pm.WIDTH_INDEX,PQ=Pm.POSITION_INDEX,pet=Pm.MATERIAL_INDEX,Zpe=Pm.POSITION_SIZE_INDEX,bet=Pm.DISTANCE_DISPLAY_CONDITION,Wpe=Pm.NUMBER_OF_PROPERTIES,vd={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 af(e){e=e??B.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(Wpe),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Fe.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(af.prototype,{length:{get:function(){return XQ(this),this._polylines.length}}});af.prototype.add=function(e){let t=new Pm(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};af.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};af.prototype.removeAll=function(){NQ(this),Xpe(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};af.prototype.contains=function(e){return l(e)&&e._polylineCollection===this};af.prototype.get=function(e){return XQ(this),this._polylines[e]};function get(e,t){l(e._batchTable)&&e._batchTable.destroy();let n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:K.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:K.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:K.FLOAT,componentsPerAttribute:2}];e._batchTable=new wT(t,n,e._polylines.length)}var vpe=new Zn,Fpe=new se,Ipe=new M;af.prototype.update=function(e){if(XQ(this),this._polylines.length===0||!this.show)return;Zet(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(vt.maximumVertexTextureImageUnits===0)throw new ue("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");get(this,t),this._createBatchTable=!1}if(this._createVertexArray||xet(this))Rpe(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==re.SCENE3D){let d=c.length;for(let u=0;u<d;++u)i=c[u],i.update()}if(o[Zpe]||o[pet])Rpe(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,b=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[PQ]&&p.writeUpdate(b,i,this._positionBuffer,n);break}b+=u[f].lengthOfPositions}if((o[het]||o[fet])&&this._batchTable.setBatchedAttribute(i._index,0,new M(i._width,i._show)),this._batchTable.attributes.length>2){if(o[PQ]||o[Zpe]){let f=e.mode===re.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,y=Zn.fromCartesian(f.center,vpe),_=se.fromElements(y.low.x,y.low.y,y.low.z,f.radius,Fpe);this._batchTable.setBatchedAttribute(i._index,2,y.high),this._batchTable.setBatchedAttribute(i._index,3,_)}if(o[bet]){let f=Ipe;f.x=0,f.y=Number.MAX_VALUE;let y=i.distanceDisplayCondition;l(y)&&(f.x=y.near,f.y=y.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<Wpe;++c)o[c]=0;let r=F.IDENTITY;e.mode===re.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!l(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=Ue.fromCache({depthMask:a,depthTest:{enabled:a}})),(!l(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=Ue.fromCache({blending:rn.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;yet(this,e,c,r)}};var nP=new de,Cpe=new de;function yet(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(),b=d.length;for(let f=0;f<b;++f){let y=d[f],_=y.buckets,S=_.length;for(let A=0;A<S;++A){let Z=_[A],V=Z.offset,E=Z.bucket.shaderProgram,G=Z.bucket.polylines,v=G.length,I,X,N=0,g,C;for(let R=0;R<v;++R){let L=G[R],P=_et(L._material);if(P!==I){if(l(I)&&N>0){let D=X.isTranslucent();a>=s?(g=new et({owner:e}),n.push(g)):g=n[a],++a,C=Gt(p(X._uniforms),e._uniformMap),g.boundingVolume=de.clone(nP,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=E,g.vertexArray=y.va,g.renderState=D?e._translucentRS:e._opaqueRS,g.pass=D?Le.TRANSLUCENT:Le.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=C,g.count=N,g.offset=V,V+=N,N=0,c=!0,r.push(g)}X=L._material,X.update(o),I=P}let Y=L._locatorBuckets,O=Y.length;for(let D=0;D<O;++D){let w=Y[D];w.locator===Z&&(N+=w.count)}let k;t.mode===re.SCENE3D?k=L._boundingVolumeWC:t.mode===re.COLUMBUS_VIEW?k=L._boundingVolume2D:t.mode===re.SCENE2D?l(L._boundingVolume2D)&&(k=de.clone(L._boundingVolume2D,Cpe),k.center.x=0):l(L._boundingVolumeWC)&&l(L._boundingVolume2D)&&(k=de.union(L._boundingVolumeWC,L._boundingVolume2D,Cpe)),c?(c=!1,de.clone(k,nP)):de.union(k,nP,nP)}l(I)&&N>0&&(a>=s?(g=new et({owner:e}),n.push(g)):g=n[a],++a,C=Gt(p(X._uniforms),e._uniformMap),g.boundingVolume=de.clone(nP,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=E,g.vertexArray=y.va,g.renderState=X.isTranslucent()?e._translucentRS:e._opaqueRS,g.pass=X.isTranslucent()?Le.TRANSLUCENT:Le.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=C,g.count=N,g.offset=V,c=!0,r.push(g)),I=void 0}}n.length=a}af.prototype.isDestroyed=function(){return!1};af.prototype.destroy=function(){return Ppe(this),NQ(this),Xpe(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};function xet(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[PQ]?(i.bufferUsage!==Fe.STREAM_DRAW&&(t=!0,i.bufferUsage=Fe.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Fe.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Fe.STATIC_DRAW):i.frameCount--),t}var Vpe=[0,0,0];function Rpe(e,t,n){e._createVertexArray=!1,NQ(e),Ppe(e),Aet(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,d=[[]],u=0,h=e._polylineBuckets,p,b;for(p in h)h.hasOwnProperty(p)&&(b=h[p],b.updateShader(t,r,s),u+=b.lengthOfPositions);if(u>0){let f=e._mode,y=new Float32Array(6*u*3),_=new Float32Array(u*4),S,A=0,Z=0,V=0;for(p in h)if(h.hasOwnProperty(p)){b=h[p],b.write(y,_,A,Z,V,r,t,n),f===re.MORPHING&&(l(S)||(S=new Float32Array(6*u*3)),b.writeForMorph(S,A));let C=b.lengthOfPositions;A+=6*C*3,Z+=C*4,V+=C*4,c=b.updateIndices(i,a,d,c)}let E=e._positionBufferUsage.bufferUsage,G=Fe.STATIC_DRAW;e._positionBuffer=qe.createVertexBuffer({context:t,typedArray:y,usage:E});let v;l(S)&&(v=qe.createVertexBuffer({context:t,typedArray:S,usage:E})),e._texCoordExpandAndBatchIndexBuffer=qe.createVertexBuffer({context:t,typedArray:_,usage:G});let I=3*Float32Array.BYTES_PER_ELEMENT,X=4*Float32Array.BYTES_PER_ELEMENT,N=0,g=i.length;for(let C=0;C<g;++C)if(o=i[C],o.length>0){let R=new Uint16Array(o),L=qe.createIndexBuffer({context:t,typedArray:R,usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT});N+=a[C];let P=6*(C*(I*W.SIXTY_FOUR_KILOBYTES)-N*I),Y=I+P,O=I+Y,k=I+O,D=I+k,w=I+D,z=C*(X*W.SIXTY_FOUR_KILOBYTES)-N*X,J=[{index:vd.position3DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:P,strideInBytes:6*I},{index:vd.position3DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:Y,strideInBytes:6*I},{index:vd.position2DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:P,strideInBytes:6*I},{index:vd.position2DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:Y,strideInBytes:6*I},{index:vd.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:O,strideInBytes:6*I},{index:vd.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:k,strideInBytes:6*I},{index:vd.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:O,strideInBytes:6*I},{index:vd.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:k,strideInBytes:6*I},{index:vd.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:D,strideInBytes:6*I},{index:vd.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:w,strideInBytes:6*I},{index:vd.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:D,strideInBytes:6*I},{index:vd.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:K.FLOAT,offsetInBytes:w,strideInBytes:6*I},{index:vd.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:K.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:z}],ee,H,te,$;f===re.SCENE3D?(H=e._positionBuffer,ee="vertexBuffer",te=Vpe,$="value"):f===re.SCENE2D||f===re.COLUMBUS_VIEW?(H=Vpe,ee="value",te=e._positionBuffer,$="vertexBuffer"):(H=v,ee="vertexBuffer",te=e._positionBuffer,$="vertexBuffer"),J[0][ee]=H,J[1][ee]=H,J[2][$]=te,J[3][$]=te,J[4][ee]=H,J[5][ee]=H,J[6][$]=te,J[7][$]=te,J[8][ee]=H,J[9][ee]=H,J[10][$]=te,J[11][$]=te;let pe=new Bn({context:t,attributes:J,indexBuffer:L});e._vertexArrays.push({va:pe,buckets:d[C]})}}}function Tet(e,t){return t instanceof Lt?t.id:t}var LD=[];function _et(e){let t=ji._uniformList[e.type],n=t.length;LD.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];LD[i]=r,LD[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(LD,Tet)}`}function Aet(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 Lp(c,t,n)),d.addPolyline(a)}}}function Zet(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 XQ(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 NQ(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 Ppe(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}af.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function Xpe(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function IQ(e,t,n){this.count=e,this.offset=t,this.bucket=n}function Lp(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}Lp.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};Lp.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 Oe({defines:i,sources:[`in vec4 v_pickColor; `,this.material.shaderSource,BT]}),r=t.getVertexShaderCallback()($I),s=new Oe({defines:i,sources:[Gl,r]});this.shaderProgram=$t.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:vd})};function Npe(e){return m.dot(m.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(an.ORIGIN_ZX_PLANE)===Jt.INTERSECTING}Lp.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===re.SCENE3D||!Npe(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,Xm=new m,Nm=new m,WD=new m,Cet=new se,Vet=new M;Lp.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,d=a.ellipsoid.maximumRadius*W.PI,u=this.polylines,h=u.length;for(let p=0;p<h;++p){let b=u[p],f=b.width,y=b.show&&f>0,_=b._index,S=this.getSegments(b,a),A=S.positions,Z=S.lengths,V=A.length,E=b.getPickId(s).color,G=0,v=0,I;for(let O=0;O<V;++O){O===0?b._loop?I=A[V-2]:(I=WD,m.subtract(A[0],A[1],I),m.add(A[0],I,I)):I=A[O-1],m.clone(I,Xm),m.clone(A[O],ma),O===V-1?b._loop?I=A[1]:(I=WD,m.subtract(A[V-1],A[V-2],I),m.add(A[V-1],I,I)):I=A[O+1],m.clone(I,Nm);let k=Z[G];O===v+k&&(v+=k,++G);let D=O-v===0,w=O===v+Z[G]-1;c===re.SCENE2D&&(Xm.z=0,ma.z=0,Nm.z=0),(c===re.SCENE2D||c===re.MORPHING)&&(D||w)&&d-Math.abs(ma.x)<1&&((ma.x<0&&Xm.x>0||ma.x>0&&Xm.x<0)&&m.clone(ma,Xm),(ma.x<0&&Nm.x>0||ma.x>0&&Nm.x<0)&&m.clone(ma,Nm));let z=D?2:0,J=w?2:4;for(let ee=z;ee<J;++ee){Zn.writeElements(ma,e,n),Zn.writeElements(Xm,e,n+6),Zn.writeElements(Nm,e,n+12);let H=ee-2<0?-1:1;t[o]=O/(V-1),t[o+1]=2*(ee%2)-1,t[o+2]=H,t[o+3]=_,n+=18,o+=4}}let X=Cet;X.x=U.floatToByte(E.red),X.y=U.floatToByte(E.green),X.z=U.floatToByte(E.blue),X.w=U.floatToByte(E.alpha);let N=Vet;N.x=f,N.y=y?1:0;let g=c===re.SCENE2D?b._boundingVolume2D:b._boundingVolumeWC,C=Zn.fromCartesian(g.center,vpe),R=C.high,L=se.fromElements(C.low.x,C.low.y,C.low.z,g.radius,Fpe),P=Ipe;P.x=0,P.y=Number.MAX_VALUE;let Y=b.distanceDisplayCondition;l(Y)&&(P.x=Y.near,P.y=Y.far),r.setBatchedAttribute(_,0,N),r.setBatchedAttribute(_,1,X),r.attributes.length>2&&(r.setBatchedAttribute(_,2,R),r.setBatchedAttribute(_,3,L),r.setBatchedAttribute(_,4,P))}};var Ret=new m,Eet=new m,Get=new m,Epe=new m;Lp.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 b;p===0?s._loop?b=a[d-2]:(b=Epe,m.subtract(a[0],a[1],b),m.add(a[0],b,b)):b=a[p-1],b=F.multiplyByPoint(n,b,Eet);let f=F.multiplyByPoint(n,a[p],Ret),y;p===d-1?s._loop?y=a[1]:(y=Epe,m.subtract(a[d-1],a[d-2],y),m.add(a[d-1],y,y)):y=a[p+1],y=F.multiplyByPoint(n,y,Get);let _=c[u];p===h+_&&(h+=_,++u);let S=p-h===0,A=p===h+c[u]-1,Z=S?2:0,V=A?2:4;for(let E=Z;E<V;++E)Zn.writeElements(f,e,t),Zn.writeElements(b,e,t+6),Zn.writeElements(y,e,t+12),t+=18}}};var Let=new Array(1);Lp.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new IQ(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 b;if(this.mode===re.SCENE3D){b=Let;let y=p._actualPositions.length;if(y>0)b[0]=y;else continue}else b=p._segments.lengths;let f=b.length;if(f>0){let y=0;for(let _=0;_<f;++_){let S=b[_]-1;for(let A=0;A<S;++A)c+4>W.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:y}),y=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new IQ(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),y+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:y}),c+4>W.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new IQ(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};Lp.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 HC={positions:void 0,lengths:void 0},Gpe=new Array(1),Wet=new m,vet=new be;Lp.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===re.SCENE3D)return Gpe[0]=n.length,HC.positions=n,HC.lengths=Gpe,HC;Npe(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=Wet;for(let d=0;d<s;++d)a=n[d],c=F.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,vet)));if(o.length>0){e._boundingVolume2D=de.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new m(d.z,d.x,d.y)}return HC.positions=o,HC.lengths=e._segments.lengths,HC};var Lpe;Lp.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*W.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=Lpe,c=6*s*3;!l(a)||a.length<c?a=Lpe=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,b=0,f=0,y;s=u.length;for(let _=0;_<s;++_){_===0?t._loop?y=u[s-2]:(y=WD,m.subtract(u[0],u[1],y),m.add(u[0],y,y)):y=u[_-1],m.clone(y,Xm),m.clone(u[_],ma),_===s-1?t._loop?y=u[1]:(y=WD,m.subtract(u[s-1],u[s-2],y),m.add(u[s-1],y,y)):y=u[_+1],m.clone(y,Nm);let S=h[b];_===f+S&&(f+=S,++b);let A=_-f===0,Z=_===f+h[b]-1;o===re.SCENE2D&&(Xm.z=0,ma.z=0,Nm.z=0),(o===re.SCENE2D||o===re.MORPHING)&&(A||Z)&&r-Math.abs(ma.x)<1&&((ma.x<0&&Xm.x>0||ma.x>0&&Xm.x<0)&&m.clone(ma,Xm),(ma.x<0&&Nm.x>0||ma.x>0&&Nm.x<0)&&m.clone(ma,Nm));let V=A?2:0,E=Z?2:4;for(let G=V;G<E;++G)Zn.writeElements(ma,a,p),Zn.writeElements(Xm,a,p+6),Zn.writeElements(Nm,a,p+12),p+=18}n.copyFromArrayView(a,18*Float32Array.BYTES_PER_ELEMENT*e)}};var cf=af;function Qy(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 Tu({batchTable:e.batchTable,scene:e.scene}),this._labelCollection=new Gp({batchTable:e.batchTable,scene:e.scene}),this._polylineCollection=new cf,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Qy.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 Fet(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+ce.packedLength+ie.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,ce.pack(n,s,a),a+=ce.packedLength,ie.pack(t,s,a),s}var Iet=new $n("createVectorTilePoints",5),Pet=new m;function Xet(e,t){let n=e._positions,i=e._packedBuffer;l(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=Fet(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,b=e._heightReference??tt.NONE;for(let f=0;f<p;++f){let y=h[f],_=m.unpack(n,f*3,Pet),S=c.add();S.position=_,S._batchIndex=y,S.heightReference=b;let A=d.add();A.text=" ",A.position=_,A._batchIndex=y,A.heightReference=b;let Z=u.add();Z.positions=[m.clone(_),m.clone(_)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}Qy.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 Eb(e,c,d,u,h)}};Qy.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 Net(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=Eb.defaultPointSize,s.color=Eb.defaultColor,s.pointOutlineColor=Eb.defaultPointOutlineColor,s.pointOutlineWidth=Eb.defaultPointOutlineWidth,s.labelColor=U.WHITE,s.labelOutlineColor=U.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=ur.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=Yi.CENTER,s.verticalOrigin=Jn.CENTER,s.labelHorizontalOrigin=Yi.RIGHT,s.labelVerticalOrigin=Jn.BASELINE}}var Yet=new U,wet=new U,Met=new U,ket=new U,Uet=new U,Det=new U,iP=new Dt,oP=new Dt,YQ=new kt;Qy.prototype.applyStyle=function(e,t){if(!l(e)){Net(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,Yet)),l(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,wet)),l(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),l(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,Met)),l(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,ket)),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,Uet)),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)?(iP.near=a.x,iP.nearValue=a.y,iP.far=a.z,iP.farValue=a.w,s.scaleByDistance=iP):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(l(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);l(a)?(oP.near=a.x,oP.nearValue=a.y,oP.far=a.z,oP.farValue=a.w,s.translucencyByDistance=oP):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(l(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);l(a)?(YQ.near=a.x,YQ.far=a.y,s.distanceDisplayCondition=YQ):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,Det)),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))}};Qy.prototype.update=function(e){if(!this._ready&&(l(this._promise)||(this._promise=Xet(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)};Qy.prototype.isDestroyed=function(){return!1};Qy.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 rP=Qy;var Yqn=x(T(),1);function Wb(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(Wb.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 Oet(e){let t=new Float64Array(3+m.packedLength+ie.packedLength+ce.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,ce.pack(e._rectangle,t,n),t}function Bet(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=en.unpack(t,n),n+=en.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 b=0;b<h;++b)p[b]=t[n++];s[a]=new pp({color:c,offset:d,count:u,batchIds:p})}}var zet=new $n("createVectorTilePolygons",5),Het=new U;function Ket(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(ce.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let b=e._batchTable,f=s.length;for(let y=0;y<f;++y){let _=b.getColor(y,Het);s[y]=_.toRgba()}a=e._packedBuffer=Oet(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=zet.scheduleTask(d,c);if(l(p))return p.then(b=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(b.packedBuffer),y=f[0];Bet(e,f),e._indices=Ne.getSizeInBytes(y)===2?new Uint16Array(b.indices):new Uint32Array(b.indices),e._indexOffsets=new Uint32Array(b.indexOffsets),e._indexCounts=new Uint32Array(b.indexCounts),e._batchedPositions=new Float32Array(b.positions),e._vertexBatchIds=new Uint16Array(b.batchIds),Jet(e),e._ready=!0}).catch(b=>{e.isDestroyed()||(e._error=b)})}function Jet(e){l(e._primitive)||(e._primitive=new u_({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)}Wb.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Wb.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Wb.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Wb.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Wb.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=Ket(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)};Wb.prototype.isDestroyed=function(){return!1};Wb.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var sP=Wb;var d$n=x(T(),1);var Mqn=x(T(),1),aP=`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 lf(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(lf.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function jet(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+ce.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,ce.pack(t,a,c),c+=ce.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var Qet=new $n("createVectorTilePolylines",5),KC={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function qet(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=jet(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=Qet.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===Ne.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),$et(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function $et(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=qe.createVertexBuffer({context:t,typedArray:i,usage:Fe.STATIC_DRAW}),u=qe.createVertexBuffer({context:t,typedArray:n,usage:Fe.STATIC_DRAW}),h=qe.createVertexBuffer({context:t,typedArray:o,usage:Fe.STATIC_DRAW}),p=qe.createVertexBuffer({context:t,typedArray:r,usage:Fe.STATIC_DRAW}),b=qe.createVertexBuffer({context:t,typedArray:s,usage:Fe.STATIC_DRAW}),f=qe.createIndexBuffer({context:t,typedArray:a,usage:Fe.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Ne.UNSIGNED_SHORT:Ne.UNSIGNED_INT}),y=[{index:KC.previousPosition,vertexBuffer:d,componentDatatype:K.FLOAT,componentsPerAttribute:3},{index:KC.currentPosition,vertexBuffer:u,componentDatatype:K.FLOAT,componentsPerAttribute:3},{index:KC.nextPosition,vertexBuffer:h,componentDatatype:K.FLOAT,componentsPerAttribute:3},{index:KC.expandAndWidth,vertexBuffer:p,componentDatatype:K.FLOAT,componentsPerAttribute:2},{index:KC.a_batchId,vertexBuffer:b,componentDatatype:K.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new Bn({context:t,attributes:y,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 cP=new F,Ype=new m;function ett(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,cP),F.multiplyByPoint(cP,e._center,Ype),F.setTranslation(cP,Ype,cP),cP},u_highlightColor:function(){return e._highlightColor}})}function ttt(e){if(l(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Ue.fromCache({blending:rn.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var ntt=`uniform vec4 u_highlightColor; void main() { out_FragColor = u_highlightColor; } `;function itt(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(aP),o=n.getFragmentShaderCallback(!1,void 0,!1)(ntt),r=new Oe({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Gl,i]}),s=new Oe({defines:["VECTOR_TILE"],sources:[o]});e._sp=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:KC})}function ott(e,t){if(!l(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new et({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:Le.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}lf.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 b=(h+s)*3;u[d++]=i[b],u[d++]=i[b+1],u[d++]=i[b+2]}}return u};lf.prototype.getPositions=function(e){return lf.getPolylinePositions(this,e)};lf.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)}};lf.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function rtt(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 stt=new U,att=U.WHITE,ctt=!0;lf.prototype.applyStyle=function(e,t){if(!l(e)){rtt(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,stt):att,s.show=l(e.show)?e.show.evaluate(s):ctt}};lf.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=qet(this,t)),l(this._error)){let i=this._error;throw this._error=void 0,i}return}ett(this,t),itt(this,t),ttt(this);let n=e.passes;(n.render||n.pick)&&ott(this,e)};lf.prototype.isDestroyed=function(){return!1};lf.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),he(this)};var z_=lf;var K$n=x(T(),1);var m$n=x(T(),1),lP=`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 f$n=x(T(),1),dP=`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 vb(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(Wi._defaultMinTerrainHeight,Wi._defaultMaxTerrainHeight),this._boundingVolume=en.fromRectangle(e.rectangle,Wi._defaultMinTerrainHeight,Wi._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(vb.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function ltt(e,t,n){let i=Wi.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;en.fromRectangle(c,o,r,n,a)}function dtt(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+ce.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,ce.pack(t,a,c),c+=ce.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var utt=new $n("createVectorTileClampedPolylines"),qy={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function mtt(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=dtt(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=utt.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===Ne.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),htt(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function htt(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=qe.createVertexBuffer({context:t,typedArray:n,usage:Fe.STATIC_DRAW}),p=qe.createVertexBuffer({context:t,typedArray:i,usage:Fe.STATIC_DRAW}),b=qe.createVertexBuffer({context:t,typedArray:o,usage:Fe.STATIC_DRAW}),f=qe.createVertexBuffer({context:t,typedArray:r,usage:Fe.STATIC_DRAW}),y=qe.createVertexBuffer({context:t,typedArray:s,usage:Fe.STATIC_DRAW}),_=qe.createVertexBuffer({context:t,typedArray:a,usage:Fe.STATIC_DRAW}),S=qe.createVertexBuffer({context:t,typedArray:c,usage:Fe.STATIC_DRAW}),A=qe.createIndexBuffer({context:t,typedArray:d,usage:Fe.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?Ne.UNSIGNED_SHORT:Ne.UNSIGNED_INT}),Z=[{index:qy.startEllipsoidNormal,vertexBuffer:h,componentDatatype:K.FLOAT,componentsPerAttribute:3},{index:qy.endEllipsoidNormal,vertexBuffer:p,componentDatatype:K.FLOAT,componentsPerAttribute:3},{index:qy.startPositionAndHeight,vertexBuffer:b,componentDatatype:K.FLOAT,componentsPerAttribute:4},{index:qy.endPositionAndHeight,vertexBuffer:f,componentDatatype:K.FLOAT,componentsPerAttribute:4},{index:qy.startFaceNormalAndVertexCorner,vertexBuffer:y,componentDatatype:K.FLOAT,componentsPerAttribute:4},{index:qy.endFaceNormalAndHalfWidth,vertexBuffer:_,componentDatatype:K.FLOAT,componentsPerAttribute:4},{index:qy.a_batchId,vertexBuffer:S,componentDatatype:K.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new Bn({context:t,attributes:Z,indexBuffer:A}),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 uP=new F,wpe=new m;function ftt(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,uP),F.multiplyByPoint(uP,e._center,wpe),F.setTranslation(uP,wpe,uP),uP},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function Mpe(e){return Ue.fromCache({cull:{enabled:!0,face:wi.FRONT},blending:rn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ni.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ni.EQUAL,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},reference:Ht.CESIUM_3D_TILE_MASK,mask:Ht.CESIUM_3D_TILE_MASK}})}function ptt(e){l(e._rs)||(e._rs=Mpe(!1),e._rs3DTiles=Mpe(!0))}function btt(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(lP),o=n.getFragmentShaderCallback(!1,void 0,!0)(dP),r=new Oe({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Gl,i]}),s=new Oe({defines:["VECTOR_TILE"],sources:[o]});e._sp=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:qy})}function gtt(e,t){let n=e._command;if(!l(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new et({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:Le.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=et.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Le.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)}vb.prototype.getPositions=function(e){return z_.getPolylinePositions(this,e)};vb.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)}};vb.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function ytt(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 xtt=new U,Ttt=U.WHITE,_tt=!0;vb.prototype.applyStyle=function(e,t){if(!l(e)){ytt(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,xtt):Ttt,s.show=l(e.show)?e.show.evaluate(s):_tt}};function Stt(e){return Wi.initialize().then(function(){ltt(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}vb.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=Stt(this).then(mtt(this,t))),l(this._error)){let i=this._error;throw this._error=void 0,i}return}ftt(this,t),btt(this,t),ptt(this);let n=e.passes;(n.render||n.pick)&>t(this,e)};vb.prototype.isDestroyed=function(){return!1};vb.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),he(this)};var mP=vb;var eei=x(T(),1);var wQ=32767,Att=new be,Ztt=new m;function Ctt(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);tn.zigZagDeltaDecode(s,a,c);let d=new Float64Array(e.length);for(let u=0;u<r;++u){let h=s[u],p=a[u],b=c[u],f=W.lerp(t.west,t.east,h/wQ),y=W.lerp(t.south,t.north,p/wQ),_=W.lerp(n,i,b/wQ),S=be.fromRadians(f,y,_,Att),A=o.cartographicToCartesian(S,Ztt);m.pack(A,d,u*3)}return d}var hP=Ctt;function uf(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,Ltt(this,i,o)}Object.defineProperties(uf.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 Vtt(e){return function(t,n){l(e._polygons)&&e._polygons.updateCommands(t,n)}}function Rtt(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 ue("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 df=Uint32Array.BYTES_PER_ELEMENT;function Ett(e){return new z_(e)}function Gtt(e){return new mP(e)}function Ltt(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=df;let r=o.getUint32(n,!0);if(r!==1)throw new ue(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=df;let s=o.getUint32(n,!0);if(n+=df,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=df,a===0)throw new ue("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=df;let d=o.getUint32(n,!0);n+=df;let u=o.getUint32(n,!0);n+=df;let h=o.getUint32(n,!0);n+=df;let p=o.getUint32(n,!0);n+=df;let b=o.getUint32(n,!0);n+=df;let f=o.getUint32(n,!0);n+=df;let y=Zr(i,n,a);n+=a;let _=new Uint8Array(t,n,c);n+=c;let S,A;d>0&&(S=Zr(i,n,d),n+=d,u>0&&(A=new Uint8Array(t,n,u),A=new Uint8Array(A),n+=u));let Z=y.POLYGONS_LENGTH??0,V=y.POLYLINES_LENGTH??0,E=y.POINTS_LENGTH??0,G=Z+V+E,v=new Oh(e,G,S,A,Vtt(e));if(e._batchTable=v,G===0)return;let I=new Qh(y,_),X=I.getGlobalProperty("REGION");if(!l(X))throw new ue("Feature table global property: REGION must be defined");let N=ce.unpack(X),g=X[4],C=X[5],R=e._tile.computedTransform,L=I.getGlobalProperty("RTC_CENTER",K.FLOAT,3);l(L)?(L=m.unpack(L),F.multiplyByPoint(R,L,L)):(L=ce.center(N),L.height=W.lerp(g,C,.5),L=ie.WGS84.cartographicToCartesian(L));let P=Rtt(y,_);if(n+=(4-n%4)%4,Z>0){I.featuresLength=Z;let O=I.getPropertyArray("POLYGON_COUNTS",K.UNSIGNED_INT,1)??I.getPropertyArray("POLYGON_COUNT",K.UNSIGNED_INT,1);if(!l(O))throw new ue("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let k=I.getPropertyArray("POLYGON_INDEX_COUNTS",K.UNSIGNED_INT,1)??I.getPropertyArray("POLYGON_INDEX_COUNT",K.UNSIGNED_INT,1);if(!l(k))throw new ue("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let D=O.reduce(function(te,$){return te+$*2},0),w=k.reduce(function(te,$){return te+$},0),z=new Uint32Array(t,n,w);n+=h;let J=new Uint16Array(t,n,D);n+=p;let ee,H;l(y.POLYGON_MINIMUM_HEIGHTS)&&l(y.POLYGON_MAXIMUM_HEIGHTS)&&(ee=I.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",K.FLOAT,1),H=I.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",K.FLOAT,1)),e._polygons=new sP({positions:J,counts:O,indexCounts:k,indices:z,minimumHeight:g,maximumHeight:C,polygonMinimumHeights:ee,polygonMaximumHeights:H,center:L,rectangle:N,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:v,batchIds:P.polygons,modelMatrix:R})}let Y=e._tileset;if(V>0){I.featuresLength=V;let O=I.getPropertyArray("POLYLINE_COUNTS",K.UNSIGNED_INT,1)??I.getPropertyArray("POLYLINE_COUNT",K.UNSIGNED_INT,1);if(!l(O))throw new ue("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let k=I.getPropertyArray("POLYLINE_WIDTHS",K.UNSIGNED_SHORT,1);if(!l(k)){k=new Uint16Array(V);for(let ee=0;ee<V;++ee)k[ee]=2}let D=O.reduce(function(ee,H){return ee+H*3},0),w=new Uint16Array(t,n,D);n+=b;let z=Y.examineVectorLinesFunction;if(l(z)){let ee=hP(new Uint16Array(w),N,g,C,ie.WGS84);Wtt(ee,O,P.polylines,v,e.url,z)}let J=Ett;l(Y.classificationType)&&(J=Gtt),e._polylines=J({positions:w,widths:k,counts:O,batchIds:P.polylines,minimumHeight:g,maximumHeight:C,center:L,rectangle:N,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:v,classificationType:Y.classificationType,keepDecodedPositions:Y.vectorKeepDecodedPositions})}if(E>0){let O=new Uint16Array(t,n,E*3);n+=f,e._points=new rP({positions:O,batchIds:P.points,minimumHeight:g,maximumHeight:C,rectangle:N,batchTable:v,heightReference:Y.heightReference,scene:Y.scene})}}function MQ(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}}uf.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};uf.prototype.getFeature=function(e){return l(this._features)||MQ(this),this._features[e]};uf.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)};uf.prototype.applyStyle=function(e){l(this._features)||MQ(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)};uf.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)||MQ(this),this._batchTable.update(e,t),this._ready=!0)};uf.prototype.pick=function(e,t,n){};uf.prototype.getPolylinePositions=function(e){let t=this._polylines;if(l(t))return t.getPositions(e)};uf.prototype.isDestroyed=function(){return!1};uf.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 Wtt(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 fP=uf;var Zoi=x(T(),1);var Yei=x(T(),1);var _ei=x(T(),1);var mf=class mf{constructor(){Hn(this,"_collection",null);Hn(this,"_index",-1);Hn(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(mf.Layout.FEATURE_ID_U32)}set featureId(t){this._setUint32(mf.Layout.FEATURE_ID_U32,t)}get show(){return this._getUint8(mf.Layout.SHOW_U8)===1}set show(t){this._setUint8(mf.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(mf.Layout.DIRTY_U8)===1}set _dirty(t){this._collection._primitiveView.setUint8(this._byteOffset+mf.Layout.DIRTY_U8,t?1:0),t&&this._collection._makeDirty(this._index)}get _pickId(){return this._getUint32(mf.Layout.PICK_ID_U32)}set _pickId(t){this._setUint32(mf.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()}}};Hn(mf,"Layout",{FEATURE_ID_U32:0,SHOW_U8:4,DIRTY_U8:5,PICK_ID_U32:8,__BYTE_LENGTH:12});var kQ=mf,ts=kQ;var Wei=x(T(),1);var JC=class JC{constructor(t=B.EMPTY_OBJECT){Hn(this,"_renderContext",null);this.show=t.show??!0,this.modelMatrix=F.clone(t.modelMatrix??F.IDENTITY),this.boundingVolume=new de,this.boundingVolumeWC=new de,this._allowPicking=t.allowPicking??!1,this.debugShowBoundingVolume=t.debugShowBoundingVolume??!1,this._primitiveCount=0,this._primitiveCountMax=t.primitiveCountMax??JC.DEFAULT_CAPACITY,this._primitiveView=null,this._positionCount=0,this._positionCountMax=t.vertexCountMax??JC.DEFAULT_CAPACITY,this._positionView=null,this._materialView=null,this._dirtyOffset=0,this._dirtyCount=0,this._dirtyBoundingVolume=!1,this._allocatePrimitiveBuffer(),this._allocatePositionBuffer(t.positionDatatype??K.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=K.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);de.fromVertices(n,m.ZERO,3,this.boundingVolume),de.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=B.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){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}};Hn(JC,"DEFAULT_CAPACITY",1024),Hn(JC,"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 UQ=JC,oc=UQ;var{ERR_CAPACITY:Xei}=oc.Error,vtt=new m,vD=class vD extends ts{constructor(){super(...arguments);Hn(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPosition(n.getPosition(vtt)),i}get vertexOffset(){return this._getUint32(vD.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(),[])}}};Hn(vD,"Layout",{...ts.Layout,POSITION_OFFSET_U32:ts.Layout.__BYTE_LENGTH,__BYTE_LENGTH:ts.Layout.__BYTE_LENGTH+4});var DQ=vD,Fd=DQ;var Wti=x(T(),1);var Ati=x(T(),1);var kei=x(T(),1),pP=`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 Dei=x(T(),1),bP=`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 qei=x(T(),1);var Hei=x(T(),1);var gP=class{constructor(t=B.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}}};Hn(gP,"Layout",{COLOR_U32:0,OUTLINE_COLOR_U32:4,OUTLINE_WIDTH_U8:8,__BYTE_LENGTH:12}),Hn(gP,"DEFAULT_MATERIAL");var Kl=gP;var yP=class yP extends Kl{constructor(t=B.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}}};Hn(yP,"Layout",{...Kl.Layout,SIZE_U8:Kl.Layout.__BYTE_LENGTH,__BYTE_LENGTH:Kl.Layout.__BYTE_LENGTH+4}),Hn(yP,"DEFAULT_MATERIAL",Object.freeze(new yP));var OQ=yP,Fb=OQ;var Ib={positionHigh:0,positionLow:1,pickColor:2,showSizeAndColor:3,outlineWidthAndOutlineColor:4},Pb=new Fd,xP=new Fb,TP=new U,kpe=new m,H_=new Zn;function Ftt(e,t,n){let i=t.context;if(n=n||{destroy:Ptt},!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 b=h,f=h+p;b<f;b++)if(e.get(b,Pb),!!Pb._dirty){if(e._allowPicking&&Pb._pickId===0){let y=i.createPickId({collection:e,index:b,get primitive(){return e.get(this.index,new Fd)}});Pb._pickId=y.key,r.push(y)}Pb.getPosition(kpe),Zn.fromCartesian(kpe,H_),Pb.getMaterial(xP),U.fromRgba(Pb._pickId,TP),s[b*3]=H_.high.x,s[b*3+1]=H_.high.y,s[b*3+2]=H_.high.z,a[b*3]=H_.low.x,a[b*3+1]=H_.low.y,a[b*3+2]=H_.low.z,c[b*4]=U.floatToByte(TP.red),c[b*4+1]=U.floatToByte(TP.green),c[b*4+2]=U.floatToByte(TP.blue),c[b*4+3]=U.floatToByte(TP.alpha),d[b*3]=Pb.show?1:0,d[b*3+1]=xP.size,d[b*3+2]=tn.encodeRGB8(xP.color),u[b*2]=xP.outlineWidth,u[b*2+1]=tn.encodeRGB8(xP.outlineColor),Pb._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){for(let o in Ib)if(Object.hasOwn(Ib,o)){let r=o;n.vertexArray.copyAttributeFromRange(Ib[r],n.attributeArrays[r],e._dirtyOffset,e._dirtyCount)}}}else{let{attributeArrays:o}=n;n.vertexArray=new Bn({context:i,attributes:[{index:Ib.positionHigh,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Fe.STATIC_DRAW})},{index:Ib.positionLow,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Fe.STATIC_DRAW})},{index:Ib.pickColor,componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:qe.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Fe.STATIC_DRAW})},{index:Ib.showSizeAndColor,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.showSizeAndColor,context:i,usage:Fe.STATIC_DRAW})},{index:Ib.outlineWidthAndOutlineColor,componentDatatype:K.FLOAT,componentsPerAttribute:2,vertexBuffer:qe.createVertexBuffer({typedArray:o.outlineWidthAndOutlineColor,context:i,usage:Fe.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Ue.fromCache({blending:rn.ALPHA_BLEND,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=$t.fromCache({context:i,vertexShaderSource:new Oe({sources:[pP]}),fragmentShaderSource:new Oe({sources:[bP]}),attributeLocations:Ib})),(!l(n.command)||Itt(e,n.command))&&(n.command=new et({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:ve.POINTS,pass:Le.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 Itt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=de.equals(e.boundingVolumeWC,t._boundingVolume);return e.primitiveCount!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function Ptt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Ue.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var _P=Ftt;var BQ=class e extends oc{constructor(t=B.EMPTY_OBJECT){super({...t,vertexCountMax:t.primitiveCountMax})}_getCollectionClass(){return e}_getPrimitiveClass(){return Fd}_getMaterialClass(){return Fb}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax})}add(t,n=new Fd){return super.add(t,n),n._setUint32(Fd.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=_P(this,t,this._renderContext))}},Xb=BQ;var wti=x(T(),1);var{ERR_CAPACITY:Pti,ERR_RESIZE:Xti,ERR_OUT_OF_RANGE:Nti}=oc.Error,Ym=class Ym extends ts{constructor(){super(...arguments);Hn(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(Ym.Layout.POSITION_OFFSET_U32)}get vertexCount(){return this._getUint32(Ym.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(Ym.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(Ym.Layout.HOLE_OFFSET_U32)}get holeCount(){return this._getUint32(Ym.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(Ym.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(Ym.Layout.TRIANGLE_OFFSET_U32)}get triangleCount(){return this._getUint32(Ym.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(Ym.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())}}};Hn(Ym,"Layout",{...ts.Layout,POSITION_OFFSET_U32:ts.Layout.__BYTE_LENGTH,POSITION_COUNT_U32:ts.Layout.__BYTE_LENGTH+4,HOLE_OFFSET_U32:ts.Layout.__BYTE_LENGTH+8,HOLE_COUNT_U32:ts.Layout.__BYTE_LENGTH+12,TRIANGLE_OFFSET_U32:ts.Layout.__BYTE_LENGTH+16,TRIANGLE_COUNT_U32:ts.Layout.__BYTE_LENGTH+20,__BYTE_LENGTH:ts.Layout.__BYTE_LENGTH+24});var zQ=Ym,Pa=zQ;var Lni=x(T(),1);var Tni=x(T(),1);var Uti=x(T(),1),SP=`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 Oti=x(T(),1),AP=`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 Kti=x(T(),1);var FD=class FD extends Kl{constructor(t=B.EMPTY_OBJECT){super(t)}};Hn(FD,"DEFAULT_MATERIAL",Object.freeze(new FD));var HQ=FD,Nb=HQ;var $y={positionHigh:0,positionLow:1,pickColor:2,showAndColor:3},ws=new Pa,Upe=new Nb,ZP=new U,Dpe=new m,K_=new Zn;function Xtt(e,t,n){let i=t.context;if(n=n||{destroy:wtt},!l(n.attributeArrays)||!l(n.indexArray)){let{vertexCountMax:o,triangleCountMax:r}=e;n.indexArray=Ne.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 b=s,f=s+a;b<f;b++){if(e.get(b,ws),!ws._dirty)continue;if(e._allowPicking&&ws._pickId===0){let E=i.createPickId({collection:e,index:b,get primitive(){return e.get(b,new Pa)}});ws._pickId=E.key,r.push(E)}let y=ws.triangleOffset,_=ws.vertexOffset,S=ws.getTriangles();for(let E=0,G=ws.triangleCount;E<G;E++)c[y*3]=_+S[E*3],c[y*3+1]=_+S[E*3+1],c[y*3+2]=_+S[E*3+2],y++;let A=ws.show,Z=ws.getPositions();ws.getMaterial(Upe);let V=tn.encodeRGB8(Upe.color);U.fromRgba(ws._pickId,ZP);for(let E=0,G=ws.vertexCount;E<G;E++)m.fromArray(Z,E*3,Dpe),Zn.fromCartesian(Dpe,K_),d[_*3]=K_.high.x,d[_*3+1]=K_.high.y,d[_*3+2]=K_.high.z,u[_*3]=K_.low.x,u[_*3+1]=K_.low.y,u[_*3+2]=K_.low.z,h[_*4]=U.floatToByte(ZP.red),h[_*4+1]=U.floatToByte(ZP.green),h[_*4+2]=U.floatToByte(ZP.blue),h[_*4+3]=U.floatToByte(ZP.alpha),p[_*2]=A?1:0,p[_*2+1]=V,_++;ws._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){let{indexOffset:o,indexCount:r,vertexOffset:s,vertexCount:a}=Ytt(e);n.vertexArray.copyIndexFromRange(n.indexArray,o,r);for(let c in $y)if(Object.hasOwn($y,c)){let d=c;n.vertexArray.copyAttributeFromRange($y[d],n.attributeArrays[d],s,a)}}}else{let{attributeArrays:o}=n;n.vertexArray=new Bn({context:i,indexBuffer:qe.createIndexBuffer({context:i,typedArray:n.indexArray,usage:Fe.STATIC_DRAW,indexDatatype:Ne.fromTypedArray(n.indexArray)}),attributes:[{index:$y.positionHigh,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Fe.STATIC_DRAW})},{index:$y.positionLow,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Fe.STATIC_DRAW})},{index:$y.pickColor,componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:qe.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Fe.STATIC_DRAW})},{index:$y.showAndColor,componentDatatype:K.FLOAT,componentsPerAttribute:2,vertexBuffer:qe.createVertexBuffer({typedArray:o.showAndColor,context:i,usage:Fe.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Ue.fromCache({blending:rn.DISABLED,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=$t.fromCache({context:i,vertexShaderSource:new Oe({sources:[SP]}),fragmentShaderSource:new Oe({sources:[AP]}),attributeLocations:$y})),(!l(n.command)||Ntt(e,n.command))&&(n.command=new et({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:ve.TRIANGLES,pass:Le.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 Ntt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=de.equals(e.boundingVolumeWC,t._boundingVolume);return e.triangleCount*3!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function Ytt(e){let{_dirtyOffset:t,_dirtyCount:n}=e;e.get(t,ws);let i=ws.vertexOffset,o=ws.triangleOffset*3;e.get(t+n-1,ws);let r=ws.vertexOffset+ws.vertexCount-i,s=(ws.triangleOffset+ws.triangleCount)*3-o;return{indexOffset:o,indexCount:s,vertexOffset:i,vertexCount:r}}function wtt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Ue.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var CP=Xtt;var{ERR_CAPACITY:Eni}=oc.Error,KQ=class e extends oc{constructor(t=B.EMPTY_OBJECT){super(t),this._holeCount=0,this._holeCountMax=t.holeCountMax??oc.DEFAULT_CAPACITY,this._holeIndexView=null,this._triangleCount=0,this._triangleCountMax=t.triangleCountMax??oc.DEFAULT_CAPACITY,this._triangleIndexView=null,this._allocateHoleIndexBuffer(),this._allocateTriangleIndexBuffer()}_getCollectionClass(){return e}_getPrimitiveClass(){return Pa}_getMaterialClass(){return Nb}_allocateHoleIndexBuffer(){this._holeIndexView=Ne.createTypedArray(this._positionCountMax,this._holeCountMax)}_allocateTriangleIndexBuffer(){this._triangleIndexView=Ne.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 Pa){super.add(t,n);let i=this._positionCount;n._setUint32(Pa.Layout.POSITION_OFFSET_U32,i),n._setUint32(Pa.Layout.POSITION_COUNT_U32,0);let o=this._holeCount;n._setUint32(Pa.Layout.HOLE_OFFSET_U32,o),n._setUint32(Pa.Layout.HOLE_COUNT_U32,0);let r=this._triangleCount;return n._setUint32(Pa.Layout.TRIANGLE_OFFSET_U32,r),n._setUint32(Pa.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=CP(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}},Yb=KQ;var Nni=x(T(),1);var{ERR_RESIZE:Ini,ERR_CAPACITY:Pni}=oc.Error,jC=class jC extends ts{constructor(){super(...arguments);Hn(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPositions(n.getPositions()),i}get vertexOffset(){return this._getUint32(jC.Layout.POSITION_OFFSET_U32)}get vertexCount(){return this._getUint32(jC.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(jC.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())}}};Hn(jC,"Layout",{...ts.Layout,POSITION_OFFSET_U32:ts.Layout.__BYTE_LENGTH,POSITION_COUNT_U32:ts.Layout.__BYTE_LENGTH+4,__BYTE_LENGTH:ts.Layout.__BYTE_LENGTH+8});var JQ=jC,Jl=JQ;var Vii=x(T(),1);var xii=x(T(),1);var Mni=x(T(),1),VP=`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 Uni=x(T(),1),RP=`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 zni=x(T(),1);var EP=class EP extends Kl{constructor(t=B.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}}};Hn(EP,"Layout",{...Kl.Layout,WIDTH_U8:Kl.Layout.__BYTE_LENGTH,__BYTE_LENGTH:Kl.Layout.__BYTE_LENGTH+4}),Hn(EP,"DEFAULT_MATERIAL",Object.freeze(new EP));var jQ=EP,wb=jQ;var wm={positionHigh:0,positionLow:1,prevPositionHigh:2,prevPositionLow:3,nextPositionHigh:4,nextPositionLow:5,pickColor:6,showColorWidthAndTexCoord:7},rc=new Jl,QQ=new wb,GP=new U,QC=new m,J_=new m,j_=new m,Q_=new Zn,q_=new Zn,$_=new Zn;function Mtt(e,t,n){let i=t.context;if(n=n||{destroy:Dtt},!l(n.attributeArrays)||!l(n.indexArray)){let o=e.vertexCountMax-e.primitiveCount,r=e.vertexCountMax*2;n.indexArray=Ne.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,b=s.nextPositionHigh,f=s.nextPositionLow,y=s.pickColor,_=s.showColorWidthAndTexCoord;for(let S=o,A=o+r;S<A;S++){if(e.get(S,rc),!rc._dirty)continue;if(e._allowPicking&&rc._pickId===0){let I=i.createPickId({collection:e,index:S,get primitive(){return e.get(S,new Jl)}});rc._pickId=I.key,a.push(I)}let Z=rc.getPositions();rc.getMaterial(QQ);let V=tn.encodeRGB8(QQ.color);U.fromRgba(rc._pickId,GP);let E=rc.show,G=rc.vertexOffset*2,v=(rc.vertexOffset-S)*6;for(let I=0,X=rc.vertexCount;I<X;I++){let N=I===0,g=I===X-1;m.fromArray(Z,I*3,QC),N?(m.fromArray(Z,(I+1)*3,j_),m.subtract(QC,j_,J_),m.add(QC,J_,J_)):g?(m.fromArray(Z,(I-1)*3,J_),m.subtract(QC,J_,j_),m.add(QC,j_,j_)):(m.fromArray(Z,(I-1)*3,J_),m.fromArray(Z,(I+1)*3,j_)),g||(c[v]=G,c[v+1]=G+1,c[v+2]=G+2,c[v+3]=G+2,c[v+4]=G+1,c[v+5]=G+3,v+=6),Zn.fromCartesian(QC,Q_),Zn.fromCartesian(J_,q_),Zn.fromCartesian(j_,$_);for(let C=0;C<2;C++)d[G*3]=Q_.high.x,d[G*3+1]=Q_.high.y,d[G*3+2]=Q_.high.z,u[G*3]=Q_.low.x,u[G*3+1]=Q_.low.y,u[G*3+2]=Q_.low.z,h[G*3]=q_.high.x,h[G*3+1]=q_.high.y,h[G*3+2]=q_.high.z,p[G*3]=q_.low.x,p[G*3+1]=q_.low.y,p[G*3+2]=q_.low.z,b[G*3]=$_.high.x,b[G*3+1]=$_.high.y,b[G*3+2]=$_.high.z,f[G*3]=$_.low.x,f[G*3+1]=$_.low.y,f[G*3+2]=$_.low.z,y[G*4]=U.floatToByte(GP.red),y[G*4+1]=U.floatToByte(GP.green),y[G*4+2]=U.floatToByte(GP.blue),y[G*4+3]=U.floatToByte(GP.alpha),_[G*4]=E?1:0,_[G*4+1]=V,_[G*4+2]=QQ.width,_[G*4+3]=I/(X-1),G++}rc._dirty=!1}}if(l(n.vertexArray)){if(e._dirtyCount>0){let{indexOffset:o,indexCount:r,vertexOffset:s,vertexCount:a}=Utt(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 Bn({context:i,indexBuffer:qe.createIndexBuffer({context:i,typedArray:n.indexArray,usage:Fe.STATIC_DRAW,indexDatatype:Ne.fromTypedArray(n.indexArray)}),attributes:[{index:wm.positionHigh,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionHigh,context:i,usage:Fe.STATIC_DRAW})},{index:wm.positionLow,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.positionLow,context:i,usage:Fe.STATIC_DRAW})},{index:wm.prevPositionHigh,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.prevPositionHigh,context:i,usage:Fe.STATIC_DRAW})},{index:wm.prevPositionLow,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.prevPositionLow,context:i,usage:Fe.STATIC_DRAW})},{index:wm.nextPositionHigh,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.nextPositionHigh,context:i,usage:Fe.STATIC_DRAW})},{index:wm.nextPositionLow,componentDatatype:K.FLOAT,componentsPerAttribute:3,vertexBuffer:qe.createVertexBuffer({typedArray:o.nextPositionLow,context:i,usage:Fe.STATIC_DRAW})},{index:wm.pickColor,componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:qe.createVertexBuffer({typedArray:o.pickColor,context:i,usage:Fe.STATIC_DRAW})},{index:wm.showColorWidthAndTexCoord,componentDatatype:K.FLOAT,componentsPerAttribute:4,vertexBuffer:qe.createVertexBuffer({typedArray:o.showColorWidthAndTexCoord,context:i,usage:Fe.STATIC_DRAW})}]})}return l(n.renderState)||(n.renderState=Ue.fromCache({blending:rn.DISABLED,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=$t.fromCache({context:i,vertexShaderSource:new Oe({sources:[Gl,VP]}),fragmentShaderSource:new Oe({sources:[RP]}),attributeLocations:wm})),(!l(n.command)||ktt(e,n.command))&&(n.command=new et({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:ve.TRIANGLES,pass:Le.OPAQUE,pickId:"v_pickColor",owner:e,count:Ope(e),modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolumeWC,debugShowBoundingVolume:e.debugShowBoundingVolume})),t.commandList.push(n.command),e._dirtyCount=0,e._dirtyOffset=0,n}function ktt(e,t){let n=F.equals(e.modelMatrix,t._modelMatrix),i=de.equals(e.boundingVolumeWC,t._boundingVolume);return Ope(e)!==t._count||e.debugShowBoundingVolume!==t.debugShowBoundingVolume||!n||!i}function Ope(e){return(e.vertexCount-e.primitiveCount)*6}function Utt(e){let{_dirtyOffset:t,_dirtyCount:n}=e;e.get(t,rc);let i=rc.vertexOffset*2,r=(rc.vertexOffset-t)*6;e.get(t+n-1,rc);let s=(rc.vertexOffset+rc.vertexCount)*2-i,c=(s/2-n)*6;return{indexOffset:r,indexCount:c,vertexOffset:i,vertexCount:s}}function Dtt(){let e=this;if(l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Ue.removeFromCache(e.renderState),l(e.pickIds))for(let t of e.pickIds)t.destroy()}var LP=Mtt;var qQ=class e extends oc{_getCollectionClass(){return e}_getPrimitiveClass(){return Jl}_getMaterialClass(){return wb}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax,vertexCountMax:t.vertexCountMax})}add(t,n=new Jl){super.add(t,n);let i=this._positionCount;return n._setUint32(Jl.Layout.POSITION_OFFSET_U32,i),n._setUint32(Jl.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=LP(this,t,this._renderContext))}},ex=qQ;var kii=x(T(),1);var vii=x(T(),1);function qC(e,t){this._conditionsExpression=Be(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,Btt(this,t)}Object.defineProperties(qC.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function Ott(e,t){this.condition=e,this.expression=t}function Btt(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 Ott(new Am(a,t),new Am(c,t)))}e._runtimeConditions=n}qC.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)}};qC.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)}};qC.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};qC.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];oi(e,o.condition.getVariables()),oi(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var WP=qC;function tx(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,ztt(this,e)}function ztt(e,t){t=Be(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??B.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new Am(o[r],i))}e._meta=n,e._ready=!0}function mr(e,t){let n=(e._style??B.EMPTY_OBJECT).defines;if(l(t)){if(typeof t=="boolean"||typeof t=="number")return new Am(String(t));if(typeof t=="string")return new Am(t,n);if(l(t.conditions))return new WP(t,n)}else return;return t}function hr(e){if(l(e)){if(l(e.expression))return e.expression;if(l(e.conditionsExpression))return Be(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(tx.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=mr(this,e),this._style.show=hr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=mr(this,e),this._style.color=hr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=mr(this,e),this._style.pointSize=hr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=mr(this,e),this._style.pointOutlineColor=hr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=mr(this,e),this._style.pointOutlineWidth=hr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=mr(this,e),this._style.labelColor=hr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=mr(this,e),this._style.labelOutlineColor=hr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=mr(this,e),this._style.labelOutlineWidth=hr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=mr(this,e),this._style.font=hr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=mr(this,e),this._style.labelStyle=hr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=mr(this,e),this._style.labelText=hr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=mr(this,e),this._style.backgroundColor=hr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=mr(this,e),this._style.backgroundPadding=hr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=mr(this,e),this._style.backgroundEnabled=hr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=mr(this,e),this._style.scaleByDistance=hr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=mr(this,e),this._style.translucencyByDistance=hr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=mr(this,e),this._style.distanceDisplayCondition=hr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=mr(this,e),this._style.heightOffset=hr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=mr(this,e),this._style.anchorLineEnabled=hr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=mr(this,e),this._style.anchorLineColor=hr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=mr(this,e),this._style.image=hr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=mr(this,e),this._style.disableDepthTestDistance=hr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=mr(this,e),this._style.horizontalOrigin=hr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=mr(this,e),this._style.verticalOrigin=hr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=mr(this,e),this._style.labelHorizontalOrigin=hr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=mr(this,e),this._style.labelVerticalOrigin=hr(this._labelVerticalOrigin)}},lineWidth:{get:function(){return this._lineWidth},set:function(e){this._lineWidth=mr(this,e),this._style.lineWidth=hr(this._lineWidth)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});tx.fromUrl=function(e){return We.createIfNeeded(e).fetchJson(e).then(function(n){return new tx(n)})};tx.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)};tx.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)};tx.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)};tx.prototype.getVariables=function(){let e=[];return l(this.color)&&l(this.color.getVariables)&&oi(e,this.color.getVariables()),l(this.show)&&l(this.show.getVariables)&&oi(e,this.show.getVariables()),l(this.pointSize)&&l(this.pointSize.getVariables)&&oi(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var Mb=tx;var ooi=x(T(),1);var Bpe=new m,zpe=new Fd,Hpe=new Jl,Kpe=new Pa;function Htt(e,t){let n=t.scene.nodes,i={collections:[],collectionLocalMatrices:[]};for(let o=0;o<n.length;o++)Jpe(e,n[o],F.IDENTITY,i);return i}function Ktt(e){let t=e.BYTES_PER_ELEMENT*8;return Math.pow(2,t)-1}function Jtt(e,t){let n=Ktt(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 jtt(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=St.getAttributeBySemantic(e,ot.POSITION).count,s=e.indices?ol.readIndicesAsTypedArray(e.indices):void 0;if(i===ve.POINTS)t.pointPrimitiveCount+=n.count,t.pointVertexCount+=n.count;else if(i===ve.LINE_STRIP)t.polylinePrimitiveCount+=n.count,t.polylineVertexCount+=s.length-(n.count-1);else if(i===ve.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 ue(`Unexpected primitive type: ${i}`);return t}function Qtt(e,t,n){let i=t.vector,o=St.getAttributeBySemantic(t,ot.POSITION),r=o.typedArray??ol.readAttributeAsTypedArray(o),s=r.length/3,a=t.indices?ol.readIndicesAsTypedArray(t.indices):void 0,c=t.featureIds?.[0],d,u;if(c instanceof Tn.FeatureIdAttribute&&(d=St.getAttributeBySemantic(t,ot.FEATURE_ID,c.setIndex),u=d.typedArray??ol.readAttributeAsTypedArray(d)),n instanceof Xb)for(let h=0,p=a?a.length:s;h<p;h++){let b=a?a[h]:h;m.fromArray(r,b*3,Bpe),n.add({position:Bpe},zpe);let f=Math.trunc(u[b]);f!==c.nullFeatureId&&(zpe.featureId=f)}else if(n instanceof ex)Jtt(a,(h,p)=>{let b=a[h],f=r.subarray(b*3,(b+p)*3);n.add({positions:f},Hpe);let y=Math.trunc(u[b]);y!==c.nullFeatureId&&(Hpe.featureId=y)});else if(n instanceof Yb){let h=i.polygonAttributeOffsets,p=i.polygonIndicesOffsets,b=i.polygonHoleCounts,f=i.polygonHoleOffsets,y=h.length;for(let _=0;_<y;_++){let S=h[_],A=_+1<y?h[_+1]:s,Z=r.subarray(S*3,A*3),V;if(l(b)&&b[_]>0){let X=b[_];V=f.slice(_,_+X);for(let N=0;N<X;N++)V[_]-=S}let E=p[_],G=_+1<y?p[_+1]:a.length,v=a.slice(E,G);for(let X=0;X<G;X++)v[X]-=S;n.add({positions:Z,triangles:v,holes:V},Kpe);let I=Math.trunc(u[S]);I!==c.nullFeatureId&&(Kpe.featureId=I)}}}function Jpe(e,t,n,i){let o=St.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=jtt(d);u===ve.POINTS?h=new Xb({primitiveCountMax:p.pointPrimitiveCount}):u===ve.LINE_STRIP?h=new ex({primitiveCountMax:p.polylinePrimitiveCount,vertexCountMax:p.polylineVertexCount}):u===ve.TRIANGLES&&(h=new Yb({primitiveCountMax:p.polygonPrimitiveCount,vertexCountMax:p.polygonVertexCount,holeCountMax:p.polygonHoleCount,triangleCountMax:p.polygonTriangleCount})),i.collections.push(h),i.collectionLocalMatrices.push(F.clone(r)),Qtt(e,d,h)}let a=t.children;for(let c=0;c<a.length;c++)Jpe(e,a[c],r,i)}var vP=Htt;var $Q=new Fd,e8=new Jl,t8=new Pa,FP=new Fb,n8=new wb,jpe=new Nb,Qpe=new F,i8=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 Xb).reduce((t,n)=>t+n.primitiveCount,0)}get trianglesLength(){return this._collections.filter(t=>t instanceof Yb).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 Mb({color:n}))}applyStyle(t){let n=t.show?.evaluate(null)??!0,i=t.color?.evaluate(null,new U),o=a=>a instanceof Xb,r=a=>a instanceof ex,s=a=>a instanceof Yb;U.clone(i,FP.color),FP.size=t.pointSize?.evaluate(null),FP.outlineWidth=t.pointOutlineWidth?.evaluate(null),t.pointOutlineColor?.evaluate(null,FP.outlineColor);for(let a of this._collections.filter(o))for(let c=0,d=a.primitiveCount;c<d;c++)a.get(c,$Q),$Q.show=n,$Q.setMaterial(FP);U.clone(i,n8.color),n8.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,e8),e8.show=n,e8.setMaterial(n8);U.clone(i,jpe.color);for(let a of this._collections.filter(s))for(let c=0,d=a.primitiveCount;c<d;c++)a.get(c,t8),t8.show=n,t8.setMaterial(jpe)}update(t,n){if(l(this._decodeModel)&&!this._ready){let i=this._decodeModel;i.modelMatrix=this._tile.computedTransform,i.update(n),i.ready&&($tt(this),this._decodeModel&&(this._decodeModel.destroy(),this._decodeModel=void 0),this._ready=!0)}F.multiplyTransformation(this._tile.computedTransform,this._modelMatrix,Qpe);for(let i=0;i<this._collections.length;i++)F.multiplyTransformation(Qpe,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=qtt(t,n,r,o),a=await yu.fromGltfAsync(s);return a.show=!1,r._decodeModel=a,r}};function qtt(e,t,n,i){return{gltf:i,basePath:n._resource,cull:!1,releaseGltfJson:!0,opaquePass:Le.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 $tt(e){let t=e._decodeModel.sceneGraph.components,n=St.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new F);F.multiplyTransformation(t.transform,n,e._modelMatrix);let i=vP(this,t);e._collections=i.collections,e._collectionLocalMatrices=i.collectionLocalMatrices}var $C=i8;var Ori=x(T(),1);var vri=x(T(),1);var Loi=x(T(),1);function sc(){}sc._maxSortingConcurrency=Math.max(dn.hardwareConcurrency-1,1);sc._sorterTaskProcessor=void 0;sc._taskProcessorReady=!1;sc._error=void 0;sc._getSorterTaskProcessor=function(){if(!l(sc._sorterTaskProcessor)){let e=new $n("gaussianSplatSorter",sc._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?sc._taskProcessorReady=!0:sc._error=new ue("Gaussian splat sorter could not be initialized.")}).catch(t=>{sc._error=t}),sc._sorterTaskProcessor=e}return sc._sorterTaskProcessor};sc.radixSortIndexes=function(e){let t=sc._getSorterTaskProcessor();if(l(sc._error))throw sc._error;if(sc._taskProcessorReady)return t.scheduleTask(e,[e.primitive.positions.buffer])};var eS=sc;var Xoi=x(T(),1);function ac(){}ac._maxSortingConcurrency=Math.max(dn.hardwareConcurrency-1,1);ac._textureTaskProcessor=void 0;ac._taskProcessorReady=!1;ac._error=void 0;ac._getTextureTaskProcessor=function(){if(!l(ac._textureTaskProcessor)){let e=new $n("gaussianSplatTextureGenerator",ac._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?ac._taskProcessorReady=!0:ac._error=new ue("Gaussian splat sorter could not be initialized.")}).catch(t=>{ac._error=t}),ac._textureTaskProcessor=e}return ac._textureTaskProcessor};ac.generateFromAttributes=function(e){let t=ac._getTextureTaskProcessor();if(l(ac._error))throw ac._error;if(!ac._taskProcessorReady)return;let{attributes:n}=e;return t.scheduleTask(e,[n.positions.buffer,n.scales.buffer,n.rotations.buffer,n.colors.buffer])};var IP=ac;var Doi=x(T(),1);function ent(e){let t=new Y0;this.shaderBuilder=t,this.uniformMap={},this.renderStateOptions=Ue.getState(Ue.fromCache({depthTest:{enabled:!0,func:$a.LESS_OR_EQUAL}})),this.alphaOptions=new X_,this.hasSkipLevelOfDetail=!1,e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,ge.FRAGMENT)}var PP=ent;var Boi=x(T(),1),XP=`// // 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 Hoi=x(T(),1),NP=`// // 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 tS=new F,i0e=new F,YP=new F,xi=new q,wP=new Pe,tnt=new m,nnt=new Pe,int=new m,ont=1e-12,ID=1e-5,o8=1e-7,Xa={IDLE:0,WAITING:1,SORTING:2,SORTED:3,ERROR:4},Ms={BUILDING:"BUILDING",TEXTURE_PENDING:"TEXTURE_PENDING",TEXTURE_READY:"TEXTURE_READY",SORTING:"SORTING",READY:"READY"},rnt=2,snt=30,ant=3,cnt=.008726646259971648,lnt=1;function dnt(e,t){let n=e._lastSteadySortFrameNumber>=0?t.frameNumber-e._lastSteadySortFrameNumber:Number.POSITIVE_INFINITY;if(e._lastSteadySortFrameNumber>=0&&n<ant)return!1;let i=t.camera;return l(i)?!e._hasLastSteadySortCameraPosition||!e._hasLastSteadySortCameraDirection||m.distance(i.positionWC,e._lastSteadySortCameraPosition)>=lnt?!0:m.angleBetween(i.directionWC,e._lastSteadySortCameraDirection)>=cnt:!1}function qpe(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 unt(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 $pe(e,t){return l(t)&&t.requestId===e._sortRequestId&&t.dataGeneration===e._splatDataGeneration}function r8(e){l(e)&&(l(e.gaussianSplatTexture)&&(e.gaussianSplatTexture.destroy(),e.gaussianSplatTexture=void 0),l(e.sphericalHarmonicsTexture)&&(e.sphericalHarmonicsTexture.destroy(),e.sphericalHarmonicsTexture=void 0))}function e0e(e,t,n){if(!l(t))return;e._retiredTextures.push({texture:t,frameNumber:n})}function mnt(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 hnt(e,t){let n=e?.[t];return l(n)?n.buffer:void 0}function fnt(e,t,n,i){let o=e._aggregateScratchBuffers[t];l(o)||(o=[],e._aggregateScratchBuffers[t]=o);let r=hnt(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=K.createTypedArray(n,i);return o.push(s),s}function pnt(e,t){return e.length===t?e:e.subarray(0,t)}function bnt(e,t,n){if(!l(t.indexes)||t.state!==Ms.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&&e0e(e,r,i);let s=l(o)?o.sphericalHarmonicsTexture:e.sphericalHarmonicsTexture;l(s)&&s!==t.sphericalHarmonicsTexture&&e0e(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=Xa.IDLE,e._dirty=!1}async function gnt(e,t,n,i){try{let o=await i,r=vt.maximumTextureSize,s=r,a=Math.ceil(n.numSplats/(r/2)),c=Math.log2(r/2),d=r/2-1;if(a>r){let b=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 y=n.shData.length/b;n.shData=n.shData.subarray(0,Math.floor(n.numSplats*y))}n.splatBudgetSSEScale=b/n.numSplats,console.warn(`[GaussianSplat][HARD CAP] ${b} 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=Ms.BUILDING;return}if(!l(n.gaussianSplatTexture))n.gaussianSplatTexture=n0e(t.context,p);else if(n.lastTextureHeight!==p.height||n.lastTextureWidth!==p.width){let b=n.gaussianSplatTexture;n.gaussianSplatTexture=n0e(t.context,p),b.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 b=n.sphericalHarmonicsTexture,f=vt.maximumTextureSize,y=n.shCoefficientCount/3,_=Math.floor(f/y),S=_*(y*2),A=Math.ceil(n.numSplats/_);if(A>f)console.warn(`[GaussianSplat][SHTexture] ${n.numSplats} splats require SH height ${A} > maxTex ${f}. Disabling spherical harmonics for this snapshot (color-only fallback).`),n.sphericalHarmonicsDegree=0,l(b)&&b.destroy(),n.sphericalHarmonicsTexture=void 0;else{let Z=new Uint32Array(f*A*2),V=0;for(let E=0;V<n.shData.length;E+=f*2)Z.set(n.shData.subarray(V,V+S),E),V+=S;n.sphericalHarmonicsTexture=xnt(t.context,{data:Z,width:f,height:A}),l(b)&&b.destroy()}}n.state=Ms.TEXTURE_READY}catch(o){console.error("Error generating Gaussian splat texture:",o),n.state=Ms.BUILDING}}async function ynt(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===Ms.SORTING&&(n.snapshot.state=Ms.TEXTURE_READY);return}let c=n.snapshot;c.indexes=o,c.state=Ms.READY,e._pendingSortPromise=void 0,e._pendingSort=void 0,bnt(e,c,t),e._pendingSnapshot=void 0,jl.buildGSplatDrawCommand(e,t)}catch(o){if(!l(n)||n.snapshot!==e._pendingSnapshot)return;e._pendingSortPromise=void 0,e._pendingSort=void 0,n.snapshot.state===Ms.SORTING&&(n.snapshot.state=Ms.TEXTURE_READY),e._sorterState=Xa.ERROR,e._sorterError=o}}async function t0e(e,t,n){try{let i=await n,o=$pe(e,t),r=t?.expectedCount,s=r,a=i?.length;if(!o||(r!==s||a!==r)){o&&(e._sorterPromise=void 0,e._sorterState=Xa.IDLE);return}e._indexes=i,e._sorterState=Xa.SORTED}catch(i){if(!$pe(e,t))return;e._sorterState=Xa.ERROR,e._sorterError=i}}function xnt(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:De.UNSIGNED_INT,flipY:!1,sampler:zt.NEAREST})}function n0e(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:De.UNSIGNED_INT,flipY:!1,sampler:zt.NEAREST})}function jl(e){e=e??B.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=Fr.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=St.getAxisCorrectionMatrix(ao.Y,ao.X,new F),this._shInverseRotation=new q,this._isDestroyed=!1,this._sorterState=Xa.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(jl.prototype,{ready:{get:function(){return this._ready}},isStable:{get:function(){return!this._dirty&&(!l(this._pendingSnapshot)||this._pendingSnapshot.state===Ms.READY)}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,this._dirty=!0)}}});jl.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)};jl.prototype.destroy=function(){if(this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,r8(this._pendingSnapshot),r8(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)};jl.prototype.isDestroyed=function(){return this._isDestroyed};jl.prototype.onTileLoad=function(e){this._dirty=!0};jl.prototype.onTileVisible=function(e){};jl.transformTile=function(e){let t=e.computedTransform,n=e.content.gltfPrimitive,i=e.tileset.gaussianSplatPrimitive;i._rootTransform===void 0&&(i._rootTransform=pt.eastNorthUpToFixedFrame(e.tileset.boundingSphere.center));let o=i._rootTransform,r=F.multiplyTransformation(t,i._axisCorrectionMatrix,tS);F.multiplyTransformation(r,e.content.worldTransform,r);let s=F.inverse(o,i0e),a=F.multiplyTransformation(s,r,tS),c=e.content._lastSplatTransform;if(e.content._transformed&&l(c)&&F.equalsEpsilon(a,c,ont))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]),b=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]);xi[0]=a[0]/p,xi[1]=a[1]/p,xi[2]=a[2]/p,xi[3]=a[4]/b,xi[4]=a[5]/b,xi[5]=a[6]/b,xi[6]=a[8]/f,xi[7]=a[9]/f,xi[8]=a[10]/f;let y=xi[0]*xi[3]+xi[1]*xi[4]+xi[2]*xi[5],_=xi[0]*xi[6]+xi[1]*xi[7]+xi[2]*xi[8],S=xi[3]*xi[6]+xi[4]*xi[7]+xi[5]*xi[8],A=Math.abs(p-1)<=o8&&Math.abs(b-1)<=o8&&Math.abs(f-1)<=o8,Z=Math.abs(y)<=ID&&Math.abs(_)<=ID&&Math.abs(S)<=ID,V=xi[0]*(xi[4]*xi[8]-xi[5]*xi[7])-xi[3]*(xi[1]*xi[8]-xi[2]*xi[7])+xi[6]*(xi[1]*xi[5]-xi[2]*xi[4]),E=A&&Z&&Math.abs(V-1)<=ID;Pe.fromRotationMatrix(xi,wP),Pe.normalize(wP,wP);let G=St.getAttributeBySemantic(n,ot.POSITION).typedArray,v=St.getAttributeBySemantic(n,ot.ROTATION).typedArray,I=St.getAttributeBySemantic(n,ot.SCALE).typedArray,X=tnt,N=nnt,g=int;for(let C=0;C<G.length/3;++C)X.x=G[C*3],X.y=G[C*3+1],X.z=G[C*3+2],N.x=v[C*4],N.y=v[C*4+1],N.z=v[C*4+2],N.w=v[C*4+3],g.x=I[C*3],g.y=I[C*3+1],g.z=I[C*3+2],E?(F.multiplyByPoint(a,X,X),Pe.multiply(wP,N,N),Pe.normalize(N,N)):(F.fromTranslationQuaternionRotationScale(X,N,g,YP),F.multiplyTransformation(a,YP,YP),F.getTranslation(YP,X),F.getScale(YP,g),Pe.multiply(wP,N,N),Pe.normalize(N,N)),d[C*3]=X.x,d[C*3+1]=X.y,d[C*3+2]=X.z,u[C*4]=N.x,u[C*4+1]=N.y,u[C*4+2]=N.z,u[C*4+3]=N.w,h[C*3]=g.x,h[C*3+1]=g.y,h[C*3+2]=g.z;e.content._lastSplatTransform=F.clone(a,e.content._lastSplatTransform),e.content._transformed=!0};jl.generateSplatTexture=function(e,t,n){if(!l(n)||n.state!==Ms.BUILDING)return;n.state=Ms.TEXTURE_PENDING;let i=IP.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=Ms.BUILDING;return}gnt(e,t,n,i)};jl.buildGSplatDrawCommand=function(e,t){let n=e._tileset,i=new PP(e),{shaderBuilder:o}=i,r=i.renderStateOptions;r.cull.enabled=!1,r.depthMask=!1,r.depthTest.enabled=!0,r.blending=rn.PRE_MULTIPLIED_ALPHA_BLEND,i.alphaOptions.pass=Le.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",ge.VERTEX),o.addVarying("float","v_splitDirection"),o.addUniform("highp usampler2D","u_splatAttributeTexture",ge.VERTEX),o.addUniform("float","u_sphericalHarmonicsDegree",ge.VERTEX),o.addUniform("float","u_splatScale",ge.VERTEX),o.addUniform("vec3","u_cameraPositionWC",ge.VERTEX),o.addUniform("mat3","u_inverseModelRotation",ge.VERTEX);let s=i.uniformMap;o.addUniform("int","u_splatRowMask",ge.VERTEX),o.addUniform("int","u_splatRowShift",ge.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",ge.VERTEX),o.addUniform("highp usampler2D","u_sphericalHarmonicsTexture",ge.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=ve.TRIANGLE_STRIP,o.addVertexLines(XP),o.addFragmentLines(NP);let d=o.buildShaderProgram(t.context),u=Be(Ue.fromCache(i.renderStateOptions),!0);u.cull.face=St.getCullFace(n.modelMatrix,ve.TRIANGLE_STRIP),u=Ue.fromCache(u);let h={screenQuadPosition:0,splatIndex:2},p=new Tn.Attribute;if(p.name="_SPLAT_INDEXES",p.typedArray=e._indexes,p.componentDatatype=K.UNSIGNED_INT,p.type=Mt.SCALAR,p.normalized=!1,p.count=i.instanceCount,p.constant=0,p.instanceDivisor=1,!l(e._vertexArray)||e._indexes.length>e._vertexArrayLen){let S=new gt({attributes:{screenQuadPosition:new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1],name:"_SCREEN_QUAD_POS",variableName:"screenQuadPosition"}),splatIndex:{...p,variableName:"splatIndex"}},primitiveType:ve.TRIANGLE_STRIP});e._vertexArray=Bn.fromGeometry({context:t.context,geometry:S,attributeLocations:h,bufferUsage:Fe.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),y=e._vertexArray,_=new et({boundingVolume:n.boundingSphere,modelMatrix:f,uniformMap:s,renderState:u,vertexArray:y,shaderProgram:d,cull:r.cull.enabled,pass:Le.GAUSSIAN_SPLATS,count:i.count,owner:e,instanceCount:i.instanceCount,primitiveType:ve.TRIANGLE_STRIP,debugShowBoundingVolume:n.debugShowBoundingVolume,castShadows:!1,receiveShadows:!1});e._drawCommand=_};jl.prototype.update=function(e){let t=this._tileset;if(mnt(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===Xa.IDLE){let o=t._selectedTiles.length!==0&&unt(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>=rnt,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>=snt;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=Xa.IDLE,this._pendingSortPromise=void 0,this._pendingSort=void 0,l(this._pendingSnapshot)&&r8(this._pendingSnapshot);let d=t._selectedTiles;this._rootTransform=pt.eastNorthUpToFixedFrame(t.boundingSphere.center);{let V=d[0],E=F.multiplyTransformation(V.computedTransform,this._axisCorrectionMatrix,i0e);F.multiplyTransformation(E,V.content.worldTransform??F.IDENTITY,E),F.getRotation(F.inverse(E,E),this._shInverseRotation)}for(let V of d)jl.transformTile(V);let u=d.reduce((V,E)=>V+E.content.pointsLength,0),h=(V,E,G,v)=>{let I,X=0,N=0;for(let g of d){let C=G(g.content),R=l(v)?v:Mt.getNumberOfComponents(C.type),L=l(C.typedArray)?C.typedArray:C;N+=L.length,l(I)||(I=fnt(this,V,E,u*R))}if(!l(I))return K.createTypedArray(E,0);for(let g of d){let C=g.content,R=G(C),L=l(R.typedArray)?R.typedArray:R;I.set(L,X),X+=L.length}return pnt(I,N)},p=()=>{let V=0;for(let I of d)if(I.content.sphericalHarmonicsDegree>0){switch(I.content.sphericalHarmonicsDegree){case 1:V=9;break;case 2:V=24;break;case 3:V=45;break}break}if(V===0)return;let E=u*(V*(2/3));(!l(this._scratchAggregateShBuffer)||this._scratchAggregateShBuffer.length<E)&&(this._scratchAggregateShBuffer=new Uint32Array(E));let G=this._scratchAggregateShBuffer,v=0;for(let I of d){let X=I.content.packedSphericalHarmonicsData;I.content.sphericalHarmonicsDegree>0&&(G.set(X,v),v+=X.length)}return v<G.length?G.subarray(0,v):G},b=h("positions",K.FLOAT,V=>V.positions,3),f=h("scales",K.FLOAT,V=>V.scales,3),y=h("rotations",K.FLOAT,V=>V.rotations,4),_=h("colors",K.UNSIGNED_BYTE,V=>St.getAttributeBySemantic(V.gltfPrimitive,ot.COLOR)),S=d[0].content.sphericalHarmonicsDegree,A=S>0?d[0].content.sphericalHarmonicsCoefficientCount:0,Z=p();this._pendingSnapshot={generation:this._splatDataGeneration,positions:b,rotations:y,scales:f,colors:_,shData:Z,sphericalHarmonicsDegree:S,shCoefficientCount:A,numSplats:u,indexes:void 0,gaussianSplatTexture:void 0,sphericalHarmonicsTexture:void 0,lastTextureWidth:0,lastTextureHeight:0,splatRowMask:0,splatRowShift:0,state:Ms.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===Ms.BUILDING){jl.generateSplatTexture(this,e,d);return}if(d.state===Ms.TEXTURE_PENDING||d.state===Ms.TEXTURE_READY&&!l(d.gaussianSplatTexture)||!n)return;if(F.clone(i.viewMatrix,this._prevViewMatrix),F.multiply(i.viewMatrix,this._rootTransform,tS),d.state===Ms.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=eS.radixSortIndexes({primitive:{positions:new Float32Array(d.positions),modelView:Float32Array.from(tS),count:d.numSplats},sortType:"Index"});if(!l(p)){this._pendingSortPromise=void 0,this._pendingSort=void 0,d.state=Ms.TEXTURE_READY;return}this._pendingSortPromise=p,d.state=Ms.SORTING;let b=this._pendingSort;ynt(this,e,b,p);return}if(!l(this._pendingSortPromise)){d.state===Ms.SORTING&&(d.state=Ms.TEXTURE_READY);return}return}if(this._numSplats===0||!n)return;if(F.clone(i.viewMatrix,this._prevViewMatrix),F.multiply(i.viewMatrix,this._rootTransform,tS),!l(this._sorterPromise)){if(!dnt(this,e))return;let d=++this._sortRequestId,u=this._splatDataGeneration,h=this._numSplats;this._activeSort={requestId:d,dataGeneration:u,expectedCount:h};let p=eS.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(tS),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=p,l(p)){qpe(this,e);let b=this._activeSort;this._sorterState=Xa.SORTING,t0e(this,b,p);return}}if(!l(this._sorterPromise)){this._sorterState=Xa.WAITING;return}this._sorterState=Xa.SORTING;return}else if(this._sorterState===Xa.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=eS.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(tS),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=a,l(a)){qpe(this,e);let c=this._activeSort;this._sorterState=Xa.SORTING,t0e(this,c,a);return}}if(!l(this._sorterPromise)){this._sorterState=Xa.WAITING;return}this._sorterState=Xa.SORTING;return}else{if(this._sorterState===Xa.SORTING)return;if(this._sorterState===Xa.SORTED)jl.buildGSplatDrawCommand(this,e),this._sorterState=Xa.IDLE,this._dirty=!1,this._sorterPromise=void 0,this._activeSort=void 0;else if(this._sorterState===Xa.ERROR)throw this._sorterError}this._dirty=!1}};var MP=jl;function Su(e,t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._loader=e,l(this._tileset.gaussianSplatPrimitive)||(this._tileset.gaussianSplatPrimitive=new MP({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}Su.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")&&Ea("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(Su.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 Tnt(e){return`${e.startsWith("KHR_gaussian_splatting:")?"KHR_gaussian_splatting:":"_"}SH_DEGREE_`}function _nt(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 o0e=new ArrayBuffer(4),Snt=new Float32Array(o0e),Ant=new Uint32Array(o0e);function s8(e){Snt[0]=e;let t=Ant[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 Znt(e){let t=Tnt(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 Cnt(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}=Znt(r[d].name);for(let p=0;p<e.pointsLength;p++){let b=a[u-1]*2/3,f=p*c+b+h*2,y=p*3;o[f]=s8(r[d].typedArray[y])|s8(r[d].typedArray[y+1])<<16,o[f+1]=s8(r[d].typedArray[y+2])}}return o}Su.fromGltf=async function(e,t,n,i){let o=n,r=We.createIfNeeded(o),s={releaseGltfJson:!1,upAxis:ao.Y,forwardAxis:ao.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=We.createIfNeeded(i);let a=new mu(s);try{await a.load()}catch(c){throw a.destroy(),new ue(`Failed to load glTF: ${c.message}`)}return new Su(a,e,t,n)};Su.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=St.getAttributeBySemantic(this.gltfPrimitive,ot.POSITION).typedArray.slice(),this._rotations=St.getAttributeBySemantic(this.gltfPrimitive,ot.ROTATION).typedArray.slice(),this._scales=St.getAttributeBySemantic(this.gltfPrimitive,ot.SCALE).typedArray.slice();let{l:i,n:o}=_nt(this.gltfPrimitive.attributes);this._sphericalHarmonicsDegree=i,this._sphericalHarmonicsCoefficientCount=o,this._packedSphericalHarmonicsData=Cnt(this);return}this._resourcesLoaded=n.process(t)}};Su.prototype.hasProperty=function(e,t){return!1};Su.prototype.getFeature=function(e){};Su.prototype.applyDebugSettings=function(e,t){};Su.prototype.applyStyle=function(e){};Su.prototype.pick=function(e,t,n){};Su.prototype.isDestroyed=function(){return this.isDestroyed};Su.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 nx=Su;var r0e={b3dm:function(e,t,n,i,o){return xu.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return xu.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return xu.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return Av.fromTileType(e,t,n,i,o,r0e)},externalTileset:function(e,t,n,i){return BI.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new Vv(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new fP(e,t,n,i,o)},subt:function(e,t,n,i,o){return oC.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return oC.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new ue("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a);return nx.tilesetRequiresGaussianSplattingExt(e)?nx.fromGltf(e,t,n,c):e.isGltfExtensionUsed("CESIUM_mesh_vector")?$C.fromGltf(e,t,n,c):xu.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){return nx.tilesetRequiresGaussianSplattingExt(e)?nx.fromGltf(e,t,n,i):e.isGltfExtensionUsed("CESIUM_mesh_vector")?$C.fromGltf(e,t,n,i):xu.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return xu.fromGeoJson(e,t,n,i)}},nS=r0e;var isi=x(T(),1),Vnt={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5},fr=Object.freeze(Vnt);var rsi=x(T(),1),hf={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"};hf.isBinaryFormat=function(e){switch(e){case hf.BATCHED_3D_MODEL:case hf.INSTANCED_3D_MODEL:case hf.COMPOSITE:case hf.POINT_CLOUD:case hf.VECTOR:case hf.GEOMETRY:case hf.IMPLICIT_SUBTREE:case hf.VOXEL_BINARY:case hf.GLTF_BINARY:return!0;default:return!1}};var ha=Object.freeze(hf);var asi=x(T(),1),Rnt={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0},Mm=Object.freeze(Rnt);var lsi=x(T(),1),Na={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},kb=new Array(Na.NUMBER_OF_PASSES);kb[Na.RENDER]=Object.freeze({pass:Na.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});kb[Na.PICK]=Object.freeze({pass:Na.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});kb[Na.SHADOW]=Object.freeze({pass:Na.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});kb[Na.PRELOAD]=Object.freeze({pass:Na.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});kb[Na.PRELOAD_FLIGHT]=Object.freeze({pass:Na.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});kb[Na.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:Na.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});kb[Na.MOST_DETAILED_PRELOAD]=Object.freeze({pass:Na.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});kb[Na.MOST_DETAILED_PICK]=Object.freeze({pass:Na.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Na.getPassOptions=function(e){return kb[e]};var or=Object.freeze(Na);var msi=x(T(),1);function Wp(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(Wp.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){}}});Wp.prototype.hasProperty=function(e,t){return!1};Wp.prototype.getFeature=function(e){};Wp.prototype.applyDebugSettings=function(e,t){};Wp.prototype.applyStyle=function(e){};Wp.prototype.update=function(e,t){};Wp.prototype.pick=function(e,t,n){};Wp.prototype.isDestroyed=function(){return!1};Wp.prototype.destroy=function(){return he(this)};var eV=Wp;var Asi=x(T(),1);var bsi=x(T(),1);function Ub(e){e=e??B.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(Ub.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Ub.prototype.hasProperty=function(e){return jn.hasProperty(e,this._properties,this._class)};Ub.prototype.hasPropertyBySemantic=function(e){return jn.hasPropertyBySemantic(e,this._properties,this._class)};Ub.prototype.getPropertyIds=function(e){return jn.getPropertyIds(this._properties,this._class,e)};Ub.prototype.getProperty=function(e){return jn.getProperty(e,this._properties,this._class)};Ub.prototype.setProperty=function(e,t){return jn.setProperty(e,t,this._properties,this._class)};Ub.prototype.getPropertyBySemantic=function(e){return jn.getPropertyBySemantic(e,this._properties,this._class)};Ub.prototype.setPropertyBySemantic=function(e,t){return jn.setPropertyBySemantic(e,t,this._properties,this._class)};var kP=Ub;function a8(e,t){let n=Vi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){a8._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??B.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new kP({content:n,class:o})}}a8._oneTimeWarning=Zt;var iS=a8;var Rsi=x(T(),1);function Ent(e,t){let n=e.metadataExtension;if(!l(n))return;let i=n.groups,o=Vi(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 oS=Ent;var Ysi=x(T(),1);var Wsi=x(T(),1);function Db(e){e=e??B.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(Db.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Db.prototype.hasProperty=function(e){return jn.hasProperty(e,this._properties,this._class)};Db.prototype.hasPropertyBySemantic=function(e){return jn.hasPropertyBySemantic(e,this._properties,this._class)};Db.prototype.getPropertyIds=function(e){return jn.getPropertyIds(this._properties,this._class,e)};Db.prototype.getProperty=function(e){return jn.getProperty(e,this._properties,this._class)};Db.prototype.setProperty=function(e,t){return jn.setProperty(e,t,this._properties,this._class)};Db.prototype.getPropertyBySemantic=function(e){return jn.getPropertyBySemantic(e,this._properties,this._class)};Db.prototype.setPropertyBySemantic=function(e,t){return jn.setPropertyBySemantic(e,t,this._properties,this._class)};var UP=Db;function c8(e,t){let n=Vi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){c8._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??B.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new UP({tile:n,class:o})}}c8._oneTimeWarning=Zt;var DP=c8;var sai=x(T(),1);var Bsi=x(T(),1);function Gnt(e){let t=new Uint8Array(e),n=Dh(t);if(n==="glTF"&&(n="glb"),ha.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=Lnt(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 ue("Invalid tile content.")}function Lnt(e){let t;try{t=Zr(e)}catch{throw new ue("Invalid tile content.")}return t}var Ob=Gnt;function km(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=Dc.getServerKey(a.getUrlComponent());this._innerContentResources[s]=a,this._serverKeys[s]=c}}Object.defineProperties(km.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 l8(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function s0e(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)}km.prototype.requestInnerContents=function(){if(!Wnt(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let e=this._innerContentHeaders;l8(this,e.length);let t=this._cancelCount;for(let n=0;n<e.length;n++)this._arrayFetchPromises[n]=vnt(this,n,t,this._tile._contentState);return Fnt(this)};function Wnt(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)&&!Dc.serverHasOpenSlots(n,t[n]))return!1;return Dc.heapHasOpenSlots(e.length)}function vnt(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new xr({throttle:!0,throttleByServer:!0,type:Hs.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===bi.CANCELLED){s0e(e,i);return}return l8(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===bi.CANCELLED){s0e(e,i);return}l8(e,-1),a0e(e,t,u)}})}async function Fnt(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>Int(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 Int(e,t,n){if(l(t))try{let i=Ob(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=nS[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=iS(o,d));let u=oS(o,d);return l(u)&&(a.group=new a_({metadata:u})),a}catch(i){a0e(e,n,i)}}function a0e(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}`))}km.prototype.cancelRequests=function(){for(let e=0;e<this._requests.length;e++){let t=this._requests[e];l(t)&&t.cancel()}};km.prototype.hasProperty=function(e,t){return!1};km.prototype.getFeature=function(e){};km.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};km.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};km.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)};km.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};km.prototype.isDestroyed=function(){return!1};km.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var OP=km;var eci=x(T(),1);var Pai=x(T(),1);var bai=x(T(),1);var c0e=Math.cos,l0e=Math.sin,Pnt=Math.sqrt,d8={};d8.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=c0e(u),p=l0e(u),b=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,y=h*c0e(f),_=h*l0e(f),S=a.x*y,A=a.y*_,Z=Pnt(S*y+A*_+b*p);if(r.x=S/Z,r.y=A/Z,r.z=b/Z,n){let V=e.stNwCorner;l(V)?(u=V.latitude-e.stGranYCos*i+o*e.stGranXSin,f=V.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 Xnt=new Ji,Um=new m,Nnt=new be,PD=new m,BP=new Ki;function d0e(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;BP._ellipsoid=ie.default,Um=BP.project(e,Um),Um=m.subtract(Um,PD,Um);let b=Ji.fromRotation(t,Xnt);Um=Ji.multiplyByVector(b,Um,Um),Um=m.add(Um,PD,Um),e=BP.unproject(Um,e),r-=1,s-=1;let f=e.latitude,y=f+r*p,_=f-c*s,S=f-c*s+r*p,A=Math.max(f,y,_,S),Z=Math.min(f,y,_,S),V=e.longitude,E=V+r*d,G=V+s*h,v=V+s*h+r*d,I=Math.max(V,E,G,v),X=Math.min(V,E,G,v);return{north:A,south:Z,east:I,west:X,granYCos:c,granYSin:h,granXCos:d,granXSin:p,nwCorner:e}}d8.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===W.PI_OVER_TWO&&(h=!0),u===-W.PI_OVER_TWO&&(p=!0);let b,f=d-u;c>a?b=W.TWO_PI-c+a:b=a-c;let y=Math.ceil(b/t)+1,_=Math.ceil(f/t)+1,S=b/(y-1),A=f/(_-1),Z=ce.northwest(e,r),V=ce.center(e,Nnt);(n!==0||i!==0)&&(V.longitude<Z.longitude&&(V.longitude+=W.TWO_PI),BP._ellipsoid=ie.default,PD=BP.project(V,PD));let E=A,G=S,v=0,I=0,X=ce.clone(e,o),N={granYCos:E,granYSin:v,granXCos:G,granXSin:I,nwCorner:Z,boundingRectangle:X,width:y,height:_,northCap:h,southCap:p};if(n!==0){let g=d0e(Z,n,S,A,V,y,_);d=g.north,u=g.south,a=g.east,c=g.west,N.granYCos=g.granYCos,N.granYSin=g.granYSin,N.granXCos=g.granXCos,N.granXSin=g.granXSin,X.north=d,X.south=u,X.east=a,X.west=c}if(i!==0){n=n-i;let g=ce.northwest(X,s),C=d0e(g,n,S,A,V,y,_);N.stGranYCos=C.granYCos,N.stGranXCos=C.granXCos,N.stGranYSin=C.granYSin,N.stGranXSin=C.granXSin,N.stNwCorner=g,N.stWest=C.west,N.stSouth=C.south}return N};var fa=d8;var Ynt=new de,wnt=new de,Mnt=new m,knt=new ce;function u0e(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,b=0,f,y=Mnt;if(r)fa.computePosition(t,n,!1,b,0,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;else for(f=0;f<o;f++)fa.computePosition(t,n,!1,b,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;for(f=o-1,b=1;b<i;b++)fa.computePosition(t,n,!1,b,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;if(b=i-1,!s)for(f=o-2;f>=0;f--)fa.computePosition(t,n,!1,b,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;for(f=0,b=i-2;b>0;b--)fa.computePosition(t,n,!1,b,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;let _=h.length/3*2,S=Ne.createTypedArray(h.length/3,_),A=0;for(let V=0;V<h.length/3-1;V++)S[A++]=V,S[A++]=V+1;S[A++]=h.length/3-1,S[A++]=0;let Z=new gt({attributes:new yn,primitiveType:ve.LINES});return Z.attributes.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:h}),Z.indices=S,Z}function Unt(e,t){let n=e._surfaceHeight,i=e._extrudedHeight,o=e._ellipsoid,r=u0e(e,t),s=t.height,a=t.width,c=Ri.scaleToGeodeticHeight(r.attributes.position.values,n,o,!1),d=c.length,u=new Float64Array(d*2);u.set(c);let h=Ri.scaleToGeodeticHeight(r.attributes.position.values,i,o);u.set(h,d),r.attributes.position.values=u;let p=t.northCap,b=t.southCap,f=4;p&&(f-=1),b&&(f-=1);let y=(u.length/3+f)*2,_=Ne.createTypedArray(u.length/3,y);d=u.length/6;let S=0;for(let Z=0;Z<d-1;Z++)_[S++]=Z,_[S++]=Z+1,_[S++]=Z+d,_[S++]=Z+d+1;_[S++]=d-1,_[S++]=0,_[S++]=d+d-1,_[S++]=d,_[S++]=0,_[S++]=d;let A;if(p)A=s-1;else{let Z=a-1;_[S++]=Z,_[S++]=Z+d,A=a+s-2}if(_[S++]=A,_[S++]=A+d,!b){let Z=a+A-1;_[S++]=Z,_[S]=Z+d}return r.indices=_,r}function nV(e){e=e??B.EMPTY_OBJECT;let t=e.rectangle,n=e.granularity??W.RADIANS_PER_DEGREE,i=e.ellipsoid??ie.default,o=e.rotation??0,r=e.height??0,s=e.extrudedHeight??r;this._rectangle=ce.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"}nV.packedLength=ce.packedLength+ie.packedLength+5;nV.pack=function(e,t,n){return n=n??0,ce.pack(e._rectangle,t,n),n+=ce.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 m0e=new ce,h0e=ie.clone(ie.UNIT_SPHERE),tV={rectangle:m0e,ellipsoid:h0e,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};nV.unpack=function(e,t,n){t=t??0;let i=ce.unpack(e,t,m0e);t+=ce.packedLength;let o=ie.unpack(e,t,h0e);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t];return l(n)?(n._rectangle=ce.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):(tV.granularity=r,tV.height=s,tV.rotation=a,tV.extrudedHeight=c,tV.offsetAttribute=d===-1?void 0:d,new nV(tV))};var Dnt=new be;nV.createGeometry=function(e){let t=e._rectangle,n=e._ellipsoid,i=fa.computeOptions(t,e._granularity,e._rotation,0,knt,Dnt),o,r;if(W.equalsEpsilon(t.north,t.south,W.EPSILON10)||W.equalsEpsilon(t.east,t.west,W.EPSILON10))return;let s=e._surfaceHeight,a=e._extrudedHeight,c=!W.equalsEpsilon(s,a,0,W.EPSILON2),d;if(c){if(o=Unt(e,i),l(e._offsetAttribute)){let p=o.attributes.position.values.length/3,b=new Uint8Array(p);e._offsetAttribute===mn.TOP?b=b.fill(1,0,p/2):(d=e._offsetAttribute===mn.NONE?0:1,b=b.fill(d)),o.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}let u=de.fromRectangle3D(t,n,s,wnt),h=de.fromRectangle3D(t,n,a,Ynt);r=de.union(u,h)}else{if(o=u0e(e,i),o.attributes.position.values=Ri.scaleToGeodeticHeight(o.attributes.position.values,s,n,!1),l(e._offsetAttribute)){let u=o.attributes.position.values.length;d=e._offsetAttribute===mn.NONE?0:1;let h=new Uint8Array(u/3).fill(d);o.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}r=de.fromRectangle3D(t,n,s)}return new gt({attributes:o.attributes,indices:o.indices,primitiveType:ve.LINES,boundingSphere:r,offsetAttribute:e._offsetAttribute})};var rS=nV;function oV(e){this.rectangle=ce.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;Knt(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,(e.computeBoundingVolumes??!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(oV.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});oV.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=en.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=de.fromOrientedBoundingBox(this._orientedBoundingBox)};var f0e=new m,XD=new m,p0e=new m,Ont=new m,Bnt=new m,znt=new m,Hnt=new m,Dm=new be,b0e=new an(m.UNIT_X,0),iV=new xn;function Knt(e,t,n){n.cartographicToCartesian(ce.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(ce.northeast(t),e.northeastCornerCartesian),Dm.longitude=t.west,Dm.latitude=(t.south+t.north)*.5,Dm.height=0;let i=n.cartographicToCartesian(Dm,znt),o=m.cross(i,m.UNIT_Z,Ont);m.normalize(o,e.westNormal),Dm.longitude=t.east;let r=n.cartographicToCartesian(Dm,Hnt),s=m.cross(m.UNIT_Z,r,f0e);m.normalize(s,e.eastNormal);let a=m.subtract(i,r,f0e);m.magnitude(a)===0&&(a=m.clone(o,a));let c=m.normalize(a,Bnt),d=t.south,u;if(d>0){Dm.longitude=(t.west+t.east)*.5,Dm.latitude=d;let y=n.cartographicToCartesian(Dm,iV.origin);m.clone(c,iV.direction);let _=an.fromPointNormal(e.southwestCornerCartesian,e.westNormal,b0e);mi.rayPlane(iV,_,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(y,XD)}else u=n.geodeticSurfaceNormalCartographic(ce.southeast(t),XD);let h=m.cross(u,a,p0e);m.normalize(h,e.southNormal);let p=t.north,b;if(p<0){Dm.longitude=(t.west+t.east)*.5,Dm.latitude=p;let y=n.cartographicToCartesian(Dm,iV.origin);m.negate(c,iV.direction);let _=an.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,b0e);mi.rayPlane(iV,_,e.northeastCornerCartesian),b=n.geodeticSurfaceNormal(y,XD)}else b=n.geodeticSurfaceNormalCartographic(ce.northwest(t),XD);let f=m.cross(a,b,p0e);m.normalize(f,e.northNormal)}var Jnt=new m,jnt=new m,Qnt=new m(0,-1,0),qnt=new m(0,0,-1),g0e=new m;function $nt(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!ce.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,h=e.westNormal,p=e.southNormal,b=e.eastNormal,f=e.northNormal;t.mode!==re.SCENE3D&&(d=t.mapProjection.project(ce.southwest(e.rectangle),Jnt),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(ce.northeast(e.rectangle),jnt),u.z=u.y,u.y=u.x,u.x=0,h=Qnt,b=m.UNIT_Y,p=qnt,f=m.UNIT_Z);let y=m.subtract(i,d,g0e),_=m.dot(y,h),S=m.dot(y,p),A=m.subtract(i,u,g0e),Z=m.dot(A,b),V=m.dot(A,f);_>0?r+=_*_:Z>0&&(r+=Z*Z),S>0?r+=S*S:V>0&&(r+=V*V)}let s,a,c;if(t.mode===re.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)}oV.prototype.distanceToCamera=function(e){let t=$nt(this,e);if(e.mode===re.SCENE3D&&l(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};oV.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};oV.prototype.createDebugVolume=function(e){let t=F.clone(F.IDENTITY),n=new rS({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new Ft({geometry:n,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}});return new Pn({geometryInstances:i,appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})};var Au=oV;var Mci=x(T(),1);var Aci=x(T(),1);var sci=x(T(),1);var zP={},eit=new m,y0e=new m,x0e=new m,T0e=new m,_0e=new en;zP.validOutline=function(e){let n=en.fromPoints(e,_0e).halfAxes,i=q.getColumn(n,0,y0e),o=q.getColumn(n,1,x0e),r=q.getColumn(n,2,T0e),s=m.magnitude(i),a=m.magnitude(o),c=m.magnitude(r);return!(s===0&&(a===0||c===0)||a===0&&c===0)};zP.computeProjectTo2DArguments=function(e,t,n,i){let o=en.fromPoints(e,_0e),r=o.halfAxes,s=q.getColumn(r,0,y0e),a=q.getColumn(r,1,x0e),c=q.getColumn(r,2,T0e),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 b,f;return(p===u||p===h)&&(b=s),p===d?b=a:p===h&&(f=a),(p===d||p===u)&&(f=c),m.normalize(b,n),m.normalize(f,i),m.clone(o.center,t),!0};function S0e(e,t,n,i,o){let r=m.subtract(e,t,eit),s=m.dot(n,r),a=m.dot(i,r);return M.fromElements(s,a,o)}zP.createProjectPointsTo2DFunction=function(e,t,n){return function(i){let o=new Array(i.length);for(let r=0;r<i.length;r++)o[r]=S0e(i[r],e,t,n);return o}};zP.createProjectPointTo2DFunction=function(e,t,n){return function(i,o){return S0e(i,e,t,n,o)}};var Bb=zP;function tit(e){let t=e.length,n=new Float64Array(t*3),i=Ne.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 yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:n})});return new gt({attributes:s,indices:i,primitiveType:ve.LINES})}function sS(e){e=e??B.EMPTY_OBJECT;let t=e.polygonHierarchy;this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=ii.computeHierarchyPackedLength(t,m)+1}sS.fromPositions=function(e){e=e??B.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions}};return new sS(t)};sS.pack=function(e,t,n){return n=n??0,n=ii.packPolygonHierarchy(e._polygonHierarchy,t,n,m),t[n]=e.packedLength,t};var nit={polygonHierarchy:{}};sS.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 sS(nit)),n._polygonHierarchy=i,n.packedLength=o,n};sS.createGeometry=function(e){let t=e._polygonHierarchy,n=t.positions;if(n=Oo(n,m.equalsEpsilon,!0),n.length<3||!Bb.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 Ft({geometry:tit(o[c])});r.push(d)}let s=Kn.combineInstances(r)[0],a=de.fromPoints(t.positions);return new gt({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:a})};var Om=sS;var ND=new be;function HP(e){let t=ib.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=uit(t,n,i,o);this._boundingPlanes=r;let s=pit(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=y8(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]=y8(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=y8(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();ND=o.cartesianToCartographic(c,ND),ND.height=(i+n)/2,this.center=o.cartographicToCartesian(ND,c),this._boundingSphere=de.fromPoints(s)}var iit=new m,oit=new be,rit=new m,sit=new be,ait=new m,cit=new m,lit=new m,dit=new m;function uit(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,iit),a=i.cartesianToCartographic(r,oit);a.height=n;let c=i.cartographicToCartesian(a,rit),d=an.fromPointNormal(c,s);o[0]=d;let u=0,h,p=[],b,f;for(h=0;h<4;h++){b=e.getVertex(h),p[h]=b,f=i.cartesianToCartographic(b,sit),f.height=t;let _=an.getPointDistance(d,i.cartographicToCartesian(f,ait));_<u&&(u=_)}let y=an.clone(d);for(y.normal=m.negate(y.normal,y.normal),y.distance=y.distance*-1+u,o[1]=y,h=0;h<4;h++){b=p[h];let _=p[(h+1)%4],S=i.geodeticSurfaceNormal(b,cit),A=m.subtract(_,b,dit),Z=m.cross(A,S,lit);Z=m.normalize(Z,Z),o[2+h]=an.fromPointNormal(b,Z)}return o}var aS=new m,cS=new m,lS=new m,u8=new m,m8=new m,h8=new m,mit=new m,hit=new m,fit=new m,f8=new m,p8=new m,b8=new m,ix=new m,vp=new q;function A0e(e,t,n){aS=e.normal,cS=t.normal,lS=n.normal,u8=m.multiplyByScalar(e.normal,-e.distance,u8),m8=m.multiplyByScalar(t.normal,-t.distance,m8),h8=m.multiplyByScalar(n.normal,-n.distance,h8),f8=m.multiplyByScalar(m.cross(cS,lS,mit),m.dot(u8,aS),f8),p8=m.multiplyByScalar(m.cross(lS,aS,hit),m.dot(m8,cS),p8),b8=m.multiplyByScalar(m.cross(aS,cS,fit),m.dot(h8,lS),b8),vp[0]=aS.x,vp[1]=cS.x,vp[2]=lS.x,vp[3]=aS.y,vp[4]=cS.y,vp[5]=lS.y,vp[6]=aS.z,vp[7]=cS.z,vp[8]=lS.z;let i=q.determinant(vp);return ix=m.add(f8,p8,ix),ix=m.add(ix,b8,ix),new m(ix.x/i,ix.y/i,ix.z/i)}function pit(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=A0e(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=A0e(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var g8=new m,rV=new m;function y8(e,t){let n=[];for(let i=0;i<4;i++)g8=m.subtract(t[(i+1)%4],t[i],g8),rV=m.cross(e.normal,g8,rV),rV=m.normalize(rV,rV),n[i]=m.clone(rV);return n}Object.defineProperties(HP.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var x8=new m;HP.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;an.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):an.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,an.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=T8(an.projectPointOntoPlane(c,t,x8),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=Z0e(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=T8(an.projectPointOntoPlane(c,t,x8),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=T8(an.projectPointOntoPlane(this._boundingPlanes[1],t,x8),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 bit=new m,git=new m;function Z0e(e,t,n){let i=m.subtract(n,t,bit),o=m.subtract(e,t,git),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 yit=new an(m.UNIT_X,0);function T8(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let d=an.fromPointNormal(t[c],i[c],yit);an.getPointDistance(d,e)<0||(a=Z0e(e,t[c],t[(c+1)%4]),r=m.distance(e,a),r<o&&(o=r,s=a))}return l(s)?s:e}HP.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?Jt.INSIDE:n===this._vertices.length?Jt.OUTSIDE:Jt.INTERSECTING};HP.prototype.createDebugVolume=function(e){let t=F.clone(F.IDENTITY),n=new Om({polygonHierarchy:{positions:this._planeVertices[0]}}),i=Om.createGeometry(n),o=new Ft({geometry:i,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}}),r=new Om({polygonHierarchy:{positions:this._planeVertices[1]}}),s=Om.createGeometry(r),a=new Ft({geometry:s,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}}),c=[];for(let d=0;d<4;d++){let u=new Om({polygonHierarchy:{positions:this._planeVertices[2+d]}}),h=Om.createGeometry(u);c[d]=new Ft({geometry:h,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}})}return new Pn({geometryInstances:[c[0],c[1],c[2],c[3],a,o],appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})};var KP=HP;var gli=x(T(),1);var sli=x(T(),1);var tli=x(T(),1);var xit=new m(1,1,1),YD=Math.cos,wD=Math.sin;function sV(e){e=e??B.EMPTY_OBJECT;let t=e.radii??xit,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??W.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??W.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"}sV.packedLength=2*m.packedLength+8;sV.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 C0e=new m,V0e=new m,zb={radii:C0e,innerRadii:V0e,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};sV.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,C0e);t+=m.packedLength;let o=m.unpack(e,t,V0e);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):(zb.minimumClock=r,zb.maximumClock=s,zb.minimumCone=a,zb.maximumCone=c,zb.stackPartitions=d,zb.slicePartitions=u,zb.subdivisions=h,zb.offsetAttribute=p===-1?void 0:p,new sV(zb))};sV.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)/W.TWO_PI),u=Math.round(u*Math.abs(s-r)/W.PI),d<2&&(d=2),u<2&&(u=2);let h=0,p=1,b=n.x!==t.x||n.y!==t.y||n.z!==t.z,f=!1,y=!1;b&&(p=2,r>0&&(f=!0,h+=d),s<Math.PI&&(y=!0,h+=d));let _=a*p*(u+d),S=new Float64Array(_*3),A=2*(_+h-(d+u)*p),Z=Ne.createTypedArray(_,A),V,E,G,v,I=0,X=new Array(u),N=new Array(u);for(V=0;V<u;V++)v=r+V*(s-r)/(u-1),X[V]=wD(v),N[V]=YD(v);let g=new Array(a),C=new Array(a);for(V=0;V<a;V++)G=i+V*(o-i)/(a-1),g[V]=wD(G),C[V]=YD(G);for(V=0;V<u;V++)for(E=0;E<a;E++)S[I++]=t.x*X[V]*C[E],S[I++]=t.y*X[V]*g[E],S[I++]=t.z*N[V];if(b)for(V=0;V<u;V++)for(E=0;E<a;E++)S[I++]=n.x*X[V]*C[E],S[I++]=n.y*X[V]*g[E],S[I++]=n.z*N[V];for(X.length=a,N.length=a,V=0;V<a;V++)v=r+V*(s-r)/(a-1),X[V]=wD(v),N[V]=YD(v);for(g.length=d,C.length=d,V=0;V<d;V++)G=i+V*(o-i)/(d-1),g[V]=wD(G),C[V]=YD(G);for(V=0;V<a;V++)for(E=0;E<d;E++)S[I++]=t.x*X[V]*C[E],S[I++]=t.y*X[V]*g[E],S[I++]=t.z*N[V];if(b)for(V=0;V<a;V++)for(E=0;E<d;E++)S[I++]=n.x*X[V]*C[E],S[I++]=n.y*X[V]*g[E],S[I++]=n.z*N[V];for(I=0,V=0;V<u*p;V++){let P=V*a;for(E=0;E<a-1;E++)Z[I++]=P+E,Z[I++]=P+E+1}let R=u*a*p;for(V=0;V<d;V++)for(E=0;E<a-1;E++)Z[I++]=R+V+E*d,Z[I++]=R+V+(E+1)*d;if(b)for(R=u*a*p+d*a,V=0;V<d;V++)for(E=0;E<a-1;E++)Z[I++]=R+V+E*d,Z[I++]=R+V+(E+1)*d;if(b){let P=u*a*p,Y=P+a*d;if(f)for(V=0;V<d;V++)Z[I++]=P+V,Z[I++]=Y+V;if(y)for(P+=a*d-d,Y+=a*d-d,V=0;V<d;V++)Z[I++]=P+V,Z[I++]=Y+V}let L=new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:S})});if(l(e._offsetAttribute)){let P=S.length,Y=e._offsetAttribute===mn.NONE?0:1,O=new Uint8Array(P/3).fill(Y);L.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:O})}return new gt({attributes:L,indices:Z,primitiveType:ve.LINES,boundingSphere:de.fromEllipsoid(c),offsetAttribute:e._offsetAttribute})};var Zu=sV;function aV(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 Zu(i),this._workerName="createSphereOutlineGeometry"}aV.packedLength=Zu.packedLength;aV.pack=function(e,t,n){return Zu.pack(e._ellipsoidGeometry,t,n)};var Tit=new Zu,dS={radius:void 0,radii:new m,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};aV.unpack=function(e,t,n){let i=Zu.unpack(e,t,Tit);return dS.stackPartitions=i._stackPartitions,dS.slicePartitions=i._slicePartitions,dS.subdivisions=i._subdivisions,l(n)?(m.clone(i._radii,dS.radii),n._ellipsoidGeometry=new Zu(dS),n):(dS.radius=i._radii.x,new aV(dS))};aV.createGeometry=function(e){return Zu.createGeometry(e._ellipsoidGeometry)};var Hb=aV;function cV(e,t){t===0&&(t=W.EPSILON7),this._boundingSphere=new de(e,t)}Object.defineProperties(cV.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}}});cV.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,m.distance(t.center,e.camera.positionWC)-t.radius)};cV.prototype.intersectPlane=function(e){return de.intersectPlane(this._boundingSphere,e)};cV.prototype.update=function(e,t){m.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};cV.prototype.createDebugVolume=function(e){let t=new Hb({radius:this.radius}),n=F.fromTranslation(this.center,F.clone(F.IDENTITY)),i=new Ft({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Qt.fromColor(e)}});return new Pn({geometryInstances:i,appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})};var Kb=cV;var Lli=x(T(),1);var _it=new m,Sit=new m,Ait=new m,Zit=new m;function uS(e,t,n){n=m.cross(e,t,n);let i=m.magnitude(n);return m.multiplyByScalar(n,W.EPSILON7/i,n)}function _8(e,t){let n=m.normalize(e,Zit),i=m.equalsEpsilon(n,m.UNIT_X,W.EPSILON6)?m.UNIT_Y:m.UNIT_X;return uS(e,i,t)}function R0e(e){let t=q.getColumn(e,0,_it),n=q.getColumn(e,1,Sit),i=q.getColumn(e,2,Ait),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]=W.EPSILON7,e[4]=W.EPSILON7,e[8]=W.EPSILON7,e):(o&&!r&&!s?t=uS(n,i,t):!o&&r&&!s?n=uS(t,i,n):!o&&!r&&s?i=uS(n,t,i):o?r?s||(t=_8(i,t),n=uS(i,t,n)):(t=_8(n,t),i=uS(n,t,i)):(n=_8(t,n),i=uS(n,t,i)),q.setColumn(e,0,t,e),q.setColumn(e,1,n,e),q.setColumn(e,2,i,e),e)}function lV(e,t){t=R0e(t),this._orientedBoundingBox=new en(e,t),this._boundingSphere=de.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(lV.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});lV.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};lV.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};lV.prototype.update=function(e,t){m.clone(e,this._orientedBoundingBox.center),t=R0e(t),q.clone(t,this._orientedBoundingBox.halfAxes),de.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};lV.prototype.createDebugVolume=function(e){let t=new Ih({minimum:new m(-1,-1,-1),maximum:new m(1,1,1)}),n=F.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new Ft({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Qt.fromColor(e)}});return new Pn({geometryInstances:i,appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})};var Id=lV;function Rr(e,t,n,i){this._tileset=e,this._header=n;let o=l(n.contents),r=o&&n.contents.length>1||Vi(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=DP(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,Rr._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")&&Rr._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?dr.REPLACE:dr.ADD):l(i)?p=i.refine:p=dr.REPLACE,this.refine=p,this.children=[],this.parent=i;let b,f=!1,y,_,S;if(t=We.createIfNeeded(t),r)y=fr.UNLOADED,_=t.clone();else if(l(s)){let E=s.uri;l(s.url)&&(Rr._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),E=s.url),E===""?(Rr._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),b=new eV(e,this),f=!0,y=fr.READY):(y=fr.UNLOADED,_=t.getDerivedResource({url:E}),S=Dc.getServerKey(_.getUrlComponent()))}else b=new eV(e,this),f=!0,y=fr.READY;this._content=b,this._contentResource=_,this._contentState=y,this._expiredContent=void 0,this._serverKey=S,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!f,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let A=n.expire,Z,V;l(A)&&(Z=A.duration,l(A.date)&&(V=Q.fromIso8601(A.date))),this.expireDuration=Z,this.expireDate=V,this.lastStyleTime=0,this._optimChildrenWithinParent=Mm.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}Rr._deprecationWarning=Ea;Object.defineProperties(Rr.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===fr.READY}},contentUnloaded:{get:function(){return this._contentState===fr.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===fr.EXPIRED}},contentFailed:{get:function(){return this._contentState===fr.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var ox=new m;function Cit(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=m.multiplyByScalar(s.directionWC,e._centerZDepth,ox),c=m.add(s.positionWC,a,ox),d=m.subtract(c,r,ox);if(m.magnitude(d)>o){let V=m.normalize(d,ox),E=m.multiplyByScalar(V,o,ox),G=m.add(r,E,ox),v=m.subtract(G,s.positionWC,ox),I=m.normalize(v,ox);e._foveatedFactor=1-Math.abs(m.dot(s.directionWC,I))}else e._foveatedFactor=0;let p=e.refine===dr.REPLACE,b=n.isSkippingLevelOfDetail;if(p&&!b||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&b||n._pass===or.PRELOAD_FLIGHT||n._pass===or.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),y=n.foveatedConeSize*f;if(e._foveatedFactor<=y)return!1;let _=f-y,S=W.clamp((e._foveatedFactor-y)/_,0,1),A=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,S),Z=e._screenSpaceError===0&&l(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-A<=Z}var v0e=new Q;Rr.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===re.SCENE2D||d instanceof fn){let b=d.offCenterFrustum;l(b)&&(d=b);let f=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,h);p=s/f}else{let b=Math.max(this._distanceToCamera,W.EPSILON7),f=d.sseDenominator;if(p=s*h/(b*f),i.dynamicScreenSpaceError){let y=i._dynamicScreenSpaceErrorComputedDensity,_=i.dynamicScreenSpaceErrorFactor,S=W.fog(b,y)*_;p-=S}}return p/=e.pixelRatio,p};function Vit(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 Rit(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}Rr.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:js.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!==js.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=Rit(n,this),this._priorityProgressiveResolution=Vit(n,this),this.priorityDeferred=Cit(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};Rr.prototype.updateExpiration=function(){if(l(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=Q.now(v0e);Q.lessThan(this.expireDate,e)&&(this._contentState=fr.EXPIRED,this._expiredContent=this._content)}};function Eit(e){if(!l(e.expireDuration))return;let t=Q.now(v0e);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 Git(e){return function(){return e._priority}}Rr.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?Lit(this):vit(this)};function Lit(e){let t=e._content,n=e._tileset;if(!l(t)){let o=Vi(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new OP(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(l(i))return e._contentState=fr.LOADING,i.then(o=>{if(!e.isDestroyed()&&l(o))return e._contentState=fr.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=fr.FAILED,o})}async function Wit(e,t,n,i,o){let r=e._contentState;e._contentState=fr.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===bi.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=fr.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===bi.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await Fit(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=fr.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=fr.FAILED,a}}function vit(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new xr({throttle:!0,throttleByServer:!0,type:Hs.TILES3D,priorityFunction:Git(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 Wit(e,o,i,n,r)}async function Fit(e,t){let n=Ob(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=nS[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=iS(i,s));let a=oS(i,s);return l(a)&&(o.group=new a_({metadata:a})),o}Rr.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};Rr.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=fr.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 F0e=new de;function A8(e,t){if(t.mode!==re.SCENE3D&&!l(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=de.projectTo2D(n,t.mapProjection,F0e);e._boundingVolume2D=new Kb(i.center,i.radius)}return t.mode!==re.SCENE3D?e._boundingVolume2D:e._boundingVolume}function Iit(e,t){if(t.mode!==re.SCENE3D&&!l(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=de.projectTo2D(n,t.mapProjection,F0e);e._contentBoundingVolume2D=new Kb(i.center,i.radius)}return t.mode!==re.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}Rr.prototype.visibility=function(e,t){let n=e.cullingVolume,i=A8(this,e),o=this._tileset,r=o.clippingPlanes;if(l(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==Jt.INSIDE,a===Jt.OUTSIDE)return js.MASK_OUTSIDE}let s=o.clippingPolygons;if(l(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==Jt.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};Rr.prototype.contentVisibility=function(e){if(!l(this._contentBoundingVolume))return Jt.INSIDE;if(this._visibilityPlaneMask===js.MASK_INSIDE)return Jt.INSIDE;let t=e.cullingVolume,n=Iit(this,e),i=this._tileset,o=i.clippingPlanes;if(l(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==Jt.INSIDE,s===Jt.OUTSIDE)return Jt.OUTSIDE}let r=i.clippingPolygons;if(l(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==Jt.OUTSIDE,s===Jt.INSIDE)return Jt.OUTSIDE}return t.computeVisibility(n)};Rr.prototype.distanceToTile=function(e){return A8(this,e).distanceToCamera(e)};var Pit=new m;Rr.prototype.distanceToTileCenter=function(e){let n=A8(this,e).boundingVolume,i=m.subtract(n.center,e.camera.positionWC,Pit);return m.dot(e.camera.directionWC,i)};Rr.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!l(t)||t.distanceToCamera(e)===0};var I0e=new q,P0e=new m,Xit=new q,Z8=new m,X0e=new ce,N0e=new en,S8=new F;function Nit(e,t,n){let i=m.fromElements(e[0],e[1],e[2],Z8),o=q.fromArray(e,3,Xit);i=F.multiplyByPoint(t,i,i);let r=F.getMatrix3(t,I0e);return o=q.multiply(r,o,o),l(n)?(n.update(i,o),n):new Id(i,o)}function E0e(e,t,n,i){let o=ce.unpack(e,0,X0e),r=e[4],s=e[5],a=en.fromRectangle(o,r,s,ie.WGS84,N0e),c=a.center,d=a.halfAxes;t=F.multiplyTransformation(t,F.inverseTransformation(n,S8),S8),c=F.multiplyByPoint(t,c,c);let u=F.getMatrix3(t,I0e);return d=q.multiply(u,d,d),l(i)&&i instanceof Id?(i.update(c,d),i):new Id(c,d)}function Yit(e,t,n,i){if(!F.equalsEpsilon(t,n,W.EPSILON8))return i instanceof Id?E0e(e,t,n,i):E0e(e,t,n,void 0);let o=ce.unpack(e,0,X0e);return i instanceof Au?(i.rectangle=ce.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(ie.WGS84),i):new Au({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function wit(e,t,n){let i=m.fromElements(e[0],e[1],e[2],Z8),o=e[3];i=F.multiplyByPoint(t,i,i);let r=F.getScale(t,P0e),s=m.maximumComponent(r);return o*=s,l(n)?(n.update(i,o),n):new Kb(i,o)}Rr.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(l(i)&&(o=Ey.parseBoundingVolumeSemantic("TILE",i)),l(o)&&(e=o),!l(e))throw new ue("boundingVolume must be defined");if(Vi(e,"3DTILES_bounding_volume_S2"))return new KP(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(l(r)){let c=Nit(r,t,n);return this._verticalExaggeration!==1&&G0e(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c}if(l(s)){let c=Yit(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(c instanceof Id?G0e(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(c.minimumHeight=Zo.getHeight(c.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.maximumHeight=Zo.getHeight(c.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.computeBoundingVolumes(ie.WGS84))),c}if(l(a)){let c=wit(a,t,n);if(this._verticalExaggeration!==1){let d=Zo.getPosition(c.center,ie.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,Z8),u=c.radius*this._verticalExaggeration;c.update(d,u)}return c}throw new ue("boundingVolume must contain a sphere, region, or box")};var Mit=m.unpackArray(new Array(24).fill(0));function G0e(e,t,n){let i=e.boundingVolume.computeCorners(Mit).map(r=>Zo.getPosition(r,ie.WGS84,t,n,r)),o=en.fromPoints(i,N0e);e.update(o.center,o.halfAxes)}Rr.prototype.updateTransform=function(e,t){e=e??F.IDENTITY;let n=F.multiplyTransformation(e,this.transform,S8),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()};Rr.prototype.updateGeometricErrorScale=function(){let e=F.getScale(this.computedTransform,P0e),t=m.maximumComponent(e);if(this.geometricError=this._geometricError*t,!l(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function kit(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=Qt.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 Uit(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=fr.FAILED,o}}function Dit(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 Oit(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)}Rr.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;Dit(this,e),Oit(this,e),kit(this,e,t,n),Uit(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===Le.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1};var L0e=[];Rr.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&(Eit(this),this._selectedFrame=0,this.lastStyleTime=0,Q.now(this._loadTimestamp),this._contentState=fr.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=L0e;try{this._content.update(e,t)}catch(i){throw this._contentState=fr.FAILED,i}L0e.length=0,t.commandList=n};function W0e(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function MD(e,t,n){return Math.max(W.normalize(e,t,n)-W.EPSILON7,0)}Rr.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),b=u+h,f=r,y=Math.pow(10,b),_=b+f,S=Math.pow(10,_),A=MD(this._depth,n.depth,i.depth);A=t?1-A:A;let V=!e.isSkippingLevelOfDetail&&this.refine===dr.REPLACE?MD(this._priorityHolder._distanceToCamera,n.distance,i.distance):MD(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),E=W0e(V,a,s),G=this._priorityProgressiveResolution?0:p,v=MD(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),I=W0e(v,d,c),X=this.priorityDeferred?y:0,N=e._pass===or.PRELOAD_FLIGHT?0:S;this._priority=A+E+G+I+X+N};Rr.prototype.isDestroyed=function(){return!1};Rr.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 Bm=Rr;var wdi=x(T(),1);var Edi=x(T(),1);function Jb(e){e=e??B.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(Jb.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}}});Jb.prototype.hasProperty=function(e){return jn.hasProperty(e,this._properties,this._class)};Jb.prototype.hasPropertyBySemantic=function(e){return jn.hasPropertyBySemantic(e,this._properties,this._class)};Jb.prototype.getPropertyIds=function(e){return jn.getPropertyIds(this._properties,this._class,e)};Jb.prototype.getProperty=function(e){return jn.getProperty(e,this._properties,this._class)};Jb.prototype.setProperty=function(e,t){return jn.setProperty(e,t,this._properties,this._class)};Jb.prototype.getPropertyBySemantic=function(e){return jn.getPropertyBySemantic(e,this._properties,this._class)};Jb.prototype.setPropertyBySemantic=function(e,t){return jn.setPropertyBySemantic(e,t,this._properties,this._class)};var dV=Jb;var Fdi=x(T(),1);function jb(e){e=e??B.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(jb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});jb.prototype.hasProperty=function(e){return jn.hasProperty(e,this._properties,this._class)};jb.prototype.hasPropertyBySemantic=function(e){return jn.hasPropertyBySemantic(e,this._properties,this._class)};jb.prototype.getPropertyIds=function(e){return jn.getPropertyIds(this._properties,this._class,e)};jb.prototype.getProperty=function(e){return jn.getProperty(e,this._properties,this._class)};jb.prototype.setProperty=function(e,t){return jn.setProperty(e,t,this._properties,this._class)};jb.prototype.getPropertyBySemantic=function(e){return jn.getPropertyBySemantic(e,this._properties,this._class)};jb.prototype.setPropertyBySemantic=function(e,t){return jn.setPropertyBySemantic(e,t,this._properties,this._class)};var JP=jb;function Y0e(e){e=e??B.EMPTY_OBJECT;let t=e.metadataJson,n=e.schema,i=t.metadata??t.tileset,o;l(i)&&(o=new JP({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 dV({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 dV({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(Y0e.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 mS=Y0e;var Bdi=x(T(),1);var w0e={},Bit=new m;w0e.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof Id||i instanceof Au){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=Mm.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof Id||a instanceof Au)){e._optimChildrenWithinParent=Mm.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,d=m.subtract(c.center,o.center,Bit),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=Mm.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===Mm.USE_OPTIMIZATION};var jP=w0e;var qdi=x(T(),1);var Kdi=x(T(),1);function QP(){this.head=void 0,this.tail=void 0,this._length=0}Object.defineProperties(QP.prototype,{length:{get:function(){return this._length}}});function zit(e,t,n){this.item=e,this.previous=t,this.next=n}QP.prototype.add=function(e){let t=new zit(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 M0e(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}QP.prototype.remove=function(e){l(e)&&(M0e(this,e),--this._length)};QP.prototype.splice=function(e,t){if(e===t)return;M0e(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 qP=QP;function hS(){this._list=new qP,this._sentinel=this._list.add(),this._trimTiles=!1}hS.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};hS.prototype.touch=function(e){let t=e.cacheNode;l(t)&&this._list.splice(this._sentinel,t)};hS.prototype.add=function(e){l(e.cacheNode)||(e.cacheNode=this._list.add(e))};hS.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;l(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};hS.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)}};hS.prototype.trim=function(){this._trimTiles=!0};var $P=hS;var oui=x(T(),1);function kD(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 V8(e,t){let n;return t==="_loadTimestamp"?n=Q.toDate(e).getTime():n=e,n}kD.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=V8(e,n),this._referenceMaximum[n]=V8(t,n)};function Hit(e,t){let n=e.tilePropertyName;if(l(n)){let i=V8(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 C8=[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)];kD.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!l(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=Hit(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+W.EPSILON7,c=W.clamp(i-o,0,s)/s,d=C8.length-1,u=c*d,h=Math.floor(u),p=Math.ceil(u),b=u-h,f=C8[h],y=C8[p],_=U.clone(U.WHITE);_.red=W.lerp(f.red,y.red,b),_.green=W.lerp(f.green,y.green,b),_.blue=W.lerp(f.blue,y.blue,b),e._debugColor=_};kD.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 eX=kD;var cui=x(T(),1);function uV(){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}uV.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};uV.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])}};uV.prototype.incrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded+=e.featuresLength,this.numberOfPointsLoaded+=e.pointsLength,this.geometryByteLength+=e.geometryByteLength,this.batchTableByteLength+=e.batchTableByteLength,!(e instanceof xu))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])}};uV.prototype.decrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded-=e.featuresLength,this.numberOfPointsLoaded-=e.pointsLength,this.geometryByteLength-=e.geometryByteLength,this.batchTableByteLength-=e.batchTableByteLength,!(e instanceof xu))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])}};uV.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 ff=uV;var uui=x(T(),1);function tX(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(tX.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});tX.prototype.makeDirty=function(){this._styleDirty=!0};tX.prototype.resetDirty=function(){this._styleDirty=!1};tX.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 nX=tX;var xui=x(T(),1);function Kit(e,t,n){let i=Vi(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)&&!Vi(o,"3DTILES_bounding_volume_S2")&&!Vi(o,"3DTILES_bounding_volume_cylinder"))throw new ue("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 We({url:i.subtrees.uri}),this.contentUriTemplates=[],this.contentHeaders=[];let r=Jit(t);for(let s=0;s<r.length;s++){let a=r[s];this.contentHeaders.push(Be(a,!0));let c=new We({url:a.uri});this.contentUriTemplates.push(c)}this.contentCount=this.contentHeaders.length,this.tileHeader=jit(t),this.subdivisionScheme=Fs[i.subdivisionScheme],this.branchingFactor=Fs.getBranchingFactor(this.subdivisionScheme),this.subtreeLevels=i.subtreeLevels,l(i.availableLevels)?this.availableLevels=i.availableLevels:this.availableLevels=i.maximumLevel+1}function Jit(e){if(Vi(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 jit(e){let t=Be(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 Fp=Kit;var Rui=x(T(),1);var Sui=x(T(),1);var iX={};function k0e(e){return e=(e^e<<8)&16711935,e=(e^e<<4)&252645135,e=(e^e<<2)&858993459,e=(e^e<<1)&1431655765,e}function R8(e){return e=(e^e<<16)&50331903,e=(e^e<<8)&50393103,e=(e^e<<4)&51130563,e=(e^e<<2)&153391689,e}function U0e(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 E8(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}iX.encode2D=function(e,t){return(k0e(e)|k0e(t)<<1)>>>0};iX.decode2D=function(e,t){return l(t)||(t=new Array(2)),t[0]=U0e(e),t[1]=U0e(e>>1),t};iX.encode3D=function(e,t,n){return R8(e)|R8(t)<<1|R8(n)<<2};iX.decode3D=function(e,t){return l(t)||(t=new Array(3)),t[0]=E8(e),t[1]=E8(e>>1),t[2]=E8(e>>2),t};var rx=iX;function pr(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===Fs.OCTREE&&(this.z=e.z)}Object.defineProperties(pr.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===Fs.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===Fs.OCTREE?rx.encode3D(this.x,this.y,this.z):rx.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===Fs.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});pr.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===Fs.OCTREE){let o=(this.z<<e.level)+e.z;return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};pr.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===Fs.OCTREE){let r=Math.floor(this.z/t);return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o,z:r})}return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o})};pr.prototype.getOffsetCoordinates=function(e){let t=e.level-this.level,n=1<<t,i=e.x%n,o=e.y%n;if(this.subdivisionScheme===Fs.OCTREE){let r=e.z%n;return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o,z:r})}return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o})};pr.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===Fs.OCTREE){let o=2*this.z+Math.floor(e/4)%2;return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new pr({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};pr.prototype.getSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels)};pr.prototype.getParentSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels+this.subtreeLevels)};pr.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===Fs.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};pr.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===Fs.OCTREE?this.z===e.z:!0)};pr.prototype.isImplicitTilesetRoot=function(){return this.level===0};pr.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};pr.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};pr.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===Fs.OCTREE&&(e.z=this.z),e};var D0e=[0,0,0];pr.fromMortonIndex=function(e,t,n,i){let o;return e===Fs.OCTREE?(o=rx.decode3D(i,D0e),new pr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=rx.decode2D(i,D0e),new pr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};pr.fromTileIndex=function(e,t,n){let i,o,r;return e===Fs.OCTREE?(i=Math.floor(W.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(W.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),pr.fromMortonIndex(e,t,i,r)};var Ip=pr;var Mui=x(T(),1);var Iui=x(T(),1);function Qb(){}Qb.selectTiles=function(e,t){fe.throwInstantiationError()};Qb.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};Qb.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};Qb.selectTile=function(e,t){if(e.contentVisibility(t)===Jt.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)};Qb.visitTile=function(e,t){++e.tileset._statistics.visited,e._visitedFrame=t.frameNumber};Qb.touchTile=function(e,t){e._touchedFrame!==t.frameNumber&&(e.tileset._cache.touch(e),e._touchedFrame=t.frameNumber)};Qb.loadTile=function(e,t){let{tileset:n}=e;if(e._requestedFrame===t.frameNumber||!e.hasUnloadedRenderableContent&&!e.contentExpired||!Qit(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function Qit(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}Qb.updateTile=function(e,t){O0e(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,eot(e),e._shouldSelect=!1,e._finalResolution=!0};function O0e(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];O0e(r,t),e._visible=r._visible;return}if(qit(e,t)){e._visible=!1;return}let i=e.refine===dr.REPLACE,o=e._optimChildrenWithinParent===Mm.USE_OPTIMIZATION;if(i&&o&&n&&!$it(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function qit(e,t){let{parent:n,tileset:i}=e;return!l(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==dr.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function $it(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 eot(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 Ya=Qb;function B0e(){}var oX={stack:new Yl,stackMaximumLength:0};B0e.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}=Ya,s=oX.stack;for(s.push(i);s.length>0;){oX.stackMaximumLength=Math.max(oX.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===dr.ADD,d=a.refine===dr.REPLACE,u=tot(a);u&¬(a,s,t),(c||d&&!u)&&(iot(e,a),o(a,t),oot(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return oX.stack.trim(oX.stackMaximumLength),n};function tot(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function not(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 iot(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function oot(e,t){e.contentAvailable&&e.contentVisibility(t)!==Jt.OUTSIDE&&e.tileset._selectedTiles.push(e)}var rX=B0e;var zui=x(T(),1);function z0e(){}var sX={stack:new Yl,stackMaximumLength:0},aX={stack:new Yl,stackMaximumLength:0};z0e.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(Ya.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;sot(n,t),sX.stack.trim(sX.stackMaximumLength),aX.stack.trim(aX.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function G8(e,t){e.contentAvailable&&Ya.selectTile(e,t)}function rot(e,t,n){let i=e.refine===dr.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=Ya;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(Ya.sortChildrenByDistanceToCamera);let d=i&&e.hasRenderableContent,u=!0,h=!1,p=-1,b=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let y=r[f];if(y.isVisible?(t.push(y),y._foveatedFactor<b&&(p=f,b=y._foveatedFactor),h=!0):(d||o.loadSiblings)&&(y._foveatedFactor<b&&(p=f,b=y._foveatedFactor),a(y,n),c(y,n)),d){let _;y._inRequestVolume?y.hasRenderableContent?_=y.contentAvailable:_=aot(y,n):_=!1,u=u&&_}}if(h||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let y=(e._wasMinPriorityChild||e===o.root)&&b<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;y._foveatedFactor=Math.min(f._foveatedFactor,y._foveatedFactor),y._distanceToCamera=Math.min(f._distanceToCamera,y._distanceToCamera);for(let _=0;_<r.length;++_)r[_]._priorityHolder=y}return u}function sot(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=Ya,a=sX.stack;for(a.push(e);a.length>0;){sX.stackMaximumLength=Math.max(sX.stackMaximumLength,a.length);let c=a.pop(),d=c.parent,u=!l(d)||d._refines;c._refines=i(c)?rot(c,a,t)&&u:!1;let h=!c._refines&&u;c.hasRenderableContent?c.refine===dr.ADD?(G8(c,t),o(c,t)):c.refine===dr.REPLACE&&(o(c,t),h&&G8(c,t)):(n._emptyTiles.push(c),o(c,t),h&&G8(c,t)),r(c,t),s(c,t)}}function aot(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=Ya,s=!0,a=aX.stack;for(a.push(e);a.length>0;){aX.stackMaximumLength=Math.max(aX.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 b=d[p];a.push(b)}}return e.hasEmptyContent||s}var cX=z0e;var qui=x(T(),1);function H0e(){}var lX={stack:new Yl,stackMaximumLength:0},dX={stack:new Yl,stackMaximumLength:0},qb={stack:new Yl,stackMaximumLength:0,ancestorStack:new Yl,ancestorStackMaximumLength:0},cot=2;H0e.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(Ya.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;fot(n,t),pot(n,t),lX.stack.trim(lX.stackMaximumLength),dX.stack.trim(dX.stackMaximumLength),qb.stack.trim(qb.stackMaximumLength),qb.ancestorStack.trim(qb.ancestorStackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function lot(e,t){let{updateTile:n,touchTile:i,selectTile:o}=Ya,r=dX.stack;for(r.push(e);r.length>0;){dX.stackMaximumLength=Math.max(dX.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<cot&&r.push(d))}}}function UD(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;l(n)?n._shouldSelect=!0:lot(e,t)}function dot(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 uot(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 mot(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=Ya;for(let d=0;d<o.length;++d)r(o[d],n);o.sort(Ya.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 hot(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 fot(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}=Ya,c=lX.stack;for(c.push(e);c.length>0;){lX.stackMaximumLength=Math.max(lX.stackMaximumLength,c.length);let d=c.pop();dot(d,t);let u=d.parent,h=!l(u)||u._refines;d._refines=o(d)?mot(d,c,t)&&h:!1;let p=!d._refines&&h;d.hasRenderableContent?d.refine===dr.ADD?(UD(d,t),r(d,t)):d.refine===dr.REPLACE&&(hot(d,i)?(r(d,t),p&&UD(d,t)):p?(UD(d,t),r(d,t)):uot(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&UD(d,t)),s(d,t),a(d,t)}}function pot(e,t){let{selectTile:n,canTraverse:i}=Ya,{stack:o,ancestorStack:r}=qb,s;for(o.push(e);o.length>0||r.length>0;){if(qb.stackMaximumLength=Math.max(qb.stackMaximumLength,o.length),qb.ancestorStackMaximumLength=Math.max(qb.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===dr.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 uX=H0e;var smi=x(T(),1);function pa(){this._layers=[],this.layerAdded=new _e,this.layerRemoved=new _e,this.layerMoved=new _e,this.layerShownOrHidden=new _e}Object.defineProperties(pa.prototype,{length:{get:function(){return this._layers.length}}});pa.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()})};pa.prototype.addImageryProvider=function(e,t){let n=new bs(e);return this.add(n,t),n};pa.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};pa.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=[]};pa.prototype.contains=function(e){return this.indexOf(e)!==-1};pa.prototype.indexOf=function(e){return this._layers.indexOf(e)};pa.prototype.get=function(e){return this._layers[e]};function DD(e,t){return e.indexOf(t)}function K0e(e,t,n){let i=e._layers;if(t=W.clamp(t,0,i.length-1),n=W.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)}pa.prototype.raise=function(e){let t=DD(this._layers,e);K0e(this,t,t+1)};pa.prototype.lower=function(e){let t=DD(this._layers,e);K0e(this,t,t-1)};pa.prototype.raiseToTop=function(e){let t=DD(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))};pa.prototype.lowerToBottom=function(e){let t=DD(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 bot=new ce;function J0e(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];ce.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)||!ce.contains(d.rectangle,t))continue;let h=bot,p=1/1024;h.west=W.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),h.east=W.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),h.south=W.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),h.north=W.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),ce.contains(h,t)&&i(d)}}pa.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(J0e(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};pa.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(J0e(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let c=s.imageryLayer.imageryProvider.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})};pa.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};pa.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};pa.prototype.isDestroyed=function(){return!1};pa.prototype.destroy=function(){return this.removeAll(!0),he(this)};pa.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 fS=pa;function rr(e){e=e??B.EMPTY_OBJECT,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 $P,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 Yl,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 nX,this._styleApplied=!1,this._modelMatrix=l(e.modelMatrix)?F.clone(e.modelMatrix):F.clone(F.IDENTITY),this._addHeightCallbacks=[],this._statistics=new ff,this._statisticsLast=new ff,this._statisticsPerPass=new Array(or.NUMBER_OF_PASSES);for(let o=0;o<or.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new ff;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 eX(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=e.cullRequestsWhileMoving??!0,this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=e.cullRequestsWhileMovingMultiplier??60,this.progressiveResolutionHeightFraction=W.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 fS(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??W.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??Ln.ENABLED,this.show=e.show??!0,this.colorBlendMode=Ad.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new Sp(e.pointCloudShading),this._pointCloudEyeDomeLighting=new bb,this.loadProgress=new _e,this.allTilesLoaded=new _e,this.initialTilesLoaded=new _e,this.tileLoad=new _e,this.tileUnload=new _e,this.tileFailed=new _e,this.tileVisible=new _e,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)&&us.setOwner(e.clippingPlanes,this,"_clippingPlanes"),this._clippingPolygons=void 0,l(e.clippingPolygons)&&Kh.setOwner(e.clippingPolygons,this,"_clippingPolygons"),l(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new s_,this._shouldDestroyImageBasedLighting=!0),this._environmentMapManager=new hb(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??Fr.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&&Zt("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}Object.defineProperties(rr.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){us.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Kh.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 Ea("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,ibe(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}}});rr.fromIonAssetId=async function(e,t){let n=await ds.fromAssetId(e);return rr.fromUrl(n,t)};rr.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=We.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await rr.loadJson(n),r=await got(n,o),s=new rr(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,ibe(s);let c=l(o.asset.gltfUpAxis)?ao.fromName(o.asset.gltfUpAxis):ao.Y,d=t.modelUpAxis??c,u=t.modelForwardAxis??ao.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,b=s._ellipsoid.cartesianToCartographic(p);return l(b)&&b.height>Wi._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=pt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=F.clone(s._initialClippingPlanesOriginMatrix),s};rr.loadJson=function(e){return We.createIfNeeded(e).fetchJson()};rr.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};rr.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!l(i))throw new ue("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new ue("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");l(t.extensionsRequired)&&rr.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=j0e(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===dr.ADD;let d=c._header.children;if(l(d))for(let u=0;u<d.length;++u){let h=d[u],p=j0e(this,e,h,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&jP.checkChildrenWithinParent(c)}return s};function j0e(e,t,n,i){if(!(l(n.implicitTiling)||Vi(n,"3DTILES_implicit_tiling")))return new Bm(e,t,n,i);let r=e.schema,s=new Fp(t,n,r),a=new Ip({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=Be(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let h=new Bm(e,t,u,i);return h.implicitTileset=s,h.implicitCoordinates=a,h}async function got(e,t){let n=Vi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(l(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Xi.getSchemaLoader({resource:e});else if(l(n.schema))i=Xi.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new mS({schema:i.schema,metadataJson:n});return Xi.unload(i),o}var Q0e=new m,yot=new be,xot=new F,Tot=new m,_ot=new m,Sot=new m,Aot=new m;function Zot(e,t){let n,i,o,r,s,a=t.camera,c=e._root,d=c.contentBoundingVolume;if(d instanceof Au)n=m.normalize(a.positionWC,Q0e),i=a.directionWC,o=a.positionCartographic.height,r=d.minimumHeight,s=d.maximumHeight;else{let y=F.inverseTransformation(c.computedTransform,xot),_=t.mapProjection.ellipsoid,S=d.boundingVolume,A=F.multiplyByPoint(y,S.center,Tot);if(m.magnitude(A)>_.minimumRadius){let Z=be.fromCartesian(A,_,yot);n=m.normalize(a.positionWC,Q0e),i=a.directionWC,o=a.positionCartographic.height,r=0,s=Z.height*2}else{let Z=F.multiplyByPoint(y,a.positionWC,_ot);if(n=m.UNIT_Z,i=F.multiplyByPointAsVector(y,a.directionWC,Sot),i=m.normalize(i,i),o=Z.z,d instanceof Id){let V=q.getColumn(S.halfAxes,2,Aot),E=m.magnitude(V);r=A.z-E,s=A.z+E}else if(d instanceof Kb){let V=S.radius;r=A.z-V,s=A.z+V}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,h=r+(s-r)*u,p=s,b=W.clamp((o-h)/(p-h),0,1),f=1-Math.abs(m.dot(i,n));f=f*(1-b),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function Cot(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=>{ebe(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?wot(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function $0e(e,t){return e._priority-t._priority}rr.prototype.postPassesUpdate=function(e){l(this._root)&&(Vot(this,e),kot(this,e),this._cache.unloadTiles(this,nbe),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};rr.prototype.prePassesUpdate=function(e){if(!l(this._root))return;Fot(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&&Zot(this,e),e.newFrame&&this._cache.reset()};function Vot(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!==fr.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function Rot(e){let t=e._requestedTiles;t.sort($0e);for(let n=0;n<t.length;++n)Cot(e,t[n])}function ebe(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 Eot(e){let t=e._processingQueue,n=0;for(let i=0;i<t.length;++i){let o=t[i];if(o.isDestroyed()||o._contentState!==fr.PROCESSING){++n;continue}n>0&&(t[i-n]=o)}t.length-=n}var Got=new be,Lot=new be,Wot=new m;function vot(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=be.clone(r.positionCartographic,Got),c=be.fromCartesian(o.center,s,Lot);l(c)&&(a.height=c.height);let d=be.toCartesian(a,s,Wot);m.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{l(r.callback)&&r.callback(),r.invoked=!1}))}}function Fot(e,t){Eot(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,ebe(u,e,d)}}e.totalMemoryUsageInBytes<i?Pot(e):a&&n.length>0&&Iot(e)}function Iot(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort($0e)}function Pot(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var OD=new m,Xot={maximumFractionDigits:3};function q0e(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,Xot):Math.round(t).toLocaleString()}function L8(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=m.clone(i,OD);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,OD);r=m.multiplyByScalar(r,.75*n,OD),o=m.add(r,i,OD)}return o}function W8(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: ${q0e(e.content.texturesByteLength)}`,i+=` Geometry Memory: ${q0e(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 Not(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:L8(e.debugPickedTile),a=W8(e.debugPickedTile,e,s);a.pixelOffset=new M(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];W8(a,e,L8(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&W8(a,e,L8(a))}}e._tileDebugLabels.update(t)}function Yot(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 ui({stencil:0,pass:Le.CESIUM_3D_TILE,renderState:Ue.fromCache({stencilMask:Ht.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 y=s[f];u&&d.raiseEvent(y),vot(e,y,t),y.update(e,t,n),c.incrementSelectionCounts(y.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let b=i.length-h;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,y=f.length;i.length+=y;for(let _=b-1;_>=0;--_)i[h+y+_]=i[h+_];for(let _=0;_<y;++_)i[h+_]=f[_]}b=i.length-r,c.numberOfCommands=b,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&b>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(l(e._tileDebugLabels)||(e._tileDebugLabels=new Gp),Not(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var tbe=[];function wot(e,t){let n=t,i=tbe;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&&(Mot(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function nbe(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function Mot(e,t){e._cache.unloadTile(e,t,nbe),t.destroy()}rr.prototype.trimLoadedTiles=function(){this._cache.trim()};function kot(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;ff.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 Uot(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 Dot(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 Oot(e,t,n,i){if(t.mode===re.MORPHING||!l(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,Uot(e),Dot(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&Rot(e),Yot(e,t,i),ff.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 ibe(e){let t=e._credits;l(t)||(t=[]),t.length=0,l(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(yt.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 yt(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}rr.prototype.getTraversal=function(e){let{pass:t}=e;return t===or.MOST_DETAILED_PRELOAD||t===or.MOST_DETAILED_PICK?rX:this.isSkippingLevelOfDetail?uX:cX};rr.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};rr.prototype.updateForPass=function(e,t){this.imageryLayers._update();let n=t.pass;if(n===or.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===or.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===or.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=or.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=Oot(this,e,h,s)),a&&(c.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};rr.prototype.hasExtension=function(e){return l(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};rr.prototype.isDestroyed=function(){return!1};rr.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=tbe;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)};rr.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};rr.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!rr.supportedExtensions[e[t]])throw new ue(`Unsupported 3D Tiles Extension: ${e[t]}`)};var Bot=new xn,zot=new m,Hot=new be;rr.prototype.getHeight=function(e,t){let n=t.ellipsoid;l(n)||(n=ie.WGS84);let i=Bot,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,zot);if(l(r))return n.cartesianToCartographic(r,Hot)?.height};rr.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 Kot=new Kr,Jot=new m;rr.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=mi.raySphere(e,d.contentBoundingVolume.boundingSphere,Kot);!l(u)||!l(d.content)||r.push(d)}let s=r.length;r.sort((c,d)=>{let u=de.distanceSquaredTo(c.contentBoundingVolume.boundingSphere,e.origin),h=de.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,Jot);if(l(u))return a=m.clone(u,n),a}};rr.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};rr.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 $s=rr;var jot=new F;function sx(e,t){t.collectionChanged.addEventListener(sx.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Xt,this._onCollectionChanged(t,t.values,[],[])}sx.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)&&j.getValueOrDefault(a._show,e,!0),h;u&&(h=s.computeModelMatrix(e,jot),c=We.createIfNeeded(j.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],Qot(c,n,s,i)),l(p)&&(p.show=!0,l(h)&&(p.modelMatrix=h),p.maximumScreenSpaceError=j.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};sx.prototype.isDestroyed=function(){return!1};sx.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(sx.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)v8(this,e[i],t,n);return he(this)};sx.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?(de.clone(i.boundingSphere,t),Tt.DONE):Tt.FAILED:Tt.PENDING};sx.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):(v8(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],v8(this,r,a,c),s.remove(r.id)};function v8(e,t,n,i){let o=n[t.id];l(o)&&(l(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function Qot(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await $s.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 mX=sx;var whi=x(T(),1);var qot=U.WHITE,$ot=U.BLACK,ert=new M(2,2);function mV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(mV.prototype,{isConstant:{get:function(){return j.isConstant(this._evenColor)&&j.isConstant(this._oddColor)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:ye("evenColor"),oddColor:ye("oddColor"),repeat:ye("repeat")});mV.prototype.getType=function(e){return"Checkerboard"};var trt=new Q;mV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(trt)),l(t)||(t={}),t.lightColor=j.getValueOrClonedDefault(this._evenColor,e,qot,t.lightColor),t.darkColor=j.getValueOrClonedDefault(this._oddColor,e,$ot,t.darkColor),t.repeat=j.getValueOrDefault(this._repeat,e,ert),t};mV.prototype.equals=function(e){return this===e||e instanceof mV&&j.equals(this._evenColor,e._evenColor)&&j.equals(this._oddColor,e._oddColor)&&j.equals(this._repeat,e._repeat)};var hV=mV;var ifi=x(T(),1);var jhi=x(T(),1);var obe={id:void 0};function hX(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 sl(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 _e,this._id=qn(),this._show=!0,this._firing=!1,this._refire=!1}sl.prototype.suspendEvents=function(){this._suspendCount++};sl.prototype.resumeEvents=function(){this._suspendCount--,hX(this)};Object.defineProperties(sl.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}}});sl.prototype.computeAvailability=function(){let e=Je.MAXIMUM_VALUE,t=Je.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(Je.MINIMUM_VALUE)&&(e=a),Q.greaterThan(c,t)&&!c.equals(Je.MAXIMUM_VALUE)&&(t=c)}}return Je.MAXIMUM_VALUE.equals(e)&&(e=Je.MINIMUM_VALUE),Je.MINIMUM_VALUE.equals(t)&&(t=Je.MAXIMUM_VALUE),new vn({start:e,stop:t})};sl.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(sl.prototype._onEntityDefinitionChanged,this),hX(this),e};sl.prototype.remove=function(e){return l(e)?this.removeById(e.id):!1};sl.prototype.contains=function(e){return this._entities.get(e.id)===e};sl.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(sl.prototype._onEntityDefinitionChanged,this),hX(this),!0):!1};sl.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(sl.prototype._onEntityDefinitionChanged,this),o.set(a,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),hX(this)};sl.prototype.getById=function(e){return this._entities.get(e)};sl.prototype.getOrCreateEntity=function(e){let t=this._entities.get(e);return l(t)||(obe.id=e,t=new Jo(obe),this.add(t)),t};sl.prototype._onEntityDefinitionChanged=function(e){let t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),hX(this)};var wa=sl;var BD={id:void 0},fV=new Array(2);function F8(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 rbe(e,t,n,i){fV[0]=n,fV[1]=i.id,t[JSON.stringify(fV)]=i.definitionChanged.addEventListener(ys.prototype._onDefinitionChanged,e)}function sbe(e,t,n,i){fV[0]=n,fV[1]=i.id;let o=JSON.stringify(fV);t[o](),t[o]=void 0}function ax(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 wa(e),p=e._eventHash,b;for(r=0;r<o;r++)for(d=i[r],d.collectionChanged.removeEventListener(ys.prototype._onCollectionChanged,e),a=d.values,b=d.id,c=a.length-1;c>-1;c--)s=a[c],sbe(e,p,b,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(ys.prototype._onCollectionChanged,e),a=d.values,b=d.id,c=a.length-1;c>-1;c--){s=a[c],rbe(e,p,b,s);let y=h.getById(s.id);l(y)||(y=u.getById(s.id),l(y)?F8(y):(BD.id=s.id,y=new Jo(BD)),h.add(y)),y.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 ys(e,t){this._owner=t,this._composite=new wa(this),this._suspendCount=0,this._collections=l(e)?e.slice():[],this._collectionsCopy=[],this._id=qn(),this._eventHash={},ax(this),this._shouldRecomposite=!1}Object.defineProperties(ys.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}}});ys.prototype.addCollection=function(e,t){l(t)?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),ax(this)};ys.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),ax(this),!0):!1};ys.prototype.removeAllCollections=function(){this._collections.length=0,ax(this)};ys.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};ys.prototype.contains=function(e){return this._composite.contains(e)};ys.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};ys.prototype.getCollection=function(e){return this._collections[e]};ys.prototype.getCollectionsLength=function(){return this._collections.length};function zD(e,t){return e.indexOf(t)}function abe(e,t,n){let i=e._collections;if(t=W.clamp(t,0,i.length-1),n=W.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,ax(e)}ys.prototype.raiseCollection=function(e){let t=zD(this._collections,e);abe(this,t,t+1)};ys.prototype.lowerCollection=function(e){let t=zD(this._collections,e);abe(this,t,t-1)};ys.prototype.raiseCollectionToTop=function(e){let t=zD(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),ax(this))};ys.prototype.lowerCollectionToBottom=function(e){let t=zD(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),ax(this))};ys.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};ys.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(ax(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};ys.prototype.computeAvailability=function(){return this._composite.computeAvailability()};ys.prototype.getById=function(e){return this._composite.getById(e)};ys.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];sbe(this,h,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),F8(d)),d.merge(c));l(d)||r.removeById(y),d=void 0}let b=t.length;for(s=0;s<b;s++){let f=t[s];rbe(this,h,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),l(d)?F8(d):(BD.id=y,d=new Jo(BD),r.add(d))),d.merge(c));d=void 0}r.resumeEvents()};ys.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 b=o[p].getById(e.id);if(l(b)){let f=b[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 I8=ys;var Wfi=x(T(),1);var Zfi=x(T(),1);var rfi=x(T(),1);function P8(){this._removalFunctions=[]}P8.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)}};P8.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t<n;++t)e[t]();e.length=0};var Nr=P8;var bfi=x(T(),1);function Y8(e,t){return Q.compare(e.start,t.start)}function xs(e){if(this._intervals=[],this._changedEvent=new _e,l(e)){let t=e.length;for(let n=0;n<t;n++)this.addInterval(e[n])}}Object.defineProperties(xs.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}}});xs.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof xs))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(!vn.equals(n[r],i[r],t))return!1;return!0};xs.prototype.get=function(e){return this._intervals[e]};xs.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};xs.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};xs.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};xs.prototype.contains=function(e){return this.indexOf(e)>=0};var X8=new vn;xs.prototype.indexOf=function(e){let t=this._intervals;X8.start=e,X8.stop=e;let n=To(t,X8,Y8);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&&vn.contains(t[n-1],e)?n-1:~n)};xs.prototype.findInterval=function(e){e=e??B.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]}};xs.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=To(n,e,Y8);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 vn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new vn({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 vn({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 vn({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 vn({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 vn({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)};xs.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=To(t,e,Y8);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 vn({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 vn({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 vn({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 vn({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new vn({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 vn({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i};xs.prototype.intersect=function(e,t,n){let i=new xs,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=vn.intersect(c,d,new vn,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};xs.fromJulianDateArray=function(e,t){l(t)||(t=new xs);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 vn({start:Je.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],b=n[h+1];d=new vn({start:p,stop:b,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=b}return c&&(d=new vn({start:n[i-1],stop:Je.MAXIMUM_VALUE,isStartIncluded:!s,isStopIncluded:!0}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d)),t};var al=new G0,fX=[0,31,28,31,30,31,30,31,31,30,31,30,31];function N8(e,t,n){l(n)||(n=new Q),Q.toGregorianDate(e,al);let i=al.millisecond+t.millisecond,o=al.second+t.second,r=al.minute+t.minute,s=al.hour+t.hour,a=al.day+t.day,c=al.month+t.month,d=al.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),fX[2]=Sh(d)?29:28;a>fX[c]||c>=13;)a>fX[c]&&(a-=fX[c],++c),c>=13&&(--c,d+=Math.floor(c/12),c=c%12,++c),fX[2]=Sh(d)?29:28;return al.millisecond=i,al.second=o,al.minute=r,al.hour=s,al.day=a,al.month=c,al.year=d,Q.fromGregorianDate(al,n)}var nrt=new Q,irt=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function cbe(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(irt);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,nrt),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var pX=new G0;xs.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=Q.fromIso8601(n[0]),o=Q.fromIso8601(n[1]),r=[];if(!cbe(n[2],pX))r.push(i,o);else{let s=Q.clone(i);for(r.push(s);Q.compare(s,o)<0;)s=N8(s,pX),Q.compare(o,s)<=0&&Q.clone(o,s),r.push(s)}return xs.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};xs.fromIso8601DateArray=function(e,t){return xs.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)};xs.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)(cbe(i[d],pX)||d===0)&&(o&&l(a)?s=N8(a,pX):s=N8(n,pX),r.push(s),a=s);return xs.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var Ts=xs;function ort(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 pS(){this._eventHelper=new Nr,this._definitionChanged=new _e,this._intervals=new Ts,this._intervals.changedEvent.addEventListener(pS.prototype._intervalsChanged,this)}Object.defineProperties(pS.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var rrt=new Q;pS.prototype.getValue=function(e,t){l(e)||(e=Q.now(rrt));let n=this._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};pS.prototype.equals=function(e){return this===e||e instanceof pS&&this._intervals.equals(e._intervals,j.equals)};pS.prototype._intervalsChanged=function(){ort(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var cl=pS;function cx(){this._definitionChanged=new _e,this._composite=new cl,this._composite.definitionChanged.addEventListener(cx.prototype._raiseDefinitionChanged,this)}Object.defineProperties(cx.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});cx.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(t))return t.getType(e)};var srt=new Q;cx.prototype.getValue=function(e,t){l(e)||(e=Q.now(srt));let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};cx.prototype.equals=function(e){return this===e||e instanceof cx&&this._composite.equals(e._composite,j.equals)};cx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var pV=cx;var wfi=x(T(),1);function lx(e){this._referenceFrame=e??Mi.FIXED,this._definitionChanged=new _e,this._composite=new cl,this._composite.definitionChanged.addEventListener(lx.prototype._raiseDefinitionChanged,this)}Object.defineProperties(lx.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 art=new Q;lx.prototype.getValue=function(e,t){return l(e)||(e=Q.now(art)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};lx.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(i))return i.getValueInReferenceFrame(e,t,n)};lx.prototype.equals=function(e){return this===e||e instanceof lx&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,j.equals)};lx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var cc=lx;var I0i=x(T(),1);var Ipi=x(T(),1);var kfi=x(T(),1),crt={ROUNDED:0,MITERED:1,BEVELED:2},eo=Object.freeze(crt);var mpi=x(T(),1);var npi=x(T(),1);var lc=[new m,new m],lrt=new m,drt=new m,urt=new m,mrt=new m,hrt=new m,frt=new m,prt=new m,brt=new m,grt=new m,bV=new m,HD=new m,bX={},w8=new be;function yrt(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];w8=t.cartesianToCartographic(o,w8),n[i]=w8.height,e[i]=t.scaleToGeodeticSurface(o,o)}return n}function M8(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 KD=new m,JD=new m;function xrt(e,t,n,i){let o=new Ls(n,i),r=o.projectPointOntoPlane(m.add(n,e,KD),KD),s=o.projectPointOntoPlane(m.add(n,t,JD),JD),a=M.angleBetween(r,s);return s.x*r.y-s.y*r.x>=0?-a:a}var Trt=new m(-1,0,0),bS=new F,_rt=new F,k8=new q,Srt=q.IDENTITY.clone(),Art=new m,Zrt=new se,lbe=new m;function $b(e,t,n,i,o,r,s,a){let c=Art,d=Zrt;bS=pt.eastNorthUpToFixedFrame(e,o,bS),c=F.multiplyByPointAsVector(bS,Trt,c),c=m.normalize(c,c);let u=xrt(c,t,e,o);k8=q.fromRotationZ(u,k8),lbe.z=r,bS=F.multiplyTransformation(bS,F.fromRotationTranslation(k8,lbe,_rt),bS);let h=Srt;h[0]=s;for(let p=0;p<a;p++)for(let b=0;b<n.length;b+=3)d=m.fromArray(n,b,d),d=q.multiplyByVector(h,d,d),d=F.multiplyByPoint(bS,d,d),i.push(d.x,d.y,d.z);return i}var Crt=new m;function U8(e,t,n,i,o,r,s){for(let a=0;a<e.length;a+=3){let c=m.fromArray(e,a,Crt);i=$b(c,t,n,i,o,r[a/3],s,1)}return i}function Vrt(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 dbe(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 ube=new Pe,mbe=new m,hbe=new q;function fbe(e,t,n,i,o,r,s,a,c,d){let u=m.angleBetween(m.subtract(t,e,bV),m.subtract(n,e,HD)),h=i===eo.BEVELED?0:Math.ceil(u/W.toRadians(5)),p;o?p=q.fromQuaternion(Pe.fromAxisAngle(m.negate(e,bV),u/(h+1),ube),hbe):p=q.fromQuaternion(Pe.fromAxisAngle(e,u/(h+1),ube),hbe);let b,f;if(t=m.clone(t,mbe),h>0){let y=d?2:1;for(let _=0;_<h;_++)t=q.multiplyByVector(p,t,t),b=m.subtract(t,e,bV),b=m.normalize(b,b),o||(b=m.negate(b,b)),f=r.scaleToGeodeticSurface(t,HD),s=$b(f,b,a,s,r,c,1,y)}else b=m.subtract(t,e,bV),b=m.normalize(b,b),o||(b=m.negate(b,b)),f=r.scaleToGeodeticSurface(t,HD),s=$b(f,b,a,s,r,c,1,1),n=m.clone(n,mbe),b=m.subtract(n,e,bV),b=m.normalize(b,b),o||(b=m.negate(b,b)),f=r.scaleToGeodeticSurface(n,HD),s=$b(f,b,a,s,r,c,1,1);return s}bX.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};bX.angleIsGreaterThanPi=function(e,t,n,i){let o=new Ls(n,i),r=o.projectPointOntoPlane(m.add(n,e,KD),KD),s=o.projectPointOntoPlane(m.add(n,t,JD),JD);return s.x*r.y-s.y*r.x>=0};var Rrt=new m,Ert=new m;bX.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=yrt(e,r),a=i._granularity,c=i._cornerType,d=o?Vrt(t,n):dbe(t,n),u=o?dbe(t,n):void 0,h=n.height/2,p=n.width/2,b=e.length,f=[],y=o?[]:void 0,_=lrt,S=drt,A=urt,Z=mrt,V=hrt,E=frt,G=prt,v=brt,I=grt,X=e[0],N=e[1];Z=r.geodeticSurfaceNormal(X,Z),_=m.subtract(N,X,_),_=m.normalize(_,_),v=m.cross(Z,_,v),v=m.normalize(v,v);let g=s[0],C=s[1];o&&(y=$b(X,v,u,y,r,g+h,1,1)),I=m.clone(X,I),X=N,S=m.negate(_,S);let R,L;for(let O=1;O<b-1;O++){let k=o?2:1;if(N=e[O+1],X.equals(N)){Zt("Positions are too close and are considered equivalent with rounding error.");continue}_=m.subtract(N,X,_),_=m.normalize(_,_),Z=r.geodeticSurfaceNormal(X,Z);let D=m.multiplyByScalar(Z,m.dot(_,Z),Rrt);m.subtract(_,D,D),m.normalize(D,D);let w=m.multiplyByScalar(Z,m.dot(S,Z),Ert);if(m.subtract(S,w,w),m.normalize(w,w),!W.equalsEpsilon(Math.abs(m.dot(D,w)),1,W.EPSILON7)){A=m.add(_,S,A),A=m.normalize(A,A),A=m.cross(A,Z,A),A=m.cross(Z,A,A),A=m.normalize(A,A);let J=1/Math.max(.25,m.magnitude(m.cross(A,S,bV))),ee=bX.angleIsGreaterThanPi(_,S,X,r);ee?(V=m.add(X,m.multiplyByScalar(A,J*p,A),V),E=m.add(V,m.multiplyByScalar(v,p,E),E),lc[0]=m.clone(I,lc[0]),lc[1]=m.clone(E,lc[1]),R=M8(lc,g+h,C+h,a),L=$i.generateArc({positions:lc,granularity:a,ellipsoid:r}),f=U8(L,v,d,f,r,R,1),v=m.cross(Z,_,v),v=m.normalize(v,v),G=m.add(V,m.multiplyByScalar(v,p,G),G),c===eo.ROUNDED||c===eo.BEVELED?fbe(V,E,G,c,ee,r,f,d,C+h,o):(A=m.negate(A,A),f=$b(X,A,d,f,r,C+h,J,k)),I=m.clone(G,I)):(V=m.add(X,m.multiplyByScalar(A,J*p,A),V),E=m.add(V,m.multiplyByScalar(v,-p,E),E),lc[0]=m.clone(I,lc[0]),lc[1]=m.clone(E,lc[1]),R=M8(lc,g+h,C+h,a),L=$i.generateArc({positions:lc,granularity:a,ellipsoid:r}),f=U8(L,v,d,f,r,R,1),v=m.cross(Z,_,v),v=m.normalize(v,v),G=m.add(V,m.multiplyByScalar(v,-p,G),G),c===eo.ROUNDED||c===eo.BEVELED?fbe(V,E,G,c,ee,r,f,d,C+h,o):f=$b(X,A,d,f,r,C+h,J,k),I=m.clone(G,I)),S=m.negate(_,S)}else f=$b(I,v,d,f,r,g+h,1,1),I=X;g=C,C=s[O+1],X=N}lc[0]=m.clone(I,lc[0]),lc[1]=m.clone(X,lc[1]),R=M8(lc,g+h,C+h,a),L=$i.generateArc({positions:lc,granularity:a,ellipsoid:r}),f=U8(L,v,d,f,r,R,1),o&&(y=$b(X,v,u,y,r,C+h,1,1)),b=f.length;let P=o?b+y.length:b,Y=new Float64Array(P);return Y.set(f),o&&Y.set(y,b),Y};var pf=bX;var O8={},gV=new m,xbe=new m,Grt=new m,pbe=new m,Ql=[new m,new m],Tbe=new m,_be=new m,Sbe=new m,Lrt=new m,Wrt=new m,vrt=new m,Frt=new m,Irt=new m,Prt=new m,Xrt=new m,bbe=new Pe,gbe=new q;function jD(e,t,n,i,o){let r=m.angleBetween(m.subtract(t,e,gV),m.subtract(n,e,xbe)),s=i===eo.BEVELED?1:Math.ceil(r/W.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=q.fromQuaternion(Pe.fromAxisAngle(m.negate(e,gV),r/s,bbe),gbe):d=q.fromQuaternion(Pe.fromAxisAngle(e,r/s,bbe),gbe);let u=0;t=m.clone(t,gV);for(let h=0;h<s;h++)t=q.multiplyByVector(d,t,t),c[u++]=t.x,c[u++]=t.y,c[u++]=t.z;return c}function Nrt(e){let t=Tbe,n=_be,i=Sbe,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=jD(t,n,i,eo.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=jD(t,n,i,eo.ROUNDED,!1);return[r,c]}function ybe(e,t,n,i){let o=gV;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 D8(e,t,n,i){let o=new Array(e.length),r=new Array(e.length),s=m.multiplyByScalar(t,n,gV),a=m.negate(s,xbe),c=0,d=e.length-1;for(let u=0;u<e.length;u+=3){let h=m.fromArray(e,u,Grt),p=m.add(h,a,pbe);o[c++]=p.x,o[c++]=p.y,o[c++]=p.z;let b=m.add(h,s,pbe);r[d--]=b.z,r[d--]=b.y,r[d--]=b.x}return i.push(o,r),i}O8.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 Yrt=new m,wrt=new m;O8.computePositions=function(e){let t=e.granularity,n=e.positions,i=e.ellipsoid,o=e.width/2,r=e.cornerType,s=e.saveAttributes,a=Tbe,c=_be,d=Sbe,u=Lrt,h=Wrt,p=vrt,b=Frt,f=Irt,y=Prt,_=Xrt,S=[],A=s?[]:void 0,Z=s?[]:void 0,V=n[0],E=n[1];c=m.normalize(m.subtract(E,V,c),c),a=i.geodeticSurfaceNormal(V,a),u=m.normalize(m.cross(a,c,u),u),s&&(A.push(u.x,u.y,u.z),Z.push(a.x,a.y,a.z)),b=m.clone(V,b),V=E,d=m.negate(c,d);let G,v=[],I,X=n.length;for(I=1;I<X-1;I++){a=i.geodeticSurfaceNormal(V,a),E=n[I+1],c=m.normalize(m.subtract(E,V,c),c);let g=m.multiplyByScalar(a,m.dot(c,a),Yrt);m.subtract(c,g,g),m.normalize(g,g);let C=m.multiplyByScalar(a,m.dot(d,a),wrt);if(m.subtract(d,C,C),m.normalize(C,C),!W.equalsEpsilon(Math.abs(m.dot(g,C)),1,W.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 L=o/Math.max(.25,m.magnitude(m.cross(h,d,gV))),P=pf.angleIsGreaterThanPi(c,d,V,i);h=m.multiplyByScalar(h,L,h),P?(f=m.add(V,h,f),_=m.add(f,m.multiplyByScalar(u,o,_),_),y=m.add(f,m.multiplyByScalar(u,o*2,y),y),Ql[0]=m.clone(b,Ql[0]),Ql[1]=m.clone(_,Ql[1]),G=$i.generateArc({positions:Ql,granularity:t,ellipsoid:i}),S=D8(G,u,o,S),s&&(A.push(u.x,u.y,u.z),Z.push(a.x,a.y,a.z)),p=m.clone(y,p),u=m.normalize(m.cross(a,c,u),u),y=m.add(f,m.multiplyByScalar(u,o*2,y),y),b=m.add(f,m.multiplyByScalar(u,o,b),b),r===eo.ROUNDED||r===eo.BEVELED?v.push({leftPositions:jD(f,p,y,r,P)}):v.push({leftPositions:ybe(V,m.negate(h,h),y,P)})):(y=m.add(V,h,y),_=m.add(y,m.negate(m.multiplyByScalar(u,o,_),_),_),f=m.add(y,m.negate(m.multiplyByScalar(u,o*2,f),f),f),Ql[0]=m.clone(b,Ql[0]),Ql[1]=m.clone(_,Ql[1]),G=$i.generateArc({positions:Ql,granularity:t,ellipsoid:i}),S=D8(G,u,o,S),s&&(A.push(u.x,u.y,u.z),Z.push(a.x,a.y,a.z)),p=m.clone(f,p),u=m.normalize(m.cross(a,c,u),u),f=m.add(y,m.negate(m.multiplyByScalar(u,o*2,f),f),f),b=m.add(y,m.negate(m.multiplyByScalar(u,o,b),b),b),r===eo.ROUNDED||r===eo.BEVELED?v.push({rightPositions:jD(y,p,f,r,P)}):v.push({rightPositions:ybe(V,h,f,P)})),d=m.negate(c,d)}V=E}a=i.geodeticSurfaceNormal(V,a),Ql[0]=m.clone(b,Ql[0]),Ql[1]=m.clone(V,Ql[1]),G=$i.generateArc({positions:Ql,granularity:t,ellipsoid:i}),S=D8(G,u,o,S),s&&(A.push(u.x,u.y,u.z),Z.push(a.x,a.y,a.z));let N;return r===eo.ROUNDED&&(N=Nrt(S)),{positions:S,corners:v,lefts:A,normals:Z,endPositions:N}};var uo=O8;var Cbe=new m,Vbe=new m,QD=new m,qD=new m,Mrt=new m,Rbe=new m,dx=new m,yV=new m;function Ebe(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function bf(e,t,n,i,o,r){let s=e.normals,a=e.tangents,c=e.bitangents,d=m.normalize(m.cross(n,t,dx),dx);r.normal&&uo.addAttribute(s,t,i,o),r.tangent&&uo.addAttribute(a,d,i,o),r.bitangent&&uo.addAttribute(c,n,i,o)}function Gbe(e,t,n){let i=e.positions,o=e.corners,r=e.endPositions,s=e.lefts,a=e.normals,c=new yn,d,u=0,h=0,p,b=0,f;for(p=0;p<i.length;p+=2)f=i[p].length-3,u+=f,b+=f*2,h+=i[p+1].length-3;for(u+=3,h+=3,p=0;p<o.length;p++){d=o[p];let $=o[p].leftPositions;l($)?(f=$.length,u+=f,b+=f):(f=o[p].rightPositions.length,h+=f,b+=f)}let y=l(r),_;y&&(_=r[0].length-3,u+=_,h+=_,_/=3,b+=_*6);let S=u+h,A=new Float64Array(S),Z=t.normal?new Float32Array(S):void 0,V=t.tangent?new Float32Array(S):void 0,E=t.bitangent?new Float32Array(S):void 0,G={normals:Z,tangents:V,bitangents:E},v=0,I=S-1,X,N,g,C,R=Cbe,L=Vbe,P,Y,O=_/2,k=Ne.createTypedArray(S/3,b),D=0;if(y){Y=QD,P=qD;let $=r[0];for(R=m.fromArray(a,0,R),L=m.fromArray(s,0,L),p=0;p<O;p++)Y=m.fromArray($,(O-1-p)*3,Y),P=m.fromArray($,(O+p)*3,P),uo.addAttribute(A,P,v),uo.addAttribute(A,Y,void 0,I),bf(G,R,L,v,I,t),N=v/3,C=N+1,X=(I-2)/3,g=X-1,k[D++]=X,k[D++]=N,k[D++]=g,k[D++]=g,k[D++]=N,k[D++]=C,v+=3,I-=3}let w=0,z=0,J=i[w++],ee=i[w++];A.set(J,v),A.set(ee,I-ee.length+1),L=m.fromArray(s,z,L);let H,te;for(f=ee.length-3,p=0;p<f;p+=3)H=n.geodeticSurfaceNormal(m.fromArray(J,p,dx),dx),te=n.geodeticSurfaceNormal(m.fromArray(ee,f-p,yV),yV),R=m.normalize(m.add(H,te,R),R),bf(G,R,L,v,I,t),N=v/3,C=N+1,X=(I-2)/3,g=X-1,k[D++]=X,k[D++]=N,k[D++]=g,k[D++]=g,k[D++]=N,k[D++]=C,v+=3,I-=3;for(H=n.geodeticSurfaceNormal(m.fromArray(J,f,dx),dx),te=n.geodeticSurfaceNormal(m.fromArray(ee,f,yV),yV),R=m.normalize(m.add(H,te,R),R),z+=3,p=0;p<o.length;p++){let $;d=o[p];let pe=d.leftPositions,xe=d.rightPositions,le,Te,Se=Rbe,Ee=QD,Ve=qD;if(R=m.fromArray(a,z,R),l(pe)){for(bf(G,R,L,void 0,I,t),I-=3,le=C,Te=g,$=0;$<pe.length/3;$++)Se=m.fromArray(pe,$*3,Se),k[D++]=le,k[D++]=Te-$-1,k[D++]=Te-$,uo.addAttribute(A,Se,void 0,I),Ee=m.fromArray(A,(Te-$-1)*3,Ee),Ve=m.fromArray(A,le*3,Ve),L=m.normalize(m.subtract(Ee,Ve,L),L),bf(G,R,L,void 0,I,t),I-=3;Se=m.fromArray(A,le*3,Se),Ee=m.subtract(m.fromArray(A,Te*3,Ee),Se,Ee),Ve=m.subtract(m.fromArray(A,(Te-$)*3,Ve),Se,Ve),L=m.normalize(m.add(Ee,Ve,L),L),bf(G,R,L,v,void 0,t),v+=3}else{for(bf(G,R,L,v,void 0,t),v+=3,le=g,Te=C,$=0;$<xe.length/3;$++)Se=m.fromArray(xe,$*3,Se),k[D++]=le,k[D++]=Te+$,k[D++]=Te+$+1,uo.addAttribute(A,Se,v),Ee=m.fromArray(A,le*3,Ee),Ve=m.fromArray(A,(Te+$)*3,Ve),L=m.normalize(m.subtract(Ee,Ve,L),L),bf(G,R,L,v,void 0,t),v+=3;Se=m.fromArray(A,le*3,Se),Ee=m.subtract(m.fromArray(A,(Te+$)*3,Ee),Se,Ee),Ve=m.subtract(m.fromArray(A,Te*3,Ve),Se,Ve),L=m.normalize(m.negate(m.add(Ve,Ee,L),L),L),bf(G,R,L,void 0,I,t),I-=3}for(J=i[w++],ee=i[w++],J.splice(0,3),ee.splice(ee.length-3,3),A.set(J,v),A.set(ee,I-ee.length+1),f=ee.length-3,z+=3,L=m.fromArray(s,z,L),$=0;$<ee.length;$+=3)H=n.geodeticSurfaceNormal(m.fromArray(J,$,dx),dx),te=n.geodeticSurfaceNormal(m.fromArray(ee,f-$,yV),yV),R=m.normalize(m.add(H,te,R),R),bf(G,R,L,v,I,t),C=v/3,N=C-1,g=(I-2)/3,X=g+1,k[D++]=X,k[D++]=N,k[D++]=g,k[D++]=g,k[D++]=N,k[D++]=C,v+=3,I-=3;v-=3,I+=3}if(R=m.fromArray(a,a.length-3,R),bf(G,R,L,v,I,t),y){v+=3,I-=3,Y=QD,P=qD;let $=r[1];for(p=0;p<O;p++)Y=m.fromArray($,(_-p-1)*3,Y),P=m.fromArray($,p*3,P),uo.addAttribute(A,Y,void 0,I),uo.addAttribute(A,P,v),bf(G,R,L,v,I,t),C=v/3,N=C-1,g=(I-2)/3,X=g+1,k[D++]=X,k[D++]=N,k[D++]=g,k[D++]=g,k[D++]=N,k[D++]=C,v+=3,I-=3}if(c.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:A}),t.st){let $=new Float32Array(S/3*2),pe,xe,le=0;if(y){u/=3,h/=3;let Te=Math.PI/(_+1);xe=1/(u-_+1),pe=1/(h-_+1);let Se,Ee=_/2;for(p=Ee+1;p<_+1;p++)Se=W.PI_OVER_TWO+Te*p,$[le++]=pe*(1+Math.cos(Se)),$[le++]=.5*(1+Math.sin(Se));for(p=1;p<h-_+1;p++)$[le++]=p*pe,$[le++]=0;for(p=_;p>Ee;p--)Se=W.PI_OVER_TWO-p*Te,$[le++]=1-pe*(1+Math.cos(Se)),$[le++]=.5*(1+Math.sin(Se));for(p=Ee;p>0;p--)Se=W.PI_OVER_TWO-Te*p,$[le++]=1-xe*(1+Math.cos(Se)),$[le++]=.5*(1+Math.sin(Se));for(p=u-_;p>0;p--)$[le++]=p*xe,$[le++]=1;for(p=1;p<Ee+1;p++)Se=W.PI_OVER_TWO+Te*p,$[le++]=xe*(1+Math.cos(Se)),$[le++]=.5*(1+Math.sin(Se))}else{for(u/=3,h/=3,xe=1/(u-1),pe=1/(h-1),p=0;p<h;p++)$[le++]=p*pe,$[le++]=0;for(p=u;p>0;p--)$[le++]=(p-1)*xe,$[le++]=1}c.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:$})}return t.normal&&(c.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:G.normals})),t.tangent&&(c.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:G.tangents})),t.bitangent&&(c.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:G.bitangents})),{attributes:c,indices:k}}function krt(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,b=Cbe,f=Vbe,y=QD,_=qD,S=Mrt,A=Rbe,Z=c;for(d=0;d<s;d+=3){let V=Z+c;b=m.fromArray(n,d,b),f=m.fromArray(n,d+s,f),y=m.fromArray(n,(d+3)%s,y),f=m.subtract(f,b,f),y=m.subtract(y,b,y),_=m.normalize(m.cross(f,y,_),_),t.normal&&(uo.addAttribute(u,_,V),uo.addAttribute(u,_,V+3),uo.addAttribute(u,_,Z),uo.addAttribute(u,_,Z+3)),(t.tangent||t.bitangent)&&(A=m.fromArray(i,d,A),t.bitangent&&(uo.addAttribute(p,A,V),uo.addAttribute(p,A,V+3),uo.addAttribute(p,A,Z),uo.addAttribute(p,A,Z+3)),t.tangent&&(S=m.normalize(m.cross(A,_,S),S),uo.addAttribute(h,S,V),uo.addAttribute(h,S,V+3),uo.addAttribute(h,S,Z),uo.addAttribute(h,S,Z+3))),Z+=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 V=e.tangent.values;h.set(V),h.set(V,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 b=0;b<2;b++){for(h[p++]=u[0],h[p++]=u[1],d=2;d<a;d+=2){let f=u[d],y=u[d+1];h[p++]=f,h[p++]=y,h[p++]=f,h[p++]=y}h[p++]=u[0],h[p++]=u[1]}e.st.values=h}return e}function B8(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 Urt(e,t){let n=new Xe({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=uo.computePositions(e),r=Gbe(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),b=new Float64Array(h);b.set(u);let f=new Float64Array(h*4);u=Ri.scaleToGeodeticHeight(u,s,i),f=B8(u,0,f),b=Ri.scaleToGeodeticHeight(b,a,i),f=B8(b,h*2,f),p.set(u),p.set(b,h),p.set(f,h*2),c.position.values=p,c=krt(c,t);let y,_=h/3;if(e.shadowVolume){let X=c.normal.values;h=X.length;let N=new Float32Array(h*6);for(y=0;y<h;y++)X[y]=-X[y];N.set(X,h),N=B8(X,h*4,N),c.extrudeDirection=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:N}),t.normal||(c.normal=void 0)}if(l(e.offsetAttribute)){let X=new Uint8Array(_*6);if(e.offsetAttribute===mn.TOP)X=X.fill(1,0,_).fill(1,_*2,_*4);else{let N=e.offsetAttribute===mn.NONE?0:1;X=X.fill(N)}c.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:X})}let S=d.length,A=_+_,Z=Ne.createTypedArray(p.length/3,S*2+A*3);Z.set(d);let V=S;for(y=0;y<S;y+=3){let X=d[y],N=d[y+1],g=d[y+2];Z[V++]=g+_,Z[V++]=N+_,Z[V++]=X+_}let E,G,v,I;for(y=0;y<A;y+=2)E=y+A,G=E+A,v=E+1,I=G+1,Z[V++]=E,Z[V++]=G,Z[V++]=v,Z[V++]=v,Z[V++]=G,Z[V++]=I;return{attributes:c,indices:Z}}var Abe=new m,gX=new m,Hm=new be;function Zbe(e,t,n,i,o,r){let s=m.subtract(t,e,Abe);m.normalize(s,s);let a=n.geodeticSurfaceNormal(e,gX),c=m.cross(s,a,Abe);m.multiplyByScalar(c,i,c);let d=o.latitude,u=o.longitude,h=r.latitude,p=r.longitude;m.add(e,c,gX),n.cartesianToCartographic(gX,Hm);let b=Hm.latitude,f=Hm.longitude;d=Math.min(d,b),u=Math.min(u,f),h=Math.max(h,b),p=Math.max(p,f),m.subtract(e,c,gX),n.cartesianToCartographic(gX,Hm),b=Hm.latitude,f=Hm.longitude,d=Math.min(d,b),u=Math.min(u,f),h=Math.max(h,b),p=Math.max(p,f),o.latitude=d,o.longitude=u,r.latitude=h,r.longitude=p}var zm=new m,yX=new m,Pd=new be,Xd=new be;function Lbe(e,t,n,i,o){e=Ebe(e,t);let r=Oo(e,m.equalsEpsilon),s=r.length;if(s<2||n<=0)return new ce;let a=n*.5;Pd.latitude=Number.POSITIVE_INFINITY,Pd.longitude=Number.POSITIVE_INFINITY,Xd.latitude=Number.NEGATIVE_INFINITY,Xd.longitude=Number.NEGATIVE_INFINITY;let c,d;if(i===eo.ROUNDED){let p=r[0];m.subtract(p,r[1],zm),m.normalize(zm,zm),m.multiplyByScalar(zm,a,zm),m.add(p,zm,yX),t.cartesianToCartographic(yX,Hm),c=Hm.latitude,d=Hm.longitude,Pd.latitude=Math.min(Pd.latitude,c),Pd.longitude=Math.min(Pd.longitude,d),Xd.latitude=Math.max(Xd.latitude,c),Xd.longitude=Math.max(Xd.longitude,d)}for(let p=0;p<s-1;++p)Zbe(r[p],r[p+1],t,a,Pd,Xd);let u=r[s-1];m.subtract(u,r[s-2],zm),m.normalize(zm,zm),m.multiplyByScalar(zm,a,zm),m.add(u,zm,yX),Zbe(u,yX,t,a,Pd,Xd),i===eo.ROUNDED&&(t.cartesianToCartographic(yX,Hm),c=Hm.latitude,d=Hm.longitude,Pd.latitude=Math.min(Pd.latitude,c),Pd.longitude=Math.min(Pd.longitude,d),Xd.latitude=Math.max(Xd.latitude,c),Xd.longitude=Math.max(Xd.longitude,d));let h=l(o)?o:new ce;return h.north=Xd.latitude,h.south=Pd.latitude,h.east=Xd.longitude,h.west=Pd.longitude,h}function tg(e){e=e??B.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=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??eo.ROUNDED,this._granularity=e.granularity??W.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+Xe.packedLength+7}tg.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.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 Wbe=ie.clone(ie.UNIT_SPHERE),vbe=new Xe,eg={positions:void 0,ellipsoid:Wbe,vertexFormat:vbe,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};tg.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,Wbe);t+=ie.packedLength;let s=Xe.unpack(e,t,vbe);t+=Xe.packedLength;let a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++]===1,b=e[t];return l(n)?(n._positions=o,n._ellipsoid=ie.clone(r,n._ellipsoid),n._vertexFormat=Xe.clone(s,n._vertexFormat),n._width=a,n._height=c,n._extrudedHeight=d,n._cornerType=u,n._granularity=h,n._shadowVolume=p,n._offsetAttribute=b===-1?void 0:b,n):(eg.positions=o,eg.width=a,eg.height=c,eg.extrudedHeight=d,eg.cornerType=u,eg.granularity=h,eg.shadowVolume=p,eg.offsetAttribute=b===-1?void 0:b,new tg(eg))};tg.computeRectangle=function(e,t){e=e??B.EMPTY_OBJECT;let n=e.positions,i=e.width,o=e.ellipsoid??ie.default,r=e.cornerType??eo.ROUNDED;return Lbe(n,o,i,r,t)};tg.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=Ebe(t,i);let o=Oo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!W.equalsEpsilon(r,s,0,W.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=Urt(d,c);else{let b=uo.computePositions(d);if(u=Gbe(b,c,i),u.attributes.position.values=Ri.scaleToGeodeticHeight(u.attributes.position.values,r,i),l(e._offsetAttribute)){let f=e._offsetAttribute===mn.NONE?0:1,y=u.attributes.position.values.length,_=new Uint8Array(y/3).fill(f);u.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}}let h=u.attributes,p=de.fromVertices(h.position.values,void 0,3);return c.position||(u.attributes.position.values=void 0),new gt({attributes:h,indices:u.indices,primitiveType:ve.TRIANGLES,boundingSphere:p,offsetAttribute:e._offsetAttribute})};tg.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new tg({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:o,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(tg.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=Lbe(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var gS=tg;var $pi=x(T(),1);var Fbe=new m,Ibe=new m,Drt=new m;function Ort(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Pbe(e,t){let n=[],i=e.positions,o=e.corners,r=e.endPositions,s=new yn,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 P=o[u].leftPositions;l(P)?(p=P.length,c+=p,h+=p/3*2):(p=o[u].rightPositions.length,d+=p,h+=p/3*2)}let b=l(r),f;b&&(f=r[0].length-3,c+=f,d+=f,f/=3,h+=f*4);let y=c+d,_=new Float64Array(y),S=0,A=y-1,Z,V,E,G,v,I,X=f/2,N=Ne.createTypedArray(y/3,h+4),g=0;if(N[g++]=S/3,N[g++]=(A-2)/3,b){n.push(S/3),I=Fbe,v=Ibe;let P=r[0];for(u=0;u<X;u++)I=m.fromArray(P,(X-1-u)*3,I),v=m.fromArray(P,(X+u)*3,v),uo.addAttribute(_,v,S),uo.addAttribute(_,I,void 0,A),V=S/3,G=V+1,Z=(A-2)/3,E=Z-1,N[g++]=Z,N[g++]=E,N[g++]=V,N[g++]=G,S+=3,A-=3}let C=0,R=i[C++],L=i[C++];for(_.set(R,S),_.set(L,A-L.length+1),p=L.length-3,n.push(S/3,(A-2)/3),u=0;u<p;u+=3)V=S/3,G=V+1,Z=(A-2)/3,E=Z-1,N[g++]=Z,N[g++]=E,N[g++]=V,N[g++]=G,S+=3,A-=3;for(u=0;u<o.length;u++){let P;a=o[u];let Y=a.leftPositions,O=a.rightPositions,k,D=Drt;if(l(Y)){for(A-=3,k=E,n.push(G),P=0;P<Y.length/3;P++)D=m.fromArray(Y,P*3,D),N[g++]=k-P-1,N[g++]=k-P,uo.addAttribute(_,D,void 0,A),A-=3;n.push(k-Math.floor(Y.length/6)),t===eo.BEVELED&&n.push((A-2)/3+1),S+=3}else{for(S+=3,k=G,n.push(E),P=0;P<O.length/3;P++)D=m.fromArray(O,P*3,D),N[g++]=k+P,N[g++]=k+P+1,uo.addAttribute(_,D,S),S+=3;n.push(k+Math.floor(O.length/6)),t===eo.BEVELED&&n.push(S/3-1),A-=3}for(R=i[C++],L=i[C++],R.splice(0,3),L.splice(L.length-3,3),_.set(R,S),_.set(L,A-L.length+1),p=L.length-3,P=0;P<L.length;P+=3)G=S/3,V=G-1,E=(A-2)/3,Z=E+1,N[g++]=Z,N[g++]=E,N[g++]=V,N[g++]=G,S+=3,A-=3;S-=3,A+=3,n.push(S/3,(A-2)/3)}if(b){S+=3,A-=3,I=Fbe,v=Ibe;let P=r[1];for(u=0;u<X;u++)I=m.fromArray(P,(f-u-1)*3,I),v=m.fromArray(P,u*3,v),uo.addAttribute(_,I,void 0,A),uo.addAttribute(_,v,S),G=S/3,V=G-1,E=(A-2)/3,Z=E+1,N[g++]=Z,N[g++]=E,N[g++]=V,N[g++]=G,S+=3,A-=3;n.push(S/3)}else n.push(S/3,(A-2)/3);return N[g++]=S/3,N[g++]=(A-2)/3,s.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:_}),{attributes:s,indices:N,wallIndices:n}}function Brt(e){let t=e.ellipsoid,n=uo.computePositions(e),i=Pbe(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=Ri.scaleToGeodeticHeight(d,r,t),h=Ri.scaleToGeodeticHeight(h,s,t),p.set(d),p.set(h,u),a.position.values=p,u/=3,l(e.offsetAttribute)){let Z=new Uint8Array(u*2);if(e.offsetAttribute===mn.TOP)Z=Z.fill(1,0,u);else{let V=e.offsetAttribute===mn.NONE?0:1;Z=Z.fill(V)}a.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:Z})}let b,f=c.length,y=Ne.createTypedArray(p.length/3,(f+o.length)*2);y.set(c);let _=f;for(b=0;b<f;b+=2){let Z=c[b],V=c[b+1];y[_++]=Z+u,y[_++]=V+u}let S,A;for(b=0;b<o.length;b++)S=o[b],A=S+u,y[_++]=S,y[_++]=A;return{attributes:a,indices:y}}function xX(e){e=e??B.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??eo.ROUNDED,this._granularity=e.granularity??W.RADIANS_PER_DEGREE,this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*m.packedLength+ie.packedLength+6}xX.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 Xbe=ie.clone(ie.UNIT_SPHERE),ux={positions:void 0,ellipsoid:Xbe,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};xX.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,Xbe);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):(ux.positions=o,ux.width=s,ux.height=a,ux.extrudedHeight=c,ux.cornerType=d,ux.granularity=u,ux.offsetAttribute=h===-1?void 0:h,new xX(ux))};xX.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=Ort(t,i);let o=Oo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!W.equalsEpsilon(r,s,0,W.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=Brt(c);else{let p=uo.computePositions(c);if(d=Pbe(p,c.cornerType),d.attributes.position.values=Ri.scaleToGeodeticHeight(d.attributes.position.values,r,i),l(e._offsetAttribute)){let b=d.attributes.position.values.length,f=e._offsetAttribute===mn.NONE?0:1,y=new Uint8Array(b/3).fill(f);d.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}}let u=d.attributes,h=de.fromVertices(u.position.values,void 0,3);return new gt({attributes:u,indices:d.indices,primitiveType:ve.LINES,boundingSphere:h,offsetAttribute:e._offsetAttribute})};var TX=xX;var u0i=x(T(),1);var zrt=new hi(0);function ql(e){Ci.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}l(Object.create)&&(ql.prototype=Object.create(Ci.prototype),ql.prototype.constructor=ql);Object.defineProperties(ql.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});ql.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!l(t.height)&&!l(t.extrudedHeight)&&Rl.isSupported(this._scene)};ql.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||l(n)&&n!==t};ql.prototype._computeCenter=fe.throwInstantiationError;ql.prototype._onEntityPropertyChanged=function(e,t,n,i){if(Ci.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))&&Zt(Zt.geometryZIndex),this._zIndex=o.zIndex??zrt,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 Mh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new i_(this._scene,a,r,s)}};ql.prototype.destroy=function(){l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),Ci.prototype.destroy.call(this)};ql.getGeometryHeight=function(e,t){if(!l(e)){t!==tt.NONE&&Zt(Zt.geometryHeightReference);return}return bm(t)?0:e};ql.getGeometryExtrudedHeight=function(e,t){if(!l(e)){t!==tt.NONE&&Zt(Zt.geometryExtrudedHeightReference);return}return bm(t)?ql.CLAMP_TO_GROUND:e};ql.CLAMP_TO_GROUND="clamp";ql.computeGeometryOffsetAttribute=function(e,t,n,i){(!l(e)||!l(t))&&(t=tt.NONE),(!l(n)||!l(i))&&(i=tt.NONE);let o=0;if(t!==tt.NONE&&o++,i===tt.RELATIVE_TO_GROUND&&o++,o===2)return mn.ALL;if(o===1)return mn.TOP};var ri=ql;var Nbe=new U,Ybe=m.ZERO,wbe=new m,Mbe=new ce;function Hrt(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 gf(e,t){ri.call(this,{entity:e,scene:t,geometryOptions:new Hrt(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}l(Object.create)&&(gf.prototype=Object.create(ri.prototype),gf.prototype.constructor=gf);gf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Gn(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,Nbe)),l(o)||(o=U.WHITE),i.color=Qt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Ybe,wbe))),new Ft({id:t,geometry:new gS(this._options),attributes:i})};gf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Nbe),o={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return l(this._options.offsetAttribute)&&(o.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Ybe,wbe))),new Ft({id:t,geometry:new TX(this._options),attributes:o})};gf.prototype._computeCenter=function(e,t){let n=j.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!l(n)||n.length===0))return m.clone(n[Math.floor(n.length/2)],t)};gf.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.width)||Ci.prototype._isHidden.call(this,e,t)};gf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.width)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.cornerType)||!j.isConstant(t.zIndex)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};gf.prototype._setStaticOptions=function(e,t){let n=j.getValueOrUndefined(t.height,Je.MINIMUM_VALUE),i=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),o=j.getValueOrUndefined(t.extrudedHeight,Je.MINIMUM_VALUE),r=j.getValueOrDefault(t.extrudedHeightReference,Je.MINIMUM_VALUE,tt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Kt?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Je.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(Je.MINIMUM_VALUE),s.granularity=j.getValueOrUndefined(t.granularity,Je.MINIMUM_VALUE),s.cornerType=j.getValueOrUndefined(t.cornerType,Je.MINIMUM_VALUE),s.offsetAttribute=ri.computeGeometryOffsetAttribute(n,i,o,r),s.height=ri.getGeometryHeight(n,i),o=ri.getGeometryExtrudedHeight(o,r),o===ri.CLAMP_TO_GROUND&&(o=Wi.getMinimumMaximumHeights(gS.computeRectangle(s,Mbe)).minimumTerrainHeight),s.extrudedHeight=o};gf.DynamicGeometryUpdater=xV;function xV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(xV.prototype=Object.create(Zi.prototype),xV.prototype.constructor=xV);xV.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.positions)||!l(i.width)||Zi.prototype._isHidden.call(this,e,t,n)};xV.prototype._setOptions=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,tt.NONE),s=j.getValueOrUndefined(t.extrudedHeight,n),a=j.getValueOrDefault(t.extrudedHeightReference,n,tt.NONE);l(s)&&!l(o)&&(o=0),i.positions=j.getValueOrUndefined(t.positions,n),i.width=j.getValueOrUndefined(t.width,n),i.granularity=j.getValueOrUndefined(t.granularity,n),i.cornerType=j.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=ri.computeGeometryOffsetAttribute(o,r,s,a),i.height=ri.getGeometryHeight(o,r),s=ri.getGeometryExtrudedHeight(s,a),s===ri.CLAMP_TO_GROUND&&(s=Wi.getMinimumMaximumHeights(gS.computeRectangle(i,Mbe)).minimumTerrainHeight),i.extrudedHeight=s};var _X=gf;var lgi=x(T(),1);var N0i=x(T(),1);function $D(){fe.throwInstantiationError()}Object.defineProperties($D.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}});$D.prototype.update=function(e){fe.throwInstantiationError()};$D.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var _s=$D;var igi=x(T(),1);var O0i=x(T(),1);function Pp(e,t){this._ellipsoid=e,this._cameraPosition=new m,this._cameraPositionInScaledSpace=new m,this._distanceToLimbInScaledSpaceSquared=0,l(t)&&(this.cameraPosition=t)}Object.defineProperties(Pp.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 kbe=new m;Pp.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,kbe);return H8(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};Pp.prototype.isScaledSpacePointVisible=function(e){return H8(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var Krt=new m;Pp.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return l(t)&&t<0&&n.minimumRadius>-t?(o=Krt,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),H8(e,o,i)};Pp.prototype.computeHorizonCullingPoint=function(e,t,n){return Obe(this._ellipsoid,e,t,n)};var Ube=ie.clone(ie.UNIT_SPHERE);Pp.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=Dbe(this._ellipsoid,n,Ube);return Obe(o,e,t,i)};Pp.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return Bbe(this._ellipsoid,e,t,n,i,o)};Pp.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=Dbe(this._ellipsoid,o,Ube);return Bbe(s,e,t,n,i,r)};var Jrt=[];Pp.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=ce.subsample(e,t,0,Jrt),o=de.fromPoints(i);if(!(m.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var jrt=new m;function Dbe(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,jrt);e=ie.fromCartesian3(i,n)}return e}function Obe(e,t,n,i){l(i)||(i=new m);let o=Kbe(e,t),r=0;for(let s=0,a=n.length;s<a;++s){let c=n[s],d=zbe(e,c,o);if(d<0)return;r=Math.max(r,d)}return Hbe(o,r,i)}var eO=new m;function Bbe(e,t,n,i,o,r){l(r)||(r=new m),i=i??3,o=o??m.ZERO;let s=Kbe(e,t),a=0;for(let c=0,d=n.length;c<d;c+=i){eO.x=n[c]+o.x,eO.y=n[c+1]+o.y,eO.z=n[c+2]+o.z;let u=zbe(e,eO,s);if(u<0)return;a=Math.max(a,u)}return Hbe(s,a,r)}function H8(e,t,n){let i=t,o=n,r=m.subtract(e,i,kbe),s=-m.dot(r,i);return!(o<0?s>0:s>o&&s*s/m.magnitudeSquared(r)>o)}var Qrt=new m,qrt=new m;function zbe(e,t,n){let i=e.transformPositionToScaledSpace(t,Qrt),o=m.magnitudeSquared(i),r=Math.sqrt(o),s=m.divideByScalar(i,r,qrt);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 Hbe(e,t,n){if(!(t<=0||t===1/0||t!==t))return m.multiplyByScalar(e,t,n)}var z8=new m;function Kbe(e,t){return m.equals(t,m.ZERO)?t:(e.transformPositionToScaledSpace(t,z8),m.normalize(z8,z8))}var yf=Pp;var rbi=x(T(),1);function ns(e,t){e=e??B.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;l(n)&&(n=Dt.clone(n)),l(i)&&(i=Dt.clone(i)),l(o)&&(o=kt.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??Fr.NONE}var Jbe=ns.SHOW_INDEX=0,qbe=ns.POSITION_INDEX=1,$rt=ns.COLOR_INDEX=2,est=ns.OUTLINE_COLOR_INDEX=3,tst=ns.OUTLINE_WIDTH_INDEX=4,nst=ns.PIXEL_SIZE_INDEX=5,ist=ns.SCALE_BY_DISTANCE_INDEX=6,ost=ns.TRANSLUCENCY_BY_DISTANCE_INDEX=7,rst=ns.DISTANCE_DISPLAY_CONDITION_INDEX=8,sst=ns.DISABLE_DEPTH_DISTANCE_INDEX=9,ast=ns.SPLIT_DIRECTION_INDEX=10;ns.NUMBER_OF_PROPERTIES=11;function Cu(e,t){let n=e._pointPrimitiveCollection;l(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties(ns.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Cu(this,Jbe))}},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),Cu(this,qbe))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Dt.equals(t,e)||(this._scaleByDistance=Dt.clone(e,t),Cu(this,ist))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Dt.equals(t,e)||(this._translucencyByDistance=Dt.clone(e,t),Cu(this,ost))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,Cu(this,nst))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Cu(this,$rt))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Cu(this,est))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Cu(this,tst))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){kt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=kt.clone(e,this._distanceDisplayCondition),Cu(this,rst))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Cu(this,sst))}},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,Cu(this,Jbe))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Cu(this,ast))}}});ns.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};ns.prototype._getActualPosition=function(){return this._actualPosition};ns.prototype._setActualPosition=function(e){m.clone(e,this._actualPosition),Cu(this,qbe)};var jbe=new se;ns._computeActualPosition=function(e,t,n){return t.mode===re.SCENE3D?e:(F.multiplyByPoint(n,e,jbe),co.computeActualEllipsoidPosition(t,jbe))};var Qbe=new se;ns._computeScreenSpacePosition=function(e,t,n,i){let o=F.multiplyByVector(e,se.fromElements(t.x,t.y,t.z,1,Qbe),Qbe);return co.worldToWindowCoordinates(n,o,i)};ns.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;l(t)||(t=new M);let i=n.modelMatrix,o=ns._computeScreenSpacePosition(i,this._actualPosition,e,t);if(l(o))return o.y=e.canvas.clientHeight-o.y,o};ns.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 Qe),n.x=r,n.y=s,n.width=a,n.height=c,n};ns.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)&&Dt.equals(this._scaleByDistance,e._scaleByDistance)&&Dt.equals(this._translucencyByDistance,e._translucencyByDistance)&&kt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};ns.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var ba=ns;var Nbi=x(T(),1);var abi=x(T(),1),mx=`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 lbi=x(T(),1),SX=`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 cst=ba.SHOW_INDEX,j8=ba.POSITION_INDEX,$be=ba.COLOR_INDEX,lst=ba.OUTLINE_COLOR_INDEX,dst=ba.OUTLINE_WIDTH_INDEX,ust=ba.PIXEL_SIZE_INDEX,ege=ba.SCALE_BY_DISTANCE_INDEX,tge=ba.TRANSLUCENCY_BY_DISTANCE_INDEX,nge=ba.DISTANCE_DISPLAY_CONDITION_INDEX,mst=ba.DISABLE_DEPTH_DISTANCE_INDEX,hst=ba.SPLIT_DIRECTION_INDEX,Q8=ba.NUMBER_OF_PROPERTIES,ll={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function Km(e){e=e??B.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(Q8),this._maxPixelSize=1,this._baseVolume=new de,this._baseVolumeWC=new de,this._baseVolume2D=new de,this._boundingVolume=new de,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??Qo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=re.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW,Fe.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(Km.prototype,{length:{get:function(){return q8(this),this._pointPrimitives.length}}});function ige(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 ba(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(){ige(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0};function q8(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 q8(this),this._pointPrimitives[e]};Km.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<Q8;++i){let o=n[i]===0?Fe.STATIC_DRAW:Fe.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function fst(e,t,n){return new w0(e,[{index:ll.positionHighAndSize,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[j8]},{index:ll.positionLowAndShow,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[j8]},{index:ll.compressedAttribute0,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[$be]},{index:ll.compressedAttribute1,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[tge]},{index:ll.scaleByDistance,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[ege]},{index:ll.distanceDisplayConditionAndDisableDepthAndSplitDirection,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:n[nge]}],t)}var K8=new Zn,tO=new U;function oge(e,t,n,i){let o=i._index,r=i._getActualPosition();e._mode===re.SCENE3D&&(de.expand(e._baseVolume,r,e._baseVolume),e._boundingVolumeDirty=!0),Zn.fromCartesian(r,K8);let s=i.pixelSize,a=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,s+a);let c=n[ll.positionHighAndSize],d=K8.high;c(o,d.x,d.y,d.z,s);let u=n[ll.positionLowAndOutline],h=K8.low;u(o,h.x,h.y,h.z,a)}var pst=256;function rge(e,t,n,i){let o=i._index,r=i.color,s=i.outlineColor,a=i.getPickId(t).color;tO.red=r.alpha,tO.green=s.alpha,tO.blue=a.alpha;let c=n[ll.compressedAttribute0];c(o,tn.encodeRGB8(r),tn.encodeRGB8(s),tn.encodeRGB8(a),tn.encodeRGB8(tO))}function sge(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=W.clamp(s,0,1),s=s===1?255:s*255|0;let h=(u?1:0)*pst+s;c=W.clamp(c,0,1),c=c===1?255:c*255|0;let p=c,b=n[ll.compressedAttribute1];b(o,h,p,r,a)}function age(e,t,n,i){let o=i._index,r=n[ll.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 cge(e,t,n,i){let o=i._index,r=n[ll.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 bst(e,t,n,i){oge(e,t,n,i),rge(e,t,n,i),sge(e,t,n,i),age(e,t,n,i),cge(e,t,n,i)}function J8(e,t,n,i,o,r){let s;i.mode===re.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=ba._computeActualPosition(u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):de.expand(s,h,s))}r&&de.fromPoints(a,s)}function gst(e,t){let n=t.mode,i=e._pointPrimitives,o=e._pointPrimitivesToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==re.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===re.SCENE3D||n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&J8(e,i,i.length,t,r,!0)):n===re.MORPHING?J8(e,i,i.length,t,r,!0):(n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&J8(e,o,e._pointPrimitivesToUpdateIndex,t,r,!1)}function yst(e,t,n){let o=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=o}var xst=[];Km.prototype.update=function(e){if(q8(this),!this.show)return;this._maxTotalPointSize=vt.maximumAliasedPointSize,gst(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 E=0;E<Q8;++E)r[E]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=fst(c,n,this._buffersUsage),a=this._vaf.writers;for(let E=0;E<n;++E){let G=this._pointPrimitives[E];G._dirty=!1,bst(this,c,a,G)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(o>0){let E=xst;E.length=0,(r[j8]||r[dst]||r[ust])&&E.push(oge),(r[$be]||r[lst])&&E.push(rge),(r[cst]||r[tge])&&E.push(sge),r[ege]&&E.push(age),(r[nge]||r[mst]||r[hst])&&E.push(cge);let G=E.length;if(a=this._vaf.writers,o/n>.1){for(let v=0;v<o;++v){let I=i[v];I._dirty=!1;for(let X=0;X<G;++X)E[X](this,c,a,I)}this._vaf.commit()}else{for(let v=0;v<o;++v){let I=i[v];I._dirty=!1;for(let X=0;X<G;++X)E[X](this,c,a,I);this._vaf.subCommit(I._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,de.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let h,p=F.IDENTITY;e.mode===re.SCENE3D?(p=this.modelMatrix,h=de.clone(this._baseVolumeWC,this._boundingVolume)):h=de.clone(this._baseVolume2D,this._boundingVolume),yst(this,e,h);let b=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,b&&(this._blendOption===Qo.OPAQUE||this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Ue.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===Qo.TRANSLUCENT||this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Ue.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!1,blending:rn.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,y;(b||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new Oe({sources:[SX]}),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===Qo.OPAQUE_AND_TRANSLUCENT&&(y=new Oe({defines:["OPAQUE"],sources:[mx]}),this._sp=$t.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:ll}),y=new Oe({defines:["TRANSLUCENT"],sources:[mx]}),this._spTranslucent=$t.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:ll})),this._blendOption===Qo.OPAQUE&&(y=new Oe({sources:[mx]}),this._sp=$t.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:ll})),this._blendOption===Qo.TRANSLUCENT&&(y=new Oe({sources:[mx]}),this._spTranslucent=$t.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:ll})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let _,S,A,Z,V=e.commandList;if(d.render||u){let E=this._colorCommands,G=this._blendOption===Qo.OPAQUE,v=this._blendOption===Qo.OPAQUE_AND_TRANSLUCENT;_=this._vaf.va,S=_.length,E.length=S;let I=v?S*2:S;for(Z=0;Z<I;++Z){let X=G||v&&Z%2===0;A=E[Z],l(A)||(A=E[Z]=new et),A.primitiveType=ve.POINTS,A.pass=X||!v?Le.OPAQUE:Le.TRANSLUCENT,A.owner=this;let N=v?Math.floor(Z/2):Z;A.boundingVolume=h,A.modelMatrix=p,A.shaderProgram=X?this._sp:this._spTranslucent,A.uniformMap=this._uniforms,A.vertexArray=_[N].va,A.renderState=X?this._rsOpaque:this._rsTranslucent,A.debugShowBoundingVolume=this.debugShowBoundingVolume,A.pickId="v_pickColor",V.push(A)}}};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(),ige(this._pointPrimitives),he(this)};var TV=Km;var wbi=x(T(),1),lge=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],$8=1,AX=8,CX=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!==$8)throw new Error(`Got v${o} data when expected v${$8}.`);let r=lge[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=lge.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,AX,t),this.coords=new this.ArrayType(this.data,AX+a+c,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(AX+s+a+c),this.ids=new this.IndexArrayType(this.data,AX,t),this.coords=new this.ArrayType(this.data,AX+a+c,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,($8<<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 t7(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 _=p;_<=h;_++){let S=s[2*_],A=s[2*_+1];S>=t&&S<=i&&A>=n&&A<=o&&d.push(r[_])}continue}let b=p+h>>1,f=s[2*b],y=s[2*b+1];f>=t&&f<=i&&y>=n&&y<=o&&d.push(r[b]),(u===0?t<=f:n<=y)&&(c.push(p),c.push(b-1),c.push(1-u)),(u===0?i>=f:o>=y)&&(c.push(b+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 _=p;_<=h;_++)dge(r[2*_],r[2*_+1],t,n)<=d&&c.push(o[_]);continue}let b=p+h>>1,f=r[2*b],y=r[2*b+1];dge(f,y,t,n)<=d&&c.push(o[b]),(u===0?t-i<=f:n-i<=y)&&(a.push(p),a.push(b-1),a.push(1-u)),(u===0?t+i>=f:n+i>=y)&&(a.push(b+1),a.push(h),a.push(1-u))}return c}};function t7(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;uge(e,t,s,i,o,r),t7(e,t,n,i,s-1,1-r),t7(e,t,n,s+1,o,1-r)}function uge(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),b=.5*Math.sqrt(h*p*(d-p)/d)*(u-d/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/d+b)),y=Math.min(o,Math.floor(n+(d-u)*p/d+b));uge(e,t,n,f,y,r)}let s=t[2*n+r],a=i,c=o;for(ZX(e,t,i,n),t[2*o+r]>s&&ZX(e,t,i,o);a<c;){for(ZX(e,t,a,c),a++,c--;t[2*a+r]<s;)a++;for(;t[2*c+r]>s;)c--}t[2*i+r]===s?ZX(e,t,i,c):(c++,ZX(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function ZX(e,t,n,i){e7(e,n,i),e7(t,2*n,2*i),e7(t,2*n+1,2*i+1)}function e7(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function dge(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function xf(e){e=e??B.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 _e,this.show=e.show??!0}function mge(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var Tst=new Qe;function hge(e,t,n,i,o){if(l(e._labelCollection)&&i._clusterLabels?o=Jy.getScreenSpaceBoundingBox(e,t,o):l(e._billboardCollection)&&i._clusterBillboards?o=Go.getScreenSpaceBoundingBox(e,t,o):l(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=ba.getScreenSpaceBoundingBox(e,t,o)),mge(o,n),i._clusterLabels&&!l(e._labelCollection)&&l(e.id)&&pge(i,e.id.id)&&l(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=Jy.getScreenSpaceBoundingBox(s,t,Tst);mge(a,n),o=Qe.union(o,a,o)}return o}function _st(e,t){if(e.clusterShow=!0,!l(e._labelCollection)&&l(e.id)&&pge(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 fge(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 pge(e,t){return l(e)&&l(e._collectionIndicesByEntity[t])&&l(e._collectionIndicesByEntity[t].labelIndex)}function n7(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===re.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 Sst=new Qe,Ast=new Qe,Zst=new Qe;function Cst(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 Gp({scene:n}),l(a)?a.removeAll():a=e._clusterBillboardCollection=new Tu({scene:n}),l(c)?c.removeAll():c=e._clusterPointCollection=new TV;let d=e._pixelRange,u=e._minimumClusterSize,h=e._previousClusters,p=[],b=e._previousHeight,f=n.camera.positionCartographic.height,y=n.ellipsoid,_=n.camera.positionWC,S=new yf(y,_),A=[];e._clusterLabels&&n7(i,A,n,S,e),e._clusterBillboards&&n7(o,A,n,S,e),e._clusterPoints&&n7(r,A,n,S,e);let Z,V,E,G,v,I,X,N,g,C,R,L;if(A.length>0){let P=new CX(A.length,64,Float64Array);for(let Y=0;Y<A.length;++Y)P.add(A[Y].coord.x,A[Y].coord.y);if(P.finish(),f<b)for(E=h.length,Z=0;Z<E;++Z){let Y=h[Z];if(!S.isPointVisible(Y.position))continue;let O=Go._computeScreenSpacePosition(F.IDENTITY,Y.position,m.ZERO,M.ZERO,n);if(!l(O))continue;let k=1-f/b,D=Y.width=Y.width*k,w=Y.height=Y.height*k;D=Math.max(D,Y.minimumWidth),w=Math.max(w,Y.minimumHeight);let z=O.x-D*.5,J=O.y-w*.5,ee=O.x+D,H=O.y+w;for(v=P.range(z,J,ee,H),I=v.length,C=0,g=[],V=0;V<I;++V)X=v[V],N=A[X],N.clustered||(++C,R=N.collection,L=N.index,g.push(R.get(L).id));if(C>=u)for(fge(Y.position,C,g,e),p.push(Y),V=0;V<I;++V)A[v[V]].clustered=!0}for(E=A.length,Z=0;Z<E;++Z){let Y=A[Z];if(Y.clustered)continue;Y.clustered=!0,R=Y.collection,L=Y.index;let O=R.get(L);G=hge(O,Y.coord,d,e,Sst);let k=Qe.clone(G,Ast);v=P.range(G.x,G.y,G.x+G.width,G.y+G.height),I=v.length;let D=m.clone(O.position);for(C=1,g=[O.id],V=0;V<I;++V)if(X=v[V],N=A[X],!N.clustered){let w=N.collection.get(N.index),z=hge(w,N.coord,d,e,Zst);m.add(w.position,D,D),Qe.union(k,z,k),++C,g.push(w.id)}if(C>=u){let w=m.multiplyByScalar(D,1/C,D);for(fge(w,C,g,e),p.push({position:w,width:k.width,height:k.height,minimumWidth:G.width,minimumHeight:G.height}),V=0;V<I;++V)A[v[V]].clustered=!0}else _st(O,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}}xf.prototype._initialize=function(e){this._scene=e;let t=Cst(this);this._cluster=t,this._removeEventListener=e.camera.changed.addEventListener(t)};Object.defineProperties(xf.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 o7(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 r7(e,t){let n=e._collectionIndicesByEntity[t];!l(n.billboardIndex)&&!l(n.labelIndex)&&!l(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}xf.prototype.getLabel=o7("_labelCollection",Gp,"_unusedLabelIndices","labelIndex");xf.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,r7(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};xf.prototype.getBillboard=o7("_billboardCollection",Tu,"_unusedBillboardIndices","billboardIndex");xf.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,r7(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};xf.prototype.getPoint=o7("_pointCollection",TV,"_unusedPointIndices","pointIndex");xf.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,r7(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function i7(e){if(!l(e))return;let t=e.length;for(let n=0;n<t;++n)e.get(n).clusterShow=!0}function Vst(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,i7(e._labelCollection),i7(e._billboardCollection),i7(e._pointCollection))}xf.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,Vst(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)};xf.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 Vu=xf;function s7(e){this._name=e,this._clock=void 0,this._changed=new _e,this._error=new _e,this._isLoading=!1,this._loading=new _e,this._entityCollection=new wa(this),this._entityCluster=new Vu}Object.defineProperties(s7.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){_s.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}}});s7.prototype.update=function(e){return!0};var VX=s7;var myi=x(T(),1);var Ggi=x(T(),1);var mgi=x(T(),1);var bge={};bge.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,b=o?a*3:0,f=o?(a+i)*3:i*3;for(u=0;u<i;u++){let y=u/i*W.TWO_PI,_=Math.cos(y),S=Math.sin(y),A=_*n,Z=S*n,V=_*t,E=S*t;d[p+b]=A,d[p+b+1]=Z,d[p+b+2]=s,d[p+f]=V,d[p+f+1]=E,d[p+f+2]=r,p+=3,o&&(d[h++]=A,d[h++]=Z,d[h++]=s,d[h++]=V,d[h++]=E,d[h++]=r)}return d};var yS=bge;var a7=new M,Rst=new m,Est=new m,Gst=new m,Lst=new m;function ng(e){e=e??B.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.vertexFormat??Xe.DEFAULT,r=e.slices??128;this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=Xe.clone(o),this._slices=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}ng.packedLength=Xe.packedLength+5;ng.pack=function(e,t,n){return n=n??0,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=e._offsetAttribute??-1,t};var gge=new Xe,_V={vertexFormat:gge,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};ng.unpack=function(e,t,n){t=t??0;let i=Xe.unpack(e,t,gge);t+=Xe.packedLength;let o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._vertexFormat=Xe.clone(i,n._vertexFormat),n._length=o,n._topRadius=r,n._bottomRadius=s,n._slices=a,n._offsetAttribute=c===-1?void 0:c,n):(_V.length=o,_V.topRadius=r,_V.bottomRadius=s,_V.slices=a,_V.offsetAttribute=c===-1?void 0:c,new ng(_V))};ng.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=yS.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,b=o.bitangent?new Float32Array(c*3):void 0,f,y=o.normal||o.tangent||o.bitangent;if(y){let v=o.tangent||o.bitangent,I=0,X=0,N=0,g=Math.atan2(i-n,t),C=Rst;C.z=Math.sin(g);let R=Math.cos(g),L=Gst,P=Est;for(f=0;f<r;f++){let Y=f/r*W.TWO_PI,O=R*Math.cos(Y),k=R*Math.sin(Y);y&&(C.x=O,C.y=k,v&&(L=m.normalize(m.cross(m.UNIT_Z,C,L),L)),o.normal&&(h[I++]=C.x,h[I++]=C.y,h[I++]=C.z,h[I++]=C.x,h[I++]=C.y,h[I++]=C.z),o.tangent&&(p[X++]=L.x,p[X++]=L.y,p[X++]=L.z,p[X++]=L.x,p[X++]=L.y,p[X++]=L.z),o.bitangent&&(P=m.normalize(m.cross(C,L,P),P),b[N++]=P.x,b[N++]=P.y,b[N++]=P.z,b[N++]=P.x,b[N++]=P.y,b[N++]=P.z))}for(f=0;f<r;f++)o.normal&&(h[I++]=0,h[I++]=0,h[I++]=-1),o.tangent&&(p[X++]=1,p[X++]=0,p[X++]=0),o.bitangent&&(b[N++]=0,b[N++]=-1,b[N++]=0);for(f=0;f<r;f++)o.normal&&(h[I++]=0,h[I++]=0,h[I++]=1),o.tangent&&(p[X++]=1,p[X++]=0,p[X++]=0),o.bitangent&&(b[N++]=0,b[N++]=1,b[N++]=0)}let _=12*r-12,S=Ne.createTypedArray(c,_),A=0,Z=0;for(f=0;f<r-1;f++)S[A++]=Z,S[A++]=Z+2,S[A++]=Z+3,S[A++]=Z,S[A++]=Z+3,S[A++]=Z+1,Z+=2;for(S[A++]=s-2,S[A++]=0,S[A++]=1,S[A++]=s-2,S[A++]=1,S[A++]=s-1,f=1;f<r-1;f++)S[A++]=s+f+1,S[A++]=s+f,S[A++]=s;for(f=1;f<r-1;f++)S[A++]=a,S[A++]=a+f,S[A++]=a+f+1;let V=0;if(o.st){let v=Math.max(n,i);for(f=0;f<c;f++){let I=m.fromArray(d,f*3,Lst);u[V++]=(I.x+v)/(2*v),u[V++]=(I.y+v)/(2*v)}}let E=new yn;o.position&&(E.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:d})),o.normal&&(E.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:h})),o.tangent&&(E.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:p})),o.bitangent&&(E.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:b})),o.st&&(E.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:u})),a7.x=t*.5,a7.y=Math.max(i,n);let G=new de(m.ZERO,M.magnitude(a7));if(l(e._offsetAttribute)){t=d.length;let v=e._offsetAttribute===mn.NONE?0:1,I=new Uint8Array(t/3).fill(v);E.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:I})}return new gt({attributes:E,indices:S,primitiveType:ve.TRIANGLES,boundingSphere:G,offsetAttribute:e._offsetAttribute})};var c7;ng.getUnitCylinder=function(){return l(c7)||(c7=ng.createGeometry(new ng({topRadius:1,bottomRadius:1,length:1,vertexFormat:Xe.POSITION_ONLY}))),c7};var RX=ng;var Ogi=x(T(),1);var l7=new M;function SV(e){e=e??B.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"}SV.packedLength=6;SV.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 xS={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};SV.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):(xS.length=i,xS.topRadius=o,xS.bottomRadius=r,xS.slices=s,xS.numberOfVerticalLines=a,xS.offsetAttribute=c===-1?void 0:c,new SV(xS))};SV.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=yS.computePositions(t,n,i,o,!1),c=o*2,d;if(r>0){let y=Math.min(r,o);d=Math.round(o/y),c+=y}let u=Ne.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 b=new yn;b.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:a}),l7.x=t*.5,l7.y=Math.max(i,n);let f=new de(m.ZERO,M.magnitude(l7));if(l(e._offsetAttribute)){t=a.length;let y=e._offsetAttribute===mn.NONE?0:1,_=new Uint8Array(t/3).fill(y);b.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}return new gt({attributes:b,indices:u,primitiveType:ve.LINES,boundingSphere:f,offsetAttribute:e._offsetAttribute})};var EX=SV;var yge=m.ZERO,xge=new m,Wst=new m,Tge=new U;function vst(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 Ru(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new vst(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}l(Object.create)&&(Ru.prototype=Object.create(Ci.prototype),Ru.prototype.constructor=Ru);Object.defineProperties(Ru.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Ru.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new Gn(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,Tge)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,yge,xge))),new Ft({id:t,geometry:new RX(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:s})};Ru.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Tge),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,yge,xge))),new Ft({id:t,geometry:new EX(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:r})};Ru.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Ru.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.length)||!l(t.topRadius)||!l(t.bottomRadius)||Ci.prototype._isHidden.call(this,e,t)};Ru.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!j.isConstant(t.slices)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.numberOfVerticalLines)};Ru.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(Je.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(Je.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(Je.MINIMUM_VALUE),i.slices=j.getValueOrUndefined(t.slices,Je.MINIMUM_VALUE),i.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,Je.MINIMUM_VALUE),i.offsetAttribute=n!==tt.NONE?mn.ALL:void 0};Ru.prototype._onEntityPropertyChanged=q0;Ru.DynamicGeometryUpdater=AV;function AV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(AV.prototype=Object.create(Zi.prototype),AV.prototype.constructor=AV);AV.prototype._isHidden=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(e.position,n,Wst);return!l(o)||!l(i.length)||!l(i.topRadius)||!l(i.bottomRadius)||Zi.prototype._isHidden.call(this,e,t,n)};AV.prototype._setOptions=function(e,t,n){let i=j.getValueOrDefault(t.heightReference,n,tt.NONE),o=this._options;o.length=j.getValueOrUndefined(t.length,n),o.topRadius=j.getValueOrUndefined(t.topRadius,n),o.bottomRadius=j.getValueOrUndefined(t.bottomRadius,n),o.slices=j.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==tt.NONE?mn.ALL:void 0};var GX=Ru;var mAi=x(T(),1);var fyi=x(T(),1),Fst={UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2},Ss=Object.freeze(Fst);var byi=x(T(),1),Ist={TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2},Yo=Object.freeze(Ist);var yyi=x(T(),1),Pst={NONE:0,HOLD:1,EXTRAPOLATE:2},Eu=Object.freeze(Pst);var Tyi=x(T(),1),_ge=x($d(),1);function Xst(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 ig=Xst;var Zyi=x(T(),1);var Nst=W.factorial;function d7(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+=d7(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 nO={type:"Hermite"};nO.getRequiredDataPoints=function(e,t){return t=t??0,Math.max(Math.floor((e+1)/(t+1)),2)};nO.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 _=new Array(h);for(p[r]=_,s=0;s<h;s++)_[s]=[]}let b=h,f=new Array(b);for(r=0;r<b;r++)f[r]=r;let y=h-1;for(c=0;c<i;c++){for(s=0;s<b;s++)u=f[s]*i+c,p[c][0].push(n[u]);for(r=1;r<b;r++){let _=!1;for(s=0;s<b-r;s++){let S=t[f[s]],A=t[f[s+r]],Z;A-S<=0?(u=f[s]*i+i*r+c,Z=n[u],p[c][r].push(Z/Nst(r))):(Z=p[c][r-1][s+1]-p[c][r-1][s],p[c][r].push(Z/(A-S))),_=_||Z!==0}_||(y=r-1)}}for(a=0,d=0;a<=d;a++)for(r=a;r<=y;r++){let _=d7(e,f,t,a,r,[]);for(c=0;c<i;c++){let S=p[c][r][0];o[c+a*i]+=S*_}}return o};var Yst=[];nO.interpolate=function(e,t,n,i,o,r,s){let a=i*(r+1);l(s)||(s=new Array(a));for(let S=0;S<a;S++)s[S]=0;let c=t.length,d=new Array(c*(o+1)),u;for(u=0;u<c;u++)for(let S=0;S<o+1;S++)d[u*(o+1)+S]=u;let h=d.length,p=Yst,b=wst(p,d,t,n,i,o),f=[],y=h*(h+1)/2,_=Math.min(b,r);for(let S=0;S<=_;S++)for(u=S;u<=b;u++){f.length=0;let A=d7(e,d,t,S,u,f),Z=Math.floor(u*(1-u)/2)+h*u;for(let V=0;V<i;V++){let E=Math.floor(V*y),G=p[E+Z];s[V+S*i]+=G*A}}return s};function wst(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 b=1;b<d;b++){let f=0,y=Math.floor(b*(1-b)/2)+d*b,_=!1;for(s=0;s<d-b;s++){let S=n[t[s]],A=n[t[s+b]],Z,V;if(A-S<=0)a=t[s]*o*(r+1)+o*b+h,Z=i[a],V=Z/W.factorial(b),e[p+y+f]=V,f++;else{let E=Math.floor((b-1)*(2-b)/2)+d*(b-1);Z=e[p+E+s+1]-e[p+E+s],V=Z/(A-S),e[p+y+f]=V,f++}_=_||Z!==0}_&&(c=Math.max(c,b))}}return c}var LX=nO;var Ryi=x(T(),1);var u7={type:"Lagrange"};u7.getRequiredDataPoints=function(e){return Math.max(e+1,2)};u7.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 WX=u7;var Lyi=x(T(),1);var m7={type:"Linear"};m7.getRequiredDataPoints=function(e){return 2};m7.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 TS=m7;var Fyi=x(T(),1);function dl(e,t,n){this.clock=e??0,this.cone=t??0,this.magnitude=n??1}dl.fromCartesian3=function(e,t){let n=e.x,i=e.y,o=e.z,r=n*n+i*i;return l(t)||(t=new dl),t.clock=Math.atan2(i,n),t.cone=Math.atan2(Math.sqrt(r),o),t.magnitude=Math.sqrt(r+o*o),t};dl.clone=function(e,t){if(l(e))return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new dl(e.clock,e.cone,e.magnitude)};dl.normalize=function(e,t){return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new dl(e.clock,e.cone,1)};dl.equals=function(e,t){return e===t||l(e)&&l(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude};dl.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};dl.prototype.equals=function(e){return dl.equals(this,e)};dl.prototype.clone=function(e){return dl.clone(this,e)};dl.prototype.equalsEpsilon=function(e,t){return dl.equalsEpsilon(this,e,t)};dl.prototype.toString=function(){return`(${this.clock}, ${this.cone}, ${this.magnitude})`};var vX=dl;var NX=x($d(),1);var Qyi=x(T(),1);var Oyi=x(T(),1);var Pyi=x(T(),1),h7;typeof performance<"u"&&typeof performance.now=="function"&&isFinite(performance.now())?h7=function(){return performance.now()}:h7=function(){return Date.now()};var Ui=h7;function f7(e){e=e??B.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??Ss.UNBOUNDED,this.canAnimate=e.canAnimate??!0,this.onTick=new _e,this.onStop=new _e,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=Ui(),this.currentTime=t,this.multiplier=e.multiplier??1,this.shouldAnimate=e.shouldAnimate??!1,this.clockStep=e.clockStep??Yo.SYSTEM_CLOCK_MULTIPLIER}Object.defineProperties(f7.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){Q.equals(this._currentTime,e)||(this._clockStep===Yo.SYSTEM_CLOCK&&(this._clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===Yo.SYSTEM_CLOCK&&(this._clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===Yo.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===Yo.SYSTEM_CLOCK&&(this._clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}});f7.prototype.tick=function(){let e=Ui(),t=Q.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){let n=this._clockStep;if(n===Yo.SYSTEM_CLOCK)t=Q.now(t);else{let i=this._multiplier;if(n===Yo.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===Ss.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===Ss.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 Tf=f7;function _S(){this._definitionChanged=new _e,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(_S.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:Wl("startTime"),stopTime:Wl("stopTime"),currentTime:Wl("currentTime"),clockRange:Wl("clockRange"),clockStep:Wl("clockStep"),multiplier:Wl("multiplier")});_S.prototype.clone=function(e){return l(e)||(e=new _S),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};_S.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};_S.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};_S.prototype.getValue=function(e){return l(e)||(e=new Tf),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 _f=_S;var axi=x(T(),1);var Mst=U.WHITE,kst=.1,Ust=new M(8,8),Dst=new M(0,0),Ost=new M(1,1);function ZV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(ZV.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._cellAlpha)&&j.isConstant(this._lineCount)&&j.isConstant(this._lineThickness)&&j.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color"),cellAlpha:ye("cellAlpha"),lineCount:ye("lineCount"),lineThickness:ye("lineThickness"),lineOffset:ye("lineOffset")});ZV.prototype.getType=function(e){return"Grid"};var Bst=new Q;ZV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Bst)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,Mst,t.color),t.cellAlpha=j.getValueOrDefault(this._cellAlpha,e,kst),t.lineCount=j.getValueOrClonedDefault(this._lineCount,e,Ust,t.lineCount),t.lineThickness=j.getValueOrClonedDefault(this._lineThickness,e,Ost,t.lineThickness),t.lineOffset=j.getValueOrClonedDefault(this._lineOffset,e,Dst,t.lineOffset),t};ZV.prototype.equals=function(e){return this===e||e instanceof ZV&&j.equals(this._color,e._color)&&j.equals(this._cellAlpha,e._cellAlpha)&&j.equals(this._lineCount,e._lineCount)&&j.equals(this._lineThickness,e._lineThickness)&&j.equals(this._lineOffset,e._lineOffset)};var CV=ZV;var pxi=x(T(),1);function VV(e){this._definitionChanged=new _e,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(VV.prototype,{isConstant:{get:function(){return j.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color")});VV.prototype.getType=function(e){return"PolylineArrow"};var zst=new Q;VV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(zst)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};VV.prototype.equals=function(e){return this===e||e instanceof VV&&j.equals(this._color,e._color)};var RV=VV;var Zxi=x(T(),1);var Hst=U.WHITE,Kst=U.TRANSPARENT,Jst=16,jst=255;function EV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(EV.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._gapColor)&&j.isConstant(this._dashLength)&&j.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color"),gapColor:ye("gapColor"),dashLength:ye("dashLength"),dashPattern:ye("dashPattern")});EV.prototype.getType=function(e){return"PolylineDash"};var Qst=new Q;EV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Qst)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,Hst,t.color),t.gapColor=j.getValueOrClonedDefault(this._gapColor,e,Kst,t.gapColor),t.dashLength=j.getValueOrDefault(this._dashLength,e,Jst,t.dashLength),t.dashPattern=j.getValueOrDefault(this._dashPattern,e,jst,t.dashPattern),t};EV.prototype.equals=function(e){return this===e||e instanceof EV&&j.equals(this._color,e._color)&&j.equals(this._gapColor,e._gapColor)&&j.equals(this._dashLength,e._dashLength)&&j.equals(this._dashPattern,e._dashPattern)};var GV=EV;var Fxi=x(T(),1);var qst=U.WHITE,$st=.25,eat=1;function LV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(LV.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color"),glowPower:ye("glowPower"),taperPower:ye("taperPower")});LV.prototype.getType=function(e){return"PolylineGlow"};var tat=new Q;LV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(tat)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,qst,t.color),t.glowPower=j.getValueOrDefault(this._glowPower,e,$st,t.glowPower),t.taperPower=j.getValueOrDefault(this._taperPower,e,eat,t.taperPower),t};LV.prototype.equals=function(e){return this===e||e instanceof LV&&j.equals(this._color,e._color)&&j.equals(this._glowPower,e._glowPower)&&j.equals(this._taperPower,e._taperPower)};var WV=LV;var Uxi=x(T(),1);var nat=U.WHITE,iat=U.BLACK,oat=1;function vV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(vV.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._outlineColor)&&j.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ye("color"),outlineColor:ye("outlineColor"),outlineWidth:ye("outlineWidth")});vV.prototype.getType=function(e){return"PolylineOutline"};var rat=new Q;vV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(rat)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,nat,t.color),t.outlineColor=j.getValueOrClonedDefault(this._outlineColor,e,iat,t.outlineColor),t.outlineWidth=j.getValueOrDefault(this._outlineWidth,e,oat),t};vV.prototype.equals=function(e){return this===e||e instanceof vV&&j.equals(this._color,e._color)&&j.equals(this._outlineColor,e._outlineColor)&&j.equals(this._outlineWidth,e._outlineWidth)};var hx=vV;var jxi=x(T(),1);function og(e,t){this._value=void 0,this._definitionChanged=new _e,this._eventHelper=new Nr,this._referenceFrame=t??Mi.FIXED,this.setValue(e)}Object.defineProperties(og.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(!j.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var sat=new Q;og.prototype.getValue=function(e,t){return l(e)||(e=Q.now(sat)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};og.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};og.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,og.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};og.prototype.equals=function(e){return this===e||e instanceof og&&this._referenceFrame===e._referenceFrame&&j.arrayEquals(this._value,e._value)};og.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var rg=og;var iTi=x(T(),1);function fx(e){this._value=void 0,this._definitionChanged=new _e,this._eventHelper=new Nr,this.setValue(e)}Object.defineProperties(fx.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(!j.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});var aat=new Q;fx.prototype.getValue=function(e,t){l(e)||(e=Q.now(aat));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};fx.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,fx.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};fx.prototype.equals=function(e){return this===e||e instanceof fx&&j.arrayEquals(this._value,e._value)};fx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var FV=fx;var lTi=x(T(),1);function SS(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(Gu.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 Gu(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new _e,e.collectionChanged.addEventListener(Gu.prototype._onCollectionChanged,this)}Object.defineProperties(Gu.prototype,{isConstant:{get:function(){return j.isConstant(SS(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=SS(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 SS(this)}}});Gu.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 Gu(e,n,i)};var cat=new Q;Gu.prototype.getValue=function(e,t){let n=SS(this);return l(e)||(e=Q.now(cat)),l(n)?n.getValue(e,t):void 0};Gu.prototype.getValueInReferenceFrame=function(e,t,n){let i=SS(this);return l(i)?i.getValueInReferenceFrame(e,t,n):void 0};Gu.prototype.getType=function(e){let t=SS(this);return l(t)?t.getType(e):void 0};Gu.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};Gu.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){l(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};Gu.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;l(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(Gu.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):l(i)||(i=SS(this),l(i)&&this._definitionChanged.raiseEvent(this))};var sg=Gu;var hTi=x(T(),1);var lat={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-W.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+W.TWO_PI:o}},Jm=lat;var WTi=x(T(),1);var _Ti=x(T(),1);var Sge={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 Age(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 Zge(e,t){return e instanceof Q?e:typeof e=="string"?Q.fromIso8601(e):Q.addSeconds(t,e,new Q)}var p7=[],b7=[];function iO(e,t,n,i,o){let r=0,s,a,c,d,u,h;for(;r<i.length;){u=Zge(i[r],e),c=To(t,u,Q.compare);let p=0,b=0;if(c<0){for(c=~c,d=c*o,a=void 0,h=t[c];r<i.length&&(u=Zge(i[r],e),!(l(a)&&Q.compare(a,u)>=0||l(h)&&Q.compare(u,h)>=0));){for(p7[p++]=u,r=r+1,s=0;s<o;s++)b7[b++]=i[r],r=r+1;a=u}p>0&&(b7.length=b,Age(n,d,b7),p7.length=p,Age(t,c,p7))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function jm(e,t){let n=e;n===Number&&(n=Sge);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=Sge);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=TS,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 _e,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=Eu.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=Eu.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(jm.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 dat=new Q;jm.prototype.getValue=function(e,t){l(e)||(e=Q.now(dat));let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=To(n,e,Q.compare);if(a<0){if(a=~a,a===0){let V=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===Eu.NONE||o!==0&&Q.secondsDifference(V,e)>o)return;if(this._backwardExtrapolationType===Eu.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let V=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===Eu.NONE||o!==0&&Q.secondsDifference(e,V)>o)return;if(this._forwardExtrapolationType===Eu.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 V=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);V!==this._numberOfPoints&&(this._numberOfPoints=V,c.length=V,d.length=V*h)}let b=this._numberOfPoints-1;if(b<1)return;let f=0,y=i-1;if(y-f+1>=b+1){let V=a-(b/2|0)-1;V<f&&(V=f);let E=V+b;E>y&&(E=y,V=E-b,V<f&&(V=f)),f=V,y=E}let S=y-f+1;for(let V=0;V<S;++V)c[V]=Q.secondsDifference(n[f+V],n[y]);if(l(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,y,d);else{let V=0,E=this._packedLength,G=f*E,v=(y+1)*E;for(;G<v;)d[V]=s[G],G++,V++}let A=Q.secondsDifference(e,n[y]),Z;if(p===0||!l(u.interpolate))Z=u.interpolateOrderZero(A,c,d,h,this._interpolationResult);else{let V=Math.floor(h/(p+1));Z=u.interpolate(A,c,d,V,p,p,this._interpolationResult)}return l(r.unpackInterpolationResult)?r.unpackInterpolationResult(Z,s,f,y,t):r.unpack(Z,0,t)}return r.unpack(s,a*this._packedLength,t)};jm.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))};jm.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)}iO(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};jm.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)}iO(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};jm.prototype.getSample=function(e){let t=this._times,n=t.length;if(l(n))return e<0&&(e+=n),t[e]};jm.prototype.addSamplesPackedArray=function(e,t){iO(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};jm.prototype.removeSample=function(e){let t=To(this._times,e,Q.compare);return t<0?!1:(Cge(this,t,1),!0)};function Cge(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)}jm.prototype.removeSamples=function(e){let t=this._times,n=To(t,e.start,Q.compare);n<0?n=~n:e.isStartIncluded||++n;let i=To(t,e.stop,Q.compare);i<0?i=~i:e.isStopIncluded&&++i,Cge(this,n,i-n)};jm.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};jm._mergeNewSamples=iO;var Lu=jm;function Qm(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 Lu(m,n),this._definitionChanged=new _e,this._referenceFrame=e??Mi.FIXED,this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(Qm.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 uat=new Q;Qm.prototype.getValue=function(e,t){return l(e)||(e=Q.now(uat)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};Qm.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),l(n))return Xh.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};Qm.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};Qm.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};Qm.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};Qm.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};Qm.prototype.removeSample=function(e){return this._property.removeSample(e)};Qm.prototype.removeSamples=function(e){this._property.removeSamples(e)};Qm.prototype.equals=function(e){return this===e||e instanceof Qm&&j.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var dc=Qm;var DTi=x(T(),1);var FTi=x(T(),1),mat={HORIZONTAL:0,VERTICAL:1},Sf=Object.freeze(mat);var hat=Sf.HORIZONTAL,fat=U.WHITE,pat=U.BLACK,bat=0,gat=1;function IV(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new _e,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(IV.prototype,{isConstant:{get:function(){return j.isConstant(this._orientation)&&j.isConstant(this._evenColor)&&j.isConstant(this._oddColor)&&j.isConstant(this._offset)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:ye("orientation"),evenColor:ye("evenColor"),oddColor:ye("oddColor"),offset:ye("offset"),repeat:ye("repeat")});IV.prototype.getType=function(e){return"Stripe"};var yat=new Q;IV.prototype.getValue=function(e,t){return l(e)||(e=Q.now(yat)),l(t)||(t={}),t.horizontal=j.getValueOrDefault(this._orientation,e,hat)===Sf.HORIZONTAL,t.evenColor=j.getValueOrClonedDefault(this._evenColor,e,fat,t.evenColor),t.oddColor=j.getValueOrClonedDefault(this._oddColor,e,pat,t.oddColor),t.offset=j.getValueOrDefault(this._offset,e,bat),t.repeat=j.getValueOrDefault(this._repeat,e,gat),t};IV.prototype.equals=function(e){return this===e||e instanceof IV&&j.equals(this._orientation,e._orientation)&&j.equals(this._evenColor,e._evenColor)&&j.equals(this._oddColor,e._oddColor)&&j.equals(this._offset,e._offset)&&j.equals(this._repeat,e._repeat)};var PV=IV;var qTi=x(T(),1);function px(e){this._definitionChanged=new _e,this._intervals=new Ts,this._intervals.changedEvent.addEventListener(px.prototype._intervalsChanged,this),this._referenceFrame=e??Mi.FIXED}Object.defineProperties(px.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 xat=new Q;px.prototype.getValue=function(e,t){return l(e)||(e=Q.now(xat)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};px.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(l(i))return Xh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};px.prototype.equals=function(e){return this===e||e instanceof px&&this._intervals.equals(e._intervals,j.equals)&&this._referenceFrame===e._referenceFrame};px.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var ag=px;var r_i=x(T(),1);function AS(){this._definitionChanged=new _e,this._intervals=new Ts,this._intervals.changedEvent.addEventListener(AS.prototype._intervalsChanged,this)}Object.defineProperties(AS.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var Tat=new Q;AS.prototype.getValue=function(e,t){l(e)||(e=Q.now(Tat));let n=this._intervals.findDataForIntervalContainingDate(e);return l(n)&&typeof n.clone=="function"?n.clone(t):n};AS.prototype.equals=function(e){return this===e||e instanceof AS&&this._intervals.equals(e._intervals,j.equals)};AS.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var cg=AS;var Z_i=x(T(),1);var m_i=x(T(),1);function XV(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new _e,this._normalize=t??!0,this.position=e}Object.defineProperties(XV.prototype,{isConstant:{get:function(){return j.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 _at=new m,Vge=new m,Rge=new Q,Sat=new Q,g7=1/60;XV.prototype.getValue=function(e,t){return this._getValue(e,t)};XV.prototype._getValue=function(e,t,n){l(e)||(e=Q.now(Sat)),l(t)||(t=new m);let i=this._position;if(j.isConstant(i))return this._normalize?void 0:m.clone(m.ZERO,t);let o=i.getValue(e,_at),r=i.getValue(Q.addSeconds(e,g7,Rge),Vge);if(!l(o)||!l(r)&&(r=o,o=i.getValue(Q.addSeconds(e,-g7,Rge),Vge),!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,g7,t)};XV.prototype.equals=function(e){return this===e||e instanceof XV&&j.equals(this._position,e._position)};var lg=XV;function FX(e,t){this._velocityVectorProperty=new lg(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new _e,this.ellipsoid=t??ie.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(FX.prototype,{isConstant:{get:function(){return j.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 Ege=new m,Aat=new m,Gge=new q,Zat=new Q;FX.prototype.getValue=function(e,t){l(e)||(e=Q.now(Zat));let n=this._velocityVectorProperty._getValue(e,Aat,Ege);if(l(n))return pt.rotationMatrixFromPositionVelocity(Ege,n,this._ellipsoid,Gge),Pe.fromRotationMatrix(Gge,t)};FX.prototype.equals=function(e){return this===e||e instanceof FX&&j.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var IX=FX;var R_i=x(T(),1);var dg={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};dg.validate=function(e){return e===dg.COMPLETE||e===dg.BELOW_ELLIPSOID_HORIZON||e===dg.ABOVE_ELLIPSOID_HORIZON};dg.toString=function(e){switch(e){case dg.COMPLETE:return"COMPLETE";case dg.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case dg.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new fe("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var NV=dg;function bx(){}bx.packedLength=m.packedLength;bx.unpack=m.unpack;bx.pack=m.pack;var y7;function PX(e,t){return t[0]==="#"&&(t=y7+t),sg.fromString(e,t)}function Lge(e,t,n){if(l(n.reference))return PX(t,n.reference);if(l(n.velocityReference)){let i=PX(t,n.velocityReference);switch(e){case m:case bx:return new lg(i,e===bx);case Pe:return new IX(i)}}throw new ue(`${JSON.stringify(n)} is not valid CZML.`)}function Cat(e,t){return new Mh(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var mo=new m,$l=new vX,ul=new be,ZS=new vn,oO=new Pe;function Vat(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 Wge(e,t){let n=e.uri??e;return l(t)?t.getDerivedResource({url:n}):We.createIfNeeded(n)}function Rat(e){let t=e.wsen;if(l(t))return t;let n=e.wsenDegrees;if(!l(n))return;let i=n.length;if(i===ce.packedLength)return[W.toRadians(n[0]),W.toRadians(n[1]),W.toRadians(n[2]),W.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=W.toRadians(n[o+1]),t[o+2]=W.toRadians(n[o+2]),t[o+3]=W.toRadians(n[o+3]),t[o+4]=W.toRadians(n[o+4]);return t}function Eat(e){let t=e.length;if($l.magnitude=1,t===2)return $l.clock=e[0],$l.cone=e[1],m.fromSpherical($l,mo),[mo.x,mo.y,mo.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],$l.clock=e[i+1],$l.cone=e[i+2],m.fromSpherical($l,mo),n[o+1]=mo.x,n[o+2]=mo.y,n[o+3]=mo.z;return n}function Gat(e){let t=e.length;if(t===3)return $l.clock=e[0],$l.cone=e[1],$l.magnitude=e[2],m.fromSpherical($l,mo),[mo.x,mo.y,mo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],$l.clock=e[i+1],$l.cone=e[i+2],$l.magnitude=e[i+3],m.fromSpherical($l,mo),n[i+1]=mo.x,n[i+2]=mo.y,n[i+3]=mo.z;return n}function Lat(e){let t=e.length;if(t===3)return ul.longitude=e[0],ul.latitude=e[1],ul.height=e[2],ie.default.cartographicToCartesian(ul,mo),[mo.x,mo.y,mo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],ul.longitude=e[i+1],ul.latitude=e[i+2],ul.height=e[i+3],ie.default.cartographicToCartesian(ul,mo),n[i+1]=mo.x,n[i+2]=mo.y,n[i+3]=mo.z;return n}function Wat(e){let t=e.length;if(t===3)return ul.longitude=W.toRadians(e[0]),ul.latitude=W.toRadians(e[1]),ul.height=e[2],ie.default.cartographicToCartesian(ul,mo),[mo.x,mo.y,mo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],ul.longitude=W.toRadians(e[i+1]),ul.latitude=W.toRadians(e[i+2]),ul.height=e[i+3],ie.default.cartographicToCartesian(ul,mo),n[i+1]=mo.x,n[i+2]=mo.y,n[i+3]=mo.z;return n}function x7(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 Eat(o);let r=e.spherical;if(l(r))return Gat(r);let s=e.cartographicRadians;if(l(s))return Lat(s);let a=e.cartographicDegrees;if(l(a))return Wat(a);throw new ue(`${JSON.stringify(e)} is not a valid CZML interval.`)}function vge(e,t){m.unpack(e,t,mo),m.normalize(mo,mo),m.pack(mo,e,t)}function vat(e){let t=x7(e);if(t.length===3)return vge(t,0),t;for(let n=1;n<t.length;n+=4)vge(t,n);return t}function Fge(e,t){Pe.unpack(e,t,oO),Pe.normalize(oO,oO),Pe.pack(oO,e,t)}function Fat(e){let t=e.unitQuaternion;if(l(t)){if(t.length===4)return Fge(t,0),t;for(let n=1;n<t.length;n+=5)Fge(t,n)}return t}function Ige(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")?Qe:e.hasOwnProperty("cartesian2")?M:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?m:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?bx:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?U:e.hasOwnProperty("arcType")?cn:e.hasOwnProperty("classificationType")?ti:e.hasOwnProperty("colorBlendMode")?tl:e.hasOwnProperty("cornerType")?eo:e.hasOwnProperty("heightReference")?tt:e.hasOwnProperty("horizontalOrigin")?Yi:e.hasOwnProperty("date")?Q:e.hasOwnProperty("labelStyle")?ur:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?Dt:e.hasOwnProperty("distanceDisplayCondition")?kt:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?Pe:e.hasOwnProperty("shadowMode")?Ln:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?Sf:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?ce:e.hasOwnProperty("uri")?NX.default:e.hasOwnProperty("verticalOrigin")?Jn:Object}function Iat(e,t,n){switch(e){case cn:return cn[t.arcType??t];case Array:return t.array;case Boolean:return t.boolean??t;case Qe:return t.boundingRectangle;case M:return t.cartesian2;case m:return x7(t);case bx:return vat(t);case U:return Vat(t);case ti:return ti[t.classificationType??t];case tl:return tl[t.colorBlendMode??t];case eo:return eo[t.cornerType??t];case tt:return tt[t.heightReference??t];case Yi:return Yi[t.horizontalOrigin??t];case Image:return Wge(t,n);case Q:return Q.fromIso8601(t.date??t);case ur:return ur[t.labelStyle??t];case Number:return t.number??t;case Dt:return t.nearFarScalar;case kt:return t.distanceDisplayCondition;case Object:return t.object??t.value??t;case Pe:return Fat(t);case Jm:return t.number??t;case NV:return NV[t.portionToDisplay??t];case Ln:return Ln[t.shadowMode??t.shadows??t];case String:return t.string??t;case Sf:return Sf[t.stripeOrientation??t];case ce:return Rat(t);case NX.default:return Wge(t,n);case Jn:return Jn[t.verticalOrigin??t];default:throw new ue(`Unknown CzmlDataSource interval type: ${e}`)}}var Pat={HERMITE:LX,LAGRANGE:WX,LINEAR:TS};function rO(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(l(n)||l(i))&&t.setInterpolationOptions({interpolationAlgorithm:Pat[n],interpolationDegree:i});let o=e.forwardExtrapolationType;l(o)&&(t.forwardExtrapolationType=Eu[o]);let r=e.forwardExtrapolationDuration;l(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;l(s)&&(t.backwardExtrapolationType=Eu[s]);let a=e.backwardExtrapolationDuration;l(a)&&(t.backwardExtrapolationDuration=a)}var Pge={iso8601:void 0};function Yr(e){if(l(e))return Pge.iso8601=e,vn.fromIso8601(Pge)}function T7(e){let t=Je.MAXIMUM_INTERVAL.clone();return t.data=e,t}function Xge(e){let t=new cl;return t.intervals.addInterval(T7(e)),t}function Nge(e){let t=new cc(e.referenceFrame);return t.intervals.addInterval(T7(e)),t}function sO(e,t,n,i,o,r,s){let a=Yr(i.interval);l(o)&&(l(a)?a=vn.intersect(a,o,ZS):a=o);let c,d,u,h=!l(i.reference)&&!l(i.velocityReference),p=l(a)&&!a.equals(Je.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return Kge(t[n],a)}let b=!1;if(h){if(d=Iat(e,i,r),!l(d))return;c=e.packedLength??1,u=d.length??1,b=!l(i.array)&&typeof d!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==Jm;if(!b&&!p){h?t[n]=new hi(f?e.unpack(d,0):d):t[n]=Lge(e,s,i);return}let y=t[n],_,S=i.epoch;if(l(S)&&(_=Q.fromIso8601(S)),b&&!p){y instanceof Lu||(t[n]=y=new Lu(e)),y.addSamplesPackedArray(d,_),rO(i,y);return}let A;if(!b&&p){a=a.clone(),h?a.data=f?e.unpack(d,0):d:a.data=Lge(e,s,i),l(y)||(t[n]=y=h?new cg:new cl),h&&y instanceof cg?y.intervals.addInterval(a):y instanceof cl?(h&&(a.data=new hi(a.data)),y.intervals.addInterval(a)):(t[n]=y=Xge(y),h&&(a.data=new hi(a.data)),y.intervals.addInterval(a));return}l(y)||(t[n]=y=new cl),y instanceof cl||(t[n]=y=Xge(y));let Z=y.intervals;A=Z.findInterval(a),(!l(A)||!(A.data instanceof Lu))&&(A=a.clone(),A.data=new Lu(e),Z.addInterval(A)),A.data.addSamplesPackedArray(d,_),rO(i,A.data)}function Kge(e,t){if(e instanceof Lu){e.removeSamples(t);return}else if(e instanceof cg){e.intervals.removeInterval(t);return}else if(e instanceof cl){let n=e.intervals;for(let i=0;i<n.length;++i){let o=vn.intersect(n.get(i),t,ZS);o.isEmpty||Kge(o.data,t)}n.removeInterval(t);return}}function Ze(e,t,n,i,o,r,s){if(l(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)sO(e,t,n,i[a],o,r,s);else sO(e,t,n,i,o,r,s)}function Yge(e,t,n,i,o,r){let s=Yr(n.interval);l(i)&&(l(s)?s=vn.intersect(s,i,ZS):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(Je.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return Jge(e[t],s)}let b,f=!1;if(h&&(l(n.referenceFrame)&&(b=Mi[n.referenceFrame]),b=b??Mi.FIXED,d=x7(n),u=d.length??1,f=u>c),!f&&!p){h?e[t]=new Ll(m.unpack(d),b):e[t]=PX(r,n.reference);return}let y=e[t],_,S=n.epoch;if(l(S)&&(_=Q.fromIso8601(S)),f&&!p){(!(y instanceof dc)||l(b)&&y.referenceFrame!==b)&&(e[t]=y=new dc(b,a)),y.addSamplesPackedArray(d,_),rO(n,y);return}let A;if(!f&&p){s=s.clone(),h?s.data=m.unpack(d):s.data=PX(r,n.reference),l(y)||(h?y=new ag(b):y=new cc(b),e[t]=y),h&&y instanceof ag&&l(b)&&y.referenceFrame===b?y.intervals.addInterval(s):y instanceof cc?(h&&(s.data=new Ll(s.data,b)),y.intervals.addInterval(s)):(e[t]=y=Nge(y),h&&(s.data=new Ll(s.data,b)),y.intervals.addInterval(s));return}l(y)?y instanceof cc||(e[t]=y=Nge(y)):e[t]=y=new cc(b);let Z=y.intervals;A=Z.findInterval(s),(!l(A)||!(A.data instanceof dc)||l(b)&&A.data.referenceFrame!==b)&&(A=s.clone(),A.data=new dc(b,a),Z.addInterval(A)),A.data.addSamplesPackedArray(d,_),rO(n,A.data)}function Jge(e,t){if(e instanceof dc){e.removeSamples(t);return}else if(e instanceof ag){e.intervals.removeInterval(t);return}else if(e instanceof cc){let n=e.intervals;for(let i=0;i<n.length;++i){let o=vn.intersect(n.get(i),t,ZS);o.isEmpty||Jge(o.data,t)}n.removeInterval(t);return}}function jge(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)Yge(e,t,n[s],i,o,r);else Yge(e,t,n,i,o,r)}function wge(e,t,n,i){l(n.references)?aO(e,t,n.references,n.interval,i,FV,cl):(l(n.cartesian2)?n.array=M.unpackArray(n.cartesian2):l(n.cartesian)&&(n.array=M.unpackArray(n.cartesian)),l(n.array)&&Ze(Array,e,t,n,void 0,void 0,i))}function Mge(e,t,n,i,o,r){let s=Yr(n.interval);l(i)&&(l(s)?s=vn.intersect(s,i,ZS):s=i);let a=e[t],c,d;if(l(s)){a instanceof pV||(a=new pV,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,Ze(U,c,"color",u.color,void 0,void 0,r)):l(n.grid)?(c instanceof CV||(c=new CV),u=n.grid,Ze(U,c,"color",u.color,void 0,o,r),Ze(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),Ze(M,c,"lineCount",u.lineCount,void 0,o,r),Ze(M,c,"lineThickness",u.lineThickness,void 0,o,r),Ze(M,c,"lineOffset",u.lineOffset,void 0,o,r)):l(n.image)?(c instanceof my||(c=new my),u=n.image,Ze(Image,c,"image",u.image,void 0,o,r),Ze(M,c,"repeat",u.repeat,void 0,o,r),Ze(U,c,"color",u.color,void 0,o,r),Ze(Boolean,c,"transparent",u.transparent,void 0,o,r)):l(n.stripe)?(c instanceof PV||(c=new PV),u=n.stripe,Ze(Sf,c,"orientation",u.orientation,void 0,o,r),Ze(U,c,"evenColor",u.evenColor,void 0,o,r),Ze(U,c,"oddColor",u.oddColor,void 0,o,r),Ze(Number,c,"offset",u.offset,void 0,o,r),Ze(Number,c,"repeat",u.repeat,void 0,o,r)):l(n.polylineOutline)?(c instanceof hx||(c=new hx),u=n.polylineOutline,Ze(U,c,"color",u.color,void 0,o,r),Ze(U,c,"outlineColor",u.outlineColor,void 0,o,r),Ze(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):l(n.polylineGlow)?(c instanceof WV||(c=new WV),u=n.polylineGlow,Ze(U,c,"color",u.color,void 0,o,r),Ze(Number,c,"glowPower",u.glowPower,void 0,o,r),Ze(Number,c,"taperPower",u.taperPower,void 0,o,r)):l(n.polylineArrow)?(c instanceof RV||(c=new RV),u=n.polylineArrow,Ze(U,c,"color",u.color,void 0,void 0,r)):l(n.polylineDash)?(c instanceof GV||(c=new GV),u=n.polylineDash,Ze(U,c,"color",u.color,void 0,void 0,r),Ze(U,c,"gapColor",u.gapColor,void 0,void 0,r),Ze(Number,c,"dashLength",u.dashLength,void 0,o,r),Ze(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):l(n.checkerboard)&&(c instanceof hV||(c=new hV),u=n.checkerboard,Ze(U,c,"evenColor",u.evenColor,void 0,o,r),Ze(U,c,"oddColor",u.oddColor,void 0,o,r),Ze(M,c,"repeat",u.repeat,void 0,o,r)),l(d)?d.data=c:e[t]=c}function Wu(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)Mge(e,t,n[s],i,o,r);else Mge(e,t,n,i,o,r)}function Xat(e,t,n,i){let o=t.name;l(o)&&(e.name=t.name)}function Nat(e,t,n,i){let o=t.description;l(o)&&Ze(String,e,"description",o,void 0,i,n)}function Yat(e,t,n,i){let o=t.position;l(o)&&jge(e,"position",o,void 0,i,n)}function wat(e,t,n,i){let o=t.viewFrom;l(o)&&Ze(m,e,"viewFrom",o,void 0,i,n)}function Mat(e,t,n,i){let o=t.orientation;l(o)&&Ze(Pe,e,"orientation",o,void 0,i,n)}function kat(e,t,n,i){let o=t.properties;if(l(o)){l(e.properties)||(e.properties=new vl);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)sO(Ige(s[a]),e.properties,r,s[a],void 0,i,n);else sO(Ige(s),e.properties,r,s,void 0,i,n)}}}function aO(e,t,n,i,o,r,s){let a=n.map(function(c){return PX(o,c)});if(l(i)){i=Yr(i);let c=e[t];if(!(c instanceof s)){let d=new s;d.intervals.addInterval(T7(c)),e[t]=c=d}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function kge(e,t,n,i){let o=n.references;l(o)?aO(e,t,o,n.interval,i,FV,cl):Ze(Array,e,t,n,void 0,void 0,i)}function Uge(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)kge(e,t,n[o],i);else kge(e,t,n,i)}function Dge(e,t,n,i){let o=n.references;l(o)?aO(e,t,o,n.interval,i,rg,cc):(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)&&Ze(Array,e,t,n,void 0,void 0,i))}function YX(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Dge(e,t,n[o],i);else Dge(e,t,n,i)}function Uat(e){return m.unpackArray(e)}function Dat(e){return m.fromRadiansArrayHeights(e,ie.default)}function Oat(e){return m.fromDegreesArrayHeights(e,ie.default)}function Oge(e,t,n,i){let o=n.references;if(l(o)){let r=o.map(function(s){let a={};return aO(a,"positions",s,n.interval,i,rg,cc),a.positions});e[t]=new rg(r)}else l(n.cartesian)?n.array=n.cartesian.map(Uat):l(n.cartographicRadians)?n.array=n.cartographicRadians.map(Dat):l(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(Oat)),l(n.array)&&Ze(Array,e,t,n,void 0,void 0,i)}function Bat(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Oge(e,t,n[o],i);else Oge(e,t,n,i)}function zat(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)wge(e,t,n[o],i);else wge(e,t,n,i)}function Hat(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 Ts),r.addInterval(Yr(o[s]));else r=new Ts,r.addInterval(Yr(o));e.availability=r}function Kat(e,t,n,i,o){l(t)&&Ze(bx,e,"alignedAxis",t,n,i,o)}function Jat(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 Hc),Ze(Boolean,s,"show",o.show,r,i,n),Ze(Image,s,"image",o.image,r,i,n),Ze(Number,s,"scale",o.scale,r,i,n),Ze(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ze(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ze(Yi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ze(Jn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(U,s,"color",o.color,r,i,n),Ze(Jm,s,"rotation",o.rotation,r,i,n),Kat(s,o.alignedAxis,r,i,n),Ze(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),Ze(Number,s,"width",o.width,r,i,n),Ze(Number,s,"height",o.height,r,i,n),Ze(Dt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ze(Dt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ze(Dt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ze(Qe,s,"imageSubRegion",o.imageSubRegion,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function jat(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 HT),Ze(Boolean,s,"show",o.show,r,i,n),Ze(m,s,"dimensions",o.dimensions,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Qat(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 JT),Ze(Boolean,s,"show",o.show,r,i,n),YX(s,"positions",o.positions,n),Ze(Number,s,"width",o.width,r,i,n),Ze(Number,s,"height",o.height,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ze(tt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ze(eo,s,"cornerType",o.cornerType,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(ti,s,"classificationType",o.classificationType,r,i,n),Ze(Number,s,"zIndex",o.zIndex,r,i,n)}function qat(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 jT),Ze(Boolean,s,"show",o.show,r,i,n),Ze(Number,s,"length",o.length,r,i,n),Ze(Number,s,"topRadius",o.topRadius,r,i,n),Ze(Number,s,"bottomRadius",o.bottomRadius,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ze(Number,s,"slices",o.slices,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function $at(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 ue("Cesium only supports CZML version 1.");t._version=n}}if(!l(t._version))throw new ue("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 ect(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 QT),Ze(Boolean,s,"show",o.show,r,i,n),Ze(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),Ze(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),Ze(Number,s,"height",o.height,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ze(tt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ze(Jm,s,"rotation",o.rotation,r,i,n),Ze(Jm,s,"stRotation",o.stRotation,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(ti,s,"classificationType",o.classificationType,r,i,n),Ze(Number,s,"zIndex",o.zIndex,r,i,n)}function tct(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 qT),Ze(Boolean,s,"show",o.show,r,i,n),Ze(m,s,"radii",o.radii,r,i,n),Ze(m,s,"innerRadii",o.innerRadii,r,i,n),Ze(Number,s,"minimumClock",o.minimumClock,r,i,n),Ze(Number,s,"maximumClock",o.maximumClock,r,i,n),Ze(Number,s,"minimumCone",o.minimumCone,r,i,n),Ze(Number,s,"maximumCone",o.maximumCone,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Number,s,"stackPartitions",o.stackPartitions,r,i,n),Ze(Number,s,"slicePartitions",o.slicePartitions,r,i,n),Ze(Number,s,"subdivisions",o.subdivisions,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function nct(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 Nh),Ze(Boolean,s,"show",o.show,r,i,n),Ze(String,s,"text",o.text,r,i,n),Ze(String,s,"font",o.font,r,i,n),Ze(ur,s,"style",o.style,r,i,n),Ze(Number,s,"scale",o.scale,r,i,n),Ze(Boolean,s,"showBackground",o.showBackground,r,i,n),Ze(U,s,"backgroundColor",o.backgroundColor,r,i,n),Ze(M,s,"backgroundPadding",o.backgroundPadding,r,i,n),Ze(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ze(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ze(Yi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ze(Jn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(U,s,"fillColor",o.fillColor,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Dt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ze(Dt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ze(Dt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function ict(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 J0),Ze(Boolean,s,"show",o.show,r,i,n),Ze(NX.default,s,"uri",o.gltf,r,i,n),Ze(Number,s,"scale",o.scale,r,i,n),Ze(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),Ze(Number,s,"maximumScale",o.maximumScale,r,i,n),Ze(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),Ze(Boolean,s,"runAnimations",o.runAnimations,r,i,n),Ze(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(U,s,"silhouetteColor",o.silhouetteColor,r,i,n),Ze(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),Ze(U,s,"color",o.color,r,i,n),Ze(tl,s,"colorBlendMode",o.colorBlendMode,r,i,n),Ze(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),Ze(kt,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)Bge(s,d[a],r,i,n);else Bge(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)zge(s,u[a],r,i,n);else zge(s,u,r,i,n)}function Bge(e,t,n,i,o){let r=Yr(t.interval);l(n)&&(l(r)?r=vn.intersect(r,n,ZS):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 vl),s.hasProperty(u)||s.addProperty(u);let p=s[u];l(p)||(s[u]=p=new $T),Ze(m,p,"translation",h.translation,r,i,o),Ze(Pe,p,"rotation",h.rotation,r,i,o),Ze(m,p,"scale",h.scale,r,i,o)}}function zge(e,t,n,i,o){let r=Yr(t.interval);l(n)&&(l(r)?r=vn.intersect(r,n,ZS):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 vl),s.hasProperty(u)||s.addProperty(u),Ze(Number,s,u,h,r,i,o))}}function oct(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 j0),Ze(Boolean,s,"show",o.show,r,i,n),Ze(Number,s,"leadTime",o.leadTime,r,i,n),Ze(Number,s,"trailTime",o.trailTime,r,i,n),Ze(Number,s,"width",o.width,r,i,n),Ze(Number,s,"resolution",o.resolution,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(String,s,"relativeTo",o.relativeTo,r,i,n)}function rct(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 t_),Ze(Boolean,s,"show",o.show,r,i,n),Ze(Number,s,"pixelSize",o.pixelSize,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(U,s,"color",o.color,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Dt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ze(Dt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function XX(e){this.polygon=e,this._definitionChanged=new _e}Object.defineProperties(XX.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}}});XX.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 Ec(o)}))),l(t)?(t.positions=n,t.holes=i,t):new Ec(n,i)};XX.prototype.equals=function(e){return this===e||e instanceof XX&&j.equals(this.polygon._positions,e.polygon._positions)&&j.equals(this.polygon._holes,e.polygon._holes)};function sct(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 Yh),Ze(Boolean,s,"show",o.show,r,i,n),YX(s,"_positions",o.positions,n),Bat(s,"_holes",o.holes,n),(l(s._positions)||l(s._holes))&&(s.hierarchy=new XX(s)),Ze(Number,s,"height",o.height,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ze(tt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ze(Jm,s,"stRotation",o.stRotation,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),Ze(Boolean,s,"closeTop",o.closeTop,r,i,n),Ze(Boolean,s,"closeBottom",o.closeBottom,r,i,n),Ze(cn,s,"arcType",o.arcType,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(ti,s,"classificationType",o.classificationType,r,i,n),Ze(Number,s,"zIndex",o.zIndex,r,i,n)}function act(e){return e?cn.GEODESIC:cn.NONE}function cct(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 Jc),Ze(Boolean,s,"show",o.show,r,i,n),YX(s,"positions",o.positions,n),Ze(Number,s,"width",o.width,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Wu(s,"material",o.material,r,i,n),Wu(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),Ze(cn,s,"arcType",o.arcType,r,i,n),Ze(Boolean,s,"clampToGround",o.clampToGround,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(ti,s,"classificationType",o.classificationType,r,i,n),Ze(Number,s,"zIndex",o.zIndex,r,i,n),l(o.followSurface)&&!l(o.arcType)){let a={};Ze(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=Cat(a.followSurface,act)}}function lct(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 n_),YX(s,"positions",o.positions,n),zat(s,"shape",o.shape,n),Ze(Boolean,s,"show",o.show,r,i,n),Ze(eo,s,"cornerType",o.cornerType,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function dct(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 wh),Ze(Boolean,s,"show",o.show,r,i,n),Ze(ce,s,"coordinates",o.coordinates,r,i,n),Ze(Number,s,"height",o.height,r,i,n),Ze(tt,s,"heightReference",o.heightReference,r,i,n),Ze(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ze(tt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ze(Jm,s,"rotation",o.rotation,r,i,n),Ze(Jm,s,"stRotation",o.stRotation,r,i,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ze(ti,s,"classificationType",o.classificationType,r,i,n),Ze(Number,s,"zIndex",o.zIndex,r,i,n)}function uct(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 e_),Ze(Boolean,s,"show",o.show,r,i,n),Ze(NX.default,s,"uri",o.uri,r,i,n),Ze(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function mct(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 Q0),Ze(Boolean,s,"show",o.show,r,i,n),YX(s,"positions",o.positions,n),Uge(s,"minimumHeights",o.minimumHeights,n),Uge(s,"maximumHeights",o.maximumHeights,n),Ze(Number,s,"granularity",o.granularity,r,i,n),Ze(Boolean,s,"fill",o.fill,r,i,n),Wu(s,"material",o.material,r,i,n),Ze(Boolean,s,"outline",o.outline,r,i,n),Ze(U,s,"outlineColor",o.outlineColor,r,i,n),Ze(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ze(Ln,s,"shadows",o.shadows,r,i,n),Ze(kt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Hge(e,t,n,i,o){let r=e.id;if(l(r)||(r=qn()),y7=r,!l(o._version)&&r!=="document")throw new ue("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")$at(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)}y7=void 0}function hct(e){let t,n=e._documentPacket.clock;if(!l(n)){if(!l(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(Je.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=Q.secondsDifference(s,r),c=Math.round(a/120);return t=new _f,t.startTime=Q.clone(r),t.stopTime=Q.clone(s),t.clockRange=Ss.LOOP_STOP,t.multiplier=c,t.currentTime=Q.clone(r),t.clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}l(e._clock)?t=e._clock.clone():(t=new _f,t.startTime=Je.MINIMUM_VALUE.clone(),t.stopTime=Je.MAXIMUM_VALUE.clone(),t.currentTime=Je.MINIMUM_VALUE.clone(),t.clockRange=Ss.LOOP_STOP,t.clockStep=Yo.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=Ss[n.range]??Ss.LOOP_STOP),l(n.step)&&(t.clockStep=Yo[n.step]??Yo.SYSTEM_CLOCK_MULTIPLIER),l(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Qge(e,t,n,i){n=n??B.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new yt(s)),e._credit=s,typeof t=="string"||t instanceof We){t=We.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=We.createIfNeeded(r),_s.setLoading(e,!0),Promise.resolve(o).then(function(a){return fct(e,a,r,i)}).catch(function(a){return _s.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function fct(e,t,n,i){_s.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new qge,o.removeAll()),ea._processCzml(t,o,n,void 0,e);let r=hct(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=ig(n.getUrlComponent()),r=!0),_s.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function qge(){this.name=void 0,this.clock=void 0}function ea(e){this._name=e,this._changed=new _e,this._error=new _e,this._isLoading=!1,this._loading=new _e,this._clock=void 0,this._documentPacket=new qge,this._version=void 0,this._entityCollection=new wa(this),this._entityCluster=new Vu,this._credit=void 0,this._resourceCredits=[]}ea.load=function(e,t){return new ea().load(e,t)};Object.defineProperties(ea.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}}});ea.updaters=[Jat,jat,Qat,qat,ect,tct,nct,ict,Xat,Nat,oct,rct,sct,cct,lct,kat,dct,Yat,uct,wat,mct,Mat,Hat];ea.registerUpdater=function(e){ea.updaters.includes(e)||ea.updaters.push(e)};ea.unregisterUpdater=function(e){if(ea.updaters.includes(e)){let t=ea.updaters.indexOf(e);ea.updaters.splice(t,1)}};ea.prototype.process=function(e,t){return Qge(this,e,t,!1)};ea.prototype.load=function(e,t){return Qge(this,e,t,!0)};ea.prototype.update=function(e){return!0};ea.processPacketData=Ze;ea.processPositionPacketData=jge;ea.processMaterialPacketData=Wu;ea._processCzml=function(e,t,n,i,o){if(i=i??ea.updaters,Array.isArray(e))for(let r=0,s=e.length;r<s;++r)Hge(e[r],t,i,n,o);else Hge(e,t,i,n,o)};var wX=ea;var gAi=x(T(),1);function ed(){this._dataSources=[],this._dataSourceAdded=new _e,this._dataSourceRemoved=new _e,this._dataSourceMoved=new _e}Object.defineProperties(ed.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}}});ed.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})};ed.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};ed.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=[]};ed.prototype.contains=function(e){return this.indexOf(e)!==-1};ed.prototype.indexOf=function(e){return this._dataSources.indexOf(e)};ed.prototype.get=function(e){return this._dataSources[e]};ed.prototype.getByName=function(e){return this._dataSources.filter(function(t){return t.name===e})};function cO(e,t){return e.indexOf(t)}function $ge(e,t,n){let i=e._dataSources,o=i.length-1;if(t=W.clamp(t,0,o),n=W.clamp(n,0,o),t===n)return;let r=i[t];i[t]=i[n],i[n]=r,e.dataSourceMoved.raiseEvent(r,n,t)}ed.prototype.raise=function(e){let t=cO(this._dataSources,e);$ge(this,t,t+1)};ed.prototype.lower=function(e){let t=cO(this._dataSources,e);$ge(this,t,t-1)};ed.prototype.raiseToTop=function(e){let t=cO(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))};ed.prototype.lowerToBottom=function(e){let t=cO(this._dataSources,e);t!==0&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))};ed.prototype.isDestroyed=function(){return!1};ed.prototype.destroy=function(){return this.removeAll(!0),he(this)};var MX=ed;var wIi=x(T(),1);var GAi=x(T(),1);var ZAi=x(T(),1);function uc(e){e=e??B.EMPTY_OBJECT,this._primitives=[],this._guid=qn(),this._primitiveAdded=new _e,this._primitiveRemoved=new _e,this._zIndex=void 0,this.show=e.show??!0,this.destroyPrimitives=e.destroyPrimitives??!0,this._countReferences=e.countReferences??!1}Object.defineProperties(uc.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});uc.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};uc.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};uc.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};uc.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=[]};uc.prototype.contains=function(e){return!!(l(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])};function lO(e,t){return e._primitives.indexOf(t)}uc.prototype.raise=function(e){if(l(e)){let t=lO(this,e),n=this._primitives;if(t!==n.length-1){let i=n[t];n[t]=n[t+1],n[t+1]=i}}};uc.prototype.raiseToTop=function(e){if(l(e)){let t=lO(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}};uc.prototype.lower=function(e){if(l(e)){let t=lO(this,e),n=this._primitives;if(t!==0){let i=n[t];n[t]=n[t-1],n[t-1]=i}}};uc.prototype.lowerToBottom=function(e){if(l(e)){let t=lO(this,e),n=this._primitives;t!==0&&(n.splice(t,1),n.unshift(e))}};uc.prototype.get=function(e){return this._primitives[e]};uc.prototype.update=function(e){if(!this.show)return;let t=this._primitives;for(let n=0;n<t.length;++n)t[n].update(e)};uc.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)}};uc.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)}};uc.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)}};uc.prototype.isDestroyed=function(){return!1};uc.prototype.destroy=function(){return this.removeAll(),he(this)};var td=uc;function Xp(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(Xp.prototype,{length:{get:function(){return this._length}}});Xp.prototype.add=function(e,t){t=t??0;let n=this._collections[t];if(!l(n)){n=new td({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};Xp.prototype.set=function(e,t){return t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e};Xp.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};Xp.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};Xp.prototype.contains=function(e){if(!l(e))return!1;let t=this._collections[e._zIndex];return l(t)&&t.contains(e)};Xp.prototype.update=function(e){if(!this.show)return;let t=this._collectionsArray;for(let n=0;n<t.length;n++)t[n].update(e)};Xp.prototype.isDestroyed=function(){return!1};Xp.prototype.destroy=function(){return this.removeAll(),he(this)};var kX=Xp;var hvi=x(T(),1);var IAi=x(T(),1);function YV(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new Xt}YV.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))};YV.prototype.remove=function(e){let t=e.id,n=this._dynamicUpdaters.get(t);l(n)&&(this._dynamicUpdaters.remove(t),n.destroy())};YV.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};YV.prototype.removeAllPrimitives=function(){let e=this._dynamicUpdaters.values;for(let t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()};YV.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),l(e)&&l(e.getBoundingSphere)?e.getBoundingSphere(t):Tt.FAILED};var CS=YV;var xLi=x(T(),1);var jZi=x(T(),1);var uZi=x(T(),1);var MAi=x(T(),1);var S7={},dO=new m,eye=new m,tye=new Pe,nye=new q;function wV(e,t,n,i,o,r,s,a,c,d){let u=e+t;m.multiplyByScalar(i,Math.cos(u),dO),m.multiplyByScalar(n,Math.sin(u),eye),m.add(dO,eye,dO);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 Pe.fromAxisAngle(dO,f,tye),q.fromQuaternion(tye,nye),q.multiplyByVector(nye,c,d),m.normalize(d,d),m.multiplyByScalar(d,a,d),d}var iye=new m,oye=new m,_7=new m,pct=new m;S7.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,b=m.fromArray(e,u,iye);i.scaleToGeodeticSurface(b,b);let f=m.clone(b,oye),y=i.geodeticSurfaceNormal(b,pct),_=m.multiplyByScalar(y,o,_7);m.add(b,_,b),n&&(m.multiplyByScalar(y,r,_),m.add(f,_,f),a[u+d]=f.x,a[h+d]=f.y,a[p+d]=f.z),a[u]=b.x,a[h]=b.y,a[p]=b.z}return a};var bct=new m,gct=new m,yct=new m;S7.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,bct),b=m.cross(m.UNIT_Z,s,gct);b=m.normalize(b,b);let f=m.cross(p,b,yct),y=1+Math.ceil(W.PI_OVER_TWO/a),_=W.PI_OVER_TWO/(y-1),S=W.PI_OVER_TWO-y*_;S<0&&(y-=Math.ceil(Math.abs(S)/_));let A=2*(y*(y+2)),Z=t?new Array(A*3):void 0,V=0,E=iye,G=oye,v=y*4*3,I=v-1,X=0,N=n?new Array(v):void 0,g,C,R,L,P;for(S=W.PI_OVER_TWO,E=wV(S,r,f,b,c,u,d,h,p,E),t&&(Z[V++]=E.x,Z[V++]=E.y,Z[V++]=E.z),n&&(N[I--]=E.z,N[I--]=E.y,N[I--]=E.x),S=W.PI_OVER_TWO-_,g=1;g<y+1;++g){if(E=wV(S,r,f,b,c,u,d,h,p,E),G=wV(Math.PI-S,r,f,b,c,u,d,h,p,G),t){for(Z[V++]=E.x,Z[V++]=E.y,Z[V++]=E.z,R=2*g+2,C=1;C<R-1;++C)L=C/(R-1),P=m.lerp(E,G,L,_7),Z[V++]=P.x,Z[V++]=P.y,Z[V++]=P.z;Z[V++]=G.x,Z[V++]=G.y,Z[V++]=G.z}n&&(N[I--]=E.z,N[I--]=E.y,N[I--]=E.x,N[X++]=G.x,N[X++]=G.y,N[X++]=G.z),S=W.PI_OVER_TWO-(g+1)*_}for(g=y;g>1;--g){if(S=W.PI_OVER_TWO-(g-1)*_,E=wV(-S,r,f,b,c,u,d,h,p,E),G=wV(S+Math.PI,r,f,b,c,u,d,h,p,G),t){for(Z[V++]=E.x,Z[V++]=E.y,Z[V++]=E.z,R=2*(g-1)+2,C=1;C<R-1;++C)L=C/(R-1),P=m.lerp(E,G,L,_7),Z[V++]=P.x,Z[V++]=P.y,Z[V++]=P.z;Z[V++]=G.x,Z[V++]=G.y,Z[V++]=G.z}n&&(N[I--]=E.z,N[I--]=E.y,N[I--]=E.x,N[X++]=G.x,N[X++]=G.y,N[X++]=G.z)}S=W.PI_OVER_TWO,E=wV(-S,r,f,b,c,u,d,h,p,E);let Y={};return t&&(Z[V++]=E.x,Z[V++]=E.y,Z[V++]=E.z,Y.positions=Z,Y.numPts=y),n&&(N[I--]=E.z,N[I--]=E.y,N[I--]=E.x,Y.outerPositions=N),Y};var Nd=S7;var MV=new m,A7=new m,Z7=new m,rye=new m,ga=new M,sye=new q,xct=new q,C7=new Pe,aye=new m,cye=new m,lye=new m,hO=new be,dye=new m,uye=new M,mye=new M;function hye(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,b=i.tangent?new Float32Array(d*3):void 0,f=i.bitangent?new Float32Array(d*3):void 0,y=u?new Float32Array(d*3):void 0,_=0,S=aye,A=cye,Z=lye,V=new Ki(a),E=V.project(a.cartesianToCartographic(o,hO),dye),G=a.scaleToGeodeticSurface(o,MV);a.geodeticSurfaceNormal(G,G);let v=sye,I=xct;if(c!==0){let P=Pe.fromAxisAngle(G,c,C7);v=q.fromQuaternion(P,v),P=Pe.fromAxisAngle(G,-c,C7),I=q.fromQuaternion(P,I)}else v=q.clone(q.IDENTITY,v),I=q.clone(q.IDENTITY,I);let X=M.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,uye),N=M.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,mye),g=e.length,C=n?g:0,R=C/3*2;for(let P=0;P<g;P+=3){let Y=P+1,O=P+2,k=m.fromArray(e,P,MV);if(i.st){let D=q.multiplyByVector(v,k,A7),w=V.project(a.cartesianToCartographic(D,hO),Z7);m.subtract(w,E,w),ga.x=(w.x+r)/(2*r),ga.y=(w.y+s)/(2*s),X.x=Math.min(ga.x,X.x),X.y=Math.min(ga.y,X.y),N.x=Math.max(ga.x,N.x),N.y=Math.max(ga.y,N.y),n&&(h[_+R]=ga.x,h[_+1+R]=ga.y),h[_++]=ga.x,h[_++]=ga.y}(i.normal||i.tangent||i.bitangent||u)&&(S=a.geodeticSurfaceNormal(k,S),u&&(y[P+C]=-S.x,y[Y+C]=-S.y,y[O+C]=-S.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(A=m.normalize(m.cross(m.UNIT_Z,S,A),A),q.multiplyByVector(I,A,A)),i.normal&&(p[P]=S.x,p[Y]=S.y,p[O]=S.z,n&&(p[P+C]=-S.x,p[Y+C]=-S.y,p[O+C]=-S.z)),i.tangent&&(b[P]=A.x,b[Y]=A.y,b[O]=A.z,n&&(b[P+C]=-A.x,b[Y+C]=-A.y,b[O+C]=-A.z)),i.bitangent&&(Z=m.normalize(m.cross(S,A,Z),Z),f[P]=Z.x,f[Y]=Z.y,f[O]=Z.z,n&&(f[P+C]=Z.x,f[Y+C]=Z.y,f[O+C]=Z.z))))}if(i.st){g=h.length;for(let P=0;P<g;P+=2)h[P]=(h[P]-X.x)/(N.x-X.x),h[P+1]=(h[P+1]-X.y)/(N.y-X.y)}let L=new yn;if(i.position){let P=Nd.raisePositionsToHeight(e,t,n);L.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:P})}if(i.st&&(L.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:h})),i.normal&&(L.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:p})),i.tangent&&(L.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:b})),i.bitangent&&(L.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:f})),u&&(L.extrudeDirection=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:y})),n&&l(t.offsetAttribute)){let P=new Uint8Array(d);if(t.offsetAttribute===mn.TOP)P=P.fill(1,0,d/2);else{let Y=t.offsetAttribute===mn.NONE?0:1;P=P.fill(Y)}L.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:P})}return L}function fye(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 VS=new m;function Tct(e){let t=e.center;VS=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,VS),e.height,VS),VS=m.add(t,VS,VS);let n=new de(VS,e.semiMajorAxis),i=Nd.computeEllipsePositions(e,!0,!1),o=i.positions,r=i.numPts,s=hye(o,e,!1),a=fye(r);return a=Ne.createTypedArray(o.length/3,a),{boundingSphere:n,attributes:s,indices:a}}function _ct(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,b=n.normal?new Float32Array(u*3):void 0,f=n.tangent?new Float32Array(u*3):void 0,y=n.bitangent?new Float32Array(u*3):void 0,_=t.shadowVolume,S=_?new Float32Array(u*3):void 0,A=0,Z=aye,V=cye,E=lye,G=new Ki(s),v=G.project(s.cartesianToCartographic(i,hO),dye),I=s.scaleToGeodeticSurface(i,MV);s.geodeticSurfaceNormal(I,I);let X=Pe.fromAxisAngle(I,d,C7),N=q.fromQuaternion(X,sye),g=M.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,uye),C=M.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,mye),R=e.length,L=R/3*2;for(let Y=0;Y<R;Y+=3){let O=Y+1,k=Y+2,D=m.fromArray(e,Y,MV),w;if(n.st){let J=q.multiplyByVector(N,D,A7),ee=G.project(s.cartesianToCartographic(J,hO),Z7);m.subtract(ee,v,ee),ga.x=(ee.x+o)/(2*o),ga.y=(ee.y+r)/(2*r),g.x=Math.min(ga.x,g.x),g.y=Math.min(ga.y,g.y),C.x=Math.max(ga.x,C.x),C.y=Math.max(ga.y,C.y),p[A+L]=ga.x,p[A+1+L]=ga.y,p[A++]=ga.x,p[A++]=ga.y}D=s.scaleToGeodeticSurface(D,D),w=m.clone(D,A7),Z=s.geodeticSurfaceNormal(D,Z),_&&(S[Y+R]=-Z.x,S[O+R]=-Z.y,S[k+R]=-Z.z);let z=m.multiplyByScalar(Z,a,rye);if(D=m.add(D,z,D),z=m.multiplyByScalar(Z,c,z),w=m.add(w,z,w),n.position&&(h[Y+R]=w.x,h[O+R]=w.y,h[k+R]=w.z,h[Y]=D.x,h[O]=D.y,h[k]=D.z),n.normal||n.tangent||n.bitangent){E=m.clone(Z,E);let J=m.fromArray(e,(Y+3)%R,rye);m.subtract(J,D,J);let ee=m.subtract(w,D,Z7);Z=m.normalize(m.cross(ee,J,Z),Z),n.normal&&(b[Y]=Z.x,b[O]=Z.y,b[k]=Z.z,b[Y+R]=Z.x,b[O+R]=Z.y,b[k+R]=Z.z),n.tangent&&(V=m.normalize(m.cross(E,Z,V),V),f[Y]=V.x,f[O]=V.y,f[k]=V.z,f[Y+R]=V.x,f[Y+1+R]=V.y,f[Y+2+R]=V.z),n.bitangent&&(y[Y]=E.x,y[O]=E.y,y[k]=E.z,y[Y+R]=E.x,y[O+R]=E.y,y[k+R]=E.z)}}if(n.st){R=p.length;for(let Y=0;Y<R;Y+=2)p[Y]=(p[Y]-g.x)/(C.x-g.x),p[Y+1]=(p[Y+1]-g.y)/(C.y-g.y)}let P=new yn;if(n.position&&(P.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:h})),n.st&&(P.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:p})),n.normal&&(P.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:b})),n.tangent&&(P.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:f})),n.bitangent&&(P.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:y})),_&&(P.extrudeDirection=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:S})),l(t.offsetAttribute)){let Y=new Uint8Array(u);if(t.offsetAttribute===mn.TOP)Y=Y.fill(1,0,u/2);else{let O=t.offsetAttribute===mn.NONE?0:1;Y=Y.fill(O)}P.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:Y})}return P}function Sct(e){let t=e.length/3,n=Ne.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 uO=new de,mO=new de;function Act(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,MV),e.height,MV);uO.center=m.add(t,o,uO.center),uO.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),mO.center=m.add(t,o,mO.center),mO.radius=i;let r=Nd.computeEllipsePositions(e,!0,!0),s=r.positions,a=r.numPts,c=r.outerPositions,d=de.union(uO,mO),u=hye(s,e,!0),h=fye(a),p=h.length;h.length=p*2;let b=s.length/3;for(let V=0;V<p;V+=3)h[V+p]=h[V+2]+b,h[V+1+p]=h[V+1]+b,h[V+2+p]=h[V]+b;let f=Ne.createTypedArray(b*2/3,h),y=new gt({attributes:u,indices:f,primitiveType:ve.TRIANGLES}),_=_ct(c,e);h=Sct(c);let S=Ne.createTypedArray(c.length*2/3,h),A=new gt({attributes:_,indices:S,primitiveType:ve.TRIANGLES}),Z=Kn.combineInstances([new Ft({geometry:y}),new Ft({geometry:A})]);return{boundingSphere:d,attributes:Z[0].attributes,indices:Z[0].indices}}function pye(e,t,n,i,o,r,s){let c=Nd.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=ce.fromCartesianArray(u,r,s);return h.width>W.PI&&(h.north=h.north>0?W.PI_OVER_TWO-W.EPSILON7:h.north,h.south=h.south<0?W.EPSILON7-W.PI_OVER_TWO:h.south,h.east=W.PI,h.west=-W.PI),h}function Yp(e){e=e??B.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??W.RADIANS_PER_DEGREE,s=e.vertexFormat??Xe.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=Xe.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}Yp.packedLength=m.packedLength+ie.packedLength+Xe.packedLength+9;Yp.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.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 bye=new m,gye=new ie,yye=new Xe,Np={center:bye,ellipsoid:gye,vertexFormat:yye,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};Yp.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,bye);t+=m.packedLength;let o=ie.unpack(e,t,gye);t+=ie.packedLength;let r=Xe.unpack(e,t,yye);t+=Xe.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++],b=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=Xe.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=b,n._offsetAttribute=f===-1?void 0:f,n):(Np.height=u,Np.extrudedHeight=p,Np.granularity=h,Np.stRotation=d,Np.rotation=c,Np.semiMajorAxis=s,Np.semiMinorAxis=a,Np.shadowVolume=b,Np.offsetAttribute=f===-1?void 0:f,new Yp(Np))};Yp.computeRectangle=function(e,t){e=e??B.EMPTY_OBJECT;let n=e.center,i=e.ellipsoid??ie.default,o=e.semiMajorAxis,r=e.semiMinorAxis,s=e.granularity??W.RADIANS_PER_DEGREE,a=e.rotation??0;return pye(n,o,r,a,s,i,t)};Yp.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!W.equalsEpsilon(t,n,0,W.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=Act(o);else if(r=Tct(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===mn.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new gt({attributes:r.attributes,indices:r.indices,primitiveType:ve.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};Yp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Yp({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:o,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};function Zct(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Nd.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 gt._textureCoordinateRotationPoints(r,t,s,a)}Object.defineProperties(Yp.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=pye(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=Zct(this)),this._textureCoordinateRotationPoints}}});var nd=Yp;var RZi=x(T(),1);var xye=new m,RS=new m;function Cct(e){let t=e.center;RS=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,RS),e.height,RS),RS=m.add(t,RS,RS);let n=new de(RS,e.semiMajorAxis),i=Nd.computeEllipsePositions(e,!1,!0).outerPositions,o=new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:Nd.raisePositionsToHeight(i,e,!1)})}),r=i.length/3,s=Ne.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 fO=new de,pO=new de;function Vct(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,xye),e.height,xye);fO.center=m.add(t,o,fO.center),fO.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),pO.center=m.add(t,o,pO.center),pO.radius=i;let r=Nd.computeEllipsePositions(e,!1,!0).outerPositions,s=new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:Nd.raisePositionsToHeight(r,e,!0)})});r=s.position.values;let a=de.union(fO,pO),c=r.length/3;if(l(e.offsetAttribute)){let f=new Uint8Array(c);if(e.offsetAttribute===mn.TOP)f=f.fill(1,0,c/2);else{let y=e.offsetAttribute===mn.NONE?0:1;f=f.fill(y)}s.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}let d=e.numberOfVerticalLines??16;d=W.clamp(d,0,c/2);let u=Ne.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 b;if(d>0){let f=Math.min(d,c);b=Math.round(c/f);let y=Math.min(b*d,c);for(p=0;p<y;p+=b)u[h++]=p,u[h++]=p+c}return{boundingSphere:a,attributes:s,indices:u}}function kV(e){e=e??B.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??W.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"}kV.packedLength=m.packedLength+ie.packedLength+8;kV.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 Tye=new m,_ye=new ie,ug={center:Tye,ellipsoid:_ye,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};kV.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Tye);t+=m.packedLength;let o=ie.unpack(e,t,_ye);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):(ug.height=c,ug.extrudedHeight=u,ug.granularity=d,ug.rotation=a,ug.semiMajorAxis=r,ug.semiMinorAxis=s,ug.numberOfVerticalLines=h,ug.offsetAttribute=p===-1?void 0:p,new kV(ug))};kV.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!W.equalsEpsilon(t,n,0,W.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=Vct(o);else if(r=Cct(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===mn.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new gt({attributes:r.attributes,indices:r.indices,primitiveType:ve.LINES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};var vu=kV;var Sye=new U,Aye=m.ZERO,Zye=new m,Cye=new ce;function Rct(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 Af(e,t){ri.call(this,{entity:e,scene:t,geometryOptions:new Rct(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}l(Object.create)&&(Af.prototype=Object.create(ri.prototype),Af.prototype.constructor=Af);Af.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Gn(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,Sye)),l(o)||(o=U.WHITE),i.color=Qt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Aye,Zye))),new Ft({id:t,geometry:new nd(this._options),attributes:i})};Af.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Sye),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Aye,Zye))),new Ft({id:t,geometry:new vu(this._options),attributes:r})};Af.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Af.prototype._isHidden=function(e,t){let n=e.position;return!l(n)||!l(t.semiMajorAxis)||!l(t.semiMinorAxis)||Ci.prototype._isHidden.call(this,e,t)};Af.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!j.isConstant(t.rotation)||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.stRotation)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.numberOfVerticalLines)||!j.isConstant(t.zIndex)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};Af.prototype._setStaticOptions=function(e,t){let n=j.getValueOrUndefined(t.height,Je.MINIMUM_VALUE),i=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),o=j.getValueOrUndefined(t.extrudedHeight,Je.MINIMUM_VALUE),r=j.getValueOrDefault(t.extrudedHeightReference,Je.MINIMUM_VALUE,tt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Kt?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(Je.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(Je.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(Je.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=j.getValueOrUndefined(t.rotation,Je.MINIMUM_VALUE),s.granularity=j.getValueOrUndefined(t.granularity,Je.MINIMUM_VALUE),s.stRotation=j.getValueOrUndefined(t.stRotation,Je.MINIMUM_VALUE),s.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,Je.MINIMUM_VALUE),s.offsetAttribute=ri.computeGeometryOffsetAttribute(n,i,o,r),s.height=ri.getGeometryHeight(n,i),o=ri.getGeometryExtrudedHeight(o,r),o===ri.CLAMP_TO_GROUND&&(o=Wi.getMinimumMaximumHeights(nd.computeRectangle(s,Cye)).minimumTerrainHeight),s.extrudedHeight=o};Af.DynamicGeometryUpdater=UV;function UV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(UV.prototype=Object.create(Zi.prototype),UV.prototype.constructor=UV);UV.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.center)||!l(i.semiMajorAxis)||!l(i.semiMinorAxis)||Zi.prototype._isHidden.call(this,e,t,n)};UV.prototype._setOptions=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,tt.NONE),s=j.getValueOrUndefined(t.extrudedHeight,n),a=j.getValueOrDefault(t.extrudedHeightReference,n,tt.NONE);l(s)&&!l(o)&&(o=0),i.center=j.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=j.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=j.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=j.getValueOrUndefined(t.rotation,n),i.granularity=j.getValueOrUndefined(t.granularity,n),i.stRotation=j.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=ri.computeGeometryOffsetAttribute(o,r,s,a),i.height=ri.getGeometryHeight(o,r),s=ri.getGeometryExtrudedHeight(s,a),s===ri.CLAMP_TO_GROUND&&(s=Wi.getMinimumMaximumHeights(nd.computeRectangle(i,Cye)).minimumTerrainHeight),i.extrudedHeight=s};var UX=Af;var MCi=x(T(),1);var hCi=x(T(),1);var Ect=new m,Gct=new m,Lct=new m,Wct=new m,vct=new m,Fct=new m(1,1,1),Vye=Math.cos,Rye=Math.sin;function mg(e){e=e??B.EMPTY_OBJECT;let t=e.radii??Fct,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??W.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??W.PI,a=Math.round(e.stackPartitions??64),c=Math.round(e.slicePartitions??64),d=e.vertexFormat??Xe.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=Xe.clone(d),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}mg.packedLength=2*m.packedLength+Xe.packedLength+7;mg.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.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 Eye=new m,Gye=new m,Lye=new Xe,gx={radii:Eye,innerRadii:Gye,vertexFormat:Lye,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};mg.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Eye);t+=m.packedLength;let o=m.unpack(e,t,Gye);t+=m.packedLength;let r=Xe.unpack(e,t,Lye);t+=Xe.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=Xe.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):(gx.minimumClock=s,gx.maximumClock=a,gx.minimumCone=c,gx.maximumCone=d,gx.stackPartitions=u,gx.slicePartitions=h,gx.offsetAttribute=p===-1?void 0:p,new mg(gx))};mg.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)/W.TWO_PI),d=Math.round(d*Math.abs(s-r)/W.PI),c<2&&(c=2),d<2&&(d=2);let u,h,p=0,b=[r],f=[i];for(u=0;u<d;u++)b.push(r+u*(s-r)/(d-1));for(b.push(s),h=0;h<c;h++)f.push(i+h*(o-i)/(c-1));f.push(o);let y=b.length,_=f.length,S=0,A=1,Z=n.x!==t.x||n.y!==t.y||n.z!==t.z,V=!1,E=!1,G=!1;Z&&(A=2,r>0&&(V=!0,S+=c-1),s<Math.PI&&(E=!0,S+=c-1),(o-i)%W.TWO_PI?(G=!0,S+=(d-1)*2+1):S+=1);let v=_*y*A,I=new Float64Array(v*3),X=new Array(v).fill(!1),N=new Array(v).fill(!1),g=c*d*A,C=6*(g+S+1-(c+d)*A),R=Ne.createTypedArray(g,C),L=a.normal?new Float32Array(v*3):void 0,P=a.tangent?new Float32Array(v*3):void 0,Y=a.bitangent?new Float32Array(v*3):void 0,O=a.st?new Float32Array(v*2):void 0,k=new Array(y),D=new Array(y);for(u=0;u<y;u++)k[u]=Rye(b[u]),D[u]=Vye(b[u]);let w=new Array(_),z=new Array(_);for(h=0;h<_;h++)z[h]=Vye(f[h]),w[h]=Rye(f[h]);for(u=0;u<y;u++)for(h=0;h<_;h++)I[p++]=t.x*k[u]*z[h],I[p++]=t.y*k[u]*w[h],I[p++]=t.z*D[u];let J=v/2;if(Z)for(u=0;u<y;u++)for(h=0;h<_;h++)I[p++]=n.x*k[u]*z[h],I[p++]=n.y*k[u]*w[h],I[p++]=n.z*D[u],X[J]=!0,u>0&&u!==y-1&&h!==0&&h!==_-1&&(N[J]=!0),J++;p=0;let ee,H;for(u=1;u<y-2;u++)for(ee=u*_,H=(u+1)*_,h=1;h<_-2;h++)R[p++]=H+h,R[p++]=H+h+1,R[p++]=ee+h+1,R[p++]=H+h,R[p++]=ee+h+1,R[p++]=ee+h;if(Z){let nt=y*_;for(u=1;u<y-2;u++)for(ee=nt+u*_,H=nt+(u+1)*_,h=1;h<_-2;h++)R[p++]=H+h,R[p++]=ee+h,R[p++]=ee+h+1,R[p++]=H+h,R[p++]=ee+h+1,R[p++]=H+h+1}let te,$;if(Z){if(V)for($=y*_,u=1;u<_-2;u++)R[p++]=u,R[p++]=u+1,R[p++]=$+u+1,R[p++]=u,R[p++]=$+u+1,R[p++]=$+u;if(E)for(te=y*_-_,$=y*_*A-_,u=1;u<_-2;u++)R[p++]=te+u+1,R[p++]=te+u,R[p++]=$+u,R[p++]=te+u+1,R[p++]=$+u,R[p++]=$+u+1}if(G){for(u=1;u<y-2;u++)$=_*y+_*u,te=_*u,R[p++]=$,R[p++]=te+_,R[p++]=te,R[p++]=$,R[p++]=$+_,R[p++]=te+_;for(u=1;u<y-2;u++)$=_*y+_*(u+1)-1,te=_*(u+1)-1,R[p++]=te+_,R[p++]=$,R[p++]=te,R[p++]=te+_,R[p++]=$+_,R[p++]=$}let pe=new yn;a.position&&(pe.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:I}));let xe=0,le=0,Te=0,Se=0,Ee=v/2,Ve,we=ie.fromCartesian3(t),ke=ie.fromCartesian3(n);if(a.st||a.normal||a.tangent||a.bitangent){for(u=0;u<v;u++){Ve=X[u]?ke:we;let nt=m.fromArray(I,u*3,Ect),bt=Ve.geodeticSurfaceNormal(nt,Gct);if(N[u]&&m.negate(bt,bt),a.st){let Rt=M.negate(bt,vct);O[xe++]=Math.atan2(Rt.y,Rt.x)/W.TWO_PI+.5,O[xe++]=Math.asin(bt.z)/Math.PI+.5}if(a.normal&&(L[le++]=bt.x,L[le++]=bt.y,L[le++]=bt.z),a.tangent||a.bitangent){let Rt=Lct,He=0,mt;if(X[u]&&(He=Ee),!V&&u>=He&&u<He+_*2?mt=m.UNIT_X:mt=m.UNIT_Z,m.cross(mt,bt,Rt),m.normalize(Rt,Rt),a.tangent&&(P[Te++]=Rt.x,P[Te++]=Rt.y,P[Te++]=Rt.z),a.bitangent){let it=m.cross(bt,Rt,Wct);m.normalize(it,it),Y[Se++]=it.x,Y[Se++]=it.y,Y[Se++]=it.z}}}a.st&&(pe.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:O})),a.normal&&(pe.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:L})),a.tangent&&(pe.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:P})),a.bitangent&&(pe.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:Y}))}if(l(e._offsetAttribute)){let nt=I.length,bt=e._offsetAttribute===mn.NONE?0:1,Rt=new Uint8Array(nt/3).fill(bt);pe.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:Rt})}return new gt({attributes:pe,indices:R,primitiveType:ve.TRIANGLES,boundingSphere:de.fromEllipsoid(we),offsetAttribute:e._offsetAttribute})};var V7;mg.getUnitEllipsoid=function(){return l(V7)||(V7=mg.createGeometry(new mg({radii:new m(1,1,1),vertexFormat:Xe.POSITION_ONLY}))),V7};var Ma=mg;var Ict=new Kt(U.WHITE),R7=m.ZERO,E7=new m,Pct=new m,Xct=new m,G7=new U,Nct=new m(1,1,1);function Yct(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 Fu(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Yct(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}l(Object.create)&&(Fu.prototype=Object.create(Ci.prototype),Fu.prototype.constructor=Fu);Object.defineProperties(Fu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Fu.prototype.createFillGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r,s=new Gn(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=Qt.fromColor(u),d.color=r}return l(this._options.offsetAttribute)&&(d.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,R7,E7))),new Ft({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})};Fu.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,G7),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new Gn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(r),distanceDisplayCondition:ei.fromDistanceDisplayCondition(s),offset:void 0};return l(this._options.offsetAttribute)&&(a.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,R7,E7))),new Ft({id:i,geometry:new Zu(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:a})};Fu.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Fu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.radii)||Ci.prototype._isHidden.call(this,e,t)};Fu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.radii.isConstant||!j.isConstant(t.innerRadii)||!j.isConstant(t.stackPartitions)||!j.isConstant(t.slicePartitions)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.minimumClock)||!j.isConstant(t.maximumClock)||!j.isConstant(t.minimumCone)||!j.isConstant(t.maximumCone)||!j.isConstant(t.subdivisions)};Fu.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Kt?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(Je.MINIMUM_VALUE,i.radii),i.innerRadii=j.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=j.getValueOrUndefined(t.minimumClock,Je.MINIMUM_VALUE),i.maximumClock=j.getValueOrUndefined(t.maximumClock,Je.MINIMUM_VALUE),i.minimumCone=j.getValueOrUndefined(t.minimumCone,Je.MINIMUM_VALUE),i.maximumCone=j.getValueOrUndefined(t.maximumCone,Je.MINIMUM_VALUE),i.stackPartitions=j.getValueOrUndefined(t.stackPartitions,Je.MINIMUM_VALUE),i.slicePartitions=j.getValueOrUndefined(t.slicePartitions,Je.MINIMUM_VALUE),i.subdivisions=j.getValueOrUndefined(t.subdivisions,Je.MINIMUM_VALUE),i.offsetAttribute=n!==tt.NONE?mn.ALL:void 0};Fu.prototype._onEntityPropertyChanged=q0;Fu.DynamicGeometryUpdater=DX;function DX(e,t,n){Zi.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)&&(DX.prototype=Object.create(Zi.prototype),DX.prototype.constructor=DX);DX.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!j.getValueOrDefault(n.show,e,!0)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=j.getValueOrUndefined(n.radii,e,Pct),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=j.getValueOrDefault(n.fill,e,!0),s=j.getValueOrDefault(n.outline,e,!1),a=j.getValueOrClonedDefault(n.outlineColor,e,U.BLACK,G7),c=Ar.getValue(e,n.material??Ict,this._material),d=j.getValueOrUndefined(n.innerRadii,e,Xct),u=j.getValueOrUndefined(n.minimumClock,e),h=j.getValueOrUndefined(n.maximumClock,e),p=j.getValueOrUndefined(n.minimumCone,e),b=j.getValueOrUndefined(n.maximumCone,e),f=j.getValueOrUndefined(n.stackPartitions,e),y=j.getValueOrUndefined(n.slicePartitions,e),_=j.getValueOrUndefined(n.subdivisions,e),S=j.getValueOrDefault(n.outlineWidth,e,1),A=j.getValueOrDefault(n.heightReference,e,tt.NONE),Z=A!==tt.NONE?mn.ALL:void 0,V=this._scene.mode,E=V===re.SCENE3D&&A===tt.NONE,G=this._options,v=this._geometryUpdater.shadowsProperty.getValue(e),X=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),N=j.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,R7,E7);if(!E||this._lastSceneMode!==V||!l(this._primitive)||G.stackPartitions!==f||G.slicePartitions!==y||l(d)&&!m.equals(G.innerRadii!==d)||G.minimumClock!==u||G.maximumClock!==h||G.minimumCone!==p||G.maximumCone!==b||G.subdivisions!==_||this._lastOutlineWidth!==S||G.offsetAttribute!==Z){let C=this._primitives;C.removeAndDestroy(this._primitive),C.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=V,this._lastOutlineWidth=S,G.stackPartitions=f,G.slicePartitions=y,G.subdivisions=_,G.offsetAttribute=Z,G.radii=m.clone(E?Nct:i,G.radii),l(d)?E?G.innerRadii=m.fromElements(d.x/i.x,d.y/i.y,d.z/i.z,G.innerRadii):G.innerRadii=m.clone(d,G.innerRadii):G.innerRadii=void 0,G.minimumClock=u,G.maximumClock=h,G.minimumCone=p,G.maximumCone=b;let R=new xo({material:c,translucent:c.isTranslucent(),closed:!0});G.vertexFormat=R.vertexFormat;let L=this._geometryUpdater.createFillGeometryInstance(e,E,this._modelMatrix);this._primitive=C.add(new Pn({geometryInstances:L,appearance:R,asynchronous:!1,shadows:v}));let P=this._geometryUpdater.createOutlineGeometryInstance(e,E,this._modelMatrix);this._outlinePrimitive=C.add(new Pn({geometryInstances:P,appearance:new bn({flat:!0,translucent:P.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(S)}}),asynchronous:!1,shadows:v})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=U.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=X,this._lastOffset=m.clone(N,this._lastOffset)}else if(this._primitive.ready){let C=this._primitive,R=this._outlinePrimitive;C.show=!0,R.show=!0,C.appearance.material=c;let L=this._attributes;l(L)||(L=C.getGeometryInstanceAttributes(t),this._attributes=L),r!==this._lastShow&&(L.show=Gn.toValue(r,L.show),this._lastShow=r);let P=this._outlineAttributes;l(P)||(P=R.getGeometryInstanceAttributes(t),this._outlineAttributes=P),s!==this._lastOutlineShow&&(P.show=Gn.toValue(s,P.show),this._lastOutlineShow=s),U.equals(a,this._lastOutlineColor)||(P.color=Qt.toValue(a,P.color),U.clone(a,this._lastOutlineColor)),kt.equals(X,this._lastDistanceDisplayCondition)||(L.distanceDisplayCondition=ei.toValue(X,L.distanceDisplayCondition),P.distanceDisplayCondition=ei.toValue(X,P.distanceDisplayCondition),kt.clone(X,this._lastDistanceDisplayCondition)),m.equals(N,this._lastOffset)||(L.offset=yo.toValue(N,L.offset),P.offset=yo.toValue(N,L.offset),m.clone(N,this._lastOffset))}E&&(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 OX=Fu;var GVi=x(T(),1);var qCi=x(T(),1);function DV(e){e=e??B.EMPTY_OBJECT;let t=e.vertexFormat??Xe.DEFAULT;this._vertexFormat=t,this._workerName="createPlaneGeometry"}DV.packedLength=Xe.packedLength;DV.pack=function(e,t,n){return n=n??0,Xe.pack(e._vertexFormat,t,n),t};var Wye=new Xe,wct={vertexFormat:Wye};DV.unpack=function(e,t,n){t=t??0;let i=Xe.unpack(e,t,Wye);return l(n)?(n._vertexFormat=Xe.clone(i,n._vertexFormat),n):new DV(wct)};var bO=new m(-.5,-.5,0),gO=new m(.5,.5,0);DV.createGeometry=function(e){let t=e._vertexFormat,n=new yn,i,o;if(t.position){if(o=new Float64Array(12),o[0]=bO.x,o[1]=bO.y,o[2]=0,o[3]=gO.x,o[4]=bO.y,o[5]=0,o[6]=gO.x,o[7]=gO.y,o[8]=0,o[9]=bO.x,o[10]=gO.y,o[11]=0,n.position=new Ie({componentDatatype:K.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 Ie({componentDatatype:K.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 Ie({componentDatatype:K.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 Ie({componentDatatype:K.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 Ie({componentDatatype:K.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 gt({attributes:n,indices:i,primitiveType:ve.TRIANGLES,boundingSphere:new de(m.ZERO,Math.sqrt(2))})};var BX=DV;var cVi=x(T(),1);function OV(){this._workerName="createPlaneOutlineGeometry"}OV.packedLength=0;OV.pack=function(e,t){return t};OV.unpack=function(e,t,n){return l(n)?n:new OV};var yx=new m(-.5,-.5,0),yO=new m(.5,.5,0);OV.createGeometry=function(){let e=new yn,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=yx.x,n[1]=yx.y,n[2]=yx.z,n[3]=yO.x,n[4]=yx.y,n[5]=yx.z,n[6]=yO.x,n[7]=yO.y,n[8]=yx.z,n[9]=yx.x,n[10]=yO.y,n[11]=yx.z,e.position=new Ie({componentDatatype:K.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 gt({attributes:e,indices:t,primitiveType:ve.LINES,boundingSphere:new de(m.ZERO,Math.sqrt(2))})};var zX=OV;var Mct=new m,vye=new U;function kct(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function qm(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new kct(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}l(Object.create)&&(qm.prototype=Object.create(Ci.prototype),qm.prototype.constructor=qm);qm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Gn(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 b;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(b=this._materialProperty.color.getValue(e,vye)),l(b)||(b=U.WHITE),o=Qt.fromColor(b),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=j.getValueOrDefault(c.plane,e,d.plane),p=j.getValueOrUndefined(c.dimensions,e,d.dimensions);return d.plane=h,d.dimensions=p,u=L7(h,p,u,u),new Ft({id:t,geometry:new BX(this._options),modelMatrix:u,attributes:i})};qm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,vye),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=j.getValueOrDefault(r.plane,e,s.plane),d=j.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=d,a=L7(c,d,a,a),new Ft({id:t,geometry:new zX,modelMatrix:a,attributes:{show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};qm.prototype._isHidden=function(e,t){return!l(t.plane)||!l(t.dimensions)||!l(e.position)||Ci.prototype._isHidden.call(this,e,t)};qm.prototype._getIsClosed=function(e){return!1};qm.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!j.isConstant(t.outlineWidth)};qm.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=this._options;i.vertexFormat=n?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(Je.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(Je.MINIMUM_VALUE,i.dimensions)};qm.DynamicGeometryUpdater=BV;function BV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(BV.prototype=Object.create(Zi.prototype),BV.prototype.constructor=BV);BV.prototype._isHidden=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(e.position,n,Mct);return!l(o)||!l(i.plane)||!l(i.dimensions)||Zi.prototype._isHidden.call(this,e,t,n)};BV.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=j.getValueOrDefault(t.plane,n,i.plane),i.dimensions=j.getValueOrUndefined(t.dimensions,n,i.dimensions)};var Uct=new m,Dct=new m,Oct=new m,Bct=new m,zct=new q,Hct=new q,Kct=new F;function L7(e,t,n,i){let o=e.normal,r=e.distance,s=m.multiplyByScalar(o,-r,Oct),a=m.clone(m.UNIT_Z,Dct);W.equalsEpsilon(Math.abs(m.dot(a,o)),1,W.EPSILON8)&&(a=m.clone(m.UNIT_Y,a));let c=m.cross(a,o,Uct);a=m.cross(o,c,a),m.normalize(c,c),m.normalize(a,a);let d=zct;q.setColumn(d,0,c,d),q.setColumn(d,1,a,d),q.setColumn(d,2,o,d);let u=m.fromElements(t.x,t.y,1,Bct),h=q.multiplyByScale(d,u,Hct),p=F.fromRotationTranslation(h,s,Kct);return F.multiplyTransformation(n,p,i)}qm.createPrimitiveMatrix=L7;var HX=qm;var Q1i=x(T(),1);var e1i=x(T(),1);var Jct=new m,jct=new Qe,Qct=new M,qct=new M,$ct=new m,elt=new m,tlt=new m,KX=new m,nlt=new m,ilt=new m,Fye=new Pe,olt=new q,rlt=new q,slt=new m;function alt(e,t,n,i,o,r,s,a,c){let d=e.positions,u=Ri.triangulate(e.positions2D,e.holes);u.length<3&&(u=[0,1,2]);let h=Ne.createTypedArray(d.length,u.length);h.set(u);let p=olt;if(i!==0){let g=Pe.fromAxisAngle(s,i,Fye);if(p=q.fromQuaternion(g,p),t.tangent||t.bitangent){g=Pe.fromAxisAngle(s,-i,Fye);let C=q.fromQuaternion(g,rlt);a=m.normalize(q.multiplyByVector(C,a,a),a),t.bitangent&&(c=m.normalize(m.cross(s,a,c),c))}}else p=q.clone(q.IDENTITY,p);let b=qct;t.st&&(b.x=n.x,b.y=n.y);let f=d.length,y=f*3,_=new Float64Array(y),S=t.normal?new Float32Array(y):void 0,A=t.tangent?new Float32Array(y):void 0,Z=t.bitangent?new Float32Array(y):void 0,V=t.st?new Float32Array(f*2):void 0,E=0,G=0,v=0,I=0,X=0;for(let g=0;g<f;g++){let C=d[g];if(_[E++]=C.x,_[E++]=C.y,_[E++]=C.z,t.st)if(l(o)&&o.positions.length===f)V[X++]=o.positions[g].x,V[X++]=o.positions[g].y;else{let R=q.multiplyByVector(p,C,Jct),L=r(R,Qct);M.subtract(L,b,L);let P=W.clamp(L.x/n.width,0,1),Y=W.clamp(L.y/n.height,0,1);V[X++]=P,V[X++]=Y}t.normal&&(S[G++]=s.x,S[G++]=s.y,S[G++]=s.z),t.tangent&&(A[I++]=a.x,A[I++]=a.y,A[I++]=a.z),t.bitangent&&(Z[v++]=c.x,Z[v++]=c.y,Z[v++]=c.z)}let N=new yn;return t.position&&(N.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:_})),t.normal&&(N.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:S})),t.tangent&&(N.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:A})),t.bitangent&&(N.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:Z})),t.st&&(N.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:V})),new gt({attributes:N,indices:h,primitiveType:ve.TRIANGLES})}function ES(e){e=e??B.EMPTY_OBJECT;let t=e.polygonHierarchy,n=e.textureCoordinates,i=e.vertexFormat??Xe.DEFAULT;this._vertexFormat=Xe.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)+Xe.packedLength+ie.packedLength+(l(n)?ii.computeHierarchyPackedLength(n,M):1)+2}ES.fromPositions=function(e){e=e??B.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,textureCoordinates:e.textureCoordinates};return new ES(t)};ES.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.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 clt=ie.clone(ie.UNIT_SPHERE),llt=new Xe,dlt={polygonHierarchy:{}};ES.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,clt);t+=ie.packedLength;let r=Xe.unpack(e,t,llt);t+=Xe.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 ES(dlt)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._stRotation=s,n._textureCoordinates=a,n.packedLength=c,n};ES.createGeometry=function(e){let t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,o=e._textureCoordinates,r=l(o),s=n.positions;if(s=Oo(s,m.equalsEpsilon,!0),s.length<3)return;let a=$ct,c=elt,d=tlt,u=nlt,h=ilt;if(!Bb.computeProjectTo2DArguments(s,KX,u,h))return;if(a=m.cross(u,h,a),a=m.normalize(a,a),!m.equalsEpsilon(KX,m.ZERO,W.EPSILON6)){let X=e._ellipsoid.geodeticSurfaceNormal(KX,slt);m.dot(a,X)<0&&(a=m.negate(a,a),u=m.negate(u,u))}let b=Bb.createProjectPointsTo2DFunction(KX,u,h),f=Bb.createProjectPointTo2DFunction(KX,u,h);t.tangent&&(c=m.clone(u,c)),t.bitangent&&(d=m.clone(h,d));let y=ii.polygonsFromHierarchy(n,r,b,!1),_=y.hierarchy,S=y.polygons,A=function(X){return X},Z=r?ii.polygonsFromHierarchy(o,!0,A,!1).polygons:void 0;if(_.length===0)return;s=_[0].outerRing;let V=de.fromPoints(s),E=ii.computeBoundingRectangle(a,f,s,i,jct),G=[];for(let X=0;X<S.length;X++){let N=new Ft({geometry:alt(S[X],t,E,i,r?Z[X]:void 0,f,a,c,d)});G.push(N)}let v=Kn.combineInstances(G)[0];v.attributes.position.values=new Float64Array(v.attributes.position.values),v.indices=Ne.createTypedArray(v.attributes.position.values.length/3,v.indices);let I=v.attributes;return t.position||delete I.position,new gt({attributes:I,indices:v.indices,primitiveType:v.primitiveType,boundingSphere:V})};var JX=ES;var S1i=x(T(),1);var Iye=[],xO=[];function ult(e,t,n,i,o){let s=Ls.fromPoints(t,e).projectPointsOntoPlane(t,Iye);Ri.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],y=t[(d+1)%u];c[h++]=f.x,c[h++]=f.y,c[h++]=f.z,c[h++]=y.x,c[h++]=y.y,c[h++]=y.z}else{let f=0;if(o===cn.GEODESIC)for(d=0;d<u;d++)f+=ii.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===cn.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 y;o===cn.GEODESIC?y=ii.subdivideLine(t[d],t[(d+1)%u],n,xO):o===cn.RHUMB&&(y=ii.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,xO));let _=y.length;for(let S=0;S<_;++S)c[h++]=y[S]}}u=c.length/3;let p=u*2,b=Ne.createTypedArray(u,p);for(h=0,d=0;d<u-1;d++)b[h++]=d,b[h++]=d+1;return b[h++]=u-1,b[h++]=0,new Ft({geometry:new gt({attributes:new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:c})}),indices:b,primitiveType:ve.LINES})})}function mlt(e,t,n,i,o){let s=Ls.fromPoints(t,e).projectPointsOntoPlane(t,Iye);Ri.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 _=t[d],S=t[(d+1)%u];c[p++]=_.x,c[p++]=_.y,c[p++]=_.z,c[p++]=S.x,c[p++]=S.y,c[p++]=S.z}else{let _=0;if(o===cn.GEODESIC)for(d=0;d<u;d++)_+=ii.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===cn.RHUMB)for(d=0;d<u;d++)_+=ii.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(_*3*2),d=0;d<u;++d){h[d]=p/3;let S;o===cn.GEODESIC?S=ii.subdivideLine(t[d],t[(d+1)%u],n,xO):o===cn.RHUMB&&(S=ii.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,xO));let A=S.length;for(let Z=0;Z<A;++Z)c[p++]=S[Z]}}u=c.length/6;let b=h.length,f=(u*2+b)*2,y=Ne.createTypedArray(u+b,f);for(p=0,d=0;d<u;++d)y[p++]=d,y[p++]=(d+1)%u,y[p++]=d+u,y[p++]=(d+1)%u+u;for(d=0;d<b;d++){let _=h[d];y[p++]=_,y[p++]=_+u}return new Ft({geometry:new gt({attributes:new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:c})}),indices:y,primitiveType:ve.LINES})})}function GS(e){let t=e.polygonHierarchy,n=e.ellipsoid??ie.default,i=e.granularity??W.RADIANS_PER_DEGREE,o=e.perPositionHeight??!1,r=o&&l(e.extrudedHeight),s=e.arcType??cn.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}GS.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 hlt=ie.clone(ie.UNIT_SPHERE),flt={polygonHierarchy:{}};GS.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,hlt);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 GS(flt)),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};GS.fromPositions=function(e){e=e??B.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 GS(t)};GS.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=W.chordLength(n,t.maximumRadius),u=e._height,h=e._extrudedHeight,p=e._perPositionHeightExtrude||!W.equalsEpsilon(u,h,0,W.EPSILON2),b,f;if(p)for(f=0;f<s.length;f++){if(a=mlt(t,s[f],d,o,r),a.geometry=ii.scaleToGeodeticHeightExtruded(a.geometry,u,h,t,o),l(e._offsetAttribute)){let S=a.geometry.attributes.position.values.length/3,A=new Uint8Array(S);e._offsetAttribute===mn.TOP?A=A.fill(1,0,S/2):(b=e._offsetAttribute===mn.NONE?0:1,A=A.fill(b)),a.geometry.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:A})}c.push(a)}else for(f=0;f<s.length;f++){if(a=ult(t,s[f],d,o,r),a.geometry.attributes.position.values=Ri.scaleToGeodeticHeight(a.geometry.attributes.position.values,u,t,!o),l(e._offsetAttribute)){let S=a.geometry.attributes.position.values.length;b=e._offsetAttribute===mn.NONE?0:1;let A=new Uint8Array(S/3).fill(b);a.geometry.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:A})}c.push(a)}let y=Kn.combineInstances(c)[0],_=de.fromVertices(y.attributes.position.values);return new gt({attributes:y.attributes,indices:y.indices,primitiveType:y.primitiveType,boundingSphere:_,offsetAttribute:e._offsetAttribute})};var jX=GS;var Pye="Entity polygons cannot have both height and perPositionHeight. height will be ignored",Xye="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",Nye=new U,Yye=m.ZERO,wye=new m,Mye=new ce,plt=[],blt=new M;function glt(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 Iu(e,t){ri.call(this,{entity:e,scene:t,geometryOptions:new glt(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}l(Object.create)&&(Iu.prototype=Object.create(ri.prototype),Iu.prototype.constructor=Iu);Iu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o={show:new Gn(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,Nye)),l(s)||(s=U.WHITE),o.color=Qt.fromColor(s)}l(i.offsetAttribute)&&(o.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Yye,wye)));let r;return i.perPositionHeight&&!l(i.extrudedHeight)?r=new JX(i):r=new ub(i),new Ft({id:t,geometry:r,attributes:o})};Iu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Nye),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(o),distanceDisplayCondition:ei.fromDistanceDisplayCondition(r),offset:void 0};l(i.offsetAttribute)&&(s.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Yye,wye)));let a;return i.perPositionHeight&&!l(i.extrudedHeight)?a=new Om(i):a=new jX(i),new Ft({id:t,geometry:a,attributes:s})};Iu.prototype._computeCenter=function(e,t){let n=j.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=Ls.fromPoints(i,o),s=r.projectPointsOntoPlane(i,plt),a=s.length,c=0,d=a-1,u=new M;for(let p=0;p<a;d=p++){let b=s[p],f=s[d],y=b.x*f.y-f.x*b.y,_=M.add(b,f,blt);_=M.multiplyByScalar(_,y,_),u=M.add(u,_,u),c+=y}let h=1/(c*3);return u=M.multiplyByScalar(u,h,u),r.projectPointOntoEllipsoid(u,t)};Iu.prototype._isHidden=function(e,t){return!l(t.hierarchy)||Ci.prototype._isHidden.call(this,e,t)};Iu.prototype._isOnTerrain=function(e,t){let n=ri.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,o=l(i)&&(i.isConstant?i.getValue(Je.MINIMUM_VALUE):!0);return n&&!o};Iu.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.stRotation)||!j.isConstant(t.textureCoordinates)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.perPositionHeight)||!j.isConstant(t.closeTop)||!j.isConstant(t.closeBottom)||!j.isConstant(t.zIndex)||!j.isConstant(t.arcType)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};Iu.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=this._options;i.vertexFormat=n?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat;let o=t.hierarchy.getValue(Je.MINIMUM_VALUE),r=j.getValueOrUndefined(t.height,Je.MINIMUM_VALUE),s=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),a=j.getValueOrUndefined(t.extrudedHeight,Je.MINIMUM_VALUE),c=j.getValueOrDefault(t.extrudedHeightReference,Je.MINIMUM_VALUE,tt.NONE),d=j.getValueOrDefault(t.perPositionHeight,Je.MINIMUM_VALUE,!1);r=ri.getGeometryHeight(r,s);let u;if(d?(l(r)&&(r=void 0,Zt(Pye)),s!==tt.NONE&&d&&(r=void 0,Zt(Xye))):(l(a)&&!l(r)&&(r=0),u=ri.computeGeometryOffsetAttribute(r,s,a,c)),i.polygonHierarchy=o,i.granularity=j.getValueOrUndefined(t.granularity,Je.MINIMUM_VALUE),i.stRotation=j.getValueOrUndefined(t.stRotation,Je.MINIMUM_VALUE),i.perPositionHeight=d,i.closeTop=j.getValueOrDefault(t.closeTop,Je.MINIMUM_VALUE,!0),i.closeBottom=j.getValueOrDefault(t.closeBottom,Je.MINIMUM_VALUE,!0),i.offsetAttribute=u,i.height=r,i.arcType=j.getValueOrDefault(t.arcType,Je.MINIMUM_VALUE,cn.GEODESIC),i.textureCoordinates=j.getValueOrUndefined(t.textureCoordinates,Je.MINIMUM_VALUE),a=ri.getGeometryExtrudedHeight(a,c),a===ri.CLAMP_TO_GROUND){let h=ub.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,Mye);a=Wi.getMinimumMaximumHeights(h).minimumTerrainHeight}i.extrudedHeight=a};Iu.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)};Iu.DynamicGeometryUpdater=zV;function zV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(zV.prototype=Object.create(Zi.prototype),zV.prototype.constructor=zV);zV.prototype._isHidden=function(e,t,n){return!l(this._options.polygonHierarchy)||Zi.prototype._isHidden.call(this,e,t,n)};zV.prototype._setOptions=function(e,t,n){let i=this._options;i.polygonHierarchy=j.getValueOrUndefined(t.hierarchy,n);let o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,tt.NONE),s=j.getValueOrDefault(t.extrudedHeightReference,n,tt.NONE),a=j.getValueOrUndefined(t.extrudedHeight,n),c=j.getValueOrUndefined(t.perPositionHeight,n);o=ri.getGeometryHeight(o,s);let d;if(c?(l(o)&&(o=void 0,Zt(Pye)),r!==tt.NONE&&c&&(o=void 0,Zt(Xye))):(l(a)&&!l(o)&&(o=0),d=ri.computeGeometryOffsetAttribute(o,r,a,s)),i.granularity=j.getValueOrUndefined(t.granularity,n),i.stRotation=j.getValueOrUndefined(t.stRotation,n),i.textureCoordinates=j.getValueOrUndefined(t.textureCoordinates,n),i.perPositionHeight=j.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=j.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=j.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=d,i.height=o,i.arcType=j.getValueOrDefault(t.arcType,n,cn.GEODESIC),a=ri.getGeometryExtrudedHeight(a,s),a===ri.CLAMP_TO_GROUND){let u=ub.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,Mye);a=Wi.getMinimumMaximumHeights(u).minimumTerrainHeight}i.extrudedHeight=a};var QX=Iu;var rEi=x(T(),1);var _Ri=x(T(),1);function ylt(e,t,n,i){let o=new yn;i.position&&(o.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:e}));let r=t.length,s=e.length/3,a=(s-r*2)/(r*2),c=Ri.triangulate(t),d=(a-1)*r*6+c.length*2,u=Ne.createTypedArray(s,d),h,p,b,f,y,_,S=r*2,A=0;for(h=0;h<a-1;h++){for(p=0;p<r-1;p++)b=p*2+h*r*2,_=b+S,f=b+1,y=f+S,u[A++]=f,u[A++]=b,u[A++]=y,u[A++]=y,u[A++]=b,u[A++]=_;b=r*2-2+h*r*2,f=b+1,y=f+S,_=b+S,u[A++]=f,u[A++]=b,u[A++]=y,u[A++]=y,u[A++]=b,u[A++]=_}if(i.st||i.tangent||i.bitangent){let E=new Float32Array(s*2),G=1/(a-1),v=1/n.height,I=n.height/2,X,N,g=0;for(h=0;h<a;h++){for(X=h*G,N=v*(t[0].y+I),E[g++]=X,E[g++]=N,p=1;p<r;p++)N=v*(t[p].y+I),E[g++]=X,E[g++]=N,E[g++]=X,E[g++]=N;N=v*(t[0].y+I),E[g++]=X,E[g++]=N}for(p=0;p<r;p++)X=0,N=v*(t[p].y+I),E[g++]=X,E[g++]=N;for(p=0;p<r;p++)X=(a-1)*G,N=v*(t[p].y+I),E[g++]=X,E[g++]=N;o.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:new Float32Array(E)})}let Z=s-r*2;for(h=0;h<c.length;h+=3){let E=c[h]+Z,G=c[h+1]+Z,v=c[h+2]+Z;u[A++]=E,u[A++]=G,u[A++]=v,u[A++]=v+r,u[A++]=G+r,u[A++]=E+r}let V=new gt({attributes:o,indices:u,boundingSphere:de.fromVertices(e),primitiveType:ve.TRIANGLES});if(i.normal&&(V=Kn.computeNormal(V)),i.tangent||i.bitangent){try{V=Kn.computeTangentAndBitangent(V)}catch{Zt("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(V.attributes.tangent=void 0),i.bitangent||(V.attributes.bitangent=void 0),i.st||(V.attributes.st=void 0)}return V}function $X(e){e=e??B.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??eo.ROUNDED,this._vertexFormat=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._granularity=e.granularity??W.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*M.packedLength,this.packedLength=i+ie.packedLength+Xe.packedLength+2}$X.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var kye=ie.clone(ie.UNIT_SPHERE),Uye=new Xe,qX={polylinePositions:void 0,shapePositions:void 0,ellipsoid:kye,vertexFormat:Uye,cornerType:void 0,granularity:void 0};$X.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,kye);t+=ie.packedLength;let c=Xe.unpack(e,t,Uye);t+=Xe.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=Xe.clone(c,n._vertexFormat),n._cornerType=d,n._granularity=u,n):(qX.polylinePositions=r,qX.shapePositions=s,qX.cornerType=d,qX.granularity=u,new $X(qX))};var xlt=new Qe;$X.createGeometry=function(e){let t=e._positions,n=Oo(t,m.equalsEpsilon),i=e._shape;if(i=pf.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;Ri.computeWindingOrder2D(i)===Ks.CLOCKWISE&&i.reverse();let o=Qe.fromPoints(i,xlt),r=pf.computePositions(n,i,o,e,!0);return ylt(r,i,o,e._vertexFormat)};var eN=$X;var URi=x(T(),1);function Tlt(e,t){let n=new yn;n.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:e});let i=t.length,o=n.position.values.length/3,s=e.length/3/i,a=Ne.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 b=i*c,f=b+i;for(d=0;d<i;d++)a[u++]=d+b,a[u++]=d+f}return new gt({attributes:n,indices:Ne.createTypedArray(o,a),boundingSphere:de.fromVertices(e),primitiveType:ve.LINES})}function nN(e){e=e??B.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??eo.ROUNDED,this._granularity=e.granularity??W.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}nN.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 Dye=ie.clone(ie.UNIT_SPHERE),tN={polylinePositions:void 0,shapePositions:void 0,ellipsoid:Dye,height:void 0,cornerType:void 0,granularity:void 0};nN.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,Dye);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):(tN.polylinePositions=r,tN.shapePositions=s,tN.cornerType=c,tN.granularity=d,new nN(tN))};var _lt=new Qe;nN.createGeometry=function(e){let t=e._positions,n=Oo(t,m.equalsEpsilon),i=e._shape;if(i=pf.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;Ri.computeWindingOrder2D(i)===Ks.CLOCKWISE&&i.reverse();let o=Qe.fromPoints(i,_lt),r=pf.computePositions(n,i,o,e,!1);return Tlt(r,i)};var iN=nN;var Oye=new U;function Slt(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 wp(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Slt(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}l(Object.create)&&(wp.prototype=Object.create(Ci.prototype),wp.prototype.constructor=wp);wp.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Gn(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,Oye)),l(c)||(c=U.WHITE),o=Qt.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new Ft({id:t,geometry:new eN(this._options),attributes:i})};wp.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Oye),o=this._distanceDisplayConditionProperty.getValue(e);return new Ft({id:t,geometry:new iN(this._options),attributes:{show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};wp.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.shape)||Ci.prototype._isHidden.call(this,e,t)};wp.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!j.isConstant(t.granularity)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.cornerType)};wp.prototype._setStaticOptions=function(e,t){let n=t.granularity,i=t.cornerType,o=this._options,r=this._materialProperty instanceof Kt;o.vertexFormat=r?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,o.polylinePositions=t.positions.getValue(Je.MINIMUM_VALUE,o.polylinePositions),o.shapePositions=t.shape.getValue(Je.MINIMUM_VALUE,o.shape),o.granularity=l(n)?n.getValue(Je.MINIMUM_VALUE):void 0,o.cornerType=l(i)?i.getValue(Je.MINIMUM_VALUE):void 0};wp.DynamicGeometryUpdater=HV;function HV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(HV.prototype=Object.create(Zi.prototype),HV.prototype.constructor=HV);HV.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.polylinePositions)||!l(i.shapePositions)||Zi.prototype._isHidden.call(this,e,t,n)};HV.prototype._setOptions=function(e,t,n){let i=this._options;i.polylinePositions=j.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=j.getValueOrUndefined(t.shape,n),i.granularity=j.getValueOrUndefined(t.granularity,n),i.cornerType=j.getValueOrUndefined(t.cornerType,n)};var oN=wp;var nGi=x(T(),1);var WEi=x(T(),1);var W7=new m,Hye=new m,Kye=new m,Jye=new m,jye=new ce,Alt=new M,Zlt=new de,Clt=new de;function Qye(e,t){let n=new gt({attributes:new yn,primitiveType:ve.TRIANGLES});return n.attributes.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}function Vlt(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=Jye,u=Kye,h=Hye;if(t.normal||t.tangent||t.bitangent)for(let p=0;p<o;p+=3){let b=m.fromArray(e,p,W7),f=c+1,y=c+2;h=n.geodeticSurfaceNormal(b,h),(t.tangent||t.bitangent)&&(m.cross(m.UNIT_Z,h,u),q.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[y]=h.z),t.tangent&&(s[c]=u.x,s[f]=u.y,s[y]=u.z),t.bitangent&&(a[c]=d.x,a[f]=d.y,a[y]=d.z),c+=3}return Qye(t,{positions:e,normals:r,tangents:s,bitangents:a})}var v7=new m,qye=new m;function Rlt(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=Jye,p=Kye,b=Hye;if(t.normal||t.tangent||t.bitangent)for(let f=0;f<i;f+=6){let y=m.fromArray(e,f,W7),_=m.fromArray(e,(f+6)%i,v7);if(u){let S=m.fromArray(e,(f+3)%i,qye);m.subtract(_,y,_),m.subtract(S,y,S),b=m.normalize(m.cross(S,_,b),b),u=!1}m.equalsEpsilon(_,y,W.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(h=n.geodeticSurfaceNormal(y,h),t.tangent&&(p=m.normalize(m.cross(h,b,p),p))),t.normal&&(o[a++]=b.x,o[a++]=b.y,o[a++]=b.z,o[a++]=b.x,o[a++]=b.y,o[a++]=b.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 Qye(t,{positions:e,normals:o,tangents:r,bitangents:s})}function $ye(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,b=n.st?new Float32Array(h*2):void 0,f=0,y=0,_=W7,S=Alt,A=Number.MAX_VALUE,Z=Number.MAX_VALUE,V=-Number.MAX_VALUE,E=-Number.MAX_VALUE;for(let C=c;C<d;++C)for(let R=0;R<r;++R)fa.computePosition(t,i,n.st,C,R,_,S),p[f++]=_.x,p[f++]=_.y,p[f++]=_.z,n.st&&(b[y++]=S.x,b[y++]=S.y,A=Math.min(A,S.x),Z=Math.min(Z,S.y),V=Math.max(V,S.x),E=Math.max(E,S.y));if(s&&(fa.computePosition(t,i,n.st,0,0,_,S),p[f++]=_.x,p[f++]=_.y,p[f++]=_.z,n.st&&(b[y++]=S.x,b[y++]=S.y,A=S.x,Z=S.y,V=S.x,E=S.y)),a&&(fa.computePosition(t,i,n.st,o-1,0,_,S),p[f++]=_.x,p[f++]=_.y,p[f]=_.z,n.st&&(b[y++]=S.x,b[y]=S.y,A=Math.min(A,S.x),Z=Math.min(Z,S.y),V=Math.max(V,S.x),E=Math.max(E,S.y))),n.st&&(A<0||Z<0||V>1||E>1))for(let C=0;C<b.length;C+=2)b[C]=(b[C]-A)/(V-A),b[C+1]=(b[C+1]-Z)/(E-Z);let G=Vlt(p,n,i,t.tangentRotationMatrix),v=6*(r-1)*(u-1);s&&(v+=3*(r-1)),a&&(v+=3*(r-1));let I=Ne.createTypedArray(h,v),X=0,N=0,g;for(g=0;g<u-1;++g){for(let C=0;C<r-1;++C){let R=X,L=R+r,P=L+1,Y=R+1;I[N++]=R,I[N++]=L,I[N++]=Y,I[N++]=Y,I[N++]=L,I[N++]=P,++X}++X}if(s||a){let C=h-1,R=h-1;s&&a&&(C=h-2);let L,P;if(X=0,s)for(g=0;g<r-1;g++)L=X,P=L+1,I[N++]=C,I[N++]=L,I[N++]=P,++X;if(a)for(X=(u-1)*r,g=0;g<r-1;g++)L=X,P=L+1,I[N++]=L,I[N++]=R,I[N++]=P,++X}return G.indices=I,n.st&&(G.attributes.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:b})),G}function KV(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 JV(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 F7=new Xe;function Elt(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 He=Xe.clone(o,F7);He.normal=!0,e._vertexFormat=He}let h=$ye(e,t);n&&(e._vertexFormat=o);let p=Ri.scaleToGeodeticHeight(h.attributes.position.values,s,a,!1);p=new Float64Array(p);let b=p.length,f=b*2,y=new Float64Array(f);y.set(p);let _=Ri.scaleToGeodeticHeight(h.attributes.position.values,r,a);y.set(_,b),h.attributes.position.values=y;let S=o.normal?new Float32Array(f):void 0,A=o.tangent?new Float32Array(f):void 0,Z=o.bitangent?new Float32Array(f):void 0,V=o.st?new Float32Array(f/3*2):void 0,E,G;if(o.normal){for(G=h.attributes.normal.values,S.set(G),u=0;u<b;u++)G[u]=-G[u];S.set(G,b),h.attributes.normal.values=S}if(n){G=h.attributes.normal.values,o.normal||(h.attributes.normal=void 0);let He=new Float32Array(f);for(u=0;u<b;u++)G[u]=-G[u];He.set(G,b),h.attributes.extrudeDirection=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:He})}let v,I=l(i);if(I){let He=b/3*2,mt=new Uint8Array(He);i===mn.TOP?mt=mt.fill(1,0,He/2):(v=i===mn.NONE?0:1,mt=mt.fill(v)),h.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:mt})}if(o.tangent){let He=h.attributes.tangent.values;for(A.set(He),u=0;u<b;u++)He[u]=-He[u];A.set(He,b),h.attributes.tangent.values=A}if(o.bitangent){let He=h.attributes.bitangent.values;Z.set(He),Z.set(He,b),h.attributes.bitangent.values=Z}o.st&&(E=h.attributes.st.values,V.set(E),V.set(E,b/3*2),h.attributes.st.values=V);let X=h.indices,N=X.length,g=b/3,C=Ne.createTypedArray(f/3,N*2);for(C.set(X),u=0;u<N;u+=3)C[u+N]=X[u+2]+g,C[u+1+N]=X[u+1]+g,C[u+2+N]=X[u]+g;h.indices=C;let R=t.northCap,L=t.southCap,P=c,Y=2,O=0,k=4,D=4;R&&(Y-=1,P-=1,O+=1,k-=2,D-=1),L&&(Y-=1,P-=1,O+=1,k-=2,D-=1),O+=Y*d+2*P-k;let w=(O+D)*2,z=new Float64Array(w*3),J=n?new Float32Array(w*3):void 0,ee=I?new Uint8Array(w):void 0,H=o.st?new Float32Array(w*2):void 0,te=i===mn.TOP;I&&!te&&(v=i===mn.ALL?1:0,ee=ee.fill(v));let $=0,pe=0,xe=0,le=0,Te=d*P,Se;for(u=0;u<Te;u+=d)Se=u*3,z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,u*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1);if(L){let He=R?Te+1:Te;for(Se=He*3,u=0;u<2;u++)z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,He*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1)}else for(u=Te-d;u<Te;u++)Se=u*3,z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,u*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1);for(u=Te-1;u>0;u-=d)Se=u*3,z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,u*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1);if(R){let He=Te;for(Se=He*3,u=0;u<2;u++)z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,He*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1)}else for(u=d-1;u>=0;u--)Se=u*3,z=KV(z,$,Se,p,_),$+=6,o.st&&(H=JV(H,pe,u*2,E),pe+=4),n&&(xe+=3,J[xe++]=G[Se],J[xe++]=G[Se+1],J[xe++]=G[Se+2]),te&&(ee[le++]=1,le+=1);let Ee=Rlt(z,o,a);o.st&&(Ee.attributes.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:H})),n&&(Ee.attributes.extrudeDirection=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:J})),I&&(Ee.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:ee}));let Ve=Ne.createTypedArray(w,O*6),we,ke,nt,bt;b=z.length/3;let Rt=0;for(u=0;u<b-1;u+=2){we=u,bt=(we+2)%b;let He=m.fromArray(z,we*3,v7),mt=m.fromArray(z,bt*3,qye);m.equalsEpsilon(He,mt,W.EPSILON10)||(ke=(we+1)%b,nt=(ke+2)%b,Ve[Rt++]=we,Ve[Rt++]=ke,Ve[Rt++]=bt,Ve[Rt++]=bt,Ve[Rt++]=ke,Ve[Rt++]=nt)}return Ee.indices=Ve,Ee=Kn.combineInstances([new Ft({geometry:h}),new Ft({geometry:Ee})]),Ee[0]}var Glt=[new m,new m,new m,new m],exe=new be,Llt=new be;function I7(e,t,n,i,o){if(n===0)return ce.clone(e,o);let r=fa.computeOptions(e,t,n,0,jye,exe),s=r.height,a=r.width,c=Glt;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]),ce.fromCartesianArray(c,i,o)}function Mp(e){e=e??B.EMPTY_OBJECT;let t=e.rectangle,n=e.height??0,i=e.extrudedHeight??n;this._rectangle=ce.clone(t),this._granularity=e.granularity??W.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=Xe.clone(e.vertexFormat??Xe.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}Mp.packedLength=ce.packedLength+ie.packedLength+Xe.packedLength+7;Mp.pack=function(e,t,n){return n=n??0,ce.pack(e._rectangle,t,n),n+=ce.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.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 txe=new ce,nxe=ie.clone(ie.UNIT_SPHERE),xx={rectangle:txe,ellipsoid:nxe,vertexFormat:F7,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};Mp.unpack=function(e,t,n){t=t??0;let i=ce.unpack(e,t,txe);t+=ce.packedLength;let o=ie.unpack(e,t,nxe);t+=ie.packedLength;let r=Xe.unpack(e,t,F7);t+=Xe.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=ce.clone(i,n._rectangle),n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=Xe.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):(xx.granularity=s,xx.height=a,xx.rotation=c,xx.stRotation=d,xx.extrudedHeight=u,xx.shadowVolume=h,xx.offsetAttribute=p===-1?void 0:p,new Mp(xx))};Mp.computeRectangle=function(e,t){e=e??B.EMPTY_OBJECT;let n=e.rectangle,i=e.granularity??W.RADIANS_PER_DEGREE,o=e.ellipsoid??ie.default,r=e.rotation??0;return I7(n,i,r,o,t)};var Wlt=new q,Bye=new Pe,vlt=new be;Mp.createGeometry=function(e){if(W.equalsEpsilon(e._rectangle.north,e._rectangle.south,W.EPSILON10)||W.equalsEpsilon(e._rectangle.east,e._rectangle.west,W.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,jye,exe,Llt),a=Wlt;if(o!==0||i!==0){let b=ce.center(t,vlt),f=n.geodeticSurfaceNormalCartographic(b,v7);Pe.fromAxisAngle(f,-o,Bye),q.fromQuaternion(Bye,a)}else q.clone(q.IDENTITY,a);let c=e._surfaceHeight,d=e._extrudedHeight,u=!W.equalsEpsilon(c,d,0,W.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=Elt(e,s);let b=de.fromRectangle3D(t,n,c,Clt),f=de.fromRectangle3D(t,n,d,Zlt);p=de.union(b,f)}else{if(h=$ye(e,s),h.attributes.position.values=Ri.scaleToGeodeticHeight(h.attributes.position.values,c,n,!1),l(e._offsetAttribute)){let b=h.attributes.position.values.length,f=e._offsetAttribute===mn.NONE?0:1,y=new Uint8Array(b/3).fill(f);h.attributes.applyOffset=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}p=de.fromRectangle3D(t,n,c)}return r.position||delete h.attributes.position,new gt({attributes:h.attributes,indices:h.indices,primitiveType:h.primitiveType,boundingSphere:p,offsetAttribute:e._offsetAttribute})};Mp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Mp({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:o,stRotation:e._stRotation,granularity:i,extrudedHeight:s,height:r,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};var zye=new ce,Flt=[new M,new M,new M],Ilt=new Ji,Plt=new be;function Xlt(e){if(e._stRotation===0)return[0,0,0,1,1,0];let t=ce.clone(e._rectangle,zye),n=e._granularity,i=e._ellipsoid,o=e._rotation-e._stRotation,r=I7(t,n,o,i,zye),s=Flt;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=Ji.fromRotation(e._stRotation,Ilt),d=ce.center(a,Plt);for(let f=0;f<3;++f){let y=s[f];y.x-=d.longitude,y.y-=d.latitude,Ji.multiplyByVector(c,y,y),y.x+=d.longitude,y.y+=d.latitude,y.x=(y.x-a.west)/a.width,y.y=(y.y-a.south)/a.height}let u=s[0],h=s[1],p=s[2],b=new Array(6);return M.pack(u,b),M.pack(h,b,2),M.pack(p,b,4),b}Object.defineProperties(Mp.prototype,{rectangle:{get:function(){return l(this._rotatedRectangle)||(this._rotatedRectangle=I7(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=Xlt(this)),this._textureCoordinateRotationPoints}}});var LS=Mp;var ixe=new U,oxe=m.ZERO,rxe=new m,sxe=new ce,Nlt=new ce,Ylt=new be;function wlt(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 Zf(e,t){ri.call(this,{entity:e,scene:t,geometryOptions:new wlt(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}l(Object.create)&&(Zf.prototype=Object.create(ri.prototype),Zf.prototype.constructor=Zf);Zf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new Gn(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,ixe)),l(o)||(o=U.WHITE),i.color=Qt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,oxe,rxe))),new Ft({id:t,geometry:new LS(this._options),attributes:i})};Zf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,ixe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=yo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,oxe,rxe))),new Ft({id:t,geometry:new rS(this._options),attributes:r})};Zf.prototype._computeCenter=function(e,t){let n=j.getValueOrUndefined(this._entity.rectangle.coordinates,e,Nlt);if(!l(n))return;let i=ce.center(n,Ylt);return be.toCartesian(i,ie.default,t)};Zf.prototype._isHidden=function(e,t){return!l(t.coordinates)||Ci.prototype._isHidden.call(this,e,t)};Zf.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.stRotation)||!j.isConstant(t.rotation)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.zIndex)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Kt)};Zf.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Kt,i=j.getValueOrUndefined(t.height,Je.MINIMUM_VALUE),o=j.getValueOrDefault(t.heightReference,Je.MINIMUM_VALUE,tt.NONE),r=j.getValueOrUndefined(t.extrudedHeight,Je.MINIMUM_VALUE),s=j.getValueOrDefault(t.extrudedHeightReference,Je.MINIMUM_VALUE,tt.NONE);l(r)&&!l(i)&&(i=0);let a=this._options;a.vertexFormat=n?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,a.rectangle=t.coordinates.getValue(Je.MINIMUM_VALUE,a.rectangle),a.granularity=j.getValueOrUndefined(t.granularity,Je.MINIMUM_VALUE),a.stRotation=j.getValueOrUndefined(t.stRotation,Je.MINIMUM_VALUE),a.rotation=j.getValueOrUndefined(t.rotation,Je.MINIMUM_VALUE),a.offsetAttribute=ri.computeGeometryOffsetAttribute(i,o,r,s),a.height=ri.getGeometryHeight(i,o),r=ri.getGeometryExtrudedHeight(r,s),r===ri.CLAMP_TO_GROUND&&(r=Wi.getMinimumMaximumHeights(LS.computeRectangle(a,sxe)).minimumTerrainHeight),a.extrudedHeight=r};Zf.DynamicGeometryUpdater=jV;function jV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(jV.prototype=Object.create(Zi.prototype),jV.prototype.constructor=jV);jV.prototype._isHidden=function(e,t,n){return!l(this._options.rectangle)||Zi.prototype._isHidden.call(this,e,t,n)};jV.prototype._setOptions=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,tt.NONE),s=j.getValueOrUndefined(t.extrudedHeight,n),a=j.getValueOrDefault(t.extrudedHeightReference,n,tt.NONE);l(s)&&!l(o)&&(o=0),i.rectangle=j.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=j.getValueOrUndefined(t.granularity,n),i.stRotation=j.getValueOrUndefined(t.stRotation,n),i.rotation=j.getValueOrUndefined(t.rotation,n),i.offsetAttribute=ri.computeGeometryOffsetAttribute(o,r,s,a),i.height=ri.getGeometryHeight(o,r),s=ri.getGeometryExtrudedHeight(s,a),s===ri.CLAMP_TO_GROUND&&(s=Wi.getMinimumMaximumHeights(LS.computeRectangle(i,sxe)).minimumTerrainHeight),i.extrudedHeight=s};var rN=Zf;var oLi=x(T(),1);var VGi=x(T(),1);var dGi=x(T(),1);var axe={};function Mlt(e,t){return W.equalsEpsilon(e.latitude,t.latitude,W.EPSILON10)&&W.equalsEpsilon(e.longitude,t.longitude,W.EPSILON10)}var klt=new be,Ult=new be;function Dlt(e,t,n,i){t=Oo(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,klt);s&&(h.height=n[0]),c[0]=h.height,r?d[0]=i[0]:d[0]=0;let p=c[0],b=d[0],f=p===b,y=1;for(let _=1;_<o;++_){let S=t[_],A=e.cartesianToCartographic(S,Ult);s&&(A.height=n[_]),f=f&&A.height===0,Mlt(h,A)?h.height<A.height&&(c[y-1]=A.height):(a[y]=S,c[y]=A.height,r?d[y]=i[_]:d[y]=0,f=f&&c[y]===d[y],be.clone(A,h),++y)}if(!(f||y<2))return a.length=y,c.length=y,d.length=y,{positions:a,topHeights:c,bottomHeights:d}}var Olt=new Array(2),Blt=new Array(2),zlt={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};axe.computePositions=function(e,t,n,i,o,r){let s=Dlt(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=W.chordLength(o,e.maximumRadius),p=zlt;if(p.minDistance=h,p.ellipsoid=e,r){let b=0,f;for(f=0;f<a-1;f++)b+=$i.numberOfPoints(t[f],t[f+1],h)+1;d=new Float64Array(b*3),u=new Float64Array(b*3);let y=Olt,_=Blt;p.positions=y,p.height=_;let S=0;for(f=0;f<a-1;f++){y[0]=t[f],y[1]=t[f+1],_[0]=n[f],_[1]=n[f+1];let A=$i.generateArc(p);d.set(A,S),_[0]=i[f],_[1]=i[f+1],u.set($i.generateArc(p),S),S+=A.length}}else p.positions=t,p.height=n,d=new Float64Array($i.generateArc(p)),p.height=i,u=new Float64Array($i.generateArc(p));return{bottomPositions:u,topPositions:d,numCorners:c}};var WS=axe;var P7=new m,TO=new m,Hlt=new m,cxe=new m,Klt=new m,Jlt=new m,jlt=new m;function vS(e){e=e??B.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.vertexFormat??Xe.DEFAULT,r=e.granularity??W.RADIANS_PER_DEGREE,s=e.ellipsoid??ie.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=Xe.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+Xe.packedLength+1}vS.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n]=e._granularity,t};var lxe=ie.clone(ie.UNIT_SPHERE),dxe=new Xe,sN={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:lxe,vertexFormat:dxe,granularity:void 0};vS.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,lxe);t+=ie.packedLength;let d=Xe.unpack(e,t,dxe);t+=Xe.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=Xe.clone(d,n._vertexFormat),n._granularity=u,n):(sN.positions=r,sN.minimumHeights=s,sN.maximumHeights=a,sN.granularity=u,new vS(sN))};vS.fromConstantHeights=function(e){e=e??B.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 vS(c)};vS.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._vertexFormat,r=e._granularity,s=e._ellipsoid,a=WS.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,b=o.position?new Float64Array(p):void 0,f=o.normal?new Float32Array(p):void 0,y=o.tangent?new Float32Array(p):void 0,_=o.bitangent?new Float32Array(p):void 0,S=o.st?new Float32Array(p/3*2):void 0,A=0,Z=0,V=0,E=0,G=0,v=jlt,I=Jlt,X=Klt,N=!0;h/=3;let g,C=0,R=1/(h-u-1);for(g=0;g<h;++g){let k=g*3,D=m.fromArray(d,k,P7),w=m.fromArray(c,k,TO);if(o.position&&(b[A++]=w.x,b[A++]=w.y,b[A++]=w.z,b[A++]=D.x,b[A++]=D.y,b[A++]=D.z),o.st&&(S[G++]=C,S[G++]=0,S[G++]=C,S[G++]=1),o.normal||o.tangent||o.bitangent){let z=m.clone(m.ZERO,cxe),J=m.subtract(D,s.geodeticSurfaceNormal(D,TO),TO);if(g+1<h&&(z=m.fromArray(d,k+3,cxe)),N){let ee=m.subtract(z,D,Hlt),H=m.subtract(J,D,P7);v=m.normalize(m.cross(H,ee,v),v),N=!1}m.equalsEpsilon(D,z,W.EPSILON10)?N=!0:(C+=R,o.tangent&&(I=m.normalize(m.subtract(z,D,I),I)),o.bitangent&&(X=m.normalize(m.cross(v,I,X),X))),o.normal&&(f[Z++]=v.x,f[Z++]=v.y,f[Z++]=v.z,f[Z++]=v.x,f[Z++]=v.y,f[Z++]=v.z),o.tangent&&(y[E++]=I.x,y[E++]=I.y,y[E++]=I.z,y[E++]=I.x,y[E++]=I.y,y[E++]=I.z),o.bitangent&&(_[V++]=X.x,_[V++]=X.y,_[V++]=X.z,_[V++]=X.x,_[V++]=X.y,_[V++]=X.z)}}let L=new yn;o.position&&(L.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:b})),o.normal&&(L.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:f})),o.tangent&&(L.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:y})),o.bitangent&&(L.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:_})),o.st&&(L.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:S}));let P=p/3;p-=6*(u+1);let Y=Ne.createTypedArray(P,p),O=0;for(g=0;g<P-2;g+=2){let k=g,D=g+2,w=m.fromArray(b,k*3,P7),z=m.fromArray(b,D*3,TO);if(m.equalsEpsilon(w,z,W.EPSILON10))continue;let J=g+1,ee=g+3;Y[O++]=J,Y[O++]=k,Y[O++]=ee,Y[O++]=ee,Y[O++]=k,Y[O++]=D}return new gt({attributes:L,indices:Y,primitiveType:ve.TRIANGLES,boundingSphere:de.fromVertices(b)})};var aN=vS;var kGi=x(T(),1);var uxe=new m,mxe=new m;function FS(e){e=e??B.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.granularity??W.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}FS.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 hxe=ie.clone(ie.UNIT_SPHERE),cN={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:hxe,granularity:void 0};FS.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,hxe);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):(cN.positions=r,cN.minimumHeights=s,cN.maximumHeights=a,cN.granularity=d,new FS(cN))};FS.fromConstantHeights=function(e){e=e??B.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 FS(c)};FS.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._granularity,r=e._ellipsoid,s=WS.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 b;for(b=0;b<d;++b){let A=b*3,Z=m.fromArray(c,A,uxe),V=m.fromArray(a,A,mxe);h[p++]=V.x,h[p++]=V.y,h[p++]=V.z,h[p++]=Z.x,h[p++]=Z.y,h[p++]=Z.z}let f=new yn({position:new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:h})}),y=u/3;u=2*y-4+y;let _=Ne.createTypedArray(y,u),S=0;for(b=0;b<y-2;b+=2){let A=b,Z=b+2,V=m.fromArray(h,A*3,uxe),E=m.fromArray(h,Z*3,mxe);if(m.equalsEpsilon(V,E,W.EPSILON10))continue;let G=b+1,v=b+3;_[S++]=G,_[S++]=A,_[S++]=G,_[S++]=v,_[S++]=A,_[S++]=Z}return _[S++]=y-2,_[S++]=y-1,new gt({attributes:f,indices:_,primitiveType:ve.LINES,boundingSphere:de.fromVertices(h)})};var lN=FS;var fxe=new U;function Qlt(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 Cf(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Qlt(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}l(Object.create)&&(Cf.prototype=Object.create(Ci.prototype),Cf.prototype.constructor=Cf);Cf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new Gn(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,fxe)),l(c)||(c=U.WHITE),o=Qt.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new Ft({id:t,geometry:new aN(this._options),attributes:i})};Cf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,fxe),o=this._distanceDisplayConditionProperty.getValue(e);return new Ft({id:t,geometry:new lN(this._options),attributes:{show:new Gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:ei.fromDistanceDisplayCondition(o)}})};Cf.prototype._isHidden=function(e,t){return!l(t.positions)||Ci.prototype._isHidden.call(this,e,t)};Cf.prototype._getIsClosed=function(e){return!1};Cf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!j.isConstant(t.minimumHeights)||!j.isConstant(t.maximumHeights)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.granularity)};Cf.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?bn.VERTEX_FORMAT:xo.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Je.MINIMUM_VALUE,s.positions),s.minimumHeights=l(n)?n.getValue(Je.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=l(i)?i.getValue(Je.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=l(o)?o.getValue(Je.MINIMUM_VALUE):void 0};Cf.DynamicGeometryUpdater=QV;function QV(e,t,n){Zi.call(this,e,t,n)}l(Object.create)&&(QV.prototype=Object.create(Zi.prototype),QV.prototype.constructor=QV);QV.prototype._isHidden=function(e,t,n){return!l(this._options.positions)||Zi.prototype._isHidden.call(this,e,t,n)};QV.prototype._setOptions=function(e,t,n){let i=this._options;i.positions=j.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=j.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=j.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=j.getValueOrUndefined(t.granularity,n)};var dN=Cf;var IS=[hv,GX,_X,UX,OX,HX,QX,oN,rN,dN];function PS(e,t){this.entity=e,this.scene=t;let n=new Array(IS.length),i=new _e,o=new Nr;for(let r=0;r<n.length;r++){let s=new IS[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(PS.prototype._onEntityPropertyChanged,this)}PS.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)};PS.prototype.forEach=function(e){let t=this.updaters;for(let n=0;n<t.length;n++)e(t[n])};PS.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)};PS.registerUpdater=function(e){IS.includes(e)||IS.push(e)};PS.unregisterUpdater=function(e){if(IS.includes(e)){let t=IS.indexOf(e);IS.splice(t,1)}};var XS=PS;var PLi=x(T(),1);var pxe=new U,qlt=new kt,$lt=new kt,edt=m.ZERO,tdt=new m;function Vf(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(Vf.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=a}Vf.prototype.onMaterialChanged=function(){this.invalidated=!0};Vf.prototype.isMaterial=function(e){let t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t?!0:l(t)?t.equals(n):!1};Vf.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||!j.isConstant(e.distanceDisplayConditionProperty)||!j.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)}))}};Vf.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};Vf.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=Ar.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 Pn({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=Ar.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 _=d.fillMaterialProperty.color,S=j.getValueOrDefault(_,e,U.WHITE,pxe);U.equals(h._lastColor,S)||(h._lastColor=U.clone(S,h._lastColor),h.color=Qt.toValue(S,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 _=d.depthFailMaterialProperty.color,S=j.getValueOrDefault(_,e,U.WHITE,pxe);U.equals(h._lastDepthFailColor,S)||(h._lastDepthFailColor=U.clone(S,h._lastDepthFailColor),h.depthFailColor=Qt.toValue(S,h.depthFailColor))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!j.isConstant(f)){let _=j.getValueOrDefault(f,e,$lt,qlt);kt.equals(_,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(_,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(_,h.distanceDisplayCondition))}let y=d.terrainOffsetProperty;if(!j.isConstant(y)){let _=j.getValueOrDefault(y,e,edt,tdt);m.equals(_,h._lastOffset)||(h._lastOffset=m.clone(_,h._lastOffset),h.offset=yo.toValue(_,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Vf.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=Gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Vf.prototype.contains=function(e){return this.updaters.contains(e.id)};Vf.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)};Vf.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 qV(e,t,n,i,o){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}qV.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 Vf(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);s.add(t,o),n.push(s)};function bxe(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}qV.prototype.remove=function(e){bxe(this._solidItems,e)||bxe(this._translucentItems,e)};function gxe(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 _O(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}qV.prototype.update=function(e){let t=_O(this,this._solidItems,e,!0);t=_O(this,this._translucentItems,e,t)&&t;let n=gxe(this,this._solidItems,e),i=gxe(this,this._translucentItems,e);return(n||i)&&(t=_O(this,this._solidItems,e,t)&&t,t=_O(this,this._translucentItems,e,t)&&t),t};function yxe(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}qV.prototype.getBoundingSphere=function(e,t){let n=yxe(this._solidItems,e,t);return n===Tt.FAILED?yxe(this._translucentItems,e,t):n};function xxe(e){let t=e.length;for(let n=0;n<t;n++)e[n].destroy();e.length=0}qV.prototype.removeAllPrimitives=function(){xxe(this._solidItems),xxe(this._translucentItems)};var $m=qV;var QLi=x(T(),1);var ndt=new kt,idt=new kt,odt=m.ZERO,rdt=new m;function Rf(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(Rf.prototype.onMaterialChanged,this),this.subscriptions=new Xt,this.showsUpdated=new Xt}Rf.prototype.onMaterialChanged=function(){this.invalidated=!0};Rf.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};Rf.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||!j.isConstant(t.distanceDisplayConditionProperty)||!j.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};Rf.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 sdt=new U;Rf.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=Ar.getValue(e,this.materialProperty,this.material);let a;if(l(this.depthFailMaterialProperty)){this.depthFailMaterial=Ar.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 Pn({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=Ar.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Kt)&&(this.depthFailMaterial=Ar.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.depthFailMaterialProperty.color,S=j.getValueOrDefault(_,e,U.WHITE,sdt);U.equals(h._lastDepthFailColor,S)||(h._lastDepthFailColor=U.clone(S,h._lastDepthFailColor),h.depthFailColor=Qt.toValue(S,h.depthFailColor))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!j.isConstant(f)){let _=j.getValueOrDefault(f,e,idt,ndt);kt.equals(_,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(_,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(_,h.distanceDisplayCondition))}let y=c.terrainOffsetProperty;if(!j.isConstant(y)){let _=j.getValueOrDefault(y,e,odt,rdt);m.equals(_,h._lastOffset)||(h._lastOffset=m.clone(_,h._lastOffset),h.offset=yo.toValue(_,h.offset))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Rf.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=Gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Rf.prototype.contains=function(e){return this.updaters.contains(e.id)};Rf.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)};Rf.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 $V(e,t,n,i,o){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}$V.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 Rf(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);o.add(e,t),n.push(o)};$V.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}}};$V.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};$V.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};$V.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 eh=$V;var yWi=x(T(),1);var rWi=x(T(),1);var nWi=x(T(),1);var $Li=x(T(),1);function SO(e,t,n=0,i=e.length-1,o=adt){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),b=Math.max(n,Math.floor(t-d*h/c+p)),f=Math.min(i,Math.floor(t+(c-d)*h/c+p));SO(e,t,b,f,o)}let r=e[t],s=n,a=i;for(uN(e,n,t),o(e[i],r)>0&&uN(e,n,i);s<a;){for(uN(e,s,a),s++,a--;o(e[s],r)<0;)s++;for(;o(e[a],r)>0;)a--}o(e[n],r)===0?uN(e,n,a):(a++,uN(e,a,i)),a<=t&&(n=a+1),t<=a&&(i=a-1)}}function uN(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function adt(e,t){return e<t?-1:e>t?1:0}var fN=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(!ZO(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;ZO(t,c)&&(n.leaf?i.push(a):N7(t,c)?this._all(a,i):r.push(a))}n=r.pop()}return i}collides(t){let n=this.data;if(!ZO(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(ZO(t,s)){if(n.leaf||N7(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=t1([]),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=cdt(t,i.children,n);if(u!==-1)return i.children.splice(u,1),r.push(i),this._condense(r),this}!d&&!i.leaf&&N7(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=t1(t.slice(n,i+1)),e1(a,this.toBBox),a;o||(o=Math.ceil(Math.log(r)/Math.log(s)),s=Math.ceil(r/Math.pow(s,o-1))),a=t1([]),a.leaf=!1,a.height=o;let c=Math.ceil(r/s),d=c*Math.ceil(Math.sqrt(s));Txe(t,n,i,d,this.compareMinX);for(let u=n;u<=i;u+=d){let h=Math.min(u+d-1,i);Txe(t,u,h,c,this.compareMinY);for(let p=u;p<=h;p+=c){let b=Math.min(p+c-1,h);a.children.push(this._build(t,p,b,o-1))}}return e1(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=X7(d),h=udt(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),hN(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=t1(i.children.splice(s,i.children.length-s));a.height=i.height,a.leaf=i.leaf,e1(i,this.toBBox),e1(a,this.toBBox),n?t[n-1].children.push(a):this._splitRoot(i,a)}_splitRoot(t,n){this.data=t1([t,n]),this.data.height=t.height+1,this.data.leaf=!1,e1(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=mN(t,0,a,this.toBBox),d=mN(t,a,i,this.toBBox),u=mdt(c,d),h=X7(c)+X7(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:ldt,r=t.leaf?this.compareMinY:ddt,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=mN(t,0,n,r),a=mN(t,i-n,i,r),c=AO(s)+AO(a);for(let d=n;d<i-n;d++){let u=t.children[d];hN(s,t.leaf?r(u):u),c+=AO(s)}for(let d=i-n-1;d>=n;d--){let u=t.children[d];hN(a,t.leaf?r(u):u),c+=AO(a)}return c}_adjustParentBBoxes(t,n,i){for(let o=i;o>=0;o--)hN(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():e1(t[n],this.toBBox)}};function cdt(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 e1(e,t){mN(e,0,e.children.length,t,e)}function mN(e,t,n,i,o){o||(o=t1(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];hN(o,e.leaf?i(s):s)}return o}function hN(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 ldt(e,t){return e.minX-t.minX}function ddt(e,t){return e.minY-t.minY}function X7(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function AO(e){return e.maxX-e.minX+(e.maxY-e.minY)}function udt(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 mdt(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 N7(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function ZO(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function t1(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Txe(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;SO(e,s,t,n,o),r.push(t,s,s,n)}}function CO(){this._tree=new fN}function NS(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}NS.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};CO.prototype.insert=function(e,t){let n=NS.fromRectangleAndId(e,t,new NS);this._tree.insert(n)};function hdt(e,t){return e.id===t.id}var fdt=new NS;CO.prototype.remove=function(e,t){let n=NS.fromRectangleAndId(e,t,fdt);this._tree.remove(n,hdt)};var pdt=new NS;CO.prototype.collides=function(e){let t=NS.fromRectangleAndId("",e,pdt);return this._tree.collides(t)};var YS=CO;var bdt=new U,gdt=new kt,ydt=new kt;function hg(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 YS}hg.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};hg.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||!j.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)}))}};hg.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};hg.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 Rl({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 y=d.fillMaterialProperty.color,_=j.getValueOrDefault(y,e,U.WHITE,bdt);U.equals(h._lastColor,_)||(h._lastColor=U.clone(_,h._lastColor),h.color=Qt.toValue(_,h.color))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!j.isConstant(f)){let y=j.getValueOrDefault(f,e,ydt,gdt);kt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(y,h.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};hg.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=Gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};hg.prototype.contains=function(e){return this.updaters.contains(e.id)};hg.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};hg.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 n1(e,t){this._batches=[],this._primitives=e,this._classificationType=t}n1.prototype.add=function(e,t){let n=t.createFillGeometryInstance(e),i=this._batches,o=j.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 hg(this._primitives,this._classificationType,n.attributes.color.value,o),i.push(r)),r.add(t,n),r};n1.prototype.remove=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;++i)if(t[i].remove(e))return};n1.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};n1.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};n1.prototype.removeAllPrimitives=function(){let e=this._batches,t=e.length;for(let n=0;n<t;++n)e[n].removeAllPrimitives()};var i1=n1;var vWi=x(T(),1);var xdt=new kt,Tdt=new kt;function kp(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 YS}kp.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};kp.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)};kp.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||!j.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};kp.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};kp.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=Ar.getValue(e,this.materialProperty,this.material);let a=this.appearanceType;n=new Rl({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=Ar.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)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!j.isConstant(f)){let y=j.getValueOrDefault(f,e,Tdt,xdt);kt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(y,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};kp.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=Gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};kp.prototype.contains=function(e){return this.updaters.contains(e.id)};kp.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)};kp.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 o1(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}o1.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=au.shouldUseSphericalCoordinates(o.geometry.rectangle),s=j.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 kp(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,r,s);a.add(e,t,o),n.push(a)};o1.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0&&!t[i].remove(e);i--);};o1.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};o1.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};o1.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 pN=o1;var HWi=x(T(),1);var _dt=new U,Sdt=new kt,Adt=new kt,Zdt=m.ZERO,Cdt=new m;function fg(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}fg.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||!j.isConstant(e.distanceDisplayConditionProperty)||!j.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)}))}};fg.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};fg.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 Pn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new bn({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 _=d.outlineColorProperty,S=j.getValueOrDefault(_,e,U.WHITE,_dt);U.equals(h._lastColor,S)||(h._lastColor=U.clone(S,h._lastColor),h.color=Qt.toValue(S,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)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!j.isConstant(f)){let _=j.getValueOrDefault(f,e,Adt,Sdt);kt.equals(_,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(_,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(_,h.distanceDisplayCondition))}let y=d.terrainOffsetProperty;if(!j.isConstant(y)){let _=j.getValueOrDefault(y,e,Zdt,Cdt);m.equals(_,h._lastOffset)||(h._lastOffset=m.clone(_,h._lastOffset),h.offset=yo.toValue(_,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};fg.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=Gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};fg.prototype.contains=function(e){return this.updaters.contains(e.id)};fg.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)};fg.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 r1(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new Xt,this._translucentBatches=new Xt}r1.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 fg(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 fg(this._primitives,!0,i,this._shadows),o.set(i,r)),r.add(t,n))};r1.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};r1.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};r1.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};r1.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 s1=r1;var Vdt=[];function Yd(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=Ln.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 s1(n,e,s,!1),this._outlineBatches[o+s]=new s1(n,e,s,!0),this._closedColorBatches[s]=new $m(n,bn,void 0,!0,s,!0),this._closedColorBatches[o+s]=new $m(n,bn,void 0,!0,s,!1),this._closedMaterialBatches[s]=new eh(n,xo,void 0,!0,s,!0),this._closedMaterialBatches[o+s]=new eh(n,xo,void 0,!0,s,!1),this._openColorBatches[s]=new $m(n,bn,void 0,!1,s,!0),this._openColorBatches[o+s]=new $m(n,bn,void 0,!1,s,!1),this._openMaterialBatches[s]=new eh(n,xo,void 0,!1,s,!0),this._openMaterialBatches[o+s]=new eh(n,xo,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 pN(i,s,xo)),c[s]=new i1(i,s);else for(s=0;s<a;++s)c[s]=new i1(i,s);this._groundColorBatches=c,this._groundMaterialBatches=d,this._dynamicBatch=new CS(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(Yd.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,Vdt)}Yd.registerUpdater=function(e){XS.registerUpdater(e)};Yd.unregisterUpdater=function(e){XS.unregisterUpdater(e)};Yd.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(y){h._removeUpdater(y),h._insertUpdaterIntoBatch(e,y)}):(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 XS(c,this._scene),this._updaterSets.set(d,u),u.forEach(function(y){h._insertUpdaterIntoBatch(e,y)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(Yd._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,b=this._batches,f=b.length;for(a=0;a<f;a++)p=b[a].update(e)&&p;return p};var Rdt=[],Edt=new de;Yd.prototype.getBoundingSphere=function(e,t){let n=Rdt,i=Edt,o=0,r=Tt.DONE,s=this._batches,a=s.length,c=e.id,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]=de.clone(i,n[o]),o++)}}return o===0?Tt.FAILED:(n.length=o,de.fromBoundingSpheres(n,t),Tt.DONE)};Yd.prototype.isDestroyed=function(){return!1};Yd.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Yd.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)};Yd.prototype._removeUpdater=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;i++)t[i].remove(e)};Yd.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=Ln.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)};Yd._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)};Yd.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 bN=Yd;var Gvi=x(T(),1);var Gdt=1,Ldt="30px sans-serif",Wdt=ur.FILL,vdt=U.WHITE,Fdt=U.BLACK,Idt=1,Pdt=!1,Xdt=new U(.165,.165,.165,.8),Ndt=new M(7,5),Ydt=M.ZERO,wdt=m.ZERO,Mdt=tt.NONE,kdt=Yi.CENTER,Udt=Jn.CENTER,Ddt=new m,Odt=new U,Bdt=new U,zdt=new U,Hdt=new M,Kdt=new m,Jdt=new M,jdt=new Dt,Qdt=new Dt,qdt=new Dt,$dt=new kt;function _xe(e){this.entity=e,this.label=void 0,this.index=void 0}function Tx(e,t){t.collectionChanged.addEventListener(Tx.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}Tx.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)&&j.getValueOrDefault(a._show,e,!0),h;if(u&&(h=j.getValueOrUndefined(s._position,e,Ddt),c=j.getValueOrUndefined(a._text,e),u=l(h)&&l(c)),!u){Y7(r,s,n);continue}j.isConstant(s._position)||(n._clusterDirty=!0);let p=!1,b=j.getValueOrDefault(a._heightReference,e,Mdt);l(d)||(d=n.getLabel(s),d.id=s,r.label=d,p=m.equals(d.position,h)&&d.heightReference===b),d.show=!0,d.position=h,d.text=c,d.scale=j.getValueOrDefault(a._scale,e,Gdt),d.font=j.getValueOrDefault(a._font,e,Ldt),d.style=j.getValueOrDefault(a._style,e,Wdt),d.fillColor=j.getValueOrDefault(a._fillColor,e,vdt,Odt),d.outlineColor=j.getValueOrDefault(a._outlineColor,e,Fdt,Bdt),d.outlineWidth=j.getValueOrDefault(a._outlineWidth,e,Idt),d.showBackground=j.getValueOrDefault(a._showBackground,e,Pdt),d.backgroundColor=j.getValueOrDefault(a._backgroundColor,e,Xdt,zdt),d.backgroundPadding=j.getValueOrDefault(a._backgroundPadding,e,Ndt,Hdt),d.pixelOffset=j.getValueOrDefault(a._pixelOffset,e,Ydt,Jdt),d.eyeOffset=j.getValueOrDefault(a._eyeOffset,e,wdt,Kdt),d.heightReference=b,d.horizontalOrigin=j.getValueOrDefault(a._horizontalOrigin,e,kdt),d.verticalOrigin=j.getValueOrDefault(a._verticalOrigin,e,Udt),d.translucencyByDistance=j.getValueOrUndefined(a._translucencyByDistance,e,jdt),d.pixelOffsetScaleByDistance=j.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,Qdt),d.scaleByDistance=j.getValueOrUndefined(a._scaleByDistance,e,qdt),d.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e,$dt),d.disableDepthTestDistance=j.getValueOrUndefined(a._disableDepthTestDistance,e),p&&d._updateClamping()}return!0};Tx.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};Tx.prototype.isDestroyed=function(){return!1};Tx.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Tx.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return he(this)};Tx.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 _xe(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 _xe(r)):(Y7(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],Y7(s.get(r.id),r,a),s.remove(r.id)};function Y7(e,t,n){l(e)&&(e.label=void 0,n.removeLabel(t))}var gN=Tx;var Jvi=x(T(),1);var eut=1,tut=!0,nut=0,iut=!0,out=!0,rut=Ln.ENABLED,sut=tt.NONE,aut=U.RED,cut=0,lut=U.WHITE,dut=tl.HIGHLIGHT,uut=.5,mut=new M(1,1),Sxe={maximumPositionEpsilon:Number.POSITIVE_INFINITY},hut=new F,fut=new F,Axe=new U,Zxe=new Array(4),put=new m;function _x(e,t){t.collectionChanged.addEventListener(_x.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 but(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await yu.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene,environmentMapOptions:o});if(e.isDestroyed()||!l(s[t.id]))return;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}}_x.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)&&j.getValueOrDefault(a._show,e,!0),h;if(u&&(h=s.computeModelMatrix(e,hut),c=We.createIfNeeded(j.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:{...Sxe}},n[s.id]=d;let f=j.getValueOrDefault(a._incrementallyLoadTextures,e,iut),y=j.getValueOrDefault(a._environmentMapOptions,e,Sxe,d.environmentMapOptionsScratch);but(this,s,c,f,y)}let p=d.modelPrimitive;if(!l(p))continue;p.show=!0,p.scale=j.getValueOrDefault(a._scale,e,eut),p.enableVerticalExaggeration=j.getValueOrDefault(a._enableVerticalExaggeration,e,tut),p.minimumPixelSize=j.getValueOrDefault(a._minimumPixelSize,e,nut),p.maximumScale=j.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=F.clone(h,p.modelMatrix),p.shadows=j.getValueOrDefault(a._shadows,e,rut),p.heightReference=j.getValueOrDefault(a._heightReference,e,sut),p.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=j.getValueOrDefault(a._silhouetteColor,e,aut,Axe),p.silhouetteSize=j.getValueOrDefault(a._silhouetteSize,e,cut),p.color=j.getValueOrDefault(a._color,e,lut,Axe),p.colorBlendMode=j.getValueOrDefault(a._colorBlendMode,e,dut),p.colorBlendAmount=j.getValueOrDefault(a._colorBlendAmount,e,uut),p.clippingPlanes=j.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=j.getValueOrDefault(a._clampAnimations,e,out),p.imageBasedLighting.imageBasedLightingFactor=j.getValueOrDefault(a._imageBasedLightingFactor,e,mut);let b=j.getValueOrUndefined(a._lightColor,e);if(l(b)&&(U.pack(b,Zxe,0),b=m.unpack(Zxe,0,put)),p.lightColor=b,p.customShader=j.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){let f=j.getValueOrDefault(a._runAnimations,e,!0);d.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:Rd.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=f);let y=j.getValueOrUndefined(a._nodeTransformations,e,d.nodeTransformationsScratch);if(l(y)){let A=Object.keys(y);for(let Z=0,V=A.length;Z<V;++Z){let E=A[Z],G=y[E];if(!l(G))continue;let v=p.getNode(E);if(!l(v))continue;let I=F.fromTranslationRotationScale(G,fut);v.matrix=F.multiply(v.originalMatrix,I,I)}}let _=!1,S=j.getValueOrUndefined(a._articulations,e,d.articulationsScratch);if(l(S)){let A=Object.keys(S);for(let Z=0,V=A.length;Z<V;++Z){let E=A[Z],G=S[E];l(G)&&(_=!0,p.setArticulationStage(E,G))}}_&&p.applyArticulations()}}return!0};_x.prototype.isDestroyed=function(){return!1};_x.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(_x.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)w7(this,e[i],t,n);return he(this)};var VO=new m,gut=new be;_x.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!==tt.NONE){let a=i.modelMatrix;VO.x=a[12],VO.y=a[13],VO.z=a[14];let c=r.cartesianToCartographic(VO,gut),d=o.getHeight(c,i.heightReference);return l(d)&&(bm(i.heightReference)?c.height=d:c.height+=d),de.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(c),Tt.DONE}return de.clone(i.boundingSphere,t),Tt.DONE};_x.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)?(yut(r,a),s.set(r.id,r)):(w7(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],w7(this,r,a,c),s.remove(r.id)};function w7(e,t,n,i){let o=n[t.id];l(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function yut(e,t){let n=t[e.id];l(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var yN=_x;var G2i=x(T(),1);var i2i=x(T(),1);function Sx(e){this._definitionChanged=new _e,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(Sx.prototype,{isConstant:{get:function(){return j.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return l(this._value)?this._value.referenceFrame:Mi.FIXED}}});var xut=new Q;Sx.prototype.getValue=function(e,t){return l(e)||(e=Q.now(xut)),this.getValueInReferenceFrame(e,Mi.FIXED,t)};Sx.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))};Sx.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};Sx.prototype.equals=function(e){return this===e||e instanceof Sx&&this._value===e._value};Sx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Up=Sx;var Cxe=new q,Vxe=new q,Rxe=new q,Tut=new m,Exe=new m,_ut=new m,Sut=new m,RO=new Pe,EO=new F,GO=new q;function xN(e,t,n,i,o){if(!(!l(t)||!l(n))){if(m.subtract(t,n,o),l(i.orientation))i.orientation.getValue(e,RO)&&(Pe.conjugate(RO,RO),q.fromQuaternion(RO,GO),q.multiplyByVector(GO,o,o));else if(l(U7(e,i.position,EO)))F.inverse(EO,EO),F.getRotation(EO,GO),q.multiplyByVector(GO,o,o);else return;return o}}function U7(e,t,n){let i=t.getValue(e,Tut);if(l(i)){let o=Q.addSeconds(e,.01,new Q),r=t.getValue(o,Exe);if(l(r)&&!m.equalsEpsilon(i,r,W.EPSILON16)){let s=pt.computeFixedToIcrfMatrix(e,Cxe),a=pt.computeFixedToIcrfMatrix(o,Vxe),c;!l(s)||!l(a)?(c=pt.computeTemeToPseudoFixedMatrix(e,Rxe),s=q.transpose(c,Cxe),a=pt.computeTemeToPseudoFixedMatrix(o,Vxe),q.transpose(a,a)):c=q.transpose(s,Rxe);let d=_ut;m.normalize(i,d),m.normalize(r,r),q.multiplyByVector(s,d,d),q.multiplyByVector(a,r,r);let u=m.cross(d,r,Sut);if(!m.equalsEpsilon(u,m.ZERO,W.EPSILON16)){let h=m.cross(u,d,Exe);return q.multiplyByVector(c,h,h),q.multiplyByVector(c,u,u),q.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 Aut=60,Zut=1,Fxe=new vn,M7=new vn,k7=new vn;function Gxe(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}var LO=new m;function Cut(e,t,n,i,o,r,s,a,c){let d,u,h=!1;r instanceof Jo&&(d=r,u=d.position,r=Mi.FIXED,h=!0);let p=a,b,f;b=e.getValueInReferenceFrame(t,r,c[p]),h?(f=u.getValueInReferenceFrame(t,r,LO),b=xN(t,b,f,d,b),l(b)&&(c[p++]=b)):l(b)&&(c[p++]=b);let y=!l(o)||Q.lessThanOrEquals(o,t)||Q.greaterThanOrEquals(o,n),_=0,S=i.length,A=i[_],Z=n,V=!1,E,G,v;for(;_<S;){if(!y&&Q.greaterThanOrEquals(A,o)&&(b=e.getValueInReferenceFrame(o,r,c[p]),h?(f=u.getValueInReferenceFrame(o,r,LO),l(b)&&l(f)&&(b=xN(o,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b),y=!0),Q.greaterThan(A,t)&&Q.lessThan(A,Z)&&!A.equals(o)&&(b=e.getValueInReferenceFrame(A,r,c[p]),h?(f=u.getValueInReferenceFrame(A,r,LO),l(b)&&l(f)&&(b=xN(A,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b)),_<S-1){if(s>0&&!V){let I=i[_+1],X=Q.secondsDifference(I,A);V=X>s,V&&(E=Math.ceil(X/s),G=0,v=X/Math.max(E,2),E=Math.max(E-1,1))}if(V&&G<E){A=Q.addSeconds(A,v,new Q),G++;continue}}V=!1,_++,A=i[_]}return b=e.getValueInReferenceFrame(n,r,c[p]),h?(f=u.getValueInReferenceFrame(n,r,LO),l(b)&&l(f)&&(b=xN(n,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b),p}function Vut(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 Rut(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=Math.max(r,60),b=!l(i)||Q.lessThanOrEquals(i,t)||Q.greaterThanOrEquals(i,n);for(;Q.lessThan(h,n);)!b&&Q.greaterThanOrEquals(h,i)&&(b=!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 Eut(e,t,n,i,o,r,s,a){k7.start=t,k7.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!vn.intersect(h,k7,Fxe).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 b=e.getValueInReferenceFrame(p,o,a[c]);l(b)&&(a[c]=b,c++)}}return c}function Gut(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return l(c)&&(a[s++]=c),s}function Lut(e,t,n,i,o,r,s,a){M7.start=t,M7.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!vn.intersect(h,M7,Fxe).isEmpty){let p=h.start,b=h.stop,f=t;Q.greaterThan(p,f)&&(f=p);let y=n;Q.lessThan(b,y)&&(y=b),c=Ixe(h.data,f,y,i,o,r,c,a)}}return c}function Ixe(e,t,n,i,o,r,s,a){for(;e instanceof sg;)e=e.resolvedProperty;if(e instanceof dc){let c=e._property._times;s=Cut(e,t,n,c,i,o,r,s,a)}else e instanceof fv?s=Vut(e,t,n,i,o,r,s,a):e instanceof cc?s=Lut(e,t,n,i,o,r,s,a):e instanceof ag?s=Eut(e,t,n,i,o,r,s,a):e instanceof Ll||e instanceof Up&&j.isConstant(e)?s=Gut(e,t,n,i,o,r,s,a):s=Rut(e,t,n,i,o,r,s,a);return s}function Pxe(e,t,n,i,o,r,s){l(s)||(s=[]);let a=Ixe(e,t,n,i,o,r,0,s);return s.length=a,s}var Lxe=new q,Wxe=new Pe,vxe=new q;function TN(e,t){this._unusedIndexes=[],this._polylineCollection=new cf,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}TN.prototype.update=function(e){let t=this._referenceFrame;if(t===Mi.INERTIAL){let n=pt.computeIcrfToFixedMatrix(e,Lxe);l(n)||(n=pt.computeTemeToPseudoFixedMatrix(e,Lxe)),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,Wxe))&&(q.fromQuaternion(Wxe,vxe),F.fromRotationTranslation(vxe,n,this._polylineCollection.modelMatrix)):U7(e,t.position,this._polylineCollection.modelMatrix)}};TN.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=j.getValueOrUndefined(i._leadTime,e),b=j.getValueOrUndefined(i._trailTime,e),f=n._availability,y=l(f),_=l(p),S=l(b);if(d=y||_&&S,d){if(S&&(r=Q.addSeconds(e,-b,new Q)),_&&(s=Q.addSeconds(e,p,new Q)),y){let A=f.start,Z=f.stop;(!S||Q.greaterThan(A,r))&&(r=A),(!_||Q.lessThan(Z,s))&&(s=Z)}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=j.getValueOrDefault(i._resolution,e,Aut),h=Pxe(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=Ar.getValue(e,i._material,c.material),c.width=j.getValueOrDefault(i._width,e,Zut),c.distanceDisplayCondition=j.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};TN.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)};TN.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),he(this)};function Dp(e,t){t.collectionChanged.addEventListener(Dp.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}Dp.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=Mi.FIXED,p=h.toString();if(this._scene.mode===re.SCENE3D){let f=j.getValueOrUndefined(c.relativeTo,e);l(f)?f==="FIXED"?(h=Mi.FIXED,p=h.toString()):f==="INERTIAL"?(h=Mi.INERTIAL,p=h.toString()):(u=!0,h=this._entityCollection.getById(f),p=f):(h=a.referenceFrame,p=h.toString())}let b=this._updaters[p];if(d===b&&l(b)){b.updateObject(e,r);continue}l(d)&&d.removeObject(r),!(u&&!l(h))&&(l(b)||(b=new TN(this._scene,h),b.update(e),this._updaters[p]=b),r.updater=b,l(b)&&b.updateObject(e,r))}return!0};Dp.prototype.isDestroyed=function(){return!1};Dp.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Dp.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return he(this)};Dp.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 Gxe(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 Gxe(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))};Dp._subSample=Pxe;Dp._computeVvlhTransform=U7;Dp._transformToEntityFrame=xN;var _N=Dp;var D2i=x(T(),1);var Xxe=U.WHITE,Nxe=U.BLACK,Yxe=0,wxe=1,Mxe=0,kxe=Fr.NONE,Uxe=new U,Wut=new m,Dxe=new U,Oxe=new Dt,Bxe=new Dt,zxe=new kt;function Hxe(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 Ax(e,t){t.collectionChanged.addEventListener(Ax.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Xt,this._onCollectionChanged(t,t.values,[],[])}Ax.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=j.getValueOrDefault(a._heightReference,e,tt.NONE),h=s.isShowing&&s.isAvailable(e)&&j.getValueOrDefault(a._show,e,!0),p;if(h&&(p=j.getValueOrUndefined(s._position,e,Wut),h=l(p)),!h){SN(r,s,n);continue}j.isConstant(s._position)||(n._clusterDirty=!0);let b=!1,f=!1;if(u!==tt.NONE&&!l(d)?(l(c)&&(SN(r,s,n),c=void 0),d=n.getBillboard(s),d.id=s,d.image=void 0,r.billboard=d,b=!0,f=m.equals(d.position,p)&&d.heightReference===u):u===tt.NONE&&!l(c)&&(l(d)&&(SN(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=j.getValueOrUndefined(a._scaleByDistance,e,Oxe),c.translucencyByDistance=j.getValueOrUndefined(a._translucencyByDistance,e,Bxe),c.color=j.getValueOrDefault(a._color,e,Xxe,Uxe),c.outlineColor=j.getValueOrDefault(a._outlineColor,e,Nxe,Dxe),c.outlineWidth=j.getValueOrDefault(a._outlineWidth,e,Yxe),c.pixelSize=j.getValueOrDefault(a._pixelSize,e,wxe),c.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e,zxe),c.disableDepthTestDistance=j.getValueOrDefault(a._disableDepthTestDistance,e,Mxe),c.splitDirection=j.getValueOrDefault(a._splitDirection,e,kxe);else if(l(d)){d.show=!0,d.position=p,d.scaleByDistance=j.getValueOrUndefined(a._scaleByDistance,e,Oxe),d.translucencyByDistance=j.getValueOrUndefined(a._translucencyByDistance,e,Bxe),d.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e,zxe),d.disableDepthTestDistance=j.getValueOrDefault(a._disableDepthTestDistance,e,Mxe),d.splitDirection=j.getValueOrDefault(a._splitDirection,e,kxe),d.heightReference=u;let y=j.getValueOrDefault(a._color,e,Xxe,Uxe),_=j.getValueOrDefault(a._outlineColor,e,Nxe,Dxe),S=Math.round(j.getValueOrDefault(a._outlineWidth,e,Yxe)),A=Math.max(1,Math.round(j.getValueOrDefault(a._pixelSize,e,wxe)));if(S>0?(d.scale=1,b=b||S!==r.outlineWidth||A!==r.pixelSize||!U.equals(y,r.color)||!U.equals(_,r.outlineColor)):(d.scale=A/50,A=50,b=b||S!==r.outlineWidth||!U.equals(y,r.color)||!U.equals(_,r.outlineColor)),b){r.color=U.clone(y,r.color),r.outlineColor=U.clone(_,r.outlineColor),r.pixelSize=A,r.outlineWidth=S;let Z=y.alpha,V=y.toCssColorString(),E=_.toCssColorString(),G=JSON.stringify([V,A,E,S]);d.setImage(G,U_(Z,V,E,S,A))}f&&d._updateClamping()}}return!0};Ax.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};Ax.prototype.isDestroyed=function(){return!1};Ax.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Ax.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return he(this)};Ax.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 Hxe(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 Hxe(r)):(SN(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],SN(s.get(r.id),r,a),s.remove(r.id)};function SN(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 AN=Ax;var yIi=x(T(),1);var wFi=x(T(),1);var lFi=x(T(),1);var qxe=[];function vut(e,t,n,i,o){let r=qxe;r.length=o;let s,a=n.red,c=n.green,d=n.blue,u=n.alpha,h=i.red,p=i.green,b=i.blue,f=i.alpha;if(U.equals(n,i)){for(s=0;s<o;s++)r[s]=U.clone(n);return r}let y=(h-a)/o,_=(p-c)/o,S=(b-d)/o,A=(f-u)/o;for(s=0;s<o;s++)r[s]=new U(a+s*y,c+s*_,d+s*S,u+s*A);return r}function ZN(e){e=e??B.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=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._arcType=e.arcType??cn.GEODESIC,this._granularity=e.granularity??W.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+Xe.packedLength+4}ZN.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,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var $xe=ie.clone(ie.UNIT_SPHERE),eTe=new Xe,wS={positions:void 0,colors:void 0,ellipsoid:$xe,vertexFormat:eTe,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};ZN.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,$xe);t+=ie.packedLength;let c=Xe.unpack(e,t,eTe);t+=Xe.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=Xe.clone(c,n._vertexFormat),n._width=d,n._colorsPerVertex=u,n._arcType=h,n._granularity=p,n):(wS.positions=r,wS.colors=s,wS.width=d,wS.colorsPerVertex=u,wS.arcType=h,wS.granularity=p,new ZN(wS))};var Kxe=new m,Jxe=new m,jxe=new m,Qxe=new m;ZN.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=Oo(e._positions,m.equalsEpsilon,!1,h);if(l(i)&&h.length>0){let P=0,Y=h[0];i=i.filter(function(O,k){let D=!1;return o?D=k===Y||k===0&&Y===1:D=k+1===Y,D?(P++,Y=h[P],!1):!0})}let b=p.length;if(b<2||t<=0)return;if(r===cn.GEODESIC||r===cn.RHUMB){let P,Y;r===cn.GEODESIC?(P=W.chordLength(s,a.maximumRadius),Y=$i.numberOfPoints):(P=s,Y=$i.numberOfPointsRhumbLine);let O=$i.extractHeights(p,a);if(l(i)){let k=1;for(c=0;c<b-1;++c)k+=Y(p[c],p[c+1],P);let D=new Array(k),w=0;for(c=0;c<b-1;++c){let z=p[c],J=p[c+1],ee=i[c],H=Y(z,J,P);if(o&&c<k){let te=i[c+1],$=vut(z,J,ee,te,H),pe=$.length;for(d=0;d<pe;++d)D[w++]=$[d]}else for(d=0;d<H;++d)D[w++]=U.clone(ee)}D[w]=U.clone(i[i.length-1]),i=D,qxe.length=0}r===cn.GEODESIC?p=$i.generateCartesianArc({positions:p,minDistance:P,ellipsoid:a,height:O}):p=$i.generateCartesianRhumbArc({positions:p,granularity:P,ellipsoid:a,height:O})}b=p.length;let f=b*4-4,y=new Float64Array(f*3),_=new Float64Array(f*3),S=new Float64Array(f*3),A=new Float32Array(f*2),Z=n.st?new Float32Array(f*2):void 0,V=l(i)?new Uint8Array(f*4):void 0,E=0,G=0,v=0,I=0,X;for(d=0;d<b;++d){d===0?(X=Kxe,m.subtract(p[0],p[1],X),m.add(p[0],X,X)):X=p[d-1],m.clone(X,jxe),m.clone(p[d],Jxe),d===b-1?(X=Kxe,m.subtract(p[b-1],p[b-2],X),m.add(p[b-1],X,X)):X=p[d+1],m.clone(X,Qxe);let P,Y;l(V)&&(d!==0&&!o?P=i[d-1]:P=i[d],d!==b-1&&(Y=i[d]));let O=d===0?2:0,k=d===b-1?2:4;for(u=O;u<k;++u){m.pack(Jxe,y,E),m.pack(jxe,_,E),m.pack(Qxe,S,E),E+=3;let D=u-2<0?-1:1;if(A[G++]=2*(u%2)-1,A[G++]=D*t,n.st&&(Z[v++]=d/(b-1),Z[v++]=Math.max(A[G-2],0)),l(V)){let w=u<2?P:Y;V[I++]=U.floatToByte(w.red),V[I++]=U.floatToByte(w.green),V[I++]=U.floatToByte(w.blue),V[I++]=U.floatToByte(w.alpha)}}}let N=new yn;N.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:y}),N.prevPosition=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:_}),N.nextPosition=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:S}),N.expandAndWidth=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:A}),n.st&&(N.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:Z})),l(V)&&(N.color=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,values:V,normalize:!0}));let g=Ne.createTypedArray(f,b*6-6),C=0,R=0,L=b-1;for(d=0;d<L;++d)g[R++]=C,g[R++]=C+2,g[R++]=C+1,g[R++]=C+1,g[R++]=C+2,g[R++]=C+3,C+=4;return new gt({attributes:N,indices:g,primitiveType:ve.TRIANGLES,boundingSphere:de.fromPoints(p),geometryType:lm.POLYLINES})};var pg=ZN;var Fut=new hi(0),WO={},tTe=new U,Iut=new Kt(U.WHITE),Put=new hi(!0),Xut=new hi(Ln.DISABLED),Nut=new hi(new kt),Yut=new hi(ti.BOTH);function wut(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function Mut(){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 _e,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 wut,this._groundGeometryOptions=new Mut,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)&&j.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 Gn(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,tTe)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)),this.clampToGround?new Ft({id:t,geometry:new DT(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,tTe)),l(a)||(a=U.WHITE),s.depthFailColor=Qt.fromColor(a)),new Ft({id:t,geometry:new pg(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(Je.MINIMUM_VALUE)||!l(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=o.material??Iut,d=c instanceof Kt;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=s??Put,this._shadowsProperty=o.shadows??Xut,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??Nut,this._classificationTypeProperty=o.classificationType??Yut,this._fillEnabled=!0,this._zIndex=a??Fut;let u=o.width,h=o.arcType,p=o.clampToGround,b=o.granularity;if(!r.isConstant||!j.isConstant(u)||!j.isConstant(h)||!j.isConstant(b)||!j.isConstant(p)||!j.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,y=r.getValue(Je.MINIMUM_VALUE,f.positions);if(!l(y)||y.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let _;d&&(!l(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof Kt)?_=Ws.VERTEX_FORMAT:_=ec.VERTEX_FORMAT,f.vertexFormat=_,f.positions=y,f.width=l(u)?u.getValue(Je.MINIMUM_VALUE):void 0,f.arcType=l(h)?h.getValue(Je.MINIMUM_VALUE):void 0,f.granularity=l(b)?b.getValue(Je.MINIMUM_VALUE):void 0;let S=this._groundGeometryOptions;S.positions=y,S.width=f.width,S.arcType=f.arcType,S.granularity=f.granularity,this._clampToGround=l(p)?p.getValue(Je.MINIMUM_VALUE):!1,!this._clampToGround&&l(a)&&Zt("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 CN(e,t,this)};var a1={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function CN(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 nTe(e){if(l(e._line))return e._line;let t=e._primitives,n=e._geometryUpdater._scene.id+t._guid,i=WO[n];!l(i)||i.isDestroyed()?(i=new cf,WO[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}CN.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=j.getValueOrUndefined(o,e,this._positions);t._clampToGround=j.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=j.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=j.getValueOrDefault(i._arcType,e,cn.GEODESIC),t._groundGeometryOptions.granularity=j.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)||!j.getValueOrDefault(i._show,e,!0)||!l(r)||r.length<2)return;let h=t.fillMaterialProperty,p;if(h instanceof Kt)p=new Ws;else{let b=Ar.getValue(e,h,this._material);p=new ec({material:b,translucent:b.isTranslucent()}),this._material=b}this._groundPolylinePrimitive=s.add(new Ph({geometryInstances:t.createFillGeometryInstance(e),appearance:p,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),j.getValueOrUndefined(t.zIndex,e)),l(this._line)&&(this._line.show=!1);return}let a=nTe(this);if(!n.isShowing||!n.isAvailable(e)||!j.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!l(r)||r.length<2){a.show=!1;return}let c=cn.GEODESIC;c=j.getValueOrDefault(i._arcType,e,c);let d=t._scene.globe,u=t._scene.ellipsoid;c!==cn.NONE&&l(d)&&(a1.ellipsoid=u,a1.positions=r,a1.granularity=j.getValueOrUndefined(i._granularity,e),a1.height=$i.extractHeights(r,u),c===cn.GEODESIC?r=$i.generateCartesianArc(a1):r=$i.generateCartesianRhumbArc(a1)),a.show=!0,a.positions=r.slice(),a.material=Ar.getValue(e,t.fillMaterialProperty,a.material),a.width=j.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=j.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};CN.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 de.clone(n.boundingSphere,e),Tt.DONE}return l(t)&&!t.ready?Tt.PENDING:Tt.DONE}else{let t=nTe(this);if(t.show&&t.positions.length>0)return de.fromPoints(t.positions,e),Tt.DONE}return Tt.FAILED};CN.prototype.isDestroyed=function(){return!1};CN.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=WO[t];l(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete WO[t])),l(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),he(this)};var VN=Ef;var tIi=x(T(),1);var kut=new U,Uut=new kt,Dut=new kt;function Gf(e,t,n,i,o){let r;n instanceof Kt?r=Ws:r=ec,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(Gf.prototype.onMaterialChanged,this),this.subscriptions=new Xt,this.showsUpdated=new Xt,this.zIndex=i,this._asynchronous=o}Gf.prototype.onMaterialChanged=function(){this.invalidated=!0};Gf.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)};Gf.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||!j.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};Gf.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};Gf.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 Ph({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new a,classificationType:this.classificationType}),this.appearanceType===ec&&(this.material=Ar.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===ec&&(this.material=Ar.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 y=c.fillMaterialProperty.color,_=j.getValueOrDefault(y,e,U.WHITE,kut);U.equals(h._lastColor,_)||(h._lastColor=U.clone(_,h._lastColor),h.color=Qt.toValue(_,h.color))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),b=h.show[0]===1;p!==b&&(h.show=Gn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!j.isConstant(f)){let y=j.getValueOrDefault(f,e,Dut,Uut);kt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=kt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=ei.toValue(y,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Gf.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=Gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Gf.prototype.contains=function(e){return this.updaters.contains(e.id)};Gf.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)};Gf.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 c1(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=n??!0}c1.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=j.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 Gf(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};c1.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}}};c1.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};c1.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};c1.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 RN=c1;var Out=[];function iTe(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function oTe(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*Ln.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof Kt?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function Op(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=Ln.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 $m(n,Ws,void 0,!1,o),this._materialBatches[o]=new eh(n,ec,void 0,!1,o),this._colorBatches[o+r]=new $m(n,Ws,Ws,!1,o),this._materialBatches[o+r]=new eh(n,ec,Ws,!1,o),this._colorBatches[o+r*2]=new $m(n,Ws,ec,!1,o),this._materialBatches[o+r*2]=new eh(n,ec,ec,!1,o);this._dynamicBatch=new CS(n,i);let s=ti.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new RN(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(Op.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,Out)}Op.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?(iTe(this,u),oTe(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),iTe(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 VN(c,this._scene),this._updaters.set(d,u),oTe(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener(Op._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let h=!0,p=this._batches,b=p.length;for(a=0;a<b;a++)h=p[a].update(e)&&h;return h};var But=[],zut=new de;Op.prototype.getBoundingSphere=function(e,t){let n=But,i=zut,o=0,r=Tt.DONE,s=this._batches,a=s.length,c=this._updaters.get(e.id);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]=de.clone(i,n[o]),o++)}return o===0?Tt.FAILED:(n.length=o,de.fromBoundingSpheres(n,t),Tt.DONE)};Op.prototype.isDestroyed=function(){return!1};Op.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Op.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)};Op._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)};Op.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 EN=Op;function wd(e){Rl.initializeTerrainHeights(),Ph.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Nr,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 td,r=new td;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 VX;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 l1=[];wd.registerVisualizer=function(e){l1.includes(e)||l1.push(e)};wd.unregisterVisualizer=function(e){if(l1.includes(e)){let t=l1.indexOf(e);l1.splice(t,1)}};wd.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new tW(t,i),new bN(e,i,n._primitives,n._groundPrimitives),new gN(t,i),new yN(e,i),new mX(e,i),new AN(t,i),new _N(e,i),new EN(e,i,n._primitives,n._groundPrimitives),...l1.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(!Wi.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 Hut=[],Kut=new de;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 b=p.get(i);if(b.entities.contains(e)){r=b;break}}}if(!l(r))return Tt.FAILED;let s=Hut,a=Kut,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]=de.clone(a,s[c]),c++)}}return c===0?Tt.FAILED:(s.length=c,de.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 td),s=o.add(new kX);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 GN=wd;var iPi=x(T(),1);var UIi=x(T(),1);function D7(e,t,n){this.heading=e??0,this.pitch=t??0,this.range=n??0}D7.clone=function(e,t){if(l(e))return l(t)||(t=new D7),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var th=D7;var rTe=new q,sTe=new q,aTe=new q,Jut=new F,vO=new m,cTe=new m,O7=new m,B7=new m,lTe=new m,dTe=new m,jut=new Pe,Qut=new m,qut=new q,d1=new Q,$ut=1.25;function emt(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,b=!1,f,y,_;if(u===re.SCENE3D){Q.addSeconds(c,.001,d1);let v=o.getValue(d1,vO);if(l(v)||(Q.addSeconds(c,-.001,d1),v=o.getValue(d1,vO),b=!0),l(v)){let I=pt.computeFixedToIcrfMatrix(c,rTe),X=pt.computeFixedToIcrfMatrix(d1,sTe),N;!l(I)||!l(X)?(N=pt.computeTemeToPseudoFixedMatrix(c,aTe),I=q.transpose(N,rTe),X=pt.computeTemeToPseudoFixedMatrix(d1,sTe),q.transpose(X,X)):N=q.transpose(I,aTe);let g=q.multiplyByVector(I,h,lTe),C=q.multiplyByVector(X,v,dTe);m.subtract(g,C,B7);let R=m.magnitude(B7)*1e3,L=W.GRAVITATIONALPARAMETER,P=-L/(R*R-2*L/m.magnitude(g));P<0||P>$ut*d.maximumRadius?(f=cTe,m.normalize(h,f),m.negate(f,f),_=m.clone(m.UNIT_Z,O7),y=m.cross(_,f,vO),m.magnitude(y)>W.EPSILON7&&(m.normalize(f,f),m.normalize(y,y),_=m.cross(f,y,O7),m.normalize(_,_),p=!0)):m.equalsEpsilon(h,v,W.EPSILON7)||(_=cTe,m.normalize(g,_),m.normalize(C,C),y=m.cross(_,C,O7),b&&(y=m.multiplyByScalar(y,-1,y)),m.equalsEpsilon(y,m.ZERO,W.EPSILON7)||(f=m.cross(y,_,vO),q.multiplyByVector(N,f,f),q.multiplyByVector(N,y,y),q.multiplyByVector(N,_,_),m.normalize(f,f),m.normalize(y,y),m.normalize(_,_),p=!0))}}l(e.boundingSphere)&&(h=e.boundingSphere.center);let S,A,Z;i&&(S=m.clone(t.position,B7),A=m.clone(t.direction,lTe),Z=m.clone(t.up,dTe));let V=Jut,E;l(s)&&(E=s.getValue(c,jut));let G=r.getValue(c,Qut);if(a===D0.INERTIAL&&l(E))F.fromTranslationQuaternionRotationScale(h,E,m.ONE,V);else if(a===D0.VELOCITY&&l(G)){let v=pt.rotationMatrixFromPositionVelocity(h,G,d,qut);F.fromRotationTranslation(v,h,V)}else a===D0.ENU||!p?pt.eastNorthUpToFixedFrame(h,d,V):(V[0]=f.x,V[1]=f.y,V[2]=f.z,V[3]=0,V[4]=y.x,V[5]=y.y,V[6]=y.z,V[7]=0,V[8]=_.x,V[9]=_.y,V[10]=_.z,V[11]=0,V[12]=h.x,V[13]=h.y,V[14]=h.z,V[15]=0);t._setTransform(V),i&&(m.clone(S,t.position),m.clone(A,t.direction),m.clone(Z,t.up),m.cross(A,Z,t.right))}if(n){let p=u===re.SCENE2D||m.equals(e._offset3D,m.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function LN(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 lg(e.position,!0),this._offset3D=new m}Object.defineProperties(LN,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=m.clone(e,new m)}}});LN.defaultOffset3D=new m(-14e3,3500,3500);var FO=new th,tmt=new m;LN.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===re.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,b=u||h,f=!0;if(u){let y=r.viewFrom,_=l(y);if(!_&&l(t)){FO.pitch=-W.PI_OVER_FOUR,FO.range=0;let S=a.getValue(e,tmt);if(l(S)){let A=2-1/Math.max(1,m.magnitude(S)/i.maximumRadius);FO.pitch*=A}p.viewBoundingSphere(t,FO),this.boundingSphere=t,b=!1,f=!1}else(!_||!l(y.getValue(e,this._offset3D)))&&m.clone(LN._defaultOffset3D,this._offset3D)}else!h&&this._mode!==re.SCENE2D&&m.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,emt(this,p,b,f,a,c,d,s,e,i)};var WN=LN;var PXi=x(T(),1);var dPi=x(T(),1);function FN(){this._cache={}}FN.prototype.fromColor=function(e,t){return IO(void 0,void 0,e,t,this._cache)};FN.prototype.fromUrl=function(e,t,n){return IO(e,void 0,t,n,this._cache)};FN.prototype.fromMakiIconId=function(e,t,n){return IO(qt(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};FN.prototype.fromText=function(e,t,n){return IO(void 0,e,t,n,this._cache)};var nmt=new U;function imt(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,nmt).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 uTe(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 vN=new Array(4);function IO(e,t,n,i,o){vN[0]=e,vN[1]=t,vN[2]=n,vN[3]=i;let r=JSON.stringify(vN),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(imt(c,n,i),l(e)){let u=We.createIfNeeded(e).fetchImage().then(function(h){return uTe(c,h,i),o[r]=a,a});return o[r]=u,u}else if(l(t)){let d=O_(t,{font:`bold ${i}px sans-serif`});uTe(c,d,i)}return o[r]=a,a}var bg=FN;var eXi=x(T());var yPi=x(T());var pPi=x(T());var mPi=x(T());function z7(e){return e}function PO(e){if(e==null)return z7;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 ZPi=x(T());var TPi=x(T());function mTe(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function H7(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return hTe(e,n)})}:hTe(e,t)}function hTe(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=K7(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 K7(e,t){var n=PO(e.transform),i=e.arcs;function o(u,h){h.length&&h.pop();for(var p=i[u<0?~u:u],b=0,f=p.length;b<f;++b)h.push(n(p[b],b));u<0&&mTe(h,f)}function r(u){return n(u)}function s(u){for(var h=[],p=0,b=u.length;p<b;++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 LPi=x(T());var VPi=x(T());var IPi=x(T());var MPi=x(T());var XPi=x(T());var HPi=x(T());var DPi=x(T());function XO(e){return m.fromDegrees(e[0],e[1],e[2])}var J7={"urn:ogc:def:crs:OGC:1.3:CRS84":XO,"EPSG:4326":XO,"urn:ogc:def:crs:EPSG::4326":XO},fTe={},pTe={},j7=48,Q7,q7=U.ROYALBLUE,$7=U.YELLOW,e6=2,t6=U.fromBytes(255,255,0,100),n6=!1,cmt={small:24,medium:48,large:64},lmt=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function bTe(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||lmt.indexOf(i)!==-1)continue;let o=e[i];l(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${bTe(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 dmt(e,t,n){let i;return function(o,r){return l(i)||(i=e(t,n)),i}}function umt(e,t){return new Mh(dmt(bTe,e,t),!0)}function NO(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 hi(c):n(r,s))}return o}function i6(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var gTe={Feature:xTe,FeatureCollection:mmt,GeometryCollection:TTe,LineString:CTe,MultiLineString:VTe,MultiPoint:ATe,MultiPolygon:GTe,Point:STe,Polygon:ETe,Topology:LTe},yTe={GeometryCollection:TTe,LineString:CTe,MultiLineString:VTe,MultiPoint:ATe,MultiPolygon:GTe,Point:STe,Polygon:ETe,Topology:LTe};function xTe(e,t,n,i,o){if(t.geometry===null){NO(t,e._entityCollection,o.describe);return}if(!l(t.geometry))throw new ue("feature.geometry is required.");let r=t.geometry.type,s=yTe[r];if(!l(s))throw new ue(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function mmt(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)xTe(e,r[s],void 0,i,o)}function TTe(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=yTe[d];if(!l(u))throw new ue(`Unknown geometry type: ${d}`);u(e,t,c,i,o)}}function _Te(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(l(c)){let b=c["marker-color"];l(b)&&(s=U.fromCssColorString(b)),a=cmt[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 Hc;u.verticalOrigin=new hi(Jn.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=tt.CLAMP_TO_GROUND);let h=NO(t,e._entityCollection,o.describe);h.billboard=u,h.position=new Ll(n(i));let p=Promise.resolve(d).then(function(b){u.image=new hi(b)}).catch(function(){u.image=new hi(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function STe(e,t,n,i,o){_Te(e,t,i,n.coordinates,o)}function ATe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)_Te(e,t,i,r[s],o)}function ZTe(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 hi(u));let h,p=a.stroke;l(p)&&(h=U.fromCssColorString(p));let b=a["stroke-opacity"];l(b)&&b!==1&&(l(h)||(h=r.color.getValue().clone()),h.alpha=b),l(h)&&(r=new Kt(h))}let c=NO(t,e._entityCollection,o.describe),d=new Jc;c.polyline=d,d.clampToGround=o.clampToGround,d.material=r,d.width=s,d.positions=new hi(i6(i,n)),d.arcType=cn.RHUMB}function CTe(e,t,n,i,o){ZTe(e,t,i,n.coordinates,o)}function VTe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)ZTe(e,t,i,r[s],o)}function RTe(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 b=c["stroke-width"];l(b)&&(a=new hi(b));let f,y=c.stroke;l(y)&&(f=U.fromCssColorString(y));let _=c["stroke-opacity"];l(_)&&_!==1&&(l(f)||(f=r.getValue().clone()),f.alpha=_),l(f)&&(r=new hi(f));let S,A=c.fill,Z=s.color.getValue();l(A)&&(S=U.fromCssColorString(A),S.alpha=Z.alpha),_=c["fill-opacity"],l(_)&&_!==Z.alpha&&(l(S)||(S=Z.clone()),S.alpha=_),l(S)&&(s=new Kt(S))}let d=new Yh;d.outline=new hi(!0),d.outlineColor=r,d.outlineWidth=a,d.material=s,d.arcType=cn.RHUMB;let u=[];for(let b=1,f=i.length;b<f;b++)u.push(new Ec(i6(i[b],n)));let h=i[0];d.hierarchy=new hi(new Ec(i6(h,n),u)),h[0].length>2?d.perPositionHeight=new hi(!0):o.clampToGround||(d.height=0);let p=NO(t,e._entityCollection,o.describe);p.polygon=d}function ETe(e,t,n,i,o){RTe(e,t,i,n.coordinates,o)}function GTe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)RTe(e,t,i,r[s],o)}function LTe(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=H7(n,n.objects[r]),a=gTe[s.type];a(e,s,s,i,o)}}function Zx(e){this._name=e,this._changed=new _e,this._error=new _e,this._isLoading=!1,this._loading=new _e,this._entityCollection=new wa(this),this._promises=[],this._pinBuilder=new bg,this._entityCluster=new Vu,this._credit=void 0,this._resourceCredits=[]}Zx.load=function(e,t){return new Zx().load(e,t)};Object.defineProperties(Zx,{markerSize:{get:function(){return j7},set:function(e){j7=e}},markerSymbol:{get:function(){return Q7},set:function(e){Q7=e}},markerColor:{get:function(){return q7},set:function(e){q7=e}},stroke:{get:function(){return $7},set:function(e){$7=e}},strokeWidth:{get:function(){return e6},set:function(e){e6=e}},fill:{get:function(){return t6},set:function(e){t6=e}},clampToGround:{get:function(){return n6},set:function(e){n6=e}},crsNames:{get:function(){return J7}},crsLinkHrefs:{get:function(){return fTe}},crsLinkTypes:{get:function(){return pTe}}});Object.defineProperties(Zx.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}}});Zx.prototype.load=function(e,t){return WTe(this,e,t,!0)};Zx.prototype.process=function(e,t){return WTe(this,e,t,!1)};function WTe(e,t,n,i){_s.setLoading(e,!0),n=n??B.EMPTY_OBJECT;let o=n.credit;typeof o=="string"&&(o=new yt(o)),e._credit=o;let r=t,s=n.sourceUri;if(typeof t=="string"||t instanceof We){t=We.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??umt,markerSize:n.markerSize??j7,markerSymbol:n.markerSymbol??Q7,markerColor:n.markerColor??q7,strokeWidthProperty:new hi(n.strokeWidth??e6),strokeMaterialProperty:new Kt(n.stroke??$7),fillMaterialProperty:new Kt(n.fill??t6),clampToGround:n.clampToGround??n6},Promise.resolve(r).then(function(a){return hmt(e,a,n,s,i)}).catch(function(a){throw _s.setLoading(e,!1),e._error.raiseEvent(e,a),a})}Zx.prototype.update=function(e){return!0};function hmt(e,t,n,i,o){let r;l(i)&&(r=ig(i)),l(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=gTe[t.type];if(!l(s))throw new ue(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?XO:null;if(l(a)){if(!l(a.properties))throw new ue("crs.properties is undefined.");let d=a.properties;if(a.type==="name"){if(c=J7[d.name],!l(c))throw new ue(`Unknown crs name: ${d.name}`)}else if(a.type==="link"){let u=fTe[d.href];if(l(u)||(u=pTe[d.type]),!l(u))throw new ue(`Unable to resolve crs link: ${JSON.stringify(d)}`);c=u(d)}else if(a.type==="EPSG"){if(c=J7[`EPSG:${d.code}`],!l(c))throw new ue(`Unknown crs EPSG code: ${d.code}`)}else throw new ue(`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,_s.setLoading(e,!1),e})})}var Cx=Zx;var Vwi=x(T(),1);var MYi=x(T());var ZYi=x(T());var NXi=x(T(),1),o6=function(e,t){return o6=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])},o6(e,t)};function Bp(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");o6(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var ta=function(){return ta=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},ta.apply(this,arguments)};function vTe(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var i=n.call(e),o,r=[],s;try{for(;(t===void 0||t-- >0)&&!(o=i.next()).done;)r.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(s)throw s.error}}return r}function FTe(e,t,n){if(n||arguments.length===2)for(var i=0,o=t.length,r;i<o;i++)(r||!(i in t))&&(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var wXi=x(T()),ITe="4.1.5";var kXi=x(T()),PTe=Object.prototype.hasOwnProperty;function Pu(e){return typeof e=="boolean"}function XTe(e,t,n){var i;return e.length>t&&(n==null?(n="…",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function Vx(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Lf(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var iNi=x(T());var OXi=x(T());var YO=/\s+/,wO=(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},e.prototype.setClass=function(t){return this.setAttr("class",t)},e.prototype.addClass=function(t){for(var n=this.getClass(),i=n?n.split(YO):[],o=t.split(YO),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(YO):[],o=t.split(YO),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(){var t=this.getAttrs(),n=[];for(var i in t)PTe.call(t,i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e})();var zXi=x(T());function YTe(e,t,n){var i,o;if(n==null?(n="…",o=3,i=8):(o=n.length,i=n.length),e.length<=t)return e;var r=t-o,s=fmt(e);if(s.query){var a=s.query.match(/^(.*?)(?=(\?|#))(.*?)$/i);a&&(s.query=s.query.substr(0,a[1].length),e=NTe(s))}if(e.length<=t||(s.host&&(s.host=s.host.replace(/^www\./,""),e=NTe(s)),e.length<=t))return e;var c="";if(s.host&&(c+=s.host),c.length>=r)return s.host.length===t?(s.host.substr(0,t-o)+n).substr(0,r+i):r6(c,r,n).substr(0,r+i);var d="";if(s.path&&(d+="/"+s.path),s.query&&(d+="?"+s.query),d)if((c+d).length>=r){if((c+d).length==t)return(c+d).substr(0,t);var u=r-c.length;return(c+r6(d,u,n)).substr(0,r+i)}else c+=d;if(s.fragment){var h="#"+s.fragment;if((c+h).length>=r){if((c+h).length==t)return(c+h).substr(0,t);var p=r-c.length;return(c+r6(h,p,n)).substr(0,r+i)}else c+=h}if(s.scheme&&s.host){var b=s.scheme+"://";if((c+b).length<r)return(b+c).substr(0,t)}if(c.length<=t)return c;var f="";return r>0&&(f=c.substr(-1*Math.floor(r/2))),(c.substr(0,Math.ceil(r/2))+n+f).substr(0,r+i)}function fmt(e){var t={},n=e,i=n.match(/^([a-z]+):\/\//i);return i&&(t.scheme=i[1],n=n.slice(i[0].length)),i=n.match(/^(.*?)(?=(\?|#|\/|$))/i),i&&(t.host=i[1],n=n.slice(i[0].length)),i=n.match(/^\/(.*?)(?=(\?|#|$))/i),i&&(t.path=i[1],n=n.slice(i[0].length)),i=n.match(/^\?(.*?)(?=(#|$))/i),i&&(t.query=i[1],n=n.slice(i[0].length)),i=n.match(/^#(.*?)$/i),i&&(t.fragment=i[1]),t}function NTe(e){var t="";return e.scheme&&e.host&&(t+=e.scheme+"://"),e.host&&(t+=e.host),e.path&&(t+="/"+e.path),e.query&&(t+="?"+e.query),e.fragment&&(t+="#"+e.fragment),t}function r6(e,t,n){var i=t/2,o=Math.ceil(i),r=-1*Math.floor(i),s="";return r<0&&(s=e.substr(r)),e.substr(0,o)+n+s}var KXi=x(T());function wTe(e,t,n){if(e.length<=t)return e;var i,o;n==null?(n="…",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 QXi=x(T());function MTe(e,t,n){return XTe(e,t,n)}var kTe=(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 wO({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.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.length)return t;var i=n.length,o=n.location;return o==="smart"?YTe(t,i):o==="middle"?wTe(t,i):MTe(t,i)},e})();var cYi=x(T());var yNi=x(T());var rNi=x(T()),zp=(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 hNi=x(T());var aNi=x(T());function UTe(e){return e>=0&&e<=31||e==127}function gg(e){return e>=65&&e<=90||e>=97&&e<=122}function na(e){return e>=48&&e<=57}function MO(e){return e==34||e==39}function Rx(e){return e<8232?e<160?e>=9&&e<=13||e==32:e<5760?e==160:e==5760||e>=8192&&e<=8202:e<8287?e>=8232&&e<=8233||e==8239:e<12288?e==8287:e==12288||e==65279}function Wf(e){return e<4800?e<2949?e<2451?e<1425?e<768?e<192?e<169?e<65?e>=48&&e<=57:e>=65&&e<=90||e>=97&&e<=122:e<181?e>=169&&e<=170||e==174:e==181||e==186:e<710?e<216?e>=192&&e<=214:e>=216&&e<=246||e>=248&&e<=705:e<748?e>=710&&e<=721||e>=736&&e<=740:e==748||e==750:e<910?e<895?e<886?e>=768&&e<=884:e>=886&&e<=887||e>=890&&e<=893:e<904?e==895||e==902:e>=904&&e<=906||e==908:e<1155?e<931?e>=910&&e<=929:e>=931&&e<=1013||e>=1015&&e<=1153:e<1369?e>=1155&&e<=1327||e>=1329&&e<=1366:e==1369||e>=1377&&e<=1415:e<1808?e<1552?e<1476?e<1471?e>=1425&&e<=1469:e==1471||e>=1473&&e<=1474:e<1488?e>=1476&&e<=1477||e==1479:e>=1488&&e<=1514||e>=1520&&e<=1522:e<1749?e<1568?e>=1552&&e<=1562:e>=1568&&e<=1641||e>=1646&&e<=1747:e<1770?e>=1749&&e<=1756||e>=1759&&e<=1768:e>=1770&&e<=1788||e==1791:e<2230?e<2042?e<1869?e>=1808&&e<=1866:e>=1869&&e<=1969||e>=1984&&e<=2037:e<2112?e==2042||e>=2048&&e<=2093:e>=2112&&e<=2139||e>=2208&&e<=2228:e<2406?e<2260?e>=2230&&e<=2237:e>=2260&&e<=2273||e>=2275&&e<=2403:e<2437?e>=2406&&e<=2415||e>=2417&&e<=2435:e>=2437&&e<=2444||e>=2447&&e<=2448:e<2693?e<2579?e<2519?e<2486?e<2474?e>=2451&&e<=2472:e>=2474&&e<=2480||e==2482:e<2503?e>=2486&&e<=2489||e>=2492&&e<=2500:e>=2503&&e<=2504||e>=2507&&e<=2510:e<2534?e<2524?e==2519:e>=2524&&e<=2525||e>=2527&&e<=2531:e<2565?e>=2534&&e<=2545||e>=2561&&e<=2563:e>=2565&&e<=2570||e>=2575&&e<=2576:e<2631?e<2613?e<2602?e>=2579&&e<=2600:e>=2602&&e<=2608||e>=2610&&e<=2611:e<2620?e>=2613&&e<=2614||e>=2616&&e<=2617:e==2620||e>=2622&&e<=2626:e<2649?e<2635?e>=2631&&e<=2632:e>=2635&&e<=2637||e==2641:e<2662?e>=2649&&e<=2652||e==2654:e>=2662&&e<=2677||e>=2689&&e<=2691:e<2821?e<2759?e<2730?e<2703?e>=2693&&e<=2701:e>=2703&&e<=2705||e>=2707&&e<=2728:e<2741?e>=2730&&e<=2736||e>=2738&&e<=2739:e>=2741&&e<=2745||e>=2748&&e<=2757:e<2784?e<2763?e>=2759&&e<=2761:e>=2763&&e<=2765||e==2768:e<2809?e>=2784&&e<=2787||e>=2790&&e<=2799:e==2809||e>=2817&&e<=2819:e<2887?e<2858?e<2831?e>=2821&&e<=2828:e>=2831&&e<=2832||e>=2835&&e<=2856:e<2869?e>=2858&&e<=2864||e>=2866&&e<=2867:e>=2869&&e<=2873||e>=2876&&e<=2884:e<2911?e<2902?e>=2887&&e<=2888||e>=2891&&e<=2893:e>=2902&&e<=2903||e>=2908&&e<=2909:e<2929?e>=2911&&e<=2915||e>=2918&&e<=2927:e==2929||e>=2946&&e<=2947:e<3517?e<3205?e<3046?e<2984?e<2969?e<2958?e>=2949&&e<=2954:e>=2958&&e<=2960||e>=2962&&e<=2965:e<2974?e>=2969&&e<=2970||e==2972:e>=2974&&e<=2975||e>=2979&&e<=2980:e<3014?e<2990?e>=2984&&e<=2986:e>=2990&&e<=3001||e>=3006&&e<=3010:e<3024?e>=3014&&e<=3016||e>=3018&&e<=3021:e==3024||e==3031:e<3142?e<3086?e<3072?e>=3046&&e<=3055:e>=3072&&e<=3075||e>=3077&&e<=3084:e<3114?e>=3086&&e<=3088||e>=3090&&e<=3112:e>=3114&&e<=3129||e>=3133&&e<=3140:e<3160?e<3146?e>=3142&&e<=3144:e>=3146&&e<=3149||e>=3157&&e<=3158:e<3174?e>=3160&&e<=3162||e>=3168&&e<=3171:e>=3174&&e<=3183||e>=3200&&e<=3203:e<3333?e<3274?e<3242?e<3214?e>=3205&&e<=3212:e>=3214&&e<=3216||e>=3218&&e<=3240:e<3260?e>=3242&&e<=3251||e>=3253&&e<=3257:e>=3260&&e<=3268||e>=3270&&e<=3272:e<3296?e<3285?e>=3274&&e<=3277:e>=3285&&e<=3286||e==3294:e<3313?e>=3296&&e<=3299||e>=3302&&e<=3311:e>=3313&&e<=3314||e>=3329&&e<=3331:e<3423?e<3389?e<3342?e>=3333&&e<=3340:e>=3342&&e<=3344||e>=3346&&e<=3386:e<3402?e>=3389&&e<=3396||e>=3398&&e<=3400:e>=3402&&e<=3406||e>=3412&&e<=3415:e<3458?e<3430?e>=3423&&e<=3427:e>=3430&&e<=3439||e>=3450&&e<=3455:e<3482?e>=3458&&e<=3459||e>=3461&&e<=3478:e>=3482&&e<=3505||e>=3507&&e<=3515:e<3804?e<3722?e<3570?e<3535?e<3520?e==3517:e>=3520&&e<=3526||e==3530:e<3544?e>=3535&&e<=3540||e==3542:e>=3544&&e<=3551||e>=3558&&e<=3567:e<3664?e<3585?e>=3570&&e<=3571:e>=3585&&e<=3642||e>=3648&&e<=3662:e<3716?e>=3664&&e<=3673||e>=3713&&e<=3714:e==3716||e>=3719&&e<=3720:e<3754?e<3737?e<3725?e==3722:e==3725||e>=3732&&e<=3735:e<3749?e>=3737&&e<=3743||e>=3745&&e<=3747:e==3749||e==3751:e<3776?e<3757?e>=3754&&e<=3755:e>=3757&&e<=3769||e>=3771&&e<=3773:e<3784?e>=3776&&e<=3780||e==3782:e>=3784&&e<=3789||e>=3792&&e<=3801:e<4176?e<3902?e<3872?e<3840?e>=3804&&e<=3807:e==3840||e>=3864&&e<=3865:e<3895?e>=3872&&e<=3881||e==3893:e==3895||e==3897:e<3974?e<3913?e>=3902&&e<=3911:e>=3913&&e<=3948||e>=3953&&e<=3972:e<4038?e>=3974&&e<=3991||e>=3993&&e<=4028:e==4038||e>=4096&&e<=4169:e<4688?e<4301?e<4256?e>=4176&&e<=4253:e>=4256&&e<=4293||e==4295:e<4348?e==4301||e>=4304&&e<=4346:e>=4348&&e<=4680||e>=4682&&e<=4685:e<4746?e<4698?e>=4688&&e<=4694||e==4696:e>=4698&&e<=4701||e>=4704&&e<=4744:e<4786?e>=4746&&e<=4749||e>=4752&&e<=4784:e>=4786&&e<=4789||e>=4792&&e<=4798:e<11035?e<7416?e<6176?e<5873?e<4992?e<4824?e<4802?e==4800:e>=4802&&e<=4805||e>=4808&&e<=4822:e<4888?e>=4824&&e<=4880||e>=4882&&e<=4885:e>=4888&&e<=4954||e>=4957&&e<=4959:e<5121?e<5024?e>=4992&&e<=5007:e>=5024&&e<=5109||e>=5112&&e<=5117:e<5761?e>=5121&&e<=5740||e>=5743&&e<=5759:e>=5761&&e<=5786||e>=5792&&e<=5866:e<6002?e<5920?e<5888?e>=5873&&e<=5880:e>=5888&&e<=5900||e>=5902&&e<=5908:e<5984?e>=5920&&e<=5940||e>=5952&&e<=5971:e>=5984&&e<=5996||e>=5998&&e<=6e3:e<6108?e<6016?e>=6002&&e<=6003:e>=6016&&e<=6099||e==6103:e<6155?e>=6108&&e<=6109||e>=6112&&e<=6121:e>=6155&&e<=6157||e>=6160&&e<=6169:e<6783?e<6512?e<6400?e<6272?e>=6176&&e<=6263:e>=6272&&e<=6314||e>=6320&&e<=6389:e<6448?e>=6400&&e<=6430||e>=6432&&e<=6443:e>=6448&&e<=6459||e>=6470&&e<=6509:e<6608?e<6528?e>=6512&&e<=6516:e>=6528&&e<=6571||e>=6576&&e<=6601:e<6688?e>=6608&&e<=6617||e>=6656&&e<=6683:e>=6688&&e<=6750||e>=6752&&e<=6780:e<7040?e<6832?e<6800?e>=6783&&e<=6793:e>=6800&&e<=6809||e==6823:e<6992?e>=6832&&e<=6846||e>=6912&&e<=6987:e>=6992&&e<=7001||e>=7019&&e<=7027:e<7245?e<7168?e>=7040&&e<=7155:e>=7168&&e<=7223||e>=7232&&e<=7241:e<7376?e>=7245&&e<=7293||e>=7296&&e<=7304:e>=7376&&e<=7378||e>=7380&&e<=7414:e<8450?e<8130?e<8025?e<7960?e<7424?e>=7416&&e<=7417:e>=7424&&e<=7669||e>=7675&&e<=7957:e<8008?e>=7960&&e<=7965||e>=7968&&e<=8005:e>=8008&&e<=8013||e>=8016&&e<=8023:e<8031?e<8027?e==8025:e==8027||e==8029:e<8118?e>=8031&&e<=8061||e>=8064&&e<=8116:e>=8118&&e<=8124||e==8126:e<8205?e<8150?e<8134?e>=8130&&e<=8132:e>=8134&&e<=8140||e>=8144&&e<=8147:e<8178?e>=8150&&e<=8155||e>=8160&&e<=8172:e>=8178&&e<=8180||e>=8182&&e<=8188:e<8305?e<8252?e==8205:e==8252||e==8265:e<8336?e==8305||e==8319:e>=8336&&e<=8348||e>=8400&&e<=8432:e<8579?e<8486?e<8469?e<8455?e==8450:e==8455||e>=8458&&e<=8467:e<8482?e==8469||e>=8473&&e<=8477:e==8482||e==8484:e<8495?e<8488?e==8486:e==8488||e>=8490&&e<=8493:e<8517?e>=8495&&e<=8505||e>=8508&&e<=8511:e>=8517&&e<=8521||e==8526:e<9410?e<9e3?e<8592?e>=8579&&e<=8580:e>=8592&&e<=8703||e>=8986&&e<=8987:e<9193?e==9e3||e==9167:e>=9193&&e<=9203||e>=9208&&e<=9210:e<9723?e<9654?e==9410||e>=9642&&e<=9643:e==9654||e==9664:e<10548?e>=9723&&e<=9726||e>=9728&&e<=10175:e>=10548&&e<=10549||e>=11013&&e<=11015:e<43259?e<12445?e<11688?e<11520?e<11264?e<11088?e>=11035&&e<=11036:e==11088||e==11093:e<11360?e>=11264&&e<=11310||e>=11312&&e<=11358:e>=11360&&e<=11492||e>=11499&&e<=11507:e<11568?e<11559?e>=11520&&e<=11557:e==11559||e==11565:e<11647?e>=11568&&e<=11623||e==11631:e>=11647&&e<=11670||e>=11680&&e<=11686:e<11744?e<11712?e<11696?e>=11688&&e<=11694:e>=11696&&e<=11702||e>=11704&&e<=11710:e<11728?e>=11712&&e<=11718||e>=11720&&e<=11726:e>=11728&&e<=11734||e>=11736&&e<=11742:e<12330?e<11823?e>=11744&&e<=11775:e==11823||e>=12293&&e<=12294:e<12353?e>=12330&&e<=12341||e>=12347&&e<=12349:e>=12353&&e<=12438||e>=12441&&e<=12442:e<42512?e<12951?e<12549?e<12449?e>=12445&&e<=12447:e>=12449&&e<=12538||e>=12540&&e<=12543:e<12704?e>=12549&&e<=12589||e>=12593&&e<=12686:e>=12704&&e<=12730||e>=12784&&e<=12799:e<19968?e<12953?e==12951:e==12953||e>=13312&&e<=19893:e<42192?e>=19968&&e<=40917||e>=40960&&e<=42124:e>=42192&&e<=42237||e>=42240&&e<=42508:e<42891?e<42623?e<42560?e>=42512&&e<=42539:e>=42560&&e<=42610||e>=42612&&e<=42621:e<42775?e>=42623&&e<=42725||e>=42736&&e<=42737:e>=42775&&e<=42783||e>=42786&&e<=42888:e<43072?e<42928?e>=42891&&e<=42926:e>=42928&&e<=42935||e>=42999&&e<=43047:e<43216?e>=43072&&e<=43123||e>=43136&&e<=43205:e>=43216&&e<=43225||e>=43232&&e<=43255:e<55243?e<43744?e<43488?e<43312?e<43261?e==43259:e==43261||e>=43264&&e<=43309:e<43392?e>=43312&&e<=43347||e>=43360&&e<=43388:e>=43392&&e<=43456||e>=43471&&e<=43481:e<43600?e<43520?e>=43488&&e<=43518:e>=43520&&e<=43574||e>=43584&&e<=43597:e<43642?e>=43600&&e<=43609||e>=43616&&e<=43638:e>=43642&&e<=43714||e>=43739&&e<=43741:e<43824?e<43785?e<43762?e>=43744&&e<=43759:e>=43762&&e<=43766||e>=43777&&e<=43782:e<43808?e>=43785&&e<=43790||e>=43793&&e<=43798:e>=43808&&e<=43814||e>=43816&&e<=43822:e<44012?e<43868?e>=43824&&e<=43866:e>=43868&&e<=43877||e>=43888&&e<=44010:e<44032?e>=44012&&e<=44013||e>=44016&&e<=44025:e>=44032&&e<=55203||e>=55216&&e<=55238:e<64848?e<64298?e<64112?e<55296?e>=55243&&e<=55291:e>=55296&&e<=57343||e>=63744&&e<=64109:e<64275?e>=64112&&e<=64217||e>=64256&&e<=64262:e>=64275&&e<=64279||e>=64285&&e<=64296:e<64320?e<64312?e>=64298&&e<=64310:e>=64312&&e<=64316||e==64318:e<64326?e>=64320&&e<=64321||e>=64323&&e<=64324:e>=64326&&e<=64433||e>=64467&&e<=64829:e<65296?e<65024?e<64914?e>=64848&&e<=64911:e>=64914&&e<=64967||e>=65008&&e<=65019:e<65136?e>=65024&&e<=65039||e>=65056&&e<=65071:e>=65136&&e<=65140||e>=65142&&e<=65276:e<65474?e<65345?e>=65296&&e<=65305||e>=65313&&e<=65338:e>=65345&&e<=65370||e>=65382&&e<=65470:e<65490?e>=65474&&e<=65479||e>=65482&&e<=65487:e>=65490&&e<=65495||e>=65498&&e<=65500}function DTe(e){return e<47?e<42?e==33||e>=35&&e<=39:e>=42&&e<=43||e==45:e<63?e==47||e==61:e<94?e==63:e>=94&&e<=96||e>=123&&e<=126}function OTe(e){return e<91?e<47?e>=35&&e<=43||e==45:e<61?e==47:e==61||e==64:e<95?e==91||e==93:e<123?e==95:e>=123&&e<=126||e==10003}function kO(e){return e<58?e<44?e==33:e==44||e==46:e<63?e>=58&&e<=59:e==63||e==94}function BTe(e){return e<91?e==40:e==91||e==123}function s6(e){return e<93?e==41:e==93||e==125}var lNi=x(T()),zTe=/^(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|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|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|சிங்கப்பூர்|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|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|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|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|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|banamex|bauhaus|bestbuy|booking|brother|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|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|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|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|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|yamaxun|youtube|zuerich|католик|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|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|kindle|kosher|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|nagoya|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|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|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|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|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|loans|locus|lotte|lotto|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|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|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|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|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|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|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|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|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|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|scb|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|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|飞利浦|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|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)$/;var a6=/https?:\/\//i,HTe=new RegExp("^"+a6.source,"i"),pmt=/^(javascript|vbscript):/i,bmt=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,gmt=/^(?:\/\/)?([^/#?:]+)/,u1=gg;function c6(e){return gg(e)||na(e)||e===43||e===45||e===46}var yg=Wf;function UO(e){return e===95||yg(e)}function l6(e){return Wf(e)||OTe(e)||kO(e)}function DO(e){return e===47||e===63||e===35}function d6(e){return zTe.test(e.toLowerCase())}function KTe(e){if(pmt.test(e))return!1;var t=e.match(bmt);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!/[A-Za-z]/.test(i))}function JTe(e){var t=e.match(gmt);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!d6(o)}var ymt=/^(?:(?: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]?)$/,xmt=/[:/?#]/;function jTe(e){var t=e.split(xmt,1)[0];return ymt.test(t)}var Tmt=/^(https?:\/\/)?(?:www\.)?/i,_mt=/^\/\//,QTe=(function(e){Bp(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(/&/g,"&")},t.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=Zmt(n)),this.stripPrefix.scheme&&(n=Smt(n)),this.stripPrefix.www&&(n=Amt(n)),this.stripTrailingSlash&&(n=Cmt(n)),this.decodePercentEncoding&&(n=Vmt(n)),n},t})(zp);function Smt(e){return e.replace(HTe,"")}function Amt(e){return e.includes("www.")?e.replace(Tmt,"$1"):e}function Zmt(e){return e.replace(_mt,"")}function Cmt(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function Vmt(e){var t=e.replace(/%(?:22|26|27|3C|3E)/gi,function(n){return n==="%22"?""":n==="%26"?"&":n==="%27"?"'":n==="%3C"||n==="%3c"?"<":">"});if(t.includes("%"))try{return decodeURIComponent(t)}catch{}return t}var SNi=x(T());var qTe=/^mailto:/i,u6=Wf;function OO(e){return u6(e)||DTe(e)}function $Te(e){var t=e.split(".").pop();return d6(t)}var VNi=x(T());var e_e=(function(e){Bp(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})(zp);var GNi=x(T());function m6(e){return e===95||Wf(e)}function t_e(e){return e.length<=140}var n_e=["twitter","facebook","instagram","tiktok","youtube"];var INi=x(T());var i_e=(function(e){Bp(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;case"youtube":return"https://youtube.com/hashtag/"+i;default:Lf(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})(zp);var NNi=x(T());var Rmt={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/,youtube:/^@[-.·\w]{3,30}$/};function h6(e){return e===45||e===46||e===95||gg(e)||na(e)}function o_e(e,t){var n=Rmt[t];return n.test(e)}var r_e=["twitter","instagram","soundcloud","tiktok","youtube"];var UNi=x(T());var s_e=(function(e){Bp(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;case"youtube":return"https://youtube.com/@"+this.mention;default:Lf(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})(zp);var ONi=x(T()),Emt=/[-. ()]/,Gmt=/(?:(?:(?:(\+)?\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]+#?)*/,Lmt=/(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})/,Wmt=new RegExp("^".concat(Gmt.source,"|").concat(Lmt.source,"$"));function f6(e){return e===45||e===46||e===32}function BO(e){return e===44||e===59}function a_e(e){var t=e.charAt(0)==="+"||Emt.test(e);return t&&Wmt.test(e)}var KNi=x(T());var c_e=(function(e){Bp(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})(zp);var vmt=(function(){function e(t,n){this.charIdx=0,this.matches=[],this._stateMachines=[],this.schemeUrlMachinesCount=0,this.text=t,this.tagBuilder=n.tagBuilder,this.stripPrefix=n.stripPrefix,this.stripTrailingSlash=n.stripTrailingSlash,this.decodePercentEncoding=n.decodePercentEncoding,this.hashtagServiceName=n.hashtagServiceName,this.mentionServiceName=n.mentionServiceName}return Object.defineProperty(e.prototype,"stateMachines",{get:function(){return this._stateMachines},enumerable:!1,configurable:!0}),e.prototype.addMachine=function(t){this._stateMachines.push(t),d_e(t)&&this.schemeUrlMachinesCount++},e.prototype.removeMachine=function(t){this._stateMachines=this._stateMachines.filter(function(n){return n!==t}),d_e(t)&&this.schemeUrlMachinesCount--},e.prototype.hasSchemeUrlMachine=function(){return this.schemeUrlMachinesCount>0},e})();function u_e(e,t){for(var n=new vmt(e,t);n.charIdx<n.text.length;n.charIdx++){var i=e.charAt(n.charIdx),o=e.charCodeAt(n.charIdx);if(n.stateMachines.length===0)zO(n,i,o);else{for(var r=n.stateMachines.length-1;r>=0;r--){var s=n.stateMachines[r];switch(s.state){case 11:Ymt(n,s,o);break;case 12:wmt(n,s,o);break;case 0:Fmt(n,s,o);break;case 1:Imt(n,s,o);break;case 2:Pmt(n,s,o);break;case 3:Xmt(n,s,o);break;case 4:Nmt(n,s,i,o);break;case 5:Mmt(n,s,o);break;case 6:kmt(n,s,i,o);break;case 7:Umt(n,s,i,o);break;case 13:Dmt(n,s,o);break;case 14:Omt(n,s,o);break;case 8:Bmt(n,s,o);break;case 9:zmt(n,s,o);break;case 10:Hmt(n,s,o);break;case 15:Kmt(n,s,i,o);break;case 16:Jmt(n,s,i,o);break;case 17:jmt(n,s,i,o);break;case 18:Qmt(n,s,i,o);break;case 19:qmt(n,s,i,o);break;case 20:$mt(n,s,o);break;case 21:eht(n,s,o);break;case 22:MS(n,s,o);break;case 23:tht(n,s,o);break;case 24:nht(n,s,o);break;case 25:iht(n,s,o);break;case 26:oht(n,s,o);break;case 27:rht(n,s,o);break;case 28:sht(n,s,o);break;case 29:aht(n,s,o);break;case 30:cht(n,s,o);break;case 31:lht(n,s,o);break;case 32:uht(n,s,i,o);break;case 33:mht(n,s,o);break;case 34:hht(n,s,o);break;case 35:fht(n,s,o);break;case 36:pht(n,s,i,o);break;case 37:dht(n,s,i,o);break;case 38:bht(n,s,i,o);break;case 39:ght(n,s,i,o);break;case 40:yht(n,s,o);break;case 41:xht(n,s,o);break;default:Lf(s.state)}}if(!n.hasSchemeUrlMachine()&&n.charIdx>0&&u1(o)){var a=n.text.charCodeAt(n.charIdx-1);u1(a)||n.addMachine(HO(n.charIdx,0))}}}for(var c=n.stateMachines.length-1;c>=0;c--)n.stateMachines.forEach(function(d){return As(n,d)});return n.matches}function zO(e,t,n){var i=e.charIdx;if(n===35)e.addMachine(Zht(i,28));else if(n===64)e.addMachine(Cht(i,30));else if(n===47)e.addMachine(b6(i,11));else if(n===43)e.addMachine(p6(i,37));else if(n===40)e.addMachine(p6(i,32));else{if(na(n)&&(e.addMachine(p6(i,38)),e.addMachine(Sht(i,13))),u6(n)){var o=t.toLowerCase()==="m"?15:22;e.addMachine(Aht(i,o))}u1(n)&&e.addMachine(HO(i,0)),Wf(n)&&e.addMachine(b6(i,5))}}function Fmt(e,t,n){n===58?t.state=2:n===45?t.state=1:c6(n)||e.removeMachine(t)}function Imt(e,t,n){var i=e.charIdx;n===45||(n===47?(e.removeMachine(t),e.addMachine(b6(i,11))):c6(n)?t.state=0:e.removeMachine(t))}function Pmt(e,t,n){var i=e.charIdx;n===47?t.state=3:n===46?e.removeMachine(t):yg(n)?(t.state=5,u1(n)&&e.addMachine(HO(i,0))):e.removeMachine(t)}function Xmt(e,t,n){n===47?t.state=4:l6(n)?(t.state=10,t.acceptStateReached=!0):As(e,t)}function Nmt(e,t,n,i){i===47?(t.state=10,t.acceptStateReached=!0):yg(i)?(t.state=5,t.acceptStateReached=!0):e.removeMachine(t)}function Ymt(e,t,n){n===47?t.state=12:e.removeMachine(t)}function wmt(e,t,n){yg(n)?t.state=5:e.removeMachine(t)}function Mmt(e,t,n){n===46?t.state=7:n===45?t.state=6:n===58?t.state=8:DO(n)?t.state=10:UO(n)||As(e,t)}function kmt(e,t,n,i){i===45||(i===46?As(e,t):yg(i)?t.state=5:As(e,t))}function Umt(e,t,n,i){i===46?As(e,t):yg(i)?(t.state=5,t.acceptStateReached=!0):As(e,t)}function Dmt(e,t,n){n===46?t.state=14:n===58?t.state=8:na(n)||(DO(n)?t.state=10:Wf(n)?e.removeMachine(t):As(e,t))}function Omt(e,t,n){na(n)?(t.octetsEncountered++,t.octetsEncountered===4&&(t.acceptStateReached=!0),t.state=13):As(e,t)}function Bmt(e,t,n){na(n)?t.state=9:As(e,t)}function zmt(e,t,n){na(n)||(DO(n)?t.state=10:As(e,t))}function Hmt(e,t,n){l6(n)||As(e,t)}function Kmt(e,t,n,i){n.toLowerCase()==="a"?t.state=16:MS(e,t,i)}function Jmt(e,t,n,i){n.toLowerCase()==="i"?t.state=17:MS(e,t,i)}function jmt(e,t,n,i){n.toLowerCase()==="l"?t.state=18:MS(e,t,i)}function Qmt(e,t,n,i){n.toLowerCase()==="t"?t.state=19:MS(e,t,i)}function qmt(e,t,n,i){n.toLowerCase()==="o"?t.state=20:MS(e,t,i)}function $mt(e,t,n){n===58?t.state=21:MS(e,t,n)}function eht(e,t,n){OO(n)?t.state=22:e.removeMachine(t)}function MS(e,t,n){n===46?t.state=23:n===64?t.state=24:OO(n)?t.state=22:e.removeMachine(t)}function tht(e,t,n){n===46||n===64?e.removeMachine(t):OO(n)?t.state=22:e.removeMachine(t)}function nht(e,t,n){yg(n)?t.state=25:e.removeMachine(t)}function iht(e,t,n){n===46?t.state=27:n===45?t.state=26:UO(n)||As(e,t)}function oht(e,t,n){n===45||n===46?As(e,t):UO(n)?t.state=25:As(e,t)}function rht(e,t,n){n===46||n===45?As(e,t):yg(n)?(t.state=25,t.acceptStateReached=!0):As(e,t)}function sht(e,t,n){m6(n)?(t.state=29,t.acceptStateReached=!0):e.removeMachine(t)}function aht(e,t,n){m6(n)||As(e,t)}function cht(e,t,n){h6(n)?(t.state=31,t.acceptStateReached=!0):e.removeMachine(t)}function lht(e,t,n){h6(n)||(Wf(n)?e.removeMachine(t):As(e,t))}function dht(e,t,n,i){na(i)?t.state=38:(e.removeMachine(t),zO(e,n,i))}function uht(e,t,n,i){na(i)?t.state=33:e.removeMachine(t),zO(e,n,i)}function mht(e,t,n){na(n)?t.state=34:e.removeMachine(t)}function hht(e,t,n){na(n)?t.state=35:e.removeMachine(t)}function fht(e,t,n){n===41?t.state=36:e.removeMachine(t)}function pht(e,t,n,i){na(i)?t.state=38:f6(i)?t.state=39:e.removeMachine(t)}function bht(e,t,n,i){var o=e.charIdx;t.acceptStateReached=!0,BO(i)?t.state=40:i===35?t.state=41:na(i)||(i===40?t.state=32:f6(i)?t.state=39:(As(e,t),u1(i)&&e.addMachine(HO(o,0))))}function ght(e,t,n,i){na(i)?t.state=38:i===40?t.state=32:(As(e,t),zO(e,n,i))}function yht(e,t,n){BO(n)||(n===35?t.state=41:na(n)?t.state=38:As(e,t))}function xht(e,t,n){BO(n)?t.state=40:na(n)?e.removeMachine(t):As(e,t)}function As(e,t){var n=e.matches,i=e.text,o=e.charIdx,r=e.tagBuilder,s=e.stripPrefix,a=e.stripTrailingSlash,c=e.decodePercentEncoding,d=e.hashtagServiceName,u=e.mentionServiceName;if(e.removeMachine(t),!!t.acceptStateReached){var h=t.startIdx,p=i.slice(t.startIdx,o);switch(p=_ht(p),t.type){case 0:{var b=i.charCodeAt(t.startIdx-1);if(b===64)return;switch(t.matchType){case 0:{var f=a6.exec(p);if(f&&(h=h+f.index,p=p.slice(f.index)),!KTe(p))return;break}case 1:{if(!JTe(p))return;break}case 2:{if(!jTe(p))return;break}default:Lf(t)}n.push(new QTe({tagBuilder:r,matchedText:p,offset:h,urlMatchType:Tht(t.matchType),url:p,protocolRelativeMatch:p.slice(0,2)==="//",stripPrefix:s,stripTrailingSlash:a,decodePercentEncoding:c}));break}case 1:{$Te(p)&&n.push(new e_e({tagBuilder:r,matchedText:p,offset:h,email:p.replace(qTe,"")}));break}case 2:{t_e(p)&&n.push(new i_e({tagBuilder:r,matchedText:p,offset:h,serviceName:d,hashtag:p.slice(1)}));break}case 3:{o_e(p,u)&&n.push(new s_e({tagBuilder:r,matchedText:p,offset:h,serviceName:u,mention:p.slice(1)}));break}case 4:{if(p=p.replace(/ +$/g,""),a_e(p)){var y=p.replace(/[^0-9,;#]/g,"");n.push(new c_e({tagBuilder:r,matchedText:p,offset:h,number:y,plusSign:p.charAt(0)==="+"}))}break}default:Lf(t)}}}function Tht(e){switch(e){case 0:return"scheme";case 1:return"tld";case 2:return"ipV4";default:Lf(e)}}var l_e={")":"(","}":"{","]":"["};function _ht(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n),o=e.charCodeAt(n);BTe(o)?t[i]++:s6(o)&&t[l_e[i]]--}for(var r=e.length-1;r>=0;){var i=e.charAt(r),o=e.charCodeAt(r);if(s6(o)){var s=l_e[i];if(t[s]<0)t[s]++,r--;else break}else if(kO(o))r--;else break}return e.slice(0,r+1)}function HO(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:0}}function b6(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:1}}function Sht(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:2,octetsEncountered:1}}function Aht(e,t){return{type:1,startIdx:e,state:t,acceptStateReached:!1}}function Zht(e,t){return{type:2,startIdx:e,state:t,acceptStateReached:!1}}function Cht(e,t){return{type:3,startIdx:e,state:t,acceptStateReached:!1}}function p6(e,t){return{type:4,startIdx:e,state:t,acceptStateReached:!1}}function d_e(e){return e.type===0&&e.matchType===0}var hYi=x(T());var Hp=(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})(),y6=new Hp,Vht=(function(){function e(t,n){this.charIdx=0,this.state=0,this.currentDataIdx=0,this.currentTag=y6,this.html=t,this.callbacks=n}return e})();function m_e(e,t){for(var n=new Vht(e,t),i=e.length;n.charIdx<i;){var o=e.charAt(n.charIdx),r=e.charCodeAt(n.charIdx);switch(n.state){case 0:Rht(n,o);break;case 1:Eht(n,o,r);break;case 2:Lht(n,o,r);break;case 3:Ght(n,o,r);break;case 4:Wht(n,o,r);break;case 5:vht(n,o,r);break;case 6:Fht(n,o,r);break;case 7:Iht(n,o,r);break;case 8:Pht(n,o);break;case 9:Xht(n,o);break;case 10:Nht(n,o,r);break;case 11:Yht(n,o,r);break;case 12:wht(n,o);break;case 13:Mht(n);break;case 14:kht(n,o);break;case 15:Uht(n,o);break;case 16:Dht(n,o);break;case 17:Oht(n,o);break;case 18:Bht(n,o);break;case 19:zht(n,o);break;case 20:Hht(n,o);break;default:Lf(n.state)}n.charIdx++}n.currentDataIdx<n.charIdx&&Kht(n)}function Rht(e,t){t==="<"&&Kp(e)}function Eht(e,t,n){t==="!"?e.state=13:t==="/"?(e.state=2,e.currentTag=new Hp(ta(ta({},e.currentTag),{isClosing:!0}))):t==="<"?Kp(e):gg(n)?(e.state=3,e.currentTag=new Hp(ta(ta({},e.currentTag),{isOpening:!0}))):(e.state=0,e.currentTag=y6)}function Ght(e,t,n){Rx(n)?(e.currentTag=new Hp(ta(ta({},e.currentTag),{name:g6(e)})),e.state=4):t==="<"?Kp(e):t==="/"?(e.currentTag=new Hp(ta(ta({},e.currentTag),{name:g6(e)})),e.state=12):t===">"?(e.currentTag=new Hp(ta(ta({},e.currentTag),{name:g6(e)})),Jp(e)):!gg(n)&&!na(n)&&t!==":"&&nh(e)}function Lht(e,t,n){t===">"?nh(e):gg(n)?e.state=3:nh(e)}function Wht(e,t,n){Rx(n)||(t==="/"?e.state=12:t===">"?Jp(e):t==="<"?Kp(e):t==="="||MO(n)||UTe(n)?nh(e):e.state=5)}function vht(e,t,n){Rx(n)?e.state=6:t==="/"?e.state=12:t==="="?e.state=7:t===">"?Jp(e):t==="<"?Kp(e):MO(n)&&nh(e)}function Fht(e,t,n){Rx(n)||(t==="/"?e.state=12:t==="="?e.state=7:t===">"?Jp(e):t==="<"?Kp(e):MO(n)?nh(e):e.state=5)}function Iht(e,t,n){Rx(n)||(t==='"'?e.state=8:t==="'"?e.state=9:/[>=`]/.test(t)?nh(e):t==="<"?Kp(e):e.state=10)}function Pht(e,t){t==='"'&&(e.state=11)}function Xht(e,t){t==="'"&&(e.state=11)}function Nht(e,t,n){Rx(n)?e.state=4:t===">"?Jp(e):t==="<"&&Kp(e)}function Yht(e,t,n){Rx(n)?e.state=4:t==="/"?e.state=12:t===">"?Jp(e):t==="<"?Kp(e):(e.state=4,Jht(e))}function wht(e,t){t===">"?(e.currentTag=new Hp(ta(ta({},e.currentTag),{isClosing:!0})),Jp(e)):nh(e)}function Mht(e){var t=e.html,n=e.charIdx;t.slice(n,n+2)==="--"?(e.charIdx++,e.currentTag=new Hp(ta(ta({},e.currentTag),{type:"comment"})),e.state=14):t.slice(n,n+7).toUpperCase()==="DOCTYPE"?(e.charIdx+=6,e.currentTag=new Hp(ta(ta({},e.currentTag),{type:"doctype"})),e.state=20):nh(e)}function kht(e,t){t==="-"?e.state=15:t===">"?nh(e):e.state=16}function Uht(e,t){t==="-"?e.state=18:t===">"?nh(e):e.state=16}function Dht(e,t){t==="-"&&(e.state=17)}function Oht(e,t){t==="-"?e.state=18:e.state=16}function Bht(e,t){t===">"?Jp(e):t==="!"?e.state=19:t==="-"||(e.state=16)}function zht(e,t){t==="-"?e.state=17:t===">"?Jp(e):e.state=16}function Hht(e,t){t===">"?Jp(e):t==="<"&&Kp(e)}function nh(e){e.state=0,e.currentTag=y6}function Kp(e){e.state=1,e.currentTag=new Hp({idx:e.charIdx})}function Jp(e){var t=e.html.slice(e.currentDataIdx,e.currentTag.idx);t&&e.callbacks.onText(t,e.currentDataIdx);var n=e.currentTag;n.type==="comment"?e.callbacks.onComment(n.idx):n.type==="doctype"?e.callbacks.onDoctype(n.idx):(n.isOpening&&e.callbacks.onOpenTag(n.name,n.idx),n.isClosing&&e.callbacks.onCloseTag(n.name,n.idx)),nh(e),e.currentDataIdx=e.charIdx+1}function Kht(e){var t=e.html.slice(e.currentDataIdx,e.charIdx);e.callbacks.onText(t,e.currentDataIdx),e.currentDataIdx=e.charIdx+1}function g6(e){var t=e.currentTag.idx+(e.currentTag.isClosing?2:1);return e.html.slice(t,e.charIdx).toLowerCase()}function Jht(e){e.charIdx--}var jht=(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=Qht(t.urls),this.email=Pu(t.email)?t.email:this.email,this.phone=Pu(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=Pu(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=qht(t.stripPrefix),this.stripTrailingSlash=Pu(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=Pu(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&r_e.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&n_e.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=$ht(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 m_e(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var c=/( | |<|<|>|>|"|"|')/gi,d=s.split(c),u=a;d.forEach(function(h,p){if(p%2===0){var b=n.parseText(h,u);r.push.apply(r,FTe([],vTe(b),!1))}u+=h.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(){},onDoctype:function(){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort(eft);for(var n=0;n<t.length-1;){var i=t[n],o=i.getOffset(),r=i.getMatchedText().length;if(n+1<t.length&&t[n+1].getOffset()===o){var s=t[n+1].getMatchedText().length>r?n:n+1;t.splice(s,1);continue}n++}return t},e.prototype.removeUnwantedMatches=function(t){return this.hashtag||Vx(t,function(n){return n.getType()==="hashtag"}),this.email||Vx(t,function(n){return n.getType()==="email"}),this.phone||Vx(t,function(n){return n.getType()==="phone"}),this.mention||Vx(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||Vx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||Vx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||Vx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n=n||0;for(var i=u_e(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,"<").replace(/>/g,">"));for(var n=this.parse(t),i=new Array(n.length*2+1),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 wO)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new kTe({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=ITe,e})(),h_e=jht;function Qht(e){return e==null&&(e=!0),Pu(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:Pu(e.schemeMatches)?e.schemeMatches:!0,tldMatches:Pu(e.tldMatches)?e.tldMatches:!0,ipV4Matches:Pu(e.ipV4Matches)?e.ipV4Matches:!0}}function qht(e){return e==null&&(e=!0),Pu(e)?{scheme:e,www:e}:{scheme:Pu(e.scheme)?e.scheme:!0,www:Pu(e.www)?e.www:!0}}function $ht(e){return typeof e=="number"?{length:e,location:"end"}:ta({length:Number.POSITIVE_INFINITY,location:"end"},e)}function eft(e,t){return e.getOffset()-t.getOffset()}var RYi=x(T());var CYi=x(T());var XYi=x(T());var KO=h_e;var S_e;typeof DOMParser<"u"&&(S_e=new DOMParser);var tft=new KO({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),JO=32,f_e=2414016,p_e=1,b_e=16093e3,g_e=.1,nft=[null,void 0,"http://www.topografix.com/GPX/1/1"],qo={gpx:nft};function ift(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 x6(e,t){let n=XN(e,"id");return n=l(n)?n:qn(),t.getOrCreateEntity(n)}function T6(e){let t=y_e(e,"lon"),n=y_e(e,"lat"),i=IN(e,"ele",qo.gpx);return m.fromDegrees(t,n,i)}function y_e(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 XN(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Ex(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 _6(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 IN(e,t,n){let i=Ex(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Md(e,t,n){let i=Ex(e,t,n);if(l(i))return i.textContent.trim()}function A_e(e){let t=new Hc;return t.width=JO,t.height=JO,t.scaleByDistance=new Dt(f_e,p_e,b_e,g_e),t.pixelOffsetScaleByDistance=new Dt(f_e,p_e,b_e,g_e),t.verticalOrigin=new hi(Jn.BOTTOM),t.image=e,t}function oft(){let e=new Nh;return e.translucencyByDistance=new Dt(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Yi.LEFT,e.font="16px sans-serif",e.style=ur.FILL_AND_OUTLINE,e}function Z_e(e){let t=new Jc;return t.width=4,t.material=new hx,t.material.color=l(e)?e:U.RED,t.material.outlineWidth=2,t.material.outlineColor=U.BLACK,t}var x_e={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"}},PN;typeof document<"u"&&(PN=document.createElement("div"));function S6(e,t){let n,i="",o=Object.keys(x_e),r=o.length;for(n=0;n<r;n++){let u=o[n],h=x_e[u];h.value=Md(e,h.tag,qo.gpx)??"",l(h.value)&&h.value!==""&&(i=`${i}<p>${h.text}: ${h.value}</p>`)}if(!l(i)||i==="")return;i=tft.link(i),PN.innerHTML=i;let s=PN.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+=`${PN.innerHTML}</div>`,PN.innerHTML="",d}function C_e(e,t,n,i){let o=T6(t),r=x6(t,n);r.position=o;let s=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,JO);r.billboard=A_e(s);let a=Md(t,"name",qo.gpx);r.name=a,r.label=oft(),r.label.text=a,r.description=S6(t,r),i.clampToGround&&(r.billboard.heightReference=tt.CLAMP_TO_GROUND,r.label.heightReference=tt.CLAMP_TO_GROUND)}function rft(e,t,n,i){let o=x6(t,n);o.description=S6(t,o);let r=_6(t,"rtept",qo.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)C_e(e,r[a],n,i),s[a]=T6(r[a]);o.polyline=Z_e(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function sft(e,t,n,i){let o=x6(t,n);o.description=S6(t,o);let r=_6(t,"trkseg",qo.gpx),s=[],a=[],c,d=!0,u=new dc;for(let h=0;h<r.length;h++)c=aft(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,JO);o.billboard=A_e(h),o.position=u,i.clampToGround&&(o.billboard.heightReference=tt.CLAMP_TO_GROUND),o.availability=new Ts,o.availability.addInterval(new vn({start:a[0],stop:a[a.length-1]}))}o.polyline=Z_e(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function aft(e){let t={positions:[],times:[]},n=_6(e,"trkpt",qo.gpx),i;for(let o=0;o<n.length;o++){let r=T6(n[o]);t.positions.push(r),i=Md(n[o],"time",qo.gpx),l(i)&&t.times.push(Q.fromIso8601(i))}return t}function cft(e){let t=Ex(e,"metadata",qo.gpx);if(l(t)){let n={name:Md(t,"name",qo.gpx),desc:Md(t,"desc",qo.gpx),author:lft(t),copyright:uft(t),link:V_e(t),time:Md(t,"time",qo.gpx),keywords:Md(t,"keywords",qo.gpx),bounds:mft(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 lft(e){let t=Ex(e,"author",qo.gpx);if(l(t)){let n={name:Md(t,"name",qo.gpx),email:dft(t),link:V_e(t)};if(l(n.name)||l(n.email)||l(n.link))return n}}function dft(e){let t=Ex(e,"email",qo.gpx);if(l(t)){let n=Md(t,"id",qo.gpx),i=Md(t,"domain",qo.gpx);return`${n}@${i}`}}function V_e(e){let t=Ex(e,"link",qo.gpx);if(l(t)){let n={href:XN(t,"href"),text:Md(t,"text",qo.gpx),mimeType:Md(t,"type",qo.gpx)};if(l(n.href)||l(n.text)||l(n.mimeType))return n}}function uft(e){let t=Ex(e,"copyright",qo.gpx);if(l(t)){let n={author:XN(t,"author"),year:Md(t,"year",qo.gpx),license:Md(t,"license",qo.gpx)};if(l(n.author)||l(n.year)||l(n.license))return n}}function mft(e){let t=Ex(e,"bounds",qo.gpx);if(l(t)){let n={minLat:IN(t,"minlat",qo.gpx),maxLat:IN(t,"maxlat",qo.gpx),minLon:IN(t,"minlon",qo.gpx),maxLon:IN(t,"maxlon",qo.gpx)};if(l(n.minLat)||l(n.maxLat)||l(n.minLon)||l(n.maxLon))return n}}var T_e={wpt:C_e,rte:rft,trk:sft};function hft(e,t,n,i){let o=Object.keys(T_e),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=T_e[a],d=t.childNodes,u=d.length;for(let h=0;h<u;h++){let p=d[h];p.localName===a&&qo.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function __e(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=XN(o,"version"),s=XN(o,"creator"),a,c=cft(o);l(c)&&(a=c.name),o.localName==="gpx"?hft(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let d,u=i.computeAvailability(),h=u.start,p=u.stop,b=Q.equals(h,Je.MINIMUM_VALUE),f=Q.equals(p,Je.MAXIMUM_VALUE);if(!b||!f){let _;b&&(_=new Date,_.setHours(0,0,0,0),h=Q.fromDate(_)),f&&(_=new Date,_.setHours(24,0,0,0),p=Q.fromDate(_)),d=new _f,d.startTime=h,d.stopTime=p,d.currentTime=Q.clone(h),d.clockRange=Ss.LOOP_STOP,d.clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER,d.multiplier=Math.round(Math.min(Math.max(Q.secondsDifference(p,h)/60,1),31556900))}let y=!1;return e._name!==a&&(e._name=a,y=!0),e._creator!==s&&(e._creator=s,y=!0),fft(e._metadata,c)&&(e._metadata=c,y=!0),e._version!==r&&(e._version=r,y=!0),d!==e._clock&&(y=!0,e._clock=d),y&&e._changed.raiseEvent(e),_s.setLoading(e,!1),e}function fft(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 pft(e,t,n,i){i=i??B.EMPTY_OBJECT;let o=n;if(typeof n=="string"||n instanceof We){n=We.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?ift(r).then(function(s){let a,c;try{a=S_e.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 ue(d)}return __e(e,a,i)}):__e(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function m1(){this._changed=new _e,this._error=new _e,this._loading=new _e,this._clock=void 0,this._entityCollection=new wa(this),this._entityCluster=new Vu,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new bg}m1.load=function(e,t){return new m1().load(e,t)};Object.defineProperties(m1.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}}});m1.prototype.update=function(e){return!0};m1.prototype.load=function(e,t){if(!l(e))throw new fe("data is required.");t=t??B.EMPTY_OBJECT,_s.setLoading(this,!0);let n=this._name,i=this;return pft(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=Q.equals(s,Je.MINIMUM_VALUE),d=Q.equals(a,Je.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 _f,o.startTime=s,o.stopTime=a,o.currentTime=Q.clone(s),o.clockRange=Ss.LOOP_STOP,o.clockStep=Yo.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),_s.setLoading(i,!1),i}).catch(function(o){return _s.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var NN=m1;var Ewi=x(T(),1);function bft(e,t){this.position=e,this.headingPitchRoll=t}var YN=bft;var UUi=x(T(),1);var AY=x($d(),1);var Q9i=x(T(),1);var V9i=x(T(),1);var Fwi=x(T(),1);var Lwi=x(T(),1);var A6=new Date(2107,11,31),Z6=new Date(1980,0,1),Ot=void 0,kS=1/0,Xu="undefined",Nu="function",R_e="object";var gft=64,E_e=2;try{typeof navigator!=Xu&&navigator.hardwareConcurrency&&(E_e=navigator.hardwareConcurrency)}catch{}var yft={workerURI:"./core/web-worker-wasm.js",wasmURI:"./core/streams/zlib-wasm/zlib-streams.wasm",chunkSize:64*1024,maxWorkers:E_e,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,CompressionStream:typeof CompressionStream!=Xu&&CompressionStream,DecompressionStream:typeof DecompressionStream!=Xu&&DecompressionStream},G_e=Object.assign({},yft);function wN(){return G_e}function jO(e){return Math.max(e.chunkSize,gft)}function jp(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;ih("baseURI",t),ih("wasmURI",p),ih("workerURI",h),ih("chunkSize",n),ih("maxWorkers",i),ih("terminateWorkerTimeout",o),ih("useCompressionStream",r),ih("useWebWorkers",s),ih("CompressionStream",a),ih("DecompressionStream",c),ih("CompressionStreamZlib",d),ih("DecompressionStreamZlib",u)}function ih(e,t){t!==Ot&&(G_e[e]=t)}var $Mi=x(T(),1);var jMi=x(T(),1);var VMi=x(T(),1);var gMi=x(T(),1);var hMi=x(T(),1);var Ywi=x(T(),1);var Pwi=x(T(),1),L_e=[];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;L_e[e]=t}var xg=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^L_e[(n^t[i])&255];this.crc=n}get(){return~this.crc}};var MN=class extends TransformStream{constructor(){let t,n=new xg;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 iMi=x(T(),1);var kwi=x(T(),1);function h1(e){if(typeof TextEncoder==Xu){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 Dwi=x(T(),1),id={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=id.getPartial(n);return i===32?e.concat(t):id._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+id.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]=id.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=id.getPartial(o);return i.push(id.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},kN={bytes:{fromBits(e){let n=id.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(id.partial(8*(n&3),i)),t}}},W_e={};W_e.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=kN.utf8String.toBits(e));let n=t._buffer=id.concat(t._buffer,e),i=t._length,o=t._length=i+id.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=id.concat(t,[id.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 C6={};C6.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,b=o[h]*257^h*16843008;for(let f=0;f<4;f++)e[f][u]=b=b<<24^b>>>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],b=e[2]^n[2],f=e[t?1:3]^n[3],y=4,_,S,A;for(let Z=0;Z<i;Z++)_=s[h>>>24]^a[p>>16&255]^c[b>>8&255]^d[f&255]^n[y],S=s[p>>>24]^a[b>>16&255]^c[f>>8&255]^d[h&255]^n[y+1],A=s[b>>>24]^a[f>>16&255]^c[h>>8&255]^d[p&255]^n[y+2],f=s[f>>>24]^a[h>>16&255]^c[p>>8&255]^d[b&255]^n[y+3],y+=4,h=_,p=S,b=A;for(let Z=0;Z<4;Z++)o[t?3&-Z:Z]=u[h>>>24]<<24^u[p>>16&255]<<16^u[b>>8&255]<<8^u[f&255]^n[y++],_=h,h=p,p=b,b=f,f=_;return o}};var v_e={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}},V6={};V6.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=id.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 id.clamp(t,o)}};var Gx={importKey(e){return new Gx.hmacSha1(kN.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,b=id;for(t=kN.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(b.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)}};Gx.hmacSha1=class{constructor(e){let t=this,n=t._hash=W_e.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 Qwi=x(T(),1);var xft=typeof crypto!=Xu&&typeof crypto.getRandomValues==Nu,Tg="Invalid password",Lx="Invalid signature",_g="zipjs-abort-check-password";function QO(e){return xft?crypto.getRandomValues(e):v_e.getRandomValues(e)}var f1=16,Tft="raw",P_e={name:"PBKDF2"},_ft={name:"HMAC"},Sft="SHA-1",Aft=Object.assign({hash:_ft},P_e),R6=Object.assign({iterations:1e3,hash:{name:Sft}},P_e),Zft=["deriveBits"],DN=[8,12,16],UN=[16,24,32],Wx=10,Cft=[0,0,0,0],eB=typeof crypto!=Xu,zN=eB&&crypto.subtle,X_e=eB&&typeof zN!=Xu,Qp=kN.bytes,Vft=C6.aes,Rft=V6.ctrGladman,Eft=Gx.hmacSha1,F_e=eB&&X_e&&typeof zN.importKey==Nu,I_e=eB&&X_e&&typeof zN.deriveBits==Nu,qO=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:w_e(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 Gft(c,u,d,oh(s,0,DN[u]+2)),s=oh(s,DN[u]+2),r?a.error(new Error(_g)):h()):await p;let b=new Uint8Array(s.length-Wx-(s.length-Wx)%f1);a.enqueue(N_e(c,s,b,0,Wx,!0))},async flush(s){let{signed:a,ctr:c,hmac:d,pending:u,ready:h}=this;if(d&&c){await h;let p=oh(u,0,u.length-Wx),b=oh(u,u.length-Wx),f=new Uint8Array;if(p.length){let y=BN(Qp,p);d.update(y);let _=c.update(y);f=ON(Qp,_)}if(a){let y=oh(ON(Qp,d.digest()),0,Wx);for(let _=0;_<Wx;_++)if(y[_]!=b[_])throw new Error(Lx)}s.enqueue(f)}}})}},$O=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:w_e(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 Lft(a,d,c),u()):await h;let b=new Uint8Array(p.length+r.length-r.length%f1);b.set(p,0),s.enqueue(N_e(a,r,b,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(BN(Qp,c));a.update(h),u=ON(Qp,h)}o.signature=ON(Qp,a.digest()).slice(0,Wx),r.enqueue(E6(u,o.signature))}}}),o=this}};function N_e(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:c}=e,d=t.length-o;c.length&&(t=E6(c,t),n=Fft(n,d-d%f1));let u;for(u=0;u<=d-f1;u+=f1){let h=BN(Qp,oh(t,u,u+f1));r&&a.update(h);let p=s.update(h);r||a.update(p),n.set(ON(Qp,p),u+i)}return e.pending=oh(t,u),n}async function Gft(e,t,n,i){let o=await Y_e(e,t,n,oh(i,0,DN[t])),r=oh(i,DN[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(Tg)}async function Lft(e,t,n){let i=QO(new Uint8Array(DN[t])),o=await Y_e(e,t,n,i);return E6(i,o)}async function Y_e(e,t,n,i){e.password=null;let o=await Wft(Tft,n,Aft,!1,Zft),r=await vft(Object.assign({salt:i},R6),o,8*(UN[t]*2+2)),s=new Uint8Array(r),a=BN(Qp,oh(s,0,UN[t])),c=BN(Qp,oh(s,UN[t],UN[t]*2)),d=oh(s,UN[t]*2);return Object.assign(e,{keys:{key:a,authentication:c,passwordVerification:d},ctr:new Rft(new Vft(a),Array.from(Cft)),hmac:new Eft(c)}),d}async function Wft(e,t,n,i,o){if(F_e)try{return await zN.importKey(e,t,n,i,o)}catch{return F_e=!1,Gx.importKey(t)}else return Gx.importKey(t)}async function vft(e,t,n){if(I_e)try{return await zN.deriveBits(e,t,n)}catch{return I_e=!1,Gx.pbkdf2(t,e.salt,R6.iterations,n)}else return Gx.pbkdf2(t,e.salt,R6.iterations,n)}function w_e(e,t){return t===Ot?h1(e):t}function E6(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 Fft(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function oh(e,t,n){return e.subarray(t,n)}function ON(e,t){return e.fromBits(t)}function BN(e,t){return e.toBits(t)}var aMi=x(T(),1);var HN=12,tB=class extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),D_e(this,t)},transform(o,r){let s=this;if(s.password){let a=M_e(s,o.subarray(0,HN));if(s.password=null,a.at(-1)!=s.passwordVerification)throw new Error(Tg);o=o.subarray(HN)}i?r.error(new Error(_g)):r.enqueue(M_e(s,o))}})}},nB=class extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),D_e(this,t)},transform(i,o){let r=this,s,a;if(r.password){r.password=null;let c=QO(new Uint8Array(HN));c[HN-1]=r.passwordVerification,s=new Uint8Array(i.length+c.length),s.set(k_e(r,c),0),a=HN}else s=new Uint8Array(i.length),a=0;s.set(k_e(r,i),a),o.enqueue(s)}})}};function M_e(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=O_e(e)^t[i],G6(e,n[i]);return n}function k_e(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=O_e(e)^t[i],G6(e,t[i]);return n}function D_e(e,t){let n=[305419896,591751049,878082192];Object.assign(e,{keys:n,crcKey0:new xg(n[0]),crcKey2:new xg(n[2])});for(let i=0;i<t.length;i++)G6(e,t.charCodeAt(i))}function G6(e,t){let[n,i,o]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=U_e(Math.imul(U_e(i+B_e(n)),134775813)+1),e.crcKey2.append([i>>>24]),o=~e.crcKey2.get(),e.keys=[n,i,o]}function O_e(e){let t=e.keys[2]|2;return B_e(Math.imul(t,t^1)>>>8)}function B_e(e){return e&255}function U_e(e){return e&4294967295}var p1="Invalid uncompressed size",Ift="deflate-raw",Pft="deflate64-raw",iB=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,b,f=super.readable;(!s||c)&&d&&(p=new MN,f=qp(f,p)),r&&(f=H_e(f,a,{level:u,chunkSize:n},o,i,o)),s&&(c?f=qp(f,new nB(t)):(b=new $O(t),f=qp(f,b))),z_e(h,f,()=>{let y;s&&!c&&(y=b.signature),(!s||c)&&d&&(y=new DataView(p.value.buffer).getUint32(0)),h.signature=y})}},oB=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,b,f=super.readable;s&&(r?f=qp(f,new tB(t)):(b=new qO(t),f=qp(f,b))),d&&(f=H_e(f,u,{chunkSize:n,deflate64:h},o,i,o)),(!s||r)&&a&&(p=new MN,f=qp(f,p)),z_e(this,f,()=>{if((!s||r)&&a){let y=new DataView(p.value.buffer);if(c!=y.getUint32(0,!1))throw new Error(Lx)}})}};function z_e(e,t,n){t=qp(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function H_e(e,t,n,i,o,r){let s=t&&i?i:o||r,a=n.deflate64?Pft:Ift;try{e=qp(e,new s(a,n))}catch(c){if(t)if(o)e=qp(e,new o(a,n));else if(r)e=qp(e,new r(a,n));else throw c;else throw c}return e}function qp(e,t){return e.pipeThrough(t)}var K_e="message",J_e="start",j_e="pull",L6="data",Q_e="ack",W6="close",aB="deflate",cB="inflate";var rB=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(aB)?r=iB:o.startsWith(cB)&&(r=oB),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!==Ot&&i.outputSize>t.outputSize))throw new Error(p1)},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)}})}},sB=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 _Mi=x(T(),1);var q_e={type:"module"},lB,v6,$_e,I6=!0;try{I6=typeof structuredClone==Nu&&structuredClone(new DOMException("","AbortError")).code!==Ot}catch{}var eSe=()=>{};function tSe({initModule:e}){eSe=e}var b1=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 sB(r.chunkSize)).pipeThrough(new P6(s),{signal:h}),writable:i,options:Object.assign({},o),workerURI:d,transferStreams:c,terminate(){return new Promise(p=>{let{worker:b,busy:f}=t;b?(f?t.resolveTerminated=p:(b.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)}}),lB===Ot&&(lB=typeof Worker!=Xu),(a&&lB?Xft:nSe)(t,r)}},P6=class extends TransformStream{constructor({onstart:t,onprogress:n,size:i,onend:o}){let r=0;super({async start(){t&&await F6(t,i)},async transform(s,a){r+=s.length,n&&await F6(n,r,i),a.enqueue(s)},async flush(){o&&await F6(o,r)}})}};async function F6(e,...t){try{await e(...t)}catch{}}function nSe(e,t){return{run:()=>Nft(e,t)}}function Xft(e,t){let{baseURI:n,chunkSize:i}=t,{wasmURI:o}=t;if(!e.interface){typeof o==Nu&&(o=o());let r;try{r=dB(e.workerURI,n,e)}catch{return lB=!1,nSe(e,t)}Object.assign(e,{worker:r,interface:{run:()=>Yft(e,{chunkSize:i,wasmURI:o,baseURI:n})}})}return e.interface}async function Nft({options:e,readable:t,writable:n,onTaskFinished:i},o){let r;try{if(!e.useCompressionStream)try{await eSe(o)}catch{e.useCompressionStream=!0}r=new rB(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 Yft(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}=wft(e.writable),d=uB({type:J_e,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 wft(e){let{writable:t,readable:n}=new TransformStream,i=n.pipeTo(e,{preventClose:!0});return{writable:t,closed:i}}function dB(e,t,n,i,o=!0){let r,s,a;if(v6===Ot){let c=typeof e==Nu;c?s=e(o):s=e;let d=s.startsWith("data:"),u=s.startsWith("blob:");if(d||u){i===Ot&&(i=!1),i&&(a=q_e);try{r=new Worker(s,a)}catch(h){if(u)try{URL.revokeObjectURL(s)}catch{}if(c&&u)return dB(e,t,n,i,!1);if(i)throw h;return dB(e,t,n,!0,!1)}}else{i===Ot&&(i=!0),i&&(a=q_e);try{s=new URL(s,t)}catch{}try{r=new Worker(s,a)}catch(h){if(i)throw h;return dB(e,t,n,!1,o)}}v6=s,$_e=a}else r=new Worker(v6,$_e);return r.addEventListener(K_e,c=>Mft(c,n)),r}function uB(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:o}){try{let{value:r,readable:s,writable:a}=e,c=[];if(r&&(e.value=r,c.push(e.value.buffer)),o&&I6?(s&&c.push(s),a&&c.push(a)):e.readable=e.writable=null,c.length)try{return t.postMessage(e,c),!0}catch{I6=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(r){throw n&&n.releaseLock(),i(),r}}async function Mft({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:b,stack:f,code:y,name:_,outputSize:S}=s,A=new Error(b);Object.assign(A,{stack:f,code:y,name:_,outputSize:S}),p(A)}else{if(n==j_e){let{value:b,done:f}=await a.read();uB({type:L6,value:b,done:f,messageId:o},t)}n==L6&&(await c.ready,await c.write(new Uint8Array(i)),uB({type:Q_e,messageId:o},t)),n==W6&&p(null,r)}}catch(b){uB({type:W6,messageId:o},t),p(b)}function p(b,f){b?u(b):d(f),c&&c.releaseLock(),h()}}var US=[],X6=[];var iSe=0;async function mB(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===Ot;let p=!a&&!c&&!d&&!t.transferStreams;return t.useWebWorkers=!p&&(r||r===Ot&&i.useWebWorkers),t.workerURI=t.useWebWorkers&&u?u:Ot,n.useCompressionStream=s||s===Ot&&i.useCompressionStream,(await b()).run();async function b(){let y=US.find(_=>!_.busy);if(y)return oSe(y),new b1(y,e,t,f);if(US.length<h){let _={indexWorker:iSe};return iSe++,US.push(_),new b1(_,e,t,f)}else return new Promise(_=>X6.push({resolve:_,stream:e,workerOptions:t}))}function f(y){if(X6.length){let[{resolve:_,stream:S,workerOptions:A}]=X6.splice(0,1);_(new b1(y,S,A,f))}else y.worker?(oSe(y),kft(y,t)):US=US.filter(_=>_!=y)}}function kft(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{US=US.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function oSe(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var WMi=x(T(),1);var Uft="Writer iterator completed too soon",Dft="Writer not initialized",Oft="text/plain";var Bft="Content-Type";var zft=64*1024,GMi=256*1024,N6="writable",g1=class{constructor(){this.size=0}init(){this.initialized=!0}},KN=class extends g1{get readable(){let t=this,{chunkSize:n=zft}=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===Ot?n:Math.min(n,s-c),u=await mc(t,r+c,d,a);o.enqueue(u),c+n>s||s===Ot&&!u.length&&d?o.close():this.chunkOffset+=n}});return i}},hB=class extends g1{constructor(){super();let t=this,n=new WritableStream({write(i){if(!t.initialized)throw new Error(Dft);return t.writeUint8Array(i)}});Object.defineProperty(t,N6,{get(){return n}})}writeUint8Array(){}};var JN=class extends hB{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)}},$p=class extends KN{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)}},y1=class extends g1{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([Bft,t]),Object.defineProperty(n,N6,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob()}getData(){return this.blob}},jN=class extends $p{constructor(t){super(new Blob([t],{type:Oft}))}},QN=class extends y1{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 fB=class extends KN{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 mc(d,c,n);else{let h=u-c;s=new Uint8Array(n);let p=await mc(d,c,h);s.set(p,0);let b=await o.readUint8Array(t+h,n-h,i);s.set(b,h),p.length+b.length<n&&(s=s.subarray(0,p.length+b.length))}}else s=new Uint8Array;return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},qN=class extends g1{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:b}=await t.next();if(b&&!p)throw new Error(Uft);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await t0(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){await s.ready,await d()}});Object.defineProperty(i,N6,{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()}}},DS=class{constructor(t){return Array.isArray(t)&&(t=new fB(t)),t instanceof ReadableStream&&(t={readable:t}),t}},x1=class{constructor(t){return t.writable===Ot&&typeof t.next==Nu&&(t=new qN(t)),t instanceof WritableStream&&(t={writable:t}),t.size===Ot&&(t.size=0),t instanceof qN||Object.assign(t,{diskNumber:0,diskOffset:0,availableSize:kS,maxSize:kS}),t}};async function t0(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function mc(e,t,n,i){return e.readUint8Array(t,n,i)}var XMi=x(T(),1);var FMi=x(T(),1),rSe="\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(""),Hft=rSe.length==256;function sSe(e){if(Hft){let t="";for(let n=0;n<e.length;n++)t+=rSe[e[n]];return t}else return new TextDecoder().decode(e)}function $N(e,t){return t&&t.trim().toLowerCase()=="cp437"?sSe(e):new TextDecoder(t).decode(e)}var YMi=x(T(),1),Y6="filename",w6="rawFilename",eY="comment",M6="rawComment",tY="uncompressedSize",k6="compressedSize",U6="offset",D6="diskNumberStart",T1="lastModDate",pB="rawLastModDate",nY="lastAccessDate",aSe="rawLastAccessDate",iY="creationDate",O6="rawCreationDate",B6="internalFileAttributes",z6="externalFileAttributes",H6="msdosAttributesRaw",K6="msdosAttributes",J6="msDosCompatible",bB="zip64",j6="encrypted",Q6="version",q6="versionMadeBy",$6="zipCrypto",oY="directory",eq="executable",tq="compressionMethod",nq="signature",iq="extraField",Kft="extraFieldInfoZip",Jft="extraFieldUnix";var oq="unixMode",rq="setuid",sq="setgid",aq="sticky",jft="bitFlag",Qft="filenameUTF8",qft="commentUTF8",$ft="rawExtraField",ept="extraFieldZip64",tpt="extraFieldUnicodePath",npt="extraFieldUnicodeComment",ipt="extraFieldAES",opt="extraFieldNTFS",rpt="extraFieldExtendedTimestamp",spt=[Y6,w6,tY,k6,T1,pB,eY,M6,nY,iY,O6,U6,D6,B6,z6,H6,K6,J6,bB,j6,Q6,q6,$6,oY,eq,tq,nq,iq,Jft,Kft,"uid","gid",oq,rq,sq,aq,jft,Qft,qft,$ft,ept,tpt,npt,ipt,opt,rpt],vx=class{constructor(t){spt.forEach(n=>this[n]=t[n])}};var MMi=x(T(),1),cSe="filenameEncoding",lSe="commentEncoding",dSe="decodeText",uSe="extractPrependedData",mSe="extractAppendedData",gB="password",yB="rawPassword",xB="passThrough",TB="signal",hSe="checkPasswordOnly",fSe="checkOverlappingEntryOnly",pSe="checkOverlappingEntry",bSe="checkSignature",_B="useWebWorkers",SB="useCompressionStream",AB="transferStreams",ZB="preventClose",gSe="encryptionStrength",ySe="extendedTimestamp",xSe="keepOrder",TSe="level",_Se="bufferedWrite",SSe="createTempStream",ASe="dataDescriptorSignature",ZSe="useUnicodeFileNames",CSe="dataDescriptor",VSe="supportZip64SplitFile",RSe="encodeText",cq="offset",lq="usdz",ESe="unixExtraFieldType";var CB="File format is not recognized",PSe="End of central directory not found",XSe="End of Zip64 central directory locator not found",NSe="Central directory header not found",YSe="Local file header not found",wSe="Zip64 extra field not found",MSe="File contains encrypted entry",kSe="Encryption method not supported",uq="Compression method not supported",mq="Split zip file",USe="Overlapping entry found",LSe="utf-8",dpt="UTF8",WSe="cp437",upt=[[tY,4294967295],[k6,4294967295],[U6,4294967295],[D6,65535]],mpt={65535:{getValue:wr,bytes:4},4294967295:{getValue:A1,bytes:8}},OS=class{constructor(t,n={}){Object.assign(this,{reader:new DS(t),options:n,config:wN(),readRanges:[]})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await t0(i),(i.size===Ot||!i.readUint8Array)&&(i=new $p(await new Response(i.readable).blob()),await t0(i)),i.size<22)throw new Error(CB);i.chunkSize=jO(o);let r=await ypt(i,101010256,i.size,22,65535*16);if(!r){let N=await mc(i,0,4),g=Mr(N);throw wr(g)==134695760?new Error(mq):new Error(PSe)}let s=Mr(r),a=wr(s,12),c=wr(s,16),d=r.offset,u=hc(s,20),h=d+22+u,p=hc(s,4),b=i.lastDiskNumber||0,f=hc(s,6),y=hc(s,8),_=0,S=0;if(c==4294967295||a==4294967295||y==65535||f==65535){let N=await mc(i,r.offset-20,20),g=Mr(N);if(wr(g,0)==117853008){c=A1(g,8);let C=await mc(i,c,56,-1),R=Mr(C),L=r.offset-20-56;if(wr(R,0)!=101075792&&c!=L){let P=c;c=L,c>P&&(_=c-P),C=await mc(i,c,56,-1),R=Mr(C)}if(wr(R,0)!=101075792)throw new Error(XSe);p==65535&&(p=wr(R,16)),f==65535&&(f=wr(R,20)),y==65535&&(y=A1(R,32)),a==4294967295&&(a=A1(R,40)),c-=a}}if(c>=i.size&&(_=i.size-c-a-22,c=i.size-a-22),b!=p)throw new Error(mq);if(c<0)throw new Error(CB);let A=0,Z=await mc(i,c,a,f),V=Mr(Z);if(a){let N=r.offset-a;if(wr(V,A)!=33639248&&c!=N){let g=c;c=N,c>g&&(_+=c-g),Z=await mc(i,c,a,f),V=Mr(Z)}}let E=r.offset-c-(i.lastDiskOffset||0);if(a!=E&&E>=0&&(a=E,Z=await mc(i,c,a,f),V=Mr(Z)),c<0||c>=i.size)throw new Error(CB);let G=Fc(n,t,cSe),v=Fc(n,t,lSe);for(let N=0;N<y;N++){let g=new hq(i,o,n.options);if(wr(V,A)!=33639248)throw new Error(NSe);DSe(g,V,A+6);let C=!!g.bitFlag.languageEncodingFlag,R=A+46,L=R+g.filenameLength,P=L+g.extraFieldLength,Y=hc(V,A+4),O=Y>>8==0,k=Y>>8==3,D=Z.subarray(R,L),w=hc(V,A+32),z=P+w,J=Z.subarray(P,z),ee=C,H=C,te=wr(V,A+38),$=te&255,pe={readOnly:!!($&1),hidden:!!($&2),system:!!($&4),directory:!!($&16),archive:!!($&32)},xe=wr(V,A+42)+_,le=Fc(n,t,dSe)||$N,Te=ee?LSe:G||WSe,Se=H?LSe:v||WSe,Ee=le(D,Te);Ee===Ot&&(Ee=$N(D,Te));let Ve=le(J,Se);Ve===Ot&&(Ve=$N(J,Se)),Object.assign(g,{versionMadeBy:Y,msDosCompatible:O,compressedSize:0,uncompressedSize:0,commentLength:w,offset:xe,diskNumberStart:hc(V,A+34),internalFileAttributes:hc(V,A+36),externalFileAttributes:te,msdosAttributesRaw:$,msdosAttributes:pe,rawFilename:D,filenameUTF8:ee,commentUTF8:H,rawExtraField:Z.subarray(L,P),rawComment:J,filename:Ee,comment:Ve}),S=Math.max(xe,S),OSe(g,g,V,A+6);let we=g.externalFileAttributes>>16&65535;g.unixMode===Ot&&(we&16877)!=0&&(g.unixMode=we);let ke=!!(g.unixMode&2048),nt=!!(g.unixMode&1024),bt=!!(g.unixMode&512),Rt=g.unixMode!==Ot?(g.unixMode&73)!=0:k&&(we&73)!=0,He=g.unixMode!==Ot&&(g.unixMode&61440)==16384,mt=(we&61440)==16384;Object.assign(g,{setuid:ke,setgid:nt,sticky:bt,unixExternalUpper:we,internalFileAttribute:g.internalFileAttributes,externalFileAttribute:g.externalFileAttributes,executable:Rt,directory:He||mt||O&&pe.directory||Ee.endsWith("/")&&!g.uncompressedSize,zipCrypto:g.encrypted&&!g.extraFieldAES});let it=new vx(g);it.getData=(jt,Cn)=>g.getData(jt,it,n.readRanges,Cn),it.arrayBuffer=async jt=>{let Cn=new TransformStream,[ct]=await Promise.all([new Response(Cn.readable).arrayBuffer(),g.getData(Cn,it,n.readRanges,jt)]);return ct},A=z;let{onprogress:rt}=t;if(rt)try{await rt(N+1,y,new vx(g))}catch{}yield it}let I=Fc(n,t,uSe),X=Fc(n,t,mSe);return I&&(n.prependedData=S>0?await mc(i,0,S):new Uint8Array),n.comment=u?await mc(i,d+22,u):new Uint8Array,X&&(n.appendedData=h<i.size?await mc(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 hq=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:b,signature:f,rawLastModDate:y,uncompressedSize:_,compressedSize:S}=r,{dataDescriptor:A}=b,Z=n.localDirectory={},V=await mc(s,a,30,c),E=Mr(V),G=Fc(r,o,gB),v=Fc(r,o,yB),I=Fc(r,o,xB);if(G=G&&G.length&&G,v=v&&v.length&&v,d&&d.originalCompressionMethod!=99)throw new Error(uq);if(h!=0&&h!=8&&h!=9&&!I)throw new Error(uq);if(wr(E,0)!=67324752)throw new Error(YSe);DSe(Z,E,4);let{extraFieldLength:X,filenameLength:N,lastAccessDate:g,creationDate:C}=Z;Z.rawExtraField=X?await mc(s,a+30+N,X,c):new Uint8Array,OSe(r,Z,E,4,!0),Object.assign(n,{lastAccessDate:g,creationDate:C});let R=r.encrypted&&Z.encrypted&&!I,L=R&&!d;if(I||(n.zipCrypto=L),R){if(!L&&d.strength===Ot)throw new Error(kSe);if(!G&&!v)throw new Error(MSe)}let P=a+30+N+X,Y=S,O=s.readable;Object.assign(O,{diskNumberStart:c,offset:P,size:Y});let k=Fc(r,o,TB),D=Fc(r,o,hSe),w=Fc(r,o,pSe),z=Fc(r,o,fSe);z&&(w=!0);let{onstart:J,onprogress:ee,onend:H}=o,te=h==9,$=Fc(r,o,SB);te&&($=!1);let pe={options:{codecType:cB,password:G,rawPassword:v,zipCrypto:L,encryptionStrength:d&&d.strength,signed:Fc(r,o,bSe)&&!I,passwordVerification:L&&(A?y>>>8&255:f>>>24&255),outputSize:I?S:_,signature:f,compressed:h!=0&&!I,encrypted:r.encrypted&&!I,useWebWorkers:Fc(r,o,_B),useCompressionStream:$,transferStreams:Fc(r,o,AB),deflate64:te,checkPasswordOnly:D},config:p,streamOptions:{signal:k,size:Y,onstart:J,onprogress:ee,onend:H}};w&&await gpt({reader:s,fileEntry:n,offset:a,diskNumberStart:c,signature:f,compressedSize:S,uncompressedSize:_,dataOffset:P,dataDescriptor:A||Z.bitFlag.dataDescriptor,extraFieldZip64:u||Z.extraFieldZip64,readRanges:i});let xe;try{if(!z){D&&(t=new WritableStream),t=new x1(t),await t0(t,I?S:_),{writable:xe}=t;let{outputSize:le}=await mB({readable:O,writable:xe},pe);if(t.size+=le,le!=(I?S:_))throw new Error(p1)}}catch(le){if(le.outputSize!==Ot&&(t.size+=le.outputSize),!D||le.message!=_g)throw le}finally{!Fc(r,o,ZB)&&xe&&!xe.locked&&await xe.getWriter().close()}return D||z?Ot:t.getData?t.getData():xe}};function DSe(e,t,n){let i=e.rawBitFlag=hc(t,n+2),o=(i&1)==1,r=wr(t,n+6);Object.assign(e,{encrypted:o,version:hc(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:xpt(r),filenameLength:hc(t,n+22),extraFieldLength:hc(t,n+24)})}function OSe(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=Mr(new Uint8Array(r)),c=0;try{for(;c<r.length;){let A=hc(a,c),Z=hc(a,c+2);s.set(A,{type:A,data:r.slice(c+4,c+4+Z)}),c+=4+Z}}catch{}let d=hc(n,i+4);Object.assign(t,{signature:wr(n,i+10),compressedSize:wr(n,i+14),uncompressedSize:wr(n,i+18)});let u=s.get(1);u&&(hpt(u,t),t.extraFieldZip64=u);let h=s.get(28789);h&&(vSe(h,Y6,w6,t,e),t.extraFieldUnicodePath=h);let p=s.get(25461);p&&(vSe(p,eY,M6,t,e),t.extraFieldUnicodeComment=p);let b=s.get(39169);b?(fpt(b,t,d),t.extraFieldAES=b):t.compressionMethod=d;let f=s.get(10);f&&(ppt(f,t),t.extraFieldNTFS=f);let y=s.get(30805);if(y)FSe(y,t,!1),t.extraFieldUnix=y;else{let A=s.get(30837);A&&(FSe(A,t,!0),t.extraFieldInfoZip=A)}let _=s.get(21589);_&&(bpt(_,t,o),t.extraFieldExtendedTimestamp=_);let S=s.get(6534);S&&(t.extraFieldUSDZ=S)}function hpt(e,t){t.zip64=!0;let n=Mr(e.data),i=upt.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=mpt[a];t[s]=e[s]=c.getValue(n,r),r+=c.bytes}else if(e[s])throw new Error(wSe)}}function vSe(e,t,n,i,o){let r=Mr(e.data),s=new xg;s.append(o[n]);let a=Mr(new Uint8Array(4));a.setUint32(0,s.get(),!0);let c=wr(r,1);Object.assign(e,{version:Ix(r,0),[t]:$N(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==wr(a,0)}),e.valid&&(i[t]=e[t],i[t+dpt]=!0)}function fpt(e,t,n){let i=Mr(e.data),o=Ix(i,4);Object.assign(e,{vendorVersion:Ix(i,0),vendorId:Ix(i,2),strength:o,originalCompressionMethod:n,compressionMethod:hc(i,5)}),t.compressionMethod=e.compressionMethod}function ppt(e,t){let n=Mr(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=hc(n,i),s=hc(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=Mr(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=dq(s),u=dq(a),h=dq(c),p={lastModDate:d,lastAccessDate:u,creationDate:h};Object.assign(e,p),Object.assign(t,p)}}catch{}}function FSe(e,t,n){try{let i=Mr(new Uint8Array(e.data)),o=0,r=Ix(i,o++),s=Ix(i,o++),a=e.data.subarray(o,o+s);o+=s;let c=ISe(a),d=Ix(i,o++),u=e.data.subarray(o,o+d);o+=d;let h=ISe(u),p=Ot;if(!n&&o+2<=e.data.length){let b=e.data;p=new DataView(b.buffer,b.byteOffset+o,2).getUint16(0,!0)}Object.assign(e,{version:r,uid:c,gid:h,unixMode:p}),c!==Ot&&(t.uid=c),h!==Ot&&(t.gid=h),p!==Ot&&(t.unixMode=p)}catch{}}function ISe(e){let t=new Uint8Array(4);return t.set(e,0),new DataView(t.buffer,t.byteOffset,4).getUint32(0,!0)}function bpt(e,t,n){let i=Mr(e.data),o=Ix(i,0),r=[],s=[];n?((o&1)==1&&(r.push(T1),s.push(pB)),(o&2)==2&&(r.push(nY),s.push(aSe)),(o&4)==4&&(r.push(iY),s.push(O6))):e.data.length>=5&&(r.push(T1),s.push(pB));let a=1;r.forEach((c,d)=>{if(e.data.length>=a+4){let u=wr(i,a);t[c]=e[c]=new Date(u*1e3);let h=s[d];e[h]=u}a+=4})}async function gpt({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 y=e.readers[f];h+=y.size}let p=0;if(c&&(d?p=20:p=12),p){let f=await mc(e,a+r,p+4,i);if(wr(Mr(f),0)==134695760){let _=wr(Mr(f),4),S,A;d?(S=A1(Mr(f),8),A=A1(Mr(f),16)):(S=wr(Mr(f),8),A=wr(Mr(f),12)),(t.encrypted&&!t.zipCrypto||_==o)&&S==r&&A==s&&(p+=4)}}let b={start:h+n,end:h+a+r+p,fileEntry:t};for(let f of u)if(f.fileEntry!=t&&b.start>=f.start&&b.start<f.end){let y=new Error(USe);throw y.overlappingEntry=f.fileEntry,y}u.push(b)}async function ypt(e,t,n,i,o){let r=new Uint8Array(4),s=Mr(r);Tpt(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 mc(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 Fc(e,t,n){return t[n]===Ot?e.options[n]:t[n]}function xpt(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 dq(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function Ix(e,t){return e.getUint8(t)}function hc(e,t){return e.getUint16(t,!0)}function wr(e,t){return e.getUint32(t,!0)}function A1(e,t){return Number(e.getBigUint64(t,!0))}function Tpt(e,t,n){e.setUint32(t,n,!0)}function Mr(e){return new DataView(e.buffer)}var h9i=x(T(),1);var d9i=x(T(),1);var QSe="File already exists",qSe="Zip file comment exceeds 64KB",$Se="File entry comment exceeds 64KB",eAe="File entry name exceeds 64KB",Wq="Version exceeds 65535",tAe="The strength must equal 1, 2, or 3",nAe="Extra field type exceeds 65535",iAe="Extra field data exceeds 64KB",vq="Zip64 is not supported (set the 'zip64' option to 'true')",oAe="Undefined uncompressed size",rAe="Zip file not empty",Ept="Invalid uid (must be integer 0..2^32-1)",Gpt="Invalid gid (must be integer 0..2^32-1)",Lpt="Invalid UNIX mode (must be integer 0..65535)",Wpt="Invalid unixExtraFieldType (must be 'infozip' or 'unix')",vpt="Invalid msdosAttributesRaw (must be integer 0..255)",Fpt="Invalid msdosAttributes (must be an object with boolean flags)",HSe=new Uint8Array([7,0,2,0,65,69,3,0,0]),sAe="infozip",aAe="unix",Gq=0,KSe=[],fY=class{constructor(t,n={}){t=new x1(t);let i=t.availableSize!==Ot&&t.availableSize>0&&t.availableSize!==kS&&t.maxSize!==Ot&&t.maxSize>0&&t.maxSize!==kS;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:wN(),files:new Map,filenames:new Set,offset:n[cq]===Ot?t.size||t.writable.size||0:n[cq],pendingEntriesSize:0,pendingAddFileCalls:new Set,bufferedWrites:0})}async prependZip(t){if(this.filenames.size)throw new Error(rAe);t=new DS(t);let n=new OS(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:b,compressedSize:f,diskOffset:y,diskNumber:_,zip64:S}=o,{rawExtraFieldZip64:A,rawExtraFieldAES:Z,rawExtraFieldExtendedTimestamp:V,rawExtraFieldNTFS:E,rawExtraFieldUnix:G,rawExtraField:v}=o,{level:I,languageEncodingFlag:X,dataDescriptor:N}=h;A=A||new Uint8Array,Z=Z||new Uint8Array,V=V||new Uint8Array,E=E||new Uint8Array,G=o.rawExtraFieldUnix||new Uint8Array,v=v||new Uint8Array;let g=Ni(A,Z,V,E,G,v),C=S&&b>4294967295,R=S&&f>4294967295,{headerArray:L,headerView:P}=cAe({version:r,bitFlag:lAe(I,X,N,p,s),compressionMethod:s,uncompressedSize:b,compressedSize:f,lastModDate:a,rawFilename:u,zip64CompressedSize:R,zip64UncompressedSize:C,extraFieldLength:g});return Object.assign(o,{zip64UncompressedSize:C,zip64CompressedSize:R,zip64Offset:S&&this.offset-y>4294967295,zip64DiskNumberStart:S&&_>65535,rawExtraFieldZip64:A,rawExtraFieldAES:Z,rawExtraFieldExtendedTimestamp:V,rawExtraFieldNTFS:E,rawExtraFieldUnix:G,rawExtraField:v,extendedTimestamp:V.length>0||E.length>0,extraFieldExtendedTimestampFlag:1+(c?2:0)+(d?4:0),headerArray:L,headerView:P}),[o.filename,o]}))}async add(t="",n,i={}){let o=this,{pendingAddFileCalls:r,config:s}=o;Gq<s.maxWorkers?Gq++:await new Promise(c=>KSe.push(c));let a;try{if(t=t.trim(),o.filenames.has(t))throw new Error(QSe);return o.filenames.add(t),a=Ipt(o,t,n,i),r.add(a),await a}catch(c){throw o.filenames.delete(t),c}finally{r.delete(a);let c=KSe.shift();c?c():Gq--}}remove(t){let{filenames:n,files:i}=this;if(typeof t=="string"&&(t=i.get(t)),t&&t.filename!==Ot){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 Dpt(i,t,n),Ti(i,n,ZB)||await s.getWriter().close(),r.getData?r.getData():s}};async function Ipt(e,t,n,i){t=t.trim();let o=Ti(e,i,J6),r=Ti(e,i,q6,o?20:768),s=Ti(e,i,eq),a=Ti(e,i,"uid"),c=Ti(e,i,"gid"),d=Ti(e,i,oq),u=Ti(e,i,ESe),h=Ti(e,i,rq),p=Ti(e,i,sq),b=Ti(e,i,aq);if(a!==Ot&&(a<0||a>4294967295))throw new Error(Ept);if(c!==Ot&&(c<0||c>4294967295))throw new Error(Gpt);if(d!==Ot&&(d<0||d>65535))throw new Error(Lpt);if(u!==Ot&&u!==sAe&&u!==aAe)throw new Error(Wpt);let f=Ti(e,i,H6),y=Ti(e,i,K6),_=a!==Ot||c!==Ot||d!==Ot||u,S=f!==Ot||y!==Ot;if(_?(o=!1,r=r&65535|768):S&&(o=!0,r=r&255),f!==Ot&&(f<0||f>255))throw new Error(vpt);if(y&&typeof y!==R_e)throw new Error(Fpt);if(r>65535)throw new Error(Wq);let A=Ti(e,i,z6,0);!i[oY]&&t.endsWith("/")&&(i[oY]=!0);let Z=Ti(e,i,oY);Z?(t.endsWith("/")||(t+="/"),A===0&&(A=16,o||(A|=16877<<16))):!o&&A===0&&(s?A=493<<16:A=420<<16);let V;o||(V=A>>16&65535,d=d===Ot?V:d&65535,h?d|=2048:h=!!(d&2048),p?d|=1024:p=!!(d&1024),b?d|=512:b=!!(d&512),Z&&(d|=16384),A=(d&65535)<<16|A&255),{msdosAttributesRaw:f,msdosAttributes:y}=wpt(f,y),S&&(A=A&4294967295|f&255);let E=Ti(e,i,RSe,h1),G=E(t);if(G===Ot&&(G=h1(t)),Ni(G)>65535)throw new Error(eAe);let v=i[eY]||"",I=E(v);if(I===Ot&&(I=h1(v)),Ni(I)>65535)throw new Error($Se);let X=Ti(e,i,Q6,20);if(X>65535)throw new Error(Wq);let N=Ti(e,i,T1,new Date),g=Ti(e,i,nY),C=Ti(e,i,iY),R=Ti(e,i,B6,0),L=Ti(e,i,xB),P,Y;L||(P=Ti(e,i,gB),Y=Ti(e,i,yB));let O=Ti(e,i,gSe,3),k=Ti(e,i,$6),D=Ti(e,i,ySe,!0),w=Ti(e,i,xSe,!0),z=Ti(e,i,_B),J=Ti(e,i,AB,!0),ee=Ti(e,i,_Se),H=Ti(e,i,SSe),te=Ti(e,i,ASe,!1),$=Ti(e,i,TB),pe=Ti(e,i,ZSe,!0),xe=Ti(e,i,tq),le=Ti(e,i,TSe),Te=Ti(e,i,SB),Se=Ti(e,i,CSe);ee&&Se===Ot&&(Se=!1),(Se===Ot||k)&&(Se=!0),le!==Ot&&le!=6&&(Te=!1),!Te&&e.config.CompressionStream===Ot&&e.config.CompressionStreamZlib===Ot&&(le=0);let Ee=Ti(e,i,bB);if(!k&&(P!==Ot||Y!==Ot)&&!(O>=1&&O<=3))throw new Error(tAe);let Ve=new Uint8Array,we=i[iq];if(we){let lt=0,Xn=0;we.forEach(pi=>lt+=4+Ni(pi)),Ve=new Uint8Array(lt),we.forEach((pi,Di)=>{if(Di>65535)throw new Error(nAe);if(Ni(pi)>65535)throw new Error(iAe);Er(Ve,new Uint16Array([Di]),Xn),Er(Ve,new Uint16Array([Ni(pi)]),Xn+2),Er(Ve,pi,Xn+4),Xn+=4+Ni(pi)})}let ke=0,nt=0,bt=0;if(L&&(bt=i[tY],bt===Ot))throw new Error(oAe);let Rt=Ee===!0;n&&(n=new DS(n),await t0(n),L?(i.uncompressedSize=bt,ke=jSe(bt)):n.size===Ot?(Se=!0,(Ee||Ee===Ot)&&(Ee=!0,bt=ke=4294967296)):(i.uncompressedSize=bt=n.size,ke=jSe(bt)));let{diskOffset:He,diskNumber:mt}=e.writer,it=Rt||bt>4294967295,rt=Rt||ke>4294967295;if(it||rt){if(Ee===!1)throw new Error(vq);Ee=!0}Ee=Ee||!1;let jt=Ti(e,i,j6);i=Object.assign({},i,{rawFilename:G,rawComment:I,version:X,versionMadeBy:r,lastModDate:N,lastAccessDate:g,creationDate:C,rawExtraField:Ve,zip64:Ee,zip64UncompressedSize:it,zip64CompressedSize:rt,password:P,rawPassword:Y,level:le,useWebWorkers:z,transferStreams:J,encryptionStrength:O,extendedTimestamp:D,zipCrypto:k,bufferedWrite:ee,createTempStream:H,keepOrder:w,useUnicodeFileNames:pe,dataDescriptor:Se,dataDescriptorSignature:te,signal:$,msDosCompatible:o,internalFileAttribute:R,internalFileAttributes:R,externalFileAttribute:A,externalFileAttributes:A,useCompressionStream:Te,passThrough:L,encrypted:!!(P&&Ni(P)||Y&&Ni(Y))||L&&jt,signature:i[nq],compressionMethod:xe,uncompressedSize:bt,offset:e.offset-He,diskNumberStart:mt,uid:a,gid:c,setuid:h,setgid:p,sticky:b,unixMode:d,msdosAttributesRaw:f,msdosAttributes:y,unixExternalUpper:V});let Cn=Npt(i),ct=Mpt(i),Wt=Ni(Cn.localHeaderArray,ct.dataDescriptorArray);nt=Wt+ke,e.options[lq]&&(nt+=nt+64),e.pendingEntriesSize+=nt;let sn;try{sn=await Ppt(e,t,n,{headerInfo:Cn,dataDescriptorInfo:ct,metadataSize:Wt},i)}finally{e.pendingEntriesSize-=nt}return Object.assign(sn,{name:t,comment:v,extraField:we}),new vx(sn)}async function Ppt(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:c,signal:d}=o,{headerInfo:u}=i,h=e.options[lq],p=Array.from(r.values()).pop(),b={},f,y,_,S,A,Z;r.set(t,b);try{let v;a&&(v=p&&p.lock,V()),(o.bufferedWrite||!a||e.writerLocked||e.bufferedWrites||!c)&&!h?(o.createTempStream?Z=await o.createTempStream():Z=new TransformStream(Ot,Ot,{highWaterMark:kS}),Z.size=0,f=!0,e.bufferedWrites++,await t0(s)):(Z=s,await E()),await t0(Z);let{writable:I,diskOffset:X}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let R=new Uint8Array(4),L=ka(R);fo(L,0,134695760),await Sg(s,R),e.offset+=4}h&&Ypt(i,e.offset-X);let{localHeaderView:N,localHeaderArray:g}=u;f||(await v,await G(I));let{diskNumber:C}=s;return b.diskNumberStart=C,f||(A=!0,await Sg(Z,g)),b=await Xpt(n,Z,b,i,e.config,o),f||(A=!1),r.set(t,b),b.filename=t,f?(await Promise.all([Z.writable.getWriter().close(),v]),await E(),S=!0,b.diskNumberStart=s.diskNumber,b.offset=e.offset-s.diskOffset,Upt(b,N,o),await G(I),await Sg(s,g),await Z.readable.pipeTo(I,{preventClose:!0,preventAbort:!0,signal:d}),s.size+=Z.size,S=!1):b.offset=e.offset-X,e.offset+=b.size,b}catch(v){if(S||A){if(e.hasCorruptedEntries=!0,v)try{v.corruptedEntry=!0}catch{}f?e.offset+=Z.size:e.offset=Z.size}throw r.delete(t),v}finally{f&&e.bufferedWrites--,_&&_(),y&&y()}function V(){b.lock=new Promise(v=>_=v)}async function E(){e.writerLocked=!0;let{lockWriter:v}=e;e.lockWriter=new Promise(I=>y=()=>{e.writerLocked=!1,I()}),await v}async function G(v){Ni(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await Sg(v,new Uint8Array))}}async function Xpt(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:c,metadataSize:d}=o,{headerArray:u,headerView:h,lastModDate:p,rawLastModDate:b,encrypted:f,compressed:y,version:_,compressionMethod:S,rawExtraFieldZip64:A,localExtraFieldZip64Length:Z,rawExtraFieldExtendedTimestamp:V,extraFieldExtendedTimestampFlag:E,rawExtraFieldNTFS:G,rawExtraFieldUnix:v,rawExtraFieldAES:I}=a,{dataDescriptorArray:X}=c,{rawFilename:N,lastAccessDate:g,creationDate:C,password:R,rawPassword:L,level:P,zip64:Y,zip64UncompressedSize:O,zip64CompressedSize:k,zipCrypto:D,dataDescriptor:w,directory:z,executable:J,versionMadeBy:ee,rawComment:H,rawExtraField:te,useWebWorkers:$,transferStreams:pe,onstart:xe,onprogress:le,onend:Te,signal:Se,encryptionStrength:Ee,extendedTimestamp:Ve,msDosCompatible:we,internalFileAttributes:ke,externalFileAttributes:nt,uid:bt,gid:Rt,unixMode:He,setuid:mt,setgid:it,sticky:rt,unixExternalUpper:jt,msdosAttributesRaw:Cn,msdosAttributes:ct,useCompressionStream:Wt,passThrough:sn}=s,lt={lock:i,versionMadeBy:ee,zip64:Y,directory:!!z,executable:!!J,filenameUTF8:!0,rawFilename:N,commentUTF8:!0,rawComment:H,rawExtraFieldZip64:A,localExtraFieldZip64Length:Z,rawExtraFieldExtendedTimestamp:V,rawExtraFieldNTFS:G,rawExtraFieldUnix:v,rawExtraFieldAES:I,rawExtraField:te,extendedTimestamp:Ve,msDosCompatible:we,internalFileAttributes:ke,externalFileAttributes:nt,diskNumberStart:n,uid:bt,gid:Rt,unixMode:He,setuid:mt,setgid:it,sticky:rt,unixExternalUpper:jt,msdosAttributesRaw:Cn,msdosAttributes:ct},{signature:Xn,uncompressedSize:pi}=s,Di=0;sn||(pi=0);let{writable:Ut}=t;if(e){e.chunkSize=jO(r);let bo=e.readable,ro=e.size,Fi={options:{codecType:aB,level:P,rawPassword:L,password:R,encryptionStrength:Ee,zipCrypto:f&&D,passwordVerification:f&&D&&b>>8&255,signed:!sn,compressed:y&&!sn,encrypted:f&&!sn,useWebWorkers:$,useCompressionStream:Wt,transferStreams:pe},config:r,streamOptions:{signal:Se,size:ro,onstart:xe,onprogress:le,onend:Te}};try{let zn=await mB({readable:bo,writable:Ut},Fi);Di=zn.outputSize,t.size+=Di,sn||(pi=zn.inputSize,Xn=zn.signature)}catch(zn){throw zn.outputSize!==Ot&&(t.size+=zn.outputSize),zn}}return kpt({signature:Xn,compressedSize:Di,uncompressedSize:pi,headerInfo:a,dataDescriptorInfo:c},s),w&&await Sg(t,X),Object.assign(lt,{uncompressedSize:pi,compressedSize:Di,lastModDate:p,rawLastModDate:b,creationDate:C,lastAccessDate:g,encrypted:f,zipCrypto:D,size:d+Di,compressionMethod:S,version:_,headerArray:u,headerView:h,signature:Xn,extraFieldExtendedTimestampFlag:E,zip64UncompressedSize:O,zip64CompressedSize:k}),lt}function Npt(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:b,passThrough:f,encrypted:y,zip64UncompressedSize:_,zip64CompressedSize:S,uncompressedSize:A}=e,{version:Z,compressionMethod:V}=e,E=!u&&(r>0||r===Ot&&V!==0),G,v=f||!E,I=s&&(e.bufferedWrite||!_&&!S||v);if(s){let J=4;_&&(J+=8),S&&(J+=8),G=new Uint8Array(J);let ee=ka(G);if(to(ee,0,1),to(ee,2,Ni(G)-4),I){let H=ka(G),te=4;_&&(fc(H,te,BigInt(A)),te+=8),S&&v&&(fc(H,te,BigInt(A)),te+=8),te==4&&(G=new Uint8Array)}}else G=new Uint8Array;let X;if(y&&!a){X=new Uint8Array(Ni(HSe)+2);let J=ka(X);to(J,0,39169),Er(X,HSe,2),Z1(J,8,p)}else X=new Uint8Array;let N,g,C;if(b){g=new Uint8Array(9+(i?4:0)+(o?4:0));let J=ka(g);to(J,0,21589),to(J,2,Ni(g)-4),C=1+(i?2:0)+(o?4:0),Z1(J,4,C);let ee=5;fo(J,ee,Math.floor(n.getTime()/1e3)),ee+=4,i&&(fo(J,ee,Math.floor(i.getTime()/1e3)),ee+=4),o&&fo(J,ee,Math.floor(o.getTime()/1e3));try{N=new Uint8Array(36);let H=ka(N),te=Lq(n);to(H,0,10),to(H,2,32),to(H,8,1),to(H,10,24),fc(H,12,te),fc(H,20,Lq(i)||te),fc(H,28,Lq(o)||te)}catch{N=new Uint8Array}}else N=g=new Uint8Array;let R;try{let{uid:J,gid:ee,unixMode:H,setuid:te,setgid:$,sticky:pe,unixExtraFieldType:xe}=e;if(xe&&(J!==Ot||ee!==Ot||H!==Ot)){let le=JSe(J),Te=JSe(ee),Se=new Uint8Array;if(xe==aAe&&H!==Ot){let ke=H&65535;te&&(ke|=2048),$&&(ke|=1024),pe&&(ke|=512),Se=new Uint8Array(2),new DataView(Se.buffer).setUint16(0,ke,!0)}let Ee=3+le.length+Te.length+Se.length;R=new Uint8Array(4+Ee);let Ve=ka(R);to(Ve,0,xe==sAe?30837:30805),to(Ve,2,Ee),Z1(Ve,4,1),Z1(Ve,5,le.length);let we=6;Er(R,le,we),we+=le.length,Z1(Ve,we,Te.length),we++,Er(R,Te,we),we+=Te.length,Er(R,Se,we)}else R=new Uint8Array}catch{R=new Uint8Array}V===Ot&&(V=E?8:0),s&&(Z=Z>45?Z:45),y&&!a&&(Z=Z>51?Z:51,X[9]=V,V=99);let L=I?Ni(G):0,P=L+Ni(X,g,N,R,h),{headerArray:Y,headerView:O,rawLastModDate:k}=cAe({version:Z,bitFlag:lAe(r,c,d,y,V),compressionMethod:V,uncompressedSize:A,lastModDate:n<Z6?Z6:n>A6?A6:n,rawFilename:t,zip64CompressedSize:S,zip64UncompressedSize:_,extraFieldLength:P}),D=30,w=new Uint8Array(D+Ni(t)+P),z=ka(w);return fo(z,0,67324752),Er(w,Y,4),Er(w,t,D),D+=Ni(t),I&&Er(w,G,D),D+=L,Er(w,X,D),D+=Ni(X),Er(w,g,D),D+=Ni(g),Er(w,N,D),D+=Ni(N),Er(w,R,D),D+=Ni(R),Er(w,h,D),d&&(fo(z,18,0),fo(z,22,0)),{localHeaderArray:w,localHeaderView:z,headerArray:Y,headerView:O,lastModDate:n,rawLastModDate:k,encrypted:y,compressed:E,version:Z,compressionMethod:V,extraFieldExtendedTimestampFlag:C,rawExtraFieldZip64:new Uint8Array,localExtraFieldZip64Length:L,rawExtraFieldExtendedTimestamp:g,rawExtraFieldNTFS:N,rawExtraFieldUnix:R,rawExtraFieldAES:X,extraFieldLength:P}}function Ypt(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=ka(i),s=64-(t+Ni(i))%64;s<4&&(s+=64);let a=new Uint8Array(s),c=ka(a);to(c,0,6534),to(c,2,s-2);let d=i;n.localHeaderArray=i=new Uint8Array(Ni(d)+s),Er(i,d),Er(i,a,Ni(d)),r=ka(i),to(r,28,o+s),e.metadataSize+=s}function JSe(e){if(e===Ot)return new Uint8Array;{let t=new Uint8Array(4);ka(t).setUint32(0,e,!0);let i=4;for(;i>1&&t[i-1]===0;)i--;return t.subarray(0,i)}}function wpt(e,t){if(e!==Ot)e=e&255;else if(t!==Ot){let{readOnly:n,hidden:i,system:o,directory:r,archive:s}=t,a=0;n&&(a|=1),i&&(a|=2),o&&(a|=4),r&&(a|=16),s&&(a|=32),e=a&255}return t===Ot&&(t={readOnly:!!(e&1),hidden:!!(e&2),system:!!(e&4),directory:!!(e&16),archive:!!(e&32)}),{msdosAttributesRaw:e,msdosAttributes:t}}function Mpt({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=ka(i),n&&(r=4,fo(o,0,134695760))),{dataDescriptorArray:i,dataDescriptorView:o,dataDescriptorOffset:r}}function kpt({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!==Ot&&(fo(c,10,e),a&&fo(u,h,e)),r?a&&(fc(u,h+4,BigInt(t)),fc(u,h+12,BigInt(n))):(fo(c,14,t),fo(c,18,n),a&&(fo(u,h+4,t),fo(u,h+8,n)))}function Upt({rawFilename:e,encrypted:t,zip64:n,localExtraFieldZip64Length:i,signature:o,compressedSize:r,uncompressedSize:s,zip64UncompressedSize:a,zip64CompressedSize:c},d,{dataDescriptor:u}){if(u||(t||fo(d,14,o),c||fo(d,18,r),a||fo(d,22,s)),n&&i){let h=30+Ni(e)+4;a&&(fc(d,h,BigInt(s)),h+=8),c&&(fc(d,h,BigInt(r)),h+=8)}}async function Dpt(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[,V]of i){let{rawFilename:E,rawExtraFieldAES:G,rawComment:v,rawExtraFieldNTFS:I,rawExtraFieldUnix:X,rawExtraField:N,extendedTimestamp:g,extraFieldExtendedTimestampFlag:C,lastModDate:R,zip64UncompressedSize:L,zip64CompressedSize:P,uncompressedSize:Y,compressedSize:O}=V,k=V.offset>4294967295,D=V.diskNumberStart>65535,w;if(k||D||L||P){let J=4;L&&(J+=8),P&&(J+=8),k&&(J+=8),D&&(J+=4),w=new Uint8Array(J);let ee=ka(w);to(ee,0,1),to(ee,2,J-4);let H=4;L&&(fc(ee,H,BigInt(Y)),H+=8),P&&(fc(ee,H,BigInt(O)),H+=8),k&&(fc(ee,H,BigInt(V.offset)),H+=8),D&&fo(ee,H,V.diskNumberStart)}else w=new Uint8Array;V.rawExtraFieldZip64=w,V.zip64Offset=k,V.zip64DiskNumberStart=D;let z;if(g){z=new Uint8Array(9);let J=ka(z);to(J,0,21589),to(J,2,5),Z1(J,4,C),fo(J,5,Math.floor(R.getTime()/1e3))}else z=new Uint8Array;V.rawExtraFieldExtendedTimestamp=z,c+=46+Ni(E,v,w,G,I,X,z,N)}let h=new Uint8Array(c),p=ka(h);await t0(o);let b=0;for(let[V,E]of Array.from(i.values()).entries()){let{offset:G,rawFilename:v,rawExtraFieldZip64:I,rawExtraFieldAES:X,rawExtraFieldExtendedTimestamp:N,rawExtraFieldNTFS:g,rawExtraFieldUnix:C,rawExtraField:R,rawComment:L,versionMadeBy:P,headerArray:Y,headerView:O,zip64UncompressedSize:k,zip64CompressedSize:D,zip64DiskNumberStart:w,zip64Offset:z,internalFileAttributes:J,externalFileAttributes:ee,diskNumberStart:H,uncompressedSize:te,compressedSize:$}=E,pe=Ni(I,X,N,g,C,R);fo(p,a,33639248),to(p,a+4,P),k||fo(O,18,te),D||fo(O,14,$),Er(h,Y,a+6);let xe=a+30;if(to(p,xe,pe),xe+=2,to(p,xe,Ni(L)),xe+=2,to(p,xe,w?65535:H),xe+=2,to(p,xe,J),xe+=2,ee&&fo(p,xe,ee),xe+=4,fo(p,xe,z?4294967295:G),xe+=4,Er(h,v,xe),xe+=Ni(v),Er(h,I,xe),xe+=Ni(I),Er(h,X,xe),xe+=Ni(X),Er(h,N,xe),xe+=Ni(N),Er(h,g,xe),xe+=Ni(g),Er(h,C,xe),xe+=Ni(C),Er(h,R,xe),xe+=Ni(R),Er(h,L,xe),xe+=Ni(L),a-b>o.availableSize&&(o.availableSize=0,await Sg(o,h.slice(b,a)),b=a),a=xe,n.onprogress)try{await n.onprogress(V+1,i.size,new vx(E))}catch{}}await Sg(o,b?h.slice(b):h);let f=o.diskNumber,{availableSize:y}=o;y<22&&f++;let _=Ti(e,n,bB);if(d>4294967295||c>4294967295||u>65535||f>65535){if(_===!1)throw new Error(vq);_=!0}let S=new Uint8Array(_?98:22),A=ka(S);a=0,_&&(fo(A,0,101075792),fc(A,4,BigInt(44)),to(A,12,45),to(A,14,45),fo(A,16,f),fo(A,20,s),fc(A,24,BigInt(u)),fc(A,32,BigInt(u)),fc(A,40,BigInt(c)),fc(A,48,BigInt(d)),fo(A,56,117853008),fc(A,64,BigInt(d)+BigInt(c)),fo(A,72,f+1),Ti(e,n,VSe,!0)&&(f=65535,s=65535),u=65535,d=4294967295,c=4294967295,a+=76),fo(A,a,101010256),to(A,a+4,f),to(A,a+6,s),to(A,a+8,u),to(A,a+10,u),fo(A,a+12,c),fo(A,a+16,d);let Z=Ni(t);if(Z)if(Z<=65535)to(A,a+20,Z);else throw new Error(qSe);await Sg(o,S),Z&&await Sg(o,t)}async function Sg(e,t){let{writable:n}=e,i=n.getWriter();try{await i.ready,e.size+=Ni(t),await i.write(t)}finally{i.releaseLock()}}function Lq(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function Ti(e,t,n,i){let o=t[n]===Ot?e.options[n]:t[n];return o===Ot?i:o}function jSe(e){return e+5*(Math.floor(e/16383)+1)}function Z1(e,t,n){e.setUint8(t,n)}function to(e,t,n){e.setUint16(t,n,!0)}function fo(e,t,n){e.setUint32(t,n,!0)}function fc(e,t,n){e.setBigUint64(t,n,!0)}function Er(e,t,n){e.set(t,n)}function ka(e){return new DataView(e.buffer)}function Ni(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}function cAe({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=ka(u);to(h,0,e),to(h,2,t),to(h,4,n);let p=new Uint32Array(1),b=ka(p);to(b,0,(r.getHours()<<6|r.getMinutes())<<5|r.getSeconds()/2),to(b,2,(r.getFullYear()-1980<<4|r.getMonth()+1)<<5|r.getDate());let f=p[0];return fo(h,6,f),(a||o!==Ot)&&fo(h,14,a?4294967295:o),(c||i!==Ot)&&fo(h,18,c?4294967295:i),to(h,22,Ni(s)),to(h,24,d),{headerArray:u,headerView:h,rawLastModDate:f}}function lAe(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 b9i=x(T(),1);var Opt={};try{jp({baseURI:Opt.url})}catch{}var J9i=x(T(),1);var F9i=x(T(),1),Yu="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function dAe(e){let t;e({wasmURI:()=>(t||(t="data:application/wasm;base64,"+(n=>{n=(s=>{let a=(s=(s+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,c=[];for(let d=0;a>d;d+=4){let u=Yu.indexOf(s[d])<<18|Yu.indexOf(s[d+1])<<12|(63&Yu.indexOf(s[d+2]))<<6|63&Yu.indexOf(s[d+3]);c.push(u>>16&255),s[d+2]!=="="&&c.push(u>>8&255),s[d+3]!=="="&&c.push(255&u)}return new Uint8Array(c)})(n);let i=new Uint8Array(1024),o=0;for(let s=0;s<n.length;){let a=n[s++];if(128&a){let c=3+(127&a),d=n[s++]<<8|n[s++],u=o-d;r(o+c);for(let h=0;c>h;h++)i[o++]=i[u+h]}else{let c=a;r(o+c);for(let d=0;c>d&&s<n.length;d++)i[o++]=n[s++]}}return(s=>{let a="",c=s.length,d=0;for(;c>d+2;d+=3){let h=s[d]<<16|s[d+1]<<8|s[d+2];a+=Yu[h>>18&63]+Yu[h>>12&63]+Yu[h>>6&63]+Yu[63&h]}let u=c-d;if(u===1){let h=s[d]<<16;a+=Yu[h>>18&63]+Yu[h>>12&63]+"=="}else if(u===2){let h=s[d]<<16|s[d+1]<<8;a+=Yu[h>>18&63]+Yu[h>>12&63]+Yu[h>>6&63]+"="}return a})(new Uint8Array(i.buffer.slice(0,o)));function r(s){if(i.length<s){let a=2*i.length;for(;s>a;)a*=2;let c=new Uint8Array(a);c.set(i.subarray(0,o)),i=c}}})("FQBhc20BAAAAAUULYAF/AX9gAn9/AIEABYAACwIDf4IABwEBgAARAQaAAAuDAA6BABUDAGAAgAADgAANAQSBABUDAGAHgwAegAAfEgNCQQcABAEABAgIAAIABQIKAIAAB4EAAwEFgQAHAgICgQAHEAEDAAUGAAMDBQQJBAQJAQaAAAEeAAIEAwIEAgIBBAcDAwQFAXABDQ0FBgEBggKCAgYIgACYIkHQ1QQLB4oEHAZtZW1vcnkCAAxpbmZsYXRlOV9uZXcABw2GAA8HaW5pdAAIEYoAEAdfcmF3AAoQhgAUCXByb2Nlc3MAC4cARgZlbmQADhaGAA8QbGFzdF9jb25zdW1lZAARC4QAGYMAbYUANoMAbAEShQBYhwBrARSFAH+DABMHZ3ppcAAVD4UAFIUAfgEWhgBWgQB9AhgVhQAOjQB8AmRliQB8hQAOggB8AhoQiQAPggB8AhsRigATggB8AhwPhQAUhQB8AR2GAFaBAHwJHwRmcmVlAAIVhQAVjACDCgZtYWxsb2MAAQuCAFUKaWFsaXplAAAZX4AADxZkaXJlY3RfZnVuY3Rpb25fdGFibGUBgAAcG2Vtc2NyaXB0ZW5fc3RhY2tfcmVzdG9yZQAFHI4AGwJnZYAAbw51cnJlbnQABiJfX2N4YYAAWwRjcmVtgAASBl9leGNlcIIAXQZyZWZjb3WAACUtPQkSAQBBAQsMACEiDA8XGR4+NTg7CqHlAkECAAu/JwELfyMAQRBrIgokAAJAjwACEiAAQfQBTQRAQaQnKAIAIgNBEIAAEgYLakH4A3GBAAkQSRsiBkEDdiIAdiIBQQNxBIEAMgYBQX9zQQGAAB8GaiICQQN0gAAZDMwnaiIAIAEoAtQnIoAABgQIIgVGggBSCSADQX4gAndxNoACphEBCyAFIAA2AgwgACAFNgIIC4AASAMIaiGAADcBIIIARoAABQRyNgIEgQAPA2oiAYEATQMEQQGBABIHDAsLIAZBrIIAnwMITQ2AABuBAIYEQQIgAIEANQUAIAJrcoAANQQAdHFogQCjA3QiAIIAj4AAH4IAj4AABosAjwUBd3EiA4YAkQECgQCRAQKEAJEBAIAAaIMAhYAACgJqIoAAjIIA3wUgBmsiBYMAjIAAGQIBaoEALgoAIAgEQCAIQXhxgQBuBCEBQbiBAKAEIQICf4AAZQEBgAAZBwN2dCIHcUWEAHgCIAeAAD6AADyBAHWBASEDCyEDgQDpgAB2gAAchACEAQGDAAeAAJyBAIuCARyAAFYCIASAADmAAP6CAHWAAQsCQaiCAQkCC0WAAQkFC2hBAnSAAOYDKSICgQEuAnhxgACqByEEIAIhAQOCAagFKAIQIgCAAIOBAAoBFIAACgENgAB+gAEQhAAqgADZgQFuBQRJIgEbgAA2gAFJASCAAAmAATgBIYEApwILIIAAVAMYIQmAABaAAAkEDCIAR4AASIAACgEIgAA3hAHGgACxAwgMCoIAKQUUIgEEf4AByAIUaoABU4EAdwMBRQ2AANkOQRBqCyEFA0AgBSEHIAGAAZoDFGohgAIFggAwAg0AgADlARCEABCAADEGDQALIAdBgABbCAAMCQtBfyEGgAAfA79/S4IAJwELgAISgAC1AiEGhAD+CAdFDQBBHyEIgAH+ggDygALEA///B4ACxoABwQEmgQJYBnZnIgBrdoICpQpBAXRrQT5qIQgLhALxAQiFATUBAYEBngIAIYECCoEAB4AAPAEZgAAdAwF2a4AAVwgIQR9HG3QhAoUBSYUBNAQDIARPgACTAQGAALcDAyIEgACGAQCAAH8BAYAARAEDgQI/ggFoAQOAAdOBAtQGHXZBBHFqggDcAkYbgAAdAgMbgABkAQKAAI+AAWSBAO6BADECBXKDAIQBBYACzwEIgQK7gADugALPAgdxgQGuAwMgAIUB4QEhgAEdggHAgAFMiAHCAQKAAb4BIYAAbIEByYMBxAEFgQAJhQFTgAGTAQGDAW8DCyIAggByAQWAATkCIASDA02AAEGBAMsBBYEB5wEIgAA5gAAJhAHngAAKjQHngAKTgAAWgwHnAQWCAeeAAA+EAecBBYIB54ABK4ACeoAA+4MB54IDgIgB54IAEIQB5wEDgwHnAQeHA9gBBYEEgoMDQ4AEpoAAjYECnwNBEE+AAI2CA4uAATKGA4ECBWqBAJOAAFeFA66BA1WAABeGA7sBBYsEQIABX4AEJwEhgAHlgANGgQA6gQNWgAN0gQCZgQNlgAJvgABKAbCCAIgCAkmAAIgBsIAAH4IAgYEALAK8J4AAA4EAG4MAiIEAN4kAjYYEMYUAS4QCSgEvgAQ/BQJ/QfwqgAA7gABTAoQrgAAIgQJoBYgrQn83gABXBoArQoCggIAAAQEEgQAOEfwqIApBDGpBcHFB2KrVqgVzgQB6ApArggEnA0HgKoMACAaAIAsiAWqABaKAAZMBa4AEXIEEmQVNDQhB3IEAZAIiBYAAZgHUggAKAQiABKMFIgkgCE2AAUcFCUlyDQmAAvmAAEUDLQAAgAKQgAJvhQX6hADYgQA5BOQqIQCDAlqBAD+BAY2AADwBCIICagNqSQ2BAtuBAhKCAkMEQQAQBIAFdwJ/RoAB+QMBIQOAAMmCAR0BQYAAk4AD+4AGIYEC/AFrgQVTAWqCAs0DcWohgABAAQOBAKsBA4QAq4EBEYMAq4ADRQNqIgeAAHGAAUoBB4AAqwEEgAAqgABfgAFjBUcNAQwFgQA4gABMgADrgQAWggJCgABTgQCVAUaABP4BAoIDFYEAioABCQVBMGogA4EAuIAB7QMMBAuDAXGBAyADIANrgQCJBwJrcSICEASDAC6ABWWAAJaCACuAAJyAAM0ERw0CC4EBaAHggQCWAkEEgQWsgAWohADpggDygQBoAXKBBSQDTXINgANTgABQgAPoCAZBKGpNDQULgADOgwDRgQDPggGsAdiCAA4BAIECTgLYKoEDSQEAgQGFgwFxAQSHAXGDANOBA2uAANUCIgWAANeCABKDAWuBAMcBtIMCe4EBSoAAewEbgQQtAbSDAr2CAmkDQegqgQYwAQCAAFCCABUFQcQnQX+BAAgCyCeDAnuBAAwB8IMCQIEB4IMGz4MHsIAGUAHUgAMQgQZYAtgngQUngAC7A0EgR4AAeYEDAQQDQShrgAAQAXiAAOkBQYECa4AB3oMDDoQHoIIGzoADdIUDCAQCakEogQNsBMAnQYyBAXuBA+CAAc6AAYEBTYEGZAJLcoMA2gQMQQhxgQAKgAHZAgVqgQAwgABRgATNAiAEggBmgAhRggN0ArAngwOPgQFPgAAtgACJgwBvgAClggBvgABWkABvAQOCARMCDAaDAAeFAT0DIAJLiAE1gwH7AQWCAYACAkCBBpmEAYKBBPeEAXoDAQwCgQWcAi0AgQCtgATgAQuEAa6BCSyDAa4BBIECaYEHPIICjAMiBUmEB1kBCIIGTJQBQAEHkAFAAQeZAUCAAGICBUGAB/iBAEEDakEvgABPgAAoAQSABUyACZQDAUEbggksCUHsKikCADcCEIAACwHkgwALAQiAABSCCVuBAHCNAiCEAgyAACABGIAEr4ICE4AAmIMEv4AABQEEgQmQgADPgQL+AyAERoEG6YMFSQF+gAnDAQSDCC+ABnaEALaCCMEBAIAI8gMCQf+BCkOAAAiECQ+AABWEClCABSqBCd+ACQ0BAoUJDYAAEYIJDYIJgoEBNgELgAbDgADagQkNgABggAZ1AkEMgAWyAQiBBS8BH4IHMwH/hAfdAQKAB92AABmQB92AALGAAMUGNgIcIARCggEPAQCABzkDQdQpgAmaggTrgwg3gAKvgQo1AQOCAIoBqIEJlwEFgwmXggllgQCPAQKACAOAAFWCCAOACGKBCAOCB9aAB6KBAi2BCt2CB3wBAoIDqoAH44EHbIEH04MDDoAH8AIiA4EG5wEFggbngQBXARCBAJqAAe8DGEEIgAcEAgQigAgsAkEMhQoHgAHTgQDwgwCBAQiDAMOACNWAACMBGIABAgEMgAA7hAbsgQLygwRHhAapgAZkAU2ACH6AAmqBB8ixBquAAyEEoCdBMIEAOYEDMIIIwIMHFoIC14ADKIIDa4UCwwFqgAYZhQBCgAmMgAaDggAVgAUFAiAIgAbsA2shB4UE4QIgA4ELboED2YoDzAEHgwUbgQDlhAvYgAHgggfzgwAxhwrrhAifjgAxgQIlgwEGgQFAgAFogQWXBANxQQGAAD+AACSACiABCYEAFoACPYIM14MClIAAEYEIzAECgwwCgwKWgAwGgAA5AXaDDJgBAoEC7IcLg4ECd4EANQMYIQaAAEaABC+BBBqCAEWCAR+BACaBAaWAACaAAB+AABiAC1iACRMBA4IJE4IB+4EJp4AAEIEJE4ALh4IKKoAGiYEJE4IEMIAAMIADV4ELGoEJuYIAMYECLAEFgwkTggqKgACSAQaACaiDAGABHIAA5AECgAW2gQoGggEpgAF+gALYgwGrAwINAYACyIMC3oEA1YUA0oEAOwIgBoAAXYEAMAEGgQAsARCBANeCAAoBFIAC5oIMCoAI5IACl4QAtYEDXoEA2YADOoEAJQEYggEEggw0gQJFgAAZARSGABkEByAJaoALzwEDgAAHgQLtAQSBA32AB02GBCSFBNWAAAoCaiCBBPaAABKDAYwBB5MEIAEHrQQggwMpgQAHhAGxgAQoAQKBAGaEBCgBB4AEKAEHkgQogAFbgALUiAQogA8mgwQogg8dhAQoggS1A3QiBYUEKIAD24MAkoYEKAEHgAQogAUHggQoAQKEDCuCBh6DAfSBDnaCBCgBB4EEKIEMC4EB7YML+4EFfYEEKIMLQIIB/IYEKIAA1gEYgAAHhADkgQDyhQEEgQZ2gwuPgwQqgQIvgQAriAEIAQuADLWCA9qCAgABCIMCQoAAZgEcgADQgADOgAJsgAJCgQ8KgACKgQJCggNdgAbvgQDiAQeEDxmBAa+DAECACgCEAkCACgiEAkCCAAqAAkCEDkoCIAiBAISDAMiCC6mAAIaABomCAMaFDC+BAkCCABkBFIUAGYAAXAMEQQ+DCmMBBIEEqYADi4cLuYMEfYYEIYEMCoQAH4AACoEEb4QAHIEFXQFqggGPgAASgwJegQFxkAJeAQSiAl6BD3aAAByAAAcBDIECzYMAB4cCXoIAZoQCXgEEgAJeAQSVBoaCADwDHCADkQaGgQMaghC1hQJYgAK0hAaAgQelgwBxARiBAJgBBJYGh4MCX4UP74AHo4QGh4IJHYEAJoEF8oECXwEHhw9VgQBeARCDEGiBA9iFAOWBAPOCBvSDBN2CABaDEH+DDaGABBuDBPKCANSBDgGDAl+CBPoBCYMCX4AAPIQCX4AB74ACX4EFZ4AAKI0CXwELgwJfhgJdAwIgCYQCXQEJhgJdggAKiAJdAQmBAIKDEEyPAl2DEHOZAl2BC/uKAl2ACXaNAl2ABQKEAB+AAAqAA5KGAl2AAm6EAl2KEeaBDjqCAYWAAmGGEeQBIIMIT4gR5ogCW4ABO4ICRoMB3IEH6YICW4IB8QEIgQb/ghHXgQ6ZgQBugQiAgQFjAQuADg4DEGokgABKBgveCwEIf4EGz4IA7AJBCIEMd4AJqAFrgwLeAXiBCzQCIQWCE5QCAXGBCa8BQYACXYEGgIEFv4AAIoAAL4MLB4AKo4ISvIME6IAE6oQHeoQG3oAHNIAAPIQJxoMG7wEEgA0ViQcygBMMhAcygQ2YggchigcfiwdFgQ3KhRAwiAcdghAwgwcdAQSAAsoBBIISF4IHHYABhIUQMIIHHYIAEIsSF4AIo4ACZoAJQ4EH9QIDR4AOUIABOIICZ4AQ9oQGf4EBHoMBxIIUbQIAD4QF8YEAmYIFUIAN6Y4HYoICwQEEhwdiAQSWB2KJAsWrB2KBAsWCARyBAsWIB2KCAsWCABmBAsWFA6MBBYQRmoEA7QEBgAHShhW7gwHigglggQHAghTZgAlrggvlhglrgA1IggEXhwENAQODAfACRw2BEXGDEE8BuIMACAEPhAmFgQ/4hAmHggBNhgmHjwBNgQ2YhQFdgQKEgAAjgQw3iwJGghJEgAF7jAl4igJGiwGagAIzghKMgQJXAQWIEoeJAleDAgOREoeAADS0AleAAg2RAkCGAOaDDlmHAjOHB1ODAjOCB1OjAjOABsSjAjOGB1WMAjOHB1WOAjOOALiAABQBCIAPz4UDJYABrYULFIELLIMWt4YHKoAE+oILFIAUhIUEz4AG9I0WtYQGq4AICIUGRYIE1oMGIYACSoEJh4AAZYQHKQEAgAcpgASzgAcpAQGDBymAAsyGCYeCBlyGBymGCYeAEzWAAucBf4sJiYMXSIIJiYMFYoABqIECpIENJYMJIpEJj4ABnoAVnYECD4YNtwEAhgmPgQzagxWKgAG7hgcwgBXRhQcwgQBdgAu9gAfpgQD3AgMihgEGgALVggD8gwEKgAAngADjgRRhAQuAAnWBEF6DBjiEARqCAY2CD/qAEZoBxIICEoAFlIASTQIgAIAPwYATTwSMCwEHgAANgQWagAXHgxBjgRJ3ggXOgAEWggXOghB3gACOhAhIgQAmgRKBhAaPhBC7AQyABm2FD4mAAZGRBcOBD4mGA32AACKBA2yEBgSCADCCB/6BAc+BGJmBA5CCDLABBIADbIEV04QWVgEEghaZiBXzAQeAAWGBBeOAATCCBNKAAUWCBeODABCFAVWLBcOAAIqHBcOCDuKAFD2EA4OBBsaFBcOBABuCBcOEAJmHBcOAAEqEA5CAAJYBHIAAUYYDkAEAhwOQgwlXiwOQhBqPggOQgA8VhgOQgQH1gwOQgAAKgAOQAQOCA5CABeWBA5CCAPoBAoIBWoEDuIMJKIADd4IBIYADuoEB8YEDx4UAGYYFr4QA7pEFtIIFhoYFtIATf4QW1oYPsqkFtIIAH4YFtJAATYEauIQBToERp4ICTYMFtIcCN4QFtIIPj5UCN4sBi4cFtIAGtIYFtIsCSIUFtIECSIgFtIACSIUFtK8CSIIFtI8CMYYA5oMFtIcCJIIFtIgCJIgFtJ0CJIkFtJoCJIIA1pACJIIA/ZACJJEAuIENVYQFtIQBrYUHUIEHaYIFtIAcY4YdrIEVzIEFtIAII4UM3oEK0IAEHoUL2YEM3oMQsoUKfIQQx4MKmIIFtIAErIYFtAEBhhtAAQKDBbSBBSeCBbSCEiGAALkDHCAAgwW0AQOFBbSAEW+GDzuBBkiAFmWGBbKAEAWDAJGEDBCCBq+CBUuABbOAAMGCBbMBA4MFs4ABH4EFs4ICDoEBqIIFswEBgQWzAQOBBbOBAAeABbOAAnqAAJWGBbMBAoMFs4QQu4AClYIBWYQA6oMGl4EGCoYa0IMTZIADXYIM4oQTgIMBDQMLC0mBBxEBkIMGe4EVGwFqgQtiAQKCCzWAAHSCA1CCF4UDIAA/gAUCAXSAHo2HE0UBf4ABTAGQhAqQAwELBoAALQYkAAsEACOAE7MCAQGABtUEQcQAEIAQGYMLyAIEa4EZj4AMOoIADoAGHgMA/AuBGM6CBWuAASMBJIEHjQU2AiAgAIASGQMLCxGAACaBAVEBfoIHxQsQEAkL2QIBA39BeoAHMARAQZQIgQBNATGBAjgBfoEcBYQAVYQEuAEggwJ8gAAKASSEAAgKKEEBQdg3IAIRA4AGVoEAVwF8gQBXgweQgADmAzYCOIUBrwQCQb/+gAAJgABlBCAAECODFg8GQR91IgNzgBlXgQKAgBQFgBYugwLSASiDDnwCdkGCGfoEAUEAToAeWYEfa4ABYIIAPYIAXAM0IAKBAj8BLIkAFIAA54EAB4ABloEAG4AI1YIN8YAAX4ADhgEwgALIgQAWATyDACsBJIAAB4AbNYIOHAFCgRtAAXCCCD8BQoAAqAE3gQ3IAkKBgwAUAcyAAOCAACsCtAqCCr4BcIMA0QFUgwAHAlBBggkNgAEJgxmBAyQRAYQBMQEcgAIsjAFtAXCAAW0BEoIB+oEA5oIXlAgEEA0L/SQBIoQhWQIUJIEBeAEZhgEkgQeMAiIShAFsAwQhE4QbV4ECNwETgARnAwAhE4IAfYEEkAHcgAs6AR+AAKcF9AVqIRWAAAgB2IAAEAEbgAAIAfCAAAgBGoMAvwIhFoEAIIAAEAMRQZyBGBkEIRxBmIIACAQdQZQrgAH4AiEegQM2A0AhCoEABwE8gQr5AUGAGDIIAkkhIEF9IQ2AAA4GBkchISATgQIYgQMvAxchEIEY+JEiCpIAAoEJjpEiNoEQgoAiGoABdxdrDhMEBQYHCAkDAgwNARkAGw8iIhQhIoIEfwVMIQYMGYYACoAW0IAACgFsgR5MgQAIASKAC9YDKAJggh8wAwxJG4AAIQQGCyAggR/agABWgAZSBA4hDQyAAZGBBMYCDQ+ADxICCHKAFeABCIEEAIIXjQMKQQKCBrQDRQ0OgRqIAWuBH5KAARADIAp0gBR4gRSggBrSgAAtAwkhCoMgzoERfoACUAMIQcGAAF6AAtKGAMuAABgBdoIWRwZrDgMAAQKABOgBHoENdIIfmAUIA0BBkIAKBoAP7QGQghokARGBICIFdGpBCDuAAjSAAAuAIFiBAF+AACcCgAKAH0YBBIAAB4MAJ4AFCYAAJwEJgQAngAALgArZhAAnApgCggBOAZiEACeDAE4BB40AToAANAGgigBJggBwhwBJgSB3gAIIA0GgK4EEewKgPIMACQMgFEGAETYBDIAFgwERgAA/gAAXgAARBwxqIBUQJBqCAFMBIIkAUgEFjABSAZyAAE4BPIECqgEcgwBKgBCZAQyAIJYDEUEgigBJgAJ2A0EBOoAEcASgKyEdgQFXAR2AA1GAA3gBiYADeAHQgAOEAViAABOAAEKAA2sCQceCBDwCQQGAAqMBIYAKNAQKQQNrgAKngRXuAiEHgQAdgQg2gSB6gAERgQHsBB8LQcSBAZuDC9ECwguBGTQB0YEAEYIcR4AASoERF4gAQ4UAPQIMGoEAGYAX/gEFgAYIAQqAGJaAAByBGa0CQR+CE66CB+mAAh+AAXaBAh8BBYQCH4MBboMS1AMFDAKABWeAAVKBAhsBBoAAVAEKggCRAR2ABZOBCHID//8DgB6CgAAJgCT3AhB2ggsuAkHdgxKfgQChggqqgAJmBBoLQcKCAEABAoEACIMSVoAE/gFEgABagAi2gABUgQOMgAQWgQBbgACzAwJBw4IAJoIC4gNEIgOCCDmCFNiAG+ACAyCBE7EBEIEACoECiYAAKoQDEYAAOQESgBWIAwMQJYMjmQFEgAWJgABkgAAtBBJqIRKBADYCayGBADuAANaBGlCAAA4CBAyBEzCEBckCDBeACNOCAz0CDUuADFmNAR2FAzyEAR2AA3QBaoMDP4IBHoEBnoMAhoEAUoABEAEfgAEXA0GBAoAaKQFkggAQAgV2gAATgAA7AzYCaIIAEAUKdkEPcYAcVQEigAkgAWCAAE4BDoMBvQEOggG9AkEegiHeAkGhigFKgAChgAAMAcWDAjoCACGABCOBBZgBbIADE4ADqgMGIAyBCpsBE4AACQcGQRNNGyEJgADLAwYgCYIN1oAAE4EhHoAALYAC44AADAV0LwGwDoIC6gEAgQLqAQOABGABAIEHZJgESQEKowRJgANhgBrygwBpgAAMhgBpgADbAgdxgQBsiwKnAQSAAMaFAquDAEEBFoMGi4AAB4AGmYEdgYEDNYAADoAGmYADcAUTIBogG4EDbAIiDoIBIQG/ghdnhgEhARaBASEBxoQCYYIBHYABKAEOgQ6AggJKA2QiD4EABwRoaiEMgADcAQuABVqAATKAHaMEKAJYdIACwQEhghVUA1AhIoABAQEJgACbgAOXggEFASKAAzwCGHGACdIHaiIjLQABIoADBoAfOIEK4YEWDoABFYABAYkDPwEJgQEVAQmFAz+AANeAAZ8GIy8BAiIIhRV/gAj3hgEmgAAMgAEfggTEgSPbgQEcAiAGgwEcAQuBFlABf4UGaIACegQQaw4CgAWHgSOUgAl6gg/AhgCMgBAwoQCMigBlAwUgC4IJsgJBh4sDswEJgAGTAQOAAvmAJpuBBmeAAgaBADOAJYmBAJiAJE2ADqCBJp2BALsDIBFqgAAeAi8Bgg7AgBYzjQCXARuoAJeEAhuAAJqACyyDAiCAAjaAAFSCDFiACnOMAFwBGqkAXAEHiABcAQeDAFwD/wBxgCc/gCeGgQIiAwQgDIAAKQILaoACFJYBEYAD3YEFPoIGKoMBuAEEgQG4gQHPgAJigwMhhALIgAWjAWyAF7mEADiCABQELwH0BIMBbwKUCooCtwEVgQK3gABxhQLrhAMAgQasAiAPjALyAaOLAvKCADuABEMBXIME8wFwgAM+gQaZggLuggChgQLwgABDAR+IAEMB8Y0AQ4QGcYYGloADNIQFkYAACwENgwBkAciFBZGBA1cC0DeJAzeCA1UBUIADyosDNwEMgAFugATjgQM3AQuLAzeBJuahAbgBC4ADNQIhD4AC+oAAQIAp14ELUwX/AXFBDoEARwMGIQyAAJ0BBoECGgMMIA+BAGYCIRiAAJUBBoABwoIAlYIBqQIgGIAAhAELgCgPAXaCAIcBD4EAhwEMgBjPgQHkgACIgAR8pwMzgQdCggOYgABGAQCAAe4BD4IAnYEB6wEPgQZlgAVkAiAMgAXeAtA3gAAvAQyDAmwBDIEALwELgQC0gA/SgQP5AkHNgwFzARGBGscBIIEmEYUGfYAACYAknQLQN4MAGwLAAIEAHAMAQdWBB+mHAaqAABwDAkHJhQdAgBnNAXGBBj4BTIUCZoIP0oAGoYoBhoAAvIQA7oAIUqIA7oICSYAAxwEGgwDOhAdLgAfiAiAGgQFagA5dAQyBAPGLBK2FAumAKDABEIMKHwEQgQDthAcUARKBB5qBAEeACR2GAkwCIBCBAI8DECASgQCCAhIMgh3lggebAQqBHJiAAdABCoIHWoAFz4QARoYAIoIAGIAHCIQAGIITBYUAGIIAEgEOlABMgAE8hAA0AQ2AAk6AAAeBC3cCQdCDAI+GCSGDCTIBCoQrvwJEIYIik5IAUIAAyYQAUIAA+AMCQcqFAZuAASEC1DeAK6mBAEABXIMCj4EACwFUkgMkAQuDAySCAp2HAySAB2miAa6CAoeBBmKBApcCIg+DKhiCAcGCB5SAAGIBC4gDHQEPgwMdAQ+GAx0BD4YDHYIDpIgDHaUCL4sDHYUCO4ACGoEDtYAEHIIDxYAAiAEhgAzCgQMlAQqFAyWJAj8BD4YC8wHxigLzhgJYgCsQAwJBy4UBYAEPhgL7ggVpAUiHAwKIAV8DIAYEgybGhQMBgRnrtQMBAUiJAwGBAHKSAv+BAKUBzIQFKYYDB4AAEYQCJQEGgAfOggBNgArEAhcggA8fAQmAAe2CGy4BCYEcvIAAGgEwgCS5gQAIAsw3gxCpAfyLBikBB4QAQQE0gCrEAQOBANaAAAyAEJEBKIAQM4MARAFrggcrggAWgAAiAWuBBtyBE1qBC0WBFIcDBkkbgQAgARKBCvyCLo2AABeBHYmBAZiHC1cBCYILNgMJIQOAAT4DEiAFgAEtgQO3gwOngQblgQf7gQFKAiIDgRJgARCAAHmAA8aBAE2AAWKFA92BFP6SAzOAAcSEAQ6BDLSFABuJA9mAA0aEACKACFKIB0GIBA6BABaEDIqBEZ4BEIMS4QEShiIFgRQ2gAblgRF9gAFBgQlygApJATyHD58BLIABXQQQIBdGgAhVgAP9gCmBgRG8gBgSgSYJgAARgCsIhBCHgBVdATiDBbyCGDeAEh6BFXACKHSBGhKAEj+BEiaAAG8COCCBFbGCHLUDLCIFggAugRGXATCCMO+CADCBKiICLAuDAfWAALuBA6QBBIEBXANrIAWADK6CIFMBNIMemQEsgBHXgwRwgAANgAHoAWqBDNSAACeBAd+AASWBASkGSSIJGyIEgAA4AQmBAGqBAeyBDPeAKH0DBGsggQAXghaAjABPggANATSAIhiACoWAARyDAKsCCUeAGWmAACmAAniAAJYBCYEdWIENZ4EpH4ASW4IRpAIIIIIRpAEEgABcgAAWgRrdAReDES2AEuSCLQUBFIAAF4EVt4ABVgEgggA6gBKxghF2gAPSgRpygABDBBtqQYCAEdyDERiCEMIBRoEAE4ASrYIUOIEOEoEwBYEIfoAAGYABKQcgDUF7IA0bginVAQ2AAJMBF4AAHwENgACZAROAAAiAAagERhshGYMokQHSgwiwAnwhgBFJARSDIBcGGQuUCQEMgBQrhhKngAEhgAjQgAAHgBMngAM0gANCAQ6CB40BEIIatwMCQUCAAY6HJ++CC3OAM+kBAoEz6YEozoEz6IAEwAEOgSBggCGaAQSABWSABh4BDYEFcoEUpYAASgELgADJgSBEAQuADc8CIA2BC+IBCYAEEwQNIAtrgy1rgAmIAU2BLUWCF5sDCSANgAx/gQjUgwArgQAngAGUARCBAEEBCYAAFQEPgBFgAnJBgSOIgAT9gAjNgCFFgCFNggAPAwwgDIYho4AEeQMIEAOBI4GDGTmCDf2DGS4DDWoigABVgABykwBQAQiDAHOEJoqBKSaFK36BAzKBAFKDIP+CAFKDGTOAAFIFCCALSQ2BKDyAAAmBAD2CBmeSAGABDYYm5YACU4EAOYIm5wEIgSUzhCssgyLSgQA5AiAIhQA7ggAsAgcggBa3hzCagRAagAeogBnCAQ2EIgmCJYOBBtWBAYiAMqwBcYABNYEigoEAooALkoEBRIAABwFrgASngAAiAwwhCoINNYMYJIAAEQEIgABhAQqMGcCBIqmGKOyAAB+BBEOABdaEI/+AADUBGIEUFYAAEwEMgRDchQBFigAmgAAfgAAYAxQiB4AWoQEMghnEgAAPARCBM4gBAYAAEIEZxAENgAVJAQ2ABLMDByIKgRnEgAEiggAwgANvgSLMgAAQAQqCADGBBU6AA56EAYaAERaBBkWCGaOAAFEBHIEA8IAYPYIZo4EBnIABZ4EZo4AAjIAAR4sZowEIiBmjAwwgEIQZowEQgQAsghmjggAKgBmjAQqCGaMBCoEFQAEYhAC1gAAoggDZARCDAQ2AEM2DANyBBo+CABkBFIYAGQESgw7OhAHKARGHAgUBEYsByoMB75ICigEShALajgA0gAIQAhIQggX/gAf5AgcLggCYgCi2gQbegQRJgBgtgSVlAxpBfIArbgEOhCPzgBBTAnEbgilIgQBMgRD2AwdLG4IAOgYJIA4gB/yAOmaAA8cBEIADFwILIoEEAocX2wE8gAAHAQ6ABceABA6AAC6ADPwCIAKDAC6CBk2BBluDF6qBACyBBluBBFODGbKACAYBEYEk9YEAHIIFKIAHO4EF24EFI4AMrYAaOYEf2gUYdHILCIEE6gUFEBALS4AZSIEXDgQEf0F+gh43gCExgQZmgQB7jRd4gAAdgDOcgwAXggZyiBePgRj8AR2JF48DIAERgAengQCcgADkBQAQAgsQhAAehBfSAUCMF74FDxATC9KBGSuHJUObGRiBCQyhGRgBtIcZGAEmgQ5DgC0QgAEFgApqgAYFA0giBIATuANBD0uCGwwDQYH+gAVDAXKIGSaCGR6CGSgBIIEAKYMZIYAARo4ZIYYAFI4ZIYAZXZ0ZJIEbaYsZJIAAtIoZJAHEtBkkAkF+jAFmAXGAAWaLABIBH4AAEowZNgEGgBk2BIBEASOEGTYBEIIZNgEXhQFCgxk2AQyEAYqEGS+BAm2GCKeCB1oBA4IHWoIOVAHAgwcYgAAHgRybgRj2AiEdgAAXgRlTgBkTghlTgAe0khlTgRlrghlTgxk7gBAWgxk7gggFARyFGSsDDiESiRjzgRSCgBlTgiGmpRknwwACgAHmgAG7A2sOH4IZZxszNDU2CgsMDQ4PEBEDAhQVASQAJhcYBD4/QEGEGWoDCwwkhgAKgSRZgBlsgw5aghl2ghopgxl2AQqBB/aBDkmAABIBDIAMGQEygwAKghZ0hgFiAgwzgRBnAQaDBQmACgQBN4oWMgEGixYyAQaBDGKBELGBEP+AIPWABKsEn5YCR4E45oEAWwEogwBZgBBNASiBBf2ABMKAHPyAAAICECeBAwcBHIAPLoAALgI7AYEpLwEQgABKBEECECeCIJ8BtYgXUIAEFYAAYgEzggCrASSBNr6AAlyAEFeAAwSABT0DdEGAgANugi39BWpBH3BFggMhggjBAwBBuYsMaIAAQgEHgRafAQiDF9EBh4AO0I0AHgIEdoEDxwNxIgmCDTiADUYCB02CAMYCIgqABwcBCoAMXYEpvgIoIIAhFgQFT3ENgBaXgAWmgjq4Aa6LDeEBA4AUYwEyiwFGATakAUaCC9aABpCCEhWTAKuAAbYEB0GAwIE9nYAAHQHYixL5gwHTASSEGF+BARiCBDKBNo+BADaAOBGBBGSBNOyDAAuAAXcDOgAIgAc+gQArAjoAhDv/gQGagwGPgh0kAwJBtoUTRYEIwAEGgwDbgxlvA0UNNaUA24gAmIEOToEMtwMtABWCJPSLAJSCCIaKAIoBBIYAigG3kACKhQFlgAwMrgCKgAD3gyK8ggFzgSAWmQCYgQKskwEiAbiLAJiBACSAPBsDQYAIgQGnAQeCERmFAKmBAASLAKiABLyAL4CKAKiDGqKCFq4BNoIamIICfYATlIEAvIENJYAP34EI8YIDV4AAaIEAo4AFvIUArgEogACugBvykQCuAgwohQECgQAngg2oARCAABSKAdQBMqcCr4AICoECWoADh4ADj4A8y4ECc4QDlQQYdnJygwPpgghuATCAAScBvo8BJ4EQVYMIrYEIloAC7I8O8YARF4UO8QRBAiEXgAEShgRKASiMAGGDFHsDCyAdgB8UAg0vhB5PgRohjBoGgBhuhBoGAQ+KGgaFAOyGGgaHAOmkHk+BHkeABjsCpDyAAE+BDG+BHWWCD+7/HlyXHlwFqDxBsDyCJqEBzYAABIEACoACM4keXYAAGIAAEoAeFQMUECmgHl4BrIAAUAHNggfagikfARCJHl+KAEuAASiCHmCBAdIBqIEBK48eX4AAQoceX4MXxYE7jIAR8AEGjR4bATKfHlSTADkBKoEAGYQeVIAZlrceVIAATgMGDDCpHkoBBoEAfZMeRAEGhBizAgwtnh5AAQ6AAAoBDoIeQAINLIANIZIeMwEMgA+mgQApAWuAEDyLHjOBBBOFHjMBJ4MEC4IPyoAECwErqAQLkh4hgTmHjx4jgAGbAWCAAD+AHiOBAYyCHiMEBUEeSYEl+wFNhQfBix4qASeKHiqACNeIHiqAFZqDHiqAGWGCHiqDGCcBC4MeKoIcm4QeKoEa440eKoBFTIEeKpgEJIAbR6EEJAEKgQBpgAS0gQBpgAAMjx4qiwJ9AQiAAMaLHioBFYMLkYAAB4geKoAADoALnwIhDYgeLoADOgIiFoIBJYweLgEmkR4ugR5DiR4qgQHhgBGrgT0piBrzARODGvMBGIYWcAEGggEFgRdSARODF88BGYEXT4AdNIQXz4AAvaQeKgEZgR4qhjOpAQ2IASaAAAyFHHIDBSAKggEcAiAKgwEcAQ2LHiqAPQqFHiqAHbyAAn2CAeIBCIQXCIEUcaMX2ocAZQMFIA2eHiqAFOGAAgaBADOMHioBBIIAu4oeKoAgB40AlwEkqACXhAIbgACagBEXgwIghx4qgBnHjQBcASOpAFyAHiqGAFyCHiqAEkSEHiqAA04BC4AA8oEVnwENmx4qggglgQUNhQG4ggZKgQHPgBHwgwQmhALIgBLdph4qASWIHiqBAuuEAwCIHiqHAu6MHiqCADugHioBHogAQ4weKoIAQ4YeJAEWhx4kAwUMK4keJAQEQQZJgBGXA4ICSYIM3aYIsIAFjAIOaoAFFAFrgBo3gQV9AhJrgSgDgRaRgQ7CghaJAxwiDYEXF4ADkoEWwQQgaiEhgAOXgAAMgxtmASKDAA2DA6QBI4EACwFUgAOkgAAHA1AhGYEABwFAgQLIgQ7QAQOBAAeBFheAAAcDMCEkgga/AQ6BA3KFBrSAMJuAAAuBPrgCCGqAGKGCRckBcoIKeYEDTwILIIAroQIgI4ID6oE9DIRBLwEGgQP0gAzngRl0AgR2gQQWgRuUggHKgBtZAy0AAoEZSIEjIoAcU4ADBIADpoEK8QEGgRshAQmAEhWCHdGCAC6CBO2CA9OBEB+CAJiBIYCBAt2CBk0BCogAqIIAnAIIaoAAT4IAeYABAgEEghqmgTyKgBoEgACJgTF+hADfAQqGAv+BAAuGAN+BHPOAANiBIeOBAOYBC4IEyQEihADfhwDbAQiDG+kBCIEDFIIA24AWuIFK9wF/gACWgQC7hEUegRt/ggOIiQNsgQXvghDsgD8SAQOAGuYBGoMAgQEDhAAfgS7tgQA4gACHgQNhgAC3gwBsgwFHgAEighuAgwDaAWqABVgDDCAfgBjwgxs/gBo+gRkcASSBGzyAAdABxIEbPIAbOoAGaoEdGYEXa4EBVAMOICCAACiDB4KAAIkBC4EFmQMOICGDABSBABGAAESBIhaBGQiBLWeCAbKCGvqDAbKCJUSCBpCBQrGBFawBDoEaioEAfIAUzgIiB4AXcaIANoAWOoEEYIAANANrIQmBFnYBDoEET4EAhYAAB4AUuYEZh6sASYABKwEJgQRuAwlBA4EXlogAOoIBtwE6gAFnhQJ/gBT9gQU7AQmAAFWAAjqBAFWAAAeDB5KAFVGAIMKGADwCCUGAQciAFsuDAq6AAJyCAG+BI4ABDIAcS4AAqYQAKIAADIQAZIIACoIAZIIAVoAuT4MF/IEAcoAQJwECgEqvggBmgAJNgQAqgAA+gAWPAUGCC26AEB2EAGaAAOEFLQAEOgCAOqGAFASAABSAAo0BCIMeHYAeG4EBAIId3QMIDB+BHsCBAhmBAqWCAh2AEOGAAh2DArSAANKCCKeCIUuBAf4BGYcALIcDI4YALAELgQnQgiGTAw0cGoAhdoAAFQEbgQDyhgE/gQMegCAsgBsOAU+AJNKAInGBRAiDKKqABPMByJEjD4ADpIoIHIEeLIQjDwENgQNNgAZtqwgcAiANhSMPgABAAgAigAZLiCMPAQuCHV+BJjGAAGmDIw8BE4AAlYAANYMf8oEYgwEFgBvMgBqYA3EgC4gjD4AKDoUf8qUAiIAKLIMDnQELhiMPAQ2PIw+BAFmBARuMCKwBDYIjD4IUw4YjD4Ao2AEIkSMPAsg3gwAblCMPgikPhiMPggSDgAAhiCMPgE4JgQqjiQGGgAC8hADuggqTpSAOgADHhADOiCMPAQuFBI6DIw+AARWBAOaCARWFB86AAjQBDoEPNoItz4si/oAK7YEMXIQDYYABqoIUX4EePoIHUQEKixBlASSkDFqAHwYCIA6CPQmMHZuBRLMBIIJFh4AZO4EHXAFGggecgBHOgSDHgRD4giJGgRGLgQJPgAG/AQODFGGCAJaAADeABK2AAl2DABkBKIEWV4MUcoQQToID2oARQoERQIAZyZwQ6YIAZwIbRoAAMQMAQeeKCOKABVUBEoEs7oMmkIAAEoEWqAGAgAS3AXSDACaTEMkCvf6CHleCE+wCAHGBR/+BDhUCDB6GIISABHKCIGkBBoEBaYMAFIAAZo8AHpEAMoAtyo4AFIISxwHOhSQ4hA8Fgw8WAQaCLAKBJDgBCoM3joMOnYAA2IEANAHPgwK7gRZ7hyQvgAECAcyLJC+CAZIBVIADV4sCvoAcOgIgCogkL4cERKQqioMDp4EdGIwkLwLIN4MHGYAcjIgEPYokL4EEPYAZxYQEPYEHvoEeaIUEPaUAgYsEPYUDW4ABIYEILoAFPAEKggChgB0vggN7gSfPhARFiQNfniQvggFgiyQvggQbgQ53gRBpkiQ0gAFkAiALhCQ0hQQmqic1jAQmgyQ0hAQmgyQ0iQDFgQ03gACEiSQ0AQ6BNTWAKX6AAMCHJCqCA9GBAeiCJCoBBYwkKoII7o8kKgEShiQqgAoUjSQqgQBEiCQqgAAiiiQqgSIugCD1gyY+hyQqAQuDJCqBAB6FEUGJJCqAD/eLCLGOJCoBDoEkKgEOggBNgAUThiQqhie/iANggSkGjQAUhyghhwAUgAA8hQHzggT9gThtgQEDgSvPgA1nggFVhgx4gRJ+AgN2gCFugx28gAWWAWuBEYEBIoQMngETgCNogAh0gROFgQA9AQWBTJyAE4qBA3aBCDMBBYIByIEMposbGYAABwEEgQR9AUeBBP+EBraAQr+BEt+DJKcBBoFUmoMVwQJBuYcSlwEUgAkUgxbyggFegUXxgSzagBKWggHqghZ2gB+hgB93gRtxAQ2EAAoBGIABnoAABwEUgQHEAQWBAgOADNGADKuAAZaAJEyBGriAHTkDC0sbgRLQgAAmgAoYgUSQkBjMhBbrgRL7hBeWhRL/gQD0AUSEEuyEEvqAAF2AUSqAAL8BuogRLQFEhhf9gQDFgQa0gQaohA93AWqBA80BA4UAx4EfrIFE1gEcgVWbggK2AUSACHiAABEBIIEkc4MSC4EAdYEIMwIgA4IU4YFRyoECQYEBGAJJG4ACPpYYaoYAygEFhADKgQB/ghOugA40gADCgCDkgimehBfGgR4Ygh2qgADGAbuSAM+BDNOFAM+CFNmVAM8BJI0AzwEo5ADPgzYliQDPgRzVAkG8iQJdAQWBAfWCBM2HGfSBLvSgCEWDAJyFAJGAAuIDLwEcgU7wAwBBmosJgYIXwIcYnYQaKAFBgDowgCb7gADwAQmDG1GAEhiMHMyMGIKBBGqAFDmCBGgBFIAACIoI+oJGeqAI+oEIpIEjc4IDkgEggVLLAwBB0IoFFYIApYAF6YQXyYIAuYMHo4AAGwEWgRaWgQCpgywOgSwfgUAJpRC7hBN5gQVhgTTHgAlfgVNMgySngShjhyhiAQiBCvaAABCJKGKCCw+WKGKAAG4BOIFKtIUoYoMokI0oYoAAmwEsgQG7ggYvgAbRgQfZAQiABZaFKBWQKGSCKAcENCIGaoAAJwEJgAAngU8ugCWJgSWNAUmBIagBCIAAOIESw4IoZIAAI4AFIYAQBIAmeYEoZIAAlpMoZIFO84AC74IowYsoZIIPXIsoZIAE3IMnnQEEgQGFhChzgEyChShuggDOlShphQKmhwrPgSEqgACmgwq4ARyBWaKDBweBCtSBEQ0DCBAngySPgQALAigLgQFbgQKOgAAHgijxgQXauSi4AQWAKLgBBYMouAEFggCVARuCS8kBHIYouAEXgwJkgyi4AQuAKLmADMQBEIMouQEXgyQjAQeHJCMBJsEkIwEKg0DqAw8QP4UACwFxhwALAR+AAAuMIosBCIAiiwLXJIApQoEhuoFPOAIQNIEiQYArJAIAGoIC44EBY4QiiwEcg03ZgFWegwCZg0qfgQDqgwE0BQRBmgVHgCtdgRpgAYeBA4uFKZGAJteCAx6ADEiAAHmABDCAAXiHA0KBAa0DABA2ggApgwcfgAIdgwE5gAdfASiFRpUBBIBWdYFFNgJBd4MkNQJLG4EP3IQAEAcDQQRKG2pKgAC2gBBCmCI/AwRBKoEQgYIAqoNEToAEcwELgTCxgAB3ARiDDqYB8YIEpIMwDgMwQQyAIUgB8IEY4IEEOIMAsQGIgACHAUqDBgoChAGAGdYCAkiAEoEBwIEIAgEDgBUKgAAMgAJHAcCBUPkBBoACA4MbX4BPNoAAKQIgcoMJdAFsgSUUAh9wgEChBEEfcxCCCGIBbIIX/wQALwEygQAQgQAJAzAQPIEBSYQNAoMFQIIAm4IBLYEBOIQEc4EAYwMEQTmDUfqEBXiCAC+DBhqBGYqBA0uCAHqAFVsBH4IOl5MAHAGLgRxvlQAdgCEOhkzogyMXkwAoggoV7AAcgB77gkjPggGQAQmAAeMBQYBGy4MDzIIBroE2lwICSIQBjpEARgEggBKFlgBigQfVjgF+ggLUgwKigALmgATxASSBCv6BAyaADEWBHtiAC/OABRKBCq+BBPaBAvqECgeCAF2CALKABLGCAH2ABpwCR0GBBGYDCBtyggC4AQOAAAiCXdOAAAgBEIEITQIbcoIAhIAAX4IG1IUATYMcQIAKH4QASYMAqp4AJoIi0YMAKQMvAQagAE8CLQCBE4mcACa9AX2CALeCRYWcAI6CVlmBTU6BCvShAQyZACaIAQyAAcABC4ABs4IYxIAEG4ADQ4EGn4EAN4IDUoIdZYcKQwEgglsygwOBggRbAcWAJpkGBQIJCQkDghSLAduAMFmBUaUB54EMLIJaAoICLoIoTocAxoAHbwIvAYAG6YAG54EOLYEAbYEEaIFD+YImgIJPvAFPgwPrgAoXghm4gADSgjGCASCAAL+BFpGGHtCAEbuCBzaCACMCLEWBBHgBT4QZlIcA0IAARIAGpgFrhQDTggBJhBIwhgLcgRWlgQwTAQaBBPaDDvKDAuuDQLmQAIkBBoUAhAEUglKdigCHgAClAU2RAIeBAL2GAVqBAVKCE+KGCbyAAD0BHIMGEQEUgiBzgQAThAEjgU1PgADvgkaLhADqAQePAGOAGPeAABiFAGOGBTeCAfuAAEqEChWBIPmBC4SDAQqEAiGAEzyDDAaBBb6EAjOGALeBAjCBDuOEBQ6BAIGDBg+BYPKAGBqBB2OKAIaAABaPAOkB24IA6YYARIIre+MA7IArFq4A7LEA6gHniQHLgQNXgQDIhADUgBdjgh1RhQCpgRPDg0tnATCXAImGAB6aA8uJBwaBAIeNBbiBKUeCAs2CNmaCAAqCD66CAAqADAaEAAqDAI6CK3aAADgBdIFF84FJqIED8oAIP4E0NYQIV4IKc4EE/YMHFQMBEDWCMCeFCOCABQQBAoUfnwMCQZSBESaDRHaFAFcDAhA5iABihBUJArQtgwxCgQmrgAAdAVyBYO0BToFkWYELnQIDaoE8xIEADAFsgAOmBEEBEC6DACYBbIId8IAGfQMQNkGABXSCAAuAA6MBG4MA1oAAVgFggwBAgQArhgHzgAANAqAtgUiugAFNAqAtgUhTBCgCmC2JB3SwAB+DAbCBEg+BFD6ADCuAIAmAACSBHxWCADSADPGAEk0BdIQAt4EPK4I/IIIAToEABgKkLZsA+4EQsYAB448A+IUA9IJhNYIBIwKgLYIObJ4BRpkAToACNYMBRIEBv4IjWIMhfYIAy4BF/QKDAoIVWYYBYwFsgyVogQHaAgFFhwAlAklxgA+VgDioiwAqgSFHgQ4ygQCVgBbHggInhgICgi3iwAICgQLsgwEMhCrJuAEMAQeEEWKAAK6AD7OCET+CAO+BWueAMvQBAYFJ0oANxoEV44IPA4Id/IYACoBi0YEzCgGCgRtkgAkGgBFoiQACgAT8gBvygBE6gR4vAQiDWXWAAAyAADWAGfSBAAqBTyuDAAqAAx6BMjqAAAqAC82BY6WAAAqAIKKAXYaBAAoCB0eBPR2BGMCBHoSAE+mBFdOBE7YFA0H6AUmBHreCEVuCP8iAFd6BBAOAIsiBAAqBLMWBHMwBCYJN1IEcrAEJgk26gRyigh3DgC/CgQAKgRDHgSJ8gQENgAnLgBRfgADUgl4Hgjl7gQcFggHjgAMggQMJAQOANLCAL3eCAHCCAyyCAyqBZB2HC3aBACuFAB+CBNeOA2qOAB+BAFqACAOCBaiBG20ELQCQIYADdYASjQJBhIEffYoDe4Au74IuRoMCfoER6wKIE4IAHAGIgCTjggKogicSgQOYgwyqgwOYggKUgQB/gRYUgQHmgQQ8gQNUgwnJhgDMAQOMAK2GAB+CAE2OAMyOAB8CIAWBAB+CAYmoBDaEAJyFBDeEACy0BDeAHeiBAO2BTj8GQQxsQZgggGi3AQCAM/UBC4AATwF+gBmMgzFyAZqACWiBV9gCQX2ANpSBNKSCADwBBoExVoYJ5IAA3oAExIUGCYALCYAKHgUAAQEBAoJU3IABewK4LYMDoQG8gAEKBXRyIgY7gAASghDCAwNBDoEy1JQLLQEGlwyqgREjArktgwyugFXkhQBdAmt2hABdBANBDWuCEbuAAt+AANEBNoAAHoQAcQEKvwBxgCgygQDAgQBzAkEJhABnAgdqgBRDgQBlAhAtggUQhAeaASuBT62CAaqAMZuBD8SCZkSAAA2AFxmFKHuBIluBDQqCTg6BAfyFNAKABRiCAAiAAbuDKOeGED6CACKCB7yDEJiBJK6CBVcBGIECDARMDQMagwhCgQHcgWdXlQDVggOQhAAqlQAjhQhsgA+ymAAmggAjAy0AM50AI4AAC7sAI4cAjwEKnwCPg1EKlgAjghUlgh/cgGp4AXaLEJCDAyoBGIFniAFKgwbIgGaVhlyIAkULgjTzAfqBJyQEQXsLHIBP7og1CwEQgAxhhzavArsBgDaMgRJwixL3gQ63glZcmBL+gAAgAUScACABQJwAILATXgF9ghJoAfGAE/0BC4FQ1AEBgADEAQmCE0sCbBCBcHOAACcBbYET6gcQQAu6CQEVgTXcAUCAJWSCBtICBkGBOZODDdYCIAeBEoICCkGADTSCZvYCdGqCBOWABPCAScuHBPCAABqAFvmCDXuCV76AF9cCIQmAbgwBDoEj+oFA3YIAQoAQTYIAQIEKeoAADIEkY4EAMoEkJ4AABIFOSoAW2YEZpYAlu4EsBgEQgB8JgiomgAA8gi8UgAA8gjtVgi8UgSNEgCG/gQAdgUo2hAOKgySKhABYgRuOBAhLGyGAOd6ADFEBAYImL4A8H4EA04EAzIE67YIAuYIAQYIeXwIgaoEAZQFrgAkAAgBOhGhRgAALgAIXgQCxAkdygBkegjGogCLQATuAI7KDAFKAAO2AAK6HAS6HASkBIoEJPgEKgwCfhAExgABagwEzgWEhgixSgAANgS5jhQFBAkETgUDJgE+KARWEBYwDAA4CgAuPgT3IDCESQe4IIRVBrgghFIE6bQF/gAARAvANgAARA7ANIYAyQQEBgBatBA9BCUuBaXuAZVyBYOABAoAU7QFxgGnDgARZAw90IoAHPQNrIReDEfCAKZOCDWSABIOBCiOBY84DdCEYgAosAX+BEcECIBaFAMKARQOAFDEBGoAyhgISTIRCNAHggjznARSBRSOACimBACaAQWMDBiAVgQdoAwshGoEk7oAIXwIiDoEBYIApw4BGaoMkzAIgGIIOLYEeZIA9EwEHgyyKAiAQgAFJgCUCAQ6BJMsDGSAagQP1gSZCgl+oAwFrdIMBYoE+EgF2glxhAQeAWWCJAhOGAoiAAbSEAoqAbMWAIcyBUswBB4FxF4AAy4FRjQEGgh9cgijBgEx5gwGwghzNAQyDChSCRUkDAiAXgCBFgRpQgwElgQAYBSAPIgkhgDdshwDLgQRQgQC2gBlMgQC2gRVPgRPWgD8kiACygWIHglmngD4JgmzwgwCYAQCCbV6AAJiCAqODX+8CIBOBAFaDWyCAJKGBAmMBDoEJ4oApA4YBiYQAB4Ifk4AApYEg3gFGgADKAQ+AbNeBPZqDGRkBS4Il/wQgDBsigEflAQeAALIBGIIBegERgQFNgQGTBAZ0IRCCL2eBA3EBDIAvvIEhoYA9cYEBToJKM4IC/IAFUAFKgW2bgDzfggJUgQJNggIgAyATaoACRAPTBkuEAlsFE0HRBEuAAl+CFEqAAtqAJUCCRa0CIA+BAReAAtWDCSCAM7WAUtkBdoEBMoAhOoED0oEAbIECNIMDrIEDyQEAgwMPgT5vg04QgwMdhwOTgAAYAQ2BAAiBAzyFJ0EDDgsrgAFfggHLgATbhB/hgQSTgVzwgQAHgmW8gGr4gW8AgwT1A2BB1IIE9QLEA4JxZYQ8goFV5QHVgRgkgRcbAdWABnSCAAeDUS8BAYEdcoMAHoMlpYAQVIEmy4ADNIEOkoFRBYAcz4EoKoEMDYM364AOYYAIxQdBoIbi7X5zgiASAgFxgXHngzBohBwSgAoagAoQAcCAb+6BABaCIaqBAGiBHKKDbyABc4Agu4FrpIAuKAF/gwKuggDlAyADc4InW4FyYYAAPoEQSIAAKokA8YUCXYAAQ4AYjJQAM4ACoQIIdoEAHoACwYkAHocAGYAC4ZMAGYAcDZMAGYAQuJMAGYAHMpMAGYADIZMAGYA71YoAGYIA4oAdUIEA4oAbRIIA4gMLvQWCB5aCA9qAACGAPKCEXiGBCviAADGAAPuBA60E8f8Da4ER+wRB8P8DgCDEgWqOgXKlgXaGA4CAPIAKF4AAW4IAGwMgAHKBWbqCdRKBHpiEAXaDAVSGAFGBZsKBdD2CAXGDBvSBAGMBcIAAUoEHc4EAbYFjLIIAUoAAUIACKQLbAoEMgANBsCuBD3iAbEmCDjeBAmeDAE2DAA2BMtuEAAuBDZmEAAuAb0qFAAuAALaFAAuADiGFAAuBFMCEAAuADtCFAAuBDUyEAAuBae6EAAuADqqFAAuAQOOFAAuABAmFAAuABZiFAAsBDocACwEPgQALgnWugC0IgiAsgCGJgQR3gwD4ggLZggAJgQGkArArgwGlArArhQKIAQKAAr+BAVIBEIcCyKQBUoYAWoEj/4QBzoJsS4ICuIAADYQAC4FmI4QAC4FxyYQAC4ABMIUAC4FooYQAC4FmXIQAC4FsqYQAC4ABMIUAC4ABMIUAC4E/YYQAC4ABMIUAC4ABMIUAC4ABMIUAC4ABMIUAC4UBMIACZIMBDAEQhAELgRezgS9aAnRygAFEAwsLkYkJeoARooMInocJfAEGiAl8ggUQhQl8gCjFhwl8iAjyhwl8ggBCgTpeigl5gUV3hwl4hGZsgXA+giR1BEHAAjaBDMySABeCTJKBFZGPCa2CB0+BJFCjCa2CCR2DCa2ICjeHCa2ALDyCAFyAbpiECo2CdCiABh2BCYyFLmiAEDOICa+ACMoBToEINYBbzAEggENVgWGnhAmyAg0CgFXfgSjkhgmzgQiEgD5BjAFnhwFihURoiAFqgQh/hAm1ggAXASCBCGuFAI6CBbkBFIAGzwUFIhMhFIwJtQKBAoAJMQmgDyEUQeAOIROBCbWBCUICoBCBABEBD4BaUYAHWAENkgmzAgQagQAbAnQigEraAWuAMiCECbQBDYIXHIEJtIBUJYAAIYAH0QEWhAm0gACAAiAVhQDDgCvAAWqALtMBGoAf6IADdoEGqgEOhAm3AROBABOAE4OFCboBDoABdgEUiQm6BA9rIheBAWuBCO8BD4MJugEHgCKBggs7gijzgAbZgQfmAxggDoEH0gMYIBeBB+0BGIMJugEGiQm6ggFpgQfJgilNAiAGjQm6hQLGgAG/hALIggkiAQaBCSIBBoEJuoAAz4FB9IM5f4UJuoF2v4gA64oJGAEZgClKgEaAgAAoAQ2NCRgBD4AITAQPGyIPgRq3ARGACVaHCRiAAPGACvuADKqCCRiAKcCAUESDMYCCAKyBVimDAmWAUdSBCRgBB4AkUoJldYIJFoAj9AISaoABpgHUhgkWAxJB0IIJFgEHgFQCgkX7g07lgE6/AQ2EMO6DMP8BEYAYfYQJFwELgAp+gAM8gQBrgAGRhAMWggkXgAM1ggyqgSzbgQAYgQKKgAKAhwL8giXJhwkYgQVugTXXgjBOhwqoggGkhAqohgp2ARKECnaCNjGCCncDCwuqgBHygQdSgRY6gTIzAwFBnoISRQQAQYgTgAASgAJJgmzJAkEegwAVAfyBYfaGABUBE4J8a4AACYAAWIMD4YgF0oABMAM7AZSAbC2BDqACsC2DRRIBqIAACIEAEAKgLYEToJIAOZYAGQMLrwKCAKyBD++BEi6BDwKAEkABBIASnYA8xYAAEoF04gEEgxKdgg8ugRnIgxBAgkQpgBBAghPBlAAcgAb4gxIsgmLNhABdgBKdihKbgTJGgxI0AgAQgEX5gwBKhxCmgwBKgjValQAchRELlQAfgAL7AXODFTCUAKiGHhODECKEJI+BD+oBEIA3E4MANYBtRIFAYwGngBPQgkdRggDMAwFBCYgBG4EBWIRtkIUA/wG4hAD/lQAgggEfgxK9gBKvmQAqggBKgiIggwGZgQCAgm76gAH7gQE8ghRwgTkkgQA6BMAtC6aFAKmBAeCEAK2CSie8AK2FAIKCTUqBClABSIJtXp4AVIEAP4cAuoAKgIIB9AQLC/wKgGgFgwarhQX4gRtcgxJugQwyASKAKw8BLIETvoEKnYEDVAcJQf+A/59/gjSsAQaDP3qBDB2BB0CBGVmDBzaCIyOABTaBGWyGBmKABxWCAuoBAYFwOgMvAbyEAAgByIAACAJBIINYfIAMh4E9KIAcroAMW4EAOoAhtIIRcIUWKIEYFIQpGoAOX4ANaoIpAIEBFwWYFmoQL4IACgGkhgAKgACwgQDFBJwWEDCCABCABAKBABABqIUAEAGwgwAqAkH+gYAdAkESgQYjgAECgDVggQZyAQKDL7OCN50B8IBBxIMA2oMF5oYyD4EATgEtgQAygBe6AwVBEYABgIEEEQYoAqwtQQqAIsmAWQ6ACm2AJteAAAqCLFCAABuAHKCBeOCCEYaADXyBHpKBGrSBTt6Aeq2DHmiCJjECECuBAICCBByDdcGAAnOAGA2EACGAFVOABCeANWsCciKARriSBC2NAhGJA8eXAmGBOC2FArSEBC0BAY8ELQJBoIBBjAMaEDGCAoeBJhCEAI2CdwKGAIeEAJq5AI+EAz0BDYEqpIEAmoAAlIIKi4Q3AIRMRoEAk4EB6YEt9gH+gls+ggHogUlaggEXAQyEAJCBIYuHATK4AJgBBYIH04kBKoJuggELggEohABngWwKgAKxgH88gwChgACKAQGHAIqAYzDCAIqDCF2WAIqCAGeCABKHAIoEBkH9/4MBJYIAkwENhwEdwwCTkQEfASKAPaKCAksBDIIAmYcAb4UAGAEEgACfgwHKggQ0AQqGA5iAA+uCE3UBCoJCtoEcbooDk4F/a4YAR58DBYEnV6AAwYEZz48AvIgDB4kArIYEDoEEcoAAkAMJEDKFBHCAZ84BB4IADoEgqQExgReWgH0YgiGJBywLC5YLARKBDT8EIGsiD4AqpIJ1Z4BhrYIXj4INCYEX5oElogEAgk1NAtDHgAhxAdCCRymBAAQBSoKDbwNB2CiDDtoC3BaBVeMBf4MVFIIMF4Fqa4ESWoBXbwEogW3ZgBT/ggDagQCkgFd8ASiAAUuFOeCBLzyBFG+AJjmBVP+CcE6BQtiAH0mAgh2ACPiBAMGAfvuDEqGDBPeCHB2ABO+BNG8CCRuBFoSCbjKDBP+CE5+ANG2AACMBrIEajAELgXQrgwBSgB4bgAG3hQGiAdCALZSAChWEAJCCFVSEcM2GAHCAa6GCLFeCCgyBBgWBCduCAXOAAV2DJiCABmyCAPSAB8iDBrkC0CiCABGCAO+AAISAAF2AABUB4IAMBoICQoIAh4JF4gLgFoAAEYAfRAIQM4MAjwHUgACPgjGlAdSFADKCHwiCAJeABm2EAP2JACaFAB6EATSCIYKGAOoBBYMK4YMMcYEA94INhYN4QoAMKIEfuYEWFAEEggAKgBokgR7JgADfhCHNgQr7gC1NgwsCgBw/iACthEPxhgHcgCshhAaQgwCcgACOggCcgwHhggDKgw8MAbyAAieARc2BGfqAcEqBAmYBCYYCcgEQg3wZAQiDW1ABBINOpoJD74I0hIAKRoI8T4IsCIUcOIYUEYIx1YEMrYMAhIMBYYUK94AxP4IJ7wHUgACtgACUBrwETBshEoIHboIBzoEjGIAv1IAx+IEvNoQAPIEktYAX84A0QoAB6IBSZYQ8YoFDwYEANYEHJQVMIgIbIoIXgIGD9oEqEYEFdAIgDIIV/oIX34se14IU8YA+jYEEIIBIMIFWRIMAbINsZIMHzoAAaYAAfIABpQMQamyDB9GANB+HAtmAQN2AFkeAAIaAAcOBACCDAt+AAMqChuKBRyiAAHaCRNkBAYICg4AB4IEK84KAvYE8noIO3oEI0YAASIE6poIOOoNIvIEBHIEArAECggImgl+igQ5egg+4A0ECSoEABYAtGoAAO4EAXYEAlIQAboEOP4IC/4ID8IM4LIEtKYQBR4EBEIE+HYIJWIAfxIEBQoAFfIMFT4MA9IAAFIEIVQIFa4QA8oAR+4UDbIUTBYEK4oAMuIIWuAMAQbqAAkeBAU+BEJCEAhyBGvEBf4I6nwIASIECxYIEioINWIQbhIMNBoMAgIEFBAEPgwJJgS/RggXIhgGkgoIfgQB8AXGABdiBDj2CAmgBS4QD6IQ4NIITv4JD+IIAnIUNpgEPgA5XASSAFa+DAF2AhreBHHGAbuWBA3yBABGABt6JAraBhVKAA62AA1KHAOsFC7YCAQmABxmBOSyCgmyCAsaABtECOwGAP0sBQYACQoAE7gRBB0GKgGbHARuALHGDDkaBHC4BCoE6ZoEEhoMBAYJ1voEK2ICGroADHoNCyIIaBYAZooF5K4IW7oGMzIQC2IAv24EET4EFjgFLgRBtgAbOgAVegSe5gAQHggE9gxotgALtggDHgh/2ghYqggcdhQAlgHDohgLzggLYgAtugRCLATuAAAeDQvqBCuYBCYJ1KoEAHQHAgwAdAsAVgweagAASAcSDABIBxIBivoARWAIKQYA7hIEEtgRGIgMbhQD3gCTwgAMlARuEAQ+CATgC0AiAATiDDESAJPqBAF6CCr2CCY2ACr2BAHqDBpCAIryAEYeBQNGCekOCB7YBL4EFDIEANYFDOIIikIMBgIIAkIEOsoIcfIQHlYEhwYIPJIAHp4AzgwIDSIcH8Y0OgokPI40AHIgH8YATp4UAXIAH8YMPgIEFqIAU+4EMeoEAC4MK7IAk7AKQIYFBcgJ0IoEWpAQvAYYIiwCmAoQIgDawgwBLAQeAAKeAAjaDCJmDAKsBB4gAq4EHeIEAj4JUAIUtQ58Aq4BY14UAYIAAq4MAYIEkJoEAq4QmF4UInwYJQRxrQWyBF7WCf1YCkB6BOnCDAIyAAA8BoIA0hYA0mYMAkoAaCoIJSYBJAocJ/40AhoIuOoQAHJYQcIwJ/QEEgAqSgzSVhAChhABqhAAVhQCrgACCgQB6gQq0gQ1jgCbRgUgggA4SgR8eBIECSRuAAXgBI4MBeIAW94AC4YANoYMAt4ECGYBEpokRN4AAfQEGhgDakgCupBE6hwFsgADHhABggQe6hgFsAQaGI9oDCUEEgVsjgAjFgAFpAR+ADLCAADuAAAsDoBwigACLhAKigTSwgQK8hAIVgwB/hytZqgIHgYAYiwFnjwCghwByhQLShgCwgRzFgBhsgiF/AqAtgUNygALeAy8BgoGGLYJ82AMvAYCBcryBAD2EAhSDXbubA2+iAiKBETCFALiAgMuEAQ2AiIqDALaBeM2DEKEFswsBCn+DBWuBBY8BIoAfEIEw7YAs9wEbghsvhAV5iwV1gI/CghzcgA6LgQcVgALygU2VgTgkg00Xgj+EgmoygIMmgStDggWEgwVxgQs4gj3SgBVJghVjgABmggTFggDEgATFgR1CggSagQJ9gAFbgQJ9gD2OjAElgAHyAQWIASWNAeKJASWNAByIASWAXOCEASUBBYAB3YMAYIGCjYQBJ4EACwELgQqGgSXyhR4ngRXehxA4hBRUgXrdgRA6gQX4gAD0gRTlgh2whQDmASKCSSaDix6DIeSCA0+CAqaAHluCAfWZA02iArKCI/mBBWCBAMCCEhuBbjSABByDAfOBG0GGD86CfFeBBraDAIqBKraBAQwELwG+FYB2H4YEs4kDRsAAlIEEeo0AlIAF/IAAJ4IBZAEFhQ83gB1chFsFgSoXjQ8zgQ4TgQBtggasjA8zgQJrgi9njwHtjAU2gHcFgyfhgVCZgA/HgQaFhgBxhAAagCs/gQAagkrKgDwQhHuAgQfQjQE3AcL6ATcB/oUBN4QPmeIBN4APrJABM4NOxIIBJgHEjgEmAcb6ASYB9oUBJoIqHeQBJoMqOo0BJoAIQYN+WYIj/4IDkYIKA4At4gFGgA1zgQWPAQiBBYqBCgOAAA+ALiGBBY8BCIQKBwL/AYCX+4MQmoEJsYEQmoGRooUMkIBNOoAMC4FKnYMNKIMOBYCNHYEAnYAOzgEEgAyugkONAQSAHRKCGyuAAWKABV+FAECCBLKBBKWBelmEMPOBABiALt6DABgBDYM9nQENgSpzgATvgQ9cghCPgAAIgj4agAuPgw1cgBraigBCggBjggBagXhbgQDtgQy3gQA/hA+tgXl3gQEpgg9Vg39uhA0ehQAVgCmLAwALg4EahIANGYKMDoQ7zoF2X4EACIVf84ApfoEACoEPggEggS+3gRYHgz0KAduAG6oEAUEWTYAru4AGs4BfxgSggAJxgCe4gQBNgzb1AQGAm8aCC9oDQSpGgUA4AgVGgV/lAwBBOYEtAYEG+YACXwML3AmCAYaBkPqAQs6CAhQBLIEr9oAG34Byv4EAD4AAA4BUXoIruoMpOYMXo4J74YJ64YMCLgJBKoAWwAJ1IoB5b4EBtYACSIEAFwFsgwg5AVyAJaiAAYiBi42BmLaABI6BAGuAAtyBYhyDFJsBT4ASTwFLgRbjgBwAAUWAZfIFIARHcnKBZFuCLJyEPNCADFuAanOALKmBArqCAs6AW2qAHU2EFgOFABOAIpmGGnCHABaBk/WAJCqEGmWHABiAHY6GNKSDLnaAHKKEgHOBARiBAAgBOIIAxoFD5IEAt4AfvoI33oIBBIBEMoEAJYE3q4KLFIE3fYEvroALx4EADYAD8YIDboIAXQFcggANgVH9gDfGgQF/hRk/ghyqgDWFAhA3gi0NhwARggBWggANgQdeg4kngTlhhBrqgn4/ggFjgBCcghjugQMTgn/Tg35DgQGEggJ8gRB6gYGUggSbAiwigjMagnvKgRyjgi+MgQJjgQEkgQDZhAAlgi3XggPbAWyDAEOAABeAY6iBAdiAAWQBBIKY/IAAkYEuKIE0KIEASIEDw4FFAIQBIAGwgARGAUGDg9SCCUGBAHCCALCAAEKBAAcCtC2BQI2CErcBtIMAGYEwFoQBe4ADUYNBOIIAkAFsgSTPgQCLgglSgQChgwBBgWkGgQq/AgVJgDrTgABhggBIgQC0AVyBBT+AACMCxC2BHueCABMCxC2CDtUBBIM0JwEBgAMkgZ9RhAFCgTZXgSIAgQL+gQGtgBpkhgD0gi8LhAAlggCygQLVggmMgEILgCo5gQBfgpJ7gwCggTnLgQHphAESgomvggFZmAESgEgVhBOsAWyDA1SFARyCAYeCBo6CAnCCP+yBBYqBMs2BG1iDATaADQEBA4ICP4MBLIGUmoMAjIIAOIUBLIAAo4QAPIABToMAWJABJIQBAYAMkoAKeIQDy4IDCIUD54EBDoAy2IIDt4QCUoFG+IAD0IMhhoAQtAFFhQO0AQaAYV6ElV6CAWODgx6DAKgBOIAFMYIMfINHdoGAO4ID7IAE6gEagzHAgwGWARqCOzWAGJmBA/yDA0qBAwGCAWGBA7KBEucBQYBa0AEDgorSAUGAQkuAHV6AJIUBi4Muz4JjnwEQgAqkgy9fghfJgGs+gRqTgZSshAVsgjkFgBo7hQJxgBT5ggN/gi+VgAAYgAANgUSGgQQ2ggANhAPVgRptg4FPggBdgWVqgwAcgjVdggAWgACQBBALC4SBHe6BADKAZCeCBEiBJ6WCBAOCA0SCXCyCANGBAiuHHWiAOaYBGIEyp4M4rIIAcwEwgh73gUB/hBGLhQAThDpohABGgACkhAf2gAS4gAANgSI8BQuECQEPgQd3gSDogRk+gR2ugiSDhwByA3RBhYJaSAEAgTcpggARgAKzAoYCgjy1gzCEgzmvgTU8hABuAVSDAriDAoyABwSCAe8BSIEABQNYdHOAgKOBS3qAAA2EAq4BNIAfAoMWcIBQpYMU04EHUIAJTIIDR4IStYQBlQEsgAB5gUUWAgNrgQdtggQrAhA6gjXFggD7gjU7ggT1g1N4ggA0gDTFgwNagTR/gQARgTTFggMWgAAFAXCABQSGCQ6SACqBjzybACKCNd2CBnaBhJqGNd2AEVyBNd2EFZ+DJUqBb16BUiSBXVmBDn+EEKyBRMCAF8QCkCOBCDCCDVyKADaCAHsBdIIA34EE34ABP4IADQKkLYEUSIEAlYFFVoABgIMD3QKAAYUeEoIV04AN6wFgggGIgRz7ggEkAUiDB7EBbIMEXwE0gBfTgQGMgCyFgQGCg0X7AVSATfeBAa6BLTmBAEmCAPaEBdeBFIqECR8DEHRzgE6AgXH3AUiCbhYBDIMByoAlXoIBx4EWIYJfWYELGIMKUoUAkYIpSYI1A4QAV4AksIA4K4ILfoM2+ocEuoQAd4IEIYAAD4FUqYQCQ4MCbIFU7oMBjoECXoEAGYIATYILMoIANYEASYQ7S5YBxogaprAAH4ML3IFSwJQBvYQ3FYMA1YcBTII3FIIBy4Kb1IFEoIQGToALSoE3GYIAwAECgzcZgQQXgjcZgwBGiATxgQAHgztQgpoMgaJtgwY4gAFgAU+AR+2HOqeEAF6CaZKEAF4BAYQ6V4GXJIE6pI0AXoI6pIQAYgEbg0YtAqAtgzpRnQBPmQCtgUaZgAdfgSH2Awu+BYARsoID4IALqYAD4oMKa4Kg0IEACYI03oIEUQFqgRSLggAdASyAA5qCBJaBB1SBEaaBlb6AGIyFBa8BcIAKVoFeh4QCR4AKY4I8vYQGL4EAHAFcgwR+ArQtgj7kgQuahAh0AUSBAAUBTIEd6YMRy4FEIoEAioABCIIG6oMQ7IAADIJD/gQgCE8bhCWjgAuDhAmAgwyeghqkghjOpQA7gBe5gA3PhAhogIXWgkb8gQJEgwV5gwFiAgRqgAcmAhA3ggASggfYAXSDADCBB9GBExCABYmEAneBCG6CAP+BQoGAHleCHDuHAzqBDQ2BAzyCBA8BWIAxKIAFnIAf7YBRFoEQJoEStYAAfoKUb4NAfoEqL4AD8gEIhAAmggDogAAFgEpLiAXCggE3ASKAUjSCA/uAHNyDAwWCGs6CAWSFHIeCHayCWIOBGjMBhYEACoQCHIE/0IUJbIMJaQHEgB9TgiMLgyUbggEJgCM+gAJlgWAGAYKCOwqBpCIBAYAADIAIhYEjHICKGIVKgIEDQoEISoI4p4Gc0YIPTII8CoAAQoGlpIECroGKCIEAB4QM74AHjIAUI4UAQQEBgp+Wg4b2gQCPgA0CgABDgRRxgAkhAwurBIAflIEAGQF8gRlHgCjfgQAMAXiDAX0CjAGFDTuECuUCLGuAAuOBGcCBBUoBA4Bh7YIFgAGQgJACggDbgAGVgAxUgAA0ggWQATiAHMmBoHWBURaABZQBB4I9k4Eq9YEu9oEE04NYIoEACoIAmgE0gB2AgQGYgx0pgQrWgF3AgQv/gwAvgBnzgk6gggAyAiALggiTgQAKgVo7hAANgANKgz4KgT34gxIwiGYwhj3/gACAggAtgQV9gT3QgAANgAHRgj4FgAv0gTEugAANgDpAgAKSgTEigAANgAnHgABQgTEWgAANgD4OgASegTEKgAANgD4RgAGDgTD+gAANghRqgQVKgQc8gBAMgg9KgC6rgT4XgAeMgSC4gz4egACfhD4egRB8g4WQgF9PgQAKgkAHgB3cAQaDRdOAETUBBoOhO4JbW4Ico4AA14IU84IeS4Ja5oBt5oMCFIAC7oMn2YAC5oBKAQEggiLrAQODTo2BAPmDAXeALCiCAAqAABSBTpcBDIBNGIBf84IDCYED5gEBgQuugS53AiIJgQLOgRlLgQAEBUkbC6ALgRwpgwlzgSoZhAlzhQl1ggIFiQlzAUWDAheBCXSAQJyAAV2AQuKCBX2RCXOCAmKaCXODB/WTCXOCCWyAApWFHAOCCHEDNgJ4hAVTgGUYgAIVgSJAgABPAWCBToiFAFABgIIA74EC3YIJoYQEdIUJpAEEgAmkgwf2gEy2hibRgh5MgAulgAH9AUGAAUODADWBAGeAVAMBIIEA2YgAbIIC3AF4gqObgwjoAQWFYMiAABiJB5GCBjeBA0KAAAmFCeiDCogBZIAP7oACT5sHx4BQvccJ7YEo3LQJ7QF4gR3fggkrhAF8gD9QgAeegACMgCjkgRsVglojgQDdgwahAaSCAPoCoC2OCa6AHeWEHbKEAiOBBQyCNMyJAh6ABZiVBc+DIGSLCcqCGiOECcsBeIQJy4MCE4IJvAFohQnZgQ5zgZHUhgl5AVyBUIeGCCoBBIUIKoCjT5oI14Kk+IAACgFohQWOggX+hAT38gnUhwm4iAlVkAmzggLUlAm2hANigQoOhgiahgoohgD6AQSCobKDAVWUAC6ABJiCqZ//ASGHASGCAgjoCouGAmG4CouBBF6AjxYDAAs/gg+agQAejxcghj/GlAAfgAAcglI2AgRAgAGUAQOAAA0CgweBN1qFP2KAENOAIiWBLjyATW2Al8aCULCOdeuFDu+BFfgBQYAjsIAAMAF/gFCoAQaCpL0CAEiAP46BE52BFj+CMuiAVRiCesqCBTGBNXiBF4mCBtyAF3qCkRUCCEmBIbwCS3KAFfOAUuKCBRCBdj8ByIAJjYFUz4MAcINePYNXjIEFY4KaDQJBKoEQioABX4IWuQRC//+BgmzZAVSAAAwDgICCgFF3ATeAW8SATlOBAWaACXmCVmiCFoOBAAyBWtqBCt2DVJiBAHWBI8+CAOSAAHeBVUSEABaBT4aJABmCAseCABcBTIcAF4JCFIAAHQHEgR6TgABegFkbgDjKgAAJAZyEMQgBKIEAD4AYXoQAMIEEgIFkuIAARgGcgSwPAQKAXrGAe+eDFRQBOIJXqYAE84QACAFEgks1gpMgg0Q6gAGRAYCCZ2yAQRSAeNaCB/2BAH4BiIEjhIALRQGEgQCOgCoZgGkkggpUATaCRV2BQzUBbIAFngE2gAQbg5DfAhA0ggHdgACMgBN2incXgACngY9Wg19ShRIZg0G7gAUngRpRgQokgWVJg0G9BEE5QSqBJY+AAdSCp0+CK4mBAv6DS0qCNWeDUoqACpeAS++BAGaAE6ODCCuEQ/oGQYgRNgK4gI+lgAALgB8IgBRvgo+xgHpvAayDABWACJaAALyBABUB4IAAFQGggwAVgAijgADfgQAVAX6CeBOAKpCDAL2BAK4BLIAGIoRbhIVEKIIoEgFEgDgahDK+ghZehQuBhkQhgiqgAiA3gQbcgQCrgG1ihQAShEQ3AUiDAReAMFsCDGyAGOQClCCBCVoBNoALK4EDbwJBkIQADwGMgwAPAZKEAA8BgIMADwGWhAAPAXyBDmACC0ODGVyBWjCXGVyCDWuBOE2CGVyBAAqAATmAeSgBSYIEGgMLC+OAjWKAAhQEC6EEaYCzYAVmZmljaYCy5QEgg7TZEwAxLjMuMS4xLW1vdGxleQBpbnaAs20VZCBsaXRlcmFsL2xlbmd0aHMgc2V0hgAcBWNvZGUgiQAZD3Vua25vd24gaGVhZGVyIICz0wFniwAyAmRpgLN3AW6AtAmKABYDYml0hABHECByZXBlYXQAdG9vIG1hbnmFABcHc3ltYm9sc44AGAJvcoYAU4YAJIUAVoKz9IAAXYC0QAFrhQCmAgBigAD4gACaDGVycm9yAHN0cmVhbYQADYoA1QstLSBtaXNzaW5nIIC0pwQtb2YtggBHgAAlAmNvgLQtAmN0hQDjA2NoZYoAF4QAmI0AFwRkYXRhhgAViwELASCBANQFZmFyIGKAtJABAIUAVwJyY4EAgQVtYXRjaIYAMgF3gLT0BG93IHOBtQOGATuCAN4DdHlwhwATiwGyggDQjwB1ggAWhQGvBGNvbXCAtSQBc4C06YACDgR0aG9kgDInEwwLpQIDAAQABQAGAAcACAAJAAqAKQcNDQAPABEAEwAXABsAH4CVbhYrADMAOwBDAFMAYwBzAIMAowDDAOMAgAY4ggABAYCMAAIBgYQAAgGChAACAYOEAAIBhIQAAgGFhAACBZAASQDIghjMgK1JggCEAQeAAIABDYAAegEZgCkpATGAA4wBYYAARgHBgEjqAYGBSOyAQBYEAQYBCIApDAMQARiABbwJMAFAAWABgAHAiQB4hQBwhQBoAYaAAAIBh4AAAgGIgAACAYmAAAIBioAAAgGLgAACAYyAAAIBjYAAAgGOgAACARCAAHIBEoAAiAEIggCAAQaAAQIBBYABBAMEAAyAAJaAHJwCAA6AAKIBD4CwMwQOC7cMtQEsgBzVggABARCMAAIBEYQAAgEShAACAROEAAIBFIQAAgEVhAACARDAASyJAICFAHSFAGyBAGQBFoAAAgEXgAACARiAAAIBGYAAAgEagAACARuAAAIBHIAAAgEdgAACAUCAAAIGoAgAAKANgACIgADQAR6AAAQBD4AAVAEggAAQAiAOgwDgAR6AAASBABSBAAEBoIQAFAETgAAEAQeEABQBDIABOAGMgAAEAUyAAAQBzIAABAEsgAAEAayAAAQBbIAABAHsgAAEARyAAAQBnIAABAFcgAAEAdyAAAQBPIAABAG8gAAEAXyAAAQB/IAABAECgAAEAYKAAAQBQoAABAHCgAAEASKAAAQBooAABAFigAAEAeKAAAQBEoAABAGSgAAEAVKAAAQB0oAABAEygAAEAbKAAAQBcoAABAHygAAEAQqAAAQBioAABAFKgAAEAcqAAAQBKoAABAGqgAAEAWqAAAQB6oAABAEagAAEAZqAAAQBWoAABAHagAAEgHm4AgC6gAAEAXqAAAQB+oAABAEGgAAEAYaAAAQBRoAABAHGgAAEASaAAAQBpoAABAFmgAAEAeaAAAQBFoAABAGWgAAEAVaAAAQB1oAABAE2gAAEAbaAAAQBdoAABAH2gAAEAQ6AAAQBjoAABAFOgAAEAc6AAAQBLoAABAGugAAEAW6AAAQB7oAABAEegAAEAZ6AAAQBXoAABAHegAAEAT6AAAQBvoAABAF+gAAEAf6AAAQBAYAABAGBgAAEAUGAAAQBwYAABAEhgAAEAaGAAAQBYYAABAHhgAAEARGAAAQBkYAABAFRgAAEAdGAAAQBMYAABAGxgAAEAXGAAAQB8YAABAEJgAAEAYmAAAQBSYAABAHJgAAEASmAAAQBqYAABAFpgAAEAemAAAQBGYAABAGZgAAEAVmAAAQB2YAABAE5gAAEAbmAAAQBeYAABAH5gAAEAQWAAAQBhYAABAFFgAAEAcWAAAQBJYAABAGlgAAEAWWAAAQB5YAABAEVgAAEAZWAAAQBVYAABAHVgAAEATWAAAQBtYAABAF1gAAEAfWAAAQBDYAABAGNgAAEAU2AAAQBzYAABIARMwIArYAABAFtgAAEAe2AAAQBHYAABAGdgAAEAV2AAAQB3YAABAE9gAAEAb2AAAQBfYAABAH9gAAEAROAAMIFEwEJAJOAAAgBk4AACAFTgAAIAVOAAAgB04AACAHTgAAIATOAAAgBM4AACAGzgAAIAbOAAAgBc4AACAFzgAAIAfOAAAgB84AACAELgAAIgBDagAQCgAAEgAAIAUuAAAgBS4AACAHLgAAIAcuAAAgBK4AACAErgAAIAauAAAgBq4AACAFrgAAIAWuAAAgB64AACAHrgAAIARuAAAgBG4AACAGbgAAIAZuAAAgBW4AACAFbgAAIAduAAAgB24AACAE7gAAIATuAAAgBu4AACAG7gAAIAXuAAAgBe4AACAH7gAAIAfuAAAiBA7YBB4AACAGHgAAIAYeAAAgBR4AACAFHgAAIAceAAAgBx4AACAEngAAIASeAAAgBp4AACAGngAAIAWeAAAgBZ4AACAHngAAIAeeAAAgBF4AACAEXgAAIAZeAAAgBl4AACAFXgAAIAVeAAAgB14AACAHXgAAIATeAAAgBN4AACAG3gAAIAbeAAAgBd4AACAF3gAAIAfeAAAgB94AACAEPgAAIAQ+AAAgBj4AACAGPgAAIAU+AAAgBT4AACAHPgAAIAc+AAAgBL4AACAEvgAAIAa+AAAgBr4AACAFvgAAIAW+AAAgB74AACAHvgAAIAR+AAAgBH4AACAGfgAAIAZ+AAAgBX4AACAFfgAAIAd+AAAgB34AACAE/gAAIAT+AAAgBv4AACAG/gAAIAX+AAAgBf4AACAH/gAAIAf+AAAiBBAoBQIAABAEggAAEAWCAAAQBEIAABAFQgAAEATCAAAQBcIIFVgMHAEiAAAQBKIAABAFogAAEARiAAAQBWIAABAE4gAAEAXiAAAQBBIAABAFEgAAEASSAAAQBZIAABAEUgAAEAVSAAAQBNIAABAF0gAAEAQOAAEIBg4AABAFDgAAEAcOAAAQBI4AABAGjgAAEAWOAAAQB44AABIC+K4AAdIECxgEFgABcAQWCBUoBFIAABAEMgAAEARyAAASAvlaABEQBBYIGBAEaggXqAQWAA9QBBYADuAEFgAOcgE92gAAEARGAAAQBCYAABAEZgAAEgQACARWAAAQBDYAABAEdgAAEgL59gAKkgQZAAQWAAiyBBaYBBYABtAEFgD3fAxsLTYMfuYcABIC+rooABIEHUYkABAEEjAAEAQWKAAQEQbAcC4C9CosAS40AO4UALwEGhAAEgQWIgQAEgQEKgQAEgQGSgQAEgIS2ggAEAQuEAAQBDIQABIAF24FHeQTgHQsjhQBfhQXLAhARgAVtBgcJBgoFC4A6uAQNAg4BgAclBJQeC2mFAJCFAIiFAICFAHiBAGiBAFyBBh8BEIAABAEUgAAEARiAAAQBHIAABAEggAAEASiAAAQBMIAABAE4gAAEAUCAAAQBUIAABIEGvQFwgAAEAYCAAAQBoIAABAHAgAAEAeCAAG8DHwtyjQBvgQBrgQBngQBjgQBfgQBbgQBXgQBTgQBPgQBLgQBHgQBDgQE8AYCvAEGAUc0CC22BAMcBBIAAAgEIgAAEgQEzgQJLARCAAA6DAAyBnqyAqmuEACSBB3OBAE8BCIAACIEAGIUADIEIt4MADAEggQCUgDKEgQBrAYCBCC8BBIMADIA/SAoBABAMAEGRIQv/gCUfgMDAgIKxBQgJCQoKgEk3gAABAQ2AAAEBDoAAAQEPgAABARCEAAEBEYQAAQEShAABAROEAAEBFIwAAQEVjAABARaMAAEBF4wAAQEYnAABARmcAAEBGpwAAQEbmwABARyBffsEBAQFBYHB1QEHgAABAQiEAAGAXSqCAAEBCowAAYAnsooAAYEBMJkAAYEBTJkAAYEBaLkAAYEBpLkAAYIDdYABzoUBvI0BqJ0BkLwBgAIbHLwAAQEdvAABgA9PgH05A9AqAQ==")),t)})}var Y9i=x(T(),1);var P9i=x(T(),1),ks,C1,wu,pY;function Fq(e){if(ks=e,{malloc:C1,free:wu,memory:pY}=ks,typeof C1!="function"||typeof wu!="function"||!pY)throw ks=C1=wu=pY=null,new Error("Invalid WASM module")}function uAe(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=C1(o),this.in=C1(r),this.inBufferSize=r,this._scratch=new Uint8Array(o),e?(this._process=ks.deflate_process,this._last_consumed=ks.deflate_last_consumed,this._end=ks.deflate_end,this.streamHandle=ks.deflate_new(),t==="gzip"?s=ks.deflate_init_gzip(this.streamHandle,i):t==="deflate-raw"?s=ks.deflate_init_raw(this.streamHandle,i):s=ks.deflate_init(this.streamHandle,i)):t==="deflate64-raw"?(this._process=ks.inflate9_process,this._last_consumed=ks.inflate9_last_consumed,this._end=ks.inflate9_end,this.streamHandle=ks.inflate9_new(),s=ks.inflate9_init_raw(this.streamHandle)):(this._process=ks.inflate_process,this._last_consumed=ks.inflate_last_consumed,this._end=ks.inflate_end,this.streamHandle=ks.inflate_new(),t==="deflate-raw"?s=ks.inflate_init_raw(this.streamHandle):t==="gzip"?s=ks.inflate_init_gzip(this.streamHandle):s=ks.inflate_init(this.streamHandle)),s!==0)throw new Error("init failed:"+s)},transform(s,a){try{let c=s,d=new Uint8Array(pY.buffer),u=this._process,h=this._last_consumed,p=this.out,b=this._scratch,f=0;for(;f<c.length;){let y=Math.min(c.length-f,32768);(!this.in||this.inBufferSize<y)&&(this.in&&wu&&wu(this.in),this.in=C1(y),this.inBufferSize=y),d.set(c.subarray(f,f+y),this.in);let _=u(this.streamHandle,this.in,y,p,o,0),S=_&16777215;if(S&&(b.set(d.subarray(p,p+S),0),a.enqueue(b.slice(0,S))),!e){let Z=_>>24&255,V=Z&128?Z-256:Z;if(V<0)throw new Error("process error:"+V)}let A=h(this.streamHandle);if(A===0)break;f+=A}}catch(c){this._end&&this.streamHandle&&this._end(this.streamHandle),this.in&&wu&&wu(this.in),this.out&&wu&&wu(this.out),a.error(c)}},flush(s){try{let a=new Uint8Array(pY.buffer),c=this._process,d=this.out,u=this._scratch;for(;;){let h=c(this.streamHandle,0,0,d,o,4),p=h&16777215,b=h>>24&255;if(!e){let f=b&128?b-256:b;if(f<0)throw new Error("process error:"+f)}if(p&&(u.set(a.subarray(d,d+p),0),s.enqueue(u.slice(0,p))),b===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&&wu&&wu(this.in),this.out&&wu&&wu(this.out)}}})}var bY=class{constructor(t="deflate",n){return uAe(!0,t,n)}},gY=class{constructor(t="deflate",n){return uAe(!1,t,n)}};var mAe=!1;async function hAe(e,{baseURI:t}){if(!mAe){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=Bpt(e);else throw r}let o=await WebAssembly.instantiate(n);Fq(o.instance.exports),mAe=!0}}function Bpt(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 Iq;dAe(jp);tSe({initModule:e=>{if(!Iq){let{wasmURI:t}=e;typeof t==Nu&&(t=t()),Iq=hAe(t,e)}return Iq}});jp({CompressionStreamZlib:bY,DecompressionStreamZlib:gY});var tki=x(T(),1);function zpt(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var Mn=zpt;var iki=x(T(),1);function Hpt(e,t){this.position=e,this.headingPitchRange=t}var yY=Hpt;var aki=x(T(),1);function MB(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new _e,this.tourEnd=new _e,this.entryStart=new _e,this.entryEnd=new _e,this._activeEntries=[]}MB.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};MB.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;pAe.call(this,e,t,function(i){n.playlistIndex=0,i||fAe(n._activeEntries),n.tourEnd.raiseEvent(i)})};MB.prototype.stop=function(){fAe(this._activeEntries)};function fAe(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function pAe(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=Kpt.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 Kpt(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++,pAe.call(this,e,t,n)}}var xY=MB;var Zki=x(T(),1);var yki=x(T(),1);var pki=x(T(),1),no=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-no.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?no.Bounce.In(e*2)*.5:no.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}}}}),TY=function(){return performance.now()},Jpt=(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=TY()),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})(),V1={Linear:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=V1.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=V1.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=V1.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=V1.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}}},bAe=(function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e})(),Pq=new Jpt,gAe=(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=no.Linear.None,this._interpolationFunction=V1.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=bAe.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=Pq,Pq.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=TY()),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],b=0,f=h.length;b<f;b+=1){var y=this._handleRelativeValue(a,h[b]);if(isNaN(y)){u=!1,console.warn("Found invalid interpolation list. Skipping.");break}p.push(y)}u&&(i[s]=p)}if((d==="object"||c)&&a&&!u){n[s]=c?[]:{};var _=a;for(var S in _)n[s][S]=_[S];o[s]=c?[]:{};var h=i[s];if(!this._isDynamic){var A={};for(var S in h)A[S]=h[S];i[s]=h=A}this._setupProperties(_,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=TY()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=TY()),!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=no.Linear.None),this._easingFunction=t,this},e.prototype.interpolation=function(t){return t===void 0&&(t=V1.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=TY()),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 y=Math.trunc(s/a),_=s-y*a,S=Math.min(_/i._duration,1);return S===0&&s===i._duration?1:S},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 b=0,f=this._chainedTweens.length;b<f;b++)this._chainedTweens[b].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 cki=bAe.nextId,n0=Pq,lki=n0.getAll.bind(n0),dki=n0.removeAll.bind(n0),uki=n0.add.bind(n0),mki=n0.remove.bind(n0),hki=n0.update.bind(n0);var jpt={LINEAR_NONE:no.Linear.None,QUADRATIC_IN:no.Quadratic.In,QUADRATIC_OUT:no.Quadratic.Out,QUADRATIC_IN_OUT:no.Quadratic.InOut,CUBIC_IN:no.Cubic.In,CUBIC_OUT:no.Cubic.Out,CUBIC_IN_OUT:no.Cubic.InOut,QUARTIC_IN:no.Quartic.In,QUARTIC_OUT:no.Quartic.Out,QUARTIC_IN_OUT:no.Quartic.InOut,QUINTIC_IN:no.Quintic.In,QUINTIC_OUT:no.Quintic.Out,QUINTIC_IN_OUT:no.Quintic.InOut,SINUSOIDAL_IN:no.Sinusoidal.In,SINUSOIDAL_OUT:no.Sinusoidal.Out,SINUSOIDAL_IN_OUT:no.Sinusoidal.InOut,EXPONENTIAL_IN:no.Exponential.In,EXPONENTIAL_OUT:no.Exponential.Out,EXPONENTIAL_IN_OUT:no.Exponential.InOut,CIRCULAR_IN:no.Circular.In,CIRCULAR_OUT:no.Circular.Out,CIRCULAR_IN_OUT:no.Circular.InOut,ELASTIC_IN:no.Elastic.In,ELASTIC_OUT:no.Elastic.Out,ELASTIC_IN_OUT:no.Elastic.InOut,BACK_IN:no.Back.In,BACK_OUT:no.Back.Out,BACK_IN_OUT:no.Back.InOut,BOUNCE_IN:no.Bounce.In,BOUNCE_OUT:no.Bounce.Out,BOUNCE_IN_OUT:no.Bounce.InOut},Zs=Object.freeze(jpt);function kB(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}kB.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 de(this.view.position);t.flyToBoundingSphere(o,i)}};kB.prototype.stop=function(){l(this.activeCamera)&&this.activeCamera.cancelFlight(),l(this.activeCallback)&&this.activeCallback(!0)};kB.prototype.getCameraOptions=function(e){let t={duration:this.duration};return l(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=Zs.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=Gt(t,e)),t};var _Y=kB;var Rki=x(T(),1);function Xq(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}Xq.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};Xq.prototype.stop=function(){clearTimeout(this.timeout),l(this.activeCallback)&&this.activeCallback(!0)};var SY=Xq;var RAe={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=L0(t),RAe[t]}},Dq;typeof DOMParser<"u"&&(Dq=new DOMParser);var Qpt=new KO({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),Px=32,yAe=2414016,xAe=1,TAe=16093e3,_Ae=.1,SAe=[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"],AAe=["http://www.google.com/kml/ext/2.2"],qpt=["http://www.w3.org/2005/Atom"],Me={kml:SAe,gx:AAe,atom:qpt,kmlgx:SAe.concat(AAe)},Oq={Document:NAe,Folder:g0t,Placemark:y0t,NetworkLink:R0t,GroundOverlay:Z0t,PhotoOverlay:MAe,ScreenOverlay:A0t,Tour:T0t};function i0(e){this._dataSource=e,this._deferred=fd(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}Object.defineProperties(i0.prototype,{dataSource:{get:function(){return this._dataSource}}});i0.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0};i0.prototype.addPromise=function(e){this._promises.push(e)};i0.prototype.wait=function(){let e=this._deferred;return this._used||e.resolve(),Promise.all([e.promise,Promise.all(this._promises)])};i0.prototype.process=function(){let e=this._stack.length===1;return e&&(this._started=Uu._getTimestamp()),this._process(e)};i0.prototype._giveUpTime=function(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let e=this;setTimeout(function(){e._timeoutSet=!1,e._started=Uu._getTimestamp(),e._process(!0)},0)};i0.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]};i0.prototype._pop=function(){let e=this._stack;return e.pop(),e.length===0?(this._deferred.resolve(),!1):!0};i0.prototype._process=function(e){let t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();for(;l(i);){let o=Oq[i.localName];if(l(o)&&(Me.kml.indexOf(i.namespaceURI)!==-1||Me.gx.indexOf(i.namespaceURI)!==-1)&&(o(t,i,n,this),this._timeoutSet||Uu._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function $pt(e){let t=e.slice(0,Math.min(4,e.size)),n=fd(),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 e0t(e){let t=fd(),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 EAe(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 GAe(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 t0t(e,t){let n=await e.getData(new QN);n=EAe(n),n=GAe(n),t.kml=Dq.parseFromString(n,"application/xml")}async function Nq(e,t){let n=RAe.detectFromFilename(e.filename)??"application/octet-stream",i=await e.getData(new JN(n));t[e.filename]=i}function Mu(e,t,n,i){let o=i.keys,r=new AY.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 AY.default(d).absoluteTo(r).toString(),p=o.indexOf(h);if(p!==-1){let b=o[p];c.setAttribute(n,i[b]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",b)}}}}function ku(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=Bq(a,i);l(c)&&s.setAttribute(n,c.url)}}function LAe(e,t,n){let i=ya(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 W0t),o}function ZY(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function BB(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 UB(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++]=BB(n[s],t);return o}function Xx(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 ya(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function io(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 ZAe(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 Ff(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 _i(e,t,n){let i=io(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function kn(e,t,n){let i=io(e,t,n);if(l(i))return i.textContent.trim()}function If(e,t,n){let i=io(e,t,n);if(l(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function Bq(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 We({url:o});else{let r=new AY.default(t.getUrlComponent()),s=new AY.default(e);o=n[s.absoluteTo(r)],l(o)&&(i=new We({url:o}))}}return l(i)||(i=t.getDerivedResource({url:e})),i}var kd={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function kq(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?(kd.maximumRed=r,kd.red=void 0):(kd.maximumRed=void 0,kd.red=0),o>0?(kd.maximumGreen=o,kd.green=void 0):(kd.maximumGreen=void 0,kd.green=0),i>0?(kd.maximumBlue=i,kd.blue=void 0):(kd.maximumBlue=void 0,kd.blue=0),kd.alpha=n,U.fromRandom(kd)):new U(r,o,i,n)}function HS(e,t,n){let i=kn(e,t,n);if(l(i))return kq(i,kn(e,"colorMode",n)==="random")}function n0t(e){let t=io(e,"TimeStamp",Me.kmlgx),n=kn(t,"when",Me.kmlgx);if(!l(t)||!l(n)||n.length===0)return;let i=Q.fromIso8601(n),o=new Ts;return o.addInterval(new vn({start:i,stop:Je.MAXIMUM_VALUE})),o}function i0t(e){let t=io(e,"TimeSpan",Me.kmlgx);if(!l(t))return;let n,i=io(t,"begin",Me.kmlgx),o=l(i)?Q.fromIso8601(i.textContent):void 0,r=io(t,"end",Me.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 Ts,n.addInterval(new vn({start:o,stop:s}))}else l(o)?(n=new Ts,n.addInterval(new vn({start:o,stop:Je.MAXIMUM_VALUE}))):l(s)&&(n=new Ts,n.addInterval(new vn({start:Je.MINIMUM_VALUE,stop:s})));return n}function WAe(){let e=new Hc;return e.width=Px,e.height=Px,e.scaleByDistance=new Dt(yAe,xAe,TAe,_Ae),e.pixelOffsetScaleByDistance=new Dt(yAe,xAe,TAe,_Ae),e}function zq(){let e=new Yh;return e.outline=!0,e.outlineColor=U.WHITE,e}function vAe(){let e=new Nh;return e.translucencyByDistance=new Dt(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Yi.LEFT,e.font="16px sans-serif",e.style=ur.FILL_AND_OUTLINE,e}function Hq(e,t,n,i,o){let r=kn(e,"href",Me.kml);if(!l(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=_i(e,"x",Me.gx)??0,d=_i(e,"y",Me.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=Bq(r,n,i);if(o){let a=kn(e,"refreshMode",Me.kml),c=kn(e,"viewRefreshMode",Me.kml);a==="onInterval"||a==="onExpire"?Zt(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&&Zt(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let d=kn(e,"viewBoundScale",Me.kml)??1,u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",h=kn(e,"viewFormat",Me.kml)??u,p=kn(e,"httpQuery",Me.kml);l(h)&&s.setQueryParameters(eu(OB(h))),l(p)&&s.setQueryParameters(eu(OB(p)));let b=t._ellipsoid;return Jq(s,t.camera,t.canvas,d,t._lastCameraView.bbox,b),s}return s}function o0t(e,t,n,i,o){let r=_i(t,"scale",Me.kml),s=_i(t,"heading",Me.kml),a=HS(t,"color",Me.kml),c=io(t,"Icon",Me.kml),d=Hq(c,e,i,o,!1);l(c)&&!l(d)&&(d=!1);let u=_i(c,"x",Me.gx),h=_i(c,"y",Me.gx),p=_i(c,"w",Me.gx),b=_i(c,"h",Me.gx),f=io(t,"hotSpot",Me.kml),y=Xx(f,"x"),_=Xx(f,"y"),S=ya(f,"xunits"),A=ya(f,"yunits"),Z=n.billboard;l(Z)||(Z=WAe(),n.billboard=Z),Z.image=d,Z.scale=r,Z.color=a,(l(u)||l(h)||l(p)||l(b))&&(Z.imageSubRegion=new Qe(u,h,p,b)),l(s)&&s!==0&&(Z.rotation=W.toRadians(-s),Z.alignedAxis=m.UNIT_Z),r=r??1;let V,E;l(y)&&(S==="pixels"?V=-y*r:S==="insetPixels"?V=(y-Px)*r:S==="fraction"&&(V=-y*Px*r),V+=Px*.5*r),l(_)&&(A==="pixels"?E=_*r:A==="insetPixels"?E=(-_+Px)*r:A==="fraction"&&(E=_*Px*r),E-=Px*.5*r),(l(V)||l(E))&&(Z.pixelOffset=new M(V,E))}function DB(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")o0t(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;l(c)||(c=vAe(),n.label=c),c.scale=_i(a,"scale",Me.kml)??c.scale,c.fillColor=HS(a,"color",Me.kml)??c.fillColor,c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;l(c)||(c=new Jc,n.polyline=c),c.width=_i(a,"width",Me.kml),c.material=HS(a,"color",Me.kml),l(HS(a,"outerColor",Me.gx))&&Zt("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),l(_i(a,"outerWidth",Me.gx))&&Zt("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),l(_i(a,"physicalWidth",Me.gx))&&Zt("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),l(If(a,"labelVisibility",Me.gx))&&Zt("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;l(c)||(c=zq(),n.polygon=c),c.material=HS(a,"color",Me.kml)??c.material,c.fill=If(a,"fill",Me.kml)??c.fill,c.outline=If(a,"outline",Me.kml)??c.outline}else if(a.localName==="BalloonStyle"){let c=kq(kn(a,"bgColor",Me.kml))??U.WHITE,d=kq(kn(a,"textColor",Me.kml))??U.BLACK,u=kn(a,"text",Me.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:d,text:u}}else if(a.localName==="ListStyle"){let c=kn(a,"listItemType",Me.kml);(c==="radioFolder"||c==="checkOffOnly")&&Zt(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function r0t(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")DB(e,h,r,i,o);else{let p=Ff(h,"Pair",Me.kml);for(let b=0;b<p.length;b++){let f=p[b],y=kn(f,"key",Me.kml);if(y==="normal"){let _=kn(f,"styleUrl",Me.kml);if(l(_))s=n.getById(_),l(s)||(s=n.getById(`#${_}`)),l(s)&&r.merge(s);else{let S=io(f,"Style",Me.kml);DB(e,S,r,i,o)}}else Zt(`kml-styleMap-${y}`,`KML - Unsupported StyleMap key: ${y}`)}}}let u=kn(t,"styleUrl",Me.kml);if(l(u)){let h=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),b=p[0];h=`${i.getDerivedResource({url:b}).getUrlComponent()}#${p[1]}`}s=n.getById(h),l(s)||(s=n.getById(`#${h}`)),l(s)&&r.merge(s)}return r}function s0t(e,t,n){return t.fetchXML().then(function(i){return FAe(e,i,n,t,!0)})}function FAe(e,t,n,i,o,r){let s,a,c,d,u=ZAe(t,"Style",Me.kml);if(l(u)){let y=u.length;for(s=0;s<y;s++)d=u[s],a=ya(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),DB(e,d,c,i,r)))}let h=ZAe(t,"StyleMap",Me.kml);if(l(h)){let y=h.length;for(s=0;s<y;s++){let _=h[s];if(a=ya(_,"id"),l(a)){let S=Ff(_,"Pair",Me.kml);for(let A=0;A<S.length;A++){let Z=S[A],V=kn(Z,"key",Me.kml);if(V==="normal"){if(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),!l(n.getById(a))){c=n.getOrCreateEntity(a);let E=kn(Z,"styleUrl",Me.kml);if(l(E)){E[0]!=="#"&&(E=`#${E}`),o&&l(i)&&(E=i.getUrlComponent()+E);let G=n.getById(E);l(G)&&c.merge(G)}else d=io(Z,"Style",Me.kml),DB(e,d,c,i,r)}}else Zt(`kml-styleMap-${V}`,`KML - Unsupported StyleMap key: ${V}`)}}}}let p=[],b=t.getElementsByTagName("styleUrl"),f=b.length;for(s=0;s<f;s++){let y=b[s].textContent;if(y[0]!=="#"){let _=y.split("#");if(_.length===2){let S=_[0],A=i.getDerivedResource({url:S});p.push(s0t(e,A,n))}}}return p}function Kq(e,t,n){let i=new sg(e,t.id,["position"]),o=new Up(t.position);t.polyline=l(n.polyline)?n.polyline.clone():new Jc,t.polyline.positions=new rg([i,o])}function IAe(e,t){return!l(e)&&!l(t)||e==="clampToGround"?tt.CLAMP_TO_GROUND:e==="relativeToGround"?tt.RELATIVE_TO_GROUND:e==="absolute"?tt.NONE:t==="clampToSeaFloor"?(Zt("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),tt.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(Zt("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),tt.RELATIVE_TO_GROUND):(l(e)?Zt("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):Zt("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),tt.CLAMP_TO_GROUND)}function a0t(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&Zt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new Up(e))}function c0t(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")&&Zt("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 zB(e,t,n,i){let o=t.label;l(o)||(o=l(n.label)?n.label.clone():vAe(),t.label=o),o.text=t.name;let r=t.billboard;l(r)||(r=l(n.billboard)?n.billboard.clone():WAe(),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 PAe(e,t){let n=e.path;l(n)||(n=new j0,n.leadTime=0,e.path=n);let i=t.polyline;l(i)&&(n.material=i.material,n.width=i.width)}function l0t(e,t,n,i,o){let r=kn(n,"coordinates",Me.kml),s=kn(n,"altitudeMode",Me.kml),a=kn(n,"altitudeMode",Me.gx),c=If(n,"extrude",Me.kml),d=e._ellipsoid,u=BB(r,d);return i.position=u,zB(e,i,o,IAe(s,a)),c&&ZY(s,a)&&Kq(t,i,o),!0}function CAe(e,t,n,i,o){let r=io(n,"coordinates",Me.kml),s=kn(n,"altitudeMode",Me.kml),a=kn(n,"altitudeMode",Me.gx),c=If(n,"extrude",Me.kml),d=If(n,"tessellate",Me.kml),u=ZY(s,a),h=_i(n,"drawOrder",Me.gx),p=e._ellipsoid,b=UB(r,p),f=o.polyline;if(u&&c){let y=new Q0;i.wall=y,y.positions=b;let _=o.polygon;l(_)&&(y.fill=_.fill,y.material=_.material),y.outline=!0,l(f)?(y.outlineColor=l(f.material)?f.material.color:U.WHITE,y.outlineWidth=f.width):l(_)&&(y.outlineColor=l(_.material)?_.material.color:U.WHITE)}else if(e._clampToGround&&!u&&d){let y=new Jc;y.clampToGround=!0,i.polyline=y,y.positions=b,l(f)?(y.material=l(f.material)?f.material.color.getValue(Je.MINIMUM_VALUE):U.WHITE,y.width=f.width??1):(y.material=U.WHITE,y.width=1),y.zIndex=h}else l(h)&&Zt("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!d&&Zt("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=l(f)?f.clone():new Jc,i.polyline=f,f.positions=c0t(b,s,a,p),(!d||u)&&(f.arcType=cn.NONE);return!0}function d0t(e,t,n,i,o){let r=io(n,"outerBoundaryIs",Me.kml),s=io(r,"LinearRing",Me.kml),a=io(s,"coordinates",Me.kml),c=e._ellipsoid,d=UB(a,c),u=If(n,"extrude",Me.kml),h=kn(n,"altitudeMode",Me.kml),p=kn(n,"altitudeMode",Me.gx),b=ZY(h,p),f=l(o.polygon)?o.polygon.clone():zq(),y=o.polyline;if(l(y)&&(f.outlineColor=l(y.material)?y.material.color:U.WHITE,f.outlineWidth=y.width),i.polygon=f,b?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),l(d)){let _=new Ec(d),S=Ff(n,"innerBoundaryIs",Me.kml);for(let A=0;A<S.length;A++){s=Ff(S[A],"LinearRing",Me.kml);for(let Z=0;Z<s.length;Z++)a=io(s[Z],"coordinates",Me.kml),d=UB(a,c),l(d)&&_.holes.push(new Ec(d))}f.hierarchy=_}return!0}function u0t(e,t,n,i,o){let r=kn(n,"altitudeMode",Me.kml),s=kn(n,"altitudeMode",Me.gx),a=Ff(n,"coord",Me.gx),c=Ff(n,"angles",Me.gx),d=Ff(n,"when",Me.kml),u=If(n,"extrude",Me.kml),h=ZY(r,s),p=e._ellipsoid;c.length>0&&Zt("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let b=Math.min(a.length,d.length),f=[],y=[];for(let S=0;S<b;S++){let A=BB(a[S].textContent,p);f.push(A),y.push(Q.fromIso8601(d[S].textContent))}let _=new dc;return _.addSamples(y,f),i.position=_,zB(e,i,o,IAe(r,s)),PAe(i,o),i.availability=new Ts,d.length>0&&i.availability.addInterval(new vn({start:y[0],stop:y[y.length-1]})),h&&u&&Kq(t,i,o),!0}function VAe(e,t,n,i,o,r,s,a,c){let d=e[0],u=e[e.length-1],h=new dc;h.addSamples(e,t),n.intervals.addInterval(new vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:a0t(h,s,a)})),i.addInterval(new vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function m0t(e,t,n,i,o){let r=If(n,"interpolate",Me.gx),s=Ff(n,"Track",Me.gx),a,c,d,u=!1,h=new cg,p=new Ts,b=new cc,f=e._ellipsoid;for(let y=0,_=s.length;y<_;y++){let S=s[y],A=Ff(S,"when",Me.kml),Z=Ff(S,"coord",Me.gx),V=kn(S,"altitudeMode",Me.kml),E=kn(S,"altitudeMode",Me.gx),G=ZY(V,E),v=If(S,"extrude",Me.kml),I=Math.min(Z.length,A.length),X=[];a=[];for(let N=0;N<I;N++){let g=BB(Z[N].textContent,f);X.push(g),a.push(Q.fromIso8601(A[N].textContent))}r&&(l(c)&&VAe([c,a[0]],[d,X[0]],b,p,h,!1,"absolute",void 0,!1),c=a[I-1],d=X[X.length-1]),VAe(a,X,b,p,h,G&&v,V,E,!0),u=u||G&&v}return i.availability=p,i.position=b,zB(e,i,o),PAe(i,o),u&&(Kq(t,i,o),i.polyline.show=h),!0}var XAe={Point:l0t,LineString:CAe,LinearRing:CAe,Polygon:d0t,Track:u0t,MultiTrack:m0t,MultiGeometry:h0t,Model:f0t};function h0t(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=XAe[u.localName];if(l(h)){let p=LAe(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 f0t(e,t,n,i,o){return Zt("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function p0t(e,t){let n=io(e,"ExtendedData",Me.kml);if(!l(n))return;l(io(n,"SchemaData",Me.kml))&&Zt("kml-schemaData","KML - SchemaData is unsupported"),l(ya(n,"xmlns:prefix"))&&Zt("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=Ff(n,"Data",Me.kml);if(l(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=ya(a,"name");l(c)&&(i[c]={displayName:kn(a,"displayName",Me.kml),value:kn(a,"value",Me.kml)})}}t.kml.extendedData=i}var wo;typeof document<"u"&&(wo=document.createElement("div"));function b0t(e,t,n,i,o){let r,s,a,c=t.kml,d=c.extendedData,u=kn(e,"description",Me.kml),h=t.balloonStyle??n.balloonStyle,p=U.WHITE,b=U.BLACK,f=u;l(h)&&(p=h.bgColor??U.WHITE,b=h.textColor??U.BLACK,f=h.text??u);let y;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 A=f.match(/\$\[.+?\]/g);if(A!==null)for(r=0;r<A.length;r++){let Z=A[r],V=Z.substr(2,Z.length-3),E=/\/displayName$/.test(V);V=V.replace(/\/displayName$/,""),y=d[V],l(y)&&(y=E?y.displayName:y.value),l(y)&&(f=f.replace(Z,y??""))}}}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],y=d[s],f+=`<tr><th>${y.displayName??s}</th><td>${y.value??""}</td></tr>`;f+="</tbody></table>"}if(!l(f))return;f=Qpt.link(f),wo.innerHTML=f;let _=wo.querySelectorAll("a");for(r=0;r<_.length;r++)_[r].setAttribute("target","_blank");l(i)&&i.keys.length>1&&(Mu(wo,"a","href",i),Mu(wo,"link","href",i),Mu(wo,"area","href",i),Mu(wo,"img","src",i),Mu(wo,"iframe","src",i),Mu(wo,"video","src",i),Mu(wo,"audio","src",i),Mu(wo,"source","src",i),Mu(wo,"track","src",i),Mu(wo,"input","src",i),Mu(wo,"embed","src",i),Mu(wo,"script","src",i),Mu(wo,"video","poster",i)),ku(wo,"a","href",o),ku(wo,"link","href",o),ku(wo,"area","href",o),ku(wo,"img","src",o),ku(wo,"iframe","src",o),ku(wo,"video","src",o),ku(wo,"audio","src",o),ku(wo,"source","src",o),ku(wo,"track","src",o),ku(wo,"input","src",o),ku(wo,"embed","src",o),ku(wo,"script","src",o),ku(wo,"video","poster",o);let S='<div class="cesium-infoBox-description-lighter" style="';S+="overflow:auto;",S+="word-wrap:break-word;",S+=`background-color:${p.toCssColorString()};`,S+=`color:${b.toCssColorString()};`,S+='">',S+=`${wo.innerHTML}</div>`,wo.innerHTML="",t.description=S}function HB(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=LAe(t,i,n.context),c=a.kml,d=r0t(e,t,n.styleCollection,r,s),u=kn(t,"name",Me.kml);a.name=u,a.parent=o;let h=i0t(t);l(h)||(h=n0t(t)),a.availability=h,Qq(a);function p(Z){return Z?Z.show&&p(Z.parent):!0}let b=If(t,"visibility",Me.kml);a.show=p(o)&&(b??!0);let f=io(t,"author",Me.atom),y=c.author;y.name=kn(f,"name",Me.atom),y.uri=kn(f,"uri",Me.atom),y.email=kn(f,"email",Me.atom);let _=io(t,"link",Me.atom),S=c.link;S.href=ya(_,"href"),S.hreflang=ya(_,"hreflang"),S.rel=ya(_,"rel"),S.type=ya(_,"type"),S.title=ya(_,"title"),S.length=ya(_,"length"),c.address=kn(t,"address",Me.kml),c.phoneNumber=kn(t,"phoneNumber",Me.kml),c.snippet=kn(t,"Snippet",Me.kml),p0t(t,a),b0t(t,a,d,s,r);let A=e._ellipsoid;return wAe(t,a,A),YAe(t,a,A),l(io(t,"Region",Me.kml))&&Zt("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function NAe(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function g0t(e,t,n,i){let o=HB(e,t,n),r=Be(n);r.parentEntity=o.entity,NAe(e,t,r,i)}function y0t(e,t,n,i){let o=HB(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=XAe[h.localName];l(p)&&(p(e,n.entityCollection,h,r,s,r.id),a=!0)}a||(r.merge(s),zB(e,r,s))}var x0t={FlyTo:S0t,Wait:_0t,SoundCue:Yq,AnimatedUpdate:Yq,TourControl:Yq};function T0t(e,t,n,i){let o=kn(t,"name",Me.kml),r=ya(t,"id"),s=new xY(o,r),a=io(t,"Playlist",Me.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=x0t[h.localName];p?p(s,h,c):console.log(`Unknown KML Tour playlist entry type ${h.localName}`)}}}e._kmlTours.push(s)}function Yq(e,t){Zt(`KML Tour unsupported node ${t.localName}`)}function _0t(e,t){let n=_i(t,"duration",Me.gx);e.addPlaylistEntry(new SY(n))}function S0t(e,t,n){let i=_i(t,"duration",Me.gx),o=kn(t,"flyToMode",Me.gx),r={kml:{}};wAe(t,r,n),YAe(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new _Y(i,o,s);e.addPlaylistEntry(a)}function YAe(e,t,n){let i=io(e,"Camera",Me.kml);if(l(i)){let o=_i(i,"longitude",Me.kml)??0,r=_i(i,"latitude",Me.kml)??0,s=_i(i,"altitude",Me.kml)??0,a=_i(i,"heading",Me.kml)??0,c=_i(i,"tilt",Me.kml)??0,d=_i(i,"roll",Me.kml)??0,u=m.fromDegrees(o,r,s,n),h=Sc.fromDegrees(a,c-90,d);t.kml.camera=new YN(u,h)}}function wAe(e,t,n){let i=io(e,"LookAt",Me.kml);if(l(i)){let o=_i(i,"longitude",Me.kml)??0,r=_i(i,"latitude",Me.kml)??0,s=_i(i,"altitude",Me.kml)??0,a=_i(i,"heading",Me.kml),c=_i(i,"tilt",Me.kml),d=_i(i,"range",Me.kml)??0;c=W.toRadians(c??0),a=W.toRadians(a??0);let u=new th(a,c-W.PI_OVER_TWO,d),h=m.fromDegrees(o,r,s,n);t.kml.lookAt=new yY(h,u)}}function A0t(e,t,n,i){let o=n.screenOverlayContainer;if(!l(o))return;let r=n.sourceResource,s=n.uriResolver,a=io(t,"Icon",Me.kml),c=Hq(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=io(t,"screenXY",Me.kml),p=io(t,"overlayXY",Me.kml),b=io(t,"size",Me.kml),f,y,_,S,A,Z;l(b)&&(f=Xx(b,"x"),y=Xx(b,"y"),_=ya(b,"xunits"),S=ya(b,"yunits"),l(f)&&f!==-1&&f!==0&&(_==="fraction"?A=`width: ${Math.floor(f*100)}%`:_==="pixels"&&(A=`width: ${f}px`),u.push(A)),l(y)&&y!==-1&&y!==0&&(S==="fraction"?Z=`height: ${Math.floor(y*100)}%`:S==="pixels"&&(Z=`height: ${y}px`),u.push(Z))),d.style=u.join(";");let V=0,E=d.height;l(p)&&(f=Xx(p,"x"),y=Xx(p,"y"),_=ya(p,"xunits"),S=ya(p,"yunits"),l(f)&&(_==="fraction"?V=f*d.width:(_==="pixels"||_==="insetPixels")&&(V=f)),l(y)&&(S==="fraction"?E=y*d.height:(S==="pixels"||S==="insetPixels")&&(E=y))),l(h)&&(f=Xx(h,"x"),y=Xx(h,"y"),_=ya(h,"xunits"),S=ya(h,"yunits"),l(f)&&(_==="fraction"?A=`left: calc(${Math.floor(f*100)}% - ${V}px)`:_==="pixels"?A=`left: ${f-V}px`:_==="insetPixels"&&(A=`right: ${f-V}px`),u.push(A)),l(y)&&(S==="fraction"?Z=`bottom: calc(${Math.floor(y*100)}% - ${E}px)`:S==="pixels"?Z=`bottom: ${y-E}px`:S==="insetPixels"&&(Z=`top: ${y-E}px`),u.push(Z))),d.style=u.join(";")},o.appendChild(d)}function Z0t(e,t,n,i){let r=HB(e,t,n).entity,s,a=!1,c=e._ellipsoid,d=UB(io(t,"LatLonQuad",Me.gx),c),u=_i(t,"drawOrder",Me.kml);if(l(d))s=zq(),s.hierarchy=new Ec(d),s.zIndex=u,r.polygon=s,a=!0;else{s=new wh,s.zIndex=u,r.rectangle=s;let f=io(t,"LatLonBox",Me.kml);if(l(f)){let y=_i(f,"west",Me.kml),_=_i(f,"south",Me.kml),S=_i(f,"east",Me.kml),A=_i(f,"north",Me.kml);l(y)&&(y=W.negativePiToPi(W.toRadians(y))),l(_)&&(_=W.clampToLatitudeRange(W.toRadians(_))),l(S)&&(S=W.negativePiToPi(W.toRadians(S))),l(A)&&(A=W.clampToLatitudeRange(W.toRadians(A))),s.coordinates=new ce(y,_,S,A);let Z=_i(f,"rotation",Me.kml);if(l(Z)){let V=W.toRadians(Z);s.rotation=V,s.stRotation=V}}}let h=io(t,"Icon",Me.kml),p=Hq(h,e,n.sourceResource,n.uriResolver,!0);if(l(p)){a&&Zt("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=_i(h,"x",Me.gx),y=_i(h,"y",Me.gx),_=_i(h,"w",Me.gx),S=_i(h,"h",Me.gx);(l(f)||l(y)||l(_)||l(S))&&Zt("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=HS(t,"color",Me.kml),s.material.transparent=!0}else s.material=HS(t,"color",Me.kml);let b=kn(t,"altitudeMode",Me.kml);l(b)?b==="absolute"?(s.height=_i(t,"altitude",Me.kml),s.zIndex=void 0):b!=="clampToGround"&&Zt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${b}`):(b=kn(t,"altitudeMode",Me.gx),b==="relativeToSeaFloor"?(Zt("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=_i(t,"altitude",Me.kml),s.zIndex=void 0):b==="clampToSeaFloor"?Zt("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):l(b)&&Zt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${b}`))}function MAe(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),Zt(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var Nx={INTERVAL:0,EXPIRE:1,STOP:2};function OB(e){if(!l(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var C0t=new ce,R1=new be,wq=new M,V0t=new m;function Jq(e,t,n,i,o,r){function s(d){return d<-W.PI_OVER_TWO?-W.PI_OVER_TWO:d>W.PI_OVER_TWO?W.PI_OVER_TWO:d}function a(d){return d>W.PI?d-W.TWO_PI:d<-W.PI?d+W.TWO_PI:d}let c=fT(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),l(t)&&t._mode!==re.MORPHING){let d,u;if(o=o??C0t,l(n)&&(wq.x=n.clientWidth*.5,wq.y=n.clientHeight*.5,d=t.pickEllipsoid(wq,r,V0t)),l(d)?u=r.cartesianToCartographic(d,R1):(u=ce.center(o,R1),d=r.cartographicToCartesian(u)),l(i)&&!W.equalsEpsilon(i,1,W.EPSILON9)){let S=o.width*i*.5,A=o.height*i*.5;o=new ce(a(u.longitude-S),s(u.latitude-A),a(u.longitude+S),s(u.latitude+A))}c=c.replace("[bboxWest]",W.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",W.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",W.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",W.toDegrees(o.north).toString());let h=W.toDegrees(u.longitude).toString(),p=W.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",h),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",W.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",W.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,R1),c=c.replace("[cameraLon]",W.toDegrees(R1.longitude).toString()),c=c.replace("[cameraLat]",W.toDegrees(R1.latitude).toString()),c=c.replace("[cameraAlt]",W.toDegrees(R1.height).toString());let b=t.frustum,f=b.aspectRatio,y="",_="";if(l(f)){let S=W.toDegrees(b.fov);f>1?(y=S,_=S/f):(_=S,y=S*f)}c=c.replace("[horizFov]",y.toString()),c=c.replace("[vertFov]",_.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(eu(c))}function R0t(e,t,n,i){let r=HB(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=io(t,"Link",Me.kml);if(l(c)||(c=io(t,"Url",Me.kml)),l(c)){let d=kn(c,"href",Me.kml),u,h;if(l(d)){let p=d;if(d=Bq(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=kn(c,"viewRefreshMode",Me.kml),u==="onRegion"){Zt("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}h=kn(c,"viewBoundScale",Me.kml)??1;let _=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",S=kn(c,"viewFormat",Me.kml)??_,A=kn(c,"httpQuery",Me.kml);l(S)&&d.setQueryParameters(eu(OB(S))),l(A)&&d.setQueryParameters(eu(OB(A)));let Z=e._ellipsoid;Jq(d,e.camera,e.canvas,h,e._lastCameraView.bbox,Z)}let b={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new wa,y=jq(e,f,d,b).then(function(_){let S=e._entityCollection,A=f.values;S.suspendEvents();for(let E=0;E<A.length;E++){let G=A[E];l(G.parent)||(G.parent=r,Qq(G)),S.add(G)}S.resumeEvents();let Z=kn(c,"refreshMode",Me.kml),V=_i(c,"refreshInterval",Me.kml)??0;if(Z==="onInterval"&&V>0||Z==="onExpire"||u==="onStop"){let E=io(_,"NetworkLinkControl",Me.kml),G=l(E),v=Q.now(),I={id:qn(),href:d,cookie:{},lastUpdated:v,updating:!1,entity:r,viewBoundScale:h,needsUpdate:!1,cameraUpdateTime:v},X=0;if(G&&(I.cookie=eu(kn(E,"cookie",Me.kml)??""),X=_i(E,"minRefreshPeriod",Me.kml)??0),Z==="onInterval")G&&(V=Math.max(X,V)),I.refreshMode=Nx.INTERVAL,I.time=V;else if(Z==="onExpire"){let N;if(G&&(N=kn(E,"expires",Me.kml)),l(N))try{let g=Q.fromIso8601(N),C=Q.secondsDifference(g,v);C>0&&C<X&&Q.addSeconds(v,X,g),I.refreshMode=Nx.EXPIRE,I.time=g}catch{Zt("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else Zt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else l(e.camera)?(I.refreshMode=Nx.STOP,I.time=_i(c,"viewRefreshTime",Me.kml)??0):Zt("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");l(I.refreshMode)&&e._networkLinks.set(I.id,I)}}).catch(function(_){Zt(`An error occured during loading ${d.url}`),e._error.raiseEvent(e,_)});i.addPromise(y)}}}function E0t(e,t,n,i){let o=Oq[t.localName];return l(o)?o(e,t,n,i):MAe(e,t,n,i)}function Uq(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:io(a,"Document",Me.kml),d=kn(c,"name",Me.kml);l(d)||(d=ig(i.getUrlComponent())),l(e._name)||(e._name=d);let u=new Uu._DeferredLoading(e),h=new wa(e);return Promise.all(FAe(e,n,h,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let y=0;y<f.length;y++){let _=f[y];if(l(Oq[_.localName])){p=_;break}}}let b={parentEntity:void 0,entityCollection:t,styleCollection:h,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),E0t(e,p,b,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}async function G0t(e,t,n,i,o){let r=qt("ThirdParty/Workers/zip-web-worker.js"),s=qt("ThirdParty/zip-module.wasm");jp({workerURI:r,wasmURI:s});let a=new OS(new $p(n)),c=await a.getEntries(),d=[],u={},h;for(let p=0;p<c.length;p++){let b=c[p];b.directory||(/\.kml$/i.test(b.filename)&&(!l(h)||!/\//i.test(b.filename))?(l(h)&&d.push(Nq(h,u)),h=b):d.push(Nq(b,u)))}if(l(h)&&d.push(t0t(h,u)),await Promise.all(d),a.close(),!l(u.kml))throw new ue("KMZ file does not contain a KML document.");return u.keys=Object.keys(u),Uq(e,t,u.kml,i,u,o)}function jq(e,t,n,i){i=i??B.EMPTY_OBJECT;let o=i.sourceUri,r=i.uriResolver,s=i.context,a=i.screenOverlayContainer,c=n;if(typeof n=="string"||n instanceof We){n=We.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??We.DEFAULT.clone();return o=We.createIfNeeded(o),l(a)&&(a=Mn(a)),Promise.resolve(c).then(function(d){return d instanceof Blob?$pt(d).then(function(u){return u?G0t(e,t,d,o,a):e0t(d).then(function(h){h=EAe(h),h=GAe(h);let p,b;try{p=Dq.parseFromString(h,"application/xml")}catch(f){b=f.toString()}if(l(b)||p.body||p.documentElement.tagName==="parsererror"){let f=l(b)?b:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new ue(f)}return Uq(e,t,p,o,r,a,s)})}):Uq(e,t,d,o,r,a,s)}).catch(function(d){return e._error.raiseEvent(e,d),console.log(d),Promise.reject(d)})}function Uu(e){e=e??B.EMPTY_OBJECT;let t=e.camera,n=e.canvas;this._changed=new _e,this._error=new _e,this._loading=new _e,this._refresh=new _e,this._unsupportedNode=new _e,this._clock=void 0,this._entityCollection=new wa(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new bg,this._networkLinks=new Xt,this._entityCluster=new Vu,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():ce.clone(ce.MAX_VALUE)},this._ellipsoid=e.ellipsoid??ie.default;let i=e.credit;typeof i=="string"&&(i=new yt(i)),this._credit=i,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}Uu.load=function(e,t){return t=t??B.EMPTY_OBJECT,new Uu(t).load(e,t)};Object.defineProperties(Uu.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}}});Uu.prototype.load=function(e,t){t=t??B.EMPTY_OBJECT,_s.setLoading(this,!0);let n=this._name;this._name=void 0,this._clampToGround=t.clampToGround??!1;let i=this;return jq(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=Q.equals(s,Je.MINIMUM_VALUE),d=Q.equals(a,Je.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 _f,o.startTime=s,o.stopTime=a,o.currentTime=Q.clone(s),o.clockRange=Ss.LOOP_STOP,o.clockStep=Yo.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),_s.setLoading(i,!1),i}).catch(function(o){return _s.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};Uu.prototype.destroy=function(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()};function Qq(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 L0t(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=io(r,"NetworkLinkControl",Me.kml),c=l(a),d=0;if(c){if(l(io(a,"Update",Me.kml))){Zt("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=eu(kn(a,"cookie",Me.kml)??""),d=_i(a,"minRefreshPeriod",Me.kml)??0}let u=Q.now(),h=t.refreshMode;if(h===Nx.INTERVAL)l(a)&&(t.time=Math.max(d,t.time));else if(h===Nx.EXPIRE){let v;if(l(a)&&(v=kn(a,"expires",Me.kml)),l(v))try{let I=Q.fromIso8601(v),X=Q.secondsDifference(I,u);X>0&&X<d&&Q.addSeconds(u,d,I),t.time=I}catch{Zt("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else Zt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,b=e._entityCollection,f=n.values;function y(v){b.remove(v);let I=v._children,X=I.length;for(let N=0;N<X;++N)y(I[N])}b.suspendEvents();let _=b.values.slice(),S;for(S=0;S<_.length;++S){let v=_[S];v.parent===p&&(v.parent=void 0,y(v))}for(b.resumeEvents(),b.suspendEvents(),S=0;S<f.length;S++){let v=f[S];l(v.parent)||(v.parent=p,Qq(v)),b.add(v)}b.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let A=b.computeAvailability(),Z=A.start,V=A.stop,E=Q.equals(Z,Je.MINIMUM_VALUE),G=Q.equals(V,Je.MAXIMUM_VALUE);if(!E||!G){let v=e._clock;(v.startTime!==Z||v.stopTime!==V)&&(v.startTime=Z,v.stopTime=V,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var Mq=new Xt;Uu.prototype.update=function(e){let t=this._networkLinks;if(t.length===0)return!0;let n=Q.now(),i=this;Mq.removeAll();function o(u){let h=u._children,p=h.length;for(let b=0;b<p;++b){let f=h[b];Mq.set(f.id,f),o(f)}}let r=!1,s=this._lastCameraView,a=this.camera;l(a)&&!(a.positionWC.equalsEpsilon(s.position,W.EPSILON7)&&a.directionWC.equalsEpsilon(s.direction,W.EPSILON7)&&a.upWC.equalsEpsilon(s.up,W.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(!Mq.contains(h.id)){if(!u.updating){let p=!1;if(u.refreshMode===Nx.INTERVAL?Q.secondsDifference(n,u.lastUpdated)>u.time&&(p=!0):u.refreshMode===Nx.EXPIRE?Q.greaterThan(n,u.time)&&(p=!0):u.refreshMode===Nx.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 b=new wa,f=u.href.clone();f.setQueryParameters(u.cookie);let y=i._ellipsoid??ie.default;Jq(f,i.camera,i.canvas,u.viewBoundScale,s.bbox,y),jq(i,b,f,{context:h.id}).then(L0t(i,u,b,c,f)).catch(function(_){let S=`NetworkLink ${u.href} refresh failed: ${_}`;console.log(S),i._error.raiseEvent(i,S)}),d=!0}}c.set(u.id,u)}}),d&&(this._networkLinks=c,this._changed.raiseEvent(this)),!0};function W0t(){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}Uu._DeferredLoading=i0;Uu._getTimestamp=Ui;var KS=Uu;var BUi=x(T(),1);function CY(){fe.throwInstantiationError()}CY.prototype.update=fe.throwInstantiationError;CY.prototype.getBoundingSphere=fe.throwInstantiationError;CY.prototype.isDestroyed=fe.throwInstantiationError;CY.prototype.destroy=fe.throwInstantiationError;var qq=CY;var S5i=x(T(),1);var $q=32,v0t="http://www.opengis.net/kml/2.2",Xf="http://www.google.com/kml/ext/2.2",F0t="http://www.w3.org/2000/xmlns/";function KB(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var I0t=/^data:image\/([^,;]+)/;KB.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof We){if(e=We.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(I0t);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 P0t(e,t){return function(n){e._files[t]=n}}KB.prototype.model=function(e,t){let n=this._modelCallback;if(!l(n))throw new ue("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(P0t(this,r))}return o};Object.defineProperties(KB.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function JB(e){this._time=e}JB.prototype.get=function(e,t,n){let i;return l(e)&&(i=l(e.getValue)?e.getValue(this._time,n):e),i??t};JB.prototype.getColor=function(e,t){let n=this.get(e,t);if(l(n))return jS(n)};JB.prototype.getMaterialType=function(e){if(l(e))return e.getType(this._time)};function e$(){this._ids={},this._styles={},this._count=0}e$.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};e$.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 DAe(){this._ids={}}DAe.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 t$(e){e=e??B.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1,i=t$._createState(e),o=t.values.filter(function(d){return!l(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(F0t,"xmlns:gx",Xf);let a=r.createElement("Document");s.appendChild(a),BAe(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?X0t(u,c.files):{kml:u,externalFiles:c.files}})}async function X0t(e,t){let n=qt("ThirdParty/Workers/zip-web-worker.js"),i=qt("ThirdParty/zip-module.wasm");jp({workerURI:n,wasmURI:i});let o=new y1("application/vnd.google-earth.kmz"),r=new fY(o);await r.add("doc.kml",new jN(e));let s=Object.keys(t);return await OAe(r,s,t,0),await r.close(),{kmz:await o.getData()}}async function OAe(e,t,n,i){if(t.length===i)return;let o=t[i];return await e.add(o,new $p(n[o])),OAe(e,t,n,i+1)}t$._createState=function(e){let t=e.entities,n=new e$,i=t.computeAvailability(),o=l(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===Je.MINIMUM_VALUE?r.stop===Je.MAXIMUM_VALUE?r=new vn:Q.addSeconds(r.stop,-10*s,r.start):r.stop===Je.MAXIMUM_VALUE&&Q.addSeconds(r.start,10*s,r.stop);let a=new KB(e.modelCallback);return{kmlDoc:document.implementation.createDocument(v0t,"kml"),ellipsoid:e.ellipsoid??ie.default,idManager:new DAe,styleCache:n,externalFileHandler:a,time:o,valueGetter:new JB(o),sampleDuration:s,defaultAvailability:new Ts([r])}};function BAe(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=[],N0t(e,p,d,u),Y0t(e,p.polyline,d,u),UAe(e,p.rectangle,d,u,c),UAe(e,p.polygon,d,u,c),U0t(e,p,p.model,d,u);let b,f=p.availability;l(f)&&(b=i.createElement("TimeSpan"),Q.equals(f.start,Je.MINIMUM_VALUE)||b.appendChild(_n(i,"begin",Q.toIso8601(f.start))),Q.equals(f.stop,Je.MAXIMUM_VALUE)||b.appendChild(_n(i,"end",Q.toIso8601(f.stop))));for(let S=0;S<c.length;++S){let A=c[S];A.setAttribute("id",s.get(p.id)),A.appendChild(_n(i,"name",p.name)),A.appendChild(_n(i,"visibility",p.show)),A.appendChild(_n(i,"description",p.description)),l(b)&&A.appendChild(b),t.appendChild(A)}let y=d.length;if(y>0){let S=i.createElement("Placemark");S.setAttribute("id",s.get(p.id));let A=p.name,Z=p.label;if(l(Z)){let E=i.createElement("LabelStyle"),G=r.get(Z.text);A=l(G)&&G.length>0?G:A;let v=r.getColor(Z.fillColor);l(v)&&(E.appendChild(_n(i,"color",v)),E.appendChild(_n(i,"colorMode","normal")));let I=r.get(Z.scale);l(I)&&E.appendChild(_n(i,"scale",I)),u.push(E)}S.appendChild(_n(i,"name",A)),S.appendChild(_n(i,"visibility",p.show)),S.appendChild(_n(i,"description",p.description)),l(b)&&S.appendChild(b),t.appendChild(S);let V=u.length;if(V>0){let E=i.createElement("Style");for(let G=0;G<V;++G)E.appendChild(u[G]);S.appendChild(_n(i,"styleUrl",o.get(E)))}if(d.length===1)S.appendChild(d[0]);else if(d.length>1){let E=i.createElement("MultiGeometry");for(let G=0;G<y;++G)E.appendChild(d[G]);S.appendChild(E)}}let _=p._children;if(_.length>0){let S=i.createElement("Folder");S.setAttribute("id",s.get(p.id)),S.appendChild(_n(i,"name",p.name)),S.appendChild(_n(i,"visibility",p.show)),S.appendChild(_n(i,"description",p.description)),t.appendChild(S),BAe(e,S,_)}}}var Ud=new m,od=new be,Pf=new Q;function N0t(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){zAe(e,t,a,n,i);return}s.get(c,void 0,Ud);let d=_n(o,"coordinates",JS(Ud,r)),u=o.createElement("Point"),h=o.createElement("altitudeMode");h.appendChild(QS(e,a.heightReference)),u.appendChild(h),u.appendChild(d),n.push(u);let p=a instanceof Hc?KAe(e,a):HAe(e,a);i.push(p)}function zAe(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,d=t.position,u=!0;d instanceof cc?(c=d.intervals,u=!1):c=t.availability??e.defaultAvailability;let h=n instanceof J0,p,b,f,y=[];for(p=0;p<c.length;++p){let S=c.get(p),A=u?d:S.data,Z=r.createElement("altitudeMode");A instanceof Up?(A=A._value,Z.appendChild(QS(e,tt.CLAMP_TO_GROUND))):l(n)?Z.appendChild(QS(e,n.heightReference)):Z.appendChild(QS(e,tt.NONE));let V=[],E=[];if(A.isConstant){a.get(A,void 0,Ud);let v=_n(r,"coordinates",JS(Ud,s));V.push(Q.toIso8601(S.start)),E.push(v),V.push(Q.toIso8601(S.stop)),E.push(v)}else if(A instanceof dc)for(f=A._property._times,b=0;b<f.length;++b)V.push(Q.toIso8601(f[b])),A.getValueInReferenceFrame(f[b],Mi.FIXED,Ud),E.push(JS(Ud,s));else if(A instanceof Lu){f=A._times;let v=A._values;for(b=0;b<f.length;++b)V.push(Q.toIso8601(f[b])),m.fromArray(v,b*3,Ud),E.push(JS(Ud,s))}else{let v=e.sampleDuration;S.start.clone(Pf),S.isStartIncluded||Q.addSeconds(Pf,v,Pf);let I=S.stop;for(;Q.lessThan(Pf,I);)A.getValue(Pf,Ud),V.push(Q.toIso8601(Pf)),E.push(JS(Ud,s)),Q.addSeconds(Pf,v,Pf);S.isStopIncluded&&Q.equals(Pf,I)&&(A.getValue(Pf,Ud),V.push(Q.toIso8601(Pf)),E.push(JS(Ud,s)))}let G=r.createElementNS(Xf,"Track");G.appendChild(Z);for(let v=0;v<V.length;++v){let I=_n(r,"when",V[v]),X=_n(r,"coord",E[v],Xf);G.appendChild(I),G.appendChild(X)}h&&G.appendChild(JAe(e,n)),y.push(G)}if(y.length===1)i.push(y[0]);else if(y.length>1){let S=r.createElementNS(Xf,"MultiTrack");for(p=0;p<y.length;++p)S.appendChild(y[p]);i.push(S)}if(l(n)&&!h){let S=n instanceof Hc?KAe(e,n):HAe(e,n);o.push(S)}let _=t.path;if(l(_)){let S=a.get(_.width),A=_.material;if(l(A)||l(S)){let Z=r.createElement("LineStyle");l(S)&&Z.appendChild(_n(r,"width",S)),n$(e,A,Z),o.push(Z)}}}function HAe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);l(r)&&(o.appendChild(_n(n,"color",r)),o.appendChild(_n(n,"colorMode","normal")));let s=i.get(t.pixelSize);return l(s)&&o.appendChild(_n(n,"scale",s/$q)),o}function KAe(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(_n(n,"href",s));let b=i.get(t.imageSubRegion);l(b)&&(p.appendChild(_n(n,"x",b.x,Xf)),p.appendChild(_n(n,"y",b.y,Xf)),p.appendChild(_n(n,"w",b.width,Xf)),p.appendChild(_n(n,"h",b.height,Xf))),r.appendChild(p)}let a=i.getColor(t.color);l(a)&&(r.appendChild(_n(n,"color",a)),r.appendChild(_n(n,"colorMode","normal")));let c=i.get(t.scale);l(c)&&r.appendChild(_n(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,$q),b=i.get(t.height,$q),f=i.get(t.horizontalOrigin,Yi.CENTER);f===Yi.CENTER?d.x-=p*.5:f===Yi.RIGHT&&(d.x-=p);let y=i.get(t.verticalOrigin,Jn.CENTER);y===Jn.TOP?d.y+=b:y===Jn.CENTER&&(d.y+=b*.5);let _=n.createElement("hotSpot");_.setAttribute("x",-d.x),_.setAttribute("y",d.y),_.setAttribute("xunits","pixels"),_.setAttribute("yunits","pixels"),r.appendChild(_)}let u=i.get(t.rotation),h=i.get(t.alignedAxis);return l(u)&&m.equals(m.UNIT_Z,h)&&(u=W.toDegrees(-u),u===0&&(u=360),r.appendChild(_n(n,"heading",u))),r}function Y0t(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(_n(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),b=_n(o,"coordinates",JS(p,r));a.appendChild(b);let f=s.get(t.zIndex);d&&l(f)&&a.appendChild(_n(o,"drawOrder",f,Xf)),n.push(a);let y=o.createElement("LineStyle"),_=s.get(t.width);l(_)&&y.appendChild(_n(o,"width",_)),n$(e,t.material,y),i.push(y)}function w0t(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=[ce.northeast,ce.southeast,ce.southwest,ce.northwest];for(let b=0;b<4;++b)d[b](a,od),c.push(`${W.toDegrees(od.longitude)},${W.toDegrees(od.latitude)},${r}`);let u=_n(i,"coordinates",c.join(" ")),h=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),h.appendChild(p),[h]}function kAe(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)be.fromCartesian(t[u],r,od),s.push(`${W.toDegrees(od.longitude)},${W.toDegrees(od.latitude)},${i?od.height:n}`);let c=_n(o,"coordinates",s.join(" ")),d=o.createElement("LinearRing");return d.appendChild(c),d}function M0t(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(kAe(e,u,r,s)),a.push(h);let p=d.holes;if(l(p)){let b=p.length;for(let f=0;f<b;++f){let y=i.createElement("innerBoundaryIs");y.appendChild(kAe(e,p[f].positions,r,s)),a.push(y)}}return a}function UAe(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!l(t))return;let a=t instanceof wh;if(a&&s.getMaterialType(t.material)==="Image"){k0t(e,t,o);return}let c=r.createElement("Polygon"),d=s.get(t.extrudedHeight,0);d>0&&c.appendChild(_n(r,"extrude",!0));let u=a?w0t(e,t,d):M0t(e,t,d),h=u.length;for(let _=0;_<h;++_)c.appendChild(u[_]);let p=r.createElement("altitudeMode");p.appendChild(QS(e,t.heightReference)),c.appendChild(p),n.push(c);let b=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&b.appendChild(_n(r,"fill",f)),n$(e,t.material,b);let y=s.get(t.outline,!1);if(y){b.appendChild(_n(r,"outline",y));let _=r.createElement("LineStyle"),S=s.get(t.outlineWidth,1);_.appendChild(_n(r,"width",S));let A=s.getColor(t.outlineColor,U.BLACK);_.appendChild(_n(r,"color",A)),_.appendChild(_n(r,"colorMode","normal")),i.push(_)}i.push(b)}function k0t(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(QS(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);l(c)&&s.appendChild(_n(i,"altitude",c));let d=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(_n(i,"north",W.toDegrees(d.north))),u.appendChild(_n(i,"south",W.toDegrees(d.south))),u.appendChild(_n(i,"east",W.toDegrees(d.east))),u.appendChild(_n(i,"west",W.toDegrees(d.west))),s.appendChild(u);let h=o.get(t.material),p=r.texture(h.image),b=i.createElement("Icon");b.appendChild(_n(i,"href",p)),s.appendChild(b);let f=h.color;l(f)&&s.appendChild(_n(i,"color",jS(h.color))),n.push(s)}function JAe(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(_n(n,"x",s)),d.appendChild(_n(n,"y",s)),d.appendChild(_n(n,"z",s)),r.appendChild(d)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(_n(n,"href",c)),r.appendChild(a),r}function U0t(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){zAe(e,t,n,i,o);return}let d=JAe(e,n),u=r.createElement("altitudeMode");u.appendChild(QS(e,n.heightReference)),d.appendChild(u),a.get(c,void 0,Ud),be.fromCartesian(Ud,s,od);let h=r.createElement("Location");h.appendChild(_n(r,"longitude",W.toDegrees(od.longitude))),h.appendChild(_n(r,"latitude",W.toDegrees(od.latitude))),h.appendChild(_n(r,"altitude",od.height)),d.appendChild(h),i.push(d)}function n$(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=jS(U.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=jS(r.color);break;case"PolylineOutline":s=jS(r.color),c=jS(r.outlineColor),d=r.outlineWidth,n.appendChild(_n(i,"outerColor",c,Xf)),n.appendChild(_n(i,"outerWidth",d,Xf));break;case"Stripe":s=jS(r.oddColor);break}l(s)&&(n.appendChild(_n(i,"color",s)),n.appendChild(_n(i,"colorMode","normal")))}function QS(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,tt.NONE),r;switch(o){case tt.NONE:r=n.createTextNode("absolute");break;case tt.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case tt.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function JS(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)be.fromCartesian(e[o],t,od),i.push(`${W.toDegrees(od.longitude)},${W.toDegrees(od.latitude)},${od.height}`);return i.join(" ")}function _n(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 jS(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 i$=t$;var Z5i=x(T(),1),E1=`#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 V5i=x(T(),1),VY=`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 E5i=x(T(),1),RY=`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 L5i=x(T(),1),EY=`#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 v5i=x(T(),1),GY=`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 I5i=x(T(),1),LY=`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 X5i=x(T(),1),WY=`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 Y5i=x(T(),1),vY=`/** * 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 M5i=x(T(),1),FY=`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 U5i=x(T(),1),IY=`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 O5i=x(T(),1),PY=`in vec4 position; out vec4 positionEC; void main() { positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); } `;var z5i=x(T(),1),G1=`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 K5i=x(T(),1),L1=`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 j5i=x(T(),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 XY=`/** * @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 q5i=x(T(),1),NY=`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 #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 #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 #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, 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 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)); } 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() { #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); 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 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 eDi=x(T(),1),YY=`#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 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 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 nDi=x(T(),1),W1=`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 oDi=x(T(),1),v1=`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 sDi=x(T(),1),wY=`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 cDi=x(T(),1),MY=`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 dDi=x(T(),1),kY=`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 mDi=x(T(),1),UY=`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 fDi=x(T(),1),DY=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(u_texture, v_textureCoordinates); out_FragColor = czm_gammaCorrect(color); } `;var bDi=x(T(),1),OY=`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 yDi=x(T(),1),BY=`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 TDi=x(T(),1),zY=` 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 Yho=x(T(),1);var IDi=x(T(),1);var EDi=x(T(),1);var ADi=x(T(),1);async function D0t(e,t,n,i){return l(i)||(i=!1),z0t(e,t,n,i)}function O0t(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(QAe(i)):r=o.then(QAe(i)).catch(H0t(i)),e.shift(),t.push(r),!0}function B0t(e){return new Promise(function(t){setTimeout(t,e)})}function o$(e,t,n){return e.length?O0t(e,t,n)?o$(e,t,n):B0t(100).then(()=>o$(e,t,n)):Promise.resolve()}function z0t(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 o$(s,c,i).then(function(){return Promise.all(c).then(function(){return n})})}function jAe(e,t,n){let i=t.interpolateHeight(n,e.longitude,e.latitude);return i===void 0?!1:(e.height=i,!0)}function QAe(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(!jAe(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];jAe(s,i,n)}}):Promise.resolve()}}function H0t(e){let t=e.positions;return function(){for(let n=0;n<t.length;++n){let i=t[n];i.height=void 0}}}var HY=D0t;var r$=new M;async function qAe(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,r$);let p=e.loadTileDataAvailability(r$.x,r$.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 HY(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 qAe(e,a,n),t}var qS=qAe;async function s$(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===re.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!l(n))return r;let a=n.availability;if(!l(a)||t.mode===re.SCENE2D)return r;let c=[ce.center(e),ce.southeast(e),ce.southwest(e),ce.northeast(e),ce.northwest(e)],d=await s$._sampleTerrainMostDetailed(n,c),u=!1,h=d.reduce(function(b,f){return l(f.height)?(u=!0,Math.max(f.height,b)):b},-Number.MAX_VALUE),p=r;return u&&(p.height+=h),p}s$._sampleTerrainMostDetailed=qS;var $S=s$;var DHi=x(T(),1);var mBi=x(T(),1);var iBi=x(T(),1);var XDi=x(T(),1),K0t={NONE:0,LERC:1},rh=Object.freeze(K0t);var uOi=x(T(),1);var JDi=x(T(),1);var YDi=x(T(),1),J0t={NONE:0,BITS12:1},Ua=Object.freeze(J0t);var KY=new m,j0t=new m,sh=new M,Q0t=new F,q0t=new F,$0t=Math.pow(2,12);function Ic(e,t,n,i,o,r,s,a,c,d){let u=Ua.NONE,h,p;if(l(t)&&l(n)&&l(i)&&l(o)){let b=t.minimum,f=t.maximum,y=m.subtract(f,b,j0t),_=i-n;Math.max(m.maximumComponent(y),_)<$0t-1?u=Ua.BITS12:u=Ua.NONE;let A=F.fromScale(y,Q0t);A=F.setTranslation(A,b,A);let Z=F.fromScale(m.fromElements(1/y.x,1/y.y,1/y.z,KY),q0t);Z=F.multiplyByTranslation(Z,m.negate(b,KY),Z),p=F.clone(o,new F);let V=F.getTranslation(o,KY);V=m.subtract(V,e,KY),p=F.setTranslation(p,V,p),p=F.multiply(p,A,p),h=F.inverseTransformation(o,new F),h=F.multiply(Z,h,h),o=F.multiply(o,A,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()}Ic.prototype.encode=function(e,t,n,i,o,r,s,a){let c=i.x,d=i.y;if(this.quantization===Ua.BITS12){n=F.multiplyByPoint(this.toScaledENU,n,KY),n.x=W.clamp(n.x,0,1),n.y=W.clamp(n.y,0,1),n.z=W.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,h=W.clamp((o-this.minimumHeight)/u,0,1);M.fromElements(n.x,n.y,sh);let p=tn.compressTextureCoordinates(sh);M.fromElements(n.z,h,sh);let b=tn.compressTextureCoordinates(sh);M.fromElements(c,d,sh);let f=tn.compressTextureCoordinates(sh);if(e[t++]=p,e[t++]=b,e[t++]=f,this.hasWebMercatorT){M.fromElements(s,0,sh);let y=tn.compressTextureCoordinates(sh);e[t++]=y}}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++]=tn.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var ebt=new m,$Ae=new m;Ic.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,ebt),c=n.geodeticSurfaceNormal(a,$Ae),d=s*r+this._offsetGeodeticSurfaceNormal;t[d]=c.x,t[d+1]=c.y,t[d+2]=c.z}};Ic.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]}};Ic.prototype.decodePosition=function(e,t,n){if(l(n)||(n=new m),t*=this.stride,this.quantization===Ua.BITS12){let i=tn.decompressTextureCoordinates(e[t],sh);n.x=i.x,n.y=i.y;let o=tn.decompressTextureCoordinates(e[t+1],sh);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)};Ic.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,$Ae),a=this.decodeHeight(e,t),c=Zo.getHeight(a,i,o)-a;n.x+=s.x*c,n.y+=s.y*c,n.z+=s.z*c}return n};Ic.prototype.decodeTextureCoordinates=function(e,t,n){return l(n)||(n=new M),t*=this.stride,this.quantization===Ua.BITS12?tn.decompressTextureCoordinates(e[t+2],n):M.fromElements(e[t+4],e[t+5],n)};Ic.prototype.decodeHeight=function(e,t){return t*=this.stride,this.quantization===Ua.BITS12?tn.decompressTextureCoordinates(e[t+1],sh).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]};Ic.prototype.decodeWebMercatorT=function(e,t){return t*=this.stride,this.quantization===Ua.BITS12?tn.decompressTextureCoordinates(e[t+3],sh).x:e[t+6]};Ic.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)};Ic.prototype.decodeNormal=function(e,t,n){let i=t=t*this.stride+this._offsetVertexNormal;return tn.octDecodeFloat(e[i],n)};Ic.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};Ic.prototype._calculateStrideAndOffsets=function(){let e=0;this.quantization===Ua.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 jB={position3DAndHeight:0,textureCoordAndEncodedNormals:1,geodeticSurfaceNormal:2},QB={compressed0:0,compressed1:1,geodeticSurfaceNormal:2};Ic.prototype.getAttributes=function(e){let t=K.FLOAT,n=K.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===Ua.NONE){s(jB.position3DAndHeight,4);let a=2;a+=this.hasWebMercatorT?1:0,a+=this.hasVertexNormals?1:0,s(jB.textureCoordAndEncodedNormals,a),this.hasGeodeticSurfaceNormals&&s(jB.geodeticSurfaceNormal,3)}else{let a=this.hasWebMercatorT||this.hasVertexNormals,c=this.hasWebMercatorT&&this.hasVertexNormals;s(QB.compressed0,a?4:3),c&&s(QB.compressed1,1),this.hasGeodeticSurfaceNormals&&s(QB.geodeticSurfaceNormal,3)}return r};Ic.prototype.getAttributeLocations=function(){return this.quantization===Ua.NONE?jB:QB};Ic.clone=function(e,t){if(l(e))return l(t)||(t=new Ic),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 br=Ic;var o0={};o0.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var a$=new m,tbt=new F,nbt=new m,ibt=new m;o0.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=W.PI_OVER_TWO,a=W.toRadians,c=e.heightmap,d=e.width,u=e.height,h=e.skirtHeight,p=h>0,b=e.isGeographic??!0,f=e.ellipsoid??ie.default,y=1/f.maximumRadius,_=ce.clone(e.nativeRectangle),S=ce.clone(e.rectangle),A,Z,V,E;l(S)?(A=S.west,Z=S.south,V=S.east,E=S.north):b?(A=a(_.west),Z=a(_.south),V=a(_.east),E=a(_.north)):(A=_.west*y,Z=s-2*o(r(-_.south*y)),V=_.east*y,E=s-2*o(r(-_.north*y)));let G=e.relativeToCenter,v=l(G);G=v?G:m.ZERO;let I=e.includeWebMercatorT??!1,X=e.exaggeration??1,N=e.exaggerationRelativeHeight??0,C=X!==1,R=e.structure??o0.DEFAULT_STRUCTURE,L=R.heightScale??o0.DEFAULT_STRUCTURE.heightScale,P=R.heightOffset??o0.DEFAULT_STRUCTURE.heightOffset,Y=R.elementsPerHeight??o0.DEFAULT_STRUCTURE.elementsPerHeight,O=R.stride??o0.DEFAULT_STRUCTURE.stride,k=R.elementMultiplier??o0.DEFAULT_STRUCTURE.elementMultiplier,D=R.isBigEndian??o0.DEFAULT_STRUCTURE.isBigEndian,w=ce.computeWidth(_),z=ce.computeHeight(_),J=w/(d-1),ee=z/(u-1);b||(w*=y,z*=y);let H=f.radiiSquared,te=H.x,$=H.y,pe=H.z,xe=65536,le=-65536,Te=pt.eastNorthUpToFixedFrame(G,f),Se=F.inverseTransformation(Te,tbt),Ee,Ve;I&&(Ee=fi.geodeticLatitudeToMercatorAngle(Z),Ve=1/(fi.geodeticLatitudeToMercatorAngle(E)-Ee));let we=nbt;we.x=Number.POSITIVE_INFINITY,we.y=Number.POSITIVE_INFINITY,we.z=Number.POSITIVE_INFINITY;let ke=ibt;ke.x=Number.NEGATIVE_INFINITY,ke.y=Number.NEGATIVE_INFINITY,ke.z=Number.NEGATIVE_INFINITY;let nt=Number.POSITIVE_INFINITY,bt=d*u,Rt=h>0?d*2+u*2:0,He=bt+Rt,mt=new Array(He),it=new Array(He),rt=new Array(He),jt=I?new Array(He):[],Cn=C?new Array(He):[],ct=0,Wt=u,sn=0,lt=d;p&&(--ct,++Wt,--sn,++lt);let Xn=1e-5;for(let Dn=ct;Dn<Wt;++Dn){let Hi=Dn;Hi<0&&(Hi=0),Hi>=u&&(Hi=u-1);let Gi=_.north-ee*Hi;b?Gi=a(Gi):Gi=s-2*o(r(-Gi*y));let er=(Gi-Z)/(E-Z);er=W.clamp(er,0,1);let Lr=Dn===ct,Vs=Dn===Wt-1;h>0&&(Lr?Gi+=Xn*z:Vs&&(Gi-=Xn*z));let Wr=t(Gi),On=n(Gi),go=pe*On,En;I&&(En=(fi.geodeticLatitudeToMercatorAngle(Gi)-Ee)*Ve);for(let Ho=sn;Ho<lt;++Ho){let Fo=Ho;Fo<0&&(Fo=0),Fo>=d&&(Fo=d-1);let sa=Hi*(d*O)+Fo*O,Ii;if(Y===1)Ii=c[sa];else{Ii=0;let Uo;if(D)for(Uo=0;Uo<Y;++Uo)Ii=Ii*k+c[sa+Uo];else for(Uo=Y-1;Uo>=0;--Uo)Ii=Ii*k+c[sa+Uo]}Ii=Ii*L+P,le=Math.max(le,Ii),xe=Math.min(xe,Ii);let Io=_.west+J*Fo;b?Io=a(Io):Io=Io*y;let _c=(Io-A)/(V-A);_c=W.clamp(_c,0,1);let Ds=Hi*d+Fo;if(h>0){let Uo=Ho===sn,Qd=Ho===lt-1,Sn=Lr||Vs||Uo||Qd;if((Lr||Vs)&&(Uo||Qd))continue;Sn&&(Ii-=h,Uo?(Ds=bt+(u-Hi-1),Io-=Xn*w):Vs?Ds=bt+u+(d-Fo-1):Qd?(Ds=bt+u+d+Hi,Io+=Xn*w):Lr&&(Ds=bt+u+d+u+Fo))}let Os=Wr*t(Io),os=Wr*n(Io),Z0=te*Os,_a=$*os,Th=1/i(Z0*Os+_a*os+go*On),Po=Z0*Th,Yc=_a*Th,ud=go*Th,md=new m;md.x=Po+Os*Ii,md.y=Yc+os*Ii,md.z=ud+On*Ii,F.multiplyByPoint(Se,md,a$),m.minimumByComponent(a$,we,we),m.maximumByComponent(a$,ke,ke),nt=Math.min(nt,Ii),mt[Ds]=md,rt[Ds]=new M(_c,er),it[Ds]=Ii,I&&(jt[Ds]=En),C&&(Cn[Ds]=f.geodeticSurfaceNormal(md))}}let pi=de.fromPoints(mt),Di;l(S)&&(Di=en.fromRectangle(S,xe,le,f));let Ut;v&&(Ut=new yf(f).computeHorizonCullingPointPossiblyUnderEllipsoid(G,mt,xe));let bo=new ru(we,ke,G),ro=new br(G,bo,nt,le,Te,!1,I,C,X,N),Fi=new Float32Array(He*ro.stride),zn=0;for(let Dn=0;Dn<He;++Dn)zn=ro.encode(Fi,zn,mt[Dn],rt[Dn],it[Dn],void 0,jt[Dn],Cn[Dn]);return{vertices:Fi,maximumHeight:le,minimumHeight:xe,encoding:ro,boundingSphere3D:pi,orientedBoundingBox:Di,occludeePointInScaledSpace:Ut}};var F1=o0;var fOi=x(T(),1);function Yx(){fe.throwInstantiationError()}Object.defineProperties(Yx.prototype,{credits:{get:fe.throwInstantiationError},waterMask:{get:fe.throwInstantiationError}});Yx.prototype.interpolateHeight=fe.throwInstantiationError;Yx.prototype.isChildAvailable=fe.throwInstantiationError;Yx.prototype.createMesh=fe.throwInstantiationError;Yx.prototype.upsample=fe.throwInstantiationError;Yx.prototype.wasCreatedByUpsampling=fe.throwInstantiationError;Yx.maximumAsynchronousTasks=5;var Dd=Yx;var MOi=x(T(),1);var ROi=x(T(),1);var obt=3;function d$(e,t,n){this._vertices=e,this._indices=t,this._encoding=n,this._inverseTransform=new F,this._needsRebuild=!0,this._rootNode=new l$}var rbt=new $n("incrementallyBuildTerrainPicker");Object.defineProperties(d$.prototype,{needsRebuild:{get:function(){return this._needsRebuild},set:function(e){this._needsRebuild=e}}});function l$(){this.x=0,this.y=0,this.level=0,this.aabb=eZe(this.x,this.y,this.level),this.intersectingTriangles=new Uint32Array(0),this.children=[],this.buildingChildren=!1}l$.prototype.addChild=function(e){let t=new l$;t.x=this.x*2+(e&1),t.y=this.y*2+(e>>1&1),t.level=this.level+1,t.aabb=eZe(t.x,t.y,t.level),this.children[e]=t};var sbt=new xn,qB=[new m,new m,new m];d$.prototype.rayIntersect=function(e,t,n,i,o){this._needsRebuild&&abt(this,t);let r=this._inverseTransform,s=sbt;s.origin=F.multiplyByPoint(r,e.origin,s.origin),s.direction=F.multiplyByPointAsVector(r,e.direction,s.direction);let a=[];return tZe(this._rootNode,s,a),mbt(this,a,e,n,i,o)};function abt(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 cbt=new m,lbt=new m;function eZe(e,t,n){let i=1/Math.pow(2,n),o=m.fromElements(e*i-.5,t*i-.5,-.5,cbt),r=m.fromElements((e+1)*i-.5,(t+1)*i-.5,.5,lbt);return ru.fromCorners(o,r)}function dbt(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 ubt=new Kr;function tZe(e,t,n){let i=mi.rayAxisAlignedBoundingBox(t,e.aabb,ubt);if(!l(i))return;if(!e.children.length||e.buildingChildren){n.push({node:e,interval:new Kr(i.start,i.stop)});return}for(let r=0;r<e.children.length;r++)tZe(e.children[r],t,n)}function mbt(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=hbt(e,n,d.node,i,o,r);if(a=Math.min(u,a),a!==Number.MAX_VALUE)break}if(a!==Number.MAX_VALUE)return xn.getPoint(n,a)}function hbt(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>=obt)&&!n.buildingChildren,b,f;p&&(b=new Float64Array(u*9),f=new Uint32Array(u));for(let y=0;y<u;y++){let _=n.intersectingTriangles[y],S=c$(a,o,r,t,d,c[3*_],qB[0]),A=c$(a,o,r,t,d,c[3*_+1],qB[1]),Z=c$(a,o,r,t,d,c[3*_+2],qB[2]),V=mi.rayTriangleParametric(t,S,A,Z,i);l(V)&&V<s&&V>=0&&(s=V),p&&dbt(b,f,qB,_,y)}if(p){for(let y=0;y<4;y++)n.addChild(y);pbt(e._inverseTransform,n,f,b)}return s}var fbt=new be;function c$(e,t,n,i,o,r,s){let a=e.getExaggeratedPosition(o,r,s);if(t===re.SCENE3D)return a;let d=n.ellipsoid.cartesianToCartographic(a,fbt);a=n.project(d,s),a=m.fromElements(a.z,a.x,a.y,s);let u=W.TWO_PI*n.ellipsoid.maximumRadius,h=Math.round((i.origin.y-a.y)/u);return a.y+=h*u,a}async function pbt(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=rbt.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 JY=d$;function jY(e,t,n,i,o,r,s,a,c,d,u,h,p,b,f,y,_){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=b,this.southIndicesEastToWest=f,this.eastIndicesNorthToSouth=y,this.northIndicesWestToEast=_,this._transform=new F,this._lastPickSceneMode=void 0,this._terrainPicker=new JY(t,n,p)}jY.prototype.getTransform=function(e,t){return this._lastPickSceneMode===e?this._transform:(this._terrainPicker.needsRebuild=!0,!l(e)||e===re.SCENE3D?bbt(this,this._transform):Abt(this,t,this._transform))};function bbt(e,t){let n=e.encoding.exaggeration,i=e.encoding.exaggerationRelativeHeight,o=Zo.getHeight(e.minimumHeight,n,i),r=Zo.getHeight(e.maximumHeight,n,i),s=en.fromRectangle(e.rectangle,o,r,ie.default,e.orientedBoundingBox);return en.computeTransformation(s,t),F.getScale(t,u$).z<=W.EPSILON16&&(u$.z=1,F.setScale(t,u$,t)),t}var gbt=new m,ybt=new m,xbt=new be,Tbt=new be,_bt=new m,Sbt=new m,u$=new m;function Abt(e,t,n){let i=e.encoding.exaggeration,o=e.encoding.exaggerationRelativeHeight,r=Zo.getHeight(e.minimumHeight,i,o),s=Zo.getHeight(e.maximumHeight,i,o),a=t.project(be.fromRadians(e.rectangle.west,e.rectangle.south,0,xbt),gbt),c=t.project(be.fromRadians(e.rectangle.east,e.rectangle.north,0,Tbt),ybt),d=s-r,u=m.fromElements(c.x-a.x,c.y-a.y,d>0?d:1,_bt),h=m.fromElements(a.x+u.x*.5,a.y+u.y*.5,r+u.z*.5,Sbt);return F.fromTranslation(h,n),F.setScale(n,u,n),F.multiply(pt.SWIZZLE_3D_TO_2D_MATRIX,n,n),n}jY.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};jY.prototype.updateExaggeration=function(e,t){this._terrainPicker._vertices=this.vertices,this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};jY.prototype.updateSceneMode=function(e){this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};var pc=jY;function Ag(e){e=e??B.EMPTY_OBJECT,this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=e.childTileMask??15,this._encoding=e.encoding??rh.NONE;let t=F1.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===rh.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(Ag.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var nZe="createVerticesFromHeightmap",Zbt=new $n(nZe),Cbt=new $n(nZe,Dd.maximumAsynchronousTasks);Ag.prototype.createMesh=function(e){e=e??B.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(ce.center(u)),p=this._structure,f=zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(f*4,1e3);let _=(a?Cbt:Zbt).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(_))return;let S=this;return Promise.resolve(_).then(function(A){let Z;S._skirtHeight>0?Z=zo.getRegularGridAndSkirtIndicesAndEdgeIndices(A.gridWidth,A.gridHeight):Z=zo.getRegularGridIndicesAndEdgeIndices(A.gridWidth,A.gridHeight);let V=A.gridWidth*A.gridHeight;return S._mesh=new pc(h,new Float32Array(A.vertices),Z.indices,Z.indexCountWithoutSkirts,V,A.minimumHeight,A.maximumHeight,u,de.clone(A.boundingSphere3D),m.clone(A.occludeePointInScaledSpace),A.numberOfAttributes,en.clone(A.orientedBoundingBox),br.clone(A.encoding),Z.westIndicesSouthToNorth,Z.southIndicesEastToWest,Z.eastIndicesNorthToSouth,Z.northIndicesWestToEast),S._buffer=void 0,S._mesh})};Ag.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(ce.center(d)),h=this._structure,b=zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(b*4,1e3);let f=F1.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 y;this._skirtHeight>0?y=zo.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):y=zo.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let _=f.gridWidth*f.gridHeight;return this._mesh=new pc(u,f.vertices,y.indices,y.indexCountWithoutSkirts,_,f.minimumHeight,f.maximumHeight,d,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),this._mesh};Ag.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),b=this._encoding===rh.LERC;if(!p&&b)return;let y;if(p){let _=this._mesh.vertices,S=this._mesh.encoding;y=iZe(_,S,u,h,e,i,o,t,n)}else y=Vbt(this._buffer,a,c,s,d,e,i,o,t,n),y=y*h+u;return y};Ag.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),b=a.vertices,f=a.encoding,y=e.tileXYToRectangle(t,n,i),_=e.tileXYToRectangle(o,r,s),S=u.heightOffset,A=u.heightScale,Z=u.elementsPerHeight,V=u.elementMultiplier,E=u.isBigEndian,G=Math.pow(V,Z-1);for(let v=0;v<d;++v){let I=W.lerp(_.north,_.south,v/(d-1));for(let X=0;X<c;++X){let N=W.lerp(_.west,_.east,X/(c-1)),g=iZe(b,f,S,A,y,c,d,N,I);g=g<u.lowestEncodedHeight?u.lowestEncodedHeight:g,g=g>u.highestEncodedHeight?u.highestEncodedHeight:g,Rbt(p,Z,V,G,h,E,v*c+X,g)}}return Promise.resolve(new Ag({buffer:p,width:c,height:d,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};Ag.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};Ag.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};function Vbt(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,b=p+1;b>=s&&(b=s-1,p=s-2);let f=h|0,y=f+1;y>=a&&(y=a-1,f=a-2);let _=u-p,S=h-f;f=a-1-f,y=a-1-y;let A=$B(e,t,n,i,o,f*s+p),Z=$B(e,t,n,i,o,f*s+b),V=$B(e,t,n,i,o,y*s+p),E=$B(e,t,n,i,o,y*s+b);return oZe(_,S,A,Z,V,E)}function iZe(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 b=u|0,f=b+1;f>=s&&(f=s-1,b=s-2);let y=d-h,_=u-b;b=s-1-b,f=s-1-f;let S=(t.decodeHeight(e,b*r+h)-n)/i,A=(t.decodeHeight(e,b*r+p)-n)/i,Z=(t.decodeHeight(e,f*r+h)-n)/i,V=(t.decodeHeight(e,f*r+p)-n)/i;return oZe(y,_,S,A,Z,V)}function oZe(e,t,n,i,o,r){return t<e?n+e*(i-n)+t*(r-i):n+e*(r-o)+t*(o-n)}function $B(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 Rbt(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 Pc=Ag;function I1(e){e=e??B.EMPTY_OBJECT,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new Qi({ellipsoid:e.ellipsoid??ie.default})),this._levelZeroMaximumGeometricError=zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new _e}Object.defineProperties(I1.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(){}}});I1.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new Pc({buffer:new Uint8Array(256),width:16,height:16}))};I1.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};I1.prototype.getTileDataAvailable=function(e,t,n){};I1.prototype.loadTileDataAvailability=function(e,t,n){};var r0=I1;var ZBi=x(T(),1);var bBi=x(T(),1);var Ebt=new M;function Gbt(e,t){let n=e.unionClippingRegions,i=e.length,o=us.useFloatTexture(t),r=us.getTextureResolution(e,t,Ebt),s=r.x,a=r.y,c=o?vbt(s,a):Fbt(s,a);return c+=` `,c+=n?Lbt(i):Wbt(i),c}function Lbt(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 Wbt(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 vbt(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 Fbt(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 eA=Gbt;function Ibt(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 m$(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function Pbt(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 re.SCENE3D:o=t;break;case re.SCENE2D:case re.COLUMBUS_VIEW:o=n;break;case re.MORPHING:o=i;break}return o}function Xbt(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 Nbt(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 Ybt(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}m$.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,b=e.showReflectiveOcean,f=e.showOceanWaves,y=e.enableLighting,_=e.dynamicAtmosphereLighting,S=e.dynamicAtmosphereLightingFromSun,A=e.showGroundAtmosphere,Z=e.perFragmentGroundAtmosphere,V=e.hasVertexNormals,E=e.useWebMercatorProjection,G=e.enableFog,v=e.enableClippingPlanes,I=e.clippingPlanes,X=e.enableClippingPolygons,N=e.clippingPolygons,g=e.clippedByBoundaries,C=e.hasImageryLayerCutout,R=e.colorCorrect,L=e.highlightFillTile,P=e.colorToAlpha,Y=e.hasGeodeticSurfaceNormals,O=e.hasExaggeration,k=e.showUndergroundColor,D=e.translucent,w=0,z="",ee=n.renderedMesh.encoding;ee.quantization===Ua.BITS12&&(w=1,z="QUANTIZATION_BITS12");let te=0,$="";g&&(te=1,$="TILE_LIMIT_RECTANGLE");let pe=0,xe="";C&&(pe=1,xe="APPLY_IMAGERY_CUTOUT");let le=t.mode,Te=((le|o<<2|r<<3|s<<4|a<<5|c<<6|d<<7|p<<8|b<<9|f<<10|y<<11|_<<12|S<<13|A<<14|Z<<15|V<<16|E<<17|G<<18|w<<19|h<<20|v<<21|X<<22|te<<23|pe<<24|R<<25|L<<26|P<<27|Y<<28|O<<29|k<<30|D<<31)>>>0)+(u?4294967296:0),Se=0;l(I)&&I.length>0&&(Se=v?I.clippingPlanesState:0);let Ee=0;l(N)&&N.length>0&&(Ee=X?N.clippingPolygonsState:0);let Ve=n.surfaceShader;if(l(Ve)&&Ve.numberOfDayTextures===i&&Ve.flags===Te&&Ve.material===this.material&&Ve.clippingShaderState===Se&&Ve.clippingPolygonShaderState===Ee)return Ve.shaderProgram;let we=this._shadersByTexturesFlags[i];if(l(we)||(we=this._shadersByTexturesFlags[i]=[]),Ve=we[Te],!l(Ve)||Ve.material!==this.material||Ve.clippingShaderState!==Se||Ve.clippingPolygonShaderState!==Ee){let ke=this.baseVertexShaderSource.clone(),nt=this.baseFragmentShaderSource.clone();Se!==0&&nt.sources.unshift(eA(I,t.context)),Ee!==0&&(nt.sources.unshift(Xbt(t.context)),ke.sources.unshift(Nbt(t.context))),ke.defines.push(z),nt.defines.push(`TEXTURE_UNITS ${i}`,$,xe),o&&nt.defines.push("APPLY_BRIGHTNESS"),r&&nt.defines.push("APPLY_CONTRAST"),s&&nt.defines.push("APPLY_HUE"),a&&nt.defines.push("APPLY_SATURATION"),c&&nt.defines.push("APPLY_GAMMA"),d&&nt.defines.push("APPLY_ALPHA"),u&&nt.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&nt.defines.push("HAS_WATER_MASK"),b&&(nt.defines.push("SHOW_REFLECTIVE_OCEAN"),ke.defines.push("SHOW_REFLECTIVE_OCEAN")),f&&nt.defines.push("SHOW_OCEAN_WAVES"),P&&nt.defines.push("APPLY_COLOR_TO_ALPHA"),k&&(ke.defines.push("UNDERGROUND_COLOR"),nt.defines.push("UNDERGROUND_COLOR")),D&&(ke.defines.push("TRANSLUCENT"),nt.defines.push("TRANSLUCENT")),y&&(V?(ke.defines.push("ENABLE_VERTEX_LIGHTING"),nt.defines.push("ENABLE_VERTEX_LIGHTING")):(ke.defines.push("ENABLE_DAYNIGHT_SHADING"),nt.defines.push("ENABLE_DAYNIGHT_SHADING"))),_&&(ke.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),nt.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),S&&(ke.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),nt.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),A&&(ke.defines.push("GROUND_ATMOSPHERE"),nt.defines.push("GROUND_ATMOSPHERE"),Z&&(ke.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),nt.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),ke.defines.push("INCLUDE_WEB_MERCATOR_Y"),nt.defines.push("INCLUDE_WEB_MERCATOR_Y"),G&&(ke.defines.push("FOG"),nt.defines.push("FOG")),h&&nt.defines.push("APPLY_SPLIT"),v&&nt.defines.push("ENABLE_CLIPPING_PLANES"),X&&(nt.defines.push("ENABLE_CLIPPING_POLYGONS"),ke.defines.push("ENABLE_CLIPPING_POLYGONS"),N.inverse&&nt.defines.push("CLIPPING_INVERSE"),nt.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${N.extentsCount}`),ke.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${N.extentsCount}`)),R&&nt.defines.push("COLOR_CORRECT"),L&&nt.defines.push("HIGHLIGHT_FILL_TILE"),Y&&ke.defines.push("GEODETIC_SURFACE_NORMALS"),O&&ke.defines.push("EXAGGERATION");let bt=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend) { vec4 color = initialColor; `;C&&(bt+=` vec4 cutoutAndColorResult; bool texelUnclipped; `);for(let He=0;He<i;++He)C?bt+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${He}]; texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y; cutoutAndColorResult = sampleAndBlend( `:bt+=` color = sampleAndBlend( `,bt+=` color, u_dayTextures[${He}], u_dayTextureUseWebMercatorT[${He}] ? textureCoordinates.xz : textureCoordinates.xy, u_dayTextureTexCoordsRectangle[${He}], u_dayTextureTranslationAndScale[${He}], ${d?`u_dayTextureAlpha[${He}]`:"1.0"}, ${u?`u_dayTextureNightAlpha[${He}]`:"1.0"}, ${u?`u_dayTextureDayAlpha[${He}]`:"1.0"}, ${o?`u_dayTextureBrightness[${He}]`:"0.0"}, ${r?`u_dayTextureContrast[${He}]`:"0.0"}, ${s?`u_dayTextureHue[${He}]`:"0.0"}, ${a?`u_dayTextureSaturation[${He}]`:"0.0"}, ${c?`u_dayTextureOneOverGamma[${He}]`:"0.0"}, ${h?`u_dayTextureSplit[${He}]`:"0.0"}, ${P?`u_colorsToAlpha[${He}]`:"vec4(0.0)"}, nightBlend); `,C&&(bt+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color); `);bt+=` return color; }`,nt.sources.push(bt),ke.sources.push(Pbt(le)),ke.sources.push(Ybt(E));let Rt=$t.fromCache({context:t.context,vertexShaderSource:ke,fragmentShaderSource:nt,attributeLocations:ee.getAttributeLocations()});Ve=we[Te]=new Ibt(i,Te,this.material,Rt,Se,Ee)}return n.surfaceShader=Ve,Ve.shaderProgram};m$.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 QY=m$;var Rzi=x(T(),1);var VBi=x(T(),1),wbt={NONE:-1,PARTIAL:0,FULL:1},Ur=Object.freeze(wbt);var t3i=x(T(),1);var EBi=x(T(),1),Mbt={START:0,LOADING:1,DONE:2,FAILED:3},Da=Object.freeze(Mbt);var LBi=x(T(),1),kbt={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},Wo=Object.freeze(kbt);function gr(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new se(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 de,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}Object.defineProperties(gr.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}}});gr.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)};gr.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()};gr.prototype.freeVertexArray=function(){gr._freeVertexArray(this.vertexArray),this.vertexArray=void 0,gr._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0};gr.initialize=function(e,t,n){let i=e.data;l(i)||(i=e.data=new gr),e.state===Da.START&&(Ubt(e,t,n),e.state=Da.LOADING)};gr.processStateMachine=function(e,t,n,i,o,r,s){gr.initialize(e,n,i);let a=e.data;if(e.state===Da.LOADING&&Dbt(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 b in h)h.hasOwnProperty(b)&&(h[b](e)||(p[b]=h[b]));e._loadedCallbacks=p,e.state=Da.DONE}c&&(e.renderable=!0)};gr.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 b=h.loadingImagery.imageryLayer;if(b.ready){h.freeResources(),c.splice(d,1),b._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 rZe(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=br.clone(s);c.hasGeodeticSurfaceNormals=t,c=br.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?(gr._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=gr._createVertexArrayForMesh(i.context,o)):(gr._freeVertexArray(e.vertexArray),e.vertexArray=gr._createVertexArrayForMesh(i.context,o)),gr._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}gr.prototype.addGeodeticSurfaceNormals=function(e,t){rZe(this,!0,e,t)};gr.prototype.removeGeodeticSurfaceNormals=function(e){rZe(this,!1,void 0,e)};gr.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 b of p)b.level=-1}o.updateExaggeration(r,s)}};gr.prototype.updateSceneMode=function(e){let n=this.renderedMesh;n!==void 0&&n.updateSceneMode(e)};function Ubt(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 Dbt(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||gr.processStateMachine(a,t,n,i,o,r,!0)),s.terrainState===Wo.FAILED&&Obt(s,e,t,n,e.x,e.y,e.level),s.terrainState===Wo.UNLOADED&&Bbt(s,n,e.x,e.y,e.level),s.terrainState===Wo.RECEIVED&&Hbt(s,t,n,e.x,e.y,e.level),s.terrainState===Wo.TRANSFORMED&&(Kbt(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)jbt(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 Obt(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=Da.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(b){l(b)&&(e.terrainData=b,e.terrainState=Wo.RECEIVED)}).catch(function(){e.terrainState=Wo.FAILED}))}function Bbt(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===bi.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=jo.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let c=new xr({throttle:!1,throttleByServer:!0,type:Hs.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 zbt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function Hbt(e,t,n,i,o,r){let s=n.tilingScheme,a=zbt;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}))}gr._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=qe.createVertexBuffer({context:e,typedArray:n,usage:Fe.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=qe.createIndexBuffer({context:e,typedArray:a,usage:Fe.STATIC_DRAW,indexDatatype:Ne.fromSizeInBytes(a.BYTES_PER_ELEMENT)}),s.vertexArrayDestroyable=!1,s.referenceCount=1,r[e.id]=s,t.indices.indexBuffers=r}else++s.referenceCount;return new Bn({context:e,attributes:o,indexBuffer:s})};gr._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 Kbt(e,t,n,i,o,r,s){e.vertexArray=gr._createVertexArrayForMesh(t,e.mesh),e.terrainState=Wo.READY,e.fill=e.fill&&e.fill.destroy(s)}function Jbt(e){let t=e.cache.tile_waterMaskData;if(!l(t)){let n=Lt.create({context:e,pixelFormat:Ke.LUMINANCE,pixelDatatype:De.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR,magnificationFilter:ci.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function jbt(e,t){let n=t.terrainData.waterMask,i=Jbt(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:De.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:n},sampler:i.sampler,flipY:!1}),o.referenceCount=0}++o.referenceCount,t.waterMaskTexture=o,se.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}gr.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};gr.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 ah=gr;var R3i=x(T(),1);var i3i=x(T(),1),Qbt={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},Rn=Qbt;var r3i=x(T(),1),sZe={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>=sZe.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},di=sZe;function X1(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 se}X1.prototype.update=function(e,t,n){this.changedThisFrame&&(hZe(e,t,this.tile,n),this.changedThisFrame=!1)};X1.prototype.destroy=function(e){this._destroyVertexArray(e),l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};X1.prototype._destroyVertexArray=function(e){l(this.vertexArray)&&(l(e)?e.push(this.vertexArray):ah._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var qbt=new Wy;X1.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=qbt;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);xa(e,n,c,d,s,Rn.EAST,!1,a,i),xa(e,n,c,u,s,Rn.NORTH,!1,a,i),xa(e,n,c,h,s,Rn.WEST,!1,a,i),xa(e,n,c,p,s,Rn.SOUTH,!1,a,i);let b=d.findTileToNorth(r),f=d.findTileToSouth(r),y=h.findTileToNorth(r),_=h.findTileToSouth(r);xa(e,n,c,b,s,Rn.SOUTHEAST,!1,a,i),xa(e,n,c,y,s,Rn.SOUTHWEST,!1,a,i),xa(e,n,c,f,s,Rn.NORTHEAST,!1,a,i),xa(e,n,c,_,s,Rn.NORTHWEST,!1,a,i),c=a.dequeue()}};function xa(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||di.wasKicked(d._lastSelectionResult)||di.originalResult(d._lastSelectionResult)===di.CULLED);){if(s)return;let u=d.parent;if(r>=Rn.NORTHWEST&&u!==void 0)switch(r){case Rn.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case Rn.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case Rn.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case Rn.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===di.RENDERED){if(l(d.data.vertexArray))return;$bt(e,t,n,d,r,o,a,c);return}if(di.originalResult(i._lastSelectionResult)!==di.CULLED)switch(r){case Rn.WEST:xa(e,t,n,i.northwestChild,o,r,!0,a,c),xa(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Rn.EAST:xa(e,t,n,i.southeastChild,o,r,!0,a,c),xa(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Rn.SOUTH:xa(e,t,n,i.southwestChild,o,r,!0,a,c),xa(e,t,n,i.southeastChild,o,r,!0,a,c);break;case Rn.NORTH:xa(e,t,n,i.northeastChild,o,r,!0,a,c),xa(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Rn.NORTHWEST:xa(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Rn.NORTHEAST:xa(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Rn.SOUTHWEST:xa(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Rn.SOUTHEAST:xa(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new fe("Invalid edge")}}}function $bt(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new X1(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),egt(e,t,n,i,o,a)}function egt(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;l(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(hZe(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case Rn.WEST:d=s.westMeshes,u=s.westTiles;break;case Rn.SOUTH:d=s.southMeshes,u=s.southTiles;break;case Rn.EAST:d=s.eastMeshes,u=s.eastTiles;break;case Rn.NORTH:d=s.northMeshes,u=s.northTiles;break;case Rn.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case Rn.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case Rn.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case Rn.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,b,f,y=n.rectangle,_,S=i.rectangle;switch(o){case Rn.WEST:for(_=(S.north-S.south)*W.EPSILON5,h=0;h<u.length&&(b=u[h],f=b.rectangle,!W.greaterThan(y.north,f.south,_));++h);for(p=h;p<u.length&&(b=u[p],f=b.rectangle,!W.greaterThanOrEquals(y.south,f.north,_));++p);break;case Rn.SOUTH:for(_=(S.east-S.west)*W.EPSILON5,h=0;h<u.length&&(b=u[h],f=b.rectangle,!W.lessThan(y.west,f.east,_));++h);for(p=h;p<u.length&&(b=u[p],f=b.rectangle,!W.lessThanOrEquals(y.east,f.west,_));++p);break;case Rn.EAST:for(_=(S.north-S.south)*W.EPSILON5,h=0;h<u.length&&(b=u[h],f=b.rectangle,!W.lessThan(y.south,f.north,_));++h);for(p=h;p<u.length&&(b=u[p],f=b.rectangle,!W.lessThanOrEquals(y.north,f.south,_));++p);break;case Rn.NORTH:for(_=(S.east-S.west)*W.EPSILON5,h=0;h<u.length&&(b=u[h],f=b.rectangle,!W.greaterThan(y.east,f.west,_));++h);for(p=h;p<u.length&&(b=u[p],f=b.rectangle,!W.greaterThanOrEquals(y.west,f.east,_));++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 tA=new be,tgt=new be,P1=new m,b$=new m,h$=new M,f$=new M,Du=new M;function s3(){this.height=0,this.encodedNormal=new M}function e3(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,b=0;l(h)&&(p=h.minimumHeight,b=h.maximumHeight),d=(p+b)*.5}return fZe(e,t,n,i,d,c),c}var ngt={minimumHeight:0,maximumHeight:0},igt=new m,aZe=new s3,cZe=new s3,lZe=new s3,dZe=new s3,ogt=typeof Uint8Array<"u"?new Uint8Array(81):void 0,rgt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function hZe(e,t,n,i){ah.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=n3(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,lZe),p=n3(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,aZe),b=n3(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,cZe),f=n3(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,dZe);h=e3(r,u,0,1,h,p,f,b,lZe),p=e3(r,u,0,0,p,h,b,f,aZe),b=e3(r,u,1,1,b,p,f,h,cZe),f=e3(r,u,1,1,f,b,h,p,dZe);let y=p.height,_=b.height,S=h.height,A=f.height,Z=Math.min(y,_,S,A),V=Math.max(y,_,S,A),E=(Z+V)*.5,G,v,I=e.getLevelMaximumGeometricError(n.level),X=u.maximumRadius-I,N=Math.acos(X/u.maximumRadius)*4;if(N*=1.5,s.width>N&&V-Z<=I){let R=new Pc({width:9,height:9,buffer:ogt,structure:{heightOffset:V}}),L=rgt;L.tilingScheme=n.tilingScheme,L.x=n.x,L.y=n.y,L.level=n.level,L.exaggeration=a,L.exaggerationRelativeHeight=c,r.mesh=R._createMeshSync(L)}else{let R=d,L=ce.center(s,tgt);L.height=E;let P=u.cartographicToCartesian(L,igt),Y=new br(P,void 0,void 0,void 0,void 0,!0,!0,R,a,c),O=5,k;for(k=r.westMeshes,G=0,v=k.length;G<v;++G)O+=k[G].eastIndicesNorthToSouth.length;for(k=r.southMeshes,G=0,v=k.length;G<v;++G)O+=k[G].northIndicesWestToEast.length;for(k=r.eastMeshes,G=0,v=k.length;G<v;++G)O+=k[G].westIndicesSouthToNorth.length;for(k=r.northMeshes,G=0,v=k.length;G<v;++G)O+=k[G].southIndicesEastToWest.length;let D=ngt;D.minimumHeight=Z,D.maximumHeight=V;let w=Y.stride,z=new Float32Array(O*w),J=0,ee=J;J=t3(u,s,Y,z,J,0,1,h.height,h.encodedNormal,1,D),J=o3(r,u,Y,z,J,r.westTiles,r.westMeshes,Rn.EAST,D);let H=J;J=t3(u,s,Y,z,J,0,0,p.height,p.encodedNormal,0,D),J=o3(r,u,Y,z,J,r.southTiles,r.southMeshes,Rn.NORTH,D);let te=J;J=t3(u,s,Y,z,J,1,0,b.height,b.encodedNormal,0,D),J=o3(r,u,Y,z,J,r.eastTiles,r.eastMeshes,Rn.WEST,D);let $=J;J=t3(u,s,Y,z,J,1,1,f.height,f.encodedNormal,1,D),J=o3(r,u,Y,z,J,r.northTiles,r.northMeshes,Rn.SOUTH,D),Z=D.minimumHeight,V=D.maximumHeight;let pe=en.fromRectangle(s,Z,V,n.tilingScheme.ellipsoid),xe=fi.geodeticLatitudeToMercatorAngle(s.south),le=1/(fi.geodeticLatitudeToMercatorAngle(s.north)-xe),Te=(fi.geodeticLatitudeToMercatorAngle(L.latitude)-xe)*le,Se=u.geodeticSurfaceNormalCartographic(tA,b$),Ee=tn.octEncode(Se,h$),Ve=J;Y.encode(z,J*w,pe.center,M.fromElements(.5,.5,Du),E,Ee,Te,Se),++J;let we=J,ke=we<256?1:2,nt=(we-1)*3,bt=nt*ke,Rt=(z.length-we*w)*Float32Array.BYTES_PER_ELEMENT,He;if(Rt>=bt){let ct=we*w*Float32Array.BYTES_PER_ELEMENT;He=we<256?new Uint8Array(z.buffer,ct,nt):new Uint16Array(z.buffer,ct,nt)}else He=we<256?new Uint8Array(nt):new Uint16Array(nt);z=new Float32Array(z.buffer,0,we*w);let mt=0;for(G=0;G<we-2;++G)He[mt++]=Ve,He[mt++]=G,He[mt++]=G+1;He[mt++]=Ve,He[mt++]=G,He[mt++]=0;let it=[];for(G=H;G>=ee;--G)it.push(G);let rt=[];for(G=te;G>=H;--G)rt.push(G);let jt=[];for(G=$;G>=te;--G)jt.push(G);let Cn=[];for(Cn.push(0),G=Ve-1;G>=$;--G)Cn.push(G);r.mesh=new pc(Y.center,z,He,nt,we,Z,V,s,de.fromOrientedBoundingBox(pe),mgt(e,pe.center,s,Z,V),Y.stride,pe,Y,it,rt,jt,Cn)}let g=t.context;r._destroyVertexArray(i),r.vertexArray=ah._createVertexArrayForMesh(g,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let C=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let R=o._findAncestorTileWithTerrainData(n);l(R)&&l(R.data.waterMaskTexture)&&(r.waterMaskTexture=R.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,R,r.waterMaskTranslationAndScale))}l(C)&&(--C.referenceCount,C.referenceCount===0&&C.destroy())}function t3(e,t,n,i,o,r,s,a,c,d,u){let h=tA;h.longitude=W.lerp(t.west,t.east,r),h.latitude=W.lerp(t.south,t.north,s),h.height=a;let p=e.cartographicToCartesian(h,P1),b;n.hasGeodeticSurfaceNormals&&(b=e.geodeticSurfaceNormal(p,b$));let f=f$;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,d,b),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var r3=new ce;function qY(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=ce.clone(e.rectangle,r3),o.west-=W.TWO_PI,o.east-=W.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=ce.clone(e.rectangle,r3),o.west+=W.TWO_PI,o.east+=W.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),b=(n.y-u)/(h-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(b)<Math.EPSILON5?b=0:Math.abs(b-1)<Math.EPSILON5&&(b=1),i.x=p,i.y=b,i}var sgt=new M;function p$(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 agt=new M,cgt=new m;function lgt(e,t,n,i,o,r,s,a,c,d){let u=i.encoding,h=i.vertices,p=qY(t,n,u.decodeTextureCoordinates(h,o,Du),Du),b=qY(t,n,u.decodeTextureCoordinates(h,r,f$),f$),f;c?f=(s-p.x)/(b.x-p.x):f=(a-p.y)/(b.y-p.y);let y=u.decodeHeight(h,o),_=u.decodeHeight(h,r),S=n.rectangle;tA.longitude=W.lerp(S.west,S.east,s),tA.latitude=W.lerp(S.south,S.north,a),d.height=tA.height=W.lerp(y,_,f);let A;if(u.hasVertexNormals){let Z=u.getOctEncodedNormal(h,o,sgt),V=u.getOctEncodedNormal(h,r,agt),E=tn.octDecode(Z.x,Z.y,P1),G=tn.octDecode(V.x,V.y,cgt);A=m.lerp(E,G,f,P1),m.normalize(A,A),tn.octEncode(A,d.encodedNormal)}else A=e.geodeticSurfaceNormalCartographic(tA,P1),tn.octEncode(A,d.encodedNormal)}function fZe(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(tA,P1);tn.octEncode(s,r.encodedNormal)}function n3(e,t,n,i,o,r,s,a,c,d,u){if(mZe(e,t,a,s,!1,n,i,u)||mZe(e,t,d,c,!0,n,i,u))return u;let p;if(g$(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],p$(r,p,n,i,u),u;let b;if(n===0?i===0?b=i3(e.westMeshes,e.westTiles,Rn.EAST,e.southMeshes,e.southTiles,Rn.NORTH,n,i):b=i3(e.northMeshes,e.northTiles,Rn.SOUTH,e.westMeshes,e.westTiles,Rn.EAST,n,i):i===0?b=i3(e.southMeshes,e.southTiles,Rn.NORTH,e.eastMeshes,e.eastTiles,Rn.WEST,n,i):b=i3(e.eastMeshes,e.eastTiles,Rn.WEST,e.northMeshes,e.northTiles,Rn.SOUTH,n,i),l(b))return fZe(e,t,n,i,b,u),u}function i3(e,t,n,i,o,r,s,a){let c=uZe(e,t,!1,n,s,a),d=uZe(i,o,!0,r,s,a);return l(c)&&l(d)?(c+d)*.5:l(c)?c:d}function o3(e,t,n,i,o,r,s,a,c){for(let d=0;d<r.length;++d)o=dgt(e,t,n,i,o,r[d],s[d],a,c);return o}function dgt(e,t,n,i,o,r,s,a,c){let d=r.rectangle;a===Rn.EAST&&e.tile.x===0?(d=ce.clone(r.rectangle,r3),d.west-=W.TWO_PI,d.east-=W.TWO_PI):a===Rn.WEST&&r.x===0&&(d=ce.clone(r.rectangle,r3),d.west+=W.TWO_PI,d.east+=W.TWO_PI);let u=e.tile.rectangle,h,p;o>0&&(n.decodeTextureCoordinates(i,o-1,Du),h=Du.x,p=Du.y);let b,f;switch(a){case Rn.WEST:b=s.westIndicesSouthToNorth,f=!1;break;case Rn.NORTH:b=s.northIndicesWestToEast,f=!0;break;case Rn.EAST:b=s.eastIndicesNorthToSouth,f=!1;break;case Rn.SOUTH:b=s.southIndicesEastToWest,f=!0;break}let y=r,_=e.tile,S=s.encoding,A=s.vertices,Z=n.stride,V,E;S.hasWebMercatorT&&(V=fi.geodeticLatitudeToMercatorAngle(u.south),E=1/(fi.geodeticLatitudeToMercatorAngle(u.north)-V));for(let G=0;G<b.length;++G){let v=b[G],I=S.decodeTextureCoordinates(A,v,Du);qY(y,_,I,I);let X=I.x,N=I.y,g=f?X:N;if(g<0||g>1||Math.abs(X-h)<W.EPSILON5&&Math.abs(N-p)<W.EPSILON5)continue;let C=Math.abs(X)<W.EPSILON5||Math.abs(X-1)<W.EPSILON5,R=Math.abs(N)<W.EPSILON5||Math.abs(N-1)<W.EPSILON5;if(C&&R)continue;let L=S.decodePosition(A,v,P1),P=S.decodeHeight(A,v),Y;S.hasVertexNormals?Y=S.getOctEncodedNormal(A,v,h$):(Y=h$,Y.x=0,Y.y=0);let O=N;if(S.hasWebMercatorT){let D=W.lerp(u.south,u.north,N);O=(fi.geodeticLatitudeToMercatorAngle(D)-V)*E}let k;n.hasGeodeticSurfaceNormals&&(k=t.geodeticSurfaceNormal(L,b$)),n.encode(i,o*Z,L,I,P,Y,O,k),c.minimumHeight=Math.min(c.minimumHeight,P),c.maximumHeight=Math.max(c.maximumHeight,P),++o}return o}function uZe(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(!g$(h,u))continue;let p;switch(i){case Rn.WEST:p=u.westIndicesSouthToNorth;break;case Rn.SOUTH:p=u.southIndicesEastToWest;break;case Rn.EAST:p=u.eastIndicesNorthToSouth;break;case Rn.NORTH:p=u.northIndicesWestToEast;break}let b=p[n?0:p.length-1];if(l(b))return u.encoding.decodeHeight(u.vertices,b)}}function g$(e,t){return l(t)&&(!l(e.data.fill)||!e.data.fill.changedThisFrame)}function mZe(e,t,n,i,o,r,s,a){let c,d,u,h,p,b=i[o?0:n.length-1],f=n[o?0:n.length-1];if(g$(b,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,Du);let y=qY(b,e.tile,Du,Du);if(y.x===r&&y.y===s)return p$(f,p,r,s,a),!0;if(h=To(c,d?r:s,function(_,S){f.encoding.decodeTextureCoordinates(f.vertices,_,Du);let A=qY(b,e.tile,Du,Du);return u?d?A.x-r:A.y-s:d?r-A.x:s-A.y}),h<0){if(h=~h,h>0&&h<c.length)return lgt(t,b,e.tile,f,c[h-1],c[h],r,s,d,a),!0}else return p$(f,c[h],r,s,a),!0}return!1}var ugt=[new m,new m,new m,new m];function mgt(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=ugt;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 N1=X1;function Gr(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=Ln.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 _e,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(Gr.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(Gr.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(Gr.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(Gr.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new _e,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=ce.clone(ce.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0,this._oldSceneMode=re.SCENE3D}Object.defineProperties(Gr.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=se.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){us.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Kh.setOwner(e,this,"_clippingPolygons")}}});function hgt(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}Gr.prototype.update=function(e){this._imageryLayers._update()};function fgt(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)}}Gr.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort(hgt)})),fgt(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)ah._freeVertexArray(t[i]);t.length=0};Gr.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};Gr.prototype.endUpdate=function(e){if(!l(this._renderState)){this._renderState=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:$a.LESS}}),this._blendRenderState=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:$a.LESS_OR_EQUAL},blending:rn.ALPHA_BLEND});let a=Be(this._renderState,!0);a.cull.enabled=!1,this._disableCullingRenderState=Ue.fromCache(a),a=Be(this._blendRenderState,!0),a.cull.enabled=!1,this._disableCullingBlendRenderState=Ue.fromCache(a)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&N1.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],b=p.data.tileBoundingRegion;Ygt(this,p,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,b.minimumHeight)}}};function xZe(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)}Gr.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)xZe(t[n],e)};Gr.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};Gr.prototype.getLevelMaximumGeometricError=function(e){return l(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};Gr.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;l(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===di.CULLED_BUT_NEEDED,o=n.terrainState),ah.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)!==Ur.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,ah.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var pgt=new de,TZe=new ce,bgt=new ce,ggt=new be;function c3(e,t){if(t.west<t.east)return t;let n=ce.clone(t,bgt);return ce.center(e,ggt).longitude>0?n.east=W.PI:n.west=-W.PI,n}function _Ze(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||!ce.equals(e.cartographicLimitRectangle,ce.MAX_VALUE))}Gr.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=_Ze(this,t);if(t.fog.enabled&&!o&&W.fog(i,t.fog.density)>=1)return Ur.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return Ur.PARTIAL;let a=t.cullingVolume,c=s.boundingVolume;l(c)||(c=s.boundingSphere),r.clippedByBoundaries=!1;let d=c3(e.rectangle,this.cartographicLimitRectangle),u=ce.simpleIntersection(d,e.rectangle,TZe);if(!l(u))return Ur.NONE;if(ce.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==re.SCENE3D&&(c=pgt,de.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===re.MORPHING&&l(r.renderedMesh)&&(c=de.union(s.boundingSphere,c,c))),!l(c))return Ur.PARTIAL;let h=this._clippingPlanes;if(l(h)&&h.enabled){let _=h.computeIntersectionWithBoundingVolume(c);if(e.isClipped=_!==Jt.INSIDE,_===Jt.OUTSIDE)return Ur.NONE}let p=this._clippingPolygons;if(l(p)&&p.enabled){let _=p.computeIntersectionWithBoundingVolume(s);e.isClipped=_!==Jt.OUTSIDE}let b,f=a.computeVisibility(c);if(f===Jt.OUTSIDE?b=Ur.NONE:f===Jt.INTERSECTING?b=Ur.PARTIAL:f===Jt.INSIDE&&(b=Ur.FULL),b===Ur.NONE)return b;let y=t.mode===re.SCENE3D&&t.camera.frustum instanceof fn;if(t.mode===re.SCENE3D&&!y&&l(n)&&!o){let _=r.occludeePointInScaledSpace;return!l(_)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(_,s.minimumHeight)?b:Ur.NONE}return b};Gr.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 ygt=[],xgt=[];Gr.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=ygt;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,b=!l(p)||p.state===Qn.FAILED||p.state===Qn.INVALID,f=(h.loadingImagery||h.readyImagery).imageryLayer._layerIndex;i[f]=b&&i[f]}let d=this.quadtree._lastSelectionFrameNumber,u=xgt;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:di.NONE;if(p===di.RENDERED){let b=h.data;if(!l(b))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 y=f[a],_=y.loadingImagery,S=!l(_)||_.state===Qn.FAILED||_.state===Qn.INVALID,A=(y.loadingImagery||y.readyImagery).imageryLayer._layerIndex;if(S&&!i[A])return!1}}else p===di.REFINED&&u.push(h.southwestChild,h.southeastChild,h.northwestChild,h.northeastChild)}return!0};var Tgt=new m;Gr.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,Tgt),a=m.magnitude(s);return a<W.EPSILON5?0:(m.divideByScalar(s,a,s),(1-m.dot(s,r))*e._distance)};var pZe=new F,a3=new F,_gt=new se,Sgt=new se,Agt=new se,Zgt=new m,bZe=new m,Cgt=new m,Vgt=new m;Gr.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 Rgt=[new m,new m,new m,new m];function gZe(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=Rgt;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)}Gr.prototype.computeDistanceToTile=function(e,t){Egt(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 Egt(e,t,n){let i=e.data;i===void 0&&(i=e.data=new ah);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new Au({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=i.mesh,h=i.terrainData;if(u!==void 0&&u.minimumHeight!==void 0&&u.maximumHeight!==void 0)r.minimumHeight=u.minimumHeight,r.maximumHeight=u.maximumHeight,c=!0;else if(h!==void 0&&h._minimumHeight!==void 0&&h._maximumHeight!==void 0)r.minimumHeight=h._minimumHeight,r.maximumHeight=h._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let b=p.data;if(b!==void 0){let f=b.mesh,y=b.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0){r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight;break}else if(y!==void 0&&y._minimumHeight!==void 0&&y._maximumHeight!==void 0){r.minimumHeight=y._minimumHeight,r.maximumHeight=y._maximumHeight;break}}p=p.parent}d=p}if(d!==void 0){let p=n.verticalExaggeration,b=n.verticalExaggerationRelativeHeight;if(p!==1&&(c=!1,r.minimumHeight=Zo.getHeight(r.minimumHeight,p,b),r.maximumHeight=Zo.getHeight(r.maximumHeight,p,b)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=en.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=de.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=m.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),l(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=gZe(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let y=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||y)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=gZe(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}Gr.prototype.isDestroyed=function(){return!1};Gr.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 Ggt(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}}Gr.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 b=c[a];if((b.readyImagery??b.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]=Ggt(h,e,n),s.state=Da.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=Da.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==di.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};Gr.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()};Gr.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};Gr.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Lgt=new F,Wgt=new F;function yZe(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,bZe);return F.setTranslation(i,o,pZe),pZe},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=F.multiplyByPoint(i,this.properties.rtc,bZe);return F.setTranslation(i,r,a3),F.multiply(o,a3,a3),a3},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,Lgt):F.IDENTITY;return F.inverseTranspose(o,Wgt)},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},properties:{initialColor:new se(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 se,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 se,minMaxHeight:new M,scaleAndBias:new F,clippingPlanesEdgeColor:U.clone(U.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new se,frontFaceAlphaByDistance:new se,backFaceAlphaByDistance:new se,localizedTranslucencyRectangle:new se,undergroundColor:U.clone(U.TRANSPARENT),undergroundColorAlphaByDistance:new se,lambertDiffuseMultiplier:0,vertexShadowDarkness:0}};return l(t.materialUniformMap)?Gt(n,t.materialUniformMap):n}function vgt(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=Fgt(e,r,o),i.wireframeVertexArray.mesh=o}}function Fgt(e,t,n){let o={indices:n.indices,primitiveType:ve.TRIANGLES};Kn.toWireframe(o);let r=o.indices,s=qe.createIndexBuffer({context:e,typedArray:r,usage:Fe.STATIC_DRAW,indexDatatype:Ne.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new Bn({context:e,attributes:t._attributes,indexBuffer:s})}var SZe,AZe,l3;(function(){let e=new Ft({geometry:Ih.fromDimensions({dimensions:new m(2,2,2)})}),t=new Ft({geometry:new Hb({radius:1})}),n=new F,i,o;function r(s){return new Pn({geometryInstances:s,appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})}SZe=function(s,a){return s===i||(l3(),i=s,n=F.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=Qt.fromColor(a),o=r(e)),o},AZe=function(s,a){return s===i||(l3(),i=s,n=F.fromTranslation(s.center,n),n=F.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=Qt.fromColor(a),o=r(t)),o},l3=function(){l(o)&&(o.destroy(),o=void 0,i=void 0)}})();var Igt=new se(0,0,0,0),Pgt={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},Xgt=U.TRANSPARENT,Ngt=new Dt;function Ygt(e,t,n){let i=t.data;l(i.vertexArray)||(i.fill===void 0&&(i.fill=new N1(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(l(r)&&l(r.credits)){let ct=r.credits;for(let Wt=0,sn=ct.length;Wt<sn;++Wt)o.addCreditToNextFrame(ct[Wt])}let s=vt.maximumTextureImageUnits,a=i.waterMaskTexture,c=i.waterMaskTranslationAndScale;!l(a)&&l(i.fill)&&(a=i.fill.waterMaskTexture,c=i.fill.waterMaskTranslationAndScale);let d=n.cameraUnderground,u=n.globeTranslucencyState,h=u.translucent,p=u.frontFaceAlphaByDistance,b=u.backFaceAlphaByDistance,f=u.rectangle,y=e.undergroundColor??Xgt,_=e.undergroundColorAlphaByDistance??Ngt,S=_Ze(e,n)&&n.mode===re.SCENE3D&&y.alpha>0&&(_.nearValue>0||_.farValue>0),A=e.lambertDiffuseMultiplier,Z=e.vertexShadowDarkness,V=e.hasWaterMask&&l(a),E=V&&e.showWaterEffect,G=e.oceanNormalMap,v=E&&l(G),I=e.terrainProvider,X=l(I)&&e.terrainProvider.hasVertexNormals,N=n.fog.enabled&&n.fog.renderable&&!d,g=e.showGroundAtmosphere&&n.mode===re.SCENE3D,C=Ln.castShadows(e.shadows)&&!h,R=Ln.receiveShadows(e.shadows)&&!h,L=e.hueShift,P=e.saturationShift,Y=e.brightnessShift,O=!(W.equalsEpsilon(L,0,W.EPSILON7)&&W.equalsEpsilon(P,0,W.EPSILON7)&&W.equalsEpsilon(Y,0,W.EPSILON7)),k=!1;if(g){let ct=m.magnitude(n.camera.positionWC),Wt=e.nightFadeOutDistance;k=ct>Wt}V&&--s,v&&--s,l(n.shadowState)&&n.shadowState.shadowsEnabled&&--s,l(e.clippingPlanes)&&e.clippingPlanes.enabled&&--s,l(e.clippingPolygons)&&e.clippingPolygons.enabled&&(--s,--s),s-=u.numberOfTextureUniforms;let D=i.renderedMesh,w=D.center,z=D.encoding,J=i.tileBoundingRegion,ee=n.verticalExaggeration,H=n.verticalExaggerationRelativeHeight,te=ee!==1,$=z.hasGeodeticSurfaceNormals,pe=_gt,xe=0,le=0,Te=0,Se=0,Ee=!1;if(n.mode!==re.SCENE3D){let ct=n.mapProjection,Wt=ct.project(ce.southwest(t.rectangle),Cgt),sn=ct.project(ce.northeast(t.rectangle),Vgt);if(pe.x=Wt.x,pe.y=Wt.y,pe.z=sn.x,pe.w=sn.y,n.mode!==re.MORPHING&&(w=Zgt,w.x=0,w.y=(pe.z+pe.x)*.5,w.z=(pe.w+pe.y)*.5,pe.x-=w.y,pe.y-=w.z,pe.z-=w.y,pe.w-=w.z),n.mode===re.SCENE2D&&z.quantization===Ua.BITS12){let lt=1/(Math.pow(2,12)-1)*.5,Xn=(pe.z-pe.x)*lt,pi=(pe.w-pe.y)*lt;pe.x-=Xn,pe.y-=pi,pe.z+=Xn,pe.w+=pi}ct instanceof fi&&(xe=t.rectangle.south,le=t.rectangle.north,Te=fi.geodeticLatitudeToMercatorAngle(xe),Se=1/(fi.geodeticLatitudeToMercatorAngle(le)-Te),Ee=!0)}let Ve=Pgt;Ve.frameState=n,Ve.surfaceTile=i,Ve.hasWaterMask=V,Ve.showReflectiveOcean=E,Ve.showOceanWaves=v,Ve.enableLighting=e.enableLighting,Ve.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Ve.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Ve.showGroundAtmosphere=g,Ve.atmosphereLightIntensity=e.atmosphereLightIntensity,Ve.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Ve.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Ve.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Ve.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Ve.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Ve.perFragmentGroundAtmosphere=k,Ve.hasVertexNormals=X,Ve.useWebMercatorProjection=Ee,Ve.clippedByBoundaries=i.clippedByBoundaries,Ve.hasGeodeticSurfaceNormals=$,Ve.hasExaggeration=te;let we=i.imagery,ke=0,nt=we.length,bt=e.showSkirts&&!d&&!h,Rt=e.backFaceCulling&&!d&&!h,He=Rt?e._renderState:e._disableCullingRenderState,mt=Rt?e._blendRenderState:e._disableCullingBlendRenderState,it=He,rt=e._firstPassInitialColor,jt=n.context;if(l(e._debug.boundingSphereTile)||l3(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let ct=e._drawCommands.length;for(let Wt=0;Wt<ct;++Wt)e._uniformMaps[Wt]=yZe(n,e)}do{let ct=0,Wt,sn;if(e._drawCommands.length<=e._usedDrawCommands?(Wt=new et,Wt.owner=t,Wt.cull=!1,Wt.boundingVolume=new de,Wt.orientedBoundingBox=void 0,sn=yZe(n,e),e._drawCommands.push(Wt),e._uniformMaps.push(sn)):(Wt=e._drawCommands[e._usedDrawCommands],sn=e._uniformMaps[e._usedDrawCommands]),Wt.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let _a=J.boundingVolume,Rs=J.boundingSphere;l(_a)?SZe(_a,U.RED).update(n):l(Rs)&&AZe(Rs,U.RED).update(n)}let lt=sn.properties;se.clone(rt,lt.initialColor),lt.oceanNormalMap=G,lt.lightingFadeDistance.x=e.lightingFadeOutDistance,lt.lightingFadeDistance.y=e.lightingFadeInDistance,lt.nightFadeDistance.x=e.nightFadeOutDistance,lt.nightFadeDistance.y=e.nightFadeInDistance,lt.atmosphereLightIntensity=e.atmosphereLightIntensity,lt.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,lt.atmosphereMieCoefficient=e.atmosphereMieCoefficient,lt.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,lt.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,lt.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,lt.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let Xn=d?b:p,pi=d?p:b;l(Xn)&&(se.fromElements(Xn.near,Xn.nearValue,Xn.far,Xn.farValue,lt.frontFaceAlphaByDistance),se.fromElements(pi.near,pi.nearValue,pi.far,pi.farValue,lt.backFaceAlphaByDistance)),se.fromElements(_.near,_.nearValue,_.far,_.farValue,lt.undergroundColorAlphaByDistance),U.clone(y,lt.undergroundColor),lt.lambertDiffuseMultiplier=A,lt.vertexShadowDarkness=Z;let Di=!l(i.vertexArray)&&l(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;Di&&U.clone(e.fillHighlightColor,lt.fillHighlightColor),lt.verticalExaggerationAndRelativeHeight.x=ee,lt.verticalExaggerationAndRelativeHeight.y=H,lt.center3D=D.center,m.clone(w,lt.rtc),se.clone(pe,lt.tileRectangle),lt.southAndNorthLatitude.x=xe,lt.southAndNorthLatitude.y=le,lt.southMercatorYAndOneOverHeight.x=Te,lt.southMercatorYAndOneOverHeight.y=Se;let Ut=Sgt,bo=c3(t.rectangle,e.cartographicLimitRectangle),ro=Agt,Fi=c3(t.rectangle,f);m.fromElements(L,P,Y,lt.hsbShift);let zn=t.rectangle,Dn=1/zn.width,Hi=1/zn.height;Ut.x=(bo.west-zn.west)*Dn,Ut.y=(bo.south-zn.south)*Hi,Ut.z=(bo.east-zn.west)*Dn,Ut.w=(bo.north-zn.south)*Hi,se.clone(Ut,lt.localizedCartographicLimitRectangle),ro.x=(Fi.west-zn.west)*Dn,ro.y=(Fi.south-zn.south)*Hi,ro.z=(Fi.east-zn.west)*Dn,ro.w=(Fi.north-zn.south)*Hi,se.clone(ro,lt.localizedTranslucencyRectangle);let Gi=N&&W.fog(t._distance,n.fog.density)>W.EPSILON3;O=O&&(Gi||g);let er=!1,Lr=!1,Vs=!1,Wr=!1,On=!1,go=!1,En=!1,Ho=!1,Fo=!1,sa=!1;for(;ct<s&&ke<nt;){let _a=we[ke],Rs=_a.readyImagery;if(++ke,!l(Rs)||Rs.imageryLayer.alpha===0)continue;let Th=_a.useWebMercatorT?Rs.textureWebMercator:Rs.texture,Po=Rs.imageryLayer;l(_a.textureTranslationAndScale)||(_a.textureTranslationAndScale=Po._calculateTextureTranslationAndScale(t,_a)),lt.dayTextures[ct]=Th,lt.dayTextureTranslationAndScale[ct]=_a.textureTranslationAndScale,lt.dayTextureTexCoordsRectangle[ct]=_a.textureCoordinateRectangle,lt.dayTextureUseWebMercatorT[ct]=_a.useWebMercatorT,lt.dayTextureAlpha[ct]=Po.alpha,go=go||lt.dayTextureAlpha[ct]!==1,lt.dayTextureNightAlpha[ct]=Po.nightAlpha,En=En||lt.dayTextureNightAlpha[ct]!==1,lt.dayTextureDayAlpha[ct]=Po.dayAlpha,En=En||lt.dayTextureDayAlpha[ct]!==1,lt.dayTextureBrightness[ct]=Po.brightness,er=er||lt.dayTextureBrightness[ct]!==bs.DEFAULT_BRIGHTNESS,lt.dayTextureContrast[ct]=Po.contrast,Lr=Lr||lt.dayTextureContrast[ct]!==bs.DEFAULT_CONTRAST,lt.dayTextureHue[ct]=Po.hue,Vs=Vs||lt.dayTextureHue[ct]!==bs.DEFAULT_HUE,lt.dayTextureSaturation[ct]=Po.saturation,Wr=Wr||lt.dayTextureSaturation[ct]!==bs.DEFAULT_SATURATION,lt.dayTextureOneOverGamma[ct]=1/Po.gamma,On=On||lt.dayTextureOneOverGamma[ct]!==1/bs.DEFAULT_GAMMA,lt.dayTextureSplit[ct]=Po.splitDirection,Ho=Ho||lt.dayTextureSplit[ct]!==0;let Yc=lt.dayTextureCutoutRectangles[ct];if(l(Yc)||(Yc=lt.dayTextureCutoutRectangles[ct]=new se),se.clone(se.ZERO,Yc),l(Po.cutoutRectangle)){let Uo=c3(zn,Po.cutoutRectangle),Qd=ce.simpleIntersection(Uo,zn,TZe);Fo=l(Qd)||Fo,Yc.x=(Uo.west-zn.west)*Dn,Yc.y=(Uo.south-zn.south)*Hi,Yc.z=(Uo.east-zn.west)*Dn,Yc.w=(Uo.north-zn.south)*Hi}let ud=lt.colorsToAlpha[ct];l(ud)||(ud=lt.colorsToAlpha[ct]=new se);let md=l(Po.colorToAlpha)&&Po.colorToAlphaThreshold>0;if(sa=sa||md,md){let Uo=Po.colorToAlpha;ud.x=Uo.red,ud.y=Uo.green,ud.z=Uo.blue,ud.w=Po.colorToAlphaThreshold}else ud.w=-1;if(l(Rs.credits)){let Uo=Rs.credits;for(let Qd=0,Sn=Uo.length;Qd<Sn;++Qd)o.addCreditToNextFrame(Uo[Qd])}++ct}lt.dayTextures.length=ct,lt.waterMask=a,se.clone(c,lt.waterMaskTranslationAndScale),lt.minMaxHeight.x=z.minimumHeight,lt.minMaxHeight.y=z.maximumHeight,F.clone(z.matrix,lt.scaleAndBias);let Ii=e._clippingPlanes,Io=l(Ii)&&Ii.enabled&&t.isClipped;Io&&(lt.clippingPlanesEdgeColor=U.clone(Ii.edgeColor,lt.clippingPlanesEdgeColor),lt.clippingPlanesEdgeWidth=Ii.edgeWidth);let _c=e._clippingPolygons,Ds=l(_c)&&_c.enabled&&t.isClipped;Ve.numberOfDayTextures=ct,Ve.applyBrightness=er,Ve.applyContrast=Lr,Ve.applyHue=Vs,Ve.applySaturation=Wr,Ve.applyGamma=On,Ve.applyAlpha=go,Ve.applyDayNightAlpha=En,Ve.applySplit=Ho,Ve.enableFog=Gi,Ve.enableClippingPlanes=Io,Ve.clippingPlanes=Ii,Ve.enableClippingPolygons=Ds,Ve.clippingPolygons=_c,Ve.hasImageryLayerCutout=Fo,Ve.colorCorrect=O,Ve.highlightFillTile=Di,Ve.colorToAlpha=sa,Ve.showUndergroundColor=S,Ve.translucent=h;let Os=i.renderedMesh.indices.length;bt||(Os=i.renderedMesh.indexCountWithoutSkirts),Wt.shaderProgram=e._surfaceShaderSet.getShaderProgram(Ve),Wt.castShadows=C,Wt.receiveShadows=R,Wt.renderState=it,Wt.primitiveType=ve.TRIANGLES,Wt.vertexArray=i.vertexArray||i.fill.vertexArray,Wt.count=Os,Wt.uniformMap=sn,Wt.pass=Le.GLOBE,e._debug.wireframe&&(vgt(jt,e,t),l(i.wireframeVertexArray)&&(Wt.vertexArray=i.wireframeVertexArray,Wt.primitiveType=ve.LINES,Wt.count=Os*2));let os=Wt.boundingVolume,Z0=Wt.orientedBoundingBox;n.mode!==re.SCENE3D?(de.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,J.minimumHeight,J.maximumHeight,os),m.fromElements(os.center.z,os.center.x,os.center.y,os.center),n.mode===re.MORPHING&&(os=de.union(J.boundingSphere,os,os))):(Wt.boundingVolume=de.clone(J.boundingSphere,os),Wt.orientedBoundingBox=en.clone(J.boundingVolume,Z0)),Wt.dirty=!0,h&&u.updateDerivedCommands(Wt,n),xZe(Wt,n),it=mt,rt=Igt}while(ke<nt)}var $Y=Gr;var vzi=x(T(),1);function ZZe(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=ce.clone(ce.MAX_VALUE)}Object.defineProperties(ZZe.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=Dt.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=Dt.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){l(e)||(e=ce.clone(ce.MAX_VALUE)),ce.clone(e,this._rectangle)}}});var ew=ZZe;var mHi=x(T(),1);var Xzi=x(T(),1);function CZe(e){this._ellipsoid=new yf(e.ellipsoid,m.ZERO)}Object.defineProperties(CZe.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var tw=CZe;var Dzi=x(T(),1);var y$=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()}},wgt=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=di.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new y$(wgt),this.state=Da.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 Mgt=256;function kgt(e,t,n,i){let o=n.width/Mgt*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 kgt(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),VZe(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),VZe(this,o.positionCartographic)._removedCustomData.push(o)}this._removedCustomData.length=0};var Ugt=new be;function VZe(e,t){let n=e.northwestChild.rectangle,i=ce.southeast(n,Ugt),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<Da.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=Da.START,this.renderable=!1,this.upsampledFromParent=!1,l(this.data)&&l(this.data.freeResources)&&this.data.freeResources(),d3(this._southwestChild),this._southwestChild=void 0,d3(this._southeastChild),this._southeastChild=void 0,d3(this._northwestChild),this._northwestChild=void 0,d3(this._northeastChild),this._northeastChild=void 0};function d3(e){l(e)&&e.freeResources()}var nw=Oa;var zzi=x(T(),1);function u3(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}u3.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};u3.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(),RZe(this,t)),t=i}};function RZe(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}u3.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))&&RZe(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var iw=u3;function ch(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 iw,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 tw({ellipsoid:n}),this._tileLoadProgressEvent=new _e,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(ch.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});ch.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function Dgt(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,GZe(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()}ch.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;l(t);)t.state!==Da.START&&e(t),t=t.replacementNext};ch.prototype.forEachRenderedTile=function(e){let t=this._tilesRenderedThisFrame;for(let n of t)e(n)};ch.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};ch.prototype.update=function(e){l(this._tileProvider.update)&&this._tileProvider.update(e)};function GZe(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}ch.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(Dgt(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),GZe(this),!this._debug.suspendLodUpdate&&(this._tileReplacementQueue.markStartOfRenderFrame(),this._tilesRenderedThisFrame.clear()))};ch.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),Hgt(this,e),iyt(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function Ogt(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=_e.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))}ch.prototype.endFrame=function(e){!e.passes.render||e.mode===re.MORPHING||($gt(this,e),nyt(this,e),Ogt(this,e))};ch.prototype.isDestroyed=function(){return!1};ch.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var rw,EZe=new be;function Bgt(e,t){let n=ce.center(e.rectangle,EZe),i=n.longitude-rw.longitude,o=n.latitude-rw.latitude;n=ce.center(t.rectangle,EZe);let r=n.longitude-rw.longitude,s=n.latitude-rw.latitude;return i*i+o*o-(r*r+s*s)}var zgt=new m,ow=[];function Hgt(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=nw.createLevelZeroTiles(p);let b=e._levelZeroTiles.length;if(ow.length<b){ow=new Array(b);for(let f=0;f<b;++f)ow[f]===void 0&&(ow[f]=new sw)}}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let r=e._levelZeroTiles,s=r.length>1?e._occluders:void 0;rw=t.camera.positionCartographic,r.sort(Bgt);let a=e._addHeightCallbacks,c=e._removeHeightCallbacks;a.forEach(h=>{let p=r.find(b=>ce.contains(b.rectangle,h.positionCartographic));p&&p._addedCustomData.push(h)}),c.forEach(h=>{let p=r.find(b=>ce.contains(b.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,zgt);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?Xc(e,p,o,t,s,!1,ow[h]):(Zg(e,e._tileLoadQueueHigh,p,t),++n.tilesWaitingForChildren)}e._lastSelectionFrameNumber=t.frameNumber}function Zg(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function sw(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function LZe(){this.southwest=new sw,this.southeast=new sw,this.northwest=new sw,this.northeast=new sw}LZe.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 T$=new Array(31);for(let e=0;e<T$.length;++e)T$[e]=new LZe;function Kgt(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=Qgt(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:di.NONE,b=e.tileProvider;if(s||i){let f=di.originalResult(p)===di.RENDERED,y=di.originalResult(p)===di.CULLED||p===di.NONE,_=n.state===Da.DONE,S=f||y||_;if(S||l(b.canRenderWithoutLosingDetail)&&(S=b.canRenderWithoutLosingDetail(n)),S){s&&Zg(e,e._tileLoadQueueMedium,n,t),m3(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===di.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=di.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&Zg(e,e._tileLoadQueueHigh,n,t)}if(b.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){m3(e,n),Zg(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===di.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=di.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=di.REFINED;let y=e._tilesToRender.length,_=e._tileLoadQueueLow.length,S=e._tileLoadQueueMedium.length,A=e._tileLoadQueueHigh.length,Z=e._tileToUpdateHeights.length;if(Jgt(e,a,c,d,u,t,i,o),y!==e._tilesToRender.length){let V=o.allAreRenderable,E=o.anyWereRenderedLastFrame,G=o.notYetRenderableCount,v=!1;if(!V&&!E){let I=e._tilesToRender;for(let N=y;N<I.length;++N){let g=I[N];for(;g!==void 0&&g._lastSelectionResult!==di.KICKED&&g!==n;)g._lastSelectionResult=di.kick(g._lastSelectionResult),g=g.parent}e._tilesToRender.length=y,e._tileToUpdateHeights.length=Z,m3(e,n),n._lastSelectionResult=di.RENDERED;let X=p===di.RENDERED;!X&&G>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=_,e._tileLoadQueueMedium.length=S,e._tileLoadQueueHigh.length=A,Zg(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,v=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=X,X||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!v&&Zg(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=di.RENDERED,m3(e,n),Zg(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===di.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function Jgt(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,h=T$[t.level],p=h.southwest,b=h.southeast,f=h.northwest,y=h.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Xc(e,t,d,r,u,s,p),Xc(e,n,d,r,u,s,b),Xc(e,i,d,r,u,s,f),Xc(e,o,d,r,u,s,y)):(Xc(e,i,d,r,u,s,f),Xc(e,t,d,r,u,s,p),Xc(e,o,d,r,u,s,y),Xc(e,n,d,r,u,s,b)):c.latitude<t.rectangle.north?(Xc(e,n,d,r,u,s,b),Xc(e,t,d,r,u,s,p),Xc(e,o,d,r,u,s,y),Xc(e,i,d,r,u,s,f)):(Xc(e,o,d,r,u,s,y),Xc(e,i,d,r,u,s,f),Xc(e,n,d,r,u,s,b),Xc(e,t,d,r,u,s,p)),h.combine(a)}function jgt(e,t){let n=t.rectangle;return l(e._cameraPositionCartographic)&&ce.contains(n,e._cameraPositionCartographic)||l(e._cameraReferenceFrameOriginCartographic)&&ce.contains(n,e._cameraReferenceFrameOriginCartographic)}function Xc(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==Ur.NONE)return Kgt(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,jgt(e,t)){(!l(t.data)||!l(t.data.vertexArray))&&Zg(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:di.NONE;c!==di.CULLED_BUT_NEEDED&&c!==di.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=di.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(Zg(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=di.CULLED):t._lastSelectionResult=di.CULLED;t._lastSelectionResultFrame=i.frameNumber}function Qgt(e,t,n){if(t.mode===re.SCENE2D||t.camera.frustum instanceof fn||t.camera.frustum instanceof ls)return qgt(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-=W.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function qgt(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!==re.SCENE2D&&(h-=W.fog(n._distance,t.fog.density)*t.fog.sse),h/=t.pixelRatio,h}function m3(e,t){e._tilesToRender.push(t),e._tilesRenderedThisFrame.add(t)}function $gt(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=Ui()+e._loadQueueTimeSlice,s=e._tileProvider,a=x$(e,t,s,r,n,!1);a=x$(e,t,s,r,i,a),x$(e,t,s,r,o,a)}function eyt(e,t){return e._loadPriority-t._loadPriority}function x$(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(eyt);for(let s=0,a=o.length;s<a&&(Ui()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var Y1=new xn,h3=new be,wx=new m,tyt=[];function nyt(e,t){if(!l(e.tileProvider.tilingScheme))return;let n=tyt;n.length=0;let i=e._tileToUpdateHeights,o=Ui(),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 _=h._lastSelectionResultFrame===e._lastSelectionFrameNumber?h._lastSelectionResult:di.NONE;(_===di.RENDERED||_===di.CULLED_BUT_NEEDED)&&n.push(h),h.clearPositionCache(),i.shift();continue}let p=h.customData;l(h._customDataIterator)||(h._customDataIterator=p.values());let b=h._customDataIterator,f=!1,y;for(;!(y=b.next()).done;){let _=y.value,S=h.data.terrainData,A=l(S)&&S.wasCreatedByUpsampling();if(h.level>_.level&&!A){let Z,V=h.getPositionCacheEntry(_.positionCartographic,e.maximumScreenSpaceError);if(l(V))Z=V;else{if(l(_.positionOnEllipsoidSurface)||(_.positionOnEllipsoidSurface=m.fromRadians(_.positionCartographic.longitude,_.positionCartographic.latitude,0,d)),a===re.SCENE3D){let E=d.geodeticSurfaceNormal(_.positionOnEllipsoidSurface,Y1.direction),G=d.getSurfaceNormalIntersectionWithZAxis(_.positionOnEllipsoidSurface,11500,Y1.origin);if(!l(G)){let v=0;l(h.data.tileBoundingRegion)&&(v=h.data.tileBoundingRegion.minimumHeight);let I=Math.min(v,-11500),X=m.multiplyByScalar(E,Math.abs(I)+1,wx);m.subtract(_.positionOnEllipsoidSurface,X,Y1.origin)}}else be.clone(_.positionCartographic,h3),h3.height=-11500,c.project(h3,wx),m.fromElements(wx.z,wx.x,wx.y,wx),m.clone(wx,Y1.origin),m.clone(m.UNIT_X,Y1.direction);Z=h.data.pick(Y1,a,c,!1,wx),l(Z)&&h.setPositionCacheEntry(_.positionCartographic,e.maximumScreenSpaceError,Z)}if(l(Z)){if(l(_.callback)){let E=d.cartesianToCartographic(Z,h3);_.callback(E)}_.level=h.level}}if(Ui()>=s){f=!0;break}}if(f){h._customDataIterator=b;break}else h._customDataIterator=void 0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function iyt(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 aw=ch;function Nf(e){e=e??ie.default;let t=new r0({ellipsoid:e}),n=new fS;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new QY,this._material=void 0,this._surface=new aw({tileProvider:new $Y({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new _e,this._undergroundColor=U.clone(U.BLACK),this._undergroundColorAlphaByDistance=new Dt(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new ew,S$(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new We({url:qt("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=W.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=W.PI*e.minimumRadius,this.nightFadeOutDistance=W.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*W.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=Ln.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(Nf.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=ce.clone(ce.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)&&S$(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,S$(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=Dt.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function S$(e){let t=[],n=l(e._material)&&(l(e._material.shaderSource.match(/slope/))||l(e._material.shaderSource.match("normalEC"))),i=[Jh,W1];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(NY),e._surfaceShaderSet.baseVertexShaderSource=new Oe({sources:[Jh,W1,YY],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new Oe({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function oyt(e){return function(t,n){let i=de.distanceSquaredTo(t.pickBoundingSphere,e),o=de.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var ryt=[],syt={start:0,stop:0};Nf.prototype.pickWorldCoordinates=function(e,t,n,i){n=n??!0;let o=t.mode,r=t.mapProjection,s=ryt;s.length=0;for(let d of this._surface._tilesRenderedThisFrame){let u=d.data;if(!l(u))continue;let h=u.pickBoundingSphere;if(o!==re.SCENE3D)u.pickBoundingSphere=h=de.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))de.clone(u.tileBoundingRegion.boundingSphere,h);else continue;let p=mi.raySphere(e,h,syt);l(p)&&s.push(u)}s.sort(oyt(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 ayt=new be;Nf.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),l(n)&&t.mode!==re.SCENE3D){n=m.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,ayt);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var cyt=new m,WZe=new m,lyt=new be,dyt=new xn;function _$(e,t){return l(e)&&ce.contains(e.rectangle,t)?e:void 0}Nf.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],!ce.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;l(n);)n=_$(n._southwestChild,e)||_$(n._southeastChild,e)||_$(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,cyt),d=dyt,u=a.geodeticSurfaceNormal(c,d.direction),h=a.getSurfaceNormalIntersectionWithZAxis(c,11500,d.origin);if(!l(h)){let b;l(n.data.tileBoundingRegion)&&(b=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(b??0,-11500),y=m.multiplyByScalar(u,Math.abs(f)+1,WZe);m.subtract(c,y,d.origin)}let p=n.data.pick(d,re.SCENE3D,s,!1,WZe);if(l(p))return a.cartesianToCartographic(p,lyt).height};Nf.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};Nf.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===re.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))};Nf.prototype.render=function(e){this.show&&(l(this._material)&&this._material.update(e.context),this._surface.render(e))};Nf.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};Nf.prototype.isDestroyed=function(){return!1};Nf.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 cw=Nf;var zKi=x(T(),1);var aKi=x(T(),1);var qHi=x(T(),1);var BHi=x(T(),1);function uyt(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var lw=uyt;var BZe={},myt=32.184,hyt=2451545,vZe=-.0529921,FZe=-.1059842,IZe=13.0120009,PZe=13.3407154,XZe=.9856003,NZe=26.4057084,YZe=13.064993,wZe=.3287146,MZe=1.7484877,kZe=-.1589763,UZe=.0036096,DZe=.1643573,OZe=12.9590088,A$=new Q;BZe.ComputeMoon=function(e,t){l(e)||(e=Q.now()),A$=Q.addSeconds(e,myt,A$);let n=Q.totalDays(A$)-hyt,i=n/li.DAYS_PER_JULIAN_CENTURY,o=(125.045+vZe*n)*W.RADIANS_PER_DEGREE,r=(250.089+FZe*n)*W.RADIANS_PER_DEGREE,s=(260.008+IZe*n)*W.RADIANS_PER_DEGREE,a=(176.625+PZe*n)*W.RADIANS_PER_DEGREE,c=(357.529+XZe*n)*W.RADIANS_PER_DEGREE,d=(311.589+NZe*n)*W.RADIANS_PER_DEGREE,u=(134.963+YZe*n)*W.RADIANS_PER_DEGREE,h=(276.617+wZe*n)*W.RADIANS_PER_DEGREE,p=(34.226+MZe*n)*W.RADIANS_PER_DEGREE,b=(15.134+kZe*n)*W.RADIANS_PER_DEGREE,f=(119.743+UZe*n)*W.RADIANS_PER_DEGREE,y=(239.961+DZe*n)*W.RADIANS_PER_DEGREE,_=(25.053+OZe*n)*W.RADIANS_PER_DEGREE,S=Math.sin(o),A=Math.sin(r),Z=Math.sin(s),V=Math.sin(a),E=Math.sin(c),G=Math.sin(d),v=Math.sin(u),I=Math.sin(h),X=Math.sin(p),N=Math.sin(b),g=Math.sin(f),C=Math.sin(y),R=Math.sin(_),L=Math.cos(o),P=Math.cos(r),Y=Math.cos(s),O=Math.cos(a),k=Math.cos(c),D=Math.cos(d),w=Math.cos(u),z=Math.cos(h),J=Math.cos(p),ee=Math.cos(b),H=Math.cos(f),te=Math.cos(y),$=Math.cos(_),pe=(269.9949+.0031*i-3.8787*S-.1204*A+.07*Z-.0172*V+.0072*G-.0052*N+.0043*R)*W.RADIANS_PER_DEGREE,xe=(66.5392+.013*i+1.5419*L+.0239*P-.0278*Y+.0068*O-.0029*D+9e-4*w+8e-4*ee-9e-4*$)*W.RADIANS_PER_DEGREE,le=(38.3213+13.17635815*n-14e-13*n*n+3.561*S+.1208*A-.0642*Z+.0158*V+.0252*E-.0066*G-.0047*v-.0046*I+.0028*X+.0052*N+.004*g+.0019*C-.0044*R)*W.RADIANS_PER_DEGREE,Te=(13.17635815-14e-13*(2*n)+3.561*L*vZe+.1208*P*FZe-.0642*Y*IZe+.0158*O*PZe+.0252*k*XZe-.0066*D*NZe-.0047*w*YZe-.0046*z*wZe+.0028*J*MZe+.0052*ee*kZe+.004*H*UZe+.0019*te*DZe-.0044*$*OZe)/86400*W.RADIANS_PER_DEGREE;return l(t)||(t=new lw),t.rightAscension=pe,t.declination=xe,t.rotation=le,t.rotationRate=Te,t};var dw=BZe;function zZe(e){(!l(e)||typeof e!="function")&&(e=dw.ComputeMoon),this._computeFunction=e}var fyt=new m,pyt=new m,byt=new m;function gyt(e,t,n){let i=fyt;i.x=Math.cos(e+W.PI_OVER_TWO),i.y=Math.sin(e+W.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=byt;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=m.cross(r,i,pyt);return l(n)||(n=new q),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 yyt=new q,xyt=new Pe;zZe.prototype.evaluate=function(e,t){l(e)||(e=Q.now());let n=this._computeFunction(e),i=gyt(n.rightAscension,n.declination,t),o=W.zeroToTwoPi(n.rotation),r=Pe.fromAxisAngle(m.UNIT_Z,o,xyt),s=q.fromQuaternion(Pe.conjugate(r,r),yyt);return q.multiply(s,i,i)};var uw=zZe;var WKi=x(T(),1);var Z$={position:0};function f3(e){e=e??B.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 de,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??ji.fromType(ji.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 et({owner:e._owner??this}),this._pickCommand=new et({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 Tyt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(l(t))return t;let n=Zc.createGeometry(Zc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:Xe.POSITION_ONLY}));return t=Bn.fromGeometry({context:e,geometry:n,attributeLocations:Z$,bufferUsage:Fe.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}f3.prototype.update=function(e){if(!this.show||e.mode!==re.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=Ue.fromCache({cull:{enabled:!0,face:wi.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?rn.ALPHA_BLEND:void 0})),l(this._va)||(this._va=Tyt(t));let o=!1,r=this.radii;if(!m.equals(this._radii,r)){m.clone(r,this._radii);let y=this._oneOverEllipsoidRadiiSquared;y.x=1/(r.x*r.x),y.y=1/(r.y*r.y),y.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),de.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 Oe({sources:[L1]}),p=new Oe({sources:[this.material.shaderSource,G1]}),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=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:Z$}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=Gt(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let b=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Le.TRANSLUCENT:Le.OPAQUE,b.push(u)),f.pick){let y=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 Oe({sources:[L1]}),p=new Oe({sources:[this.material.shaderSource,G1],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=$t.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:Z$}),y.vertexArray=this._va,y.renderState=this._rs,y.shaderProgram=this._pickSP,y.uniformMap=Gt(Gt(this._uniforms,this._pickUniforms),this.material._uniforms),y.executeInClosestFrustum=n),y.boundingVolume=this._boundingSphere,y.modelMatrix=this._computedModelMatrix,y.pass=n?Le.TRANSLUCENT:Le.OPAQUE,b.push(y)}};f3.prototype.isDestroyed=function(){return!1};f3.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 mw=f3;function hw(e){e=e??B.EMPTY_OBJECT;let t=e.textureUrl;l(t)||(t=qt("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 mw({radii:this.ellipsoid.radii,material:ji.fromType(ji.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new uw}Object.defineProperties(hw.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var p3=new q,_yt=new q,Syt=new m,b3=[];hw.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(pt.computeIcrfToFixedMatrix(n,p3))||pt.computeTemeToPseudoFixedMatrix(n,p3);let i=this._axes.evaluate(n,_yt);q.transpose(i,i),q.multiply(p3,i,i);let o=oy.computeMoonPositionInEarthInertialFrame(n,Syt);q.multiplyByVector(p3,o,o),F.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=b3,b3.length=0,t.update(e),e.commandList=r,b3.length===1?b3[0]:void 0};hw.prototype.isDestroyed=function(){return!1};hw.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),he(this)};var fw=hw;var _do=x(T(),1);var KKi=x(T(),1);var C$=[],V$=[];function Ayt(e,t,n,i,o,r){let s=o-i+1,a=r-o,c=C$,d=V$,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 b=c[u],f=d[h];u<s&&(h>=a||t(b,f,n)<=0)?(e[p]=b,++u):h<a&&(e[p]=f,++h)}}function R$(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);R$(e,t,n,i,r),R$(e,t,n,r+1,o),Ayt(e,t,n,i,r,o)}function Zyt(e,t,n){let i=e.length,o=Math.ceil(i*.5);C$.length=o,V$.length=o,R$(e,t,n,0,i-1),C$.length=0,V$.length=0}var s0=Zyt;var iJi=x(T(),1);function ml(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 g3=new m;Object.defineProperties(ml.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,g3),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,g3);let a=o*o*n;s=m.add(e,m.multiplyByScalar(r,a,g3),g3)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});ml.fromBoundingSphere=function(e,t,n){return l(n)?(m.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new ml(e,t)};var KZe=new m;ml.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=m.subtract(e,this._occluderPosition,KZe),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 Cyt=new m;ml.prototype.isBoundingSphereVisible=function(e){let t=m.clone(e.center,Cyt),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,KZe),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 Vyt=new m;ml.prototype.computeVisibility=function(e){let t=m.clone(e.center),n=e.radius;if(n>this._occluderRadius)return Ur.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Vyt),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?Ur.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?Ur.FULL:Ur.PARTIAL):(i=m.subtract(t,this._horizonPlanePosition,i),m.dot(i,this._horizonPlaneNormal)>-n?Ur.PARTIAL:Ur.FULL))}}return Ur.NONE};var y3=new m;ml.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,y3),y3),c=-m.dot(a,o),d=ml._anyRotationVector(o,a,c),u=ml._horizonToPlaneNormalDotProduct(e,a,c,d,n[0]);if(!u)return;let h;for(let b=1;b<s;++b){if(h=ml._horizonToPlaneNormalDotProduct(e,a,c,d,n[b]),!h)return;h<u&&(u=h)}if(u<.0017453283658983088)return;let p=r/u;return m.add(o,m.multiplyByScalar(a,p,y3),y3)};var Ryt=[];ml.computeOccludeePointFromRectangle=function(e,t){t=t??ie.default;let n=ce.subsample(e,t,0,Ryt),i=de.fromPoints(n),o=m.ZERO;if(!m.equals(o,i.center))return ml.computeOccludeePoint(new de(o,t.minimumRadius),i.center,n)};var Eyt=new m;ml._anyRotationVector=function(e,t,n){let i=m.abs(t,Eyt),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 Gyt=new m;ml._rotationVector=function(e,t,n,i,o){let r=m.subtract(i,e,Gyt);if(r=m.normalize(r,r),m.dot(t,r)<.9999999847691291){let s=m.cross(t,r,r);if(m.magnitude(s)>W.EPSILON13)return m.normalize(s,new m)}return o};var E$=new m,Lyt=new m,x3=new m,HZe=new m;ml._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=m.clone(o,E$),s=m.clone(e.center,Lyt),a=e.radius,c=m.subtract(s,r,x3),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),_=p*f*p;c=m.normalize(c,c);let S=m.add(r,m.multiplyByScalar(c,_,HZe),HZe),A=Math.sqrt(h-_*_),Z=this._rotationVector(s,t,n,r,i),V=m.fromElements(Z.x*Z.x*c.x+(Z.x*Z.y-Z.z)*c.y+(Z.x*Z.z+Z.y)*c.z,(Z.x*Z.y+Z.z)*c.x+Z.y*Z.y*c.y+(Z.y*Z.z-Z.x)*c.z,(Z.x*Z.z-Z.y)*c.x+(Z.y*Z.z+Z.x)*c.y+Z.z*Z.z*c.z,E$);V=m.normalize(V,V);let E=m.multiplyByScalar(V,A,E$);Z=m.normalize(m.subtract(m.add(S,E,x3),s,x3),x3);let G=m.dot(t,Z);Z=m.normalize(m.subtract(m.subtract(S,E,Z),s,Z),Z);let v=m.dot(t,Z);return G<v?G:v};var pw=ml;var yJi=x(T(),1);var mJi=x(T(),1);function a0(e){e=e??B.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 js,this._perspectiveMatrix=new F,this._infinitePerspective=new F}function G$(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(a0.prototype,{projectionMatrix:{get:function(){return G$(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return G$(this),this._infinitePerspective}}});var Wyt=new m,vyt=new m,Fyt=new m,Iyt=new m;a0.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,Wyt),h=vyt;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=Fyt;m.multiplyByScalar(t,d,p),m.add(e,p,p);let b=Iyt;m.multiplyByScalar(u,a,b),m.add(h,b,b),m.subtract(b,e,b),m.normalize(b,b),m.cross(b,n,b),m.normalize(b,b);let f=i[0];return l(f)||(f=i[0]=new se),f.x=b.x,f.y=b.y,f.z=b.z,f.w=-m.dot(b,e),m.multiplyByScalar(u,s,b),m.add(h,b,b),m.subtract(b,e,b),m.cross(n,b,b),m.normalize(b,b),f=i[1],l(f)||(f=i[1]=new se),f.x=b.x,f.y=b.y,f.z=b.z,f.w=-m.dot(b,e),m.multiplyByScalar(n,r,b),m.add(h,b,b),m.subtract(b,e,b),m.cross(u,b,b),m.normalize(b,b),f=i[2],l(f)||(f=i[2]=new se),f.x=b.x,f.y=b.y,f.z=b.z,f.w=-m.dot(b,e),m.multiplyByScalar(n,o,b),m.add(h,b,b),m.subtract(b,e,b),m.cross(b,u,b),m.normalize(b,b),f=i[3],l(f)||(f=i[3]=new se),f.x=b.x,f.y=b.y,f.z=b.z,f.w=-m.dot(b,e),f=i[4],l(f)||(f=i[4]=new se),f.x=t.x,f.y=t.y,f.z=t.z,f.w=-m.dot(t,h),m.negate(t,b),f=i[5],l(f)||(f=i[5]=new se),f.x=b.x,f.y=b.y,f.z=b.z,f.w=-m.dot(b,p),this._cullingVolume};a0.prototype.getPixelDimensions=function(e,t,n,i,o){G$(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};a0.prototype.clone=function(e){return l(e)||(e=new a0),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};a0.prototype.equals=function(e){return l(e)&&e instanceof a0&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};a0.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof a0&&W.equalsEpsilon(this.right,e.right,t,n)&&W.equalsEpsilon(this.left,e.left,t,n)&&W.equalsEpsilon(this.top,e.top,t,n)&&W.equalsEpsilon(this.bottom,e.bottom,t,n)&&W.equalsEpsilon(this.near,e.near,t,n)&&W.equalsEpsilon(this.far,e.far,t,n)};var rd=a0;function Od(e){e=e??B.EMPTY_OBJECT,this._offCenterFrustum=new rd,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}Od.packedLength=6;Od.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};Od.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Od),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 Yf(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(Od.prototype,{projectionMatrix:{get:function(){return Yf(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return Yf(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return Yf(this),this._fovy}},sseDenominator:{get:function(){return Yf(this),this._sseDenominator}},offCenterFrustum:{get:function(){return Yf(this),this._offCenterFrustum}}});Od.prototype.computeCullingVolume=function(e,t,n){return Yf(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};Od.prototype.getPixelDimensions=function(e,t,n,i,o){return Yf(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};Od.prototype.clone=function(e){return l(e)||(e=new Od),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};Od.prototype.equals=function(e){return!l(e)||!(e instanceof Od)?!1:(Yf(this),Yf(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};Od.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof Od)?!1:(Yf(this),Yf(e),W.equalsEpsilon(this.fov,e.fov,t,n)&&W.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var zi=Od;var LJi=x(T(),1);function bw(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(bw.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function Pyt(e,t,n){let i=t.createViewportQuadCommand(VY,{framebuffer:n,renderState:Ue.fromCache({viewport:new Qe(0,0,256,256)})});e._drawCommand=i}bw.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:De.UNSIGNED_BYTE,sampler:zt.NEAREST});this._colorTexture=n;let i=new cs({context:t,colorTextures:[n],destroyAttachments:!1});Pyt(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};bw.prototype.isDestroyed=function(){return!1};bw.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),he(this)};var gw=bw;var Tji=x(T(),1);var UJi=x(T(),1);var qZe={};function Xyt(e,t,n){let i,o,r;if(e instanceof zi){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 rd)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var Nyt=new m,JZe=new m;function $Ze(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 W.lerp(e,-W.PI_OVER_TWO,p)}let h=(u-r)/c;return W.lerp(-W.PI_OVER_TWO,t,1-h)}}return function(o){return W.lerp(e,t,o)}}function W$(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,Nyt),b=m.magnitude(m.multiplyByScalar(d,m.dot(p,d),JZe)),f=m.magnitude(m.multiplyByScalar(u,m.dot(p,u),JZe));r=Math.min(Xyt(h,b,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 W.lerp(n,i,a)}}function yw(e,t){return W.equalsEpsilon(e,W.TWO_PI,W.EPSILON11)&&(e=0),t>e+Math.PI?e+=W.TWO_PI:t<e-Math.PI&&(e-=W.TWO_PI),e}var eCe=new m;function Yyt(e,t,n,i,o,r,s,a){let c=e.camera,d=m.clone(c.position,eCe),u=c.pitch,h=yw(c.heading,i),p=yw(c.roll,r),b=W$(c,n,d.z,n.z,s),f=$Ze(u,o,b,a);function y(_){let S=_.time/t;c.setView({orientation:{heading:W.lerp(h,i,S),pitch:f(S),roll:W.lerp(p,r,S)}}),M.lerp(d,n,S,c.position),c.position.z=b(S)}return y}function wyt(e,t){e.longitude<t.longitude?e.longitude+=W.TWO_PI:t.longitude+=W.TWO_PI}function Myt(e,t){let n=e.longitude-t.longitude;n<-W.PI?e.longitude+=W.TWO_PI:n>W.PI&&(t.longitude+=W.TWO_PI)}var kyt=new be,Uyt=new be;function Dyt(e,t,n,i,o,r,s,a,c,d){let u=e.camera,p=e.mapProjection.ellipsoid,b=be.clone(u.positionCartographic,kyt),f=u.pitch,y=yw(u.heading,i),_=yw(u.roll,r),S=p.cartesianToCartographic(n,Uyt);b.longitude=W.zeroToTwoPi(b.longitude),S.longitude=W.zeroToTwoPi(S.longitude);let A=!1;if(l(a)){let G=W.zeroToTwoPi(a),v=Math.min(b.longitude,S.longitude),I=Math.max(b.longitude,S.longitude),X=G>=v&&G<=I;if(l(c)){let N=Math.abs(b.longitude-S.longitude),g=W.TWO_PI-N;(X?N:g)<(X?g:N)*c&&!X&&(A=!0)}else X||(A=!0)}A?wyt(b,S):Myt(b,S);let Z=W$(u,n,b.height,S.height,s),V=$Ze(f,o,Z,d);function E(){let G=b.longitude,v=S.longitude,I=b.latitude,X=S.latitude;return function(g){let C=g.time/t,R=m.fromRadians(W.lerp(G,v,C),W.lerp(I,X,C),Z(C),p);u.setView({destination:R,orientation:{heading:W.lerp(y,i,C),pitch:V(C),roll:W.lerp(_,r,C)}})}}return E()}function Oyt(e,t,n,i,o,r,s){let a=e.camera,c=m.clone(a.position,eCe),d=yw(a.heading,i),u=a.frustum.right-a.frustum.left,h=W$(a,n,u,n.z,s);function p(b){let f=b.time/t;a.setView({orientation:{heading:W.lerp(d,i,f)}}),M.lerp(c,n,f,a.position);let y=h(f),_=a.frustum,S=_.top/_.right,A=(y-(_.right-_.left))*.5;_.right+=A,_.left-=A,_.top=S*_.right,_.bottom=-_.top}return p}var jZe=new be,Byt=new m;function L$(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function QZe(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}qZe.createTween=function(e,t){t=t??B.EMPTY_OBJECT;let n=t.destination,i=e.mode;if(i===re.MORPHING)return L$();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!==re.SCENE3D&&(s.cartesianToCartographic(n,jZe),n=r.project(jZe,Byt));let p=e.camera,b=t.endTransform;l(b)&&p._setTransform(b);let f=t.duration;l(f)||(f=Math.ceil(m.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let y=t.heading??0,_=t.pitch??-W.PI_OVER_TWO,S=t.roll??0,A=e.screenSpaceCameraController;A.enableInputs=!1;let Z=QZe(A,t.complete),V=QZe(A,t.cancel),E=p.frustum,G=e.mode===re.SCENE2D;if(G=G&&M.equalsEpsilon(p.position,n,W.EPSILON6),G=G&&W.equalsEpsilon(Math.max(E.right-E.left,E.top-E.bottom),n.z,W.EPSILON6),G=G||e.mode!==re.SCENE2D&&m.equalsEpsilon(n,p.position,W.EPSILON10),G=G&&W.equalsEpsilon(W.negativePiToPi(y),W.negativePiToPi(p.heading),W.EPSILON10)&&W.equalsEpsilon(W.negativePiToPi(_),W.negativePiToPi(p.pitch),W.EPSILON10)&&W.equalsEpsilon(W.negativePiToPi(S),W.negativePiToPi(p.roll),W.EPSILON10),G)return L$(Z,V);let v=new Array(4);if(v[re.SCENE2D]=Oyt,v[re.SCENE3D]=Dyt,v[re.COLUMBUS_VIEW]=Yyt,f<=0)return L$(function(){v[i](e,1,n,y,_,S,a,c,d,u)({time:1}),typeof Z=="function"&&Z()},V);let I=v[i](e,f,n,y,_,S,a,c,d,u);if(!l(h)){let X=p.positionCartographic.height,N=i===re.SCENE3D?s.cartesianToCartographic(n).height:n.z;X>N&&X>11500?h=Zs.CUBIC_OUT:h=Zs.QUINTIC_IN_OUT}return{duration:f,easingFunction:h,startObject:{time:0},stopObject:{time:f},update:I,complete:Z,cancel:V}};var xw=qZe;var OJi=x(T(),1),zyt={ROTATE:0,INFINITE_SCROLL:1},sd=Object.freeze(zyt);function ln(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 be,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 zi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=W.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 _e,this._moveEnd=new _e,this._changed=new _e,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,cCe(this),this._mode=re.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new be(Math.PI,W.PI_OVER_TWO)),this._max2Dfrustum=void 0,TCe(this,ln.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=m.magnitude(this.position);n+=n*ln.DEFAULT_VIEW_FACTOR,m.normalize(this.position,this.position),m.multiplyByScalar(this.position,n,this.position)}ln.TRANSFORM_2D=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);ln.TRANSFORM_2D_INVERSE=F.inverseTransformation(ln.TRANSFORM_2D,new F);ln.DEFAULT_VIEW_RECTANGLE=ce.fromDegrees(-95,-20,-70,90);ln.DEFAULT_VIEW_FACTOR=.5;ln.DEFAULT_OFFSET=new th(0,-W.PI_OVER_FOUR,0);function cCe(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 Hyt(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=Ui()):e.timeSinceMoved=Math.max(Ui()-e._lastMovedTimestamp,0)/1e3}}ln.prototype.canPreloadFlight=function(){return l(this._currentFlight)&&this._mode!==re.SCENE2D};ln.prototype._updateCameraChanged=function(){let e=this;if(Hyt(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)%W.TWO_PI;i=i>W.PI?W.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)%W.TWO_PI;s=s>W.PI?W.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===re.SCENE2D){if(!l(e._changedFrustum)){e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,b=e._changedPosition,f=e.frustum,y=e._changedFrustum,_=p.x+f.left,S=p.x+f.right,A=b.x+y.left,Z=b.x+y.right,V=p.y+f.bottom,E=p.y+f.top,G=b.y+y.bottom,v=b.y+y.top,I=Math.max(_,A),X=Math.min(S,Z),N=Math.max(V,G),g=Math.min(E,v),C;if(I>=X||N>=E)C=1;else{let R=y;_<A&&S>Z&&V<G&&E>v&&(R=f),C=1-(X-I)*(g-N)/((R.right-R.left)*(R.top-R.bottom))}C>t&&(e._changed.raiseEvent(C),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=W.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 Kyt(e){pt.basisTo2D(e._projection,e._transform,e._actualTransform)}var Jyt=new be,jyt=new m,T3=new m,Qyt=new se,qyt=new se,$yt=new se,ext=new se,txt=new se;function nxt(e){let t=e._projection,n=t.ellipsoid,i=F.getColumn(e._transform,3,Qyt),o=n.cartesianToCartographic(i,Jyt),r=t.project(o,jyt),s=qyt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=se.clone(se.UNIT_X,txt),c=se.add(F.getColumn(e._transform,0,T3),i,T3);n.cartesianToCartographic(c,o),t.project(o,r);let d=$yt;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=ext;if(m.magnitudeSquared(d)>W.EPSILON10)m.cross(a,d,u);else{let h=se.add(F.getColumn(e._transform,1,T3),i,T3);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)<W.EPSILON10&&(se.clone(se.UNIT_Y,d),se.clone(se.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 v$=new m;function fl(e){let t=e._mode,n=!1,i=0;t===re.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===re.COLUMBUS_VIEW||e._mode===re.SCENE2D?F.equals(F.IDENTITY,e._transform)?F.clone(ln.TRANSFORM_2D,e._actualTransform):e._mode===re.COLUMBUS_VIEW?Kyt(e):nxt(e):F.clone(e._transform,e._actualTransform),F.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let b=e._actualTransform;if(r||p)if(e._positionWC=F.multiplyByPoint(b,o,e._positionWC),t===re.SCENE3D||t===re.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=v$;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===re.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||d||h){let f=m.dot(s,m.cross(c,u,v$));if(Math.abs(1-f)>W.EPSILON2){let y=1/m.magnitudeSquared(c),_=m.dot(c,s)*y,S=m.multiplyByScalar(s,_,v$);c=m.normalize(m.subtract(c,S,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(b,s,e._directionWC),m.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=F.multiplyByPointAsVector(b,c,e._upWC),m.normalize(e._upWC,e._upWC)),(h||p)&&(e._rightWC=F.multiplyByPointAsVector(b,u,e._rightWC),m.normalize(e._rightWC,e._rightWC)),(r||a||d||h||p)&&cCe(e)}function lCe(e,t){let n;return W.equalsEpsilon(Math.abs(e.z),1,W.EPSILON3)?n=Math.atan2(t.y,t.x)-W.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-W.PI_OVER_TWO,W.TWO_PI-W.zeroToTwoPi(n)}function dCe(e){return W.PI_OVER_TWO-W.acosClamped(e.z)}function uCe(e,t,n){let i=0;return W.equalsEpsilon(Math.abs(e.z),1,W.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=W.zeroToTwoPi(i+W.TWO_PI)),i}var A3=new F,Z3=new F;Object.defineProperties(ln.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return fl(this),this._invTransform}},viewMatrix:{get:function(){return fl(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return fl(this),this._invViewMatrix}},positionCartographic:{get:function(){return fl(this),this._positionCartographic}},positionWC:{get:function(){return fl(this),this._positionWC}},directionWC:{get:function(){return fl(this),this._directionWC}},upWC:{get:function(){return fl(this),this._upWC}},rightWC:{get:function(){return fl(this),this._rightWC}},heading:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,A3),n=pt.eastNorthUpToFixedFrame(this.positionWC,e,Z3);this._setTransform(n);let i=lCe(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,A3),n=pt.eastNorthUpToFixedFrame(this.positionWC,e,Z3);this._setTransform(n);let i=dCe(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,A3),n=pt.eastNorthUpToFixedFrame(this.positionWC,e,Z3);this._setTransform(n);let i=uCe(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}}});ln.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==re.MORPHING,t=this._mode===re.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===re.SCENE2D&&pCe(this,this.position)};var ixt=new m,oxt=new m,rxt=new m;ln.prototype._setTransform=function(e){let t=m.clone(this.positionWC,ixt),n=m.clone(this.upWC,oxt),i=m.clone(this.directionWC,rxt);F.clone(e,this._transform),this._transformChanged=!0,fl(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),fl(this)};var sxt=new M,axt=new xn,cxt=new m,lxt=new m;function mCe(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,axt);o=n.pickWorldCoordinates(a,t,!0,cxt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,lxt));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}ln.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof fn&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=mCe(this)))};var C3=new m,N$=new F,dxt=new F,Y$=new Pe,w$=new q,hCe=new be;function uxt(e,t,n){let i=F.clone(e.transform,N$),o=pt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,dxt);e._setTransform(o),m.clone(m.ZERO,e.position),n.heading=n.heading-W.PI_OVER_TWO;let r=Pe.fromHeadingPitchRoll(n,Y$),s=q.fromQuaternion(r,w$);q.getColumn(s,0,e.direction),q.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function mxt(e,t,n,i){let o=F.clone(e.transform,N$);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,hCe);t=a.project(c,C3)}m.clone(t,e.position)}n.heading=n.heading-W.PI_OVER_TWO;let r=Pe.fromHeadingPitchRoll(n,Y$),s=q.fromQuaternion(r,w$);q.getColumn(s,0,e.direction),q.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function hxt(e,t,n,i){let o=F.clone(e.transform,N$);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let c=e._projection,d=c.ellipsoid.cartesianToCartographic(t,hCe);t=c.project(d,C3)}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===sd.ROTATE){n.heading=n.heading-W.PI_OVER_TWO,n.pitch=-W.PI_OVER_TWO,n.roll=0;let r=Pe.fromHeadingPitchRoll(n,Y$),s=q.fromQuaternion(r,w$);q.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right)}e._setTransform(o)}var fxt=new m,pxt=new m,bxt=new m;function fCe(e,t,n,i){let o=m.clone(n.direction,fxt),r=m.clone(n.up,pxt);if(e._scene.mode===re.SCENE3D){let a=e._projection.ellipsoid,c=pt.eastNorthUpToFixedFrame(t,a,A3),d=F.inverseTransformation(c,Z3);F.multiplyByPointAsVector(d,o,o),F.multiplyByPointAsVector(d,r,r)}let s=m.cross(o,r,bxt);return i.heading=lCe(o,r),i.pitch=dCe(o),i.roll=uCe(o,r,s),i}var X$={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},w1=new Sc;ln.prototype.setView=function(e){e=e??B.EMPTY_OBJECT;let t=e.orientation??B.EMPTY_OBJECT,n=this._mode;if(n===re.MORPHING)return;l(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??m.clone(this.positionWC,C3);l(o)&&l(o.west)&&(o=this.getRectangleCameraCoordinates(o,C3),i=!1),l(t.direction)&&(t=fCe(this,o,t,X$.orientation)),w1.heading=t.heading??0,w1.pitch=t.pitch??-W.PI_OVER_TWO,w1.roll=t.roll??0,n===re.SCENE3D?uxt(this,o,w1):n===re.SCENE2D?hxt(this,o,w1,i):mxt(this,o,w1,i)};var gxt=new m;ln.prototype.flyHome=function(e){let t=this._mode;if(t===re.MORPHING&&this._scene.completeMorph(),t===re.SCENE2D)this.flyTo({destination:ln.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:F.IDENTITY});else if(t===re.SCENE3D){let n=this.getRectangleCameraCoordinates(ln.DEFAULT_VIEW_RECTANGLE),i=m.magnitude(n);i+=i*ln.DEFAULT_VIEW_FACTOR,m.normalize(n,n),m.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:F.IDENTITY})}else if(t===re.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,gxt).z),roll:0},endTransform:F.IDENTITY,convert:!1})}};ln.prototype.worldToCameraCoordinates=function(e,t){return l(t)||(t=new se),fl(this),F.multiplyByVector(this._actualInvTransform,e,t)};ln.prototype.worldToCameraCoordinatesPoint=function(e,t){return l(t)||(t=new m),fl(this),F.multiplyByPoint(this._actualInvTransform,e,t)};ln.prototype.worldToCameraCoordinatesVector=function(e,t){return l(t)||(t=new m),fl(this),F.multiplyByPointAsVector(this._actualInvTransform,e,t)};ln.prototype.cameraToWorldCoordinates=function(e,t){return l(t)||(t=new se),fl(this),F.multiplyByVector(this._actualTransform,e,t)};ln.prototype.cameraToWorldCoordinatesPoint=function(e,t){return l(t)||(t=new m),fl(this),F.multiplyByPoint(this._actualTransform,e,t)};ln.prototype.cameraToWorldCoordinatesVector=function(e,t){return l(t)||(t=new m),fl(this),F.multiplyByPointAsVector(this._actualTransform,e,t)};function pCe(e,t){let n=e._scene.mapMode2D===sd.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 tCe=new m;ln.prototype.move=function(e,t){let n=this.position;m.multiplyByScalar(e,t,tCe),m.add(n,tCe,n),this._mode===re.SCENE2D&&pCe(this,n),this._adjustOrthographicFrustum(!0)};ln.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===re.SCENE2D?V3(this,e):this.move(this.direction,e)};ln.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===re.SCENE2D?V3(this,-e):this.move(this.direction,-e)};ln.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};ln.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};ln.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};ln.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};ln.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.up,-e)};ln.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.up,e)};ln.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.right,-e)};ln.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.right,e)};var yxt=new Pe,xxt=new q;ln.prototype.look=function(e,t){let n=t??this.defaultLookAmount,i=Pe.fromAxisAngle(e,-n,yxt),o=q.fromQuaternion(i,xxt),r=this.direction,s=this.up,a=this.right;q.multiplyByVector(o,r,r),q.multiplyByVector(o,s,s),q.multiplyByVector(o,a,a)};ln.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};ln.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var Txt=new Pe,_xt=new q;ln.prototype.rotate=function(e,t){let n=t??this.defaultRotateAmount,i=Pe.fromAxisAngle(e,-n,Txt),o=q.fromQuaternion(i,_xt);q.multiplyByVector(o,this.position,this.position),q.multiplyByVector(o,this.direction,this.direction),q.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)};ln.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,bCe(this,e)};ln.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,bCe(this,-e)};var Sxt=new m,Axt=new m,Zxt=new m,nCe=new m;function bCe(e,t){let n=e.position;if(l(e.constrainedAxis)&&!m.equalsEpsilon(e.position,m.ZERO,W.EPSILON2)){let i=m.normalize(n,Sxt),o=m.equalsEpsilon(i,e.constrainedAxis,W.EPSILON2),r=m.equalsEpsilon(i,m.negate(e.constrainedAxis,nCe),W.EPSILON2);if(!o&&!r){let s=m.normalize(e.constrainedAxis,Axt),a=m.dot(i,s),c=W.acosClamped(a);t>0&&t>c&&(t=c-W.EPSILON4),a=m.dot(i,m.negate(s,nCe)),c=W.acosClamped(a),t<0&&-t>c&&(t=-c+W.EPSILON4);let d=m.cross(s,i,Zxt);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}ln.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,gCe(this,-e)};ln.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,gCe(this,e)};function gCe(e,t){l(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function V3(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===sd.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===sd.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 yCe(e,t){e.move(e.direction,t)}ln.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===re.SCENE2D?V3(this,e):yCe(this,e)};ln.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===re.SCENE2D?V3(this,-e):yCe(this,-e)};ln.prototype.getMagnitude=function(){if(this._mode===re.SCENE3D)return m.magnitude(this.position);if(this._mode===re.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===re.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var Cxt=new F;ln.prototype.lookAt=function(e,t){let i=this._scene.ellipsoid??ie.default,o=pt.eastNorthUpToFixedFrame(e,i,Cxt);this.lookAtTransform(o,t)};var Vxt=new m,Rxt=new Pe,Ext=new Pe,Gxt=new q;function xCe(e,t,n){t=W.clamp(t,-W.PI_OVER_TWO,W.PI_OVER_TWO),e=W.zeroToTwoPi(e)-W.PI_OVER_TWO;let i=Pe.fromAxisAngle(m.UNIT_Y,-t,Rxt),o=Pe.fromAxisAngle(m.UNIT_Z,-e,Ext),r=Pe.multiply(o,i,o),s=q.fromQuaternion(r,Gxt),a=m.clone(m.UNIT_X,Vxt);return q.multiplyByVector(s,a,a),m.negate(a,a),m.multiplyByScalar(a,n,a),a}ln.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!l(t))return;let n;if(l(t.heading)?n=xCe(t.heading,t.pitch,t.range):n=t,this._mode===re.SCENE2D){M.clone(M.ZERO,this.position),m.negate(n,this.up),this.up.z=0,m.magnitudeSquared(this.up)<W.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)<W.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 Tw=new be,Lxt=new be,Wxt=new m,vxt=new m,Fxt=new m,Ixt=new m,Pxt=new m,Xxt=new m,Nxt=new m,F$=new m,Yxt={direction:new m,right:new m,up:new m},iCe;function hl(e,t,n,i){return Math.abs(m.dot(t,n))/i-m.dot(e,n)}function TCe(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:Yxt,{north:s,south:a,west:c}=t,{east:d}=t;c>d&&(d+=W.TWO_PI);let u=(c+d)*.5,h;if(a<-W.PI_OVER_TWO+W.RADIANS_PER_DEGREE&&s>W.PI_OVER_TWO-W.RADIANS_PER_DEGREE)h=0;else{let X=Tw;X.longitude=u,X.latitude=s,X.height=0;let N=Lxt;N.longitude=u,N.latitude=a,N.height=0;let g=iCe;(!l(g)||g.ellipsoid!==o)&&(iCe=g=new O0(void 0,void 0,o)),g.setEndPoints(X,N),h=g.interpolateUsingFraction(.5,Tw).latitude}let p=Tw;p.longitude=u,p.latitude=h,p.height=0;let b=o.cartographicToCartesian(p,Nxt),f=Tw;f.longitude=d,f.latitude=s;let y=o.cartographicToCartesian(f,Wxt);f.longitude=c;let _=o.cartographicToCartesian(f,Fxt);f.longitude=u;let S=o.cartographicToCartesian(f,Pxt);f.latitude=a;let A=o.cartographicToCartesian(f,Xxt);f.longitude=d;let Z=o.cartographicToCartesian(f,Ixt);f.longitude=c;let V=o.cartographicToCartesian(f,vxt);m.subtract(_,b,_),m.subtract(Z,b,Z),m.subtract(y,b,y),m.subtract(V,b,V),m.subtract(S,b,S),m.subtract(A,b,A);let E=o.geodeticSurfaceNormal(b,r.direction);m.negate(E,E);let G=m.cross(E,m.UNIT_Z,r.right);m.normalize(G,G);let v=m.cross(G,E,r.up),I;if(e.frustum instanceof fn){let X=Math.max(m.distance(y,_),m.distance(Z,V)),N=Math.max(m.distance(y,Z),m.distance(_,V)),g,C,R=e.frustum._offCenterFrustum,L=R.right/R.top,P=N*L;X>P?(g=X,C=g/L):(C=N,g=P),I=Math.max(g,C)}else{let X=Math.tan(e.frustum.fovy*.5),N=e.frustum.aspectRatio*X;if(I=Math.max(hl(E,v,_,X),hl(E,v,Z,X),hl(E,v,y,X),hl(E,v,V,X),hl(E,v,S,X),hl(E,v,A,X),hl(E,G,_,N),hl(E,G,Z,N),hl(E,G,y,N),hl(E,G,V,N),hl(E,G,S,N),hl(E,G,A,N)),a<0&&s>0){let g=Tw;g.longitude=c,g.latitude=0,g.height=0;let C=o.cartographicToCartesian(g,F$);m.subtract(C,b,C),I=Math.max(I,hl(E,v,C,X),hl(E,G,C,N)),g.longitude=d,C=o.cartographicToCartesian(g,F$),m.subtract(C,b,C),I=Math.max(I,hl(E,v,C,X),hl(E,G,C,N))}}return m.add(b,m.multiplyByScalar(E,-I,F$),n)}var wxt=new be,Mxt=new m,kxt=new m;function Uxt(e,t,n){let i=e._projection;t.west>t.east&&(t=ce.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=wxt;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,Mxt);F.multiplyByPoint(o,a,a),F.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,kxt);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 Dxt=new be,Oxt=new m,Bxt=new m;function zxt(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===sd.INFINITE_SCROLL?o+=W.TWO_PI:(t=ce.MAX_VALUE,o=t.east));let r=Dxt;r.longitude=o,r.latitude=t.north;let s=i.project(r,Oxt);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,Bxt),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,b=d*p;return c>b?(u=c,h=u/p):(h=d,u=b),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}ln.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(l(t)||(t=new m),n===re.SCENE3D)return TCe(this,e,t);if(n===re.COLUMBUS_VIEW)return Uxt(this,e,t);if(n===re.SCENE2D)return zxt(this,e,t)};var Hxt=new xn;function Kxt(e,t,n,i){n=n??ie.default;let o=e.getPickRay(t,Hxt),r=mi.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return xn.getPoint(o,s,i)}var Jxt=new xn;function jxt(e,t,n,i){let r=e.getPickRay(t,Jxt).origin;r=m.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-W.PI_OVER_TWO||s.latitude>W.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var Qxt=new xn;function qxt(e,t,n,i){let o=e.getPickRay(t,Qxt),r=-o.origin.x/o.direction.x;xn.getPoint(o,r,i);let s=n.unproject(new m(i.y,i.z,0));if(!(s.latitude<-W.PI_OVER_TWO||s.latitude>W.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}ln.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===re.SCENE3D)n=Kxt(this,e,t,n);else if(this._mode===re.SCENE2D)n=jxt(this,e,this._projection,n);else if(this._mode===re.COLUMBUS_VIEW)n=qxt(this,e,this._projection,n);else return;return n}};var $xt=new m,eTt=new m,tTt=new m;function nTt(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,$xt);m.add(h,p,p);let b=m.multiplyByScalar(e.rightWC,d*c*a,eTt),f=m.multiplyByScalar(e.upWC,u*c*s,tTt),y=m.add(p,b,n.direction);return m.add(y,f,y),m.subtract(y,h,y),m.normalize(y,y),n}var _3=new m;function iTt(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,_3),m.add(_3,u,u),m.multiplyByScalar(e.upWC,d,_3),m.add(_3,u,u),m.clone(e.directionWC,n.direction),e._mode===re.SCENE2D&&e._scene.mapMode2D===sd.INFINITE_SCROLL){let h=e._maxCoord.x;u.y=W.mod(u.y+h,2*h)-h}return n}ln.prototype.getPickRay=function(e,t){l(t)||(t=new xn);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)?nTt(this,e,t):iTt(this,e,t)};var oTt=new m,rTt=new m;ln.prototype.distanceToBoundingSphere=function(e){let t=m.subtract(this.positionWC,e.center,oTt),n=m.multiplyByScalar(this.directionWC,m.dot(t,this.directionWC),rTt);return Math.max(0,m.magnitude(n)-e.radius)};var sTt=new M;ln.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,sTt);return Math.max(o.x,o.y)};function aTt(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:Zs.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var cTt=new m,oCe=new m,lTt=new m,dTt=new m;function uTt(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(m.UNIT_X,cTt),r=-m.dot(o,n)/m.dot(o,i),s=m.add(n,m.multiplyByScalar(i,r,oCe),oCe);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,lTt);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,d=m.magnitude(m.subtract(n,s,dTt)),u=c*d,h=a*d,p=e._maxCoord.x,b=e._maxCoord.y,f=Math.max(u-p,p),y=Math.max(h-b,b);if(n.z<-f||n.z>f||n.y<-y||n.y>y){let _=s.y<-f||s.y>f,S=s.z<-y||s.z>y;if(_||S)return aTt(e,n,s,f,y,t)}}ln.prototype.createCorrectPositionTween=function(e){if(this._mode===re.COLUMBUS_VIEW)return uTt(this,e)};var mTt=new m,Ba={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};ln.prototype.cancelFlight=function(){l(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};ln.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=Ba.destination,e.orientation.heading=Ba.heading,e.orientation.pitch=Ba.pitch,e.orientation.roll=Ba.roll,this.setView(e),l(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};ln.prototype.flyTo=function(e){e=e??B.EMPTY_OBJECT;let t=e.destination;if(this._mode===re.MORPHING)return;this.cancelFlight();let i=t instanceof ce;i&&(t=this.getRectangleCameraCoordinates(t,mTt));let o=e.orientation??B.EMPTY_OBJECT;if(l(o.direction)&&(o=fCe(this,t,o,X$.orientation)),l(e.duration)&&e.duration<=0){let u=X$;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;Ba.destination=t,Ba.heading=o.heading,Ba.pitch=o.pitch,Ba.roll=o.roll,Ba.duration=e.duration,Ba.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),l(e.complete)&&e.complete()},Ba.cancel=e.cancel,Ba.endTransform=e.endTransform,Ba.convert=i?!1:e.convert,Ba.maximumHeight=e.maximumHeight,Ba.pitchAdjustHeight=e.pitchAdjustHeight,Ba.flyOverLongitude=e.flyOverLongitude,Ba.flyOverLongitudeWeight=e.flyOverLongitudeWeight,Ba.easingFunction=e.easingFunction;let a=this._scene,c=xw.createTween(a,Ba);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!==re.SCENE2D&&(l(d)||(d=ln.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function hTt(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function fTt(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 pTt=100;function _Ce(e,t,n){n=th.clone(l(n)?n:ln.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=pTt:e.frustum instanceof fn||e._mode===re.SCENE2D?n.range=fTt(e,s):n.range=hTt(e,s),n.range=W.clamp(n.range,i,o)}return n}ln.prototype.viewBoundingSphere=function(e,t){t=_Ce(this,e,t),this.lookAt(e.center,t)};var bTt=new F,gTt=new m,yTt=new m,xTt=new m,TTt=new m,_Tt=new se,STt=new Pe,ATt=new q;ln.prototype.flyToBoundingSphere=function(e,t){t=t??B.EMPTY_OBJECT;let n=this._mode===re.SCENE2D||this._mode===re.COLUMBUS_VIEW;this._setTransform(F.IDENTITY);let i=_Ce(this,e,t.offset),o;n?o=m.multiplyByScalar(m.UNIT_Z,i.range,gTt):o=xCe(i.heading,i.pitch,i.range);let s=this._scene.ellipsoid??ie.default,a=pt.eastNorthUpToFixedFrame(e.center,s,bTt);F.multiplyByPoint(a,o,o);let c,d;if(!n){if(c=m.subtract(e.center,o,yTt),m.normalize(c,c),d=F.multiplyByPointAsVector(a,m.UNIT_Z,xTt),1-Math.abs(m.dot(c,d))<W.EPSILON6){let h=Pe.fromAxisAngle(c,i.heading,STt),p=q.fromQuaternion(h,ATt);m.fromCartesian4(F.getColumn(a,1,_Tt),d),q.multiplyByVector(p,d,d)}let u=m.cross(c,d,TTt);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 rCe=new m,sCe=new m,I$=new m,aCe=new m,_w=[new m,new m,new m,new m];function ZTt(e,t){let n=t.radii,i=e.positionWC,o=m.multiplyComponents(t.oneOverRadii,i,rCe),r=m.magnitude(o),s=m.normalize(o,sCe),a,c;m.equalsEpsilon(s,m.UNIT_Z,W.EPSILON10)?(a=new m(0,1,0),c=new m(0,0,1)):(a=m.normalize(m.cross(m.UNIT_Z,s,I$),I$),c=m.normalize(m.cross(s,a,aCe),aCe));let d=Math.sqrt(m.magnitudeSquared(o)-1),u=m.multiplyByScalar(s,1/r,rCe),h=d/r,p=m.multiplyByScalar(a,h,sCe),b=m.multiplyByScalar(c,h,I$),f=m.add(u,b,_w[0]);m.subtract(f,p,f),m.multiplyComponents(n,f,f);let y=m.subtract(u,b,_w[1]);m.subtract(y,p,y),m.multiplyComponents(n,y,y);let _=m.subtract(u,b,_w[2]);m.add(_,p,_),m.multiplyComponents(n,_,_);let S=m.add(u,b,_w[3]);return m.add(S,p,S),m.multiplyComponents(n,S,S),_w}var P$=new M,CTt=new m,Mx=[new be,new be,new be,new be];function S3(e,t,n,i,o,r){P$.x=e,P$.y=t;let s=i.pickEllipsoid(P$,o,CTt);return l(s)?(Mx[n]=o.cartesianToCartographic(s,Mx[n]),1):(Mx[n]=o.cartesianToCartographic(r[n],Mx[n]),0)}ln.prototype.computeViewRectangle=function(e,t){e=e??ie.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new de(m.ZERO,e.maximumRadius);if(n.computeVisibility(i)===Jt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,d=ZTt(this,e);if(c+=S3(0,0,0,this,e,d),c+=S3(0,a,1,this,e,d),c+=S3(s,a,2,this,e,d),c+=S3(s,0,3,this,e,d),c<2)return ce.MAX_VALUE;t=ce.fromCartographicArray(Mx,t);let u=0,h=Mx[3].longitude;for(let p=0;p<4;++p){let b=Mx[p].longitude,f=Math.abs(b-h);f>W.PI?u+=W.TWO_PI-f:u+=f,h=b}return W.equalsEpsilon(Math.abs(u),W.TWO_PI,W.EPSILON9)&&(t.west=-W.PI,t.east=W.PI,Mx[0].latitude>=0?t.north=W.PI_OVER_TWO:t.south=-W.PI_OVER_TWO),t};ln.prototype.switchToPerspectiveFrustum=function(){if(this._mode===re.SCENE2D||this.frustum instanceof zi)return;let e=this._scene;this.frustum=new zi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=W.toRadians(60)};ln.prototype.switchToOrthographicFrustum=function(){if(this._mode===re.SCENE2D||this.frustum instanceof fn)return;let e=mCe(this),t=this._scene;this.frustum=new fn,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};ln.clone=function(e,t){return l(t)||(t=new ln(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 Vo=ln;var Sji=x(T(),1);function VTt(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var lh=VTt;var Gji=x(T(),1);var VCe=x($d(),1),SCe=576,RTt=100,Sw="#ffffff",R3="#48b";function RCe(e,t){this.credit=e,this.count=t??1}function ETt(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(yt.equals(o,t))return!0}return!1}function GTt(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;yt.equals(n,t)||(l(t)&&e._cesiumCreditContainer.removeChild(t.element),l(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var ECe="cesium-credit-delimiter";function ACe(e){let t=document.createElement("span");return t.textContent=e,t.className=ECe,t}function ZCe(e,t){if(l(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function CCe(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(ACe(n));else{let u=o[d];u.className!==ECe&&e.replaceChild(ACe(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(ZCe(c,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(ZCe(c,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function LTt(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<SCe?(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>=SCe&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function WTt(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: ${Sw}; position: relative; min-height: ${RTt}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: ${Sw}; } .cesium-credit-lightbox > ul > li a:hover { color: ${R3}; } .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: ${Sw}; } .cesium-credit-lightbox-close:hover { color: ${R3}; } .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: ${Sw}; } .cesium-credit-expand-link:hover { color: ${R3}; } .cesium-credit-text { color: ${Sw}; } .cesium-credit-delimiter { padding: 0 5px; } .cesium-credit-textContainer *, .cesium-credit-logoContainer * { display: inline; } .cesium-credit-textContainer a:hover { color: ${R3} } .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 Dr(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="×",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),WTt(e);let b=yt.clone(Dr.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=b,this._previousCesiumCredit=void 0,this._currentCesiumCredit=b,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Xt,lightboxCredits:new Xt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function GCe(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 RCe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}Dr.prototype.addCreditToNextFrame=function(e){if(e.isIon()){l(this._defaultCredit)||(this._defaultCredit=yt.clone(LCe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,GCe(this,t,e)};Dr.prototype.addStaticCredit=function(e){let t=this._staticCredits;ETt(t,e)||t.push(e)};Dr.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};Dr.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};Dr.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};Dr.prototype.update=function(){this._expanded&<t(this)};Dr.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()&&yt.equals(Dr.cesiumCredit,this._cesiumCredit)||GCe(this,s,r,Number.MAX_VALUE)}yt.equals(Dr.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=yt.clone(Dr.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};Dr.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;CCe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",CCe(this._creditList,t,void 0,"li"),GTt(this)};Dr.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)};Dr.prototype.isDestroyed=function(){return!1};Dr._cesiumCredit=void 0;Dr._cesiumCreditInitialized=!1;var E3;function LCe(){if(!l(E3)){let e=qt("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new VCe.default(e).path()),E3=new yt(`<a href="proxy.php?url=https%3A%2F%2Fcesium.com%2F" target="_blank"><img src="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Be%7D" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return Dr._cesiumCreditInitialized||(Dr._cesiumCredit=E3,Dr._cesiumCreditInitialized=!0),E3}Object.defineProperties(Dr,{cesiumCredit:{get:function(){return LCe(),Dr._cesiumCredit},set:function(e){Dr._cesiumCredit=e,Dr._cesiumCreditInitialized=!0}}});Dr.CreditDisplayElement=RCe;var Aw=Dr;var C4i=x(T(),1);var zji=x(T(),1);var G3=0,vTt=1;function nA(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e.vertexFormat??Xe.DEFAULT,r=e._drawNearPlane??!0,s,a;t instanceof zi?(s=G3,a=zi.packedLength):t instanceof fn&&(s=vTt,a=fn.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Pe.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+m.packedLength+Pe.packedLength+Xe.packedLength}nA.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===G3?(zi.pack(o,t,n),n+=zi.packedLength):(fn.pack(o,t,n),n+=fn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Pe.pack(e._orientation,t,n),n+=Pe.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n]=e._drawNearPlane?1:0,t};var FTt=new zi,ITt=new fn,PTt=new Pe,XTt=new m,NTt=new Xe;nA.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===G3?(o=zi.unpack(e,t,FTt),t+=zi.packedLength):(o=fn.unpack(e,t,ITt),t+=fn.packedLength);let r=m.unpack(e,t,XTt);t+=m.packedLength;let s=Pe.unpack(e,t,PTt);t+=Pe.packedLength;let a=Xe.unpack(e,t,NTt);t+=Xe.packedLength;let c=e[t]===1;if(!l(n))return new nA({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=Pe.clone(s,n._orientation),n._vertexFormat=Xe.clone(a,n._vertexFormat),n._drawNearPlane=c,n};function M1(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 YTt=new q,wTt=new F,M$=new F,WCe=new m,vCe=new m,FCe=new m,MTt=new m,kTt=new m,UTt=new m,kx=new Array(3),Zw=new Array(4);Zw[0]=new se(-1,-1,1,1);Zw[1]=new se(1,-1,1,1);Zw[2]=new se(1,1,1,1);Zw[3]=new se(-1,1,1,1);var ICe=new Array(4);for(let e=0;e<4;++e)ICe[e]=new se;nA._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let c=q.fromQuaternion(t,YTt),d=r??WCe,u=s??vCe,h=a??FCe;d=q.getColumn(c,0,d),u=q.getColumn(c,1,u),h=q.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,wTt),b,f,y=i.projectionMatrix;if(n===G3){let _=F.multiply(y,p,M$);f=F.inverse(_,M$)}else b=F.inverseTransformation(p,M$);l(f)?(kx[0]=i.near,kx[1]=i.far):(kx[0]=0,kx[1]=i.near,kx[2]=i.far);for(let _=0;_<2;++_)for(let S=0;S<4;++S){let A=se.clone(Zw[S],ICe[S]);if(l(f)){A=F.multiplyByVector(f,A,A);let Z=1/A.w;m.multiplyByScalar(A,Z,A),m.subtract(A,e,A),m.normalize(A,A);let V=m.dot(h,A);m.multiplyByScalar(A,kx[_]/V,A),m.add(A,e,A)}else{let Z=i.offCenterFrustum;l(Z)&&(i=Z);let V=kx[_],E=kx[_+1];A.x=(A.x*(i.right-i.left)+i.left+i.right)*.5,A.y=(A.y*(i.top-i.bottom)+i.bottom+i.top)*.5,A.z=(A.z*(V-E)-V-E)*.5,A.w=1,F.multiplyByVector(b,A,A)}o[12*_+S*3]=A.x,o[12*_+S*3+1]=A.y,o[12*_+S*3+2]=A.z}};nA.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);nA._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 yn({position:new Ie({componentDatatype:K.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,b=l(s.tangent)?new Float32Array(12*a):void 0,f=l(s.bitangent)?new Float32Array(12*a):void 0,y=l(s.st)?new Float32Array(8*a):void 0,_=WCe,S=vCe,A=FCe,Z=m.negate(_,MTt),V=m.negate(S,kTt),E=m.negate(A,UTt);d=0,r&&(M1(d,p,b,f,y,E,_,S),d+=12),M1(d,p,b,f,y,A,Z,S),d+=12,M1(d,p,b,f,y,Z,E,S),d+=12,M1(d,p,b,f,y,V,E,Z),d+=12,M1(d,p,b,f,y,_,A,S),d+=12,M1(d,p,b,f,y,S,A,Z),l(p)&&(u.normal=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:p})),l(b)&&(u.tangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:b})),l(f)&&(u.bitangent=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:f})),l(y)&&(u.st=new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:2,values:y}))}let h=new Uint16Array(6*a);for(let p=0;p<a;++p){let b=p*6,f=p*4;h[b]=f,h[b+1]=f+1,h[b+2]=f+2,h[b+3]=f,h[b+4]=f+2,h[b+5]=f+3}return new gt({attributes:u,indices:h,primitiveType:ve.TRIANGLES,boundingSphere:de.fromVertices(c)})};var iA=nA;var s4i=x(T(),1);var k$=0,DTt=1;function Cw(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e._drawNearPlane??!0,r,s;t instanceof zi?(r=k$,s=zi.packedLength):t instanceof fn&&(r=DTt,s=fn.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Pe.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+m.packedLength+Pe.packedLength}Cw.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===k$?(zi.pack(o,t,n),n+=zi.packedLength):(fn.pack(o,t,n),n+=fn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Pe.pack(e._orientation,t,n),n+=Pe.packedLength,t[n]=e._drawNearPlane?1:0,t};var OTt=new zi,BTt=new fn,zTt=new Pe,HTt=new m;Cw.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===k$?(o=zi.unpack(e,t,OTt),t+=zi.packedLength):(o=fn.unpack(e,t,BTt),t+=fn.packedLength);let r=m.unpack(e,t,HTt);t+=m.packedLength;let s=Pe.unpack(e,t,zTt);t+=Pe.packedLength;let a=e[t]===1;if(!l(n))return new Cw({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=Pe.clone(s,n._orientation),n._drawNearPlane=a,n};Cw.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(24);iA._computeNearFarPlanes(i,o,t,n,s);let a=new yn({position:new Ie({componentDatatype:K.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 gt({attributes:a,indices:h,primitiveType:ve.LINES,boundingSphere:de.fromVertices(s)})};var Vw=Cw;function L3(e){e=e??B.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 KTt=new m,JTt=new q,jTt=new Pe,QTt=new zi,qTt=new rd,$Tt=new fn,e_t=new ls,t_t=new U,n_t=[1,1e5];L3.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 zi?a=QTt:s instanceof rd?a=qTt:s instanceof fn?a=$Tt:a=e_t,a=s.clone(a);let c,d=this._frustumSplits;!l(d)||d.length<=1?(d=n_t,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,b=r.rightWC;b=m.negate(b,KTt);let f=JTt;q.setColumn(f,0,b,f),q.setColumn(f,1,p,f),q.setColumn(f,2,h,f);let y=Pe.fromRotationMatrix(f,jTt);for(t.length=n.length=c,i=0;i<c;++i)a.near=d[i],a.far=d[i+1],t[i]=new Pn({geometryInstances:new Ft({geometry:new iA({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Qt.fromColor(U.fromAlpha(this._color,.1,t_t))},id:this.id,pickPrimitive:this}),appearance:new bn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new Pn({geometryInstances:new Ft({geometry:new Vw({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Qt.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};L3.prototype.isDestroyed=function(){return!1};L3.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 c0=L3;var H4i=x(T(),1);function Ew(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 Rw=dn.supportsTypedArrays()?new Float32Array(12):[],PCe=new m,XCe=new m,U$=new m,NCe=new m,W3=new m;function i_t(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof fn)o=m.ZERO,r=i.rightWC,s=i.upWC;else{let h=i.positionWC,p=m.multiplyComponents(e.oneOverRadii,h,PCe),b=m.normalize(p,XCe),f=m.normalize(m.cross(m.UNIT_Z,p,U$),U$),y=m.normalize(m.cross(b,f,NCe),NCe),_=m.magnitude(p),S=Math.sqrt(_*_-1);o=m.multiplyByScalar(b,1/_,PCe);let A=S/_;r=m.multiplyByScalar(f,A,XCe),s=m.multiplyByScalar(y,A,U$)}let a=m.add(o,s,W3);m.subtract(a,r,a),m.multiplyComponents(n,a,a),m.pack(a,Rw,0);let c=m.subtract(o,s,W3);m.subtract(c,r,c),m.multiplyComponents(n,c,c),m.pack(c,Rw,3);let d=m.add(o,s,W3);m.add(d,r,d),m.multiplyComponents(n,d,d),m.pack(d,Rw,6);let u=m.subtract(o,s,W3);return m.add(u,r,u),m.multiplyComponents(n,u,u),m.pack(u,Rw,9),Rw}Ew.prototype.update=function(e){if(this._mode=e.mode,e.mode!==re.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=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new et({renderState:this._rs,boundingVolume:new de(m.ZERO,i.maximumRadius),pass:Le.OPAQUE,owner:this})),!l(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new Oe({sources:[PY]}),a=new Oe({sources:[IY]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=$t.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=i_t(i,e);if(l(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new gt({attributes:{position:new Ie({componentDatatype:K.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:ve.TRIANGLES});this._va=Bn.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Fe.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};Ew.prototype.execute=function(e,t){this._mode===re.SCENE3D&&this._command.execute(e,t)};Ew.prototype.isDestroyed=function(){return!1};Ew.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var Gw=Ew;var nQi=x(T(),1);function U1(){}var o_t=/\bgl_FragDepth\b/,r_t=/\bdiscard\b/;function s_t(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(o_t.test(r[a])||r_t.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 Oe({sources:[a]})}else if(!o&&s){let a=`void main() { out_FragColor = vec4(1.0); czm_writeLogDepth(); } `;i=new Oe({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function a_t(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(l(i))return i;let o=Ue.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Ue.fromCache(o);return n[t.id]=r,r}U1.createDepthOnlyDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.depthOnlyCommand?.shaderProgram,r=i.depthOnlyCommand?.renderState;return i.depthOnlyCommand=et.shallowClone(t,i.depthOnlyCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=s_t(n,t.shaderProgram),i.depthOnlyCommand.renderState=a_t(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var c_t=/\s+czm_writeLogDepth\(/,l_t=/\s+czm_vertexLogDepth\(/;function d_t(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(l_t.test(c[u])){a=!0;break}if(!a){for(let h=0;h<c.length;++h)c[h]=Oe.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)c_t.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]=Oe.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})}U1.createLogDepthCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=et.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=d_t(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function u_t(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(l(i))return i;let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,c=r.some(b=>b.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 b=0;b<u;++b)h[b]=Oe.replaceMain(r[b],"czm_non_pick_main");h[u]=d;let p=new Oe({sources:h,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function YCe(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(l(i))return i;let o=Ue.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Ue.fromCache(o);return n[t.id]=r,r}U1.createPickDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.pickCommand?.shaderProgram,r=i.pickCommand?.renderState;return i.pickCommand=et.shallowClone(t,i.pickCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=u_t(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=YCe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function k1(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 m_t(e){return e.isArray?e.arrayLength:xt.getComponentCount(e.type)}function wCe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function MCe(e,t){let n=Nt.getMaximum(t);return`(${e}) / float(${n})`}function h_t(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=wCe(n,i,o)}return e.normalized||(n=MCe(n,e.componentType)),n}function f_t(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=wCe(o,r,s)}return e.normalized||(o=MCe(o,e.componentType)),o}function p_t(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=m_t(d);if(p===1)h[0]=h_t(d,c);else{let _=["x","y","z","w"];for(let S=0;S<p;S++)h[S]=f_t(d,c,_[S])}let b=t.fragmentShaderSource.defines.slice();b.push(gu.METADATA_PICKING_ENABLED),k1(b,gu.METADATA_PICKING_VALUE_TYPE,u),k1(b,gu.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),k1(b,gu.METADATA_PICKING_VALUE_COMPONENT_X,h[0]),k1(b,gu.METADATA_PICKING_VALUE_COMPONENT_Y,h[1]),k1(b,gu.METADATA_PICKING_VALUE_COMPONENT_Z,h[2]),k1(b,gu.METADATA_PICKING_VALUE_COMPONENT_W,h[3]);let f=new Oe({sources:t.fragmentShaderSource.sources,defines:b});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:f,attributeLocations:t._attributeLocations})}U1.createPickMetadataDerivedCommand=function(e,t,n,i){return l(i)||(i={}),i.pickMetadataCommand=et.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=p_t(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=YCe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function b_t(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})}U1.createHdrCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=et.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=b_t(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var l0=U1;var lQi=x(T(),1);function v3(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=W.toRadians(o),t._beta=W.toRadians(i.beta),t._gamma=W.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var g_t=new Pe,kCe=new Pe,y_t=new q;function x_t(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Pe.fromAxisAngle(o,n,kCe),c=Pe.fromAxisAngle(r,i,g_t),d=Pe.multiply(c,a,c),u=Pe.fromAxisAngle(s,t,kCe);Pe.multiply(u,d,d);let h=q.fromQuaternion(d,y_t);q.multiplyByVector(h,r,r),q.multiplyByVector(h,s,s),q.multiplyByVector(h,o,o)}v3.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;x_t(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};v3.prototype.isDestroyed=function(){return!1};v3.prototype.destroy=function(){return this._removeListener(),he(this)};var Lw=v3;var pQi=x(T(),1);function D$(){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(D$.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){this._heightFalloff=e}}});var T_t=new m;D$.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!==re.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,W.EPSILON4),-Math.max(this._heightFalloff,0)),s=m.normalize(n.positionWC,T_t),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 Ww=D$;var yQi=x(T(),1);function __t(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=re.SCENE3D,this.morphTime=re.getMorphTime(re.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 vw=__t;var WQi=x(T(),1);var bc={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},oA=bc.DERIVED_COMMANDS_MAXIMUM_LENGTH,QCe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function rA(){this._frontFaceAlphaByDistance=new Dt(0,1,0,1),this._backFaceAlphaByDistance=new Dt(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=ce.clone(ce.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(oA),this._derivedBlendCommandTypes=new Array(oA),this._derivedPickCommandTypes=new Array(oA),this._derivedCommandTypesToUpdate=new Array(oA),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(rA.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}}});rA.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=UCe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=UCe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=DCe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=DCe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=C_t(this,e,t),this._sunVisibleThroughGlobe=S_t(this,e),this._environmentVisible=A_t(this,e),this._useDepthPlane=Z_t(this,e),this._numberOfTextureUniforms=V_t(this),this._rectangle=ce.clone(t.translucency.rectangle,this._rectangle),R_t(this,e)};function UCe(e,t,n,i){return e?l(n)?(Dt.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 DCe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function S_t(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function A_t(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function Z_t(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function C_t(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==re.SCENE2D&&t.context.depthTexture}function V_t(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function R_t(e,t){e._derivedCommandsLength=O$(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=O$(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=O$(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<oA;++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=U_t())}function O$(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?bc.PICK_FRONT_FACE:d?bc.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:bc.TRANSLUCENT_FRONT_FACE,h=i?bc.PICK_BACK_FACE:d?bc.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:bc.TRANSLUCENT_BACK_FACE;return t.mode===re.SCENE2D?(o[r++]=bc.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=bc.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=h):(o[r++]=h,o[r++]=u)):c?(n||(o[r++]=bc.DEPTH_ONLY_BACK_FACE),o[r++]=bc.OPAQUE_FRONT_FACE,o[r++]=h):(n||(o[r++]=bc.DEPTH_ONLY_FRONT_FACE),o[r++]=bc.OPAQUE_BACK_FACE,o[r++]=u),r)}function dh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function OCe(e,t){return e.indexOf(t)>-1}function E_t(e,t){dh(e.defines,"TRANSLUCENT"),dh(t.defines,"TRANSLUCENT")}function G_t(e,t){dh(e.defines,"GROUND_ATMOSPHERE"),dh(t.defines,"GROUND_ATMOSPHERE"),dh(e.defines,"FOG"),dh(t.defines,"FOG"),dh(e.defines,"TRANSLUCENT"),dh(t.defines,"TRANSLUCENT")}function B$(e,t){if(OCe(t.defines,"TILE_LIMIT_RECTANGLE")||OCe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main() { out_FragColor = vec4(1.0); } `;t.sources=[n]}function z$(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=Oe.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 qCe(e,t){z$(e,t),dh(e.defines,"GROUND_ATMOSPHERE"),dh(t.defines,"GROUND_ATMOSPHERE"),dh(e.defines,"FOG"),dh(t.defines,"FOG")}function L_t(e,t){z$(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function W_t(e,t){qCe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function BCe(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 v_t(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 F_t(e){e.cull.face=wi.BACK,e.cull.enabled=!0}function I_t(e){e.cull.face=wi.FRONT,e.cull.enabled=!0}function P_t(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function X_t(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function N_t(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function zCe(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=rn.ALPHA_BLEND}function HCe(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=rn.ALPHA_BLEND}function Y_t(e){e.cull.face=wi.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function w_t(e){e.cull.face=wi.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function M_t(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=Ue.getState(e);i(s),r=Ue.fromCache(s),o[e.id]=r}return r}function D1(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function k_t(e,t,n,i,o){return l(o)?!i&&l(n)?n:Gt(t,o(e),!1):t}function wf(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function U_t(){return[new wf({pass:Le.GLOBE,pickOnly:!1,getShaderProgramFunction:E_t,getRenderStateFunction:F_t,getUniformMapFunction:void 0}),new wf({pass:Le.GLOBE,pickOnly:!1,getShaderProgramFunction:G_t,getRenderStateFunction:I_t,getUniformMapFunction:void 0}),new wf({pass:Le.GLOBE,pickOnly:!1,getShaderProgramFunction:B$,getRenderStateFunction:P_t,getUniformMapFunction:void 0}),new wf({pass:Le.GLOBE,pickOnly:!1,getShaderProgramFunction:B$,getRenderStateFunction:X_t,getUniformMapFunction:void 0}),new wf({pass:Le.GLOBE,pickOnly:!1,getShaderProgramFunction:B$,getRenderStateFunction:N_t,getUniformMapFunction:void 0}),new wf({pass:Le.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:z$,getRenderStateFunction:zCe,getUniformMapFunction:D1}),new wf({pass:Le.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:qCe,getRenderStateFunction:HCe,getUniformMapFunction:D1}),new wf({pass:Le.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:L_t,getRenderStateFunction:zCe,getUniformMapFunction:D1}),new wf({pass:Le.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:W_t,getRenderStateFunction:HCe,getUniformMapFunction:D1}),new wf({pass:Le.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:BCe,getRenderStateFunction:Y_t,getUniformMapFunction:D1}),new wf({pass:Le.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:BCe,getRenderStateFunction:w_t,getUniformMapFunction:D1})]}var KCe=new Array(oA),JCe=new Array(oA);rA.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)JCe[o]=this._derivedCommandPacks[n[o]],KCe[o]=QCe[n[o]];D_t(this,e,i,n,KCe,JCe,t)}};function D_t(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,b=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,y=a.renderStateId!==t.renderState.id;b&&(a.uniformMapDirtyFrame=d),f&&(a.shaderProgramDirtyFrame=d),y&&(a.renderStateDirtyFrame=d),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let _=0;_<n;++_){let S=r[_],A=i[_],Z=o[_],V=a[Z],E,G,v;l(V)?(E=V.uniformMap,G=V.shaderProgram,v=V.renderState):(E=void 0,G=void 0,v=void 0),V=et.shallowClone(t,V),a[Z]=V;let I=V.derivedCommands.uniformMapDirtyFrame??0,X=V.derivedCommands.shaderProgramDirtyFrame??0,N=V.derivedCommands.renderStateDirtyFrame??0,g=b||I<u,C=f||X<h,R=y||N<p;g&&(V.derivedCommands.uniformMapDirtyFrame=d),C&&(V.derivedCommands.shaderProgramDirtyFrame=d),R&&(V.derivedCommands.renderStateDirtyFrame=d),V.derivedCommands.type=A,V.pass=S.pass,V.pickOnly=S.pickOnly,V.uniformMap=k_t(e,t.uniformMap,E,g,S.getUniformMapFunction),V.shaderProgram=v_t(s.context,t.shaderProgram,G,C,S.getShaderProgramFunction,Z),V.renderState=M_t(t.renderState,v,R,S.getRenderStateFunction,S.renderStateCache)}}}rA.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=QCe[o[a]];n.commandList.push(s[c])}};function $Ce(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 jCe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var O_t=[bc.OPAQUE_FRONT_FACE,bc.OPAQUE_BACK_FACE],B_t=[bc.DEPTH_ONLY_FRONT_FACE,bc.DEPTH_ONLY_BACK_FACE,bc.DEPTH_ONLY_FRONT_AND_BACK_FACE];rA.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Le.GLOBE],a=e.indices[Le.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),$Ce(s,a,t,i,o,O_t))};rA.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[Le.GLOBE],c=e.indices[Le.GLOBE],d=e.commands[Le.TERRAIN_CLASSIFICATION],u=e.indices[Le.TERRAIN_CLASSIFICATION];if(c===0||u===0)return;let h=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!h||!p)&&jCe(d,u,t,i,o),!h&&!p)return;this._globeTranslucencyFramebuffer=n;let b=s.globeDepthTexture,f=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,$Ce(a,c,t,i,o,B_t),r.depthTexture){let y=n.packDepth(r,o);s.globeDepthTexture=y}jCe(d,u,t,i,o),s.globeDepthTexture=b,o.framebuffer=f};var Fw=rA;var qQi=x(T(),1);var FQi=x(T(),1),Bd=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(colorTexture, v_textureCoordinates); } `;function d0(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new Ai({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new Ai({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 ui({color:new U(0,0,0,0),owner:this}),this._clearCommand=new ui({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(d0.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});d0.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var z_t={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ni.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ni.NEVER,reference:0,mask:Ht.CLASSIFICATION_MASK},blending:rn.ALPHA_BLEND},H_t={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ni.NOT_EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ni.NEVER,reference:0,mask:Ht.CLASSIFICATION_MASK},blending:rn.ALPHA_BLEND},K_t={depthMask:!0,depthTest:{enabled:!0},stencilTest:Ht.setCesium3DTileBit(),stencilMask:Ht.CESIUM_3D_TILE_MASK,blending:rn.ALPHA_BLEND},J_t=`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; } `,j_t=`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 } `;d0.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:De.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new iu({context:e,width:s,height:a,format:Zl.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=Ue.fromCache(z_t),this._rsClassified=Ue.fromCache(H_t),this._rsDefault=Ue.fromCache(K_t)),!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)?j_t:J_t,u=new Oe({defines:["UNCLASSIFIED"],sources:[d]}),h=new Oe({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(Bd,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};d0.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};d0.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))};d0.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)};d0.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};d0.prototype.isDestroyed=function(){return!1};d0.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 O1=d0;var i8i=x(T(),1);function F3(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(F3.prototype,{total:{get:function(){return this._total}}});function Ux(e){let t=new Array(Gc.NUMBER_OF_JOB_TYPES);t[Gc.TEXTURE]=new F3(l(e)?e[Gc.TEXTURE]:10),t[Gc.PROGRAM]=new F3(l(e)?e[Gc.PROGRAM]:10),t[Gc.BUFFER]=new F3(l(e)?e[Gc.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}Ux.getTimestamp=Ui;Object.defineProperties(Ux.prototype,{totalBudget:{get:function(){return this._totalBudget}}});Ux.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};Ux.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};Ux.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=Ux.getTimestamp();e.execute();let a=Ux.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var Iw=Ux;var l8i=x(T(),1);function I3(e){e=e??B.EMPTY_OBJECT;let t=Mn(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=Ui(),this._lastMsSampleTime=Ui(),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(I3.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});I3.prototype.update=function(e){let t=Ui(),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}};I3.prototype.destroy=function(){return he(this)};var Cg=I3;var Z$i=x(T(),1);var S8i=x(T(),1);var gc={};gc.decodeRawMetadataValue=function(e,t,n){switch(e){case Nt.INT8:return t.getInt8(n);case Nt.UINT8:return t.getUint8(n);case Nt.INT16:return t.getInt16(n,!0);case Nt.UINT16:return t.getUint16(n,!0);case Nt.INT32:return t.getInt32(n,!0);case Nt.UINT32:return t.getUint32(n,!0);case Nt.INT64:return t.getBigInt64(n,!0);case Nt.UINT64:return t.getBigUint64(n,!0);case Nt.FLOAT32:return t.getFloat32(n,!0);case Nt.FLOAT64:return t.getFloat64(n,!0)}throw new ue(`Invalid component type: ${e}`)};gc.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=gc.decodeRawMetadataValue(i,t,n);return e.normalized?Nt.normalize(o,i):o};gc.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=Nt.getSizeInBytes(i),r=e.type,s=xt.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,b=gc.decodeRawMetadataValueComponent(e,t,p);u[h]=b}return u}let c=n*a;return gc.decodeRawMetadataValueComponent(e,t,c)};gc.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=gc.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return gc.decodeRawMetadataValueElement(e,n,0)};gc.convertToObjectType=function(e,t){if(!l(t)||e===xt.SCALAR||e===xt.STRING||e===xt.BOOLEAN||e===xt.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case xt.VEC2:return M.unpack(n,0,new M);case xt.VEC3:return m.unpack(n,0,new m);case xt.VEC4:return se.unpack(n,0,new se);case xt.MAT2:return Ji.unpack(n,0,new Ji);case xt.MAT3:return q.unpack(n,0,new q);case xt.MAT4:return F.unpack(n,0,new F)}throw new ue(`Invalid metadata object type: ${e}`)};gc.convertFromObjectType=function(e,t){if(!l(t)||e===xt.SCALAR||e===xt.STRING||e===xt.BOOLEAN||e===xt.ENUM)return t;switch(e){case xt.VEC2:return M.pack(t,Array(2));case xt.VEC3:return m.pack(t,Array(3));case xt.VEC4:return se.pack(t,Array(4));case xt.MAT2:return Ji.pack(t,Array(4));case xt.MAT3:return q.pack(t,Array(9));case xt.MAT4:return F.pack(t,Array(16))}throw new ue(`Invalid metadata object type: ${e}`)};gc.decodeMetadataValues=function(e,t,n){let i=gc.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=gc.convertFromObjectType(e.type,t.offset),s=gc.convertFromObjectType(e.type,t.scale);i=gp.valueTransformInPlace(i,r,s,Nt.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let c=i[a],d=gc.convertToObjectType(e.type,c);s[a]=d}return s}return gc.convertToObjectType(e.type,i)};var Pw=Object.freeze(gc);var G8i=x(T(),1);function sA(){this._framebuffer=new Ai,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(sA.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Q_t(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function q_t(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:Ue.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}sA.prototype.update=function(e,t){Q_t(this,e,t),q_t(this,e,t)};var $_t=new se,eSt=new se(1,1/255,1/65025,1/16581375);sA.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=se.unpack(i,0,$_t);return se.divideByScalar(o,255,o),se.dot(o,eSt)};sA.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};sA.prototype.isDestroyed=function(){return!1};sA.prototype.destroy=function(){return this._framebuffer.destroy(),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=l(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),he(this)};var Xw=sA;var Qqi=x(T(),1);var Y8i=x(T(),1);function Dx(e){e=e||{},this._framebufferManager=new Ai({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 ui({color:new U(0,0,0,0),depth:1,stencil:0,owner:this})}Object.defineProperties(Dx.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}}});Dx.prototype.update=function(e,t,n,i,o){let r=t.width,s=t.height,a=n?e.halfFloatingPointTexture?De.HALF_FLOAT:De.FLOAT:De.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};Dx.prototype.clear=function(e,t,n){this.getClearCommand(n).execute(e,t)};Dx.prototype.getClearCommand=function(e){return this._clearCommand.framebuffer=this._framebuffer,l(e)&&U.clone(e,this._clearCommand.color),this._clearCommand};Dx.prototype.getFramebuffer=function(e,t,n,i){return this.update(e,t,!1,n,i),this._framebuffer};Dx.prototype.isDestroyed=function(){return!1};Dx.prototype.destroy=function(){return this._framebufferManager=this._framebufferManager&&this._framebufferManager.destroy(),this._clearCommand=void 0,he(this)};var Nw=Dx;var k8i=x(T(),1);function tSt(e,t){this.near=e??0,this.far=t??0;let n=Le.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 Yw=tSt;var r7i=x(T(),1);var D8i=x(T(),1),Ox=`uniform highp sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r); } `;function u0(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new Ai({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new Ai({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new Ai,this._tempCopyDepthFramebuffer=new Ai,this._updateDepthFramebuffer=new Ai({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 Qe,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(u0.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 eVe(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!Qe.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,Qe.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Qe.clone(o.viewport,e._scissorRectangle),a=!0),(!l(e._rs)||!Qe.equals(r,e._rs.viewport)||a)&&(e._rs=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:rn.ALPHA_BLEND}),e._rsUpdate=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ni.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ni.NEVER,reference:Ht.CESIUM_3D_TILE_MASK,mask:Ht.CESIUM_3D_TILE_MASK}})),l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(Ox,{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(Bd,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,l(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(Ox,{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(Bd,{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 ui({color:new U(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}u0.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,c=o?e.halfFloatingPointTexture?De.HALF_FLOAT:De.FLOAT:De.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),eVe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};u0.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};u0.prototype.executeCopyDepth=function(e,t){l(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};u0.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),eVe(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};u0.prototype.executeCopyColor=function(e,t){l(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};u0.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;l(i)&&(U.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};u0.prototype.isDestroyed=function(){return!1};u0.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 ww=u0;var b7i=x(T(),1);function aA(){this._framebuffer=new Ai({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new Ai,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new Qe,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(aA.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 nSt(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function iSt(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?De.HALF_FLOAT:De.FLOAT:De.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function oSt(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!Qe.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,Qe.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Qe.clone(o.viewport,e._scissorRectangle),s=!0),(!l(e._renderState)||!Qe.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(Ox,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),l(e._clearCommand)||(e._clearCommand=new ui({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}aA.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;iSt(this,n,o,r,e),oSt(this,n,o,r,i),this._useHdr=e};aA.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};aA.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};aA.prototype.isDestroyed=function(){return!1};aA.prototype.destroy=function(){return nSt(this),he(this)};var Mw=aA;var P7i=x(T(),1);function Vg(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 Ai({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new Ai({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new Ai({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new Ai({createColorAttachments:!1}),this._opaqueClearCommand=new ui({color:new U(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new ui({color:new U(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new ui({color:new U(0,0,0,0),owner:this}),this._alphaClearCommand=new ui({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 Qe,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function tVe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function H$(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function nVe(e){tVe(e),H$(e)}function rSt(e,t,n,i){tVe(e),e._accumulationTexture=new Lt({context:t,width:n,height:i,pixelFormat:Ke.RGBA,pixelDatatype:De.FLOAT}),e._revealageTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:De.FLOAT,width:n,height:i,flipY:!1})}function sSt(e,t){H$(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)&&(H$(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)&&(nVe(e),e._translucentMultipassSupport=!1,i=!1)}return i}Vg.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,rSt(this,e,r,s)),(!l(this._translucentFBO.framebuffer)||c||d)&&!sSt(this,e))return;this._useHDR=i;let u=this,h,p;l(this._compositeCommand)||(h=new Oe({sources:[vY]}),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 Oe({defines:["MRT"],sources:[E1]}),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 Oe({sources:[E1]}),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 b=!Qe.equals(this._viewport,t.viewport),f=b!==this._useScissorTest;this._useScissorTest=b,Qe.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=Qe.clone(t.viewport,this._scissorRectangle),f=!0),(!l(this._rs)||!Qe.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=Ue.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 aSt={enabled:!0,color:new U(0,0,0,0),equationRgb:Vc.ADD,equationAlpha:Vc.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA},cSt={enabled:!0,color:new U(0,0,0,0),equationRgb:Vc.ADD,equationAlpha:Vc.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ONE,functionDestinationAlpha:Ko.ONE},lSt={enabled:!0,color:new U(0,0,0,0),equationRgb:Vc.ADD,equationAlpha:Vc.ADD,functionSourceRgb:Ko.ZERO,functionDestinationRgb:Ko.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA};function K$(e,t,n,i){let o=n[i.id];if(!l(o)){let r=Ue.getState(i);r.depthMask=!1,r.blending=t,o=Ue.fromCache(r),n[i.id]=o}return o}function dSt(e,t,n){return K$(t,aSt,e._translucentRenderStateCache,n)}function uSt(e,t,n){return K$(t,cSt,e._translucentRenderStateCache,n)}function mSt(e,t,n){return K$(t,lSt,e._alphaRenderStateCache,n)}var hSt=` 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); `,fSt=` 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; `,pSt=` float ai = czm_out_FragColor.a; out_FragColor = vec4(ai); `;function J$(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 Oe.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 bSt(e,t){return J$(e,t,"translucentMRT",hSt)}function gSt(e,t){return J$(e,t,"translucentMultipass",fSt)}function ySt(e,t){return J$(e,t,"alphaMultipass",pSt)}Vg.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=et.shallowClone(e,n.translucentCommand),!l(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=bSt(t,e.shaderProgram),n.translucentCommand.renderState=dSt(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=et.shallowClone(e,n.translucentCommand),n.alphaCommand=et.shallowClone(e,n.alphaCommand),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=gSt(t,e.shaderProgram),n.translucentCommand.renderState=uSt(this,t,e.renderState),n.alphaCommand.shaderProgram=ySt(t,e.shaderProgram),n.alphaCommand.renderState=mSt(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 xSt(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 b=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,b)}i.framebuffer=e._alphaFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.alphaCommand:y.derivedCommands.oit.alphaCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.alphaCommand:f.derivedCommands.oit.alphaCommand;n(y,t,i,b)}i.framebuffer=h}function TSt(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 b=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,b)}i.framebuffer=h}Vg.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){TSt(this,e,t,n,i,o);return}xSt(this,e,t,n,i,o)};Vg.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};Vg.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};Vg.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};Vg.prototype.isDestroyed=function(){return!1};Vg.prototype.destroy=function(){return nVe(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 kw=Vg;var k7i=x(T(),1);function Uw(){this._framebuffer=new Ai({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(Uw.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function _St(e){e._framebuffer.destroy()}function SSt(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new zc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new Qe},o.viewport=new Qe,e._passState=o}Uw.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&SSt(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};Uw.prototype.isDestroyed=function(){return!1};Uw.prototype.destroy=function(){return _St(this),he(this)};var Dw=Uw;var $7i=x(T(),1);function cA(e){let t=new zc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new Qe},t.viewport=new Qe,this._context=e,this._fb=new Ai({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}function iVe(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,b=new Set;for(let f=0;f<s;++f){if(-a<=d&&d<=a&&-c<=u&&u<=c){let y=4*((c-u)*n+d+a),_=U.bytesToRgba(t[y],t[y+1],t[y+2],t[y+3]),S=e.getObjectByPickColor(_);if(l(S)&&(b.add(S),b.size>=o))break}if(d===u||d<0&&-d===u||d>0&&d===1-u){let y=h;h=-p,p=y}d+=h,u+=p}return[...b]}cA.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return Qe.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};cA.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=De.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=jL.create({context:r});try{await u.waitForSignal(b=>t.afterRender.push(b));let h=Ke.createTypedArray(c,a,i,o);return d.getBufferData(h),iVe(r,h,i,o,n)}catch{throw new ue("Async Picking Request Timeout")}finally{u.destroy(),d.destroy()}};cA.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 iVe(o,r,n,i,t)};cA.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)};cA.prototype.isDestroyed=function(){return!1};cA.prototype.destroy=function(){return this._fb.destroy(),he(this)};var Ow=cA;var s6i=x(T(),1);function Rg(){this._numSamples=1,this._colorFramebuffer=new Ai({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new Ai({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new U(0,0,0,0),this._clearCommand=new ui({color:new U(0,0,0,0),depth:1,owner:this})}function ASt(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(Rg.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});Rg.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?De.HALF_FLOAT:De.FLOAT:De.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};Rg.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)};Rg.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};Rg.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};Rg.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};Rg.prototype.isDestroyed=function(){return!1};Rg.prototype.destroy=function(){return ASt(this),he(this)};var lA=Rg;var iqi=x(T(),1);var d6i=x(T(),1);function dA(){}dA.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};dA.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=Oe.findPositionVarying(e),s=l(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=Oe.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 Oe({defines:i,sources:o})};dA.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=Oe.findPositionVarying(e),a=l(s);a||(s="v_positionEC");let c=r.length;for(let u=0;u<c;++u)r[u]=Oe.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 Oe({defines:o,sources:r})};dA.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}`};dA.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 Oe({defines:i,sources:o})};dA.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=Oe.findNormalVarying(e),s=!i&&l(r)||i&&o,a=Oe.findPositionVarying(e),c=l(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,h=t._isPointLight,p=t._isSpotLight,b=t._numberOfCascades>1,f=t.debugCascadeColors,y=t.softShadows,_=h?t._pointBias:i?t._terrainBias:t._primitiveBias,S=e.defines.slice(0),A=e.sources.slice(0),Z=A.length;for(let G=0;G<Z;++G)A[G]=Oe.replaceMain(A[G],"czm_shadow_receive_main");h?S.push("USE_CUBE_MAP_SHADOW"):d&&S.push("USE_SHADOW_DEPTH_TEXTURE"),y&&!h&&S.push("USE_SOFT_SHADOWS"),b&&n&&i&&(s?S.push("ENABLE_VERTEX_LIGHTING"):S.push("ENABLE_DAYNIGHT_SHADING")),n&&_.normalShading&&s&&(S.push("USE_NORMAL_SHADING"),_.normalShadingSmooth>0&&S.push("USE_NORMAL_SHADING_SMOOTH"));let V="";h?V+=`uniform samplerCube shadowMap_textureCube; `:V+=`uniform sampler2D shadowMap_texture; `;let E;return c?E=` return vec4(${a}, 1.0); `:E=`#ifndef LOG_DEPTH return czm_windowToEyeCoordinates(gl_FragCoord); #else return vec4(v_logPositionEC, 1.0); #endif `,V+=`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() { ${E}} vec3 getNormalEC() { ${s?` return normalize(${r}); `:` return vec3(1.0); `}} void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) { ${_.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; float normalOffsetScale = 1.0 - nDotL; vec3 offset = normalOffset * normalOffsetScale * normalEC; positionEC.xyz += offset; `:""}} `,V+=`void main() { czm_shadow_receive_main(); vec4 positionEC = getPositionEC(); vec3 normalEC = getNormalEC(); float depth = -positionEC.z; `,V+=` czm_shadowParameters shadowParameters; shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; `,i?V+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0); `:u||(V+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); `),h?V+=` 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?V+=` 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); `:b?V+=` 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); `:""}`:V+=` 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); `,V+=` out_FragColor.rgb *= visibility; } `,A.push(V),new Oe({defines:S,sources:A})};var m0=dA;function h0(e){e=e??B.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;(dn.isEdge()||(dn.isChrome()||dn.isFirefox())&&dn.isWindows()&&!t.depthTexture)&&(n=!1),this._polygonOffsetSupported=n,this._terrainBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new F,this._shadowMapTexture=void 0,this._lightDirectionEC=new m,this._lightPositionEC=new se,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new P3,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new de,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 ls:l(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new se,new se],this._cascadeMatrices=[new F,new F,new F,new F],this._cascadeDistances=new se;let i;this._isPointLight?i=6:this._cascadesEnabled?i=this._numberOfCascades:i=1,this._passes=new Array(i);for(let o=0;o<i;++o)this._passes[o]=new ZSt(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,Q$(this),this._clearCommand=new ui({depth:1,color:new U}),this._clearPassState=new zc(t),this._size=e.size??2048,this.size=this._size}h0.MAXIMUM_DISTANCE=2e4;function ZSt(e){this.camera=new P3,this.passState=new zc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function j$(e,t){return Ue.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 Q$(e){let t=!e._usesDepthTexture;e._primitiveRenderState=j$(t,e._primitiveBias),e._terrainRenderState=j$(t,e._terrainBias),e._pointRenderState=j$(t,e._pointBias)}h0.prototype.debugCreateRenderStates=function(){Q$(this)};Object.defineProperties(h0.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){LSt(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 q$(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 CSt(e,t){let n=new iu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Zl.DEPTH_COMPONENT16}),i=new Lt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,sampler:zt.NEAREST}),o=new cs({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 VSt(e,t){let n=new Lt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:De.UNSIGNED_INT_24_8,sampler:zt.NEAREST}),i=new cs({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 RSt(e,t){let n=new iu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Zl.DEPTH_COMPONENT16}),i=new Jr({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,sampler:zt.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new cs({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 sVe(e,t){e._isPointLight?RSt(e,t):e._usesDepthTexture?VSt(e,t):CSt(e,t)}function ESt(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ne.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,Q$(e),q$(e),sVe(e,t))}function GSt(e,t){(!l(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(q$(e),sVe(e,t),ESt(e,t),aVe(e,t))}function aVe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function LSt(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=vt.maximumCubeMapSize>=t?t:vt.maximumCubeMapSize,o.x=t,o.y=t;let r=new Qe(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=vt.maximumTextureSize>=t?t:vt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new Qe(0,0,t,t)):i===4&&(t=vt.maximumTextureSize>=t*2?t:vt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new Qe(0,0,t,t),n[1].passState.viewport=new Qe(t,0,t,t),n[2].passState.viewport=new Qe(0,t,t,t),n[3].passState.viewport=new Qe(t,t,t,t));e._clearPassState.viewport=new Qe(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 WSt=new Qe;function vSt(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=Le.OVERLAY,i}function FSt(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=WSt;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;l(a)||(a=vSt(e,n),e._debugShadowViewCommand=a),(!l(a.renderState)||!Qe.equals(a.renderState.viewport,s))&&(a.renderState=Ue.fromCache({viewport:Qe.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var f0=new Array(8);f0[0]=new se(-1,-1,-1,1);f0[1]=new se(1,-1,-1,1);f0[2]=new se(1,1,-1,1);f0[3]=new se(-1,1,-1,1);f0[4]=new se(-1,-1,1,1);f0[5]=new se(1,-1,1,1);f0[6]=new se(1,1,1,1);f0[7]=new se(-1,1,1,1);var Bx=new F,$$=new Array(8);for(let e=0;e<8;++e)$$[e]=new se;function ISt(e,t){let n=new Ft({geometry:new Ih({minimum:new m(-.5,-.5,-.5),maximum:new m(.5,.5,.5)}),attributes:{color:Qt.fromColor(t)}}),i=new Ft({geometry:new Hb({radius:.5}),attributes:{color:Qt.fromColor(t)}});return new Pn({geometryInstances:[n,i],appearance:new bn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var PSt=[U.RED,U.GREEN,U.BLUE,U.MAGENTA],XSt=new m;function NSt(e,t){FSt(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 c0({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 c0({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 c0({camera:e._passes[i].camera,color:PSt[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!l(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Pe.IDENTITY,r=e._pointLightRadius*2,s=m.fromElements(r,r,r,XSt),a=F.fromTranslationQuaternionRotationScale(i,o,s,Bx);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=ISt(a,U.YELLOW)}e._debugLightFrustum.update(t)}else(!l(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new c0({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function P3(){this.viewMatrix=new F,this.inverseViewMatrix=new F,this.frustum=void 0,this.positionCartographic=new be,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}P3.prototype.clone=function(e){F.clone(e.viewMatrix,this.viewMatrix),F.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),be.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 YSt=new F(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);P3.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return F.multiply(t,e,this.viewProjectionMatrix),F.multiply(YSt,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var wSt=new Array(5),MSt=new zi,kSt=new Array(4),cVe=new m,lVe=new m;function USt(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=kSt,b=wSt;for(b[0]=o,b[s]=r,a=0;a<s;++a){let N=(a+1)/s,g=o*Math.pow(d,N),C=o+c*N,R=W.lerp(C,g,u);b[a+1]=R,p[a]=R-b[a]}if(h){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let N=b[0];for(a=0;a<s-1;++a)N+=p[a],b[a+1]=N}se.unpack(b,0,e._cascadeSplits[0]),se.unpack(b,1,e._cascadeSplits[1]),se.unpack(p,0,e._cascadeDistances);let f=n.frustum,y=f.left,_=f.right,S=f.bottom,A=f.top,Z=f.near,V=f.far,E=n.positionWC,G=n.directionWC,v=n.upWC,I=i.frustum.clone(MSt),X=n.getViewProjection();for(a=0;a<s;++a){I.near=b[a],I.far=b[a+1];let N=F.multiply(I.projectionMatrix,i.viewMatrix,Bx),g=F.inverse(N,Bx),C=F.multiply(X,g,Bx),R=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,cVe),L=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,lVe);for(let D=0;D<8;++D){let w=se.clone(f0[D],$$[D]);F.multiplyByVector(C,w,w),m.divideByScalar(w,w.w,w),m.minimumByComponent(w,R,R),m.maximumByComponent(w,L,L)}R.x=Math.max(R.x,0),R.y=Math.max(R.y,0),R.z=0,L.x=Math.min(L.x,1),L.y=Math.min(L.y,1),L.z=Math.min(L.z,1);let P=e._passes[a],Y=P.camera;Y.clone(n);let O=Y.frustum;O.left=y+R.x*(_-y),O.right=y+L.x*(_-y),O.bottom=S+R.y*(A-S),O.top=S+L.y*(A-S),O.near=Z+R.z*(V-Z),O.far=Z+L.z*(V-Z),P.cullingVolume=Y.frustum.computeCullingVolume(E,G,v);let k=e._cascadeMatrices[a];F.multiply(Y.getViewProjection(),i.inverseViewMatrix,k),F.multiply(P.textureOffsets,k,k)}}var DSt=new F,OSt=new m,BSt=new m,oVe=new m;function zSt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=F.multiply(i.frustum.projectionMatrix,i.viewMatrix,Bx),r=F.inverse(o,Bx),s=n.directionWC,a=i.directionWC;m.equalsEpsilon(s,a,W.EPSILON10)&&(a=i.upWC);let c=m.cross(s,a,OSt);a=m.cross(c,s,BSt),m.normalize(a,a),m.normalize(c,c);let d=m.fromElements(0,0,0,oVe),u=F.computeView(d,s,a,c,DSt),h=F.multiply(u,r,Bx),p=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,cVe),b=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,lVe);for(let V=0;V<8;++V){let E=se.clone(f0[V],$$[V]);F.multiplyByVector(h,E,E),m.divideByScalar(E,E.w,E),m.minimumByComponent(E,p,p),m.maximumByComponent(E,b,b)}b.z+=1e3,p.z-=10;let f=oVe;f.x=-(.5*(p.x+b.x)),f.y=-(.5*(p.y+b.y)),f.z=-b.z;let y=F.fromTranslation(f,Bx);u=F.multiply(y,u,u);let _=.5*(b.x-p.x),S=.5*(b.y-p.y),A=b.z-p.z,Z=n.frustum;Z.left=-_,Z.right=_,Z.bottom=-S,Z.top=S,Z.near=.01,Z.far=A,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 HSt=[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)],KSt=[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)],JSt=[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 jSt(e,t){let n=new zi;n.fov=W.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=HSt[i],o.upWC=KSt[i],o.rightWC=JSt[i],F.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),F.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var QSt=new m,qSt=new m,dVe=new de,rVe=dVe.center;function $St(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=dVe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,QSt),s=m.negate(i.directionWC,qSt),a=m.dot(r,s);if(e.fadingEnabled){let c=W.clamp(a/.1,0,1);e._darkness=W.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)===Jt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),de.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=m.add(i.positionWC,m.multiplyByScalar(i.directionWC,r,rVe),rVe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===Jt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),de.clone(o,e._boundingSphere)}}function eAt(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=Vo.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,$St(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}h0.prototype.update=function(e){if(eAt(this,e),this._needsUpdate)if(GSt(this,e.context),this._isPointLight&&jSt(this,e),this._cascadesEnabled&&(zSt(this,e),this._numberOfCascades>1&&USt(this,e)),this._isPointLight)this._shadowMapCullingVolume=js.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&&NSt(this,e)};h0.prototype.updatePass=function(e,t){aVe(this,e,t)};var tAt=new M;function uVe(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=tAt;return r.x=1/e._textureSize.x,r.y=1/e._textureSize.y,se.fromElements(r.x,r.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return se.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new se,combinedUniforms2:new se};return Gt(t,o,!1)}function nAt(e,t,n,i,o,r){let s,a,c;if(l(r)&&(s=r.shaderProgram,a=r.renderState,c=r.uniformMap),r=et.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!l(s)||o!==n.shaderProgram.id||t){let d=n.shaderProgram,u=n.pass===Le.GLOBE,h=n.pass!==Le.TRANSLUCENT,p=e._isPointLight,b=e._usesDepthTexture,f=m0.getShadowCastShaderKeyword(p,u,b,h);if(s=i.shaderCache.getDerivedShaderProgram(d,f),!l(s)){let _=d.vertexShaderSource,S=d.fragmentShaderSource,A=m0.createShadowCastVertexShader(_,p,u),Z=m0.createShadowCastFragmentShader(S,p,b,h);s=i.shaderCache.createDerivedShaderProgram(d,f,{vertexShaderSource:A,fragmentShaderSource:Z,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=Be(a,!1),a.cull=Be(a.cull,!1),a.cull.enabled=!1,a=Ue.fromCache(a)),c=uVe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}h0.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===Le.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=et.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let b=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!l(h)||f||n||b){let y=m0.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(h=i.shaderCache.getDerivedShaderProgram(s,y),!l(h)){let _=m0.createShadowReceiveVertexShader(a,d,u),S=m0.createShadowReceiveFragmentShader(c,e[0],t.castShadows,d,u);h=i.shaderCache.createDerivedShaderProgram(s,y,{vertexShaderSource:_,fragmentShaderSource:S,attributeLocations:s._attributeLocations})}p=uVe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=h,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};h0.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]=nAt(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};h0.prototype.isDestroyed=function(){return!1};h0.prototype.destroy=function(){q$(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 Eg=h0;var Vqi=x(T(),1);var rqi=x(T(),1),uA=`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 iAt=!1;function zx(e){this._drawClassificationFBO=new Ai({createDepthAttachments:!1}),this._accumulationFBO=new Ai({createDepthAttachments:!1}),this._packFBO=new Ai,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 ui({color:new U(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new ui({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new Qe,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(zx.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function mVe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function hVe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function oAt(e,t,n,i){mVe(e),e._translucentDepthStencilTexture=new Lt({context:t,width:n,height:i,pixelFormat:Ke.DEPTH_STENCIL,pixelDatatype:De.UNSIGNED_INT_24_8,sampler:zt.NEAREST})}function rAt(e,t,n,i){hVe(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 sAt(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)&&(oAt(e,t,o,r),rAt(e,t,o,r));let s,a;if(l(e._packDepthCommand)||(s=new Oe({sources:[WY]}),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 Oe({sources:[uA]}),a={colorTexture:function(){return e._textureToComposite}},iAt&&(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 Oe({sources:s.sources,defines:["PICK"]}),attributeLocations:h._attributeLocations}),b=et.shallowClone(u);b.shaderProgram=p,u.derivedCommands.pick=b}l(e._copyCommand)||(s=new Oe({sources:[uA]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),l(e._accumulateCommand)||(s=new Oe({sources:[uA]}),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=!Qe.equals(e._viewport,n.viewport),d=c!==e._useScissorTest;e._useScissorTest=c,Qe.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=Qe.clone(n.viewport,e._scissorRectangle),d=!0),(!l(e._rsDepth)||!Qe.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!l(e._rsAccumulate)||!Qe.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ni.EQUAL,reference:Ht.CESIUM_3D_TILE_MASK}})),l(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!l(e._rsComp)||!Qe.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:rn.ALPHA_BLEND})),l(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}zx.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){sAt(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}};zx.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(Le.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[Le.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[Le.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)};zx.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),aAt(this,e,t)};function aAt(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}zx.prototype.isSupported=function(){return this._supported};zx.prototype.isDestroyed=function(){return!1};zx.prototype.destroy=function(){return mVe(this),hVe(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 Bw=zx;function cAt(){this.command=void 0,this.near=void 0,this.far=void 0}function X3(e,t,n){let i=e.context,o;i.depthTexture&&(o=new ww);let r;e._useOIT&&i.depthTexture&&(r=new kw(i));let s=new zc(i);s.viewport=Qe.clone(n),this.camera=t,this._cameraClone=Vo.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new Ow(i),this.pickDepthFramebuffer=new Dw,this.sceneFramebuffer=new lA,this.edgeFramebuffer=new Nw,this.globeDepth=o,this.globeTranslucencyFramebuffer=new Mw,this.oit=r,this.translucentTileClassification=new Bw(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var eee=new m,tee=new m;function lAt(e,t,n){let i=Math.max(m.maximumComponent(m.abs(e.position,eee)),m.maximumComponent(m.abs(t.position,tee))),o=1/Math.max(1,i);return m.multiplyByScalar(e.position,o,eee),m.multiplyByScalar(t.position,o,tee),m.equalsEpsilon(eee,tee,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)}X3.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return lAt(t,n,W.EPSILON15)?(this._cameraStartFired&&Ui()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Ui(),Vo.clone(t,n),!0)};function dAt(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,c=t.mode===re.SCENE2D,d=t.nearToFarDistance2D;i*=1+W.EPSILON2,n=Math.min(Math.max(n,r.frustum.near),r.frustum.far),i=Math.max(Math.min(i,r.frustum.far),n);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 b,f;c?(b=Math.min(i-d,n+p*d),f=Math.min(i,b+d)):(b=Math.max(n,Math.pow(a,p)*n),f=Math.min(i,a*b));let y=h[p];l(y)?(y.near=b,y.far=f):y=h[p]=new Yw(b,f)}}function uAt(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 fVe=new js,mAt=new Kr;X3.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 X=0;X<u.length;++X)for(let N=0;N<Le.NUMBER_OF_PASSES;++N)u[X].indices[N]=0;c.length=0,d.length=0;let h=this._commandExtents,p=h.length,b=0,f=+Number.MAX_VALUE,y=-Number.MAX_VALUE,{shadowsEnabled:_}=o,S=+Number.MAX_VALUE,A=-Number.MAX_VALUE,Z=Number.MAX_VALUE,V=t.mode===re.SCENE3D?t.occluder:void 0,{cullingVolume:E}=t,G=fVe.planes;for(let X=0;X<5;++X)G[X]=E.planes[X];E=fVe;for(let X=0;X<i.length;++X){let N=i[X],{pass:g,boundingVolume:C}=N;if(g===Le.COMPUTE)c.push(N);else if(g===Le.OVERLAY)d.push(N);else{let R,L;if(l(C)){if(!e.isVisible(E,N,V))continue;let Y=C.computePlaneDistances(r,s,mAt);if(R=Y.start,L=Y.stop,f=Math.min(f,R),y=Math.max(y,L),_&&N.receiveShadows&&R<Eg.MAXIMUM_DISTANCE&&!(g===Le.GLOBE&&R<-100&&L>100)){let O=L-R;g!==Le.GLOBE&&R<100&&(Z=Math.min(Z,O)),S=Math.min(S,R),A=Math.max(A,L)}}else N instanceof ui?(R=a.near,L=a.far):(R=a.near,L=a.far,f=Math.min(f,R),y=Math.max(y,L));let P=h[b];l(P)||(P=h[b]=new cAt),P.command=N,P.near=R,P.far=L,b++}}_&&(S=Math.min(Math.max(S,a.near),a.far),A=Math.max(Math.min(A,a.far),S),o.nearPlane=S,o.farPlane=A,o.closestObjectSize=Z),dAt(this,e,f,y);for(let X=0;X<b;X++)uAt(this,e,h[X]);if(b<p)for(let X=b;X<p;X++){let N=h[X];if(!l(N.command))break;N.command=void 0}let v=u.length,{frustumSplits:I}=t;I.length=v+1;for(let X=0;X<v;++X)I[X]=u[X].near,X===v-1&&(I[X+1]=u[X].far)};X3.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 mA=X3;var bVe=.1,hAt=new lh({pass:or.MOST_DETAILED_PRELOAD}),fAt=new lh({pass:or.MOST_DETAILED_PICK}),zw=new lh({pass:or.PICK});function Ta(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new Qe(0,0,1,1),n=new Vo(e);n.frustum=new fn({width:bVe,aspectRatio:1,near:.1}),this._pickOffscreenView=new mA(e,n,t)}Ta.prototype.update=function(){this._pickPositionCacheDirty=!0};Ta.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return l(i)||(i=new Xw,n[t]=i),i};var pAt=new ls,bAt=new m,N3=new m,gAt=new M,yAt=new F;function xAt(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,yAt);r._setTransform(F.IDENTITY);let h=m.clone(r.position,bAt);m.multiplyByScalar(r.right,c,N3),m.add(N3,h,h),m.multiplyByScalar(r.up,d,N3),m.add(N3,h,h),r._setTransform(u),e.mode===re.SCENE2D&&m.fromElements(h.z,h.x,h.y,h);let p=s.getPixelDimensions(o.width,o.height,1,1,gAt),b=pAt;return b.right=p.x*.5,b.left=-b.right,b.top=p.y*.5,b.bottom=-b.top,b.near=s.near,b.far=s.far,b.computeCullingVolume(h,r.directionWC,r.upWC)}var TAt=new rd,_At=new M;function SAt(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,b=h*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,_At),y=f.x*n*.5,_=f.y*i*.5,S=TAt;return S.top=b+_,S.bottom=b-_,S.right=p+y,S.left=p-y,S.near=a,S.far=s.far,S.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function Y3(e,t,n,i,o){let r=e.camera.frustum;return r instanceof fn||r instanceof ls?xAt(e,t,n,i,o):SAt(e,t,n,i,o)}var Hw=new Qe(0,0,3,3),w3=new M,Kw=new U(0,0,0,0);function nee(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 gVe(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=Qe.clone(c,u.viewport);let h=co.transformWindowToDrawingBuffer(e,t,w3);nee(r.drawingBufferHeight,h,i,o,n),e.jobScheduler.disableThisFrame(),e.updateFrameState(),s.cullingVolume=Y3(e,h,n.width,n.height,c),s.invertClassification=!1,s.passes.pick=!0,s.tilesetPassState=zw,r.uniformState.update(s),e.updateEnvironment(),u=d.begin(n,c),e.updateAndExecuteCommands(u,Kw),e.resolveFramebuffers(u)}function yVe(e){let{context:t}=e;t.endFrame()}Ta.prototype.pickAsync=async function(e,t,n,i,o=1){let{context:r,frameState:s,defaultView:a}=e,{pickFramebuffer:c}=a,d=Hw;gVe(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),Zt("picking-async-fallback","Fallback to synchronous picking because async operation requires WebGL2 context.")),yVe(e),u};Ta.prototype.pick=function(e,t,n,i,o=1){let{defaultView:r}=e,{pickFramebuffer:s}=r,a=Hw;gVe(e,t,a,n,i);let c=s.end(a,o);return yVe(e),c};Ta.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=Qe.clone(a,d.viewport);let u=co.transformWindowToDrawingBuffer(e,t,w3),h=nee(o.drawingBufferHeight,u,n,i,Hw);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=Y3(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=zw,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,Kw),e.resolveFramebuffers(d);let p=c.readCenterPixel(h);return o.endFrame(),p};Ta.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=Qe.clone(s,c.viewport);let d=co.transformWindowToDrawingBuffer(e,t,w3),u=nee(i.drawingBufferHeight,d,1,1,Hw);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=Y3(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=zw,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),c=a.begin(u,s),e.updateAndExecuteCommands(c,Kw);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,Pw.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function AAt(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=Qe.clone(s,c.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=Y3(e,t,1,1,s),o.tilesetPassState=zw,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,c=a.update(i,t,s),e.updateAndExecuteCommands(c,Kw),e.resolveFramebuffers(c),i.endFrame()}var ZAt=new zi,CAt=new rd,VAt=new fn,RAt=new ls;Ta.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=co.transformWindowToDrawingBuffer(e,t,w3);e.pickTranslucentDepth?AAt(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(ZAt):l(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(CAt):l(s.frustum.width)?u=s.frustum.clone(VAt):u=s.frustum.clone(RAt);let{frustumCommandsList:h}=a,p=h.length;for(let b=0;b<p;++b){let y=this.getPickDepth(e,b).getDepth(o,d.x,d.y);if(l(y)&&y>0&&y<1){let _=h[b],S;return e.mode===re.SCENE2D?(S=s.position.z,s.position.z=S-_.near+1,u.far=Math.max(1,_.far-_.near),u.near=1,c.update(r),c.updateFrustum(u)):(u.near=_.near*(b!==0?e.opaqueFrustumNearOffset:1),u.far=_.far,c.updateFrustum(u)),n=co.drawingBufferToWorldCoordinates(e,d,y,n),e.mode===re.SCENE2D&&(s.position.z=S,c.update(r)),this._pickPositionCache[i]=m.clone(n),n}}this._pickPositionCache[i]=void 0};var EAt=new be;Ta.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),l(n)&&e.mode!==re.SCENE3D){m.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,EAt);o.cartographicToCartesian(r,n)}return n};function GAt(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=Gn.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 xVe(e,t){let n=[],i=[],o=[],r=[];l(t)||(t=Number.MAX_VALUE);let s=e(t);for(;l(s)&&s.length>0&&!GAt(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=Gn.toValue(!0,c.show)}for(let a=0;a<r.length;++a)r[a].show=!0;return n}Ta.prototype.drillPick=function(e,t,n,i,o){return xVe(a=>this.pick(e,t,i,o,a).map(d=>({object:d,position:void 0,exclude:!1})),n).map(a=>a.object)};var pVe=new m,LAt=new m;function WAt(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 TVe(e,t,n,i){let o=t.direction,r=m.mostOrthogonalAxis(o,pVe),s=m.cross(o,r,pVe),a=m.cross(o,s,LAt);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??bVe,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function vAt(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,c=TVe(e,o,r,a),d=hAt;d.camera=a,d.cullingVolume=c;let u=!0,h=s.length;for(let p=0;p<h;++p){let b=s[p];b.show&&t.primitives.contains(b)&&(b.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}Ta.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)vAt(this,e,t[n])&&t.splice(n--,1)};function _Ve(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 td&&_Ve(o,t,n))}}function M3(e,t,n,i,o,r){let s=[];if(_Ve(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new WAt(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function FAt(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 IAt(e,t,n,i,o,r,s){let{context:a,frameState:c}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,TVe(e,n,o,u.camera);let h=Qe.clone(u.viewport,Hw),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=fAt:c.tilesetPassState=zw,d.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(p,Kw),t.resolveFramebuffers(p);let b,f=u.pickFramebuffer.end(h,1)[0];if(t.context.depthTexture){let{frustumCommandsList:y}=u,_=y.length;for(let S=0;S<_;++S){let Z=e.getPickDepth(t,S).getDepth(a,0,0);if(l(Z)&&Z>0&&Z<1){let V=y[S],E=V.near*(S!==0?t.opaqueFrustumNearOffset:1),G=V.far,v=E+Z*(G-E);b=xn.getPoint(n,v);break}}}if(t.view=t.defaultView,a.endFrame(),l(f)||l(b))return{object:f,position:b,exclude:!l(b)&&r||FAt(f,i)}}function iee(e,t,n,i,o,r,s,a){return xVe(function(){let d=IAt(e,t,n,o,r,s,a);return d?[d]:void 0},i)}function B1(e,t,n,i,o,r,s){let a=iee(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function k3(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)})})}Ta.prototype.pickFromRay=function(e,t,n,i){return B1(this,e,t,n,i,!1,!1)};Ta.prototype.drillPickFromRay=function(e,t,n,i,o){return iee(this,e,t,n,i,o,!1,!1)};Ta.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=xn.clone(t),n=l(n)?n.slice():n,k3(e,M3(o,e,t,n,i,function(){return B1(o,e,t,n,i,!1,!0)}))};Ta.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=xn.clone(t),i=l(i)?i.slice():i,k3(e,M3(r,e,t,i,o,function(){return iee(r,e,t,n,i,o,!1,!0)}))};var PAt=new m,XAt=new m,NAt=new xn,SVe=new be;function oee(e,t){let n=e.ellipsoid,i=Wi._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,XAt),r=be.toCartesian(t,n,PAt),s=NAt;s.origin=r,s.direction=o;let a=new xn;return xn.getPoint(s,i,a.origin),m.negate(o,a.direction),a}function AVe(e,t){let n=e.ellipsoid,i=be.fromCartesian(t,n,SVe);return oee(e,i)}function ZVe(e,t){let n=e.ellipsoid;return be.fromCartesian(t,n,SVe).height}function YAt(e,t,n,i,o){let r=oee(t,n);return M3(e,t,r,i,o,function(){let s=B1(e,t,r,i,o,!0,!0);if(l(s))return ZVe(t,s.position)})}function wAt(e,t,n,i,o,r){let s=AVe(t,n);return M3(e,t,s,i,o,function(){let a=B1(e,t,s,i,o,!0,!0);if(l(a))return m.clone(a.position,r)})}Ta.prototype.sampleHeight=function(e,t,n,i){let o=oee(e,t),r=B1(this,e,o,n,i,!0,!1);if(l(r))return ZVe(e,r.position)};Ta.prototype.clampToHeight=function(e,t,n,i,o){let r=AVe(e,t),s=B1(this,e,r,n,i,!0,!1);if(l(s))return m.clone(s.position,o)};Ta.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]=YAt(this,e,t[s],n,i);return k3(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}))};Ta.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]=wAt(this,e,t[s],n,i,t[s]);return k3(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};Ta.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var Jw=Ta;var Jto=x(T(),1);var Ato=x(T(),1);var V$i=x(T(),1),jw=`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 E$i=x(T(),1),Qw=`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 L$i=x(T(),1),qw=`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 v$i=x(T(),1),$w=`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 I$i=x(T(),1),eM=`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 X$i=x(T(),1),tM=`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 Y$i=x(T(),1),nM=`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 M$i=x(T(),1),iM=`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 U$i=x(T(),1),oM=`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 O$i=x(T(),1),rM=`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 z$i=x(T(),1),sM=`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 K$i=x(T(),1),aM=`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 j$i=x(T(),1),cM=`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 q$i=x(T(),1),Hx=`#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 eeo=x(T(),1),lM=`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 neo=x(T(),1),dM=`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 oeo=x(T(),1),uM=`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 seo=x(T(),1),mM=`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 ceo=x(T(),1),hM=`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 geo=x(T(),1);function hA(){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 Ai,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(hA.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 CVe(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 MAt(e,t){CVe(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?De.HALF_FLOAT:De.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 Ai,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 VVe(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 kAt(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 UAt(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 DAt(e,t){VVe(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(UAt(r,i),{framebuffer:n[r].framebuffer,uniformMap:kAt(e,r)});e._commands=o}hA.prototype.clear=function(e){let t=this._framebuffers;if(!l(t))return;let n=this._clearCommand;l(n)||(n=this._clearCommand=new ui({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)};hA.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,MAt(this,e),DAt(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};hA.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)};hA.prototype.isDestroyed=function(){return!1};hA.prototype.destroy=function(){return CVe(this),VVe(this),he(this)};var fM=hA;var Meo=x(T(),1);var xeo=x(T(),1),OAt={NEAREST:0,LINEAR:1},Ou=OAt;function fA(e){e=e??B.EMPTY_OBJECT;let{name:t=qn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=Ou.NEAREST,pixelFormat:a=Ke.RGBA,pixelDatatype:c=De.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 zc;h.scissorTest={enabled:!0,rectangle:l(u)?Qe.clone(u):new Qe},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(fA.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 BAt=/uniform\s+sampler2D\s+depthTexture/g;fA.prototype._isSupported=function(e){return!BAt.test(this._fragmentShader)||e.depthTexture};function zAt(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 HAt(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function KAt(e,t){return function(){let n=e[t]();if(l(n))return n.dimensions}}function JAt(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]=HAt(e,r),n[r]=zAt(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`]=KAt(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=Gt(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 jAt(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 QAt(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=jAt(n,o)}let i=new Oe({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function qAt(e){let t=e._sampleMode,n,i;t===Ou.LINEAR?(n=Bt.LINEAR,i=ci.LINEAR):(n=Bt.NEAREST,i=ci.NEAREST);let o=e._sampler;(!l(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function $At(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function eZt(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function tZt(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]=eZt(e,d);else if(typeof d=="string"){let h=new We({url:d});s.push(h.fetchImage().then($At(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 RVe(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 nZt(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 iZt(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:De.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:zt.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:De.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:zt.NEAREST})}fA.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&RVe(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=nZt(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,iZt(this,e),JAt(this),tZt(this,e),QAt(this,e),qAt(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=Ue.fromCache({viewport:new Qe(0,0,i.width,i.height)}))),this._command.renderState=o};fA.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,zt.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)};fA.prototype.isDestroyed=function(){return!1};fA.prototype.destroy=function(){return RVe(this),he(this)};var vo=fA;var zeo=x(T(),1);function pA(e){e=e??B.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(pA.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}}});pA.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};pA.prototype.get=function(e){return this._stages[e]};function oZt(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}pA.prototype.update=function(e,t){this._selectedDirty=oZt(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)}};pA.prototype.isDestroyed=function(){return!1};pA.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var zd=pA;var is={};function ree(e){let o=`#define USE_STEP_SIZE ${Hx}`,r=new vo({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:Ou.LINEAR}),s=new vo({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:Ou.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 zd({name:e,stages:[r,s],uniforms:a})}is.createBlurStage=function(){return ree("czm_blur")};is.createDepthOfFieldStage=function(){let e=ree("czm_depth_of_field_blur"),t=new vo({name:"czm_depth_of_field_composite",fragmentShader:iM,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 zd({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};is.isDepthOfFieldSupported=function(e){return e.context.depthTexture};is.createEdgeDetectionStage=function(){let e=qn();return new vo({name:`czm_edge_detection_${e}`,fragmentShader:rM,uniforms:{length:.25,color:U.clone(U.BLACK)}})};is.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function rZt(e){if(!l(e))return is.createEdgeDetectionStage();let t=new zd({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 vo({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new zd({name:"czm_edge_detection_composite",stages:[t,s]})}is.createSilhouetteStage=function(e){let t=rZt(e),n=new vo({name:"czm_silhouette_color_edges",fragmentShader:hM,uniforms:{silhouetteTexture:t.name}});return new zd({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};is.isSilhouetteSupported=function(e){return e.context.depthTexture};is.createBloomStage=function(){let e=new vo({name:"czm_bloom_contrast_bias",fragmentShader:nM,uniforms:{contrast:128,brightness:-.3}}),t=ree("czm_bloom_blur"),n=new zd({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new vo({name:"czm_bloom_generate_composite",fragmentShader:eM,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 zd({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};is.createAmbientOcclusionStage=function(){let e=new vo({name:"czm_ambient_occlusion_generate",fragmentShader:Qw,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new vo({name:"czm_ambient_occlusion_composite",fragmentShader:qw,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 zd({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};is.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var sZt=`#define FXAA_QUALITY_PRESET 39 ${XY} ${cM}`;is.createFXAAStage=function(){return new vo({name:"czm_FXAA",fragmentShader:sZt,sampleMode:Ou.LINEAR})};is.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=jw,new vo({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};is.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=sM,new vo({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};is.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=aM,new vo({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};is.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=mM,new vo({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};is.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=dM,new vo({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:U.WHITE,autoExposure:void 0,exposure:1}})};is.createAutoExposureStage=function(){return new fM};is.createBlackAndWhiteStage=function(){return new vo({name:"czm_black_and_white",fragmentShader:$w,uniforms:{gradations:5}})};is.createBrightnessStage=function(){return new vo({name:"czm_brightness",fragmentShader:tM,uniforms:{brightness:.5}})};is.createNightVisionStage=function(){return new vo({name:"czm_night_vision",fragmentShader:uM})};is.createDepthViewStage=function(){return new vo({name:"czm_depth_view",fragmentShader:oM})};is.createLensFlareStage=function(){return new vo({name:"czm_lens_flare",fragmentShader:lM,uniforms:{dirtTexture:qt("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:qt("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:ie.WGS84.maximumRadius}})};var Bu=is;var Wto=x(T(),1);function Gg(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function bM(e){for(;l(e.length);)e=e.get(e.length-1);return e.name}function see(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[bM(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[bM(h)]=!0)}}}return i.name}function pM(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=pM(e,t,n,p,o):a=see(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<c;++d)u=bM(i.get(d)),l(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<c;++d){u=bM(i.get(d));let h=n[u];for(let p=0;p<d;++p)h[bM(i.get(p))]=!0}return a}function aZt(e,t){let n={};if(l(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=pM(e,t,n,i,void 0);a=pM(e,t,n,o,a),a=see(e,t,n,r,a),a=pM(e,t,n,e,a),see(e,t,n,s,a)}else pM(e,t,n,e,void 0);return n}function cZt(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,b=p.length;for(u=0;u<b;++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,y=f.length,_=!1;for(let S=0;S<y;++S)if(n[f[S]]){_=!0;break}if(!_)break}return l(h)&&u<b?(h.stages.push(t),h):(h={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:d,stages:[t],buffer:new Ai({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(h),h)}function lZt(e,t){let n=aZt(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=cZt(e,i,n[i]))}function aee(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function dZt(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&&(W.isPowerOfTwo(h)||(h=W.nextPowerOfTwo(h)),d=h,u=h),a.buffer.update(t,d,u),a.clear=new ui({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}Gg.prototype.updateDependencies=function(){this._updateDependencies=!0};Gg.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)&&(aee(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&lZt(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,aee(this),dZt(this,e))};Gg.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};Gg.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};Gg.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};Gg.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(l(t))return t.buffer.framebuffer};Gg.prototype.isDestroyed=function(){return!1};Gg.prototype.destroy=function(){return aee(this),he(this)};var bA=Gg;var Fto=x(T(),1),uZt={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};var Lg=Object.freeze(uZt);var cee=[];function ad(){let e=Bu.createFXAAStage(),t=Bu.createAmbientOcclusionStage(),n=Bu.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=Bu.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Lg.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new bA(this),r={},s=cee;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(ad.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 lee(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 Lg.REINHARD:n=Bu.createReinhardTonemappingStage(t);break;case Lg.MODIFIED_REINHARD:n=Bu.createModifiedReinhardTonemappingStage(t);break;case Lg.FILMIC:n=Bu.createFilmicTonemappingStage(t);break;case Lg.PBR_NEUTRAL:n=Bu.createPbrNeutralTonemappingStage(t);break;default:n=Bu.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 lee(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}ad.prototype.add=function(e){let t=this._stageNames,n=cee;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};ad.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=cee;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};ad.prototype.contains=function(e){return l(e)&&l(e._index)&&e._textureCache===this._textureCache};ad.prototype.get=function(e){return lee(this),this._stages[e]};ad.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};ad.prototype.getStageByName=function(e){return this._stageNames[e]};ad.prototype.update=function(e,t,n){lee(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 S=0;S<r.length;++S){let A=r[S];A.ready&&A.enabled&&A._isSupported(e)&&(o[s++]=A)}o.length=s;let a=s!==i.length;if(!a){for(let S=0;S<s;++S)if(o[S]!==i[S]){a=!0;break}}let c=this._ao,d=this._bloom,u=this._autoExposure,h=this._tonemapping,p=this._fxaa;h.enabled=n;let b=c.enabled&&c._isSupported(e),f=d.enabled&&d._isSupported(e),y=h.enabled&&h._isSupported(e),_=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||b!==this._aoEnabled||f!==this._bloomEnabled||y!==this._tonemappingEnabled||_!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=b,this._bloomEnabled=f,this._tonemappingEnabled=y,this._fxaaEnabled=_,this._textureCacheDirty=!1),l(this._randomTexture)&&!b&&(this._randomTexture.destroy(),this._randomTexture=void 0),!l(this._randomTexture)&&b){let A=new Uint8Array(196608);for(let Z=0;Z<196608;Z+=3)A[Z]=Math.floor(Math.random()*255);this._randomTexture=new Lt({context:e,pixelFormat:Ke.RGB,pixelDatatype:De.UNSIGNED_BYTE,source:{arrayBufferView:A,width:256,height:256},sampler:new zt({wrapS:hn.REPEAT,wrapT:hn.REPEAT,minificationFilter:Bt.NEAREST,magnificationFilter:ci.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 S=0;S<r.length;++S)r[S].update(e,t);s=0;for(let S=0;S<r.length;++S){let A=r[S];A.ready&&A.enabled&&A._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};ad.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function gA(e){for(;l(e.length);)e=e.get(e.length-1);return e.outputTexture}ad.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(l(t))return gA(t)};function p0(e,t,n,i,o){if(l(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){p0(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)p0(e.get(r),t,gA(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)p0(e.get(r),t,n,i,o)}ad.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),b=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),y=s.enabled&&s._isSupported(e);if(!y&&!h&&!p&&!f&&r===0)return;let _=t;h&&a.ready&&(p0(a,e,_,n,i),_=gA(a)),p&&c.ready&&(p0(c,e,_,n,i),_=gA(c)),b&&d.ready&&p0(d,e,_,n,i),f&&u.ready&&(p0(u,e,_,n,i),_=gA(u));let S=_;if(r>0){p0(o[0],e,_,n,i);for(let A=1;A<r;++A)p0(o[A],e,gA(o[A-1]),n,i);S=gA(o[r-1])}y&&s.ready&&p0(s,e,S,n,i)};ad.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Bd,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};ad.prototype.isDestroyed=function(){return!1};ad.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 gM=ad;var Rno=x(T(),1);var lno=x(T(),1);var Qto=x(T(),1),mZt={SHIFT:0,CTRL:1,ALT:2},za=Object.freeze(mZt);var $to=x(T(),1),hZt={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},Wn=Object.freeze(hZt);function Kx(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,n.y=t.clientY-o.top,n}function pee(e,t){let n=e;return l(t)&&(n+=`+${t}`),n}function yA(e){if(e.shiftKey)return za.SHIFT;if(e.ctrlKey)return za.CTRL;if(e.altKey)return za.ALT}var Cs={LEFT:0,MIDDLE:1,RIGHT:2};function zu(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 fZt(e){let t=e._element,n=l(t.disableRootEvents)?t:document;dn.supportsPointerEvents()?(zu(e,"pointerdown",t,TZt),zu(e,"pointerup",t,NVe),zu(e,"pointermove",t,_Zt),zu(e,"pointercancel",t,NVe)):(zu(e,"mousedown",t,YVe),zu(e,"mouseup",n,wVe),zu(e,"mousemove",n,MVe),zu(e,"touchstart",t,yZt),zu(e,"touchend",n,vVe),zu(e,"touchmove",n,xZt),zu(e,"touchcancel",n,vVe)),zu(e,"dblclick",t,bZt);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",zu(e,i,t,gZt)}function pZt(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var EVe={position:new M};function bee(e){e._lastSeenTouchEvent=Ui()}function gee(e){return Ui()-e._lastSeenTouchEvent>Mf.mouseEmulationIgnoreMilliseconds}function fee(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function YVe(e,t){if(!gee(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===Cs.LEFT)i=Wn.LEFT_DOWN;else if(n===Cs.MIDDLE)i=Wn.MIDDLE_DOWN;else if(n===Cs.RIGHT)i=Wn.RIGHT_DOWN;else return;let o=Kx(e,t,e._primaryPosition);M.clone(o,e._primaryStartPosition),M.clone(o,e._primaryPreviousPosition);let r=yA(t),s=e.getInputAction(i,r);l(s)&&(M.clone(o,EVe.position),s(EVe),t.preventDefault())}var GVe={position:new M},LVe={position:new M};function dee(e,t,n,i){let o=yA(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(l(r)||l(s)){let a=Kx(e,i,e._primaryPosition);if(l(r)&&(M.clone(a,GVe.position),r(GVe)),l(s)){let c=e._primaryStartPosition;fee(c,a,e._clickPixelTolerance)&&(M.clone(a,LVe.position),s(LVe))}}}function wVe(e,t){if(!gee(e))return;let n=t.button;n!==Cs.LEFT&&n!==Cs.MIDDLE&&n!==Cs.RIGHT||(e._buttonDown[Cs.LEFT]&&(dee(e,Wn.LEFT_UP,Wn.LEFT_CLICK,t),e._buttonDown[Cs.LEFT]=!1),e._buttonDown[Cs.MIDDLE]&&(dee(e,Wn.MIDDLE_UP,Wn.MIDDLE_CLICK,t),e._buttonDown[Cs.MIDDLE]=!1),e._buttonDown[Cs.RIGHT]&&(dee(e,Wn.RIGHT_UP,Wn.RIGHT_CLICK,t),e._buttonDown[Cs.RIGHT]=!1))}var uee={startPosition:new M,endPosition:new M};function MVe(e,t){if(!gee(e))return;let n=yA(t),i=Kx(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(Wn.MOUSE_MOVE,n);l(r)&&(M.clone(o,uee.startPosition),M.clone(i,uee.endPosition),r(uee)),M.clone(i,o),(e._buttonDown[Cs.LEFT]||e._buttonDown[Cs.MIDDLE]||e._buttonDown[Cs.RIGHT])&&t.preventDefault()}var WVe={position:new M};function bZt(e,t){let n=t.button,i;if(n===Cs.LEFT)i=Wn.LEFT_DOUBLE_CLICK;else return;let o=yA(t),r=e.getInputAction(i,o);l(r)&&(Kx(e,t,WVe.position),r(WVe))}function gZt(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=yA(t),o=e.getInputAction(Wn.WHEEL,i);l(o)&&(o(n),t.preventDefault())}function yZt(e,t){bee(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,Kx(e,r,new M));U3(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 vVe(e,t){bee(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);U3(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.remove(s)}var FVe={position:new M},mee={position1:new M,position2:new M},IVe={position:new M},PVe={position:new M},XVe={position:new M};function U3(e,t){let n=yA(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[Cs.LEFT]){if(e._buttonDown[Cs.LEFT]=!1,l(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(Wn.LEFT_UP,n),l(r)&&(M.clone(e._primaryPosition,IVe.position),r(IVe)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(Wn.LEFT_CLICK,n),l(s))){let c=e._primaryStartPosition,d=e._previousPositions.values[0];fee(c,d,e._clickPixelTolerance)&&(M.clone(e._primaryPosition,PVe.position),s(PVe))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(Wn.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[Cs.LEFT]=!0,r=e.getInputAction(Wn.LEFT_DOWN,n),l(r)&&(M.clone(c,FVe.position),r(FVe)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(Wn.RIGHT_CLICK,n),l(s))){let d=e._primaryStartPosition,u=e._previousPositions.values[0];fee(d,u,e._holdPixelTolerance)&&(M.clone(e._primaryPosition,XVe.position),s(XVe))}},Mf.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(Wn.PINCH_START,n),l(r)&&(M.clone(i.values[0],mee.position1),M.clone(i.values[1],mee.position2),r(mee),t.preventDefault()))}function xZt(e,t){bee(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)&&Kx(e,r,d)}kVe(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 hee={startPosition:new M,endPosition:new M},yM={distance:{startPosition:new M,endPosition:new M},angleAndHeight:{startPosition:new M,endPosition:new M}};function kVe(e,t){let n=yA(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[Cs.LEFT]){let a=i.values[0];M.clone(a,e._primaryPosition);let c=e._primaryPreviousPosition;s=e.getInputAction(Wn.MOUSE_MOVE,n),l(s)&&(M.clone(c,hee.startPosition),M.clone(a,hee.endPosition),s(hee)),M.clone(a,c),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(Wn.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,b=Math.sqrt(h*h+p*p)*.25,f=u.x-d.x,y=u.y-d.y,_=Math.sqrt(f*f+y*y)*.25,S=(c.y+a.y)*.125,A=(u.y+d.y)*.125,Z=Math.atan2(p,h),V=Math.atan2(y,f);M.fromElements(0,_,yM.distance.startPosition),M.fromElements(0,b,yM.distance.endPosition),M.fromElements(V,A,yM.angleAndHeight.startPosition),M.fromElements(Z,S,yM.angleAndHeight.endPosition),s(yM)}}function TZt(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,Kx(e,t,new M)),U3(e,t),e._previousPositions.set(i,M.clone(n.get(i)))}else YVe(e,t)}function NVe(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),U3(e,t),e._previousPositions.remove(i)}else wVe(e,t)}function _Zt(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!l(o))return;Kx(e,t,o),kVe(e,t);let r=e._previousPositions;M.clone(n.get(i),r.get(i))}else MVe(e,t)}function Mf(e){this._inputEvents={},this._buttonDown={[Cs.LEFT]:!1,[Cs.MIDDLE]:!1,[Cs.RIGHT]:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-Mf.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,fZt(this)}Mf.prototype.setInputAction=function(e,t,n){let i=pee(t,n);this._inputEvents[i]=e};Mf.prototype.getInputAction=function(e,t){let n=pee(e,t);return this._inputEvents[n]};Mf.prototype.removeInputAction=function(e,t){let n=pee(e,t);delete this._inputEvents[n]};Mf.prototype.isDestroyed=function(){return!1};Mf.prototype.destroy=function(){return pZt(this),he(this)};Mf.mouseEmulationIgnoreMilliseconds=800;Mf.touchHoldDelayMilliseconds=1500;var Hu=Mf;function xA(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}xA.prototype.completeMorph=function(){l(this._completeMorph)&&this._completeMorph()};xA.prototype.morphTo2D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof fn,!(this._previousMode===re.SCENE2D||this._previousMode===re.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,re.SCENE2D,!0),n._mode=re.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===re.COLUMBUS_VIEW?eCt(this,e):aCt(this,e,t),e===0&&l(this._completeMorph)&&this._completeMorph())};var SZt=new m,AZt=new m,ZZt=new m,CZt=new m,VZt=new m,RZt=new m,EZt=new m,GZt=new be,LZt=new F,WZt=new zi,vZt=new fn,FZt={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};xA.prototype.morphToColumbusView=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===re.COLUMBUS_VIEW||this._previousMode===re.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,re.COLUMBUS_VIEW,!0),n.camera._setTransform(F.IDENTITY);let i=SZt,o=AZt,r=ZZt;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===re.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,EZt),h=pt.eastNorthUpToFixedFrame(u,t,LZt);F.inverseTransformation(h,h),n.mapProjection.project(t.cartesianToCartographic(i,GZt),i),F.multiplyByPointAsVector(h,o,o),F.multiplyByPointAsVector(h,r,r)}}let s;this._morphToOrthographic?(s=vZt,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=WZt,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=W.toRadians(60));let a=FZt;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=lCt(a);xM(this,c),this._previousMode===re.SCENE2D?cCt(this,e,a,c):(a.position2D=F.multiplyByPoint(Vo.TRANSFORM_2D,i,CZt),a.direction2D=F.multiplyByPointAsVector(Vo.TRANSFORM_2D,o,VZt),a.up2D=F.multiplyByPointAsVector(Vo.TRANSFORM_2D,r,RZt),n._mode=re.MORPHING,qVe(this,e,a,c)),e===0&&l(this._completeMorph)&&this._completeMorph()};var Tee={position:new m,direction:new m,up:new m,frustum:void 0},DVe=new zi;xA.prototype.morphTo3D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===re.SCENE3D||this._previousMode===re.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,re.SCENE3D,!0),n._mode=re.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===re.SCENE2D)OZt(this,e,t);else{let i;e>0?(i=Tee,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=OVe(this,t);let o,r=n.camera;r.frustum instanceof fn?o=r.frustum.clone():(o=DVe,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=W.toRadians(60)),i.frustum=o;let s=e1e(i);xM(this,s),xee(this,e,i,s)}e===0&&l(this._completeMorph)&&this._completeMorph()}};xA.prototype.isDestroyed=function(){return!1};xA.prototype.destroy=function(){return D3(this),he(this)};function xM(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new Hu(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,Wn.LEFT_DOWN),e._morphHandler.setInputAction(n,Wn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,Wn.RIGHT_DOWN),e._morphHandler.setInputAction(n,Wn.WHEEL)}}function D3(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 IZt=new be,PZt=new m,XZt=new F;function OVe(e,t){let n=e._scene,i=n.camera,o=Tee,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,IZt);t.cartographicToCartesian(c,r);let d=t.scaleToGeodeticSurface(r,PZt),u=pt.eastNorthUpToFixedFrame(d,t,XZt);return F.multiplyByPointAsVector(u,i.direction,s),F.multiplyByPointAsVector(u,i.up,a),o}var NZt=new m,YZt=new m,wZt=new m,MZt=new m,kZt=new m,UZt=new m;function xee(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(r.position,NZt),a=m.clone(r.direction,YZt),c=m.clone(r.up,wZt),d=F.multiplyByPoint(Vo.TRANSFORM_2D_INVERSE,n.position,MZt),u=F.multiplyByPointAsVector(Vo.TRANSFORM_2D_INVERSE,n.direction,kZt),h=F.multiplyByPointAsVector(Vo.TRANSFORM_2D_INVERSE,n.up,UZt);function p(f){uh(s,d,f.time,r.position),uh(a,u,f.time,r.direction),uh(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let b=o.tweens.add({duration:t,easingFunction:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){$Ve(e,o,0,1,t,i)}});e._currentTweens.push(b)}var DZt=new fn,BVe=new m,zVe=new m,HVe=new m,_ee=new m,KVe=new m,JVe=new m;function OZt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=Tee,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=OVe(e,n));let s;e._morphToOrthographic?(s=DZt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=DVe,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=W.toRadians(60)),r.frustum=s;let a=e1e(r);xM(e,a);let c;e._morphToOrthographic?c=function(){xee(e,t,r,a)}:c=function(){QVe(e,t,r,function(){xee(e,t,r,a)})},t>0?(i._mode=re.SCENE2D,o.flyTo({duration:t,destination:m.fromDegrees(0,0,5*n.maximumRadius,n,_ee),complete:function(){i._mode=re.MORPHING,c()}})):c()}function uh(e,t,n,i){return m.lerp(e,t,n,i)}function jVe(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof fn)return;let a=s.frustum.fov,c=W.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=W.lerp(a,c,p.time);let b=d/Math.tan(s.frustum.fov*.5);i(s,b)}let h=r.tweens.add({duration:t,easingFunction:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(h)}var BZt=new m,zZt=new m,HZt=new m,yee=new m,KZt=new m,JZt=new m,jZt=new ls,QZt=new xn,qZt=new m,$Zt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function eCt(e,t){t*=.5;let n=e._scene,i=n.camera,o=m.clone(i.position,BZt),r=m.clone(i.direction,zZt),s=m.clone(i.up,HZt),a=m.negate(m.UNIT_Z,KZt),c=m.clone(m.UNIT_Y,JZt),d=yee;if(t>0)m.clone(m.ZERO,yee),d.z=5*n.ellipsoid.maximumRadius;else{m.clone(o,yee);let _=QZt;F.multiplyByPoint(Vo.TRANSFORM_2D,o,_.origin),F.multiplyByPointAsVector(Vo.TRANSFORM_2D,r,_.direction);let S=n.globe;if(l(S)){let A=S.pickWorldCoordinates(_,n,!0,qZt);l(A)&&(F.multiplyByPoint(Vo.TRANSFORM_2D_INVERSE,A,d),d.z+=m.distance(o,d))}}let u=jZt;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let h=$Zt;h.position=d,h.direction=a,h.up=c,h.frustum=u;let p=t1e(h);xM(e,p);function b(_){uh(o,d,_.time,i.position),uh(r,a,_.time,i.direction),uh(s,c,_.time,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(_,S){_.position.z=S}let y=n.tweens.add({duration:t,easingFunction:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:b,complete:function(){jVe(e,t,h,f,p)}});e._currentTweens.push(y)}var UVe=new be,tCt={position:new m,direction:new m,up:new m,position2D:new m,direction2D:new m,up2D:new m,frustum:new ls},nCt={position:new m,direction:new m,up:new m,frustum:void 0},iCt=new m,oCt=new xn,rCt=new F,sCt=new m;function aCt(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=tCt;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,UVe),i.mapProjection.project(UVe,r.position),m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);let h=oCt;m.clone(r.position2D,h.origin);let p=m.clone(o.directionWC,h.direction),b=n.scaleToGeodeticSurface(o.positionWC,sCt),f=pt.eastNorthUpToFixedFrame(b,n,rCt);F.inverseTransformation(f,f),F.multiplyByPointAsVector(f,p,p),F.multiplyByPointAsVector(Vo.TRANSFORM_2D,p,p);let y=i.globe;if(l(y)){let _=y.pickWorldCoordinates(h,i,!0,iCt);if(l(_)){let S=m.distance(r.position2D,_);_.x+=S,m.clone(_,r.position2D)}}}function s(h,p){h.position.x=p}F.multiplyByPoint(Vo.TRANSFORM_2D,r.position,r.position2D),F.multiplyByPointAsVector(Vo.TRANSFORM_2D,r.direction,r.direction2D),F.multiplyByPointAsVector(Vo.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=nCt;F.multiplyByPoint(Vo.TRANSFORM_2D_INVERSE,r.position2D,c.position),m.clone(r.direction,c.direction),m.clone(r.up,c.up),c.frustum=a;let d=t1e(c);xM(e,d);function u(){jVe(e,t,r,s,d)}qVe(e,t,r,u)}function QVe(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=W.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=W.lerp(c,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let h=o.tweens.add({duration:t,easingFunction:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(h)}function cCt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(n.position,_ee),a=m.clone(n.direction,KVe),c=m.clone(n.up,JVe);o._mode=re.MORPHING;function d(){r.frustum=n.frustum.clone();let u=m.clone(r.position,BVe),h=m.clone(r.direction,zVe),p=m.clone(r.up,HVe);u.z=s.z;function b(y){uh(u,s,y.time,r.position),uh(h,a,y.time,r.direction),uh(p,c,y.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:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:b,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?d():QVe(e,0,n,d)}function qVe(e,t,n,i){let o=e._scene,r=o.camera,s=m.clone(r.position,BVe),a=m.clone(r.direction,zVe),c=m.clone(r.up,HVe),d=m.clone(n.position2D,_ee),u=m.clone(n.direction2D,KVe),h=m.clone(n.up2D,JVe);function p(f){uh(s,d,f.time,r.position),uh(a,u,f.time,r.direction),uh(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let b=o.tweens.add({duration:t,easingFunction:Zs.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){$Ve(e,o,1,0,t,i)}});e._currentTweens.push(b)}function $Ve(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:Zs.QUARTIC_OUT};l(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function e1e(e){return function(t){let n=t._scene;n._mode=re.SCENE3D,n.morphTime=re.getMorphTime(re.SCENE3D),D3(t);let i=n.camera;(t._previousMode!==re.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,re.SCENE3D,r)}}function t1e(e){return function(t){let n=t._scene;n._mode=re.SCENE2D,n.morphTime=re.getMorphTime(re.SCENE2D),D3(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,re.SCENE2D,o)}}function lCt(e){return function(t){let n=t._scene;n._mode=re.COLUMBUS_VIEW,n.morphTime=re.getMorphTime(re.COLUMBUS_VIEW),D3(t);let i=n.camera;(t._previousModeMode!==re.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,re.COLUMBUS_VIEW,r)}}var TM=xA;var _io=x(T(),1);var wno=x(T(),1);var Gno=x(T(),1),dCt={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},oo=Object.freeze(dCt);function Ha(e,t){let n=`${e}`;return l(t)&&(n+=`+${t}`),n}function uCt(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 n1e(e,t,n){let i=Ha(oo.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])},Wn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},Wn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(uCt(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,b=Math.PI*2;for(;h>=p+Math.PI;)h-=b;for(;h<p-Math.PI;)h+=b;d.angleAndHeight.endPosition.x=-h*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},Wn.PINCH_MOVE,t)}function i1e(e,t){let n=Ha(oo.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*W.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},Wn.WHEEL,t)}function z1(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===oo.LEFT_DRAG?(c=Wn.LEFT_DOWN,d=Wn.LEFT_UP):n===oo.RIGHT_DRAG?(c=Wn.RIGHT_DOWN,d=Wn.RIGHT_UP):n===oo.MIDDLE_DRAG&&(c=Wn.MIDDLE_DOWN,d=Wn.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(){See(Ha(n,void 0),e);for(let u of Object.values(za)){let h=Ha(n,u);See(h,e)}},d,t)}function See(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 o1e(e,t){M.clone(e.startPosition,t.startPosition),M.clone(e.endPosition,t.endPosition)}function mCt(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,See(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 r1e(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in oo)if(oo.hasOwnProperty(s)){let a=oo[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 oo)if(oo.hasOwnProperty(a)){let c=oo[a];if(l(c)){let d=Ha(c,t);mCt(c,t,e),r[d]&&(n[d]?(o1e(i[d],o[d]),o[d].valid=!0,o1e(s,i[d]),n[d]=!1):M.clone(s.endPosition,i[d].endPosition))}}M.clone(s.endPosition,e._currentMousePosition)},Wn.MOUSE_MOVE,t)}function mh(e){this._eventHandler=new Hu(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new M,i1e(this,void 0),n1e(this,void 0,e),z1(this,void 0,oo.LEFT_DRAG),z1(this,void 0,oo.RIGHT_DRAG),z1(this,void 0,oo.MIDDLE_DRAG),r1e(this,void 0);for(let t in za)if(za.hasOwnProperty(t)){let n=za[t];l(n)&&(i1e(this,n),n1e(this,n,e),z1(this,n,oo.LEFT_DRAG),z1(this,n,oo.RIGHT_DRAG),z1(this,n,oo.MIDDLE_DRAG),r1e(this,n))}}Object.defineProperties(mh.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[Ha(oo.WHEEL)]||!this._update[Ha(oo.WHEEL,za.SHIFT)]||!this._update[Ha(oo.WHEEL,za.CTRL)]||!this._update[Ha(oo.WHEEL,za.ALT)];return this._buttonsDown>0||e}}});mh.prototype.isMoving=function(e,t){let n=Ha(e,t);return!this._update[n]};mh.prototype.getMovement=function(e,t){let n=Ha(e,t);return this._movement[n]};mh.prototype.getLastMovement=function(e,t){let n=Ha(e,t),i=this._lastMovement[n];if(i.valid)return i};mh.prototype.isButtonDown=function(e,t){let n=Ha(e,t);return this._isDown[n]};mh.prototype.getStartMousePosition=function(e,t){if(e===oo.WHEEL)return this._currentMousePosition;let n=Ha(e,t);return this._eventStartPosition[n]};mh.prototype.getButtonPressTime=function(e,t){let n=Ha(e,t);return this._pressTime[n]};mh.prototype.getButtonReleaseTime=function(e,t){let n=Ha(e,t);return this._releaseTime[n]};mh.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};mh.prototype.isDestroyed=function(){return!1};mh.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),he(this)};var _M=mh;var Kno=x(T(),1);function O3(e,t,n,i,o,r,s,a,c,d){this._tweens=e,this._tweenjs=t,this._startObject=Be(n),this._stopObject=Be(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=d,this.needsStart=!0}Object.defineProperties(O3.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}}});O3.prototype.cancelTween=function(){this._tweens.remove(this)};function kf(){this._tweens=[]}Object.defineProperties(kf.prototype,{length:{get:function(){return this._tweens.length}}});kf.prototype.add=function(e){if(e=e??B.EMPTY_OBJECT,e.duration===0)return l(e.complete)&&e.complete(),new O3(this);let t=e.duration/li.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/li.SECONDS_PER_MILLISECOND,o=e.easingFunction??Zs.LINEAR_NONE,r=e.startObject,s=new gAe(r);s.to(Be(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 O3(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};kf.prototype.addProperty=function(e){e=e??B.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})};kf.prototype.addAlpha=function(e){e=e??B.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})};kf.prototype.addOffsetIncrement=function(e){e=e??B.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})};kf.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};kf.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};kf.prototype.contains=function(e){return l(e)&&this._tweens.indexOf(e)!==-1};kf.prototype.get=function(e){return this._tweens[e]};kf.prototype.update=function(e){let t=this._tweens,n=0;for(e=l(e)?e/li.SECONDS_PER_MILLISECOND:Ui();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 TA=kf;function AM(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=oo.LEFT_DRAG,this.zoomEventTypes=[oo.RIGHT_DRAG,oo.WHEEL,oo.PINCH],this.rotateEventTypes=oo.LEFT_DRAG,this.tiltEventTypes=[oo.MIDDLE_DRAG,oo.PINCH,{eventType:oo.LEFT_DRAG,modifier:za.CTRL},{eventType:oo.RIGHT_DRAG,modifier:za.CTRL}],this.lookEventTypes={eventType:oo.LEFT_DRAG,modifier:za.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 TA,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 be(Math.PI,W.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 hCt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function fCt(e){return M.equalsEpsilon(e.startPosition,e.endPosition,W.EPSILON14)}var pCt=.4;function bCt(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<pCt){let b=hCt(p,i),f=e.getLastMovement(t,n);if(!l(f)||fCt(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,b,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 y=e.getStartMousePosition(t,n);o(r,y,a)}}}function gCt(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 s1e=[];function cd(e,t,n,i,o,r){if(!l(n))return;let s=e._aggregator;Array.isArray(n)||(s1e[0]=n,n=s1e);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),b=s.getStartMousePosition(u,h);e.enableInputs&&t&&(p?(i(e,b,p),gCt(e,r)):o<1&&bCt(s,u,h,o,i,e,r))}}var B3=new xn,yCt=new m,xCt=new M,TCt=new m,_Ct=new M,SCt=new m,ACt=new m,ZCt=new m,CCt=new m,y1e=new m,VCt=new m,RCt=new m,ECt=new m,GCt=new m,LCt=new m,WCt=new m,vCt=new m,FCt=new m,ICt=new m,PCt=new m,_A=new m,a1e=new m,c1e=new m,Aee={orientation:new Sc};function Wee(e,t,n,i,o,r){let s=1;l(r)&&(s=W.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=W.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let b=a/e._scene.canvas.clientHeight;b=Math.min(b,e.maximumMovementRatio);let f=p*b;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 y=e._scene,_=y.camera,S=y.mode,A=Aee.orientation;A.heading=_.heading,A.pitch=_.pitch,A.roll=_.roll;let Z=n.inertiaEnabled??M.equals(t,e._zoomMouseStart),V=e._zoomingOnVector,E=e._rotatingZoom,G;if(Z||(e._zoomMouseStart=M.clone(t,e._zoomMouseStart),l(e._globe)&&S===re.SCENE2D?(G=_.getPickRay(t,B3).origin,G=m.fromElements(G.y,G.z,G.x)):l(e._globe)&&(G=Wg(e,t,yCt)),l(G)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=m.clone(G,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,V=e._zoomingOnVector=!1,E=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){_.zoomIn(f);return}let v=S===re.COLUMBUS_VIEW;if(_.positionCartographic.height<2e6&&(E=!0),!Z||E){if(S===re.SCENE2D){let I=e._zoomWorldPosition,X=_.position;if(!m.equals(I,X)&&_.positionCartographic.height<e._maxCoord.x*2){let N=_.position.x,g=m.subtract(I,X,TCt);m.normalize(g,g);let C=m.distance(I,X)*f/(_.getMagnitude()*.5);_.move(g,C*.5),(_.position.x<0&&N>0||_.position.x>0&&N<0)&&(G=_.getPickRay(t,B3).origin,G=m.fromElements(G.y,G.z,G.x),e._zoomWorldPosition=m.clone(G,e._zoomWorldPosition))}}else if(S===re.SCENE3D){let I=m.normalize(_.position,y1e);if(e._cameraUnderground||e._zoomingUnderground||_.positionCartographic.height<3e3&&Math.abs(m.dot(_.direction,I))<.6)v=!0;else{let X=y.canvas,N=_Ct;N.x=X.clientWidth/2,N.y=X.clientHeight/2;let g=Wg(e,N,SCt);if(!l(g))v=!0;else if(_.positionCartographic.height<1e6)if(m.dot(_.direction,I)>=-.5)v=!0;else{let C=RCt;m.clone(_.position,C);let R=e._zoomWorldPosition,L=VCt;if(L=m.normalize(R,L),m.dot(L,I)<0)return;let P=PCt,Y=LCt;m.clone(_.direction,Y),m.add(C,m.multiplyByScalar(Y,1e3,_A),P);let O=WCt,k=vCt;m.subtract(R,C,O),m.normalize(O,k);let D=m.dot(I,k);if(D>=0){e._zoomMouseStart.x=-1;return}let w=Math.acos(-D),z=m.magnitude(C),J=m.magnitude(R),ee=z-f,H=m.magnitude(O),te=Math.asin(W.clamp(H/J*Math.sin(w),-1,1)),$=Math.asin(W.clamp(ee/J*Math.sin(w),-1,1)),pe=te-$+w,xe=ECt;m.normalize(C,xe);let le=GCt;le=m.cross(k,xe,le),le=m.normalize(le,le),m.normalize(m.cross(xe,le,_A),Y),m.multiplyByScalar(m.normalize(P,_A),m.magnitude(P)-f,P),m.normalize(C,C),m.multiplyByScalar(C,ee,C);let Te=FCt;m.multiplyByScalar(m.add(m.multiplyByScalar(xe,Math.cos(pe)-1,a1e),m.multiplyByScalar(Y,Math.sin(pe),c1e),_A),ee,Te),m.add(C,Te,C),m.normalize(P,xe),m.normalize(m.cross(xe,le,_A),Y);let Se=ICt;m.multiplyByScalar(m.add(m.multiplyByScalar(xe,Math.cos(pe)-1,a1e),m.multiplyByScalar(Y,Math.sin(pe),c1e),_A),m.magnitude(P),Se),m.add(P,Se,P),m.clone(C,_.position),m.normalize(m.subtract(P,C,_A),_.direction),m.clone(_.direction,_.direction),m.cross(_.direction,_.up,_.right),m.cross(_.right,_.direction,_.up),_.setView(Aee);return}else{let C=m.normalize(g,ACt),R=m.normalize(e._zoomWorldPosition,ZCt),L=m.dot(R,C);if(L>0&&L<1){let P=W.acosClamped(L),Y=m.cross(R,C,CCt),O=Math.abs(P)>W.toRadians(20)?_.positionCartographic.height*.75:_.positionCartographic.height-f,k=f/O;_.rotate(Y,P*k)}}}}e._rotatingZoom=!v}if(!Z&&v||V){let I,X=co.worldToWindowCoordinates(y,e._zoomWorldPosition,xCt);S!==re.COLUMBUS_VIEW&&M.equals(t,e._zoomMouseStart)&&l(X)?I=_.getPickRay(X,B3):I=_.getPickRay(t,B3);let N=I.direction;(S===re.COLUMBUS_VIEW||S===re.SCENE2D)&&m.fromElements(N.y,N.z,N.x,N),_.move(N,f),e._zoomingOnVector=!0}else _.zoomIn(f);e._cameraUnderground||_.setView(Aee)}var XCt=new xn,NCt=new xn,YCt=new m;function wCt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,XCt).origin,s=o.getPickRay(n.endPosition,NCt).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,YCt),c=m.magnitude(a);c>0&&(m.normalize(a,a),o.move(a,c))}function l1e(e,t,n){l(n.distance)&&(n=n.distance);let o=e._scene.camera;Wee(e,t,n,e.zoomFactor,o.getMagnitude())}var MCt=new M,kCt=new M;function d1e(e,t,n){if(l(n.angleAndHeight)){UCt(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=MCt;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=M.normalize(c,c);let d=kCt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=M.normalize(d,d);let u=W.acosClamped(c.x);c.y<0&&(u=W.TWO_PI-u);let h=W.acosClamped(d.x);d.y<0&&(h=W.TWO_PI-h);let p=h-u;o.twistRight(p)}function UCt(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 DCt(e){let t=e._scene.mapMode2D===sd.ROTATE;F.equals(F.IDENTITY,e._scene.camera.transform)?(cd(e,e.enableTranslate,e.translateEventTypes,wCt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),cd(e,e.enableZoom,e.zoomEventTypes,l1e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&cd(e,e.enableRotate,e.tiltEventTypes,d1e,e.inertiaSpin,"_lastInertiaTiltMovement")):(cd(e,e.enableZoom,e.zoomEventTypes,l1e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&cd(e,e.enableRotate,e.translateEventTypes,d1e,e.inertiaSpin,"_lastInertiaSpinMovement"))}var x1e=new xn,OCt=new m,BCt=new m;function Wg(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,OCt)),!l(o))return m.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,x1e),d=o.pickWorldCoordinates(c,i,a,BCt),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 zCt=new be;function q3(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===re.SCENE3D){let c=t.cartesianToCartographic(i.position,zCt);l(c)&&(r=c.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var HCt=new m;function T1e(e,t){let n=t.origin,i=t.direction,o=q3(e),r=m.normalize(n,HCt),s=Math.abs(m.dot(r,i));return s=Math.max(s,.5)*2,o*s}function _1e(e,t,n,i){let o=m.distance(t.origin,n),r=q3(e),s=W.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),xn.getPoint(t,o,i)}function S1e(e,t,n,i){let o;return l(n)?(o=m.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=q3(e))):o=q3(e),xn.getPoint(t,o,i)}var KCt=new M;function A1e(e,t){let n=t.endPosition,i=M.subtract(t.endPosition,t.startPosition,KCt),o=e._strafeEndMousePosition;M.add(o,i,o),t.endPosition=o,vee(e,t,e._strafeStartPosition),t.endPosition=n}var u1e=new xn,JCt=new xn,Zee=new m,jCt=new m,QCt=new m,qCt=new m,$Ct=new an(m.UNIT_X,0),eVt=new M,tVt=new M;function nVt(e,t,n){if(m.equals(t,e._translateMousePosition)||(e._looking=!1),m.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){Ju(e,t,n);return}if(e._strafing){A1e(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=M.clone(n.startPosition,eVt),a=M.clone(n.endPosition,tVt),c=o.getPickRay(s,u1e),d=m.clone(m.ZERO,qCt),u=m.UNIT_X,h;if(o.position.z<e._minimumPickingTerrainHeight&&(h=Wg(e,s,Zee),l(h)&&(d.x=h.x)),r||d.x>o.position.z&&l(h)){let Z=h;r&&(Z=S1e(e,c,h,Zee)),M.clone(t,e._strafeMousePosition),M.clone(t,e._strafeEndMousePosition),m.clone(Z,e._strafeStartPosition),e._strafing=!0,vee(e,n,e._strafeStartPosition);return}let p=an.fromPointNormal(d,u,$Ct);c=o.getPickRay(s,u1e);let b=mi.rayPlane(c,p,Zee),f=o.getPickRay(a,JCt),y=mi.rayPlane(f,p,jCt);if(!l(b)||!l(y)){e._looking=!0,Ju(e,t,n),M.clone(t,e._translateMousePosition);return}let _=m.subtract(b,y,QCt),S=_.x;_.x=_.y,_.y=_.z,_.z=S;let A=m.magnitude(_);A>W.EPSILON6&&(m.normalize(_,_),o.move(_,A))}var Z1e=new M,K3=new xn,J3=new m,iVt=new m,C1e=new F,oVt=new F,rVt=new m,sVt=new an(m.UNIT_X,0),Cee=new m,Eee=new be,V1e=new F,aVt=new Pe,cVt=new q,j3=new m;function lVt(e,t,n){if(l(n.angleAndHeight)&&(n=n.angleAndHeight),M.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){Ju(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,dVt(e,t,n)):uVt(e,t,n)}function dVt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=Z1e;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,K3),c=m.UNIT_X,d=a.origin,u=a.direction,h,p=m.dot(c,u);if(Math.abs(p)>W.EPSILON6&&(h=-m.dot(c,d)/p),!l(h)||h<=0){e._looking=!0,Ju(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}let b=m.multiplyByScalar(u,h,J3);m.add(d,b,b);let f=i.mapProjection,y=f.ellipsoid;m.fromElements(b.y,b.z,b.x,b);let _=f.unproject(b,Eee);y.cartographicToCartesian(_,b);let S=pt.eastNorthUpToFixedFrame(b,y,C1e),A=e._globe,Z=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let V=F.clone(o.transform,V1e);o._setTransform(S),Ku(e,t,n,m.UNIT_Z),o._setTransform(V),e._globe=A,e._ellipsoid=Z;let E=Z.maximumRadius;e._rotateFactor=1/E,e._rotateRateRangeAdjustment=E}function uVt(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,J3);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=Wg(e,t,J3)),!l(s)){a=o.getPickRay(t,K3);let g=a.origin,C=a.direction,R,L=m.dot(c,C);if(Math.abs(L)>W.EPSILON6&&(R=-m.dot(c,g)/L),!l(R)||R<=0){e._looking=!0,Ju(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}s=m.multiplyByScalar(C,R,J3),m.add(g,s,s)}r&&(l(a)||(a=o.getPickRay(t,K3)),_1e(e,a,s,s)),M.clone(t,e._tiltCenterMousePosition),m.clone(s,e._tiltCenter)}let d=i.canvas,u=Z1e;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,K3);let h=m.clone(m.ZERO,rVt);h.x=s.x;let p=an.fromPointNormal(h,c,sVt),b=mi.rayPlane(a,p,iVt),f=o._projection,y=f.ellipsoid;m.fromElements(s.y,s.z,s.x,s);let _=f.unproject(s,Eee);y.cartographicToCartesian(_,s);let S=pt.eastNorthUpToFixedFrame(s,y,C1e),A;l(b)?(m.fromElements(b.y,b.z,b.x,b),_=f.unproject(b,Eee),y.cartographicToCartesian(_,b),A=pt.eastNorthUpToFixedFrame(b,y,oVt)):A=S;let Z=e._globe,V=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let E=m.UNIT_Z,G=F.clone(o.transform,V1e);o._setTransform(S);let v=m.cross(m.UNIT_Z,m.normalize(o.position,Cee),Cee),I=m.dot(o.right,v);if(Ku(e,t,n,E,!1,!0),o._setTransform(A),I<0){let g=n.startPosition.y-n.endPosition.y;(r&&g<0||!r&&g>0)&&(E=void 0);let C=o.constrainedAxis;o.constrainedAxis=void 0,Ku(e,t,n,E,!0,!1),o.constrainedAxis=C}else Ku(e,t,n,E,!0,!1);if(l(o.constrainedAxis)){let g=m.cross(o.direction,o.constrainedAxis,j3);m.equalsEpsilon(g,m.ZERO,W.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(G),e._globe=Z,e._ellipsoid=V;let X=V.maximumRadius;e._rotateFactor=1/X,e._rotateRateRangeAdjustment=X;let N=m.clone(o.positionWC,Cee);if(e.enableCollisionDetection&&Pee(e,!0),!m.equals(o.positionWC,N)){o._setTransform(A),o.worldToCameraCoordinatesPoint(N,N);let g=m.magnitudeSquared(N);m.magnitudeSquared(o.position)>g&&(m.normalize(o.position,o.position),m.multiplyByScalar(o.position,Math.sqrt(g),o.position));let C=m.angleBetween(N,o.position),R=m.cross(N,o.position,N);m.normalize(R,R);let L=Pe.fromAxisAngle(R,C,aVt),P=q.fromQuaternion(L,cVt);q.multiplyByVector(P,o.direction,o.direction),q.multiplyByVector(P,o.up,o.up),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up),o._setTransform(G)}}var R1e=new M,E1e=new xn,G1e=new m;function mVt(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=R1e,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,E1e),d=c.origin,u=c.direction,h=o.position.z,p;h<e._minimumPickingTerrainHeight&&(p=Wg(e,a,G1e));let b;if(l(p)&&(b=m.distance(d,p)),s){let f=T1e(e,c,h);l(b)?b=Math.min(b,f):b=f}if(!l(b)){let f=m.UNIT_X;b=-m.dot(f,d)/m.dot(f,u)}Wee(e,t,n,e.zoomFactor,b)}function hVt(e){let n=e._scene.camera;if(!F.equals(F.IDENTITY,n.transform))cd(e,e.enableRotate,e.rotateEventTypes,Ku,e.inertiaSpin,"_lastInertiaSpinMovement"),cd(e,e.enableZoom,e.zoomEventTypes,W1e,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),cd(e,e.enableTilt,e.tiltEventTypes,lVt,e.inertiaSpin,"_lastInertiaTiltMovement"),cd(e,e.enableTranslate,e.translateEventTypes,nVt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),cd(e,e.enableZoom,e.zoomEventTypes,mVt,e.inertiaZoom,"_lastInertiaZoomMovement"),cd(e,e.enableLook,e.lookEventTypes,Ju),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);l(o)&&(e._tween=i.add(o))}i.update()}}var fVt=new xn,pVt=new an(m.UNIT_X,0),bVt=new m,gVt=new m;function vee(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,fVt),s=m.clone(o.direction,gVt);i.mode===re.COLUMBUS_VIEW&&m.fromElements(s.z,s.x,s.y,s);let a=an.fromPointNormal(n,s,pVt),c=mi.rayPlane(r,a,bVt);l(c)&&(s=m.subtract(n,c,s),i.mode===re.COLUMBUS_VIEW&&m.fromElements(s.y,s.z,s.x,s),m.add(o.position,s,o.position))}var m1e=new m,L1e=new be,Gee=new m,Lee=new ie,yVt=new m,xVt=new m,TVt=new m;function _Vt(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!F.equals(o.transform,F.IDENTITY)){Ku(e,t,n);return}let a,c,d=s.geodeticSurfaceNormal(o.position,yVt);if(M.equals(t,e._rotateMousePosition)){if(e._looking)Ju(e,t,n,d);else if(e._rotating)Ku(e,t,n);else if(e._strafing)A1e(e,n);else{if(m.magnitude(o.position)<m.magnitude(e._rotateStartPosition))return;a=m.magnitude(e._rotateStartPosition),c=Gee,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,Lee),Ree(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,L1e).height,h=e._globe;if(l(h)&&u<e._minimumPickingTerrainHeight){let p=Wg(e,n.startPosition,TVt);if(l(p)){let b=!1,f=o.getPickRay(n.startPosition,x1e);if(r)b=!0,S1e(e,f,p,p);else{let y=s.geodeticSurfaceNormal(p,xVt);Math.abs(m.dot(f.direction,y))<.05?b=!0:b=m.magnitude(o.position)<m.magnitude(p)}b?(M.clone(t,e._strafeEndMousePosition),m.clone(p,e._strafeStartPosition),e._strafing=!0,vee(e,n,e._strafeStartPosition)):(a=m.magnitude(p),c=Gee,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,Lee),Ree(e,t,n,s),m.clone(p,e._rotateStartPosition))}else e._looking=!0,Ju(e,t,n,d)}else l(o.pickEllipsoid(n.startPosition,e._ellipsoid,m1e))?(Ree(e,t,n,e._ellipsoid),m.clone(m1e,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,Ku(e,t,n)):(e._looking=!0,Ju(e,t,n,d));M.clone(t,e._rotateMousePosition)}function Ku(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,b=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),b=Math.min(b,e.maximumMovementRatio);let f=h*p*Math.PI*2,y=h*b*Math.PI;if(l(i)&&l(e.maximumTiltAngle)){let _=e.maximumTiltAngle,S=m.dot(a.direction,i),A=Math.PI-Math.acos(S)+y;A>_&&(y-=A-_)}o||a.rotateRight(f),r||a.rotateUp(y),a.constrainedAxis=d}var Vee=se.clone(se.UNIT_W),h1e=se.clone(se.UNIT_W),z3=new m,H1=new m,H3=new m,f1e=new m,SVt=new M,AVt=new M,ZVt=new M,CVt=new M,VVt=new xn;function Ree(e,t,n,i){let o=e._scene,r=o.camera,s=M.clone(n.startPosition,SVt),a=M.clone(n.endPosition,AVt),c=i.cartesianToCartographic(r.positionWC,L1e).height,d,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(d=m.clone(e._panLastWorldPosition,Vee),!l(e._globe)&&!M.equalsEpsilon(s,e._panLastMousePosition)&&(d=Wg(e,s,Vee)),!l(e._globe)&&l(d))){let h=m.subtract(d,r.positionWC,H1),p=m.multiplyByScalar(r.directionWC,m.dot(r.directionWC,h),H1),b=m.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,b,o.pixelRatio,CVt),y=M.subtract(a,s,ZVt),_=m.multiplyByScalar(r.rightWC,y.x*f.x,H1),S=m.normalize(r.positionWC,y1e),A=r.getPickRay(a,VVt).direction,Z=m.subtract(A,m.projectVector(A,r.rightWC,H3),H3),V=m.angleBetween(Z,r.directionWC),E=1;l(r.frustum.fov)&&(E=Math.max(Math.tan(V),.1));let G=Math.abs(m.dot(r.directionWC,S)),v=-y.y*f.y*2/Math.sqrt(E)*(1-G),I=m.multiplyByScalar(A,v,H3);G=Math.abs(m.dot(r.upWC,S));let X=m.multiplyByScalar(r.upWC,-y.y*(1-G)*f.y,f1e);u=m.add(d,_,h1e),u=m.add(u,I,u),u=m.add(u,X,u),m.clone(u,e._panLastWorldPosition),M.clone(a,e._panLastMousePosition)}if((!l(d)||!l(u))&&(d=r.pickEllipsoid(s,i,Vee),u=r.pickEllipsoid(a,i,h1e)),!l(d)||!l(u)){e._rotating=!0,Ku(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,z3);m.cross(p,h,p),m.normalize(p,p);let b=m.cross(h,p,H1),f=m.magnitude(d),y=m.dot(h,d),_=Math.acos(y/f),S=m.multiplyByScalar(h,y,H3);m.subtract(d,S,S),m.normalize(S,S);let A=m.magnitude(u),Z=m.dot(h,u),V=Math.acos(Z/A),E=m.multiplyByScalar(h,Z,f1e);m.subtract(u,E,E),m.normalize(E,E);let G=Math.acos(m.dot(S,p));m.dot(S,b)<0&&(G=W.TWO_PI-G);let v=Math.acos(m.dot(E,p));m.dot(E,b)<0&&(v=W.TWO_PI-v);let I=G-v,X;m.equalsEpsilon(h,r.position,W.EPSILON2)?X=r.right:X=m.cross(h,r.position,z3);let N=m.cross(h,X,z3),g=m.dot(N,m.subtract(d,h,H1)),C=m.dot(N,m.subtract(u,h,H1)),R;g>0&&C>0?R=V-_:g>0&&C<=0?m.dot(r.position,h)>0?R=-_-V:R=_+V:R=_-V,r.rotateRight(I),r.rotateUp(R)}else{m.normalize(d,d),m.normalize(u,u);let h=m.dot(d,u),p=m.cross(d,u,z3);if(h<1&&!m.equalsEpsilon(p,m.ZERO,W.EPSILON14)){let b=Math.acos(h);r.rotate(p,b)}}}var RVt=new m,EVt=new be,p1e=0;function W1e(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=R1e,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,E1e),h,p=o.cartesianToCartographic(s.position,EVt).height,b=Math.abs(p1e)<e.minimumPickingTerrainDistanceWithInertia;(i?b:p<e._minimumPickingTerrainHeight)&&(h=Wg(e,d,G1e));let y;if(l(h)&&(y=m.distance(u.origin,h)),!l(e._globe)&&l(y)&&s.getMagnitude()<y&&(h=void 0,y=void 0),l(y)&&(p1e=y),c){let S=T1e(e,u,p);l(y)?y=Math.min(y,S):y=S}l(y)||(y=p);let _=m.normalize(s.position,RVt);Wee(e,t,n,e.zoomFactor,y,m.dot(_,s.direction))}var v1e=new M,Q3=new xn,SM=new m,GVt=new m,F1e=new F,LVt=new F,I1e=new F,WVt=new Pe,vVt=new q,Fee=new be,Iee=new m;function FVt(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,Iee);Ju(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,Fee);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,PVt(e,t,n)):XVt(e,t,n)}var IVt=new be;function PVt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,IVt).height;if(a-s-1<W.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,d=v1e;d.x=c.clientWidth/2,d.y=c.clientHeight/2;let u=r.getPickRay(d,Q3),h,p=mi.rayEllipsoid(u,i);if(l(p))h=xn.getPoint(u,p.start,SM);else if(a>e._minimumTrackBallHeight){let A=mi.grazingAltitudeLocation(u,i);if(!l(A))return;let Z=i.cartesianToCartographic(A,Fee);Z.height=0,h=i.cartographicToCartesian(Z,SM)}else{e._looking=!0;let A=e._ellipsoid.geodeticSurfaceNormal(r.position,Iee);Ju(e,t,n,A),M.clone(t,e._tiltCenterMousePosition);return}let b=pt.eastNorthUpToFixedFrame(h,i,F1e),f=e._globe,y=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let _=F.clone(r.transform,I1e);r._setTransform(b),Ku(e,t,n,m.UNIT_Z),r._setTransform(_),e._globe=f,e._ellipsoid=y;let S=y.maximumRadius;e._rotateFactor=1/S,e._rotateRateRangeAdjustment=S}function XVt(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,SM);else{if(a=Wg(e,t,SM),!l(a)){if(c=r.getPickRay(t,Q3),d=mi.rayEllipsoid(c,i),!l(d)){if(i.cartesianToCartographic(r.position,Fee).height<=e._minimumTrackBallHeight){e._looking=!0;let C=e._ellipsoid.geodeticSurfaceNormal(r.position,Iee);Ju(e,t,n,C),M.clone(t,e._tiltCenterMousePosition)}return}a=xn.getPoint(c,d.start,SM)}s&&(l(c)||(c=r.getPickRay(t,Q3)),_1e(e,c,a,a)),M.clone(t,e._tiltCenterMousePosition),m.clone(a,e._tiltCenter)}let u=o.canvas,h=v1e;h.x=u.clientWidth/2,h.y=e._tiltCenterMousePosition.y,c=r.getPickRay(h,Q3);let p=m.magnitude(a),b=m.fromElements(p,p,p,Gee),f=ie.fromCartesian3(b,Lee);if(d=mi.rayEllipsoid(c,f),!l(d))return;let y=m.magnitude(c.origin)>p?d.start:d.stop,_=xn.getPoint(c,y,GVt),S=pt.eastNorthUpToFixedFrame(a,i,F1e),A=pt.eastNorthUpToFixedFrame(_,f,LVt),Z=e._globe,V=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let E=m.UNIT_Z,G=F.clone(r.transform,I1e);r._setTransform(A);let v=m.cross(_,r.positionWC,j3);if(m.dot(r.rightWC,v)<0){let g=n.startPosition.y-n.endPosition.y;(s&&g<0||!s&&g>0)&&(E=void 0);let C=r.constrainedAxis;r.constrainedAxis=void 0,Ku(e,t,n,E,!0,!1),r.constrainedAxis=C}else Ku(e,t,n,E,!0,!1);if(r._setTransform(S),Ku(e,t,n,E,!1,!0),l(r.constrainedAxis)){let g=m.cross(r.direction,r.constrainedAxis,j3);m.equalsEpsilon(g,m.ZERO,W.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(G),e._globe=Z,e._ellipsoid=V;let X=V.maximumRadius;e._rotateFactor=1/X,e._rotateRateRangeAdjustment=X;let N=m.clone(r.positionWC,j3);if(e.enableCollisionDetection&&Pee(e,!0),!m.equals(r.positionWC,N)){r._setTransform(A),r.worldToCameraCoordinatesPoint(N,N);let g=m.magnitudeSquared(N);m.magnitudeSquared(r.position)>g&&(m.normalize(r.position,r.position),m.multiplyByScalar(r.position,Math.sqrt(g),r.position));let C=m.angleBetween(N,r.position),R=m.cross(N,r.position,N);m.normalize(R,R);let L=Pe.fromAxisAngle(R,C,WVt),P=q.fromQuaternion(L,vVt);q.multiplyByVector(P,r.direction,r.direction),q.multiplyByVector(P,r.up,r.up),m.cross(r.direction,r.up,r.right),m.cross(r.right,r.direction,r.up),r._setTransform(G)}}var NVt=new M,YVt=new M,b1e=new xn,g1e=new xn,wVt=new m,MVt=new m;function Ju(e,t,n,i){let r=e._scene.camera,s=NVt;s.x=n.startPosition.x,s.y=0;let a=YVt;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,b1e),d=r.getPickRay(a,g1e),u=0,h,p;r.frustum instanceof fn?(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 b=m.dot(h,p);b<1&&(u=Math.acos(b)),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,b1e),d=r.getPickRay(a,g1e),u=0,r.frustum instanceof fn?(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),b=m.dot(h,p),b<1&&(u=Math.acos(b)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??f,l(i)){let y=r.direction,_=m.negate(i,wVt),S=m.equalsEpsilon(y,i,W.EPSILON2),A=m.equalsEpsilon(y,_,W.EPSILON2);if(!S&&!A){b=m.dot(y,i);let Z=W.acosClamped(b);u>0&&u>Z&&(u=Z-W.EPSILON4),b=m.dot(y,_),Z=W.acosClamped(b),u<0&&-u>Z&&(u=-Z+W.EPSILON4);let V=m.cross(i,y,MVt);r.look(V,u)}else(S&&u<0||A&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function kVt(e){cd(e,e.enableRotate,e.rotateEventTypes,_Vt,e.inertiaSpin,"_lastInertiaSpinMovement"),cd(e,e.enableZoom,e.zoomEventTypes,W1e,e.inertiaZoom,"_lastInertiaZoomMovement"),cd(e,e.enableTilt,e.tiltEventTypes,FVt,e.inertiaSpin,"_lastInertiaTiltMovement"),cd(e,e.enableLook,e.lookEventTypes,Ju)}var UVt=new F,DVt=new be;function Pee(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===re.SCENE2D||i===re.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,UVt),c=m.magnitude(o.position),o._setTransform(F.IDENTITY));let d=DVt;i===re.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,b=h-e._lastGlobeHeight,f=b/e._lastGlobeHeight;d.height<p&&(t||Math.abs(f)<=.1)&&(d.height=p,i===re.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(f)<=.1?e._lastGlobeHeight=h:e._lastGlobeHeight+=b*.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)))}AM.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===re.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var OVt=new m,BVt=new m;AM.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=Zo.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Zo.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Zo.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,OVt),c=m.clone(t.directionWC,BVt);if(i===re.SCENE2D?DCt(this):i===re.COLUMBUS_VIEW?(this._horizontalRotationAxis=m.UNIT_Z,hVt(this)):i===re.SCENE3D&&(this._horizontalRotationAxis=void 0,kVt(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!m.equals(a,t.positionWC)||!m.equals(c,t.directionWC);Pee(this,d)}this._aggregator.reset()};AM.prototype.isDestroyed=function(){return!1};AM.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),he(this)};var ZM=AM;var Oio=x(T(),1);var Aio=x(T(),1),CM=`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 Cio=x(T(),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 vg(){this._sceneFramebuffer=new lA;let e=.125,t=new Array(6);t[0]=new vo({fragmentShader:Bd,textureScale:e,forcePowerOfTwo:!0,sampleMode:Ou.LINEAR});let n=t[1]=new vo({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 vo({fragmentShader:Hx,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 vo({fragmentShader:Hx,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 vo({fragmentShader:Bd,sampleMode:Ou.LINEAR}),this._uCenter=new M,this._uRadius=void 0,t[5]=new vo({fragmentShader:CM,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new zd({stages:t});let o=new bA(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}vg.prototype.get=function(e){return this._stages.get(e)};vg.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 zVt=new se,P1e=new M,HVt=new M,X1e=new F;function KVt(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,X1e),d=F.multiplyByPoint(r,o,zVt),u=pt.pointToGLWindowCoordinates(s,c,o,P1e);d.x+=W.SOLAR_RADIUS;let h=pt.pointToGLWindowCoordinates(a,c,d,d),p=M.magnitude(M.subtract(h,u,h))*30*2,b=HVt;b.x=p,b.y=p,e._uCenter=M.clone(u,e._uCenter),e._uRadius=Math.max(b.x,b.y)*.15;let f=t.drawingBufferWidth,y=t.drawingBufferHeight,_=e._stages,S=_.get(0),A=S.outputTexture.width,Z=S.outputTexture.height,V=new Qe;V.width=A,V.height=Z,c=F.computeViewportTransformation(V,0,1,X1e),u=pt.pointToGLWindowCoordinates(s,c,o,P1e),b.x*=A/f,b.y*=Z/y;let E=S.scissorRectangle;E.x=Math.max(u.x-b.x*.5,0),E.y=Math.max(u.y-b.y*.5,0),E.width=Math.min(b.x,f),E.height=Math.min(b.y,y);for(let G=1;G<4;++G)Qe.clone(E,_.get(G).scissorRectangle)}vg.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};vg.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),KVt(this,t,n),o};vg.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)};vg.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Bd,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};vg.prototype.isDestroyed=function(){return!1};vg.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),he(this)};var RM=vg;var Qio=x(T(),1);function N1e(){this._cachedShowFrustumsShaders={}}function JVt(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function jVt(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=Oe.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=JVt(i);return $t.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var EM=new U;function QVt(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?(EM.red=t.debugOverlappingFrustums&1?1:0,EM.green=t.debugOverlappingFrustums&2?1:0,EM.blue=t.debugOverlappingFrustums&4?1:0,EM.alpha=1,EM):U.WHITE}),n}var qVt=new et;N1e.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];l(o)||(o=jVt(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=et.shallowClone(t,qVt);r.shaderProgram=o,r.uniformMap=QVt(e,t),r.execute(e.context,n)};var GM=N1e;var ioo=x(T(),1);function SA(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new en}SA.fromKeyframeNode=function(e,t,n,i){let o=new SA(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=$Vt(e,s,n),o._orientedBoundingBox=t1t(e,r,n,o._orientedBoundingBox),o};function $Vt(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=xt.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[c]=u}return s}var Y1e=new m,e1t=new m;function t1t(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,Y1e),h=m.divideComponents(m.subtract(u,e._paddingBefore,Y1e),e.dimensions,e1t);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,h,i)}Object.defineProperties(SA.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()}}});SA.prototype.hasProperty=function(e){return l(this._metadata[e])};SA.prototype.getNames=function(){return Object.keys(this._metadata)};SA.prototype.getProperty=function(e){return this._metadata[e]};var LM=SA;var Yco=x(T(),1);var Bro=x(T(),1);var coo=x(T(),1);function n1t(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,ge.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,ge.FRAGMENT);for(let g=0;g<c;g++){let C=i[g],R=$3(o[g]),L=`PropertyStatistics_${C}`,P=`PropertyStatistics_${C}`;n.addStruct(L,P,ge.FRAGMENT),n.addStructField(L,R,"min"),n.addStructField(L,R,"max")}let u="MetadataStatistics",h="MetadataStatistics",p="metadataStatistics";n.addStruct(u,h,ge.FRAGMENT);for(let g=0;g<c;g++){let C=i[g],R=`PropertyStatistics_${C}`,L=C;n.addStructField(u,R,L)}let b="Metadata",f="Metadata",y="metadata";n.addStruct(b,f,ge.FRAGMENT);for(let g=0;g<c;g++){let C=$3(o[g]);n.addStructField(b,C,i[g])}let _="Attributes",S="Attributes",A="attributes";n.addStruct(_,S,ge.FRAGMENT),n.addStructField(_,"vec3","positionEC"),n.addStructField(_,"vec3","normalEC");let Z="Voxel",V="Voxel",E="voxel";n.addStruct(Z,V,ge.FRAGMENT),n.addStructField(Z,"vec3","viewDirUv"),n.addStructField(Z,"float","travelDistance"),n.addStructField(Z,"int","stepCount"),n.addStructField(Z,"int","tileIndex"),n.addStructField(Z,"int","sampleIndex"),n.addStructField(Z,"float","distanceToDepthBuffer");let G="FragmentInput";n.addStruct(G,"FragmentInput",ge.FRAGMENT),n.addStructField(G,h,p),n.addStructField(G,f,y),n.addStructField(G,S,A),n.addStructField(G,V,E);let I="Properties",X="Properties",N="properties";n.addStruct(I,X,ge.FRAGMENT);for(let g=0;g<c;g++){let C=$3(o[g]);n.addStructField(I,C,i[g])}{let g="clearProperties";n.addFunction(g,`${X} clearProperties()`,ge.FRAGMENT),n.addFunctionLines(g,[`${X} ${N};`]);for(let C=0;C<c;C++){let R=$3(o[C],r[C]);n.addFunctionLines(g,[`${N}.${i[C]} = ${R}(0.0);`])}n.addFunctionLines(g,[`return ${N};`])}{let g="sumProperties";n.addFunction(g,`${X} sumProperties(${X} propertiesA, ${X} propertiesB)`,ge.FRAGMENT),n.addFunctionLines(g,[`${X} ${N};`]);for(let C=0;C<c;C++){let R=i[C];n.addFunctionLines(g,[`${N}.${R} = propertiesA.${R} + propertiesB.${R};`])}n.addFunctionLines(g,[`return ${N};`])}{let g="scaleProperties";n.addFunction(g,`${X} scaleProperties(${X} ${N}, float scale)`,ge.FRAGMENT),n.addFunctionLines(g,[`${X} scaledProperties = ${N};`]);for(let C=0;C<c;C++)n.addFunctionLines(g,[`scaledProperties.${i[C]} *= scale;`]);n.addFunctionLines(g,["return scaledProperties;"])}{let g="mixProperties";n.addFunction(g,`${X} mixProperties(${X} propertiesA, ${X} propertiesB, float mixFactor)`,ge.FRAGMENT),n.addFunctionLines(g,[`${X} ${N};`]);for(let C=0;C<c;C++){let R=i[C];n.addFunctionLines(g,[`${N}.${R} = mix(propertiesA.${R}, propertiesB.${R}, mixFactor);`])}n.addFunctionLines(g,[`return ${N};`])}{let g="copyPropertiesToMetadata";n.addFunction(g,`void copyPropertiesToMetadata(in ${X} ${N}, inout ${f} ${y})`,ge.FRAGMENT);for(let C=0;C<c;C++){let R=i[C];n.addFunctionLines(g,[`${y}.${R} = ${N}.${R};`])}}if(d){let g="setStatistics";n.addFunction(g,`void setStatistics(inout ${h} ${p})`,ge.FRAGMENT);for(let C=0;C<c;C++){let R=i[C],L=o[C],P=xt.getComponentCount(L);for(let Y=0;Y<P;Y++){let O=o1t(L,Y),k=s[C][Y],D=a[C][Y];!l(k)||!l(D)||n.addFunctionLines(g,[`${p}.${R}.min${O} = ${w1e(k)};`,`${p}.${R}.max${O} = ${w1e(D)};`])}}}{let g="getPropertiesFromMegatextureAtUv";n.addFunction(g,`${X} getPropertiesFromMegatextureAtUv(vec3 texcoord)`,ge.FRAGMENT),n.addFunctionLines(g,[`${X} ${N};`]);for(let C=0;C<c;C++){let R=o[C],L=r[C],P=i1t(R,L);n.addFunctionLines(g,[`properties.${i[C]} = texture(u_megatextureTextures[${C}], texcoord)${P};`])}n.addFunctionLines(g,[`return ${N};`])}}function $3(e){if(e===xt.SCALAR)return"float";if(e===xt.VEC2)return"vec2";if(e===xt.VEC3)return"vec3";if(e===xt.VEC4)return"vec4"}function i1t(e){if(e===xt.SCALAR)return".r";if(e===xt.VEC2)return".ra";if(e===xt.VEC3)return".rgb";if(e===xt.VEC4)return""}function w1e(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function o1t(e,t){return e===xt.SCALAR?"":`[${t}]`}var WM=n1t;var Voo=x(T(),1);function Uf(e){let{planes:t,modelMatrix:n=F.IDENTITY,unionClippingRegions:i=!1}=e??B.EMPTY_OBJECT;if(this._planes=[],this.modelMatrix=F.clone(n),this.planeAdded=new _e,this.planeRemoved=new _e,this._unionClippingRegions=i,this._testIntersection=i?M1e:k1e,this._float32View=void 0,this._clippingPlanesTexture=void 0,l(t))for(let o=0;o<t.length;++o)this.add(t[o])}function M1e(e){return e===Jt.OUTSIDE}function k1e(e){return e===Jt.INSIDE}Object.defineProperties(Uf.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?M1e:k1e)}},texture:{get:function(){return this._clippingPlanesTexture}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});Uf.prototype.add=function(e){let t=this._planes.length;e.index=t,this._planes.push(e),this.planeAdded.raiseEvent(e,t)};Uf.prototype.get=function(e){return this._planes[e]};function U1e(e,t){for(let n=0;n<e.length;++n)if(an.equals(e[n],t))return n;return-1}Uf.prototype.contains=function(e){return U1e(this._planes,e)!==-1};Uf.prototype.remove=function(e){let t=this._planes,n=U1e(t,e);if(n===-1)return!1;e instanceof Qs&&(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 Qs&&(r.index=o)}return t.length=i,this.planeRemoved.raiseEvent(e,n),!0};Uf.prototype.removeAll=function(){let e=this._planes;for(let t=0;t<e.length;++t){let n=e[t];n instanceof Qs&&(n.onChangeCallback=void 0,n.index=-1),this.planeRemoved.raiseEvent(n,t)}this._planes=[]};var r1t=new an(m.fromElements(1,0,0),0);function s1t(e,t){let n=e._float32View,i=e._planes,o=0;for(let r=0;r<i.length;++r){let{normal:s,distance:a}=c1t(i[r],t,r1t);n[o]=s.x,n[o+1]=s.y,n[o+2]=s.z,n[o+3]=a,o+=4}}var Xee=new se,a1t=new m;function c1t(e,t,n){let{normal:i,distance:o}=e,r=se.fromElements(i.x,i.y,i.z,o,Xee),s=F.multiplyByVector(t,r,Xee),a=m.fromCartesian4(s,a1t);return s=se.divideByScalar(s,m.magnitude(a),Xee),an.fromCartesian4(s,n)}function D1e(e,t){return t.x=Math.min(e,vt.maximumTextureSize),t.y=Math.ceil(e/t.x),t}var l1t=new M;Uf.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=D1e(i,l1t);s.y*=2,n=new Lt({context:e.context,width:s.x,height:s.y,pixelFormat:Ke.RGBA,pixelDatatype:De.FLOAT,sampler:zt.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4),this._clippingPlanesTexture=n}let{width:o,height:r}=n;s1t(this,t),n.copyFrom({source:{width:o,height:r,arrayBufferView:this._float32View}})};Uf.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=D1e(o,n);return r.y*=2,r};Uf.prototype.isDestroyed=function(){return!1};Uf.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),he(this)};var Fg=Uf;var Lro=x(T(),1);var Eoo=x(T(),1),vM=`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 Loo=x(T(),1),FM=`// 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 voo=x(T(),1),IM=`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 Ioo=x(T(),1),PM=`/* 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 Xoo=x(T(),1),XM=`// 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 Yoo=x(T(),1),NM=`// 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 Moo=x(T(),1),K1=`// 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 Uoo=x(T(),1),YM=`// 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 Ooo=x(T(),1),wM=`// 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 zoo=x(T(),1),MM=`// 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 Koo=x(T(),1),AA=`// 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 joo=x(T(),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 qoo=x(T(),1),UM=`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 ero=x(T(),1),DM=`/* 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 nro=x(T(),1),OM=`// 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 oro=x(T(),1),BM=`// 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 sro=x(T(),1),d1t={Z_UP:0,Y_UP:1},b0=Object.freeze(d1t);function u1t(e){let t=new Y0;this.shaderBuilder=t;let n=e._customShader,i=Gt(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let f in o)if(o.hasOwnProperty(f)){let y=o[f];t.addUniform(y.type,f,ge.FRAGMENT)}t.addUniform("sampler3D","u_megatextureTextures[METADATA_COUNT]",ge.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([IM]),e.provider.metadataOrder===b0.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,ge.FRAGMENT);let d=e._provider.shape;d==="BOX"?t.addDefine("SHAPE_BOX",void 0,ge.FRAGMENT):d==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,ge.FRAGMENT):d==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,ge.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",OM,vM,BM,PM,NM,XM]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,ge.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,ge.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,ge.FRAGMENT)),e._depthTest&&t.addDefine("DEPTH_TEST",void 0,ge.FRAGMENT),d==="BOX"?t.addFragmentLines([kM,YM,AA]):d==="CYLINDER"?t.addFragmentLines([UM,K1,wM,AA]):d==="ELLIPSOID"&&t.addFragmentLines([DM,K1,MM,AA]),t.addFragmentLines([FM]);let u=e._shape,h=u.shaderDefines;for(let f in h)if(h.hasOwnProperty(f)){let y=h[f];l(y)&&(y=y===!0?void 0:y,t.addDefine(f,y,ge.FRAGMENT))}let p=u.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",p,ge.FRAGMENT),s===1?p+=1:r.unionClippingRegions?p+=2:p+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",p,ge.FRAGMENT),p+=1),t.addDefine("INTERSECTION_COUNT",p,ge.FRAGMENT),(!m.equals(e.paddingBefore,m.ZERO)||!m.equals(e.paddingAfter,m.ZERO))&&t.addDefine("PADDING",void 0,ge.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,ge.FRAGMENT);let b=e._traversal;t.addDefine("SAMPLE_COUNT",`${b._sampleCount}`,ge.FRAGMENT)}var zM=u1t;var O1e=new M;function m1t(e,t){let n=new zM(e);WM(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r,renderBoundPlanes:s,renderBoundPlanesLength:a}=n;if(r>0){let Z="getClippingPlane",V=`vec4 ${Z}(highp sampler2D packedPlanes, int planeNumber)`,E=us.getTextureResolution(o,t,O1e),G=B1e(E);i.addFunction(Z,V,ge.FRAGMENT),i.addFunctionLines(Z,[G])}if(a>0){let Z="getBoundPlane",V=`vec4 ${Z}(highp sampler2D packedPlanes, int planeNumber)`,E=Fg.getTextureResolution(s,t,O1e),G=B1e(E);i.addFunction(Z,V,ge.FRAGMENT),i.addFunctionLines(Z,[G])}let c=i.clone();c.addDefine("PICKING",void 0,ge.FRAGMENT);let d=i.clone();d.addDefine("PICKING_VOXEL",void 0,ge.FRAGMENT);let u=i.buildShaderProgram(t),h=c.buildShaderProgram(t),p=d.buildShaderProgram(t),b=Ue.fromCache({cull:{enabled:!0,face:wi.BACK},depthTest:{enabled:!1},depthMask:!1,blending:rn.PRE_MULTIPLIED_ALPHA_BLEND}),f=t.getViewportQuadVertexArray(),y=e._depthTest,_=new et({vertexArray:f,primitiveType:ve.TRIANGLES,renderState:b,shaderProgram:u,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Le.VOXELS,executeInClosestFrustum:!0,owner:this,cull:y,occlude:y}),S=et.shallowClone(_,new et);S.shaderProgram=h,S.pickOnly=!0;let A=et.shallowClone(_,new et);if(A.shaderProgram=p,A.pickOnly=!0,l(e._drawCommand)){let Z=e._drawCommand;Z.shaderProgram=Z.shaderProgram&&Z.shaderProgram.destroy()}if(l(e._drawCommandPick)){let Z=e._drawCommandPick;Z.shaderProgram=Z.shaderProgram&&Z.shaderProgram.destroy()}if(l(e._drawCommandPickVoxel)){let Z=e._drawCommandPickVoxel;Z.shaderProgram=Z.shaderProgram&&Z.shaderProgram.destroy()}e._drawCommand=_,e._drawCommandPick=S,e._drawCommandPickVoxel=A}function B1e(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 HM=m1t;var bso=x(T(),1);var Hro=x(T(),1),h1t={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"},J1=Object.freeze(h1t);var sso=x(T(),1);var Jro=x(T(),1);function f1t(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 KM=f1t;function j1(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}j1.prototype.getTexture=function(e){return this._textures[e]};function p1t(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})}j1.prototype.loadTexture2D=function(e,t){l(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):p1t(this,e,t)};function b1t(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?ez(o,r,n):g1t(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)?H1e(e,n):new Lt({context:n,source:t,sampler:o});return z1e(o)&&r.generateMipmap(),r}function g1t(e,t,n){let{typedArray:i,sampler:o}=e,r=z1e(o),s=o.wrapS===hn.REPEAT||o.wrapS===hn.MIRRORED_REPEAT||o.wrapT===hn.REPEAT||o.wrapT===hn.MIRRORED_REPEAT,{width:a,height:c}=l(i)?e:t,d=[a,c].every(W.isPowerOfTwo);if((r||s)&&!d)if(l(i)){if(e.pixelDatatype===De.UNSIGNED_BYTE){let h=KM(i,a,c),p=Cy(h);return ez({sampler:o},p,n)}}else{let h=Cy(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."),H1e(e,n)}function z1e(e){return[Bt.NEAREST_MIPMAP_NEAREST,Bt.NEAREST_MIPMAP_LINEAR,Bt.LINEAR_MIPMAP_NEAREST,Bt.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function H1e(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})}j1.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];b1t(this,o,t)}n.length=0};j1.prototype.isDestroyed=function(){return!1};j1.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=j1;function jM(e){e=e??B.EMPTY_OBJECT,this.mode=e.mode??Sb.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??B.EMPTY_OBJECT,this.varyings=e.varyings??B.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??ky.INHERIT,this._textureManager=new JM,this._defaultTexture=void 0,this.uniformMap=y1t(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},_1t(this),S1t(this)}function y1t(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===J1.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=x1t(e,i)):n[i]=T1t(e,i)}return n}function x1t(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function T1t(e,t){return function(){return e.uniforms[t].value}}function ZA(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function _1t(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,ZA(r,t,o),o=e.usedVariablesVertex.featureIdSet,ZA(r,n,o),o=e.usedVariablesVertex.metadataSet,ZA(r,i,o));let s=e.fragmentShaderText;if(l(s)){o=e.usedVariablesFragment.attributeSet,ZA(s,t,o),o=e.usedVariablesFragment.featureIdSet,ZA(s,n,o),o=e.usedVariablesFragment.metadataSet,ZA(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;ZA(s,a,c)}}function K1e(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 pl(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${K1e(t)} is not available in the ${i} shader. Did you mean ${K1e(n)} instead?`;throw new fe(o)}}function S1t(e){let t=e.usedVariablesVertex.attributeSet;pl(t,"position","positionMC","vertex"),pl(t,"normal","normalMC","vertex"),pl(t,"tangent","tangentMC","vertex"),pl(t,"bitangent","bitangentMC","vertex"),pl(t,"positionWC","positionMC","vertex"),pl(t,"positionEC","positionMC","vertex"),pl(t,"normalEC","normalMC","vertex"),pl(t,"tangentEC","tangentMC","vertex"),pl(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;pl(n,"position","positionEC","fragment"),pl(n,"normal","normalEC","fragment"),pl(n,"tangent","tangentEC","fragment"),pl(n,"bitangent","bitangentEC","fragment"),pl(n,"normalMC","normalEC","fragment"),pl(n,"tangentMC","tangentEC","fragment"),pl(n,"bitangentMC","bitangentEC","fragment")}jM.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===J1.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):l(t.clone)?n.value=t.clone(n.value):n.value=t};jM.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};jM.prototype.isDestroyed=function(){return!1};jM.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),he(this)};var CA=jM;var Zso=x(T(),1);function Ig(e){let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(Ig.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});Ig.fromMetadataArray=function(e){return new Ig({metadata:e})};Ig.fromGltf=async function(e){let t=new mu({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new Ig({loader:t})};Ig.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=A1t(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function A1t(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(_=>_.name===h);if(!l(p))continue;let b=Nt.toComponentDatatype(s[u]),f=xt.getComponentCount(r[u]),y=p.count*f;d[u]=K.createArrayBufferView(b,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,y)}return d}Ig.prototype.isDestroyed=function(){return!1};Ig.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),he(this)};var VA=Ig;var uao=x(T(),1);var Iso=x(T(),1);function bl(){this._orientedBoundingBox=new en,this._boundingSphere=new de,this._boundTransform=new F,this._shapeTransform=new F,this._minBounds=bl.DefaultMinBounds.clone(),this._maxBounds=bl.DefaultMaxBounds.clone(),this._renderMinBounds=bl.DefaultMinBounds.clone(),this._renderMaxBounds=bl.DefaultMaxBounds.clone();let{DefaultMinBounds:e,DefaultMaxBounds:t}=bl,n=[new Qs(m.negate(m.UNIT_X,new m),e.x),new Qs(m.negate(m.UNIT_Y,new m),e.y),new Qs(m.negate(m.UNIT_Z,new m),e.z),new Qs(m.UNIT_X,-t.x),new Qs(m.UNIT_Y,-t.y),new Qs(m.UNIT_Z,-t.z)];this._renderBoundPlanes=new Fg({planes:n}),this._shaderUniforms={boxEcToXyz:new q,boxLocalToShapeUvScale:new m,boxLocalToShapeUvTranslate:new m},this._shaderDefines={BOX_INTERSECTION_INDEX:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(bl.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 Z1t=new m,C1t=new m,V1t=new q,R1t=new m,E1t=new m;bl.prototype.update=function(e,t,n,i,o){i=i??t.clone(R1t),o=o??n.clone(E1t),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,C1t);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=wee(r,s,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=F.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=de.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let d=this._shaderUniforms,u=this._shaderDefines;for(let y in u)u.hasOwnProperty(y)&&(u[y]=void 0);let h=0;u.BOX_INTERSECTION_INDEX=h,h+=1;let p=t,b=n,f=m.fromElements(Nee(p.x,b.x),Nee(p.y,b.y),Nee(p.z,b.z),d.boxLocalToShapeUvScale);return d.boxLocalToShapeUvTranslate=m.negate(m.multiplyComponents(f,p,d.boxLocalToShapeUvTranslate),d.boxLocalToShapeUvTranslate),this._shaderMaximumIntersectionsLength=h,!0};function Nee(e,t){return W.equalsEpsilon(e,t,W.EPSILON7)?1:1/(t-e)}var G1t=new F;bl.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=F.inverse(this._shapeTransform,G1t),i=F.getMatrix3(n,t.boxEcToXyz),o=e.context.uniformState.inverseViewRotation;q.multiply(i,o,t.boxEcToXyz)};bl.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,Yee=new m;bl.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(W.lerp(r.x,s.x,a*t),W.lerp(r.y,s.y,a*n),W.lerp(r.z,s.z,a*i),tz),d=m.fromElements(W.lerp(r.x,s.x,a*(t+1)),W.lerp(r.y,s.y,a*(n+1)),W.lerp(r.z,s.z,a*(i+1)),Yee);return wee(c,d,this._shapeTransform,o)};var J1e=new m;bl.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,J1e),s=m.multiplyByScalar(r,o,J1e),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,Yee),d=this._minBounds,u=this._maxBounds,h=m.fromElements(W.lerp(d.x,u.x,a.x),W.lerp(d.y,u.y,a.y),W.lerp(d.z,u.z,a.z),tz),p=m.fromElements(W.lerp(d.x,u.x,c.x),W.lerp(d.y,u.y,c.y),W.lerp(d.z,u.z,c.z),Yee);return wee(h,p,this._shapeTransform,i)};bl.DefaultMinBounds=Object.freeze(new m(-1,-1,-1));bl.DefaultMaxBounds=Object.freeze(new m(1,1,1));var j1e=new m;function wee(e,t,n,i){let o=bl.DefaultMinBounds,r=bl.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,j1e),c=m.midpoint(e,t,Z1t);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),j1e);let d=F.getRotation(n,V1t);i.halfAxes=q.setScale(d,a,i.halfAxes)}return i}var RA=bl;var zso=x(T(),1);function ju(){this._orientedBoundingBox=new en,this._boundingSphere=new de,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 Qs(m.negate(m.UNIT_Z,new m),e.z),new Qs(m.UNIT_Z,-t.z)];this._renderBoundPlanes=new Fg({planes:n}),this._shaderUniforms={cameraShapePosition:new m,cylinderEcToRadialTangentUp:new q,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 L1t=new m,W1t=new m,v1t=new m,F1t=new m,I1t=new m,P1t=new F,X1t=new m,Q1e=new M;ju.prototype.update=function(e,t,n,i,o){i=i??t.clone(W1t),o=o??n.clone(v1t),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=W.EPSILON10,u=W.EPSILON10;t.x=Math.max(0,t.x),n.x=Math.max(0,n.x),t.y=W.negativePiToPi(t.y),n.y=W.negativePiToPi(n.y),i.y=W.negativePiToPi(i.y),o.y=W.negativePiToPi(o.y);let h=m.maximumByComponent(t,i,F1t),p=m.minimumByComponent(n,o,I1t),b=F.getScale(e,L1t);if(p.x===0||h.x>p.x||h.z>p.z||W.equalsEpsilon(b.x,0,void 0,d)||W.equalsEpsilon(b.y,0,void 0,d)||W.equalsEpsilon(b.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=Uee(h,p,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=F.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=de.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let y=n.y<t.y,_=n.y-t.y+y*a,S=p.y<h.y,A=p.y-h.y+S*a,Z=A>=c-u&&A<a-u,V=A>u&&A<c-u,E=A<=u,G=Z||V||E,v=this._shaderUniforms,I=this._shaderDefines;for(let w in I)I.hasOwnProperty(w)&&(I[w]=void 0);let X=0;I.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=X,X+=1,_<a-u&&(I.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0),h.x!==r.x&&(I.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,I.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=X,X+=1),v.cylinderRenderRadiusMinMax=M.fromElements(h.x,p.x,v.cylinderRenderRadiusMinMax),h.x===p.x&&(I.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0);let N=n.x-t.x,g=0,C=1;N!==0&&(g=1/N,C=-t.x*g),v.cylinderLocalToShapeUvRadius=M.fromElements(g,C,v.cylinderLocalToShapeUvRadius);let R=n.z-t.z,L=0,P=1;R!==0&&(L=1/R,P=-t.z*L),v.cylinderLocalToShapeUvHeight=M.fromElements(L,P,v.cylinderLocalToShapeUvHeight),G&&(I.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,I.CYLINDER_INTERSECTION_INDEX_ANGLE=X,Z?(I.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,X+=1):V?(I.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,X+=2):E&&(I.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,X+=2),v.cylinderRenderAngleMinMax=M.fromElements(h.y,p.y,v.cylinderRenderAngleMinMax));let Y=(t.y-r.y)/a,O=(n.y-r.y)/a,k=1-_/a,D=(O+.5*k)%1;if(v.cylinderShapeUvAngleRangeOrigin=D,_<=u)v.cylinderLocalToShapeUvAngle=M.fromElements(0,1,v.cylinderLocalToShapeUvAngle);else{let w=a/_,z=Y-D,J=-w*(z-Math.floor(z));v.cylinderLocalToShapeUvAngle=M.fromElements(w,J,v.cylinderLocalToShapeUvAngle)}return this._shaderMaximumIntersectionsLength=X,!0};var N1t=new q,Y1t=new q,w1t=new F;ju.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=F.inverse(this._shapeTransform,P1t),i=F.multiplyByPoint(n,e.camera.positionWC,X1t);t.cameraShapePosition=m.fromElements(M.magnitude(i),Math.atan2(i.y,i.x),i.z,t.cameraShapePosition);let o=M.normalize(M.fromCartesian3(i,Q1e),Q1e),r=q.fromRowMajorArray([o.x,o.y,0,-o.y,o.x,0,0,0,1],N1t),s=e.context.uniformState.inverseView,a=F.multiplyTransformation(n,s,w1t),c=F.getMatrix3(a,Y1t);t.cylinderEcToRadialTangentUp=q.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,kee=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(W.lerp(r.x,s.x,t*a),W.lerp(r.y,s.y,n*a),W.lerp(r.z,s.z,i*a),nz),d=m.fromElements(W.lerp(r.x,s.x,(t+1)*a),W.lerp(r.y,s.y,(n+1)*a),W.lerp(r.z,s.z,(i+1)*a),kee);return Uee(c,d,this._shapeTransform,o)};var q1e=new m;ju.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,q1e),s=m.multiplyByScalar(r,o,q1e),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,kee),d=this._minBounds,u=this._maxBounds,h=m.fromElements(W.lerp(d.x,u.x,a.x),W.lerp(d.y,u.y,a.y),W.lerp(d.z,u.z,a.z),nz),p=m.fromElements(W.lerp(d.x,u.x,c.x),W.lerp(d.y,u.y,c.y),W.lerp(d.z,u.z,c.z),kee);return Uee(h,p,this._shapeTransform,i)};ju.DefaultMinBounds=Object.freeze(new m(0,-W.PI,-1));ju.DefaultMaxBounds=Object.freeze(new m(1,+W.PI,1));var M1t=5,k1t=new Array(M1t),U1t=new m,D1t=new q,O1t=new F,B1t=new F,z1t=new F,Mee=new F,H1t=new m,K1t=new m,J1t=new m,eRe=new Array(8);for(let e=0;e<8;e++)eRe[e]=new m;function $1e(e,t,n){return Math.abs(se.dot(e,t))<n}function j1t(e){let t=F.getColumn(e,0,H1t),n=F.getColumn(e,1,K1t),i=F.getColumn(e,2,J1t),o=W.EPSILON4;return $1e(t,n,o)&&$1e(n,i,o)}function Q1t(e,t){let n=eRe;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 en.fromPoints(n,t)}var q1t=new m;function Uee(e,t,n,i){let o=e.x,r=t.x,s=e.y,a=t.y<s?t.y+W.TWO_PI:t.y,c=e.z,d=t.z,u=a-s,h=s+u*.5,p=k1t,b=0;p[b++]=s,p[b++]=a,p[b++]=h,u>W.PI&&(p[b++]=h-W.PI_OVER_TWO,p[b++]=h+W.PI_OVER_TWO);let f=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY,_=Number.NEGATIVE_INFINITY,S=Number.NEGATIVE_INFINITY;for(let Y=0;Y<b;++Y){let O=p[Y]-h,k=Math.cos(O),D=Math.sin(O),w=k*o,z=D*o,J=k*r,ee=D*r;f=Math.min(f,w,J),y=Math.min(y,z,ee),_=Math.max(_,w,J),S=Math.max(S,z,ee)}let A=_-f,Z=S-y,V=d-c,E=(f+_)*.5,G=(y+S)*.5,v=(c+d)*.5,I=m.fromElements(E,G,v,U1t),X=q.fromRotationZ(h,D1t),N=m.fromElements(A,Z,V,q1t),g=F.fromScale(N,z1t),C=F.fromRotation(X,B1t),R=F.fromTranslation(I,O1t),L=F.multiplyTransformation(C,F.multiplyTransformation(R,g,Mee),Mee),P=F.multiplyTransformation(n,L,Mee);return j1t(P)?en.fromTransformation(P,i):Q1t(P,i)}var EA=ju;var sao=x(T(),1);function hh(){this._orientedBoundingBox=new en,this._boundingSphere=new de,this._boundTransform=new F,this._shapeTransform=new F,this._rectangle=new ce,this._minimumHeight=hh.DefaultMinBounds.z,this._maximumHeight=hh.DefaultMaxBounds.z,this._ellipsoid=new ie,this._translation=new m,this._rotation=new q,this._shaderUniforms={cameraPositionCartographic:new m,ellipsoidEcToEastNorthUp:new q,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(hh.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 $1t=new m,eRt=new m,tRt=new m,nRt=new m,iRt=new m,oRt=new m,rRt=new m,sRt=new m,tRe=new m,nRe=new m,aRt=new ce;hh.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=hh;i=i??r,o=o??s;let a=W.EPSILON10,c=W.EPSILON3,d=W.EPSILON10,u=W.EPSILON10,h=W.EPSILON3,p=F.getScale(e,sRt),b=m.clone(r,$1t);b.z=-m.minimumComponent(p);let f=m.clamp(t,b,s,eRt),y=m.clamp(n,b,s,tRt),_=m.clamp(i,b,s,nRt),S=m.clamp(o,b,s,iRt),A=m.maximumByComponent(f,_,oRt),Z=m.minimumByComponent(y,S,rRt),V=m.add(p,m.fromElements(y.z,y.z,y.z,tRe),tRe),E=m.add(p,m.fromElements(Z.z,Z.z,Z.z,nRe),nRe);if(A.y>Z.y||A.y===s.y||Z.y===r.y||A.z>Z.z||W.equalsEpsilon(E,m.ZERO,void 0,a))return!1;this._rectangle=ce.fromRadians(f.x,f.y,y.x,y.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=y.z;let G=ce.fromRadians(A.x,A.y,Z.x,Z.y,aRt);this._orientedBoundingBox=Dee(G,A.z,Z.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=de.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let v=s.x-r.x,I=.5*v,X=Z.x<A.x,N=Z.x-A.x+X*v,g=N<=d,C=N>=I-d&&N<v-d,R=N>d&&N<I-d,L=g||C||R,P=y.x<f.x,Y=y.x-f.x+P*v,O=Y>I+d&&Y<v-d,k=Y>=I-d&&Y<=I+d,D=Y<I-d,w=O||k||D,z=Z.y<-h,J=Z.y>=-h&&Z.y<=+h,ee=Z.y>+h&&Z.y<s.y-u,H=z||J||ee,te=A.y>r.y+u&&A.y<-h,$=A.y>=-h&&A.y<=+h,pe=A.y>+h,xe=te||$||pe,le=H||xe,Te=y.y-f.y,Se=y.y<-h,Ee=y.y>=-h&&y.y<=+h,Ve=y.y>+h&&y.y<s.y-u,we=Se||Ee||Ve,ke=f.y>r.y+u&&f.y<-h,nt=f.y>=-h&&f.y<=+h,bt=f.y>+h,He=we||(ke||nt||bt),mt=this._shaderUniforms,it=this._shaderDefines;for(let sn in it)it.hasOwnProperty(sn)&&(it[sn]=void 0);mt.ellipsoidRadii=m.clone(V,mt.ellipsoidRadii);let{x:rt,z:jt}=mt.ellipsoidRadii,Cn=jt/rt;mt.eccentricitySquared=1-Cn*Cn,mt.evoluteScale=M.fromElements((rt*rt-jt*jt)/rt,(jt*jt-rt*rt)/jt,mt.evoluteScale),mt.ellipsoidInverseRadiiSquared=m.divideComponents(m.ONE,m.multiplyComponents(mt.ellipsoidRadii,mt.ellipsoidRadii,mt.ellipsoidInverseRadiiSquared),mt.ellipsoidInverseRadiiSquared);let ct=0;it.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=ct,ct+=1,it.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=ct,ct+=1,mt.clipMinMaxHeight=M.fromElements(A.z-y.z,Z.z-y.z,mt.clipMinMaxHeight);let Wt=y.z-f.z;if(mt.ellipsoidInverseHeightDifference=1/Wt,f.z===y.z&&(mt.ellipsoidInverseHeightDifference=0),L&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,it.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=ct,C?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,ct+=1):R?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,ct+=2):g&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,ct+=2),mt.ellipsoidRenderLongitudeMinMax=M.fromElements(A.x,Z.x,mt.ellipsoidRenderLongitudeMinMax)),w){it.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0;let sn=(f.x-r.x)/v,lt=(y.x-r.x)/v,Xn=1-Y/v,pi=(lt+.5*Xn)%1;if(mt.ellipsoidShapeUvLongitudeRangeOrigin=pi,y.x<f.x&&(it.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0),Y<=d)mt.ellipsoidLocalToShapeUvLongitude=M.fromElements(0,1,mt.ellipsoidLocalToShapeUvLongitude);else{let Ut=v/Y,bo=sn-pi,ro=-Ut*(bo-Math.floor(bo));mt.ellipsoidLocalToShapeUvLongitude=M.fromElements(Ut,ro,mt.ellipsoidLocalToShapeUvLongitude)}}if(L){let sn=W.equalsEpsilon(A.x,r.x,void 0,c),lt=W.equalsEpsilon(Z.x,s.x,void 0,c);sn&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),lt&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let Xn=(f.x-r.x)/v,pi=(y.x-r.x)/v,Di=(Z.x-r.x)/v,Ut=1-N/v,bo=(Di+.5*Ut)%1;mt.ellipsoidShapeUvLongitudeMinMaxMid=m.fromElements(Xn,pi,bo,mt.ellipsoidShapeUvLongitudeMinMaxMid)}if(le&&(xe&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,it.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=ct,te?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,ct+=1):$?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,ct+=1):pe&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,ct+=2)),H&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,it.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=ct,z?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,ct+=2):J?(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,ct+=1):ee&&(it.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,ct+=1)),mt.ellipsoidRenderLatitudeSinMinMax=M.fromElements(Math.sin(A.y),Math.sin(Z.y),mt.ellipsoidRenderLatitudeSinMinMax)),He)if(it.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,Te<u)mt.ellipsoidLocalToShapeUvLatitude=M.fromElements(0,1,mt.ellipsoidLocalToShapeUvLatitude);else{let lt=(s.y-r.y)/Te,Xn=(r.y-f.y)/Te;mt.ellipsoidLocalToShapeUvLatitude=M.fromElements(lt,Xn,mt.ellipsoidLocalToShapeUvLatitude)}return this._shaderMaximumIntersectionsLength=ct,!0};var cRt=new be,lRt=new m,dRt=new F,iRe=new q;hh.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=this._ellipsoid,i=e.camera.positionWC,o=n.cartesianToCartographic(i,cRt);m.fromElements(o.longitude,o.latitude,o.height,t.cameraPositionCartographic);let r=m.fromRadians(o.longitude,o.latitude,0,n,lRt);t.ellipsoidCurvatureAtLatitude=n.getLocalCurvature(r,t.ellipsoidCurvatureAtLatitude);let s=pt.eastNorthUpToFixedFrame(r,n,dRt),a=F.getRotation(s,iRe),c=e.context.uniformState.viewRotation,d=q.multiply(c,a,iRe);t.ellipsoidEcToEastNorthUp=q.transpose(d,t.ellipsoidEcToEastNorthUp)};var dRe=new ce;hh.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=ce.subsection(this._rectangle,s,c,a,d,dRe),b=W.lerp(this._minimumHeight,this._maximumHeight,u),f=W.lerp(this._minimumHeight,this._maximumHeight,h);return Dee(p,b,f,this._ellipsoid,this._translation,this._rotation,o)};var uRt=new M,mRt=new M,QM=new M,oRe=new M,rRe=new M,qM=new M;function hRt(e,t,n,i){let o=M.abs(e,uRt),r=M.fromElements(1/t.x,1/t.y,mRt),s=M.fromElements(Math.SQRT1_2,Math.SQRT1_2,QM),a=M.multiplyComponents(t,s,oRe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,rRe);for(let d=0;d<3;++d){let u=M.magnitude(M.subtract(a,c,qM)),h=M.normalize(M.subtract(o,c,qM),qM),p=M.multiplyByScalar(h,u,qM);s=M.multiplyComponents(M.add(p,c,QM),r,QM),s=M.normalize(M.clamp(s,M.ZERO,M.ONE,QM),QM),a=M.multiplyComponents(t,s,oRe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,rRe)}return m.fromElements(Math.sign(e.x)*a.x,Math.sign(e.y)*a.y,M.magnitude(M.subtract(a,c,qM)),i)}var fRt=new M,sRe=new M,pRt=new m,aRe=new M;hh.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,sRe),p=hRt(h,M.fromElements(i.x,i.z,fRt),o,pRt),b=M.normalize(M.fromElements(p.x*r.x,p.y*r.z,aRe),aRe),f=Math.atan2(b.y,b.x),y=M.magnitude(h)<M.magnitude(p)?-1:1,_=M.subtract(h,p,sRe),S=y*M.magnitude(_),{ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:A,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:Z}=this._shaderDefines;return n=(n+Math.PI)/(2*Math.PI),l(A)&&(n-=a,n=n-Math.floor(n),n=n*c.x+c.y),f=(f+Math.PI/2)/Math.PI,l(Z)&&(f=f*d.x+d.y),S=1+S*s,m.fromElements(n,f,S,t)};var cRe=new m,lRe=new m,bRt=new m;hh.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,cRe),s=m.multiplyByScalar(r,o,cRe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,lRe),o,lRe),c=m.add(a,s,bRt),d=ce.subsection(this._rectangle,a.x,a.y,c.x,c.y,dRe),u=W.lerp(this._minimumHeight,this._maximumHeight,a.z),h=W.lerp(this._minimumHeight,this._maximumHeight,c.z);return Dee(d,u,h,this._ellipsoid,this._translation,this._rotation,i)};function Dee(e,t,n,i,o,r,s){return s=en.fromRectangle(e,t,n,i,s),s.center=m.add(s.center,o,s.center),s.halfAxes=q.multiply(s.halfAxes,r,s.halfAxes),s}hh.DefaultMinBounds=Object.freeze(new m(-W.PI,-W.PI_OVER_TWO,-ie.WGS84.minimumRadius));hh.DefaultMaxBounds=Object.freeze(new m(W.PI,W.PI_OVER_TWO,10*ie.WGS84.maximumRadius));var GA=hh;var Qu={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};Qu.getMinBounds=function(e){switch(e){case Qu.BOX:return RA.DefaultMinBounds;case Qu.ELLIPSOID:return GA.DefaultMinBounds;case Qu.CYLINDER:return EA.DefaultMinBounds}};Qu.getMaxBounds=function(e){switch(e){case Qu.BOX:return RA.DefaultMaxBounds;case Qu.ELLIPSOID:return GA.DefaultMaxBounds;case Qu.CYLINDER:return EA.DefaultMaxBounds}};Qu.getShapeConstructor=function(e){switch(e){case Qu.BOX:return RA;case Qu.ELLIPSOID:return GA;case Qu.CYLINDER:return EA}};var yc=Object.freeze(Qu);var cco=x(T(),1);var pao=x(T(),1);function Df(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=l(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Df.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}}});Df.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Df({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};Df.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};Df.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)uRe(this,t)};Df.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++,uRe(this,i),t};Df.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],mRe(this,0)),this._array[e-1]=void 0,t};Df.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=Oee(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&mRe(this,n)}return this._array[e-1]=void 0,t};Df.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Df.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[Oee(this,1,2)?1:2]};function iz(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function $M(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function Oee(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function uRe(e,t){if(t===0)return;let n=Math.floor(W.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=$M(e,t,i);for(o!==n&&(iz(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if($M(e,t,r)!==o)break;iz(e,t,r),t=r}}function mRe(e,t){let n=e._length,i=Math.floor(W.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){$M(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;$M(e,u,r)===i&&(r=u)}}if($M(e,r,t)===i&&(iz(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);Oee(e,r,a)===i&&iz(e,r,a)}t=r}}var Pg=Df;var gao=x(T(),1),Bee=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function e9(e,t){this.spatialNode=e,this.keyframe=t,this.state=Bee.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}e9.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=Bee.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};e9.priorityComparator=function(e,t){return e.priority-t.priority};e9.searchComparator=function(e,t){return e.keyframe-t.keyframe};e9.LoadState=Bee;var Mo=e9;var Fao=x(T(),1);function g0(e,t,n,i,o=134217728,r){let s=gRt(i),a=yRt(n),c=n*Nt.getSizeInBytes(i),d=g0.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 QL({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d.x,height:d.y,depth:d.z,sampler:new zt({wrapR:hn.CLAMP_TO_EDGE,wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR,magnificationFilter:ci.LINEAR})}),this.nodes=new Array(this.maximumTileCount);for(let h=0;h<this.maximumTileCount;h++)this.nodes[h]=new xRt(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(g0.prototype,{nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling!==e&&(e?this.texture.sampler=zt.NEAREST:this.texture.sampler=new zt({wrapR:hn.CLAMP_TO_EDGE,wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR,magnificationFilter:ci.LINEAR}),this._nearestSampling=e)}}});function gRt(e){if(e===Nt.FLOAT32||e===Nt.FLOAT64)return De.FLOAT;if(e===Nt.UINT8)return De.UNSIGNED_BYTE}function yRt(e){switch(e){case 1:return Ke.RED;case 2:return Ke.RG;case 3:return Ke.RGB;case 4:return Ke.RGBA}}function xRt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}g0.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};g0.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--};g0.prototype.isFull=function(){return this.emptyList===void 0};g0.get3DTextureDimension=function(e,t,n,i){let{maximum3DTextureSize:o}=vt;if(m.maximumComponent(e)>o)throw new ue("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 ue("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=hRe(c);if(h<i)break;let p=c.slice();p.splice(u,1);let b=p[0]*p[1],f=h-i,y=Math.floor(f/b);c[u]-=y}hRe(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 hRe(e){return e.reduce((t,n)=>t*n)}g0.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)};g0.prototype.isDestroyed=function(){return!1};g0.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),he(this)};var t9=g0;var Dao=x(T(),1);function fh(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 en,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var TRt=new m;fh.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=q.getScale(this.orientedBoundingBox.halfAxes,TRt),n=2*m.maximumComponent(t);this.approximateVoxelSize=n/m.minimumComponent(this.dimensions)};fh.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(([b,f,y,_])=>new fh(b,f,y,_,this,e,this.dimensions))};fh.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};fh.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,W.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var fRe={keyframe:0};function n9(e,t){return fRe.keyframe=e,To(t,fRe,Mo.searchComparator)}fh.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=_Rt(i,h),b=h[p],f=o===i||i<b.keyframe?p:Math.min(p+1,h.length-1),y=h[f],_=i-b.keyframe,S=pRe(n-t.level,_);S<a&&(a=S,r=b);let A=y.keyframe-o,Z=pRe(n-t.level,A);if(Z<c&&(c=Z,s=y),_===0&&A===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:W.clamp((e-d)/(u-d),0,1)};function _Rt(e,t){let n=n9(e,t);return n<0?W.clamp(~n-1,0,t.length-1):n}function pRe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}fh.prototype.isVisited=function(e){return this.visitedFrameNumber===e};fh.prototype.createKeyframeNode=function(e){let t=n9(e,this.keyframeNodes);if(t<0){t=~t;let n=new Mo(this,e);this.keyframeNodes.splice(t,0,n)}};fh.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=n9(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=n9(n,this.renderableKeyframeNodes);if(o<0)throw new fe("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};fh.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=n9(e.keyframe,i);if(o>=0)throw new fe("Keyframe already renderable");o=~o,i.splice(o,0,e)};fh.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 i9=fh;function Jx(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 S=0;S<a.length;S++){let A=a[S],Z=xt.getComponentCount(A),V=c[S];this.megatextures[S]=new t9(t,s,Z,V,i,d),this.textureMemoryByteLength+=this.megatextures[S].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 i9(0,0,0,0,void 0,h,r),this._priorityQueue=new Pg({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,zee(p,1,n-2,0);let b=9,f=2048,y=Math.floor(f/b),_=Math.ceil(u/y);this.internalNodeTexture=new Lt({context:t,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,flipY:!1,width:f,height:_,sampler:new zt({minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST})}),this.internalNodeTilesPerRow=y,this.internalNodeTexelSizeUv=new M(1/f,1/_),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new M}Jx.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function zee(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,zee(e,t,o-1,i+1),zee(e,o+1,n,i+1)}Jx.simultaneousRequestCountMaximum=50;Jx.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 Z=Math.floor(512),V=Math.ceil(s/Z);this.leafNodeTexture=new Lt({context:r,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,flipY:!1,width:1024,height:V,sampler:new zt({minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST})}),this.leafNodeTexelSizeUv=M.fromElements(1/1024,1/V,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=Z}else!p&&l(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=W.clamp(t,0,a-1),n&&bRe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let b=Ui();ZRt(this,e),CRt(this,e);let f=Ui();LRt(this,h,c);let y=Ui(),_=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||_){let S=f-b,A=y-f,Z=y-b;GRt(this,e,S,A,Z)}};Jx.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};Jx.prototype.isDestroyed=function(){return!1};Jx.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 bRe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),l(t.children))for(let n=0;n<8;n++){let i=t.children[n];bRe(e,i)}}function SRt(e,t){if(e._simultaneousRequestCount>=Jx.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 ARt(e){return e/(1+e)}function ZRt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),gRe(e.rootNode,js.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 CRt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(VRt);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&&SRt(e,u),u.state===Mo.LoadState.PROCESSING)){let{content:h}=u;if(h.update(e._primitive,t),!h.ready)continue;if(!RRt(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 b=o[p];e._primitive.tileUnload.raiseEvent(),b.spatialNode.destroyKeyframeNode(b,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 VRt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function RRt(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 gRe(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===js.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,b=p._shape,f=p.screenSpaceError,y=n._priorityQueue,_=n._keyframeCount,S=W.clamp(Math.floor(n._keyframeLocation),0,_-2),A=S+1;if(_===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==_)for(let v=0;v<_;v++)e.createKeyframeNode(v);let{screenSpaceError:Z,keyframeNodes:V}=e,E=ARt(Z),G=!1;for(let v=0;v<V.length;v++){let I=V[v];I.priority=10*E+ERt(S,I.keyframe,A,n),I.state!==Mo.LoadState.UNAVAILABLE&&I.state!==Mo.LoadState.FAILED&&I.priority!==-Number.MAX_VALUE&&y.insert(I),I.state===Mo.LoadState.LOADED&&(G=!0)}if(Z<f||!G){e.children=void 0;return}l(e.children)||e.constructChildNodes(b);for(let v=0;v<8;v++){let I=e.children[v];gRe(I,t,n,i)}}function ERt(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 W.lerp(a,s,.15+.85*s)}function GRt(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 G=0;G<a;G++){let v=new Array(r).fill(0);c[G]=v,d[G]=0}function h(G){let v=G.keyframeNodes;for(let I=0;I<v.length;I++){let X=v[I],N=X.keyframe,g=X.state;c[g][N]+=1,d[g]+=1,u++}if(l(G.children))for(let I=0;I<8;I++){let X=G.children[I];h(X)}}h(s),e._primitive.statistics.numberOfTilesWithContentReady=d[Mo.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[Mo.LoadState.RECEIVING],b=d[Mo.LoadState.PROCESSING],f=p!==e._primitive.statistics.numberOfPendingRequests||b!==e._primitive.statistics.numberOfTilesProcessing;if(f&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,b),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=b,f&&(p===0&&b===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 _=`KEYFRAMES: ${c[Mo.LoadState.LOADED]}`,S=`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}`,A=Math.round(n*100)/100,Z=Math.round(i*100)/100,V=Math.round(o*100)/100,E=`LOAD: ${A} | OCT: ${Z} | ALL: ${V}`;console.log(`${_} || ${S} || ${E}`)}var oz={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function LRt(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(b,f,y,_,S){let A=!1;if(l(b.children))for(let Z=0;Z<8;Z++){let V=b.children[Z];V.computeSurroundingRenderableKeyframeNodes(o),V.isRenderable(r)&&(A=!0)}if(A){d[S]=oz.INTERNAL<<16|f,d[y]=_,a++,_=f,S=_*9+1;for(let Z=0;Z<8;Z++){let V=b.children[Z];f=a,y=f*9+0,h(V,f,y,_,S+Z)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let Z=c*5,V=b.renderableKeyframeNodePrevious,E=b.level-V.spatialNode.level,G=V.spatialNode.parent,v=l(G)?G.renderableKeyframeNodePrevious:V,I=WRt(b,i,n),X=E,N=1,g=V.megatextureIndex,C=v.megatextureIndex;u[Z+0]=I,u[Z+1]=X,u[Z+2]=N,u[Z+3]=g,u[Z+4]=C,d[S]=oz.LEAF<<16|c}else{let Z=b.renderableKeyframeNodePrevious,E=b.level-Z.spatialNode.level===0?oz.LEAF:oz.PACKED_LEAF_FROM_PARENT;d[S]=E<<16|Z.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&h(p,0,0,0,0),vRt(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&FRt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function WRt(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 W.clamp(s,0,1)}function vRt(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],b=h*o;for(let f=0;f<o;f++)c[b+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function FRt(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 b=e[p*r+0],f=e[p*r+1],y=e[p*r+2],_=e[p*r+3],S=e[p*r+4],A=W.clamp(Math.floor(65536*b),0,65535);d[p*8+0]=A>>>0&255,d[p*8+1]=A>>>8&255,d[p*8+2]=f&255,d[p*8+3]=y&255,d[p*8+4]=_>>>0&255,d[p*8+5]=_>>>8&255,d[p*8+6]=S>>>0&255,d[p*8+7]=S>>>8&255}let h={source:{arrayBufferView:d,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(h)}var o9=Jx;function y0(e){e=e??B.EMPTY_OBJECT,this._ready=!1,this._provider=e.provider??y0.DefaultProvider,this._traversal=void 0,this._statistics=new ff,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??y0.DefaultCustomShader,this._customShaderCompilationEvent=new _e,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 q,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new cf,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 q,cameraPositionLocal:new m,cameraDirectionLocal:new m,cameraTileCoordinates:new se,cameraTileUv:new m,ndcSpaceAxisAlignedBoundingBox:new se,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 _e,this.tileVisible=new _e,this.tileFailed=new _e,this.tileUnload=new _e,this.loadProgress=new _e,this.allTilesLoaded=new _e,this.initialTilesLoaded=new _e;let i=this._provider;IRt(this,i)}function IRt(e,t){let{shape:n,minBounds:i=yc.getMinBounds(n),maxBounds:o=yc.getMaxBounds(n)}=t;e.minBounds=i,e.maxBounds=o,e.minClippingBounds=i.clone(),e.maxClippingBounds=o.clone(),xRe(e);let r=yc.getShapeConstructor(n);e._shape=new r,e._shapeVisible=TRe(e)}Object.defineProperties(y0.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=W.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){us.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=y0.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var PRt=new se,XRt=new se,NRt=new F,YRt=new F,wRt=new m,MRt=new se;y0.prototype.update=function(e){let t=this._provider,n=this._uniforms;this._customShader.update(e);let i=e.context;if(!this._ready){HRt(this,t,i),e.afterRender.push(()=>(this._ready=!0,!0));return}let o=xRe(this),r=zRt(this,e);if((o||r)&&(this._shapeVisible=TRe(this),iEt(this)&&(this._shaderDirty=!0)),!this._shapeVisible)return;this._shape.updateViewTransforms(e);let s=oEt(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&&mEt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),rEt(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&&(HM(this,i),this._shaderDirty=!1);let h=i.uniformState.viewProjection,{orientedBoundingBox:p}=this._shape,b=cEt(p,h,XRt);if(b.x===1||b.y===1||b.z===-1||b.w===-1)return;n.ndcSpaceAxisAlignedBoundingBox=se.clone(b,n.ndcSpaceAxisAlignedBoundingBox);let y=i.uniformState.inverseView,_=F.multiplyTransformation(this._transformPositionWorldToLocal,y,n.transformPositionViewToLocal);this._transformPlaneLocalToView=F.transpose(_,this._transformPlaneLocalToView);let S=i.uniformState.inverseViewRotation;n.transformDirectionViewToLocal=q.multiply(this._transformDirectionWorldToLocal,S,n.transformDirectionViewToLocal),n.cameraPositionLocal=F.multiplyByPoint(this._transformPositionWorldToLocal,e.camera.positionWC,n.cameraPositionLocal),n.cameraDirectionLocal=q.multiplyByVector(this._transformDirectionWorldToLocal,e.camera.directionWC,n.cameraDirectionLocal);let A=DRt(this,n.cameraPositionLocal,MRt);n.cameraTileCoordinates=se.fromElements(Math.floor(A.x),Math.floor(A.y),Math.floor(A.z),A.w,n.cameraTileCoordinates),n.cameraTileUv=m.fromElements(A.x-Math.floor(A.x),A.y-Math.floor(A.y),A.z-Math.floor(A.z),n.cameraTileUv),n.stepSize=this._stepSizeMultiplier,kRt(this),URt(this,e);let Z=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;Z.boundingVolume=this._shape.boundingSphere,e.commandList.push(Z)};function kRt(e){let{megatextures:t}=e._traversal;for(let n=0;n<t.length;++n)t[n].nearestSampling=e._nearestSampling}function URt(e,t){let n=e._uniforms,{renderBoundPlanes:i}=e._shape;l(i)&&(i.update(t,e._transformPlaneLocalToView),n.renderBoundPlanesTexture=i.texture)}function DRt(e,t,n){let i=e._shape.convertLocalToShapeUvSpace(t,wRt),o=e._availableLevels,r=2**(o-1);return se.fromElements(i.x*r,i.y*r,i.z*r,o-1,n)}var ORt=new m,Hee=new m,BRt=new be;function zRt(e,t){let{verticalExaggeration:n,verticalExaggerationRelativeHeight:i}=t;return e._verticalExaggeration===n&&e._verticalExaggerationRelativeHeight===i?!1:(e._verticalExaggeration=n,e._verticalExaggerationRelativeHeight=i,!0)}function HRt(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=Be(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===b0.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 o9(e,n,a),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,nEt(e._traversal,i)}function xRe(e){return r9(e,"_modelMatrix","_modelMatrixOld")+r9(e,"_minBounds","_minBoundsOld")+r9(e,"_maxBounds","_maxBoundsOld")+r9(e,"_minClippingBounds","_minClippingBoundsOld")+r9(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function r9(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}var KRt=new m,JRt=new m,jRt=new m,QRt=new m,qRt=new F,$Rt=new F;function TRe(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,i=m.clone(e._minBounds,KRt),o=m.clone(e._maxBounds,JRt),r=m.clone(e._minClippingBounds,jRt),s=m.clone(e._maxClippingBounds,QRt),a=F.clone(e._modelMatrix,qRt);if(e.shape===yc.ELLIPSOID)i.z=Zo.getHeight(e._minBounds.z,t,n),o.z=Zo.getHeight(e._maxBounds.z,t,n),r.z=Zo.getHeight(e._minClippingBounds.z,t,n),s.z=Zo.getHeight(e._maxClippingBounds.z,t,n);else{let f=m.fromElements(1,1,t,ORt);F.multiplyByScale(a,f,a),F.multiplyByTranslation(a,tEt(e),a)}let c=e._provider,d=c.shapeTransform??F.IDENTITY,u=c.globalTransform??F.IDENTITY,h=F.multiplyTransformation(u,a,$Rt);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 eEt=new m;function tEt(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,{shapeTransform:i=F.IDENTITY,globalTransform:o=F.IDENTITY}=e._provider,r=F.getTranslation(i,Hee),s=F.multiplyByPoint(e._modelMatrix,r,Hee),a=F.multiplyByPoint(o,s,Hee),d=ie.WGS84.cartesianToCartographic(a,BRt),u=0;l(d)&&(u=d.height);let h=Zo.getHeight(u,t,n);return m.fromElements(0,0,(h-u)/t,eEt)}function nEt(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 iEt(e){let{shaderDefines:t}=e._shape,n=Object.keys(t).some(i=>t[i]!==e._shapeDefinesOld[i]);return n&&(e._shapeDefinesOld=Be(t,!0)),n}function oEt(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 rEt(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)}y0.prototype.isDestroyed=function(){return!1};y0.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 yRe=new Array(new se(-1,-1,-1,1),new se(1,-1,-1,1),new se(-1,1,-1,1),new se(1,1,-1,1),new se(-1,-1,1,1),new se(1,-1,1,1),new se(-1,1,1,1),new se(1,1,1,1)),sEt=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),aEt=new Array(new se,new se,new se,new se,new se,new se,new se,new se);function cEt(e,t,n){let i=F.fromRotationTranslation(e.halfAxes,e.center,NRt),o=F.multiply(t,i,YRt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,d,u=aEt,h=yRe.length;for(d=0;d<h;d++)F.multiplyByVector(o,yRe[d],u[d]);for(d=0;d<h;d++){let p=u[d];if(p.z>=-p.w){let b=p.x/p.w,f=p.y/p.w;r=Math.min(r,b),s=Math.max(s,b),a=Math.min(a,f),c=Math.max(c,f)}else for(let b=0;b<3;b++){let f=sEt[d*3+b],y=u[f];if(y.z>=-y.w){let _=p.z+p.w,S=y.z+y.w,A=_/(_-S),Z=se.lerp(p,y,A,PRt),V=Z.x/Z.w,E=Z.y/Z.w;r=Math.min(r,V),s=Math.max(s,V),a=Math.min(a,E),c=Math.max(c,E)}}}return r=W.clamp(r,-1,1),a=W.clamp(a,-1,1),s=W.clamp(s,-1,1),c=W.clamp(c,-1,1),n=se.fromElements(r,a,s,c,n),n}var Kee=3e7,lEt=new m(Kee,0,0),dEt=new m(0,Kee,0),uEt=new m(0,0,Kee);function mEt(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:ji.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)),b=[U.RED,U.LIME,U.BLUE][d%3];if(r(c.orientedBoundingBox,b,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,lEt,U.RED,a),o(m.ZERO,dEt,U.LIME,a),o(m.ZERO,uEt,U.BLUE,a),i.update(t)}y0.DefaultCustomShader=new CA({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { material.diffuse = vec3(1.0); material.alpha = 1.0; }`});function _Re(){this.ready=!0,this.shape=yc.BOX,this.dimensions=new m(1,1,1),this.names=["data"],this.types=[xt.SCALAR],this.componentTypes=[Nt.FLOAT32],this.maximumTileCount=1}_Re.prototype.requestData=function(e){if((l(e)?e.tileLevel??0:0)>=1)return;let n=new VA({metadata:[new Float32Array(1)]});return Promise.resolve(n)};y0.DefaultProvider=new _Re;var jx=y0;var kco=x(T(),1);function hEt(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 s9=hEt;var Dco=x(T(),1);function fEt(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var a9=fEt;var zco=x(T(),1);function pEt(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 c9=pEt;var sz=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function Si(e){e=e??B.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=Be(e.contextOptions);this._context=new WT(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 Iw,this._frameState=new vw(r,new Aw(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!s,this._creditContainer=n,this._canvas=t,this._computeEngine=new KR(r),this._ellipsoid=e.ellipsoid??ie.default,this._globe=void 0,this._globeTranslucencyState=new Fw,this._primitives=new td({countReferences:o}),this._groundPrimitives=new td({countReferences:o}),this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=Si.defaultLogDepthBuffer&&r.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new TA,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new Gw(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new ui({color:new U,stencil:0,owner:this}),this._depthClearCommand=new ui({depth:1,owner:this}),this._stencilClearCommand=new ui({stencil:0}),this._classificationStencilClearCommand=new ui({stencil:0,renderState:Ue.fromCache({stencilMask:Ht.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new TM(this),this._preUpdate=new _e,this._postUpdate=new _e,this._renderError=new _e,this._preRender=new _e,this._postRender=new _e,this._minimumDisableDepthTestDistance=0,this._debugInspector=new GM,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new _e,this.morphComplete=new _e,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=re.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 C_,this.fog=new Ww,this.fog.enabled=ie.WGS84.equals(this._ellipsoid),ie.WGS84.equals(this._ellipsoid)||(Vo.DEFAULT_VIEW_RECTANGLE=ce.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new Vo(this),this.shadowMap=new Eg({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 O1,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new gM,this._brdfLutGenerator=new gw,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new ZM(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??sd.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=Dc.requestCompletedEvent.addEventListener(sz(this)),this._removeTaskProcessorListenerCallback=$n.taskCompletedEvent.addEventListener(sz(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new Qe(0,0,r.drawingBufferWidth,r.drawingBufferHeight),c=new Vo(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new Vo(this),this.preloadFlightCullingVolume=void 0,this._picking=new Jw(this),this._defaultView=new mA(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 N0,this._enableEdgeVisibility=!1,RRe(this,0,Q.now()),this.updateFrameState(),this.initializeFrame()}Si.defaultLogDepthBuffer=!0;function bEt(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(sz(e))),n.push(t.terrainProviderChanged.addEventListener(sz(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(Si.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 vt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return vt.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 kh.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,bEt(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===re.SCENE2D?this.morphTo2D(0):e===re.SCENE3D?this.morphTo3D(0):e===re.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 Vo(this),l(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new Lw(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,vt.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}}});Si.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 gEt(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function SRe(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=l0.createPickDerivedCommand(e,t,o,c.picking)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,l(t.pickedMetadataInfo)&&(c.pickingMetadata=l0.createPickMetadataDerivedCommand(e,t,o,c.pickingMetadata))),t.pickOnly||(c.depth=l0.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=l0.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=Eg.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===Le.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))}Si.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,b=c&&!u,f=(!o||!c)&&!h,y=n.pickingMetadata&&gEt(e,n);if(e.dirty=e.dirty||p||b||f||y,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:_,shadowMaps:S}=i;_&&e.castShadows&&(t.shadows=Eg.createCastDerivedCommand(S,e,s,r,t.shadows)),(d||p)&&(t.logDepth=l0.createLogDepthCommand(e,r,t.logDepth),SRe(this,t.logDepth.command,s)),(h||f)&&SRe(this,e,s)};var yEt=new lh({pass:or.RENDER}),Jee=new lh({pass:or.PRELOAD}),jee=new lh({pass:or.PRELOAD_FLIGHT}),xEt=new lh({pass:or.REQUEST_RENDER_MODE_DEFER_CHECK}),ARe=new de,Qee;function TEt(e){if(!(e._mode!==re.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return ARe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,Qee=pw.fromBoundingSphere(ARe,e.camera.positionWC,Qee),Qee}Si.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function RRe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=Q.clone(n,i.time)}Si.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=TEt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof fn||this.camera.frustum instanceof ls),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),O1.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};Si.prototype.isVisible=function(e,t,n){if(!l(t))return!1;let{boundingVolume:i}=t;return!l(i)||!t.cull?!0:e.computeVisibility(i)===Jt.OUTSIDE?!1:!l(n)||!t.occlude||!i.isOccluded(n)};var rz=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);rz=F.inverseTransformation(rz,rz);function _Et(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!==re.SCENE3D){a=F.multiplyByPoint(rz,a,a);let f=o.mapProjection,y=f.unproject(a);a=f.ellipsoid.cartographicToCartesian(y)}let c,d,{radius:u}=s;l(u)?(c=Ma.createGeometry(new Ma({radii:new m(u,u,u),vertexFormat:bn.FLAT_VERTEX_FORMAT})),d=F.fromTranslation(a)):(c=Zc.createGeometry(Zc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:bn.FLAT_VERTEX_FORMAT})),d=F.fromRotationTranslation(s.halfAxes,a,new F)),t._debugVolume=new Pn({geometryInstances:new Ft({geometry:Kn.toWireframe(c),modelMatrix:d,attributes:{color:new Qt(1,0,0,1)}}),appearance:new bn({flat:!0,translucent:!1}),asynchronous:!1});let h=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=l0.createLogDepthCommand(e,r).command);let b;l(i)&&(b=n.framebuffer,n.framebuffer=i),e.execute(r,n),l(b)&&(n.framebuffer=b),o.commandList=h}function qu(e,t,n,i){let o=t._frameState,r=t._context;if(l(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof ui){e.execute(r,n);return}e.debugShowBoundingVolume&&l(e.boundingVolume)&&_Et(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 ZRe(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 ERe(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}var SEt=new m;function CRe(e,t){let n=m.subtract(e,t,SEt),i=Math.max(0,m.magnitude(n));return i*i}function AEt(e,t,n){let i=e.boundingVolume,o=t.boundingVolume;return CRe(o.center,n)-CRe(i.center,n)}function ZEt(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+W.EPSILON12}function CEt(e,t,n,i,o){s0(i,ERe,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function VEt(e,t,n,i,o){s0(i,ZEt,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function REt(e,t,n){e.context.uniformState.updatePass(Le.VOXELS);let i=n.commands[Le.VOXELS];i.length=n.indices[Le.VOXELS],s0(i,ERe,e.camera.positionWC);for(let o=0;o<i.length;++o)qu(i[o],e,t)}function EEt(e,t,n){e.context.uniformState.updatePass(Le.GAUSSIAN_SPLATS);let i=n.commands[Le.GAUSSIAN_SPLATS];i.length=n.indices[Le.GAUSSIAN_SPLATS],s0(i,AEt,e.camera.positionWC);for(let o=0;o<i.length;++o)qu(i[o],e,t)}var GEt=new zi,LEt=new rd,WEt=new fn,vEt=new ls;function FEt(e){let{frustum:t}=e;return l(t.fov)?t.clone(GEt):l(t.infiniteProjectionMatrix)?t.clone(LEt):l(t.width)?t.clone(WEt):t.clone(vEt)}function IEt(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?CEt:VEt}function PEt(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=IEt(e);o.uniformState.updatePass(Le.TRANSLUCENT);let u=n.commands[Le.TRANSLUCENT];u.length=n.indices[Le.TRANSLUCENT],d(e,qu,t,u,c)}function XEt(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[Le.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[Le.TRANSLUCENT];i.executeTranslucentCommands(e,qu,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,qu,t,n)}function NEt(e,t,n){e.context.uniformState.updatePass(Le.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[Le.CESIUM_3D_TILE_EDGES],r=n.indices[Le.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)qu(o[s],e,t);t.framebuffer=i}function $ee(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n);let s=FEt(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,c=a.pick||a.pickVoxel;c||YEt(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:h,useGlobeDepthFramebuffer:p,useInvertClassification:b,usePostProcessSelected:f}=e._environmentState,{globeDepth:y,globeTranslucencyFramebuffer:_,sceneFramebuffer:S,frustumCommandsList:A}=e._view,Z=A.length,V=e._globeTranslucencyState,E=e._depthClearCommand,G=e._stencilClearCommand,v=e._classificationStencilClearCommand,I=e._depthPlane,X=n.position.z;function N(C,R){r.updatePass(R);let L=C.commands[R],P=C.indices[R];for(let Y=0;Y<P;++Y)qu(L[Y],e,t);return P}function g(C,R){r.updatePass(R);let L=C.commands[R],P=C.indices[R];for(let Y=0;Y<P;++Y)ZRe(L[Y],e,t)}for(let C=0;C<Z;++C){let R=Z-C-1,L=A[R];e.mode===re.SCENE2D?(n.position.z=X-L.near+1,s.far=Math.max(1,L.far-L.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=R!==0?L.near*e.opaqueFrustumNearOffset:L.near,s.far=L.far,r.updateFrustum(s)),E.execute(i,t),i.stencilBuffer&&G.execute(i,t),V.translucent?(r.updatePass(Le.GLOBE),V.executeGlobeCommands(L,qu,_,e,t)):N(L,Le.GLOBE),p&&y.executeCopyDepth(i,t),u||(V.translucent?(r.updatePass(Le.TERRAIN_CLASSIFICATION),V.executeGlobeClassificationCommands(L,qu,_,e,t)):N(L,Le.TERRAIN_CLASSIFICATION)),d&&(E.execute(i,t),h&&I.execute(i,t));let P;if(NEt(e,t,L),e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)){let O=e._view.edgeFramebuffer.colorTexture;l(O)?e.context.uniformState.edgeColorTexture=O:e.context.uniformState.edgeColorTexture=e.context.defaultTexture;let k=e._view.edgeFramebuffer.idTexture;l(k)?e.context.uniformState.edgeIdTexture=k: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(!b||c||u)P=N(L,Le.CESIUM_3D_TILE),P>0&&(p&&(y.prepareColorTextures(i,d),y.executeUpdateDepth(i,t,y.depthStencilTexture)),u||(P=N(L,Le.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let O=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,P=N(L,Le.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),y.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),P=N(L,Le.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=O,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),P>0&&i.stencilBuffer&&v.execute(i,t),P=N(L,Le.CESIUM_3D_TILE_CLASSIFICATION)}if(P>0&&i.stencilBuffer&&G.execute(i,t),REt(e,t,L),N(L,Le.OPAQUE),EEt(e,t,L),R!==0&&e.mode!==re.SCENE2D&&(s.near=L.near,r.updateFrustum(s)),PEt(e,t,L),XEt(e,t,L),i.depthTexture&&e.useDepthPicking&&(p||u)){let O=e._picking.getPickDepth(e,R);O.update(i,y.depthStencilTexture),O.executeCopyDepth(i,t)}if(c||!f)continue;let Y=t.framebuffer;t.framebuffer=S.getIdFramebuffer(),s.near=R!==0?L.near*e.opaqueFrustumNearOffset:L.near,s.far=L.far,r.updateFrustum(s),V.translucent?(r.updatePass(Le.GLOBE),V.executeGlobeCommands(L,ZRe,_,e,t)):g(L,Le.GLOBE),d&&(E.framebuffer=t.framebuffer,E.execute(i,t),E.framebuffer=void 0),d&&h&&I.execute(i,t),g(L,Le.CESIUM_3D_TILE),g(L,Le.OPAQUE),g(L,Le.TRANSLUCENT),t.framebuffer=Y}}function YEt(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(Le.ENVIRONMENT),l(i.skyBoxCommand)&&qu(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&qu(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)?qu(r[s],e,t):r.splice(s,1)}}function GRe(e){e.context.uniformState.updatePass(Le.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 wEt(e,t){e.context.uniformState.updatePass(Le.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function MEt(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[Le.GLOBE,Le.CESIUM_3D_TILE,Le.OPAQUE,Le.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 LRe(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;MEt(e,n,c);for(let u=0;u<d.length;++u){let h=c.passes[u],{camera:p,commandList:b}=h;s.updateCamera(p),c.updatePass(r,u);for(let f=0;f<b.length;++f){let y=b[f];s.updatePass(y.pass);let _=y.derivedCommands.shadows.castCommands[a];qu(_,e,h.passState)}}}}var kEt=new m;Si.prototype.updateAndExecuteCommands=function(e,t){eGt(this,e,t),this._environmentState.useWebVR?UEt(this,e,t):this._frameState.mode!==re.SCENE2D||this._mapMode2D===sd.ROTATE?Qx(!0,this,e):QEt(this,e)};function UEt(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;WRe(e),n.createPotentiallyVisibleSet(e),GRe(e),r||LRe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=Vo.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,kEt);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*c/d;m.add(a.position,h,i.position),i.frustum.xOffset=p,$ee(e,t),s.x=s.width,m.subtract(a.position,h,i.position),i.frustum.xOffset=-p,$ee(e,t),Vo.clone(a,i)}var DEt=new be(Math.PI,W.PI_OVER_TWO),OEt=new m,BEt=new m,zEt=new F,HEt=new F,KEt=new m,JEt=new m,jEt=new Qe;function QEt(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=Qe.clone(r,jEt);t.viewport=s;let a=DEt,c=OEt;e.mapProjection.project(a,c);let u=m.clone(i.position,BEt),h=F.clone(i.transform,HEt),p=i.frustum.clone();i._setTransform(F.IDENTITY);let b=F.computeViewportTransformation(s,0,1,zEt),f=i.frustum.projectionMatrix,y=i.positionWC.y,_=m.fromElements(W.sign(y)*c.x-y,0,-i.positionWC.x,KEt),S=pt.pointToGLWindowCoordinates(f,b,_,JEt);S.x=Math.floor(S.x);let A=s.x,Z=s.width;if(y===0||S.x<=A||S.x>=A+Z)Qx(!0,e,t);else if(Math.abs(A+Z*.5-S.x)<1)s.width=S.x-s.x,i.position.x*=W.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Qx(!0,e,t),s.x=S.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),Qx(!1,e,t);else if(S.x>A+Z*.5){s.width=S.x-A;let V=i.frustum.right;i.frustum.right=c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Qx(!0,e,t),s.x=S.x,s.width=A+Z-S.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=V-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Qx(!1,e,t)}else{s.x=S.x,s.width=A+Z-S.x;let V=i.frustum.left;i.frustum.left=-c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Qx(!0,e,t),s.x=A,s.width=S.x-A,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=V-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Qx(!1,e,t)}i._setTransform(h),m.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function Qx(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),WRe(t),i.createPotentiallyVisibleSet(t),e&&(GRe(t),o||LRe(t)),$ee(t,n)}var VRe=new js;Si.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!==re.SCENE2D&&t.camera.frustum instanceof fn||!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(mb.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let S=r.dynamicLighting;s.setDynamicLighting(S),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 _=l(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=l(_)?_.drawCommand:void 0,n.sunComputeCommand=l(_)?_.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===re.SCENE2D);(n.useDepthPlane=d&&this.mode===re.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==re.SCENE2D&&!o;let h=e.mode===re.SCENE3D&&!c.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,b=VRe.planes;for(let _=0;_<5;++_)b[_]=p.planes[_];p=VRe,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,y=this._specularEnvironmentCubeMap;l(f)&&y?.url!==f?(y=y&&y.destroy(),this._specularEnvironmentCubeMap=new kh(f)):!l(f)&&l(y)&&(y.destroy(),this._specularEnvironmentCubeMap=void 0),l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function qEt(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new c0({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 $Et(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===re.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 WRe(e){let t=e._frameState;t.edgeVisibilityRequested=!1,e._groundPrimitives.update(t),e._primitives.update(t),t.edgeVisibilityRequested&&e._enableEdgeVisibility===!1&&(e._enableEdgeVisibility=!0),qEt(e),$Et(e),e._globe&&e._globe.render(t)}function eGt(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 RM: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,b=r.useOIT=!c&&l(p)&&p.isSupported();b&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,y=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);r.usePostProcessSelected=!1,y&&(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),y=r.usePostProcess=f.ready,r.usePostProcessSelected=y&&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:y&&(t.framebuffer=s.sceneFramebuffer.framebuffer),l(t.framebuffer)&&u.execute(i,t);let _=r.useInvertClassification=!c&&l(t.framebuffer)&&e.invertClassification;if(!c&&e._enableEdgeVisibility&&s.edgeFramebuffer.update(i,s.viewport,e._hdr),_){let A;if(o.invertClassificationColor.alpha===1&&h&&(A=s.globeDepth.framebuffer),l(A)||i.depthTexture){if(e._invertClassification.previousFramebuffer=A,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&b){let Z=e._invertClassification.unclassifiedCommand,V=Z.derivedCommands;V.oit=p.createDerivedCommands(Z,i,V.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}Si.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 b=h;a&&!s&&(b=u);let f=this.postProcessStages,y=b.getColorTexture(0),_=p.getColorTexture(0),S=(u??h).getDepthStencilTexture();f.execute(t,y,S,_),f.copy(t,d)}!s&&!c&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function tGt(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 nGt(e){if(e.mode===re.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function vRe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof td){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=vRe(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}Si.prototype.getHeight=function(e,t){if(!l(e))return;let n=t===tt.CLAMP_TO_TERRAIN||t===tt.RELATIVE_TO_TERRAIN,i=t===tt.CLAMP_TO_3D_TILE||t===tt.RELATIVE_TO_3D_TILE;if(!l(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=vRe(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 qee=new be;Si.prototype.updateHeight=function(e,t,n){let i=this._ellipsoid,o=b=>{be.clone(e,qee);let f;l(b)&&(f=b.height),l(f)||(f=this.getHeight(e,n)),l(f)&&(qee.height=f,t(qee))},r=n===tt.CLAMP_TO_TERRAIN||n===tt.RELATIVE_TO_TERRAIN,s=n===tt.CLAMP_TO_3D_TILE||n===tt.RELATIVE_TO_3D_TILE,a;!s&&l(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let c={},d=b=>{if(r||b.isDestroyed()||!b.isCesium3DTileset)return;let f=b.updateHeight(e,o,i);c[b.id]=f};if(!r){let b=this.primitives.length;for(let f=0;f<b;++f){let y=this.primitives.get(f);d(y)}}let u=this.primitives.primitiveAdded.addEventListener(d),h=this.primitives.primitiveRemoved.addEventListener(b=>{b.isDestroyed()||!b.isCesium3DTileset||(l(c[b.id])&&c[b.id](),delete c[b.id])});return()=>{a=a&&a(),Object.values(c).forEach(b=>b()),c={},u(),h()}};function iGt(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===re.SCENE2D||n===re.MORPHING)return!1;let r=e._globeHeight;return l(r)&&o.height<r}Si.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=nGt(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=iGt(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),l(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function oGt(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 Cg({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 rGt(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 sGt(e){e.primitives.postPassesUpdate(e._frameState),Dc.update()}var aGt=new U;function cGt(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=yEt;let r=e.backgroundColor??U.BLACK;e._hdr&&(r=U.clone(r,aGt),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 N0?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=Qe.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,wEt(e,c),l(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function LA(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function lGt(e){return e._picking.updateMostDetailedRayPicks(e)}Si.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===re.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=W.incrementWrap(t.frameNumber,15e6,1);RRe(this,o,e),t.newFrame=!0}LA(this,rGt),this.primitives.show&&(LA(this,lGt),LA(this,dGt),LA(this,uGt),i||LA(this,mGt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),LA(this,cGt)),oGt(this,i),LA(this,sGt),tGt(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};Si.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};Si.prototype.requestRender=function(){this._renderRequested=!0};Si.prototype.clampLineWidth=function(e){return Math.max(vt.minimumAliasedLineWidth,Math.min(e,vt.maximumAliasedLineWidth))};Si.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n,1)[0]};Si.prototype.pickAsync=async function(e,t,n){return(await this._picking.pickAsync(this,e,t,n,1))[0]};Si.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!l(i))return;let o=i.primitive;if(!(o instanceof jx))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 LM.fromKeyframeNode(o,s,c,a)};Si.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=s9(s,t,n,i);if(!l(a))return;let c=c9(r,n,i);if(!l(c))return;let d=new a9(t,n,i,a,c);return this._picking.pickMetadata(this,e,d)};Si.prototype.pickMetadataSchema=function(e){let t=this.pick(e);return l(t)?t.detail?.model?.structuralMetadata?.schema:void 0};Si.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};Si.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};Si.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function dGt(e){let t=e._frameState;Jee.camera=t.camera,Jee.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,Jee)}function uGt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;jee.camera=e.preloadFlightCamera,jee.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,jee)}function mGt(e){e.primitives.updateForPass(e._frameState,xEt)}Si.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};Si.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};Si.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};Si.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};Si.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};Si.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};Si.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};Si.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};Si.prototype.cartesianToCanvasCoordinates=function(e,t){return co.worldToWindowCoordinates(this,e,t)};Si.prototype.completeMorph=function(){this._transitioner.completeMorph()};Si.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};Si.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};Si.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function hGt(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()})}Si.prototype.setTerrain=function(e){return hGt(this,e),e};Si.prototype.isDestroyed=function(){return!1};Si.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 l9=Si;var zdo=x(T(),1);function Q1(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 et({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(Q1.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});Q1.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var ete=new F;Q1.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==re.SCENE3D&&n!==re.MORPHING||!e.passes.render)return;let i=F.fromRotationTranslation(e.context.uniformState.inverseViewRotation,m.ZERO,ete),o=F.multiplyTransformation(i,ao.Y_UP_TO_Z_UP,ete),r=F.multiply(this._scaleMatrix,o,ete);F.clone(r,this._modelMatrix);let s=e.context,a=fGt(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:Xe.POSITION_ONLY}));u.vertexArray=Bn.fromGeometry({context:s,geometry:p,attributeLocations:Kn.createAttributeLocations(p),bufferUsage:Fe.STATIC_DRAW}),u.renderState=Ue.fromCache({cull:{enabled:!0,face:wi.FRONT},blending:rn.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 b=new Oe({defines:p,sources:[Jh,v1,MY]}),f=new Oe({defines:p,sources:[Jh,v1,wY]});this._spSkyAtmosphere=$t.fromCache({context:s,vertexShaderSource:b,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function fGt(e){return!(W.equalsEpsilon(e.hueShift,0,W.EPSILON7)&&W.equalsEpsilon(e.saturationShift,0,W.EPSILON7)&&W.equalsEpsilon(e.brightnessShift,0,W.EPSILON7))}Q1.prototype.isDestroyed=function(){return!1};Q1.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 d9=Q1;var Suo=x(T(),1);var buo=x(T(),1);function u9(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 et({modelMatrix:F.clone(F.IDENTITY),owner:this,pass:Le.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 yt(t)),this._credit=t}Object.defineProperties(u9.prototype,{transform:{get:function(){return this._transform}},credit:{get:function(){return l(this._credit)?this._credit:void 0}}});u9.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r,panoramaCommandList:s}=e;if(!this.show||i!==re.SCENE3D&&i!==re.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"?$L(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 Jr({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=Zc.createGeometry(Zc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:Xe.POSITION_ONLY})),d=this._attributeLocations=Kn.createAttributeLocations(c);a.vertexArray=Bn.fromGeometry({context:r,geometry:c,attributeLocations:d,bufferUsage:Fe.STATIC_DRAW}),a.renderState=Ue.fromCache({depthTest:{enabled:!1},depthMask:!1,blending:rn.ALPHA_BLEND}),this._addToPanoramaCommandList=!0}if(!l(a.shaderProgram)||this._useHdr!==t){let c=new Oe({defines:[t?"HDR":""],sources:[kY]});a.shaderProgram=$t.fromCache({context:r,vertexShaderSource:l(this._transform)?FY:UY,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)}};u9.prototype.isDestroyed=function(){return!1};u9.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 WA=u9;function vA(e){this._sources=e.sources,this._show=e.show??!0,this._panorama=new WA({sources:this._sources,show:this._show,returnCommand:!0})}Object.defineProperties(vA.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}}});vA.prototype.update=function(e,t){let{mode:n,passes:i}=e;if(!(n!==re.SCENE3D&&n!==re.MORPHING)&&i.render)return this._panorama.update(e,t)};vA.prototype.isDestroyed=function(){return!1};vA.prototype.destroy=function(){return this._panorama=this._panorama&&this._panorama.destroy(),he(this)};function q1(e){return qt(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}vA.createEarthSkyBox=function(){return new vA({sources:{positiveX:q1("px"),negativeX:q1("mx"),positiveY:q1("py"),negativeY:q1("my"),positiveZ:q1("pz"),negativeZ:q1("mz")}})};var m9=vA;var Quo=x(T(),1);function f9(){this.show=!0,this._drawCommand=new et({primitiveType:ve.TRIANGLES,boundingVolume:new de,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new de,this._boundingVolume2D=new de,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(f9.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var pGt=new M,bGt=new M,gGt=new se,h9=new se;f9.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===re.SCENE2D||i===re.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 V=Math.max(r,s);V=Math.pow(2,Math.ceil(Math.log(V)/Math.log(2))-2),V=Math.max(1,V);let E=n?o.halfFloatingPointTexture?De.HALF_FLOAT:De.FLOAT:De.UNSIGNED_BYTE;this._texture=new Lt({context:o,width:V,height:V,pixelFormat:Ke.RGBA,pixelDatatype:E}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let G=this,v={u_radiusTS:function(){return G._radiusTS}};this._commands.computeCommand=new _l({fragmentShaderSource:OY,outputTexture:this._texture,uniformMap:v,persists:!1,owner:this,postExecute:function(){G._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!l(a.vertexArray)){let V={direction:0},E=new Uint8Array(8);E[0]=0,E[1]=0,E[2]=255,E[3]=0,E[4]=255,E[5]=255,E[6]=0,E[7]=255;let G=qe.createVertexBuffer({context:o,typedArray:E,usage:Fe.STATIC_DRAW}),v=[{index:V.direction,vertexBuffer:G,componentsPerAttribute:2,normalize:!0,componentDatatype:K.UNSIGNED_BYTE}],I=qe.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT});a.vertexArray=new Bn({context:o,attributes:v,indexBuffer:I}),a.shaderProgram=$t.fromCache({context:o,vertexShaderSource:BY,fragmentShaderSource:DY,attributeLocations:V}),a.renderState=Ue.fromCache({blending:rn.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=W.SOLAR_RADIUS+W.SOLAR_RADIUS*this._glowLengthTS,h.radius=u.radius,i===re.SCENE3D?de.clone(u,a.boundingVolume):i===re.COLUMBUS_VIEW&&de.clone(h,a.boundingVolume);let p=co.computeActualEllipsoidPosition(e,c,h9),b=m.magnitude(m.subtract(p,e.camera.position,h9)),f=o.uniformState.projection,y=gGt;y.x=0,y.y=0,y.z=-b,y.w=1;let _=F.multiplyByVector(f,y,h9),S=co.clipToGLWindowCoordinates(t.viewport,_,pGt);y.x=W.SOLAR_RADIUS;let A=F.multiplyByVector(f,y,h9),Z=co.clipToGLWindowCoordinates(t.viewport,A,bGt);return this._size=M.magnitude(M.subtract(Z,S,h9)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};f9.prototype.isDestroyed=function(){return!1};f9.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 p9=f9;var nho=x(T(),1);var Ymo=x(T(),1);var PRe=x(tU(),1);var $uo=x(T(),1);function yGt(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 b9=yGt;var nmo=x(T(),1);var xGt={modifyFragmentShader:function(t){return t=Oe.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}}},$1=xGt;var FA={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function g9(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=FA.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??Le.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=Ln.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??Fr.NONE,this._splittingEnabled=!1,this._error=void 0,TGt(this,e)}Object.defineProperties(g9.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=de.clone(e,this._boundingSphere)}}});function TGt(e,t){let n=w_.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=Oh.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),l(n.draco)){let a=n.draco;e._decodingState=FA.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 _Gt=new m,SGt=new m,AGt=new m,FRe,az;function ZGt(e){if(!l(az)){FRe=new PRe.default(0),az=new Array(e);for(let t=0;t<e;++t)az[t]=FRe.random()}return az}function CGt(e){let n=e.length/3,i=Math.min(n,20),o=ZGt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=m.fromElements(r,r,r,_Gt),c=m.fromElements(s,s,s,SGt);for(let u=0;u<i;++u){let h=Math.floor(o[u]*n),p=m.unpack(e,h*3,AGt);m.minimumByComponent(a,p,a),m.maximumByComponent(c,p,c)}let d=de.fromCornerPoints(a,c);return d.radius+=W.EPSILON2,d}function IRe(e,t){let n=K.fromTypedArray(e);return n===K.INT||n===K.UNSIGNED_INT||n===K.DOUBLE?(Zt("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 VGt=new se,RGt=new se,EGt=new U,XRe=0,cz=1,rte=2,NRe=3,GGt=4,tte=new F,LGt=new F;function WGt(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,b=e._isOctEncoded16P,f=e._isOctEncodedDraco,y=e._quantizedRange,_=e._octEncodedRange,S=e._isRGB565,A=e._isTranslucent,Z=e._hasColors,V=e._hasNormals,E=e._hasBatchIds,G,v,I=[],X={};if(e._styleableShaderAttributes=X,u){let k=GGt;for(let D in d)if(d.hasOwnProperty(D)){let w=d[D],z=IRe(w.typedArray,D);G=w.componentCount,v=K.fromTypedArray(z);let J=qe.createVertexBuffer({context:n,typedArray:z,usage:Fe.STATIC_DRAW});e._geometryByteLength+=J.sizeInBytes;let ee={index:k,vertexBuffer:J,componentsPerAttribute:G,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0};I.push(ee),X[D]={location:k,componentCount:G},++k}}let N=qe.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Fe.STATIC_DRAW});e._geometryByteLength+=N.sizeInBytes;let g;Z&&(g=qe.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Fe.STATIC_DRAW}),e._geometryByteLength+=g.sizeInBytes);let C;V&&(C=qe.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Fe.STATIC_DRAW}),e._geometryByteLength+=C.sizeInBytes);let R;E&&(c.typedArray=IRe(c.typedArray,"batchIds"),R=qe.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Fe.STATIC_DRAW}),e._geometryByteLength+=R.sizeInBytes);let L=[];if(h?v=K.UNSIGNED_SHORT:p?v=y<=255?K.UNSIGNED_BYTE:K.UNSIGNED_SHORT:v=K.FLOAT,L.push({index:XRe,vertexBuffer:N,componentsPerAttribute:3,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(h||p?e._boundingSphere=de.fromCornerPoints(m.ZERO,e._quantizedVolumeScale):e._boundingSphere=CGt(r.typedArray)),Z)if(S)L.push({index:cz,vertexBuffer:g,componentsPerAttribute:1,componentDatatype:K.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let k=A?4:3;L.push({index:cz,vertexBuffer:g,componentsPerAttribute:k,componentDatatype:K.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}V&&(b?(G=2,v=K.UNSIGNED_BYTE):f?(G=2,v=_<=255?K.UNSIGNED_BYTE:K.UNSIGNED_SHORT):(G=3,v=K.FLOAT),L.push({index:rte,vertexBuffer:C,componentsPerAttribute:G,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0})),E&&L.push({index:NRe,vertexBuffer:R,componentsPerAttribute:1,componentDatatype:K.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(L=L.concat(I));let P=new Bn({context:n,attributes:L}),Y={depthTest:{enabled:!0}},O={depthTest:{enabled:!0},depthMask:!1,blending:rn.ALPHA_BLEND};e._opaquePass===Le.CESIUM_3D_TILE&&(Y.stencilTest=Ht.setCesium3DTileBit(),Y.stencilMask=Ht.CESIUM_3D_TILE_MASK,O.stencilTest=Ht.setCesium3DTileBit(),O.stencilMask=Ht.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Ue.fromCache(Y),e._translucentRenderState=Ue.fromCache(O),e._drawCommand=new et({boundingVolume:new de,cull:e._cull,modelMatrix:new F,primitiveType:ve.POINTS,vertexArray:P,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:A?e._translucentRenderState:e._opaqueRenderState,pass:A?Le.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function vGt(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=VGt;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===re.SCENE2D||c instanceof fn?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,EGt);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,tte);let d=F.multiply(tte,a.modelMatrix,tte);return F.inverseTranspose(d,LGt)}};$1.addUniforms(e,s),(i||o||r)&&(s=Gt(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=RGt;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 nte(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 ite(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 ote(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 FGt={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 IGt(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,b=e._isTranslucent,f=e._hasColors,y=e._hasNormals,_=e._hasBatchIds,S=e._backFaceCulling,A=e._normalShading,Z=e._drawCommand.vertexArray,V=e.clippingPlanes,E=e._attenuation,G,v,I,X=b,N=Be(FGt),g={},C=e._styleableShaderAttributes;for(o in C)C.hasOwnProperty(o)&&(r=C[o],N[o]=`czm_3dtiles_property_${r.location}`,g[r.location]=r);if(a){let le={translucent:!1},Te="(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)";G=n.getColorShaderFunction(`getColorFromStyle${Te}`,N,le),v=n.getShowShaderFunction(`getShowFromStyle${Te}`,N,le),I=n.getPointSizeShaderFunction(`getPointSizeFromStyle${Te}`,N,le),l(G)&&le.translucent&&(X=!0)}e._styleTranslucent=X;let R=l(G),L=l(v),P=l(I),Y=e.isClipped,O=[],k=[];R&&(nte(G,O),ite(G,k)),L&&(nte(v,O),ite(v,k)),P&&(nte(I,O),ite(I,k));let D=k.indexOf("COLOR")>=0,w=k.indexOf("NORMAL")>=0;if(w&&!y)throw new ue("Style references the NORMAL semantic but the point cloud does not have normals");for(o in C)if(C.hasOwnProperty(o)){r=C[o];let le=O.indexOf(r.location)>=0,Te=ote(Z,r.location);Te.enabled=le}let z=f&&(!R||D);if(f){let le=ote(Z,cz);le.enabled=z}let J=y&&(A||S||w);if(y){let le=ote(Z,rte);le.enabled=J}let ee={a_position:XRe};z&&(ee.a_color=cz),J&&(ee.a_normal=rte),_&&(ee.a_batchId=NRe);let H="",te=O.length;for(i=0;i<te;++i){let le=O[i];r=g[le];let Te=r.componentCount,Se=`czm_3dtiles_property_${le}`,Ee;Te===1?Ee="float":Ee=`vec${Te}`,H+=`in ${Ee} ${Se}; `,ee[Se]=r.location}vGt(e,t);let $=`in vec3 a_position; out vec4 v_color; uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; uniform vec4 u_constantColor; uniform vec4 u_highlightColor; `;$+=`float u_pointSize; float tiles3d_tileset_time; `,E&&($+=`float u_geometricError; float u_depthMultiplier; `),$+=H,z&&(b?$+=`in vec4 a_color; `:p?$+=`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; `:$+=`in vec3 a_color; `),J&&(u||h?$+=`in vec2 a_normal; `:$+=`in vec3 a_normal; `),_&&($+=`in float a_batchId; `),(c||d||h)&&($+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; `),R&&($+=G),L&&($+=v),P&&($+=I),$+=`void main() { u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; `,E&&($+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; `),z?b?$+=` vec4 color = a_color; `:p?$+=` 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); `:$+=` vec4 color = vec4(a_color, 1.0); `:$+=` vec4 color = u_constantColor; `,c||d?$+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; `:$+=` vec3 position = a_position; `,$+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); `,J?(u?$+=` vec3 normal = czm_octDecode(a_normal); `:h?$+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; `:$+=` vec3 normal = a_normal; `,$+=` vec3 normalEC = czm_normal * normal; `):$+=` vec3 normal = vec3(1.0); `,R&&($+=` color = getColorFromStyle(position, position_absolute, color, normal); `),L&&($+=` float show = float(getShowFromStyle(position, position_absolute, color, normal)); `),P?$+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; `:E?$+=` vec4 positionEC = czm_modelView * vec4(position, 1.0); float depth = -positionEC.z; gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); `:$+=` gl_PointSize = u_pointSize; `,$+=` color = color * u_highlightColor; `,J&&A&&($+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); diffuseStrength = max(diffuseStrength, 0.4); color.xyz *= diffuseStrength * czm_lightColor; `),$+=` v_color = color; gl_Position = czm_modelViewProjection * vec4(position, 1.0); `,J&&S&&($+=` float visible = step(-normalEC.z, 0.0); gl_Position *= visible; gl_PointSize *= visible; `),L&&($+=` gl_Position.w *= float(show); gl_PointSize *= float(show); `),$+=`} `;let pe=`in vec4 v_color; `;Y&&(pe+=`uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; `,pe+=` `,pe+=eA(V,s),pe+=` `),pe+=`void main() { out_FragColor = czm_gammaCorrect(v_color); `,Y&&(pe+=b9("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),pe+=`} `,e.splitDirection!==Fr.NONE&&(pe=$1.modifyFragmentShader(pe)),l(e._vertexShaderLoaded)&&($=e._vertexShaderLoaded($)),l(e._fragmentShaderLoaded)&&(pe=e._fragmentShaderLoaded(pe));let xe=e._drawCommand;l(xe.shaderProgram)&&xe.shaderProgram.destroy(),xe.shaderProgram=$t.fromCache({context:s,vertexShaderSource:$,fragmentShaderSource:pe,attributeLocations:ee});try{xe.shaderProgram._bind()}catch{throw new ue("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function PGt(e,t){if(e._decodingState===FA.READY)return!1;if(e._decodingState===FA.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=sb.decodePointCloud(i,t);l(o)&&(e._decodingState=FA.DECODING,o.then(function(r){e._decodingState=FA.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 _=r.POSITION.data.quantization,S=_.range;e._quantizedVolumeScale=m.fromElements(S,S,S),e._quantizedVolumeOffset=m.unpack(_.minValues),e._quantizedRange=(1<<_.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let b=n.styleableProperties,f=i.batchTableProperties;for(let _ in f)if(f.hasOwnProperty(_)){let S=r[_];l(b)||(b={}),b[_]={typedArray:S.array,componentCount:S.data.componentsPerAttribute}}l(s)&&(n.positions={typedArray:s});let y=c??a;l(y)&&(n.colors={typedArray:y}),l(d)&&(n.normals={typedArray:d}),l(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=b}).catch(function(r){e._decodingState=FA.FAILED,e._error=r}))}return!0}var XGt=new se,NGt=new m;g9.prototype.update=function(e){let t=e.context;if(l(this._error)){let d=this._error;throw this._error=void 0,d}if(PGt(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)||(WGt(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!==re.SCENE3D){let h=e.mapProjection,p=F.getColumn(d,3,XGt);se.equals(p,se.UNIT_W)||pt.basisTo2D(h,d,d)}let u=this._drawCommand.boundingVolume;if(de.clone(this._boundingSphere,u),this._cull){let h=u.center;F.multiplyByPoint(d,h,h);let p=F.getScale(d,NGt);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!==Fr.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&IGt(this,e,this._style),this._drawCommand.castShadows=Ln.castShadows(this.shadows),this._drawCommand.receiveShadows=Ln.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?Le.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};g9.prototype.isDestroyed=function(){return!1};g9.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 y9=g9;function PA(e){e=e??B.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.shadows=e.shadows??Ln.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new Sp(e.shading),this.style=e.style,this.frameFailed=new _e,this.frameChanged=new _e,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new bb,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(PA.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){us.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(l(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function YGt(e){return`uniform vec4 czm_pickColor; ${e}`}function wGt(e){return function(t){return Gt(t,{czm_pickColor:function(){return e._pickId.color}})}}function MGt(){return"czm_pickColor"}PA.prototype.makeStyleDirty=function(){this._styleDirty=!0};PA.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var kGt=new Q;function ate(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function IA(e,t){return e._intervals.indexOf(t.start)}function UGt(e,t){let n=e._intervals,i=e._clock,o=ate(e);if(o===0)return;let r=e._getAverageLoadTime(),s=Q.addSeconds(i.currentTime,r*o,kGt),a=n.indexOf(s),c=IA(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function DGt(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function OGt(e,t,n){let i=ate(e),o=IA(e,t),r=IA(e,n);return i>=0?o>=r:o<=r}function wRe(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 BGt(e,t,n){let i=IA(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:Ui(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,We.fetchArrayBuffer({url:c}).then(function(d){r.pointCloud=new y9({arrayBuffer:d,cull:!0,fragmentShaderLoaded:YGt,uniformMapLoaded:wGt(e),pickIdLoaded:MGt})}).catch(wRe(e,c))}return r}function zGt(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 HGt(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(MRe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Ui()-t.timestamp)/1e3;zGt(e,a)}}t.touchedFrameNumber=i.frameNumber}var KGt=new F;function JGt(e,t){let n=e.shading;return l(n)&&l(n.baseResolution)?n.baseResolution:l(t.boundingSphere)?W.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function jGt(e){let t=e.shading;return l(t)&&l(t.maximumAttenuation)?t.maximumAttenuation:10}var QGt=new Sp;function MRe(e,t,n,i){let o=e.shading??QGt,r=t.pointCloud,s=t.transform??F.IDENTITY;r.modelMatrix=F.multiplyTransformation(e.modelMatrix,s,KGt),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=JGt(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=jGt(e);try{r.update(i)}catch(a){wRe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function ste(e,t,n,i){let o=BGt(e,t,i);HGt(e,o,n,i)}function qGt(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function kRe(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 $Gt(e,t){let n=IA(e,t),i=e._frames[n];if(l(i)&&i.ready)return i}function YRe(e,t,n,i,o){return l(n)?n.ready?!0:(ste(e,t,i,o),n.ready):!1}function eLt(e,t,n,i,o){let r,s,a,c=e._intervals,d=e._frames,u=IA(e,n),h=IA(e,t);if(u>=h){for(r=u;r>=h;--r)if(s=c.get(r),a=d[r],YRe(e,s,a,i,o))return s}else for(r=u;r<=h;++r)if(s=c.get(r),a=d[r],YRe(e,s,a,i,o))return s;return t}function tLt(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 eR={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};PA.prototype.update=function(e){if(e.mode===re.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)&&tLt(this,o,s),eR.timeSinceLoad=t,eR.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,h=this._previousInterval,p=this._nextInterval,b=DGt(this);if(!l(b))return;let f=!1,y=ate(this),_=y===0;y!==this._clockMultiplier&&(f=!0,this._clockMultiplier=y),(!l(h)||_)&&(h=b),(!l(p)||f||OGt(this,b,p))&&(p=UGt(this,b)),h=eLt(this,h,b,eR,e);let S=$Gt(this,h);l(S)||(ste(this,h,eR,e),S=this._lastRenderedFrame),l(S)&&MRe(this,S,eR,e),l(p)&&ste(this,p,eR,e);let A=this;l(S)&&!l(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),l(S)&&S!==this._lastRenderedFrame&&A.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return A.frameChanged.raiseEvent(A),!0}),this._previousInterval=h,this._nextInterval=p,this._lastRenderedFrame=S;let Z=this._totalMemoryUsageInBytes,V=this.maximumMemoryUsage*1024*1024;Z>V&&kRe(this,qGt(e));let G=d.length-u;l(a)&&a.attenuation&&a.eyeDomeLighting&&G>0&&c.update(e,u,a,this.boundingSphere)};PA.prototype.isDestroyed=function(){return!1};PA.prototype.destroy=function(){return kRe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),he(this)};var tR=PA;function ORe(e,t){if(l(t)){let n=t.clock;l(n)&&n.getValue(e)}}function nLt(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 BRe(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,l(e._scene)&&(e._scene.pixelRatio=t),t}function zRe(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=BRe(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 HRe(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 $o(e,t){e=Mn(e),t=t??B.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=dn.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=dn.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)?Mn(t.creditContainer):n;c.appendChild(a);let d=l(t.creditViewport)?Mn(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 _e,this._allowDataSourcesToSuspendAnimation=!0,this._clock=l(t.clock)?t.clock:new Tf,l(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),zRe(this);try{let p=t.ellipsoid??ie.default,b=new l9({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=b,b.camera.constrainedAxis=m.UNIT_Z,BRe(this),HRe(this);let f=t.globe;l(f)||(f=new cw(p)),f!==!1&&(b.globe=f,b.globe.shadows=t.terrainShadows??Ln.RECEIVE_ONLY);let y=t.skyBox;!l(y)&&ie.WGS84.equals(p)&&(y=m9.createEarthSkyBox()),y!==!1&&(b.skyBox=y,b.sun=new p9,ie.WGS84.equals(p)&&(b.moon=new fw));let _=t.skyAtmosphere;!l(_)&&ie.WGS84.equals(p)&&(_=new d9(p),_.show=t.globe!==!1&&f.show),_!==!1&&(b.skyAtmosphere=_);let S=t.baseLayer;t.globe!==!1&&S!==!1&&(l(S)||(S=bs.fromWorldImagery()),b.imageryLayers.add(S)),l(t.terrainProvider)&&t.globe!==!1&&(b.terrainProvider=t.terrainProvider),l(t.terrain)&&t.globe!==!1&&b.setTerrain(t.terrain),this._screenSpaceEventHandler=new Hu(i),l(t.sceneMode)&&(t.sceneMode===re.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===re.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let A=this;this._onRenderError=function(I,X){A._useDefaultRenderLoop=!1,A._renderLoopRunning=!1,A._showRenderLoopErrors&&A.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,X)},b.renderError.addEventListener(this._onRenderError);let Z=t.dataSources,V=!1;l(Z)||(Z=new MX,V=!0);let E=new GN({scene:b,dataSourceCollection:Z}),G=new Nr;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=Z,this._destroyDataSourceCollection=V,this._dataSourceDisplay=E,this._eventHelper=G,this._canAnimateUpdateCallback=this._updateCanAnimate,G.add(this._clock.onTick,$o.prototype._onTick,this),G.add(b.morphStart,$o.prototype._clearTrackedObject,this),G.add(Z.dataSourceAdded,$o.prototype._onDataSourceAdded,this),G.add(Z.dataSourceRemoved,$o.prototype._onDataSourceRemoved,this),G.add(b.postRender,$o.prototype._postRender,this);let v=Z.length;for(let I=0;I<v;I++)this._dataSourceAdded(Z,Z.get(I));this._dataSourceAdded(void 0,E.defaultDataSource),G.add(Z.dataSourceAdded,$o.prototype._dataSourceAdded,this),G.add(Z.dataSourceRemoved,$o.prototype._dataSourceRemoved,this)}catch(p){throw u&&this.showErrorPanel("Error constructing CesiumWidget.",'Visit <a href="proxy.php?url=http%3A%2F%2Fget.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($o.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&&nLt(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,cte(this);let t=this.scene,n=t.mode;!l(e)||!l(e.position)?(this._needTrackedEntityUpdate=!1,(n===re.COLUMBUS_VIEW||n===re.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===re.COLUMBUS_VIEW||n===re.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,ORe(this.clock,e))}}});$o.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 b=document.createElement("div");if(b.className="cesium-widget-errorPanel-message",a.appendChild(b),u){let f=Zp(n);d||(typeof n=="string"&&(n=new Error(n)),t=Zp({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e} ${t} ${f}`);let y=document.createElement("div");y.className="cesium-widget-errorPanel-message-details collapsed";let _=document.createElement("span");_.className="cesium-widget-errorPanel-more-details",_.appendChild(document.createTextNode("See more...")),y.appendChild(_),y.onclick=function(S){y.removeChild(_),y.appendChild(document.createTextNode(f)),y.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",y.onclick=void 0},a.appendChild(y)}b.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)};$o.prototype.isDestroyed=function(){return!1};$o.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)};$o.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,zRe(this),HRe(this),this._scene.requestRender())};$o.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};$o.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener($o.prototype._onEntityCollectionChanged,this)};$o.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener($o.prototype._onEntityCollectionChanged,this),l(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};$o.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var iLt=new de;$o.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??iLt)===Tt.DONE&&i.update(t)}};$o.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)}};$o.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};$o.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&ORe(this.clock,e)};$o.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,$o.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};$o.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}};$o.prototype.zoomTo=function(e,t){return KRe(this,e,{offset:t},!1)};$o.prototype.flyTo=function(e,t){return KRe(this,e,t,!0)};function KRe(e,t,n,i){cte(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 bs){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 $S(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof $s||r instanceof tR||r instanceof jx){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 x9(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function cte(e){let t=e._zoomPromise;l(t)&&(x9(e),e._completeZoom(!1))}$o.prototype._postRender=function(){oLt(this),rLt(this)};var URe=new de;function oLt(e){let t=e._zoomTarget;if(!l(t)||e.scene.mode===re.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){l(o.offset)||(o.offset=new th(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(t.boundingSphere,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(F.IDENTITY),e._completeZoom(!0)),x9(e)}if(t instanceof tR){if(l(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(h){s(h.boundingSphere),u()});return}if(t instanceof $s||t instanceof jx){s(t.boundingSphere);return}if(t instanceof be){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)),x9(e);return}let a=t,c=[];for(let u=0,h=a.length;u<h;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,URe);if(p===Tt.PENDING)return;p!==Tt.FAILED&&c.push(de.clone(URe))}if(c.length===0){cte(e);return}e.trackedEntity=void 0;let d=de.fromBoundingSpheres(c);e._zoomIsFlight?(x9(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),x9(e),e._completeZoom(!0))}var DRe=new de;function rLt(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=j.getValueOrUndefined(t.position,n);if(!l(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,DRe);if(r===Tt.PENDING)return;let s=o.mode;(s===re.COLUMBUS_VIEW||s===re.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===re.COLUMBUS_VIEW||s===re.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==Tt.FAILED?DRe:void 0;e._entityView=new WN(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var T9=$o;var Uho=x(T(),1);var sLt=new m(1,1,1);function lte(e){e=e??sLt,this._dimensions=m.clone(e)}Object.defineProperties(lte.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){m.clone(e,this._dimensions)}}});var aLt=new m;lte.prototype.emit=function(e){let t=this._dimensions,n=m.multiplyByScalar(t,.5,aLt),i=W.randomBetween(-n.x,n.x),o=W.randomBetween(-n.y,n.y),r=W.randomBetween(-n.z,n.z);e.position=m.fromElements(i,o,r,e.position),e.velocity=m.normalize(e.position,e.velocity)};var dte=lte;var Bho=x(T(),1);function x0(){this.featurePropertiesDirty=!1}Object.defineProperties(x0.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()}}});x0.prototype.hasProperty=function(e,t){fe.throwInstantiationError()};x0.prototype.getFeature=function(e){fe.throwInstantiationError()};x0.prototype.applyDebugSettings=function(e,t){fe.throwInstantiationError()};x0.prototype.applyStyle=function(e){fe.throwInstantiationError()};x0.prototype.update=function(e,t){fe.throwInstantiationError()};x0.prototype.pick=function(e,t,n){fe.throwInstantiationError()};x0.prototype.isDestroyed=function(){fe.throwInstantiationError()};x0.prototype.destroy=function(){fe.throwInstantiationError()};var ute=x0;var _fo=x(T(),1);var Jho=x(T(),1);function _9(e){e=e??B.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new Pg({comparator:_9.comparator})}_9.prototype.addSubtree=function(e){let t=new cLt(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()};_9.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}};_9.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 cLt(e,t){this.subtree=e,this.stamp=t}var S9=_9;function A9(e){e=e??B.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:b,maximumValues:f,maximumTileCount:y}=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===yc.ELLIPSOID?b0.Z_UP:b0.Y_UP,this._minimumValues=b,this._maximumValues=f,this._maximumTileCount=y,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new S9}Object.defineProperties(A9.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}}});A9.fromUrl=async function(e){let t=We.createIfNeeded(e),n=await t.fetchJson();dLt(n);let i=gLt(n,t);await i.load();let{root:o}=n,r=Vi(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new mS({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],c=a.class,d=yLt(s,c);Object.assign(d,uLt(o)),l(o.transform)?d.globalTransform=F.unpack(o.transform):d.globalTransform=F.clone(F.IDENTITY),d.dimensions=m.unpack(a.dimensions),d.maximumTileCount=lLt(s),l(a.padding)&&(d.paddingBefore=m.unpack(a.padding.before),d.paddingAfter=m.unpack(a.padding.after));let u=new A9(d),h=new Fp(t,o,i.schema);return u._implicitTileset=h,u._availableLevels=h.availableLevels,Xi.unload(i),u};function lLt(e){if(l(e.tileset))return e.tileset.getPropertyBySemantic(Rm.TILESET_TILE_COUNT)}function dLt(e){let t=e.root;if(!l(t.content))throw new ue("Root must have content");if(!Vi(t.content,"3DTILES_content_voxels"))throw new ue("Root tile content must have 3DTILES_content_voxels extension");if(!Vi(t,"3DTILES_implicit_tiling")&&!l(t.implicitTiling))throw new ue("Root tile must have implicit tiling");if(!l(e.schema)&&!l(e.schemaUri)&&!Vi(e,"3DTILES_metadata"))throw new ue("Tileset must have a metadata schema")}function uLt(e){let t=e.boundingVolume;if(l(t.box))return pLt(t.box);if(l(t.region))return mLt(t.region);if(Vi(t,"3DTILES_bounding_volume_cylinder"))return bLt(t.extensions["3DTILES_bounding_volume_cylinder"]);throw new ue("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function mLt(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:yc.ELLIPSOID,minBounds:c,maxBounds:d,shapeTransform:a}}var hLt=new m,fLt=new q;function pLt(e){let t=en.unpack(e),n=q.getScale(t.halfAxes,hLt),i=q.getRotation(t.halfAxes,fLt);return{shape:yc.BOX,minBounds:m.negate(n,new m),maxBounds:m.clone(n),shapeTransform:F.fromRotationTranslation(i,t.center)}}function bLt(e){let{minRadius:t,maxRadius:n,height:i,minAngle:o=-W.PI,maxAngle:r=W.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),Pe.unpack(a),m.ONE);return{shape:yc.CYLINDER,minBounds:m.fromElements(t,o,c),maxBounds:m.fromElements(n,r,d),shapeTransform:u}}function gLt(e,t){let{schemaUri:n,schema:i}=e;return l(n)?Xi.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Xi.getSchemaLoader({schema:i})}function yLt(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([b,f])=>{let{type:y,componentType:_}=f,S=o?.properties[b].min,A=o?.properties[b].max,Z=xt.getComponentCount(y),V=JRe(S,Z),E=JRe(A,Z);return{id:b,type:y,componentType:_,minValue:V,maxValue:E}}),a=s.map(b=>b.id),c=s.map(b=>b.type),d=s.map(b=>b.componentType),u=s.map(b=>b.minValue),h=s.map(b=>b.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 JRe(e,t){if(!l(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function xLt(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=Ob(a);return o=await lb.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}A9.prototype.requestData=async function(e){e=e??B.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 Ip({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 xLt(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:y}=s,_=f[0].getDerivedResource({templateValues:a.getTemplateValues()}),S=y.getDerivedResource({url:_.url});return VA.fromGltf(S)};var mte=A9;var Cfo=x(T(),1);function hte(e){e=e??1,this._radius=e??1}Object.defineProperties(hte.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});hte.prototype.emit=function(e){let t=W.randomBetween(0,W.TWO_PI),n=W.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 Z9=hte;var ppo=x(T(),1);var Rfo=x(T(),1),fte={CUMULUS:0};fte.validate=function(e){return e===fte.CUMULUS};var nR=Object.freeze(fte);var Ifo=x(T(),1);function Of(e,t){if(e=e??B.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 TLt=Of.SHOW_INDEX=0,_Lt=Of.POSITION_INDEX=1,SLt=Of.SCALE_INDEX=2,ALt=Of.MAXIMUM_SIZE_INDEX=3,ZLt=Of.SLICE_INDEX=4,CLt=Of.BRIGHTNESS_INDEX=5,VLt=Of.COLOR_INDEX=6;Of.NUMBER_OF_PROPERTIES=7;function XA(e,t){let n=e._cloudCollection;l(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Of.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,XA(this,TLt))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),XA(this,_Lt))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;M.equals(t,e)||(M.clone(e,t),XA(this,SLt))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;m.equals(t,e)||(m.clone(e,t),XA(this,ALt))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),XA(this,VLt))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,XA(this,ZLt))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,XA(this,CLt))}}});Of.prototype._destroy=function(){this._cloudCollection=void 0};var $u=Of;var em,lz=new m,RLt={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},ELt={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},GLt=$u.SHOW_INDEX,LLt=$u.POSITION_INDEX,WLt=$u.SCALE_INDEX,vLt=$u.MAXIMUM_SIZE_INDEX,FLt=$u.SLICE_INDEX,ILt=$u.BRIGHTNESS_INDEX,PLt=$u.NUMBER_OF_PROPERTIES,XLt=$u.COLOR_INDEX;function Bf(e){e=e??B.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(PLt),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:jRe(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 jRe(e){return function(){return lz.x=e._textureSliceWidth,lz.y=e._noiseTextureRows,lz.z=1/e._noiseTextureRows,lz}}Object.defineProperties(Bf.prototype,{length:{get:function(){return bte(this),this._clouds.length}}});function QRe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Bf.prototype.add=function(e){e=e??B.EMPTY_OBJECT;let t=e.cloudType??nR.CUMULUS,n;return t===nR.CUMULUS&&(n=new $u(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};Bf.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Bf.prototype.removeAll=function(){QRe(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function bte(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}}Bf.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};Bf.prototype.contains=function(e){return l(e)&&e._cloudCollection===this};Bf.prototype.get=function(e){return bte(this),this._clouds[e]};var NLt=new Float32Array([-1,-1,1,-1,1,1,-1,1]),YLt=new Uint16Array([0,1,2,0,2,3]);function wLt(e){let t=qe.createVertexBuffer({context:e,typedArray:NLt,usage:Fe.STATIC_DRAW}),n=qe.createIndexBuffer({context:e,typedArray:YLt,usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:K.FLOAT}];return new Bn({context:e,attributes:i,indexBuffer:n})}var gte;function MLt(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=qe.createIndexBuffer({context:e,typedArray:o,usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function kLt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return l(t)||(t=qe.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Fe.STATIC_DRAW,indexDatatype:Ne.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function ULt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return l(t)||(t=qe.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Fe.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function DLt(e,t,n){let i=[{index:em.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:Fe.STATIC_DRAW},{index:em.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:Fe.STATIC_DRAW},{index:em.packedAttribute0,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:Fe.STATIC_DRAW},{index:em.packedAttribute1,componentsPerAttribute:4,componentDatatype:K.FLOAT,usage:Fe.STATIC_DRAW},{index:em.color,componentsPerAttribute:4,componentDatatype:K.UNSIGNED_BYTE,normalize:!0,usage:Fe.STATIC_DRAW}];n&&i.push({index:em.direction,componentsPerAttribute:2,componentDatatype:K.FLOAT,vertexBuffer:ULt(e)});let o=n?t:4*t;return new w0(e,i,o,n)}var pte=new Zn;function qRe(e,t,n,i){let o,r=n[em.positionHighAndScaleX],s=n[em.positionLowAndScaleY],a=i.position;Zn.fromCartesian(a,pte);let c=i.scale,d=pte.high,u=pte.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 $Re(e,t,n,i){let o,r=n[em.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 eEe(e,t,n,i){let o,r=n[em.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 tEe(e,t,n,i){let o,r=n[em.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 OLt(e,t,n,i){qRe(e,t,n,i),$Re(e,t,n,i),eEe(e,t,n,i),tEe(e,t,n,i)}function BLt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=wLt(a),o._spNoise=$t.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:De.UNSIGNED_BYTE,pixelFormat:Ke.RGBA,sampler:new zt({wrapS:hn.REPEAT,wrapT:hn.REPEAT,minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST})});let u=new _l({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:jRe(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 zLt(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=DLt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];OLt(e,t,s,c)}n._vaf.commit(gte(i))}}var HLt=[];function KLt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,d=HLt;d.length=0,(c[LLt]||c[WLt])&&d.push(qRe),(c[GLt]||c[ILt])&&d.push($Re),(c[vLt]||c[FLt])&&d.push(eEe),c[XLt]&&d.push(tEe);let u=d.length,h=i._vaf.writers,p,b,f;if(a/r>.1){for(p=0;p<a;++p)for(b=s[p],b._dirty=!1,f=0;f<u;++f)d[f](e,t,h,b);i._vaf.commit(gte(n))}else{for(p=0;p<a;++p){for(b=s[p],b._dirty=!1,f=0;f<u;++f)d[f](e,t,h,b);i._instanced?i._vaf.subCommit(b._index,1):i._vaf.subCommit(b._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function JLt(e,t,n,i){let o=t.context,r=e,s=new Oe({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new Oe({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=$t.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:em}),r._rs=Ue.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!1,blending:rn.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function jLt(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 et),u.pass=Le.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)}}}Bf.prototype.update=function(e){if(bte(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:l(this._noiseTexture),!this._ready&&!this._loading&&!t&&BLt(this,e,LY,GY),this._instanced=e.context.instancedArrays,em=this._instanced?ELt:RLt,gte=this._instanced?kLt:MLt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?zLt(this,e):r>0&&KLt(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)&&JLt(this,e,EY,RY),jLt(this,e))};Bf.prototype.isDestroyed=function(){return!1};Bf.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(),QRe(this._clouds),he(this)};var yte=Bf;var xpo=x(T(),1);var QLt=W.toRadians(30);function xte(e){this._angle=e??QLt}Object.defineProperties(xte.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});xte.prototype.emit=function(e){let t=Math.tan(this._angle),n=W.randomBetween(0,W.TWO_PI),i=W.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 Tte=xte;var Zpo=x(T(),1);function C9(e){e=e??B.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=Ao.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(C9.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}}});C9.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;C9.prototype.isTranslucent=Ao.prototype.isTranslucent;C9.prototype.getRenderState=Ao.prototype.getRenderState;var _te=C9;var Npo=x(T(),1);function dz(e){e=e??B.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 Ft({geometry:new pg({positions:[m.ZERO,m.UNIT_X],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.RED,U.RED],arcType:cn.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),n=new Ft({geometry:new pg({positions:[m.ZERO,m.UNIT_Y],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.GREEN,U.GREEN],arcType:cn.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),i=new Ft({geometry:new pg({positions:[m.ZERO,m.UNIT_Z],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.BLUE,U.BLUE],arcType:cn.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this});this._primitive=new Pn({geometryInstances:[t,n,i],appearance:new Ws,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 V9=dz;var kpo=x(T(),1);function qLt(e){this.direction=m.clone(e.direction),this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??1}var Ste=qLt;var e0o=x(T(),1);var Dpo=x(T(),1),R9=`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 Bpo=x(T(),1),E9=`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 NA(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=l(e.material)?e.material:ji.fromType(ji.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??E9,this._fragmentShaderSource=e.fragmentShaderSource??R9,this._renderState=Ao.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(NA.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 NA.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});NA.VERTEX_FORMAT=Xe.POSITION_AND_ST;NA.prototype.getFragmentShaderSource=Ao.prototype.getFragmentShaderSource;NA.prototype.isTranslucent=Ao.prototype.isTranslucent;NA.prototype.getRenderState=Ao.prototype.getRenderState;var Ate=NA;var T0o=x(T(),1);var s0o=x(T(),1);function iR(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"}iR.packedLength=Ma.packedLength;iR.pack=function(e,t,n){return Ma.pack(e._ellipsoidGeometry,t,n)};var $Lt=new Ma,qx={radius:void 0,radii:new m,vertexFormat:new Xe,stackPartitions:void 0,slicePartitions:void 0};iR.unpack=function(e,t,n){let i=Ma.unpack(e,t,$Lt);return qx.vertexFormat=Xe.clone(i._vertexFormat,qx.vertexFormat),qx.stackPartitions=i._stackPartitions,qx.slicePartitions=i._slicePartitions,l(n)?(m.clone(i._radii,qx.radii),n._ellipsoidGeometry=new Ma(qx),n):(qx.radius=i._radii.x,new iR(qx))};iR.createGeometry=function(e){return Ma.createGeometry(e._ellipsoidGeometry)};var G9=iR;var eWt=1e5;function L9(e){e=e??B.EMPTY_OBJECT;let t=e.credit;typeof t=="string"&&(t=new yt(t)),this._credit=t,this._radius=l(e.radius)?e.radius:eWt,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 G9({radius:this._radius,vertexFormat:Xe.ALL}),i=new Ft({geometry:n,modelMatrix:this._transform}),o=new ji({fabric:{type:"Image",uniforms:{image:this._image,repeat:new M(-this._repeatHorizontal,this._repeatVertical)}}});return this._primitive=new Pn({geometryInstances:i,appearance:new xo({material:o,closed:!0,faceForward:!1,translucent:!1,renderState:{cull:{enabled:!1}}}),credit:this._credit}),this}Object.defineProperties(L9.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)}}});L9.prototype.update=function(e){return l(this._credit)&&e.creditDisplay.addCreditToNextFrame(this._credit),this._primitive.update(e)};L9.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};L9.prototype.isDestroyed=function(){return this._primitive.isDestroyed()};var Zte=L9;var R0o=x(T(),1);function Hd(e){this._scene=e.scene,this.samplingWindow=e.samplingWindow??Hd.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??Hd.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??Hd.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??Hd.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??Hd.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new _e,this._nominalFrameRate=new _e,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){tWt(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(){nWt(t)}this._visibilityChangeRemoveListener=void 0,l(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}Hd.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};Hd.fromScene=function(e){return(!l(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new Hd({scene:e})),e._frameRateMonitor};Object.defineProperties(Hd.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}}});Hd.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};Hd.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};Hd.prototype.isDestroyed=function(){return!1};Hd.prototype.destroy=function(){return this._preUpdateRemoveListener(),l(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),he(this)};function tWt(e,t){if(e._pauseCount>0)return;let n=Ui();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/li.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/li.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/li.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 nWt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var W9=Hd;var dbo=x(T(),1);var L0o=x(T(),1);var iWt=1953029805,oWt=2917034100;function Cte(e,t){if(Cte.passThroughDataForTesting)return t;let n=e.byteLength;if(n===0||n%4!==0)throw new ue("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===iWt||o===oWt)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++}Cte.passThroughDataForTesting=!1;var v9=Cte;var j0o=x(T(),1),dWt=x(Vte(),1);var N0o=x(T(),1);var F0o=x(T(),1);function rWt(e,t){return(e&t)!==0}var gl=rWt;var sWt=[1,2,4,8],nEe=15,aWt=16,cWt=64,lWt=128;function T0(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}T0.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 T0(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};T0.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};T0.prototype.hasSubtree=function(){return gl(this._bits,aWt)};T0.prototype.hasImagery=function(){return gl(this._bits,cWt)};T0.prototype.hasTerrain=function(){return gl(this._bits,lWt)};T0.prototype.hasChildren=function(){return gl(this._bits,nEe)};T0.prototype.hasChild=function(e){return gl(this._bits,sWt[e])};T0.prototype.getChildBitmask=function(){return this._bits&nEe};var F9=T0;function uWt(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 mWt=uWt(`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 tm(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=W.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(tm.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});tm.fromUrl=async function(e){let t=e;typeof t!="string"&&!(t instanceof We)&&(t=e.url);let n=We.createIfNeeded(t);n.appendForwardSlash();let i=new tm;i._resource=n;try{await hWt(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${oEe(i,"",1).url}: ${o}`;throw new ue(r)}return i};tm.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;gl(t,r)?gl(e,r)&&(s|=1):(s|=2,gl(e,r)||(s|=1)),i+=s}return i};tm.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];gl(s,2)?gl(s,1)||(t|=r):(n|=r,gl(s,1)&&(t|=r))}return{x:t,y:n,level:i}};tm.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 iEe=new $n("decodeGoogleEarthEnterprisePacket");tm.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=oEe(this,e,t,n).fetchArrayBuffer();if(!l(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return iEe.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,y){return f.length-y.length});let b=p.length;for(let f=0;f<b;++f){let y=p[f];if(d[y]!==null){let S=F9.clone(d[y]),A=y.length;if(A===h)S.setParent(u);else if(A>1){let Z=r[y.substring(0,y.length-1)];S.setParent(Z)}r[y]=S}else r[y]=null}})})};tm.prototype.populateSubtree=function(e,t,n,i){let o=tm.tileXYToQuadKey(e,t,n);return Gte(this,o,i)};function Gte(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 xr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),Gte(e,t,s)});if(!l(r)||!r.hasSubtree())return Promise.reject(new ue(`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 xr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),Gte(e,t,s)}).finally(function(){delete a[o]})}tm.prototype.getTileInformation=function(e,t,n){let i=tm.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};tm.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function oEe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var Rte,Ete;function hWt(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!l(Ete)){let n=qt("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;Ete=hT(n).then(function(){Rte=window.cesiumGoogleEarthDbRootParser(dWt),l(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return Ete.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=Rte.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 iEe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=Rte.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 yt(d.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=mWt})}var Xg=tm;var rEe=x(Vte(),1);function Lte(){this._image=new Image}Lte.prototype.isReady=function(){return!0};Lte.prototype.shouldDiscardImage=function(e){return e===this._image};function YA(e){e=e??B.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 Qi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new ce(-W.PI,-W.PI,W.PI,W.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new yt(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new Lte),this._errorEvent=new _e}Object.defineProperties(YA.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}}});YA.fromMetadata=function(e,t){if(!e.imageryPresent)throw new ue(`The server ${e.url} doesn't have imagery`);let n=new YA(t);return n._metadata=e,n};YA.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]}};YA.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=Xg.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!l(a)){if(r.isValid(s)){let d=new xr({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=fWt(this,a,e,t,n,i).fetchArrayBuffer();if(l(c))return c.then(function(d){v9(r.key,d);let u=new Uint8Array(d),h,p=r.protoImagery;if((!l(p)||!p)&&(h=pWt(u)),!l(h)&&(!l(p)||p)){let b=bWt(u);h=b.imageType,u=b.imageData}return!l(h)||!l(u)?o:ab({uint8Array:u,format:h,flipY:!0})})};YA.prototype.pickFeatures=function(e,t,n,i,o){};function fWt(e,t,n,i,o,r){let s=Xg.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 pWt(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 bWt(e){let t=rEe.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 ue("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 Wte=YA;var Cbo=x(T(),1);var gWt=600;function _0(e){e=e??B.EMPTY_OBJECT,this._key=l(e.key)?e.key:ua.defaultApiKey,this._baseResource=We.createIfNeeded(e.url??ua.streetViewStaticApiEndpoint),this._metadataResource=this._baseResource.getDerivedResource({url:"streetview/metadata"}),this._tileSize=e.tileSize??gWt}Object.defineProperties(_0.prototype,{});_0.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(W.toDegrees(t.longitude),W.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,b,f]=await Promise.all(c),y=pt.localFrameToFixedFrameGenerator("north","down"),_=F.getMatrix3(y(a,ie.default),new q);return new WA({sources:{positiveX:d,negativeX:u,positiveY:h,negativeY:p,positiveZ:b,negativeZ:f},transform:_,credit:s})};_0.prototype.getNearestPanoId=async function(e,t){let i=[W.toDegrees(e.latitude),W.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}};_0.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};_0.prototype._loadFaceImage=async function(e){let t=this._buildFaceUrl(e);try{return await We.fetchImage({url:t,preferImageBitmap:!0,flipY:!0})}catch{throw new fe(`Failed to load Street View face image: ${t}`)}};_0.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};_0.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 _0({...e})};_0._parseMetadata=function(e){return{cartographic:be.fromDegrees(e.location.lng,e.location.lat,0)}};var vte=_0;var vbo=x(T(),1);var yWt=new U(1,1,1,.4),xWt=new U(0,1,0,.05),TWt=new U(0,.5,0,.2);function wA(e){e=e??B.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 Qi({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??yWt,this._glowColor=e.glowColor??xWt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??TWt,this._errorEvent=new _e,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(wA.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}}});wA.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()};wA.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};wA.prototype.getTileCredits=function(e,t,n){};wA.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};wA.prototype.pickFeatures=function(e,t,n,i,o){};var Fte=wA;var hyo=x(T(),1);var wgo=x(T(),1);var Sgo=x(T(),1);var Ubo=x(T(),1);function zf(){}zf._maxDecodingConcurrency=Math.max(dn.hardwareConcurrency-1,1);zf._decodeTaskProcessor=new $n("decodeI3S",zf._maxDecodingConcurrency);zf._promise=void 0;async function _Wt(){if(await zf._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return zf._decodeTaskProcessor;throw new ue("I3S decoder could not be initialized.")}zf.decode=async function(e,t,n,i,o){return l(zf._promise)||(zf._promise=_Wt()),zf._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=q.fromRotationX(-W.PI_OVER_TWO),p=new q;q.multiply(h,a,p);let b=be.fromDegrees(c,d,u),f=ie.WGS84.cartographicToCartesian(b),y={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:b,cartesianCenter:f,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(y)})};var I9=zf;var zbo=x(T(),1);function Ite(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(Ite.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});Ite.prototype.load=async function(){return this._data=await Hf.loadJson(this._resource),this._data};var P9=Ite;var jbo=x(T(),1);function Ng(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(Ng.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 SWt(e){return e==="String"?1:uz(e)}async function AWt(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)}Ng.prototype.load=function(){return l(this._loadPromise)?this._loadPromise:(this._loadPromise=AWt(this).catch(function(e){console.error(e)}),this._loadPromise)};Ng.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}};Ng.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};Ng.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)}}}};Ng.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};Ng.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=SWt(i.valueType)}if(e.byteLength<t)throw new ue(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};Ng.prototype._validateBody=function(e,t){if(!l(this._header.count))throw new ue(`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 ue(`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 ue(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new ue(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var X9=Ng;var rgo=x(T(),1);var qbo=x(T(),1);function ZWt(e){return e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var MA=ZWt;function N9(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(N9.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});N9.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var CWt=new m,VWt=new m,RWt=new m,EWt=new m,GWt=new m;function Pte(e,t,n,i){let o=m.subtract(i,n,CWt),r=m.cross(o,m.subtract(e,n,VWt),EWt),s=m.cross(o,m.subtract(t,n,RWt),GWt);return m.dot(r,s)>=0}var LWt=new m,WWt=new m,vWt=new m,FWt=new m,IWt=new m,PWt=new m,XWt=new m,NWt=new m,YWt=new m,wWt=new m;N9.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,q.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 b,f,y;l(u)?(b=u[p],f=u[p+1],y=u[p+2]):(b=p*3,f=p*3+1,y=p*3+2);let _=m.fromElements(d[b*3],d[b*3+1],d[b*3+2],LWt),S=m.fromElements(d[f*3],d[f*3+1],d[f*3+2],WWt),A=new m(d[y*3],d[y*3+1],d[y*3+2],vWt);if(!Pte(i,_,S,A)||!Pte(i,S,_,A)||!Pte(i,A,_,S))continue;let Z=m.subtract(S,_,FWt),V=m.subtract(A,_,IWt),E=m.cross(Z,V,PWt);if(m.magnitude(E)===0)continue;let G=m.normalize(E,XWt),v=m.subtract(i,_,NWt),I=Math.abs(m.dot(v,G));if(I<o){o=I,r=p;let X=m.magnitudeSquared(m.subtract(i,_,v)),N=m.magnitudeSquared(m.subtract(i,S,YWt)),g=m.magnitudeSquared(m.subtract(i,A,wWt));X<N&&X<g?(a=b,c=_,s=X):N<g?(a=f,c=S,s=N):(a=y,c=A,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 sEe(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(MA(e[i])):t.push(e[i]);return t}N9.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 Z=this._parent._data.mesh.material.definition;if(Z>=0&&Z<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[Z],c=u,l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorTexture)){d=!0,c.pbrMetallicRoughness.baseColorTexture.index=0;let V="0";if(l(this._layer._data.textureSetDefinitions))for(let E=0;E<this._layer._data.textureSetDefinitions.length;E++){let G=this._layer._data.textureSetDefinitions[E];for(let v=0;v<G.formats.length;v++){let I=G.formats[v];if(I.format==="jpg"){V=I.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/${V}`}).url)}l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorFactor)&&(c.pbrMetallicRoughness.baseColorFactor=sEe(c.pbrMetallicRoughness.baseColorFactor)),l(c.emissiveFactor)&&(c.emissiveFactor=sEe(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=[],b=[],f=[];d&&(p=[{sampler:0,source:0}],b=[{uri:h}],f=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let y=[],_=n.length;for(let A=0;A<_;A++){let Z=n[A].primitives,V=Z.length;for(let E=0;E<V;E++){let G=Z[E];if(l(G.material)){for(;G.material>=y.length;){let I=Be(c,!0);y.push(I)}let v=y[G.material];l(G.extra)&&G.extra.isTransparent?l(v.alphaMode)||(v.alphaMode="BLEND"):v.alphaMode==="BLEND"&&(v.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:y,textures:p,images:b,samplers:f,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var oR=N9;function yl(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(yl.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}}});yl.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new Bm(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!l(this._nodeIndex)){let o=await Hf.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 aEe(e,t){let n=new X9(e,t);return e._fields[t.name]=n,n.load()}yl.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(aEe(this,i))}return Promise.all(t)};yl.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 aEe(this,o)}return Promise.resolve()};yl.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)};yl.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};yl.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 yl(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};yl.prototype._loadGeometryData=function(){let e=[];if(l(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new oR(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 oR(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};yl.prototype._loadFeatureData=function(){let e=[];if(l(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new P9(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};yl.prototype._clearGeometryData=function(){this._geometryData=[]};yl.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=be.fromDegrees(e.center[0],e.center[1],e.center[2]):n=be.fromDegrees(t[0],t[1],t[2]),l(this._dataProvider._geoidDataList)&&l(n))for(let S=0;S<this._dataProvider._geoidDataList.length;S++){let A=this._dataProvider._geoidDataList[S],Z=A.projection.project(n);if(Z.x>A.nativeExtent.west&&Z.x<A.nativeExtent.east&&Z.y>A.nativeExtent.south&&Z.y<A.nativeExtent.north){n.height+=DWt(Z.x,Z.y,A);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 S=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/S}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let S=this._data.lodThreshold;s=r/S}else console.error("Invalid lodSelectionMetricType in Layer");else if(l(this._data.lodSelection))for(let S=0;S<this._data.lodSelection.length;S++)this._data.lodSelection[S].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[S].maxError);s===1/0&&(s=1e5);let a=s*16,c=new Sc(0,0,0),d=pt.headingPitchRollQuaternion(o,c);l(this._data.obb)&&(d=new Pe(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=q.fromQuaternion(d),h=q.inverse(u,new q),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),b=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=b,this._inverseRotationMatrix=h;let y=[];for(let S=0;S<this._children.length;S++)y.push(this._children[S]._create3DTileDefinition());return{children:y,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}};yl.prototype._loadSymbology=async function(){!l(this._symbologyData)&&l(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};yl.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 I9.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 MWt(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 kWt(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 cEe(e,t){let n=e._tile.content.batchTable;if(l(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await MWt(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(!kWt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}yl.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=cEe(this,t);e.push(n)}return Promise.all(e)};Bm.prototype._hookedRequestContent=Bm.prototype.requestContent;Bm.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 We({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(()=>{cEe(e._i3sNode,n)})),e._isLoading=!1,t})}};function UWt(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 DWt(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),b=mz(c,d,n.width,n.buffer),f=UWt(o,r,u,h,p,b);return f=f*n.scale+n.offset,f}Object.defineProperties(Bm.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var rR=yl;var Rgo=x(T(),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 Xte(e,t){let n=[];for(let i=0;i<e.length;i++){let o=U.byteToFloat(e[i]);i<3?n.push(MA(o)):n.push(o)}return n.length===3&&(l(t)?n.push(1-t/100):n.push(1)),n}function sR(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=Xte(r.color,r.transparency))):l(s)&&(n.edges={},l(s.color)&&(n.edges.color=Xte(s.color,s.transparency))),!t){let a=o.material;l(a)&&(n.material={colorMixMode:a.colorMixMode},l(a.color)&&(n.material.color=Xte(a.color,a.transparency)))}break}}return n}function OWt(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=sR(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]=sR(o.symbol,t)}return n}}function BWt(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(sR(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=sR(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=sR(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=OWt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=sR(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=BWt(i,n))}};function lEe(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?lEe(s,t,n,i):s}}function zWt(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 HWt(e,t,n){let i=t[n],o=zWt(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=>lEe(this._uniqueValueHash,i,0,r):l(this._classBreaksHash)&&(o=r=>HWt(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 Y9=hz;function Kd(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 We({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(Kd.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}}});Kd.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new ue(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new Y9(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()};Kd.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)}};Kd.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]}}};Kd.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 rR(this,t,!0)}else this._rootNode=new rR(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};Kd.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]})};Kd._fetchJson=function(e){return e.fetchJson()};Kd.prototype._loadNodePage=function(e){let t=this;if(!l(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=Kd._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]};Kd.prototype._computeExtent=function(){l(this._data.fullExtent)?this._extent=ce.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):l(this._data.store.extent)&&(this._extent=ce.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};Kd.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)?Be(e):{},e.outlineColor=U.fromCartesian4(se.fromArray(o))),this._tileset=await $s.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()})};Kd.prototype._updateVisibility=function(){l(this._tileset)&&(this._tileset.show=this._parent.show)};Kd.prototype.filterByAttributes=function(e){this._filters=l(e)?Be(e,!0):[];let t=this._rootNode;return l(t)?t._filterFeatures():Promise.resolve()};var kA=Kd;var Ogo=x(T(),1);function fz(e,t){this._dataProvider=e,this._resource=new We({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 Hf.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 w9=fz;var jgo=x(T(),1);function M9(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(M9.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}}});M9._fromData=async function(e,t,n,i){let o=new M9(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=M9._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 We({url:r});s.setQueryParameters(e.resource.queryParameters),s.appendForwardSlash(),o._resource=s;let a=await Hf.loadJson(o._resource),c=new kA(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 k9=M9;var mEe=x(dEe(),1);function ia(e){e=e??B.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??B.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 KWt(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 uEe(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=KWt(e,t.id);if(l(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=k9._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 w9(e,o);await r.load(),e._attributeStatistics.push(r)}if(l(t.fullExtent)){let o=ce.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 kA(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??B.EMPTY_OBJECT;let n=We.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=uEe(o,i.layers[a],t);s.push(c)}await Promise.all(s)}else await uEe(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 ue(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 ue(`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 JWt=new M;function jWt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=be.fromRadians(t.west,t.north),a=be.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 b=M.fromElements(h,p,JWt),f=b.toString();if(!o.hasOwnProperty(f)){let y={x:b.x,y:b.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=y,i.push(y)}}let u=[];for(let h=0;h<i.length;++h){let p=i[h],b=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(b)}return Promise.all(u).then(function(h){let p=[];for(let b=0;b<h.length;b++){let f={tilingScheme:n,x:i[b].x,y:i[b].y,level:i[b].level},y=h[b],_="Geographic";n._projection instanceof fi&&(_="WebMercator");let S={projectionType:_,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:y._height,width:y._width,scale:y._structure.heightScale,offset:y._structure.heightOffset};if(y._encoding===rh.LERC){let A=mEe.default.decode(y._buffer);S.buffer=A.pixels[0]}else S.buffer=y._buffer;p.push(S)}return p})}async function QWt(e){let t=e._geoidTiledTerrainProvider;if(l(t))try{let n=await jWt(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=QWt(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)?ce.union(e,n,e):e=ce.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 Hf=ia;var Ryo=x(T(),1);var yyo=x(T(),1);var oa={};oa.ExportStatus=Object.freeze({NotStarted:"NotStarted",InProgress:"InProgress",Complete:"Complete",Invalid:"Invalid"});oa.ExportType=Object.freeze({IMODEL:"IMODEL",CESIUM:"CESIUM","3DTILES":"3DTILES"});oa.RealityDataType=Object.freeze({Cesium3DTiles:"Cesium3DTiles",PNTS:"PNTS",RealityMesh3DTiles:"RealityMesh3DTiles",Terrain3DTiles:"Terrain3DTiles",GaussianSplat3DTiles:"GS_3DT",KML:"KML",GeoJSON:"GeoJSON",Unstructured:"Unstructured"});oa.defaultAccessToken=void 0;oa.defaultShareKey=void 0;oa._getAuthorizationHeader=function(){return l(oa.defaultShareKey)?`Basic ${oa.defaultShareKey}`:`Bearer ${oa.defaultAccessToken}`};oa.apiEndpoint=new We({url:"https://api.bentley.com"});oa.getExports=async function(e,t){let n=new We({url:`${oa.apiEndpoint}mesh-export`,headers:{Authorization:oa._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json",Prefer:"return=representation"},queryParameters:{iModelId:e,exportType:oa.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 ue(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new ue("Not allowed, forbidden");if(i.statusCode===422)throw new ue(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new ue("Too many requests")}throw new ue(`Unknown request failure ${i.statusCode}`)}};oa.getRealityDataMetadata=async function(e,t){let n=new We({url:`${oa.apiEndpoint}reality-management/reality-data/${t}`,headers:{Authorization:oa._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 ue(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new ue("Not allowed, forbidden");if(i.statusCode===404)throw new ue(`Reality data not found: ${e}, ${t}`);if(i.statusCode===422)throw new ue(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new ue("Too many requests")}throw new ue(`Unknown request failure ${i.statusCode}`)}};oa.getRealityDataURL=async function(e,t,n){let i=new We({url:`${oa.apiEndpoint}reality-management/reality-data/${t}/readaccess`,headers:{Authorization:oa._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 ue(`Unauthorized, bad token, wrong scopes or headers bad. ${s}`)}else{if(o.statusCode===403)throw console.error(r.error.code,r.error.message),new ue("Not allowed, forbidden");if(o.statusCode===404)throw new ue(`Reality data not found: ${e}, ${t}`);if(o.statusCode===422)throw new ue(`Unprocessable Entity:${r.error.code} ${r.error.message}`);if(o.statusCode===429)throw new ue("Too many requests")}throw new ue(`Unknown request failure ${o.statusCode}`)}};var ra=oa;var U9={};U9.createTilesetFromIModelId=async function({iModelId:e,changesetId:t,tilesetOptions:n}){let{exports:i}=await ra.getExports(e,t);if(i.length>0&&i.every(c=>c.status===ra.ExportStatus.Invalid))throw new ue(`All exports for this iModel are Invalid: ${e}`);let o=i.find(c=>c.status===ra.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 We({url:s});return $s.fromUrl(a,n)};U9.createTilesetForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i,tilesetOptions:o}){if(!l(n)||!l(i)){let c=await ra.getRealityDataMetadata(e,t);i=c.rootDocument,n=c.type}if(![ra.RealityDataType.Cesium3DTiles,ra.RealityDataType.PNTS,ra.RealityDataType.RealityMesh3DTiles,ra.RealityDataType.Terrain3DTiles,ra.RealityDataType.GaussianSplat3DTiles].includes(n))throw new ue(`Reality data type is not a mesh type: ${n}`);let s=await ra.getRealityDataURL(e,t,i),a={maximumScreenSpaceError:4,...o};return $s.fromUrl(s,a)};U9.createDataSourceForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i}){if(!l(n)||!l(i)){let s=await ra.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![ra.RealityDataType.KML,ra.RealityDataType.GeoJSON].includes(n))throw new ue(`Reality data type is not a data source type: ${n}`);let r=await ra.getRealityDataURL(e,t,i);return n===ra.RealityDataType.GeoJSON?Cx.load(r):KS.load(r)};U9.loadGeospatialFeatures=async function({iTwinId:e,collectionId:t,limit:n}){let i=n??1e4,o=`${ra.apiEndpoint}geospatial-features/itwins/${e}/ogc/collections/${t}/items`,r=new We({url:o,headers:{Authorization:ra._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:i,client:"CesiumJS"}});return Cx.load(r)};var Nte=U9;var Lyo=x(T(),1);function hEe(){}Object.defineProperties(hEe.prototype,{color:{get:fe.throwInstantiationError},intensity:{get:fe.throwInstantiationError}});var Yte=hEe;var Nyo=x(T(),1);var qWt=/\/$/,fEe=new yt('© <a href="proxy.php?url=https%3A%2F%2Fwww.mapbox.com%2Fabout%2Fmaps%2F">Mapbox</a> © <a href="proxy.php?url=http%3A%2F%2Fwww.openstreetmap.org%2Fcopyright">OpenStreetMap</a> <strong><a href="proxy.php?url=https%3A%2F%2Fwww.mapbox.com%2Fmap-feedback%2F">Improve this map</a></strong>');function aR(e){e=e??B.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=We.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();qWt.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 yt(c))):c=fEe,this._resource=i,this._imageryProvider=new ps({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(aR.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}}});aR.prototype.getTileCredits=function(e,t,n){};aR.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};aR.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};aR._defaultCredit=fEe;var wte=aR;var wyo=x(T(),1);function Mte(e){}Mte.prototype.isReady=function(){return!0};Mte.prototype.shouldDiscardImage=function(e){return!1};var kte=Mte;var Kyo=x(T(),1);var $Wt=new yt("MapQuest, Open Street Map and contributors, CC-BY-SA");function bz(e){e=e??B.EMPTY_OBJECT;let t=We.createIfNeeded(e.url??"https://tile.openstreetmap.org/");t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${e.fileExtension??"png"}`;let n=new Xs({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,c=n.positionToTileXY(ce.southwest(a),r),d=n.positionToTileXY(ce.northeast(a),r),u=(Math.abs(d.x-c.x)+1)*(Math.abs(d.y-c.y)+1),h=e.credit??$Wt;typeof h=="string"&&(h=new yt(h)),ps.call(this,{url:t,credit:h,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}l(Object.create)&&(bz.prototype=Object.create(ps.prototype),bz.prototype.constructor=bz);var Yg=bz;var Qyo=x(T(),1);function pEe(){fe.throwInstantiationError()}Object.defineProperties(pEe.prototype,{show:{get:fe.throwInstantiationError,set:fe.throwInstantiationError},transform:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError}});var Ute=pEe;var exo=x(T(),1);function gz(){fe.throwInstantiationError()}Object.defineProperties(gz.prototype,{});gz.fromUrl=function(e){fe.throwInstantiationError()};gz.prototype.loadPanorama=function(e){fe.throwInstantiationError()};var Dte=gz;var axo=x(T(),1);var evt=new M(1,1);function Ote(e){e=e??B.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??evt),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(Ote.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var bEe=new m;Ote.prototype.update=function(e,t){return m.multiplyByScalar(this.velocity,e,bEe),m.add(this.position,bEe,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 cR=Ote;var dxo=x(T(),1);function gEe(e){e=e??B.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(gEe.prototype,{complete:{get:function(){return this._complete}}});var Bte=gEe;var hxo=x(T(),1);function yEe(e){}yEe.prototype.emit=function(e){fe.throwInstantiationError()};var zte=yEe;var Exo=x(T(),1);var xEe=new M(1,1);function D9(e){e=e??B.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 Z9(.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??xEe),this._maximumImageSize=M.clone(e.imageSize??e.maximumImageSize??xEe),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 _e,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(D9.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 tvt(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 cR;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function nvt(e){let t=e._particlePool.pop();return l(t)||(t=new cR),t}function ivt(e,t){e._particlePool.push(t)}function ovt(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 rvt(e){l(e._billboard)&&(e._billboard.show=!1)}function TEe(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=W.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=W.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=W.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=W.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new U(i,o,r,s),n.scale=W.lerp(t.startScale,t.endScale,t.normalizedAge)}function svt(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=W.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=W.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=W.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=W.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=W.randomBetween(e._minimumSpeed,e._maximumSpeed);m.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function avt(e,t){if(e._isComplete)return 0;t=W.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+=W.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var yz=new m;D9.prototype.update=function(e){if(!this.show)return;l(this._billboardCollection)||(this._billboardCollection=new Tu),this._updateParticlePool&&(tvt(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)?TEe(this,s):(rvt(s),ivt(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=avt(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=nvt(this),this._emitter.emit(s),m.add(s.position,s.velocity,yz),F.multiplyByPoint(d,yz,yz),s.position=F.multiplyByPoint(d,s.position,s.position),m.subtract(yz,s.position,s.velocity),m.normalize(s.velocity,s.velocity),svt(this,s),TEe(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=W.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&&ovt(this)};D9.prototype.isDestroyed=function(){return!1};D9.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),he(this)};var Hte=D9;var Wxo=x(T(),1);function nm(){fe.throwInstantiationError()}nm.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(nm.prototype,{quadtree:{get:fe.throwInstantiationError,set:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError}});nm.prototype.update=fe.throwInstantiationError;nm.prototype.beginUpdate=fe.throwInstantiationError;nm.prototype.endUpdate=fe.throwInstantiationError;nm.prototype.getLevelMaximumGeometricError=fe.throwInstantiationError;nm.prototype.loadTile=fe.throwInstantiationError;nm.prototype.computeTileVisibility=fe.throwInstantiationError;nm.prototype.showTileThisFrame=fe.throwInstantiationError;nm.prototype.computeDistanceToTile=fe.throwInstantiationError;nm.prototype.isDestroyed=fe.throwInstantiationError;nm.prototype.destroy=fe.throwInstantiationError;var Kte=nm;var Pxo=x(T(),1);function Jte(e){e=e??1,this._radius=e??1}Object.defineProperties(Jte.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});Jte.prototype.emit=function(e){let t=W.randomBetween(0,W.TWO_PI),n=W.randomBetween(0,W.PI),i=W.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 jte=Jte;var Yxo=x(T(),1);function O9(){}O9.prototype.evaluate=function(e,t){fe.throwInstantiationError()};O9.prototype.evaluateColor=function(e,t){fe.throwInstantiationError()};O9.prototype.getShaderFunction=function(e,t,n,i){fe.throwInstantiationError()};O9.prototype.getVariables=function(){fe.throwInstantiationError()};var Qte=O9;var JTo=x(T(),1);var wTo=x(T(),1);var PTo=x(T(),1);var oTo=x(T(),1);var Dxo=x(T(),1);var xz={};xz.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,b,f,y;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),b=(e-i)/(n-i),r.push(2),r.push(0),b!==1&&(r.push(-1),r.push(1),r.push(0),r.push(b)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),y=(e-o)/(i-o),r.push(0),r.push(1),y!==1&&(r.push(-1),r.push(2),r.push(1),r.push(y)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):d===2?!s&&n!==e?(b=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(b),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(y=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(y),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};xz.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let d=n-s,u=s-o,h=r-a,p=i-a,b=1/(h*d+u*p),f=t-a,y=e-s,_=(h*y+u*f)*b,S=(-p*y+d*f)*b,A=1-_-S;return l(c)?(c.x=_,c.y=S,c.z=A,c):new m(_,S,A)};xz.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,b=u/h;if(p>=0&&p<=1&&b>=0&&b<=1)return l(c)||(c=new M),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var Kf=xz;function $x(e){e=e??B.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=_z(e.westIndices,o,t),this._southIndices=_z(e.southIndices,r,t),this._eastIndices=_z(e.eastIndices,o,t),this._northIndices=_z(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($x.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 Tz=[];function _z(e,t,n){Tz.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)Tz[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(Tz.sort(t),Ne.createTypedArray(n,Tz)):e}var _Ee="createVerticesFromQuantizedTerrainMesh",cvt=new $n(_Ee),lvt=new $n(_Ee,Dd.maximumAsynchronousTasks);$x.prototype.createMesh=function(e){e=e??B.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?lvt:cvt).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(b){let f=p._quantizedVertices.length/3,y=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,_=Ne.createTypedArray(y,b.indices),S=new Float32Array(b.vertices),A=b.center,Z=b.minimumHeight,V=b.maximumHeight,E=p._boundingSphere,G=p._orientedBoundingBox,v=m.clone(b.occludeePointInScaledSpace)??p._horizonOcclusionPoint,I=b.vertexStride,X=br.clone(b.encoding);return p._mesh=new pc(A,S,_,b.indexCountWithoutSkirts,f,Z,V,d,E,v,I,G,X,b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.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 dvt=new $n("upsampleQuantizedTerrainMesh",Dd.maximumAsynchronousTasks);$x.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=dvt.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 b=Math.min(this._westSkirtHeight,this._eastSkirtHeight);b=Math.min(b,this._southSkirtHeight),b=Math.min(b,this._northSkirtHeight);let f=c?b*.5:this._westSkirtHeight,y=d?b*.5:this._southSkirtHeight,_=c?this._eastSkirtHeight:b*.5,S=d?this._northSkirtHeight:b*.5,A=this._credits;return Promise.resolve(p).then(function(Z){let V=new Uint16Array(Z.vertices),E=Ne.createTypedArray(V.length/3,Z.indices),G;return l(Z.encodedNormals)&&(G=new Uint8Array(Z.encodedNormals)),new $x({quantizedVertices:V,indices:E,encodedNormals:G,minimumHeight:Z.minimumHeight,maximumHeight:Z.maximumHeight,boundingSphere:de.clone(Z.boundingSphere),orientedBoundingBox:en.clone(Z.orientedBoundingBox),horizonOcclusionPoint:m.clone(Z.horizonOcclusionPoint),westIndices:Z.westIndices,southIndices:Z.southIndices,eastIndices:Z.eastIndices,northIndices:Z.northIndices,westSkirtHeight:f,southSkirtHeight:y,eastSkirtHeight:_,northSkirtHeight:S,childTileMask:0,credits:A,createdByUpsampling:!0})})};var qte=32767,SEe=new m;$x.prototype.interpolateHeight=function(e,t,n){let i=W.clamp((t-e.west)/e.width,0,1);i*=qte;let o=W.clamp((n-e.south)/e.height,0,1);return o*=qte,l(this._mesh)?fvt(this,i,o):pvt(this,i,o)};function AEe(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 uvt=new M,mvt=new M,hvt=new M;function fvt(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,uvt),b=r.decodeTextureCoordinates(o,u,mvt),f=r.decodeTextureCoordinates(o,h,hvt);if(AEe(t,n,p.x,p.y,b.x,b.y,f.x,f.y)){let y=Kf.computeBarycentricCoordinates(t,n,p.x,p.y,b.x,b.y,f.x,f.y,SEe);if(y.x>=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let _=r.decodeHeight(o,d),S=r.decodeHeight(o,u),A=r.decodeHeight(o,h);return y.x*_+y.y*S+y.z*A}}}}function pvt(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],b=i[u],f=i[h],y=o[d],_=o[u],S=o[h];if(AEe(t,n,p,y,b,_,f,S)){let A=Kf.computeBarycentricCoordinates(t,n,p,y,b,_,f,S,SEe);if(A.x>=-1e-15&&A.y>=-1e-15&&A.z>=-1e-15){let Z=A.x*r[d]+A.y*r[u]+A.z*r[h];return W.lerp(e._minimumHeight,e._maximumHeight,Z/qte)}}}}$x.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};$x.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var UA=$x;var dTo=x(T(),1);function uR(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var DA=new ce;function bvt(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}uR.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 b=t;b<=i;++b)bvt(e,b,p,s)||s.push(new lR(r,void 0,0,b,p));r.tileXYToRectangle(t,n,e,DA);let a=DA.west,c=DA.north;r.tileXYToRectangle(i,o,e,DA);let d=DA.east,u=DA.south,h=new _vt(e,a,u,d,c);for(let p=0;p<s.length;++p){let b=s[p];$te(b.extent,h)&&Svt(this._maximumLevel,b,h)}};uR.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(dR(i.extent,e)){t=i;break}}return l(t)?B9(void 0,t,e):-1};var gvt=[],yvt=[],xvt=new ce,Tvt=new ce;uR.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=gvt;t.length=0,e.east<e.west?(t.push(ce.fromRadians(-Math.PI,e.south,e.east,e.north,xvt)),t.push(ce.fromRadians(e.west,e.south,Math.PI,e.north,Tvt))):t.push(e);let n=yvt;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)z9(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 ZEe=new be;uR.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,DA);return ce.center(i,ZEe),this.computeMaximumLevelAtPosition(ZEe)>=e};uR.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 lR(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(lR.prototype,{nw:{get:function(){return this._nw||(this._nw=new lR(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new lR(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new lR(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new lR(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function _vt(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function $te(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 Svt(e,t,n){for(;t.level<e;)if(Sz(t.nw.extent,n))t=t.nw;else if(Sz(t.ne.extent,n))t=t.ne;else if(Sz(t.sw.extent,n))t=t.sw;else if(Sz(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=To(t.rectangles,n.level,Avt);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function Avt(e,t){return e.level-t}function Sz(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function dR(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function B9(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&dR(t._nw.extent,n),s=t._ne&&dR(t._ne.extent,n),a=t._sw&&dR(t._sw.extent,n),c=t._se&&dR(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,B9(t,t._nw,n))),s&&(i=Math.max(i,B9(t,t._ne,n))),a&&(i=Math.max(i,B9(t,t._sw,n))),c&&(i=Math.max(i,B9(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];dR(a,n)&&(i=a.level)}t=t.parent}return i}function z9(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||$te(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]=Zvt(e[s.level],s)}z9(e,t._nw,n),z9(e,t._ne,n),z9(e,t._sw,n),z9(e,t._se,n)}function Zvt(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];$te(o,t)?(o.west<t.west&&n.push(new ce(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new ce(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new ce(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new ce(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var Jf=uR;function Cvt(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 VEe(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=[]}VEe.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 REe(e,t,n){if(!t.format){let y="The tile format is not specified in the layer.json file.";throw e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ue(y)}if(!t.tiles||t.tiles.length===0){let y="The layer.json file does not specify any tile URL templates.";throw e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ue(y)}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 y=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ue(y)}let c=t.tiles,d=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,d),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new Qi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new Xs({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let y=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ue(y)}if(e.levelZeroMaximumGeometricError=zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let y=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ue(y)}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,b;if(l(p)&&!l(h)){b=new Jf(e.tilingScheme,p.length);for(let y=0;y<p.length;++y){let _=p[y],S=e.tilingScheme.getNumberOfYTilesAtLevel(y);l(e.overallAvailability[y])||(e.overallAvailability[y]=[]);for(let A=0;A<_.length;++A){let Z=_[A],V=S-Z.endY-1,E=S-Z.startY-1;e.overallAvailability[y].push([Z.startX,V,Z.endX,E]),b.addAvailableTileRange(y,Z.startX,V,Z.endX,E)}}}else l(h)&&(u=new Jf(e.tilingScheme,d),b=new Jf(e.tilingScheme,d),e.overallAvailability[0]=[[0,0,1,0]],b.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 Cvt({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:b,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:h,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return l(f)?l(b)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await nne(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function Vvt(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(l(t)&&(i+=` ${t.message}`),e.previousError=jo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,i),e.previousError.retry)return nne(e,n);throw new ue(i)}async function Rvt(e,t,n){await REe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new Jf(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 yt(e.attribution);e.tileCredits.push(o)}return!0}async function nne(e,t){try{let n=await e.layerJsonResource.fetchJson();return Rvt(e,n,t)}catch(n){return l(n)&&n.statusCode===404?(await REe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):Vvt(e,n,t)}}function jf(e){e=e??B.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 _e;let t=e.credit;typeof t=="string"&&(t=new yt(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 ene={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function CEe(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 Evt(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Pc({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 Gvt(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,b=Uint16Array.BYTES_PER_ELEMENT*3,f=3,y=Uint16Array.BYTES_PER_ELEMENT,_=y*f,S=new DataView(t),A=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let Z=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let V=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let E=new de(new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0)),S.getFloat64(a+u,!0));a+=h;let G=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let v=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let I=new Uint16Array(t,a,v*3);a+=v*b,v>64*1024&&(y=Uint32Array.BYTES_PER_ELEMENT,_=y*f);let X=I.subarray(0,v),N=I.subarray(v,2*v),g=I.subarray(v*2,3*v);tn.zigZagDeltaDecode(X,N,g),a%y!==0&&(a+=y-a%y);let C=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let R=Ne.createTypedArrayFromArrayBuffer(v,t,a,C*f);a+=C*_;let L=0,P=R.length;for(let le=0;le<P;++le){let Te=R[le];R[le]=L-Te,Te===0&&++L}let Y=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let O=Ne.createTypedArrayFromArrayBuffer(v,t,a,Y);a+=Y*y;let k=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let D=Ne.createTypedArrayFromArrayBuffer(v,t,a,k);a+=k*y;let w=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let z=Ne.createTypedArrayFromArrayBuffer(v,t,a,w);a+=w*y;let J=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let ee=Ne.createTypedArrayFromArrayBuffer(v,t,a,J);a+=J*y;let H,te;for(;a<S.byteLength;){let le=S.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let Te=S.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,le===ene.OCT_VERTEX_NORMALS&&e._requestVertexNormals)H=new Uint8Array(t,a,v*2);else if(le===ene.WATER_MASK&&e._requestWaterMask)te=new Uint8Array(t,a,Te);else if(le===ene.METADATA&&e._requestMetadata){let Se=S.getUint32(a,!0);if(Se>0){let Ve=Zr(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Se).available;if(l(Ve))for(let we=0;we<Ve.length;++we){let ke=n+we+1,nt=Ve[we],bt=e._tilingScheme.getNumberOfYTilesAtLevel(ke);for(let Rt=0;Rt<nt.length;++Rt){let He=nt[Rt],mt=bt-He.endY-1,it=bt-He.startY-1;e.availability.addAvailableTileRange(ke,He.startX,mt,He.endX,it),r.availability.addAvailableTileRange(ke,He.startX,mt,He.endX,it)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=Te}let $=e.getLevelMaximumGeometricError(n)*5,pe=e._tilingScheme.tileXYToRectangle(i,o,n),xe=en.fromRectangle(pe,Z,V,e._tilingScheme.ellipsoid);return new UA({center:A,minimumHeight:Z,maximumHeight:V,boundingSphere:E,orientedBoundingBox:xe,horizonOcclusionPoint:G,quantizedVertices:I,encodedNormals:H,indices:R,westIndices:O,southIndices:D,eastIndices:z,northIndices:ee,westSkirtHeight:$,southSkirtHeight:$,eastSkirtHeight:$,northSkirtHeight:$,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:te,credits:e._tileCredits})}jf.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=ine(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)})):EEe(this,e,t,n,r,i)};function EEe(e,t,n,i,o,r){if(!l(o))return Promise.reject(new ue("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=CEe(void 0)):d=CEe(c);let b=p.getDerivedResource({url:h,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(l(b))return b.then(function(f){return l(f)?l(e._heightmapStructure)?Evt(e,f,i,t,n):Gvt(e,f,i,t,n,o):Promise.reject(new ue("Mesh buffer doesn't exist."))})}Object.defineProperties(jf.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}}});jf.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};jf.fromIonAssetId=async function(e,t){let n=await ds.fromAssetId(e);return jf.fromUrl(n,t)};jf.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT,e=await Promise.resolve(e);let n=We.createIfNeeded(e);n.appendForwardSlash();let i=new VEe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await nne(i);let o=new jf(t);return i.build(o),o};jf.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(ine(this,e,t,n,i[r],r===0).result)return;return!1};jf.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=ine(this,e,t,n,i[r],r===0);if(l(s.promise))return s.promise}};function tne(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 ine(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=tne(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 xr({throttle:!1,throttleByServer:!0,type:Hs.TERRAIN});h=EEe(e,u.x,u.y,u.level,o,p),l(h)&&(o.availabilityPromiseCache[s]=h,h.then(a))}return{result:!0,promise:h}}u=tne(o,u.x,u.y,u.level)}return{result:!1}}jf._getAvailabilityTile=tne;var OA=jf;function Lvt(e){return e=e??B.EMPTY_OBJECT,OA.fromIonAssetId(2426648,{requestVertexNormals:e.requestVertexNormals??!1})}var H9=Lvt;var OTo=x(T(),1);function Wvt(e){return e=e??B.EMPTY_OBJECT,OA.fromIonAssetId(1,{requestVertexNormals:e.requestVertexNormals??!1,requestWaterMask:e.requestWaterMask??!1,ellipsoid:ie.WGS84})}var BA=Wvt;function mR(e){this._ready=!1,this._provider=void 0,this._errorEvent=new _e,this._readyEvent=new _e,Fvt(this,e)}Object.defineProperties(mR.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}}});mR.fromWorldTerrain=function(e){return new mR(BA(e))};mR.fromWorldBathymetry=function(e){return new mR(H9(e))};function vvt(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function Fvt(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){vvt(e._errorEvent,i)}}var K9=mR;var qTo=x(T(),1);function hR(){}hR.prototype.boundingVolume=void 0;hR.prototype.boundingSphere=void 0;hR.prototype.distanceToCamera=function(e){fe.throwInstantiationError()};hR.prototype.intersectPlane=function(e){fe.throwInstantiationError()};hR.prototype.createDebugVolume=function(e){fe.throwInstantiationError()};var one=hR;var r_o=x(T(),1);function J9(e){e=e??B.EMPTY_OBJECT,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new Qi({ellipsoid:e.ellipsoid}),this._color=e.color??U.YELLOW,this._errorEvent=new _e,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(J9.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}}});J9.prototype.getTileCredits=function(e,t,n){};J9.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)};J9.prototype.pickFeatures=function(e,t,n,i,o){};var j9=J9;var c_o=x(T(),1);function rne(e){fe.throwInstantiationError()}rne.prototype.isReady=fe.throwInstantiationError;rne.prototype.shouldDiscardImage=fe.throwInstantiationError;var sne=rne;var d_o=x(T(),1),Ivt={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},ane=Object.freeze(Ivt);var S_o=x(T(),1);function Az(e,t){this.show=!0,l(e)||(e=new Qe),this.rectangle=Qe.clone(e),l(t)||(t=ji.fromType(ji.ColorType,{color:new U(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}Az.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!l(t)||!Qe.equals(t.viewport,this.rectangle))&&(this._rs=Ue.fromCache({blending:rn.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 Oe({sources:[this._material.shaderSource,zY]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Le.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};Az.prototype.isDestroyed=function(){return!1};Az.prototype.destroy=function(){return l(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),he(this)};var cne=Az;var C_o=x(T(),1);function lne(){fe.throwInstantiationError()}Object.defineProperties(lne.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}});lne.prototype.requestData=function(e){fe.throwInstantiationError()};var dne=lne;var E_o=x(T(),1);function wg(){fe.throwInstantiationError()}Object.defineProperties(wg.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}});wg.prototype.update=fe.throwInstantiationError;wg.prototype.updateViewTransforms=fe.throwInstantiationError;wg.prototype.convertLocalToShapeUvSpace=fe.throwInstantiationError;wg.prototype.computeOrientedBoundingBoxForTile=fe.throwInstantiationError;wg.prototype.computeOrientedBoundingBoxForSample=fe.throwInstantiationError;wg.DefaultMinBounds=fe.throwInstantiationError;wg.DefaultMaxBounds=fe.throwInstantiationError;var une=wg;var O_o=x(T(),1);var Pvt=new U,Xvt=new U,Nvt=new U,Yvt=new U,GEe=new se,Q9=new Uint8Array(4);function LEe(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 Zz(e,t){return{height:e,color:U.clone(t)}}function WEe(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 wvt(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 b=s[n],f=W.clamp(b.height,Jd._minimumHeight,Jd._maximumHeight),y=U.clone(b.color,Pvt);y.red*=y.alpha,y.green*=y.alpha,y.blue*=y.alpha,c.push(Zz(f,y))}let d=!0,u=!0;for(n=0;n<a-1;n++){let b=c[n+0],f=c[n+1];d=d&&b.height<=f.height,u=u&&b.height>=f.height}u?c=c.reverse():d||s0(c,function(b,f){return W.sign(b.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,Zz(Jd._minimumHeight,c[0].color)),p&&c.splice(c.length,0,Zz(Jd._maximumHeight,c[c.length-1].color)),c=WEe(c),i.push(c)}return i}function Mvt(e){let t=wvt(e),n=[],i=[],o;function r(d,u){n.push(Zz(d,u))}function s(d,u,h){let p=U.multiplyByScalar(h,1-u.alpha,Yvt);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,b=i.length;for(;u<p||h<b;){let f=u<p?d[u]:void 0,y=u>0?d[u-1]:void 0,_=u<p-1?d[u+1]:void 0,S=h<b?i[h]:void 0,A=h>0?i[h-1]:void 0,Z=h<b-1?i[h+1]:void 0;if(l(f)&&l(S)&&f.height===S.height){let V=l(Z)&&S.height===Z.height,E=!l(A),G=!l(Z),v=l(_)&&f.height===_.height,I=!l(y),X=!l(_);V?v?(s(f.height,f.color,S.color),s(f.height,_.color,Z.color)):I?(r(f.height,S.color),s(f.height,f.color,Z.color)):X?(s(f.height,f.color,S.color),r(f.height,Z.color)):(s(f.height,f.color,S.color),s(f.height,f.color,Z.color)):E?v?(r(f.height,f.color),s(f.height,_.color,S.color)):X?(r(f.height,f.color),r(f.height,S.color)):(I||r(f.height,f.color),s(f.height,f.color,S.color)):G?v?(s(f.height,f.color,S.color),r(f.height,_.color)):I?(r(f.height,S.color),r(f.height,f.color)):X?s(f.height,f.color,S.color):(s(f.height,f.color,S.color),r(f.height,f.color)):v?(s(f.height,f.color,S.color),s(f.height,_.color,S.color)):I?(r(f.height,S.color),s(f.height,f.color,S.color)):X?(s(f.height,f.color,S.color),r(f.height,S.color)):s(f.height,f.color,S.color),u+=v?2:1,h+=V?2:1}else if(l(f)&&l(S)&&l(A)&&f.height<S.height){let V=LEe(f.height,A,S,Nvt);l(y)?l(_)?s(f.height,f.color,V):(s(f.height,f.color,V),r(f.height,V)):(r(f.height,V),s(f.height,f.color,V)),u++}else if(l(S)&&l(f)&&l(y)&&S.height<f.height){let V=LEe(S.height,y,f,Xvt);l(A)?l(Z)?s(S.height,V,S.color):(s(S.height,V,S.color),r(S.height,V)):(r(S.height,V),s(S.height,V,S.color)),h++}else l(f)&&(!l(S)||f.height<S.height)?(l(S)&&!l(A)&&!l(_)?(r(f.height,f.color),r(f.height,Jd._emptyColor),r(S.height,Jd._emptyColor)):(!l(S)&&l(A)&&!l(y)&&(r(A.height,Jd._emptyColor),r(f.height,Jd._emptyColor)),r(f.height,f.color)),u++):l(S)&&(!l(f)||S.height<f.height)&&(r(S.height,S.color),h++)}}return WEe(n)}function Jd(e){let{scene:t,layers:n}=e??B.EMPTY_OBJECT,{context:i}=t,o=Mvt(n),r=o.length,s,a,c;if(!Jd._useFloatTexture(i)){a=De.UNSIGNED_BYTE,c=Ke.RGBA,s=new Uint8Array(r*4);for(let b=0;b<r;b++)se.packFloat(o[b].height,GEe),se.pack(GEe,s,b*4)}else{a=De.FLOAT,c=i.webgl2?Ke.RED:Ke.LUMINANCE,s=new Float32Array(r);for(let b=0;b<r;b++)s[b]=o[b].height}let u=Lt.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.NEAREST,magnificationFilter:ci.NEAREST})}),h=new Uint8Array(r*4);for(let b=0;b<r;b++)o[b].color.toBytes(Q9),h[b*4+0]=Q9[0],h[b*4+1]=Q9[1],h[b*4+2]=Q9[2],h[b*4+3]=Q9[3];let p=Lt.create({context:i,pixelFormat:Ke.RGBA,pixelDatatype:De.UNSIGNED_BYTE,source:{arrayBufferView:h,width:r,height:1},sampler:new zt({wrapS:hn.CLAMP_TO_EDGE,wrapT:hn.CLAMP_TO_EDGE,minificationFilter:Bt.LINEAR,magnificationFilter:ci.LINEAR})});return ji.fromType("ElevationBand",{heights:u,colors:p})}Jd._useFloatTexture=function(e){return e.floatingPointTexture};Jd._maximumHeight=5906376425472;Jd._minimumHeight=-5906376425472;Jd._emptyColor=new U(0,0,0,0);var mne=Jd;var $_o=x(T(),1);async function kvt(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??B.EMPTY_OBJECT,e.onlyUsingWithGoogleGeocoder||Zt("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 Uvt(t);let i,o=ua.getDefaultCredit();l(o)&&(i=[o]);let r=new We({url:`${ua.mapTilesApiEndpoint}v1/3dtiles/root.json`,queryParameters:{key:n},credits:i});return $s.fromUrl(r,t)}var vEe={};async function Uvt(e){let i=vEe[2275207];l(i)||(i=ds.fromAssetId(2275207),vEe[2275207]=i);let o=await i;return $s.fromUrl(o,e)}var hne=kvt;var sSo=x(T(),1);async function Dvt(e){let t=await $s.fromIonAssetId(96188,e);e=e??B.EMPTY_OBJECT;let n=e.style;if(!l(n)){let i=(e.defaultColor??U.WHITE).toCssColorString();n=new Mb({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var fne=Dvt;var bSo=x(T(),1);function Ovt(e){e=e??B.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 Ft({geometry:Kn.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new Qt(1,0,0,1)},modelMatrix:o})),l(i.tangent)&&t.push(new Ft({geometry:Kn.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new Qt(0,1,0,1)},modelMatrix:o})),l(i.bitangent)&&t.push(new Ft({geometry:Kn.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new Qt(0,0,1,1)},modelMatrix:o})),t.length>0)return new Pn({asynchronous:!1,geometryInstances:t,appearance:new bn({flat:!0,translucent:!1})})}var pne=Ovt;var NSo=x(T(),1);var Bvt=15;function FEe(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}FEe.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 zvt(e,t){let n=t.copyrightText;l(n)&&(e.credit=new yt(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=ce.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new Qi(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 Xs(s)}else throw new ue("Invalid spatial reference");let a=t.tileInfo;if(!l(a))throw new ue("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?rh.LERC:rh.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new Jf(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new Jf(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=zo.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 Hvt(e,t,n){try{let i=await t.fetchJson();zvt(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw jo.reportError(void 0,n,l(n)?n._errorEvent:void 0,o),i}}function eT(e){e=e??B.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 _e}Object.defineProperties(eT.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}}});eT.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT,e=await Promise.resolve(e);let n=We.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new FEe(t);await Hvt(o,i);let r=new eT(t);return o.build(r),r._resource=n,r};eT.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(bne(this,n+1,e*2,t*2))){let h=IEe(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 Pc({buffer:h[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):Bvt,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(h){if(l(a)&&a.state===bi.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=bi.CANCELLED,Promise.reject(h)}return Promise.reject(h)})};function bne(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}eT.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};eT.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=bne(this,n,e,t);if(l(i))return i;IEe(this,n,e,t)};eT.prototype.loadTileDataAvailability=function(e,t,n){};function Kvt(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,b=h?d.y+1:d.y;if(!u){for(let f=e.y;f<b;++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 y=e.x;y<=p;++y)if(i[f+y]!==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 Jvt(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=Kvt(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 IEe(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 xr({throttle:!1,throttleByServer:!0,type:Hs.TERRAIN}),h=e._resource.getDerivedResource({url:a,request:d}).fetchJson();return l(h)?(h=h.then(function(p){let b=Jvt(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let f=e._tilesAvailable;for(let y=0;y<b.length;++y){let _=b[y];f.addAvailableTileRange(t,_.startX,_.startY,_.endX,_.endY)}return bne(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 gne=eT;var OSo=x(T(),1);var PEe="https://dev.virtualearth.net/REST/v1/Locations";function yne(e){e=e??B.EMPTY_OBJECT;let t=e.key;this._key=t;let n={key:t};l(e.culture)&&(n.culture=e.culture),this._resource=new We({url:PEe,queryParameters:n}),this._credit=new yt('<img src="proxy.php?url=http%3A%2F%2Fdev.virtualearth.net%2FBranding%2Flogo_powered_by.png"/>',!1)}Object.defineProperties(yne.prototype,{url:{get:function(){return PEe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});yne.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:ce.fromDegrees(a,s,d,c)}})})};var xne=yne;var HSo=x(T(),1);function Tne(){}Object.defineProperties(Tne.prototype,{credit:{get:function(){}}});Tne.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 _ne=Tne;var nAo=x(T(),1);var jvt=new se,XEe=new m,fR=new m;function Qvt(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=jvt;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,XEe),m.multiplyByScalar(h,.5,h),p=F.multiplyByVector(Ny.hermiteCoefficientMatrix,a,a)):r===t.length-2?(c=t[r],d=t[r+1],h=e.lastTangent,u=m.subtract(d,t[r-1],XEe),m.multiplyByScalar(u,.5,u),p=F.multiplyByVector(Ny.hermiteCoefficientMatrix,a,a)):(c=t[r-1],d=t[r],u=t[r+1],h=t[r+2],p=F.multiplyByVector(tT.catmullRomCoefficientMatrix,a,a)),o=m.multiplyByScalar(c,p.x,o),m.multiplyByScalar(d,p.y,fR),m.add(o,fR,o),m.multiplyByScalar(u,p.z,fR),m.add(o,fR,o),m.multiplyByScalar(h,p.w,fR),m.add(o,fR,o)}}var qvt=new m,$vt=new m;function tT(e){e=e??B.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(t.length>2&&(l(i)||(i=qvt,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=$vt,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=Qvt(this),this._lastTimeIndex=0}Object.defineProperties(tT.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}}});tT.catmullRomCoefficientMatrix=new F(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);tT.prototype.findTimeInterval=Co.prototype.findTimeInterval;tT.prototype.wrapTime=Co.prototype.wrapTime;tT.prototype.clampTime=Co.prototype.clampTime;tT.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var Sne=tT;var DAo=x(T(),1);var VAo=x(T(),1);var Ane={},e2t={positions:void 0,normals:void 0,indices:void 0,edgeIndicesWest:void 0,edgeIndicesSouth:void 0,edgeIndicesEast:void 0,edgeIndicesNorth:void 0},t2t=new be,n2t=new m,i2t=new F,o2t=new F,r2t=new F,s2t=new m,a2t=new m,c2t=new m,l2t=new m,d2t=new be,u2t=new M,q9=new m,m2t=new M,h2t=new m,f2t=new m,Cz=function(e,t){return e-t};Ane.createMesh=async function(e){e=e??B.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=de.clone(e.boundingSphere,new de),p=en.clone(e.orientedBoundingBox,new en),b=m.clone(e.horizonOcclusionPoint,new m),f=ie.clone(e.ellipsoid,new ie),y=ce.clone(e.rectangle,new ce);await(r.extensionsRequired!==void 0&&r.extensionsRequired.indexOf("EXT_meshopt_compression")!==-1?_y.ready:Promise.resolve(void 0));let A=y.west,Z=y.south,V=y.north,E=y.width,G=y.height,v=ce.center(y,t2t);v.height=.5*(s+a);let I=be.toCartesian(v,f,n2t),X=pt.eastNorthUpToFixedFrame(I,f,i2t),N=F.inverseTransformation(X,o2t),g=F.unpack(r.nodes[0].matrix,0,r2t);g=F.multiply(ao.Y_UP_TO_Z_UP,g,g);let C=H2t(r,i,e2t),R=zo.getSkirtVertexCount(C.edgeIndicesWest,C.edgeIndicesSouth,C.edgeIndicesEast,C.edgeIndicesNorth),L=C.positions,P=C.normals,Y=C.indices,O=L.length/3,k=O+R,D=Y.length,w=zo.getSkirtIndexCountWithFilledCorners(R),z=k<=65535?Uint16Array:Uint32Array,J=new z(D+w);J.set(Y);let ee=new z(C.edgeIndicesWest),H=new z(C.edgeIndicesSouth),te=new z(C.edgeIndicesEast),$=new z(C.edgeIndicesNorth),pe=new z(ee).sort(),xe=new z(H).sort(),le=new z(te).sort(),Te=new z($).sort(),Se=fi.geodeticLatitudeToMercatorAngle(Z),Ve=1/(fi.geodeticLatitudeToMercatorAngle(V)-Se),we=m.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,s2t),ke=m.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,a2t),nt=new br(h.center,void 0,void 0,void 0,void 0,i,o,u,t,n),bt=nt.stride,Rt=new Float32Array(k*bt),He=0;for(let it=0;it<O;it++){let rt=m.unpack(L,it*3,c2t),jt=F.multiplyByPoint(g,rt,l2t),Cn=be.fromCartesian(jt,f,d2t),{longitude:ct,latitude:Wt,height:sn}=Cn,lt=(ct-A)/E,Xn=(Wt-Z)/G;lt=W.clamp(lt,0,1),Xn=W.clamp(Xn,0,1),To(pe,it,Cz)>=0?lt=0:To(le,it,Cz)>=0&&(lt=1),To(xe,it,Cz)>=0?Xn=0:To(Te,it,Cz)>=0&&(Xn=1);let pi=M.fromElements(lt,Xn,u2t),Di;if(i){let Fi=m.unpack(P,it*3,q9);Fi=F.multiplyByPointAsVector(g,Fi,q9),Fi=m.normalize(Fi,q9),Di=tn.octEncode(Fi,m2t)}let Ut;o&&(Ut=(fi.geodeticLatitudeToMercatorAngle(Wt)-Se)*Ve);let bo;u&&(bo=f.geodeticSurfaceNormal(jt,h2t)),He=nt.encode(Rt,He,jt,pi,sn,Di,Ut,bo);let ro=F.multiplyByPoint(N,jt,f2t);we=m.minimumByComponent(ro,we,we),ke=m.maximumByComponent(ro,ke,ke)}let mt=new pc(m.clone(nt.center,new m),Rt,J,D,O,s,a,y,de.clone(h,new de),m.clone(b,new m),bt,en.clone(p,new en),nt,ee,H,te,$);return DEe(mt,y,f,we,ke,X,N,c),Promise.resolve(mt)};var p2t=new M,b2t=new M,g2t=new Array(6),y2t=new M,x2t=new M,T2t=new M,_2t=new m,S2t=new m,A2t=new m,Z2t=new be,C2t=new m,V2t=new be,R2t=new be,NEe=new m,E2t=new m,G2t=new m,L2t=new m,W2t=new m,v2t=new m,F2t=new m,I2t=new m,P2t=new F,X2t=new F,YEe=new M,N2t=new M,Y2t=new m,w2t=new de,M2t=new en,k2t=new ru,wEe=new m,MEe=new M,U2t=new M,kEe=new m,D2t=new m;function O2t(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 b=e.buffers[i.buffer].extras._pipeline.source;return new Float32Array(b.buffer,b.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);_y.decodeVertexBuffer(new Uint8Array(u.buffer),o,c,a);let h=(1<<u.BYTES_PER_ELEMENT*8)-1,p=new Float32Array(o*3);for(let b=0;b<o;b++)p[b*3+0]=u[b*4+0]/h,p[b*3+1]=u[b*4+1]/h,p[b*3+2]=u[b*4+2]/h;return p}function B2t(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);_y.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),b=Math.max(d[h*4+1]/127,-1),f=1-(Math.abs(p)+Math.abs(b));if(f<0){let _=p,S=b;p=(1-Math.abs(S))*W.signNotZero(_),b=(1-Math.abs(_))*W.signNotZero(S)}let y=q9;y.x=p,y.y=b,y.z=f,y=m.normalize(y,q9),u[h*3+0]=y.x,u[h*3+1]=y.y,u[h*3+2]=y.z}return u}function z2t(e){let t=e.meshes[0].primitives[0],n=e.accessors[t.indices],i=e.bufferViews[n.bufferView],o=n.count,r=n.componentType===K.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 _y.decodeIndexBuffer(new Uint8Array(d.buffer),o,s.byteStride,c),d}function Vz(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===K.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 _y.decodeIndexSequence(new Uint8Array(u.buffer),r,h,d),u}function H2t(e,t,n){return n.positions=O2t(e),n.normals=t?B2t(e):void 0,n.indices=z2t(e),n.edgeIndicesWest=Vz(e,"left"),n.edgeIndicesSouth=Vz(e,"bottom"),n.edgeIndicesEast=Vz(e,"right"),n.edgeIndicesNorth=Vz(e,"top"),n}Ane.upsampleMesh=function(e){e=e??B.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=br.clone(e.parentEncoding,new br),h=u.hasVertexNormals,p=u.hasWebMercatorT,b=u.exaggeration,f=u.exaggerationRelativeHeight,_=b!==1,S=ce.clone(e.rectangle,new ce),A=ie.clone(e.ellipsoid),Z=[],V=[],E=[],G=[],v=[],I=[],X=[],N=[];sFt(t,n,s,a,c,d,u,G,v,I,X,N,Z,E,V);let g=ce.center(S,Z2t);g.height=.5*(i+o);let C=be.toCartesian(g,A,C2t),R=Z.length,L=new br(C,void 0,void 0,void 0,void 0,h,p,_,b,f),P=L.stride,Y=zo.getSkirtVertexCount(v,I,X,N),O=R+Y,k=G.length,D=zo.getSkirtIndexCountWithFilledCorners(Y),w=k+D,z=O<=65535?Uint16Array:Uint32Array,J=new z(w);J.set(G);let ee=new z(v),H=new z(I),te=new z(X),$=new z(N),pe=new Float32Array(O*P),xe=0,le=pt.eastNorthUpToFixedFrame(C,A,P2t),Te=F.inverseTransformation(le,X2t),Se=S.west,Ee=S.east,Ve=S.south,we=S.north,ke=fi.geodeticLatitudeToMercatorAngle(Ve),bt=1/(fi.geodeticLatitudeToMercatorAngle(we)-ke),Rt=Number.POSITIVE_INFINITY,He=Number.NEGATIVE_INFINITY,mt=m.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,F2t),it=m.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,I2t);for(let sn=0;sn<R;sn++){let lt=Z[sn],Xn=a[lt*3+0],pi=a[lt*3+1],Di=a[lt*3+2],Ut=N2t;Ut.x=V[sn*2+0],Ut.y=V[sn*2+1];let bo=Ut.x,ro=Ut.y,Fi=E[sn*2+0],zn=E[sn*2+1],Dn=1-Fi-zn,Hi=u.decodeHeight(d,Xn),Gi=u.decodeHeight(d,pi),er=u.decodeHeight(d,Di),Lr=Hi*Fi+Gi*zn+er*Dn;Rt=Math.min(Lr,Rt),He=Math.max(Lr,He);let Vs=W.lerp(Se,Ee,bo),Wr=W.lerp(Ve,we,ro),On=be.fromRadians(Vs,Wr,Lr,R2t),go=be.toCartesian(On,A,E2t),En=F.multiplyByPoint(Te,go,L2t);mt=m.minimumByComponent(En,mt,mt),it=m.maximumByComponent(En,it,it);let Ho;if(h){let Ii=u.decodeNormal(d,Xn,_2t),Io=u.decodeNormal(d,pi,S2t),_c=u.decodeNormal(d,Di,A2t),Ds=m.fromElements(Ii.x*Fi+Io.x*zn+_c.x*Dn,Ii.y*Fi+Io.y*zn+_c.y*Dn,Ii.z*Fi+Io.z*zn+_c.z*Dn,wEe);Ds=m.normalize(Ds,wEe),Ho=tn.octEncode(Ds,U2t)}let Fo;p&&(Fo=(fi.geodeticLatitudeToMercatorAngle(Wr)-ke)*bt);let sa;_&&(sa=A.geodeticSurfaceNormal(go,D2t)),xe=L.encode(pe,xe,go,Ut,Lr,Ho,Fo,sa)}let rt=en.fromRectangle(S,Rt,He,A,M2t),jt=de.fromVertices(pe,L.center,P,w2t),ct=new yf(A).computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(L.center,pe,P,L.center,Rt,Y2t),Wt=new pc(m.clone(L.center,new m),pe,J,k,R,Rt,He,S,de.clone(jt),m.clone(ct),P,en.clone(rt),L,ee,H,te,$);return DEe(Wt,S,A,mt,it,le,Te,r),Wt};function DEe(e,t,n,i,o,r,s,a){let{encoding:c}=e,d=c.stride,u=e.vertices,{hasVertexNormals:h,hasWebMercatorT:p,exaggeration:b,exaggerationRelativeHeight:f}=c,_=b!==1,S=e.vertexCountWithoutSkirts,A=S*d,Z=u.length/d,V=Z-S,E=e.indices,G=e.indexCountWithoutSkirts,v=e.westIndicesSouthToNorth,I=e.southIndicesEastToWest,X=e.eastIndicesNorthToSouth,N=e.northIndicesWestToEast;zo.addSkirtIndicesWithFilledCorners(v,I,X,N,S,E,G);let g=0,C=g+v.length,R=C+I.length,L=R+X.length,P=[v,I,X,N],Y=[g,C,R,L],O=[-1,0,1,0],k=[0,-1,0,1],D=m.clone(i,W2t),w=m.clone(o,v2t),z=e.maximumHeight,J=e.minimumHeight-a;for(let te=0;te<V;te++){let $=0;for($=0;$<3&&!(te<Y[$+1]);$++);let pe=P[$][te-Y[$]],xe=c.decodeTextureCoordinates(u,pe,YEe),le=1e-4,Te=xe.x+O[$]*le,Se=xe.y+k[$]*le,Ee=W.lerp(t.west,t.east,Te),Ve=W.clamp(W.lerp(t.south,t.north,Se),-W.PI_OVER_TWO,+W.PI_OVER_TWO),ke=c.decodeHeight(u,pe)-a,nt=be.fromRadians(Ee,Ve,ke,V2t),bt=be.toCartesian(nt,n,NEe),Rt;h&&(Rt=c.getOctEncodedNormal(u,pe,MEe));let He;p&&(He=c.decodeWebMercatorT(u,pe));let mt;_&&(mt=n.geodeticSurfaceNormal(bt,kEe)),A=c.encode(u,A,bt,xe,ke,Rt,He,mt);let it=F.multiplyByPoint(s,bt,G2t);m.minimumByComponent(it,D,D),m.maximumByComponent(it,w,w)}let ee=ru.fromCorners(D,w,k2t),H=new br(c.center,ee,J,z,r,c.hasVertexNormals,c.hasWebMercatorT,_,b,f);if(c.quantization!==H.quantization){let te=H,$=te.stride,pe=new Float32Array(Z*$),xe=0;for(let le=0;le<Z;le++)xe=te.encode(pe,xe,c.decodePosition(u,le,NEe),c.decodeTextureCoordinates(u,le,YEe),c.decodeHeight(u,le),c.hasVertexNormals?c.getOctEncodedNormal(u,le,MEe):void 0,c.hasWebMercatorT?c.decodeWebMercatorT(u,le):void 0,c.hasGeodeticSurfaceNormals?c.decodeGeodeticSurfaceNormal(u,le,kEe):void 0);e.vertices=pe,e.stride=$,e.encoding=te}return e}var Zne=0,K2t=1,Cne=2,Vne=3,J2t=4,j2t=new m,Q2t=[new m,new m,new m,new m,new m,new m],q2t=[new M,new M,new M,new M,new M,new M],$2t=[new m,new m,new m,new m,new m,new m],eFt=[new M,new M,new M,new M,new M,new M];function UEe(e,t,n,i){switch(n){case Zne:return W.sign(i.x-e.x);case Cne:return W.sign(t.x-i.x);case Vne:return W.sign(i.y-e.y);default:return W.sign(t.y-i.y)}}function tFt(e,t,n,i,o,r){let s,a,c;switch(n){case Zne:s=(e.x-i.x)/(o.x-i.x),a=e.x,c=i.y+(o.y-i.y)*s;break;case Cne:s=(t.x-i.x)/(o.x-i.x),a=t.x,c=i.y+(o.y-i.y)*s;break;case Vne: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 nFt={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 iFt(e,t,n,i,o,r,s,a){let c=0,d=q2t,u=Q2t,h=3,p=eFt;M.clone(o,p[0]),M.clone(r,p[1]),M.clone(s,p[2]);let b=$2t;m.fromElements(1,0,0,b[0]),m.fromElements(0,1,0,b[1]),m.fromElements(0,0,1,b[2]);for(let f=0;f<t;f++){let y=(e+f)%J2t,_=d,S=u;d=p,u=b,c=h,p=_,b=S,h=0;let A=c-1,Z=d[A],V=u[A],E=UEe(n,i,y,Z);for(let G=0;G<c;G++){let v=d[G],I=u[G],X=UEe(n,i,y,v);if(E*X===-1){let N=tFt(n,i,y,Z,v,j2t),{x:g,y:C,z:R}=N,L=1-R,P=V.x*L+I.x*R,Y=V.y*L+I.y*R,O=V.z*L+I.z*R;M.fromElements(g,C,p[h]),m.fromElements(P,Y,O,b[h]),h++}X>=0&&(M.clone(v,p[h]),m.clone(I,b[h]),h++),A=G,Z=v,V=I,E=X}if(h===0)break}a.length=h;for(let f=0;f<h;f++)M.clone(p[f],a.coordinates[f]),m.clone(b[f],a.barycentricCoordinates[f]);return a}function oFt(e,t,n,i,o,r,s,a){return iFt(e?t?Vne:Zne:t?Cne:K2t,2,n,i,o,r,s,a)}var rFt=[[],[0],[1],[0,1],[2],[0,2],[1,2],[0,1,2]];function sFt(e,t,n,i,o,r,s,a,c,d,u,h,p,b,f){let y={},_=e?.5:0,S=e?1:.5,A=t?.5:0,Z=t?1:.5,V=p2t;V.x=_,V.y=A;let E=b2t;E.x=S,E.y=Z;let G=0;for(let v=0;v<n;v+=3){let I=i[v+0],X=i[v+1],N=i[v+2],g=s.decodeTextureCoordinates(r,I,y2t),C=s.decodeTextureCoordinates(r,X,x2t),R=s.decodeTextureCoordinates(r,N,T2t),L=oFt(e,t,V,E,g,C,R,nFt),P=L.length;if(P<3)continue;let Y=g2t;for(let w=0;w<P;w++){let z=L.barycentricCoordinates[w],J=z.x,ee=z.y,H=z.z,te=Math.ceil(J)|Math.ceil(ee)<<1|Math.ceil(H)<<2,$=rFt[te],pe,xe=!1;if($.length===1){let le=$[0],Se=i[v+le];pe=y[Se],pe===void 0&&(xe=!0,pe=G++,y[Se]=pe)}else if($.length===2){let le=$[0],Te=$[1],Se=i[v+le],Ee=i[v+Te],Ve=L.barycentricCoordinates[(w+P-1)%P],we=Math.ceil(Ve.x)|Math.ceil(Ve.y)<<1|Math.ceil(Ve.z)<<2,ke=te===we,nt=Math.min(Se,Ee),bt=Math.max(Se,Ee),Rt=o+2*(nt*o+bt),He=Rt+0,mt=Rt+1,it=y[He],rt=y[mt],jt=!ke==(it===void 0||rt===void 0);if(pe=jt?it:rt,pe===void 0){xe=!0,pe=G++;let Cn=jt?He:mt;y[Cn]=pe}}else xe=!0,pe=G++;if(Y[w]=pe,xe){let le=v/3;p.push(le);let Te=L.coordinates[w],Se=(Te.x-_)/(S-_),Ee=(Te.y-A)/(Z-A);f.push(Se,Ee),b.push(J,ee),Se===0?c.push(pe):Se===1&&u.push(pe),Ee===0?d.push(pe):Ee===1&&h.push(pe)}}let O=Y[0],k=Y[1],D=Y[2];a.push(O,k,D);for(let w=3;w<P;w++)k=D,D=Y[w],a.push(O,k,D)}c.sort(function(v,I){return f[v*2+1]-f[I*2+1]}),d.sort(function(v,I){return f[I*2+0]-f[v*2+0]}),u.sort(function(v,I){return f[I*2+1]-f[v*2+1]}),h.sort(function(v,I){return f[v*2+0]-f[I*2+0]})}var pR=Ane;function kg(e){e=e??B.EMPTY_OBJECT,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._skirtHeight=e.skirtHeight,this._boundingSphere=de.clone(e.boundingSphere,new de),this._orientedBoundingBox=en.clone(e.orientedBoundingBox,new en),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(kg.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}}});kg.prototype.interpolateHeight=function(e,t,n){let i=this._mesh;return i===void 0?void 0:BEe(i,e,t,n)};kg.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 OEe="createVerticesFromCesium3DTilesTerrain",aFt=new $n(OEe),cFt=new $n(OEe,Dd.maximumAsynchronousTasks);kg.prototype.createMesh=function(e){e=e??B.EMPTY_OBJECT;let n=e.throttle??!0?cFt:aFt,i=e.tilingScheme,o=i.ellipsoid,r=e.x,s=e.y,a=e.level,c=i.tileXYToRectangle(r,s,a,new ce),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 b=p,f=br.clone(b.encoding,new br),y=new Float32Array(b.verticesBuffer),_=y.length/f.stride,S=b.vertexCountWithoutSkirts,A=_<=65535?Uint16Array:Uint32Array,Z=new A(b.indicesBuffer),V=new A(b.westIndicesBuffer),E=new A(b.eastIndicesBuffer),G=new A(b.southIndicesBuffer),v=new A(b.northIndicesBuffer),I=b.indexCountWithoutSkirts,X=h._minimumHeight,N=h._maximumHeight,g=m.clone(f.center,new m),C=de.clone(h._boundingSphere,new de),R=m.clone(h._horizonOcclusionPoint,new m),L=en.clone(h._orientedBoundingBox,new en),P=new pc(g,y,Z,I,S,X,N,c,C,R,f.stride,L,f,V,G,E,v);return h._mesh=P,Promise.resolve(P)})};kg.prototype._createMeshSync=function(e){e=e??B.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 ce),a=pR.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)})};kg.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;return a===void 0?void 0:Rz(!1,a,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};kg.prototype._upsampleSync=function(e,t,n,i,o,r,s){let a=this._mesh;return a===void 0?void 0:Rz(!0,a,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};kg.prototype.wasCreatedByUpsampling=function(){return!1};function Mg(e){e=e??B.EMPTY_OBJECT,this._mesh=e.terrainMesh,this._skirtHeight=e.skirtHeight,this._credits=e.credits}Mg.prototype.createMesh=function(e){return e=e??B.EMPTY_OBJECT,Promise.resolve(this._mesh)};Mg.prototype.upsample=function(e,t,n,i,o,r,s){return Rz(!1,this._mesh,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};Mg.prototype._upsampleSync=function(e,t,n,i,o,r,s){return Rz(!0,this._mesh,this._skirtHeight,this._credits,e,t,n,i,o,r,s)};Mg.prototype.interpolateHeight=function(e,t,n){let i=this._mesh;return BEe(i,e,t,n)};Mg.prototype.wasCreatedByUpsampling=function(){return!0};Mg.prototype.isChildAvailable=function(e,t,n,i){return!1};Object.defineProperties(Mg.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var lFt=new $n("upsampleVerticesFromCesium3DTilesTerrain",Dd.maximumAsynchronousTasks);function Rz(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,b=r*2!==c,f=s*2===d,y=o.tileXYToRectangle(c,d,u,new ce),_=o.ellipsoid,S={isEastChild:b,isNorthChild:f,rectangle:y,ellipsoid:_,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 Z=pR.upsampleMesh(S),V=new Mg({terrainMesh:Z,skirtHeight:p,credits:i});return Promise.resolve(V)}let A=lFt.scheduleTask(S);if(A!==void 0)return A.then(function(Z){let V=br.clone(Z.encoding,new br),E=V.stride,G=new Float32Array(Z.verticesBuffer),v=G.length/E,I=Z.vertexCountWithoutSkirts,X=v<=65535?Uint16Array:Uint32Array,N=new X(Z.indicesBuffer),g=new X(Z.westIndicesBuffer),C=new X(Z.eastIndicesBuffer),R=new X(Z.southIndicesBuffer),L=new X(Z.northIndicesBuffer),P=Z.indexCountWithoutSkirts,Y=Z.minimumHeight,O=Z.maximumHeight,k=m.clone(V.center,new m),D=de.clone(Z.boundingSphere,new de),w=m.clone(Z.horizonOcclusionPoint,new m),z=en.clone(Z.orientedBoundingBox,new en),J=new pc(k,G,N,P,I,Y,O,y,D,w,E,z,V,g,R,C,L),ee=new Mg({terrainMesh:J,skirtHeight:p,credits:i});return Promise.resolve(ee)})}var dFt=new M,uFt=new M,mFt=new M,hFt=new m;function BEe(e,t,n,i){let o=W.clamp((n-t.west)/t.width,0,1),r=W.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],b=a.decodeTextureCoordinates(s,u,dFt),f=a.decodeTextureCoordinates(s,h,uFt),y=a.decodeTextureCoordinates(s,p,mFt),_=Math.min(b.x,f.x,y.x),S=Math.max(b.x,f.x,y.x),A=Math.min(b.y,f.y,y.y),Z=Math.max(b.y,f.y,y.y);if(o>=_&&o<=S&&r>=A&&r<=Z){let V=Kf.computeBarycentricCoordinates(o,r,b.x,b.y,f.x,f.y,y.x,y.y,hFt);if(V.x>=0&&V.y>=0&&V.z>=0){let E=a.decodeHeight(s,u),G=a.decodeHeight(s,h),v=a.decodeHeight(s,p);return V.x*E+V.y*G+V.z*v}}}return 0}var $9=kg;var gZo=x(T(),1);function S0(e){e=e??B.EMPTY_OBJECT;let t=e.credit;typeof t=="string"&&(t=new yt(t)),this._credit=t,this._tileCredits=void 0,this._errorEvent=new _e,this._ellipsoid=e.ellipsoid??ie.WGS84,this._tilingScheme=new Qi({ellipsoid:this._ellipsoid}),this._subtreeCache=new zA({provider:this}),this._tileset0=void 0,this._tileset1=void 0,this._resource=void 0,this._requestVertexNormals=e.requestVertexNormals??!1,this._requestWaterMask=e.requestWaterMask??!1}S0.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT,e=await Promise.resolve(e);let n=We.createIfNeeded(e),i;try{i=await n.fetchJson()}catch(u){throw new ue("Could not load tileset JSON",u)}let o=new S0(t);o._tileCredits=n.credits,o._resource=n;let r=i.root.children,s=r[0],a=r[1],c=i.schema,d=Ml.fromJson(c);return o._tileset0=new Fp(n,s,d),o._tileset1=new Fp(n,a,d),o};S0.fromIonAssetId=async function(e,t){let n=await ds.fromAssetId(e);return S0.fromUrl(n,t)};var fFt=new Array(3);S0.prototype.requestTileGeometry=async function(e,t,n,i){let o=HEe(n,e),r=o===0?this._tileset0:this._tileset1,s=KEe(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 A=r.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()});p=r.baseResource.getDerivedResource({url:A.url}).fetchArrayBuffer().then(async function(V){if(d=c.find(o,a),d===void 0){let E=new Uint8Array(V);d=await lb.fromSubtreeJson(h._resource,void 0,E,r,a),c.addSubtree(o,d)}return d})}else p=Promise.resolve(d);let b=r.contentUriTemplates[0].getDerivedResource({templateValues:s.getTemplateValues()}),f=r.baseResource.getDerivedResource({url:b.url}),y=f.fetchArrayBuffer();if(y===void 0)return;let _=y.then(A=>x_(new Uint8Array(A))),S=fFt;S[0]=p,S[1]=_,S[2]=u?_.then(A=>pFt(A,f)):void 0;try{let A=await Promise.all(S),Z=A[0],V=A[1],E=A[2],G=Z.getTileMetadataView(s),v=G.getPropertyBySemantic(Rm.TILE_MINIMUM_HEIGHT),I=G.getPropertyBySemantic(Rm.TILE_MAXIMUM_HEIGHT),X=G.getPropertyBySemantic(Rm.TILE_BOUNDING_SPHERE),N=de.unpack(X,0,new de),g=G.getPropertyBySemantic(Rm.TILE_HORIZON_OCCLUSION_POINT),R=h._tilingScheme.tileXYToRectangle(e,t,n,new ce),L=h._ellipsoid,P=en.fromRectangle(R,v,I,L,new en),Y=h.getLevelMaximumGeometricError(n)*5,O=Ez(r,Z,s,0,0),k=Ez(r,Z,s,1,0),D=Ez(r,Z,s,0,1),w=Ez(r,Z,s,1,1),z=(O?1:0)|(k?2:0)|(D?4:0)|(w?8:0),J=new $9({gltf:V,minimumHeight:v,maximumHeight:I,boundingSphere:N,orientedBoundingBox:P,horizonOcclusionPoint:g,skirtHeight:Y,requestVertexNormals:h._requestVertexNormals,childTileMask:z,credits:h._tileCredits,waterMask:E});return Promise.resolve(J)}catch(A){console.log(`Could not load subtree: ${o} ${a.level} ${a.x} ${a.y}: ${A}`),console.log(`Could not load tile: ${o} ${s.level} ${s.x} ${s.y}: ${A}`);return}};S0.prototype.getTileDataAvailable=function(e,t,n){let i=this._subtreeCache,o=HEe(n,e),r=o===0?this._tileset0:this._tileset1,s=KEe(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 HEe(e,t){let n=1<<e;return t/n|0}function KEe(e,t,n,i){let o=1<<t,r=t,s=n%o,a=o-i-1,{subdivisionScheme:c,subtreeLevels:d}=e;return new Ip({subdivisionScheme:c,subtreeLevels:d,level:r,x:s,y:a})}async function pFt(e,t){let n=e.extensions?.EXT_structural_metadata;if(!l(n)||!l(n.propertyTextures))return;let i=new Vy({schema:n.schema});await i.load();let o=i.schema,r,s;if(l(o.classes)){for(let b in o.classes)if(o.classes.hasOwnProperty(b)&&(r=o.classes[b],s=r.propertiesBySemantic.WATERMASK,l(s)))break}if(!l(s))return;let a=n.propertyTextures.find(b=>b.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=Xi.getBufferViewLoader({gltf:e,bufferViewId:u,gltfResource:t,baseResource:t});return await h.load(),await ab({uint8Array:new Uint8Array(h.typedArray),format:"image/png",flipY:!1,skipColorSpaceConversion:!0})}function Ez(e,t,n,i,o){let r=n.isBottomOfSubtree(),a=Rne(e,1,i,o),c=n.getDescendantCoordinates(a);return r?t.childSubtreeIsAvailableAtCoordinates(c):t.tileIsAvailableAtCoordinates(c)}function Rne(e,t,n,i){let{subdivisionScheme:o,subtreeLevels:r}=e;return new Ip({subdivisionScheme:o,subtreeLevels:r,level:t,x:n,y:i})}S0.prototype.loadTileDataAvailability=function(e,t,n){};S0.prototype.getLevelMaximumGeometricError=function(e){let t=this._ellipsoid;return zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(t,64,2)/(1<<e)};Object.defineProperties(S0.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 bFt(e,t,n){this.rootId=e,this.subtree=t,this.stamp=n}function zA(e){this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new Pg({comparator:zA.comparator}),this._provider=e.provider}zA.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};zA.prototype.addSubtree=function(e,t){let n=new bFt(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()};zA.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}};zA.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=Rne(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,b=-W.PI,f=+W.PI,y=W.lerp(b,f,o/2),_=W.lerp(b,f,(o+1)/2),S=-W.PI*.5,A=+W.PI*.5,Z=0,V=0,E=!0;for(;E;){let v=1/(1<<p),I=(_-y)*v,X=y+u*I,N=(A-S)*v,g=S+h*N;Z=(t-X)/I,V=(n-g)/N;let C=zEe(r,d,Z,V,s);if(c.childSubtreeIsAvailableAtCoordinates(C)){let R=this.find(o,C);if(R!==void 0)c=R,d=c.implicitCoordinates,u=d.x,h=d.y,p=d.level;else return C}else E=!1}let G;for(let v=0;v<s;v++){let I=zEe(r,d,Z,V,v);if(c.tileIsAvailableAtCoordinates(I))G=I;else break}return G};function zEe(e,t,n,i,o){let r=1<<o,s=W.clamp(n*r|0,0,r-1),a=W.clamp(i*r|0,0,r-1),c=Rne(e,o,s,a);return t.getDescendantCoordinates(c)}zA.prototype.computeMaximumLevelAtPosition=function(e){let t=this._computeMaximumImplicitTileCoordinatesAtPosition(e);return t===void 0?0:t.level};var Ene=S0;var CZo=x(T(),1);function Ug(e){e=e??B.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 nd(n),this._workerName="createCircleGeometry"}Ug.packedLength=nd.packedLength;Ug.pack=function(e,t,n){return nd.pack(e._ellipseGeometry,t,n)};var JEe=new nd({center:new m,semiMajorAxis:1,semiMinorAxis:1}),Nc={center:new m,radius:void 0,ellipsoid:ie.clone(ie.default),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new Xe,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};Ug.unpack=function(e,t,n){let i=nd.unpack(e,t,JEe);return Nc.center=m.clone(i._center,Nc.center),Nc.ellipsoid=ie.clone(i._ellipsoid,Nc.ellipsoid),Nc.ellipsoid=ie.clone(i._ellipsoid,JEe._ellipsoid),Nc.height=i._height,Nc.extrudedHeight=i._extrudedHeight,Nc.granularity=i._granularity,Nc.vertexFormat=Xe.clone(i._vertexFormat,Nc.vertexFormat),Nc.stRotation=i._stRotation,Nc.shadowVolume=i._shadowVolume,l(n)?(Nc.semiMajorAxis=i._semiMajorAxis,Nc.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new nd(Nc),n):(Nc.radius=i._semiMajorAxis,new Ug(Nc))};Ug.createGeometry=function(e){return nd.createGeometry(e._ellipseGeometry)};Ug.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new Ug({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(Ug.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var Gne=Ug;var vZo=x(T(),1);function bR(e){e=e??B.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 vu(n),this._workerName="createCircleOutlineGeometry"}bR.packedLength=vu.packedLength;bR.pack=function(e,t,n){return vu.pack(e._ellipseGeometry,t,n)};var gFt=new vu({center:new m,semiMajorAxis:1,semiMinorAxis:1}),im={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};bR.unpack=function(e,t,n){let i=vu.unpack(e,t,gFt);return im.center=m.clone(i._center,im.center),im.ellipsoid=ie.clone(i._ellipsoid,im.ellipsoid),im.height=i._height,im.extrudedHeight=i._extrudedHeight,im.granularity=i._granularity,im.numberOfVerticalLines=i._numberOfVerticalLines,l(n)?(im.semiMajorAxis=i._semiMajorAxis,im.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new vu(im),n):(im.radius=i._semiMajorAxis,new bR(im))};bR.createGeometry=function(e){return vu.createGeometry(e._ellipseGeometry)};var Lne=bR;var UZo=x(T(),1);function gR(e){e=e??B.EMPTY_OBJECT,this._callback=e.callback,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new Qi({ellipsoid:e.ellipsoid??ie.default})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=zo.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new _e;let n=e.credit;typeof n=="string"&&(n=new yt(n)),this._credit=n}Object.defineProperties(gR.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}}});gR.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 Pc({buffer:c,width:r,height:s})})};gR.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};gR.prototype.getTileDataAvailable=function(e,t,n){};gR.prototype.loadTileDataAvailability=function(e,t,n){};var Wne=gR;var OZo=x(T(),1);function jEe(e){this.proxy=e}jEe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var vne=jEe;var zZo=x(T(),1),yFt={SEARCH:0,AUTOCOMPLETE:1},nT=Object.freeze(yFt);var QZo=x(T(),1);function Gz(){fe.throwInstantiationError()}Object.defineProperties(Gz.prototype,{credit:{get:fe.throwInstantiationError}});Gz.getCreditsFromResult=function(e){if(l(e.attributions))return e.attributions.map(yt.getIonCredit)};Gz.prototype.geocode=fe.throwInstantiationError;var yR=Gz;var eCo=x(T(),1);function QEe(){fe.throwInstantiationError()}QEe.createGeometry=function(e){fe.throwInstantiationError()};var Fne=QEe;var gCo=x(T(),1);function HA(e){e=e??B.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(HA.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var eGe="createVerticesFromGoogleEarthEnterpriseBuffer",xFt=new $n(eGe),TFt=new $n(eGe,Dd.maximumAsynchronousTasks),qEe=new ce,Lz=new ce;HA.prototype.createMesh=function(e){e=e??B.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,qEe),t.tileXYToRectangle(n,i,o,Lz);let d=c.cartographicToCartesian(ce.center(Lz)),h=40075.16/(1<<o);this._skirtHeight=Math.min(h*8,1e3);let b=(a?TFt:xFt).scheduleTask({buffer:this._buffer,nativeRectangle:qEe,rectangle:Lz,relativeToCenter:d,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!l(b))return;let f=this;return b.then(function(y){return f._mesh=new pc(d,new Float32Array(y.vertices),new Uint16Array(y.indices),y.indexCountWithoutSkirts,y.vertexCountWithoutSkirts,y.minimumHeight,y.maximumHeight,Lz,de.clone(y.boundingSphere3D),m.clone(y.occludeePointInScaledSpace),y.numberOfAttributes,en.clone(y.orientedBoundingBox),br.clone(y.encoding),y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),f._minimumHeight=y.minimumHeight,f._maximumHeight=y.maximumHeight,f._buffer=void 0,f._mesh})};HA.prototype.interpolateHeight=function(e,t,n){let i=W.clamp((t-e.west)/e.width,0,1),o=W.clamp((n-e.south)/e.height,0,1);return l(this._mesh)?CFt(this,i,o):EFt(this,i,o,e)};var _Ft=new $n("upsampleQuantizedTerrainMesh",Dd.maximumAsynchronousTasks);HA.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=_Ft.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 b=this;return p.then(function(f){let y=new Uint16Array(f.vertices),_=Ne.createTypedArray(y.length/3,f.indices),S=b._skirtHeight;return new UA({quantizedVertices:y,indices:_,minimumHeight:f.minimumHeight,maximumHeight:f.maximumHeight,boundingSphere:de.clone(f.boundingSphere),orientedBoundingBox:en.clone(f.orientedBoundingBox),horizonOcclusionPoint:m.clone(f.horizonOcclusionPoint),westIndices:f.westIndices,southIndices:f.southIndices,eastIndices:f.eastIndices,northIndices:f.northIndices,westSkirtHeight:S,southSkirtHeight:S,eastSkirtHeight:S,northSkirtHeight:S,childTileMask:0,createdByUpsampling:!0,credits:b._credits})})};HA.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};HA.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var SFt=new M,AFt=new M,ZFt=new M,tGe=new m;function CFt(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,SFt),b=r.decodeTextureCoordinates(o,u,AFt),f=r.decodeTextureCoordinates(o,h,ZFt),y=Kf.computeBarycentricCoordinates(t,n,p.x,p.y,b.x,b.y,f.x,f.y,tGe);if(y.x>=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let _=r.decodeHeight(o,d),S=r.decodeHeight(o,u),A=r.decodeHeight(o,h);return y.x*_+y.y*S+y.z*A}}}var VFt=Uint16Array.BYTES_PER_ELEMENT,$Ee=Uint32Array.BYTES_PER_ELEMENT,Ine=Int32Array.BYTES_PER_ELEMENT,RFt=Float32Array.BYTES_PER_ELEMENT,Pne=Float64Array.BYTES_PER_ELEMENT;function EFt(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 E=0;E<r;++E)d+=c.getUint32(d,!0),d+=$Ee;d+=$Ee,d+=2*Pne;let u=W.toRadians(c.getFloat64(d,!0)*180);d+=Pne;let h=W.toRadians(c.getFloat64(d,!0)*180);d+=Pne;let p=i.width/u/2,b=i.height/h/2,f=c.getInt32(d,!0);d+=Ine;let y=c.getInt32(d,!0)*3;d+=Ine,d+=Ine;let _=new Array(f),S=new Array(f),A=new Array(f),Z;for(Z=0;Z<f;++Z)_[Z]=s+c.getUint8(d++)*p,S[Z]=a+c.getUint8(d++)*b,A[Z]=c.getFloat32(d,!0)*6371010,d+=RFt;let V=new Array(y);for(Z=0;Z<y;++Z)V[Z]=c.getUint16(d,!0),d+=VFt;for(Z=0;Z<y;Z+=3){let E=V[Z],G=V[Z+1],v=V[Z+2],I=_[E],X=_[G],N=_[v],g=S[E],C=S[G],R=S[v],L=Kf.computeBarycentricCoordinates(t,n,I,g,X,C,N,R,tGe);if(L.x>=-1e-15&&L.y>=-1e-15&&L.z>=-1e-15)return L.x*A[E]+L.y*A[G]+L.z*A[v]}}var xR=HA;var PCo=x(T(),1);var ph={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},Wz=new Q;function vz(){this._terrainCache={},this._lastTidy=Q.now()}vz.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:Q.now()}};vz.prototype.get=function(e){let n=this._terrainCache[e];if(l(n))return delete this._terrainCache[e],n.buffer};vz.prototype.tidy=function(){if(Q.now(Wz),Q.secondsDifference(Wz,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(Wz,r.timestamp)>10&&delete e[o]}Q.clone(Wz,this._lastTidy)}};function iT(e){e=e??B.EMPTY_OBJECT,this._tilingScheme=new Qi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new ce(-W.PI,-W.PI,W.PI,W.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new yt(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new vz,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new _e}Object.defineProperties(iT.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(){}}});iT.fromMetadata=function(e,t){if(!e.terrainPresent)throw new ue(`The server ${e.url} doesn't have terrain`);let n=new iT(t);return n._metadata=e,n};var GFt=new $n("decodeGoogleEarthEnterprisePacket");function nGe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===ph.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}iT.prototype.requestTileGeometry=function(e,t,n,i){let o=Xg.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!l(a))return Promise.reject(new ue("Terrain tile doesn't exist"));let c=a.terrainState;l(c)||(c=a.terrainState=ph.UNKNOWN);let d=r.get(o);if(l(d)){let S=s.providers[a.terrainProvider];return Promise.resolve(new xR({buffer:d,childTileMask:nGe(o,a,s),credits:l(S)?[S]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(c===ph.NONE)return Promise.reject(new ue("Terrain tile doesn't exist"))}else return Promise.resolve(new Pc({buffer:new Uint8Array(256),width:16,height:16}));let u,h=o,p=-1;switch(c){case ph.SELF:p=a.terrainVersion;break;case ph.PARENT:h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),p=u.terrainVersion;break;case ph.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 ue("Terrain tile doesn't exist"));let b=this._terrainPromises,f=this._terrainRequests,y,_;if(l(b[h]))y=b[h],_=f[h];else{_=i;let S=LFt(this,h,p,_).fetchArrayBuffer();if(!l(S))return;y=S.then(function(A){return l(A)?GFt.scheduleTask({buffer:A,type:"Terrain",key:s.key},[A]).then(function(Z){let V=s.getTileInformationFromQuadKey(h);V.terrainState=ph.SELF,r.add(h,Z[0]);let E=V.terrainProvider,G=Z.length-1;for(let v=0;v<G;++v){let I=h+v.toString(),X=s.getTileInformationFromQuadKey(I);l(X)&&(r.add(I,Z[v+1]),X.terrainState=ph.PARENT,X.terrainProvider===0&&(X.terrainProvider=E))}}):Promise.reject(new ue("Failed to load terrain."))}),b[h]=y,f[h]=_,y=y.finally(function(){delete b[h],delete f[h]})}return y.then(function(){let S=r.get(o);if(l(S)){let A=s.providers[a.terrainProvider];return new xR({buffer:S,childTileMask:nGe(o,a,s),credits:l(A)?[A]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new ue("Failed to load terrain."))}).catch(function(S){return _.state===bi.CANCELLED?(i.state=_.state,Promise.reject(S)):(a.terrainState=ph.NONE,Promise.reject(S))})};iT.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};iT.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=Xg.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===ph.NONE)return!1;if((!l(s)||s===ph.UNKNOWN)&&(r.terrainState=ph.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 xr({throttle:!1,throttleByServer:!0,type:Hs.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};iT.prototype.loadTileDataAvailability=function(e,t,n){};function LFt(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 Xne=iT;var UCo=x(T(),1);var WFt="https://maps.googleapis.com/maps/api/geocode/json",iGe='<img alt="Google" src="proxy.php?url=https%3A%2F%2Fassets.ion.cesium.com%2Fgoogle-credit.png" style="vertical-align:-5px">';function Nne(e){e=e??B.EMPTY_OBJECT;let t=e.key;this._resource=new We({url:WFt,queryParameters:{key:t}}),this._credit=new yt(iGe,!0)}Object.defineProperties(Nne.prototype,{credit:{get:function(){return this._credit}}});Nne.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 ue(`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:ce.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:iGe,collapsible:!1}}})};var Yne=Nne;var BCo=x(T(),1);var ek={};ek.type=void 0;ek.getRequiredDataPoints=fe.throwInstantiationError;ek.interpolateOrderZero=fe.throwInstantiationError;ek.interpolate=fe.throwInstantiationError;var wne=ek;var HCo=x(T(),1),vFt={GOOGLE:"GOOGLE",BING:"BING",DEFAULT:"DEFAULT"},Dg=Object.freeze(vFt);var dVo=x(T(),1);var eVo=x(T(),1);function Mne(e){this._url=We.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(Mne.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});Mne.prototype.geocode=async function(e,t){return this._url.getDerivedResource({url:t===nT.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=ce.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 tk=Mne;function FFt(e){if(!Object.values(Dg).some(t=>t===e))throw new fe(`Invalid geocodeProviderType: "${e}"`)}var oGe=Object.freeze({[Dg.GOOGLE]:"google",[Dg.BING]:"bing",[Dg.DEFAULT]:void 0});function IFt(e){return oGe[e]}function PFt(e){return Object.entries(oGe).find(t=>t[1]===e)[0]}function kne(e){e=e??B.EMPTY_OBJECT;let t=e.geocodeProviderType??Dg.DEFAULT,n=e.accessToken??Uh.defaultAccessToken,i=We.createIfNeeded(e.server??Uh.defaultServer);i.appendForwardSlash();let o=Uh.getDefaultTokenCredit(n);l(o)&&e.scene.frameState.creditDisplay.addStaticCredit(yt.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 tk(r),this.geocodeProviderType=t}Object.defineProperties(kne.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return PFt(this._pelias.url.queryParameters.geocoder)},set:function(e){FFt(e);let t={...this._pelias.url.queryParameters,geocoder:IFt(e)};l(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});kne.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var KA=kne;var hVo=x(T(),1);function Fz(){fe.throwInstantiationError()}Object.defineProperties(Fz.prototype,{ellipsoid:{get:fe.throwInstantiationError}});Fz.prototype.project=fe.throwInstantiationError;Fz.prototype.unproject=fe.throwInstantiationError;var Une=Fz;var yVo=x(T(),1);function TR(e){e=e??B.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(TR.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});TR.prototype.findTimeInterval=Co.prototype.findTimeInterval;TR.prototype.wrapTime=Co.prototype.wrapTime;TR.prototype.clampTime=Co.prototype.clampTime;TR.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 Dne=TR;var VVo=x(T(),1);function One(e,t,n){e=We.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=n??{},this._credit=new yt('Geodata copyright <a href="proxy.php?url=https%3A%2F%2Fwww.openstreetmap.org%2F">OpenStreetMap</a> contributors',!1)}Object.defineProperties(One.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});One.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:Gt(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(l(r))o=ce.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 Bne=One;var GVo=x(T(),1);var XFt={packedLength:void 0,pack:fe.throwInstantiationError,unpack:fe.throwInstantiationError},zne=XFt;var vVo=x(T(),1);var NFt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:fe.throwInstantiationError,unpackInterpolationResult:fe.throwInstantiationError},Hne=NFt;var PVo=x(T(),1);function rGe(){fe.throwInstantiationError()}rGe.prototype.getURL=fe.throwInstantiationError;var Kne=rGe;var qVo=x(T(),1);function YFt(e,t,n,i,o,r,s){let a=$i.numberOfPoints(e,t,o),c,d=n.red,u=n.green,h=n.blue,p=n.alpha,b=i.red,f=i.green,y=i.blue,_=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 S=(b-d)/a,A=(f-u)/a,Z=(y-h)/a,V=(_-p)/a,E=s;for(c=0;c<a;c++)r[E++]=U.floatToByte(d+c*S),r[E++]=U.floatToByte(u+c*A),r[E++]=U.floatToByte(h+c*Z),r[E++]=U.floatToByte(p+c*V);return E}function nk(e){e=e??B.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??cn.GEODESIC,this._granularity=e.granularity??W.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}nk.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};nk.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 nk({positions:r,colors:s,ellipsoid:a,colorsPerVertex:c,arcType:d,granularity:u})};var Iz=new Array(2),Pz=new Array(2),wFt={positions:Iz,height:Pz,ellipsoid:void 0,minDistance:void 0,granularity:void 0};nk.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=W.chordLength(r,s.maximumRadius),c=l(n)&&!i,d,u=t.length,h,p,b,f,y=0;if(o===cn.GEODESIC||o===cn.RHUMB){let V,E,G;o===cn.GEODESIC?(V=W.chordLength(r,s.maximumRadius),E=$i.numberOfPoints,G=$i.generateArc):(V=r,E=$i.numberOfPointsRhumbLine,G=$i.generateRhumbArc);let v=$i.extractHeights(t,s),I=wFt;if(o===cn.GEODESIC?I.minDistance=a:I.granularity=r,I.ellipsoid=s,c){let X=0;for(d=0;d<u-1;d++)X+=E(t[d],t[d+1],V)+1;h=new Float64Array(X*3),b=new Uint8Array(X*4),I.positions=Iz,I.height=Pz;let N=0;for(d=0;d<u-1;++d){Iz[0]=t[d],Iz[1]=t[d+1],Pz[0]=v[d],Pz[1]=v[d+1];let g=G(I);if(l(n)){let C=g.length/3;f=n[d];for(let R=0;R<C;++R)b[N++]=U.floatToByte(f.red),b[N++]=U.floatToByte(f.green),b[N++]=U.floatToByte(f.blue),b[N++]=U.floatToByte(f.alpha)}h.set(g,y),y+=g.length}}else if(I.positions=t,I.height=v,h=new Float64Array(G(I)),l(n)){for(b=new Uint8Array(h.length/3*4),d=0;d<u-1;++d){let N=t[d],g=t[d+1],C=n[d],R=n[d+1];y=YFt(N,g,C,R,a,b,y)}let X=n[u-1];b[y++]=U.floatToByte(X.red),b[y++]=U.floatToByte(X.green),b[y++]=U.floatToByte(X.blue),b[y++]=U.floatToByte(X.alpha)}}else{p=c?u*2-2:u,h=new Float64Array(p*3),b=l(n)?new Uint8Array(p*4):void 0;let V=0,E=0;for(d=0;d<u;++d){let G=t[d];if(c&&d>0&&(m.pack(G,h,V),V+=3,f=n[d-1],b[E++]=U.floatToByte(f.red),b[E++]=U.floatToByte(f.green),b[E++]=U.floatToByte(f.blue),b[E++]=U.floatToByte(f.alpha)),c&&d===u-1)break;m.pack(G,h,V),V+=3,l(n)&&(f=n[d],b[E++]=U.floatToByte(f.red),b[E++]=U.floatToByte(f.green),b[E++]=U.floatToByte(f.blue),b[E++]=U.floatToByte(f.alpha))}}let _=new yn;_.position=new Ie({componentDatatype:K.DOUBLE,componentsPerAttribute:3,values:h}),l(n)&&(_.color=new Ie({componentDatatype:K.UNSIGNED_BYTE,componentsPerAttribute:4,values:b,normalize:!0})),p=h.length/3;let S=(p-1)*2,A=Ne.createTypedArray(p,S),Z=0;for(d=0;d<p-1;++d)A[Z++]=d,A[Z++]=d+1;return new gt({attributes:_,indices:A,primitiveType:ve.LINES,boundingSphere:de.fromPoints(t)})};var Jne=nk;var t1o=x(T(),1);function oT(e){}Object.defineProperties(oT.prototype,{ellipsoid:{get:fe.throwInstantiationError},rectangle:{get:fe.throwInstantiationError},projection:{get:fe.throwInstantiationError}});oT.prototype.getNumberOfXTilesAtLevel=fe.throwInstantiationError;oT.prototype.getNumberOfYTilesAtLevel=fe.throwInstantiationError;oT.prototype.rectangleToNativeRectangle=fe.throwInstantiationError;oT.prototype.tileXYToNativeRectangle=fe.throwInstantiationError;oT.prototype.tileXYToRectangle=fe.throwInstantiationError;oT.prototype.positionToTileXY=fe.throwInstantiationError;var jne=oT;var g1o=x(T(),1);function MFt(e,t){this.rectangle=e,this.maxLevel=t}function sGe(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=[]}sGe.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 kFt(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new Qi({ellipsoid:e.ellipsoid});else throw new ue(`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=zo.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=W.toRadians(parseFloat(s.getAttribute("minx"))),c=W.toRadians(parseFloat(s.getAttribute("miny"))),d=W.toRadians(parseFloat(s.getAttribute("maxx"))),u=W.toRadians(parseFloat(s.getAttribute("maxy"))),h=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new MFt(new ce(a,c,d,u),h))}}function UFt(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i=`${i}: ${t.message}`),jo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new ue(i)}async function DFt(e,t,n){try{let i=await t.fetchXML();kFt(e,i)}catch(i){UFt(t,i,n)}}function rT(e){e=e??B.EMPTY_OBJECT,this._errorEvent=new _e,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 yt(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(rT.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(){}}});rT.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=new sGe(t),i=We.createIfNeeded(e);await DFt(n,i);let o=new rT(t);return n.build(o),o._resource=i,o};rT.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 Pc({buffer:Ah(c),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:OFt(a,e,t,n),structure:a._terrainDataStructure})})};rT.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var aGe=new ce;function OFt(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=ce.intersection(u,s,aGe);l(h)&&(Xz(o,u,t*2,n*2,i+1)&&(a|=4),Xz(o,u,t*2+1,n*2,i+1)&&(a|=8),Xz(o,u,t*2,n*2+1,i+1)&&(a|=1),Xz(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function Xz(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return l(ce.intersection(r,t,aGe))}rT.prototype.getTileDataAvailable=function(e,t,n){};rT.prototype.loadTileDataAvailability=function(e,t,n){};var Qne=rT;var Z1o=x(T(),1);function JA(e){e=e??B.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??Je.MINIMUM_VALUE,this.tolerance=e.tolerance??1,this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(JA.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(JA.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=BFt(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});JA.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,he(this)};JA.prototype.isDestroyed=function(){return!1};JA.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};JA.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??Je.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 BFt(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var qne=JA;var V1o=x(T(),1),zFt={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},$ne=Object.freeze(zFt);var W1o=x(T(),1);var HFt=new m;function KFt(e,t,n,i){let o=ST(e,t,n,i,HFt);return l(o)?o.x>0&&o.y>0&&o.z>0:!1}var eie=KFt;var I1o=x(T(),1);function JFt(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 tie=JFt;var X1o=x(T(),1);function jFt(e,t,n){return function(){n.apply(e,arguments),t.apply(e,arguments)}}var ik=jFt;var Y1o=x(T(),1),nie=`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 z1o=x(T(),1);function QFt(e){e=e??B.EMPTY_OBJECT,this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??Ke.RGBA,this.pixelDatatype=e.pixelDatatype??De.UNSIGNED_BYTE;let t=e.url;typeof t=="string"&&(t=We.createIfNeeded(t)),this.resource=t;let i=e.repeat??!0?hn.REPEAT:hn.CLAMP_TO_EDGE;this.sampler=new zt({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var iie=QFt;var K1o=x(T(),1),qFt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"},oie=Object.freeze(qFt);var j1o=x(T(),1),$Ft={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"},rie=Object.freeze($Ft);var $1o=x(T(),1);function eIt(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: ${Zp(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 sie=eIt;globalThis.CESIUM_VERSION="1.140.0";var eQo=x(T(),1);var Wzo=x(T(),1);var Rzo=x(T(),1);var yzo=x(T(),1),ok;typeof ko<"u"&&(ok=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,C){return g===null||typeof g in y?g===C:!1}function d(g,C){var R;return function(){R||(R=f.a.setTimeout(function(){R=e,g()},C))}}function u(g,C){var R;return function(){clearTimeout(R),R=f.a.setTimeout(g,C)}}function h(g,C){C&&C!=="change"?C==="beforeChange"?this.pc(g):this.gb(g,C):this.qc(g)}function p(g,C){C!==null&&C.s&&C.s()}function b(g,C){var R=this.qd,L=R[V];L.ra||(this.Qb&&this.mb[C]?(R.uc(C,g,this.mb[C]),this.mb[C]=null,--this.Qb):L.I[C]||R.uc(C,g,L.J?{da:g}:R.$c(g)),g.Ja&&g.gd())}var f=typeof s<"u"?s:{};f.b=function(g,C){for(var R=g.split("."),L=f,P=0;P<R.length-1;P++)L=L[R[P]];L[R[R.length-1]]=C},f.L=function(g,C,R){g[C]=R},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=(function(){function g(H,te){for(var $ in H)P.call(H,$)&&te($,H[$])}function C(H,te){if(te)for(var $ in te)P.call(te,$)&&(H[$]=te[$]);return H}function R(H,te){return H.__proto__=te,H}function L(H,te,$,pe){var xe=H[te].match(J)||[];f.a.D($.match(J),function(le){f.a.Na(xe,le,pe)}),H[te]=xe.join(" ")}var P=Object.prototype.hasOwnProperty,Y={__proto__:[]}instanceof Array,O=typeof Symbol=="function",k={},D={};k[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),g(k,function(H,te){if(te.length)for(var $=0,pe=te.length;$<pe;$++)D[te[$]]=H});var w={propertychange:!0},z=n&&(function(){for(var H=3,te=n.createElement("div"),$=te.getElementsByTagName("i");te.innerHTML="<!--[if gt IE "+ ++H+"]><i></i><![endif]-->",$[0];);return 4<H?H:e})(),J=/\S+/g,ee;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(H,te,$){for(var pe=0,xe=H.length;pe<xe;pe++)te.call($,H[pe],pe,H)},A:typeof Array.prototype.indexOf=="function"?function(H,te){return Array.prototype.indexOf.call(H,te)}:function(H,te){for(var $=0,pe=H.length;$<pe;$++)if(H[$]===te)return $;return-1},Lb:function(H,te,$){for(var pe=0,xe=H.length;pe<xe;pe++)if(te.call($,H[pe],pe,H))return H[pe];return e},Pa:function(H,te){var $=f.a.A(H,te);0<$?H.splice($,1):$===0&&H.shift()},wc:function(H){var te=[];return H&&f.a.D(H,function($){0>f.a.A(te,$)&&te.push($)}),te},Mb:function(H,te,$){var pe=[];if(H)for(var xe=0,le=H.length;xe<le;xe++)pe.push(te.call($,H[xe],xe));return pe},jb:function(H,te,$){var pe=[];if(H)for(var xe=0,le=H.length;xe<le;xe++)te.call($,H[xe],xe)&&pe.push(H[xe]);return pe},Nb:function(H,te){if(te instanceof Array)H.push.apply(H,te);else for(var $=0,pe=te.length;$<pe;$++)H.push(te[$]);return H},Na:function(H,te,$){var pe=f.a.A(f.a.bc(H),te);0>pe?$&&H.push(te):$||H.splice(pe,1)},Ba:Y,extend:C,setPrototypeOf:R,Ab:Y?R:C,P:g,Ga:function(H,te,$){if(!H)return H;var pe={},xe;for(xe in H)P.call(H,xe)&&(pe[xe]=te.call($,H[xe],xe,H));return pe},Tb:function(H){for(;H.firstChild;)f.removeNode(H.firstChild)},Yb:function(H){H=f.a.la(H);for(var te=(H[0]&&H[0].ownerDocument||n).createElement("div"),$=0,pe=H.length;$<pe;$++)te.appendChild(f.oa(H[$]));return te},Ca:function(H,te){for(var $=0,pe=H.length,xe=[];$<pe;$++){var le=H[$].cloneNode(!0);xe.push(te?f.oa(le):le)}return xe},va:function(H,te){if(f.a.Tb(H),te)for(var $=0,pe=te.length;$<pe;$++)H.appendChild(te[$])},Xc:function(H,te){var $=H.nodeType?[H]:H;if(0<$.length){for(var pe=$[0],xe=pe.parentNode,le=0,Te=te.length;le<Te;le++)xe.insertBefore(te[le],pe);for(le=0,Te=$.length;le<Te;le++)f.removeNode($[le])}},Ua:function(H,te){if(H.length){for(te=te.nodeType===8&&te.parentNode||te;H.length&&H[0].parentNode!==te;)H.splice(0,1);for(;1<H.length&&H[H.length-1].parentNode!==te;)H.length--;if(1<H.length){var $=H[0],pe=H[H.length-1];for(H.length=0;$!==pe;)H.push($),$=$.nextSibling;H.push(pe)}}return H},Zc:function(H,te){7>z?H.setAttribute("selected",te):H.selected=te},Db:function(H){return H===null||H===e?"":H.trim?H.trim():H.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(H,te){return H=H||"",te.length>H.length?!1:H.substring(0,te.length)===te},vd:function(H,te){if(H===te)return!0;if(H.nodeType===11)return!1;if(te.contains)return te.contains(H.nodeType!==1?H.parentNode:H);if(te.compareDocumentPosition)return(te.compareDocumentPosition(H)&16)==16;for(;H&&H!=te;)H=H.parentNode;return!!H},Sb:function(H){return f.a.vd(H,H.ownerDocument.documentElement)},kd:function(H){return!!f.a.Lb(H,f.a.Sb)},R:function(H){return H&&H.tagName&&H.tagName.toLowerCase()},Ac:function(H){return f.onError?function(){try{return H.apply(this,arguments)}catch(te){throw f.onError&&f.onError(te),te}}:H},setTimeout:function(H,te){return setTimeout(f.a.Ac(H),te)},Gc:function(H){setTimeout(function(){throw f.onError&&f.onError(H),H},0)},B:function(H,te,$){var pe=f.a.Ac($);if($=w[te],f.options.useOnlyNativeEvents||$||!o)if($||typeof H.addEventListener!="function")if(typeof H.attachEvent<"u"){var xe=function(Te){pe.call(H,Te)},le="on"+te;H.attachEvent(le,xe),f.a.K.za(H,function(){H.detachEvent(le,xe)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else H.addEventListener(te,pe,!1);else ee||(ee=typeof o(H).on=="function"?"on":"bind"),o(H)[ee](te,pe)},Fb:function(H,te){if(!H||!H.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var $;if(f.a.R(H)==="input"&&H.type&&te.toLowerCase()=="click"?($=H.type,$=$=="checkbox"||$=="radio"):$=!1,f.options.useOnlyNativeEvents||!o||$)if(typeof n.createEvent=="function")if(typeof H.dispatchEvent=="function")$=n.createEvent(D[te]||"HTMLEvents"),$.initEvent(te,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,H),H.dispatchEvent($);else throw Error("The supplied element doesn't support dispatchEvent");else if($&&H.click)H.click();else if(typeof H.fireEvent<"u")H.fireEvent("on"+te);else throw Error("Browser doesn't support triggering events");else o(H).trigger(te)},f:function(H){return f.O(H)?H():H},bc:function(H){return f.O(H)?H.v():H},Eb:function(H,te,$){var pe;te&&(typeof H.classList=="object"?(pe=H.classList[$?"add":"remove"],f.a.D(te.match(J),function(xe){pe.call(H.classList,xe)})):typeof H.className.baseVal=="string"?L(H.className,"baseVal",te,$):L(H,"className",te,$))},Bb:function(H,te){var $=f.a.f(te);($===null||$===e)&&($="");var pe=f.h.firstChild(H);!pe||pe.nodeType!=3||f.h.nextSibling(pe)?f.h.va(H,[H.ownerDocument.createTextNode($)]):pe.data=$,f.a.Ad(H)},Yc:function(H,te){if(H.name=te,7>=z)try{var $=H.name.replace(/[&<>'"]/g,function(pe){return"&#"+pe.charCodeAt(0)+";"});H.mergeAttributes(n.createElement("<input name='"+$+"'/>"),!1)}catch{}},Ad:function(H){9<=z&&(H=H.nodeType==1?H:H.parentNode,H.style&&(H.style.zoom=H.style.zoom))},wd:function(H){if(z){var te=H.style.width;H.style.width=0,H.style.width=te}},Pd:function(H,te){H=f.a.f(H),te=f.a.f(te);for(var $=[],pe=H;pe<=te;pe++)$.push(pe);return $},la:function(H){for(var te=[],$=0,pe=H.length;$<pe;$++)te.push(H[$]);return te},Da:function(H){return O?Symbol(H):H},Zd:z===6,$d:z===7,W:z,Lc:function(H,te){for(var $=f.a.la(H.getElementsByTagName("input")).concat(f.a.la(H.getElementsByTagName("textarea"))),pe=typeof te=="string"?function(Te){return Te.name===te}:function(Te){return te.test(Te.name)},xe=[],le=$.length-1;0<=le;le--)pe($[le])&&xe.push($[le]);return xe},Nd:function(H){return typeof H=="string"&&(H=f.a.Db(H))?r&&r.parse?r.parse(H):new Function("return "+H)():null},hc:function(H,te,$){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(H),te,$)},Od:function(H,te,$){$=$||{};var pe=$.params||{},xe=$.includeFields||this.Jc,le=H;if(typeof H=="object"&&f.a.R(H)==="form")for(var le=H.action,Te=xe.length-1;0<=Te;Te--)for(var Se=f.a.Lc(H,xe[Te]),Ee=Se.length-1;0<=Ee;Ee--)pe[Se[Ee].name]=Se[Ee].value;te=f.a.f(te);var Ve=n.createElement("form");Ve.style.display="none",Ve.action=le,Ve.method="post";for(var we in te)H=n.createElement("input"),H.type="hidden",H.name=we,H.value=f.a.hc(f.a.f(te[we])),Ve.appendChild(H);g(pe,function(ke,nt){var bt=n.createElement("input");bt.type="hidden",bt.name=ke,bt.value=nt,Ve.appendChild(bt)}),n.body.appendChild(Ve),$.submitter?$.submitter(Ve):Ve.submit(),setTimeout(function(){Ve.parentNode.removeChild(Ve)},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 C=this;if(arguments.length===1)return function(){return C.apply(g,arguments)};var R=Array.prototype.slice.call(arguments,1);return function(){var L=R.slice(0);return L.push.apply(L,arguments),C.apply(g,L)}}),f.a.g=new function(){var g=0,C="__ko__"+new Date().getTime(),R={},L,P;return f.a.W?(L=function(Y,O){var k=Y[C];if(!k||k==="null"||!R[k]){if(!O)return e;k=Y[C]="ko"+g++,R[k]={}}return R[k]},P=function(Y){var O=Y[C];return O?(delete R[O],Y[C]=null,!0):!1}):(L=function(Y,O){var k=Y[C];return!k&&O&&(k=Y[C]={}),k},P=function(Y){return Y[C]?(delete Y[C],!0):!1}),{get:function(Y,O){var k=L(Y,!1);return k&&k[O]},set:function(Y,O,k){(Y=L(Y,k!==e))&&(Y[O]=k)},Ub:function(Y,O,k){return Y=L(Y,!0),Y[O]||(Y[O]=k)},clear:P,Z:function(){return g+++C}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function g(O,k){var D=f.a.g.get(O,L);return D===e&&k&&(D=[],f.a.g.set(O,L,D)),D}function C(O){var k=g(O,!1);if(k)for(var k=k.slice(0),D=0;D<k.length;D++)k[D](O);f.a.g.clear(O),f.a.K.cleanExternalData(O),Y[O.nodeType]&&R(O.childNodes,!0)}function R(O,k){for(var D=[],w,z=0;z<O.length;z++)if((!k||O[z].nodeType===8)&&(C(D[D.length]=w=O[z]),O[z]!==w))for(;z--&&f.a.A(D,O[z])==-1;);}var L=f.a.g.Z(),P={1:!0,8:!0,9:!0},Y={1:!0,9:!0};return{za:function(O,k){if(typeof k!="function")throw Error("Callback must be a function");g(O,!0).push(k)},yb:function(O,k){var D=g(O,!1);D&&(f.a.Pa(D,k),D.length==0&&f.a.g.set(O,L,e))},oa:function(O){return f.u.G(function(){P[O.nodeType]&&(C(O),Y[O.nodeType]&&R(O.getElementsByTagName("*")))}),O},removeNode:function(O){f.oa(O),O.parentNode&&O.parentNode.removeChild(O)},cleanExternalData:function(O){o&&typeof o.cleanData=="function"&&o.cleanData([O])}}},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,"",""],C=[1,"<table>","</table>"],R=[3,"<table><tbody><tr>","</tr></tbody></table>"],L=[1,"<select multiple='multiple'>","</select>"],P={thead:C,tbody:C,tfoot:C,tr:[2,"<table><tbody>","</tbody></table>"],td:R,th:R,option:L,optgroup:L},Y=8>=f.a.W;f.a.ua=function(O,k){var D;if(o){if(o.parseHTML)D=o.parseHTML(O,k)||[];else if((D=o.clean([O],k))&&D[0]){for(var w=D[0];w.parentNode&&w.parentNode.nodeType!==11;)w=w.parentNode;w.parentNode&&w.parentNode.removeChild(w)}}else{(D=k)||(D=n);var w=D.parentWindow||D.defaultView||t,z=f.a.Db(O).toLowerCase(),J=D.createElement("div"),ee;for(ee=(z=z.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&P[z[1]]||g,z=ee[0],ee="ignored<div>"+ee[1]+O+ee[2]+"</div>",typeof w.innerShiv=="function"?J.appendChild(w.innerShiv(ee)):(Y&&D.body.appendChild(J),J.innerHTML=ee,Y&&J.parentNode.removeChild(J));z--;)J=J.lastChild;D=f.a.la(J.lastChild.childNodes)}return D},f.a.Md=function(O,k){var D=f.a.ua(O,k);return D.length&&D[0].parentElement||f.a.Yb(D)},f.a.fc=function(O,k){if(f.a.Tb(O),k=f.a.f(k),k!==null&&k!==e)if(typeof k!="string"&&(k=k.toString()),o)o(O).html(k);else for(var D=f.a.ua(k,O.ownerDocument),w=0;w<D.length;w++)O.appendChild(D[w])}})(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=(function(){function g(R,L){if(R){if(R.nodeType==8){var P=f.aa.Uc(R.nodeValue);P!=null&&L.push({ud:R,Kd:P})}else if(R.nodeType==1)for(var P=0,Y=R.childNodes,O=Y.length;P<O;P++)g(Y[P],L)}}var C={};return{Xb:function(R){if(typeof R!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var L=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return C[L]=R,"<!--[ko_memo:"+L+"]-->"},bd:function(R,L){var P=C[R];if(P===e)throw Error("Couldn't find any memo with ID "+R+". Perhaps it's already been unmemoized.");try{return P.apply(null,L||[]),!0}finally{delete C[R]}},cd:function(R,L){var P=[];g(R,P);for(var Y=0,O=P.length;Y<O;Y++){var k=P[Y].ud,D=[k];L&&f.a.Nb(D,L),f.aa.bd(P[Y].Kd,D),k.nodeValue="",k.parentNode&&k.parentNode.removeChild(k)}},Uc:function(R){return(R=R.match(/^\[ko_memo\:(.*?)\]$/))?R[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(P){for(var k=P,D=0,w;O<P;)if(w=L[O++]){if(O>k){if(5e3<=++D){O=P,f.a.Gc(Error("'Too much recursion' after processing "+D+" task groups."));break}k=P}try{w()}catch(z){f.a.Gc(z)}}}}function C(){g(),O=P=L.length=0}var R,L=[],P=0,Y=1,O=0;return t.MutationObserver?R=(function(k){var D=n.createElement("div");return new MutationObserver(k).observe(D,{attributes:!0}),function(){D.classList.toggle("foo")}})(C):R=n&&"onreadystatechange"in n.createElement("script")?function(k){var D=n.createElement("script");D.onreadystatechange=function(){D.onreadystatechange=null,n.documentElement.removeChild(D),D=null,k()},n.documentElement.appendChild(D)}:function(k){setTimeout(k,0)},{scheduler:R,zb:function(k){return P||f.na.scheduler(C),L[P++]=k,Y++},cancel:function(k){k=k-(Y-P),k>=O&&k<P&&(L[k]=null)},resetForTesting:function(){var k=P-O;return O=P=L.length=0,k},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,C){g.throttleEvaluation=C;var R=null;return f.$({read:g,write:function(L){clearTimeout(R),R=f.a.setTimeout(function(){g(L)},C)}})},rateLimit:function(g,C){var R,L,P;typeof C=="number"?R=C:(R=C.timeout,L=C.method),g.Hb=!1,P=typeof L=="function"?L:L=="notifyWhenChangesStop"?u:d,g.ub(function(Y){return P(Y,R,C)})},deferred:function(g,C){if(C!==!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(R){var L,P=!1;return function(){if(!P){f.na.cancel(L),L=f.na.zb(R);try{P=!0,g.notifySubscribers(e,"dirty")}finally{P=!1}}}}))},notify:function(g,C){g.equalityComparer=C=="always"?null:c}};var y={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(g,C,R){this.da=g,this.lc=C,this.mc=R,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,_),_.qb(this)};var _={qb:function(g){g.U={change:[]},g.sc=1},subscribe:function(g,C,R){var L=this;R=R||"change";var P=new f.ic(L,C?g.bind(C):g,function(){f.a.Pa(L.U[R],P),L.hb&&L.hb(R)});return L.Qa&&L.Qa(R),L.U[R]||(L.U[R]=[]),L.U[R].push(P),P},notifySubscribers:function(g,C){if(C=C||"change",C==="change"&&this.Gb(),this.Wa(C)){var R=C==="change"&&this.ed||this.U[C].slice(0);try{f.u.xc();for(var L=0,P;P=R[L];++L)P.Ib||P.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 C=this,R=f.O(C),L,P,Y,O,k;C.gb||(C.gb=C.notifySubscribers,C.notifySubscribers=h);var D=g(function(){C.Ja=!1,R&&O===C&&(O=C.nc?C.nc():C());var w=P||k&&C.sb(Y,O);k=P=L=!1,w&&C.gb(Y=O)});C.qc=function(w,z){z&&C.Ja||(k=!z),C.ed=C.U.change.slice(0),C.Ja=L=!0,O=w,D()},C.pc=function(w){L||(Y=w,C.gb(w,"beforeChange"))},C.rc=function(){k=!0},C.gd=function(){C.sb(Y,C.v(!0))&&(P=!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 C=0;return f.a.P(this.U,function(R,L){R!=="dirty"&&(C+=L.length)}),C},sb:function(g,C){return!this.equalityComparer||!this.equalityComparer(g,C)},toString:function(){return"[object Object]"},extend:function(g){var C=this;return g&&f.a.P(g,function(R,L){var P=f.Ta[R];typeof P=="function"&&(C=P(C,L)||C)}),C}};f.L(_,"init",_.qb),f.L(_,"subscribe",_.subscribe),f.L(_,"extend",_.extend),f.L(_,"getSubscriptionsCount",_.Bd),f.a.Ba&&f.a.setPrototypeOf(_,Function.prototype),f.T.fn=_,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(Y){R.push(L),L=Y}function C(){L=R.pop()}var R=[],L,P=0;return{xc:g,end:C,cc:function(Y){if(L){if(!f.Qc(Y))throw Error("Only subscribable things can act as dependencies");L.od.call(L.pd,Y,Y.fd||(Y.fd=++P))}},G:function(Y,O,k){try{return g(),Y.apply(O,k||[])}finally{C()}},qa:function(){if(L)return L.o.qa()},Va:function(){if(L)return L.o.Va()},Ya:function(){if(L)return L.Ya},o:function(){if(L)return L.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 S=f.a.Da("_latestValue");f.ta=function(g){function C(){return 0<arguments.length?(C.sb(C[S],arguments[0])&&(C.ya(),C[S]=arguments[0],C.xa()),this):(f.u.cc(C),C[S])}return C[S]=g,f.a.Ba||f.a.extend(C,f.T.fn),f.T.fn.qb(C),f.a.Ab(C,A),f.options.deferUpdates&&f.Ta.deferred(C,!0),C};var A={equalityComparer:c,v:function(){return this[S]},xa:function(){this.notifySubscribers(this[S],"spectate"),this.notifySubscribers(this[S])},ya:function(){this.notifySubscribers(this[S],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(A,f.T.fn);var Z=f.ta.Ma="__ko_proto__";A[Z]=f.ta,f.O=function(g){if((g=typeof g=="function"&&g[Z])&&g!==A[Z]&&g!==f.o.fn[Z])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[Z]===A[Z]||g[Z]===f.o.fn[Z]&&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",A),f.L(A,"peek",A.v),f.L(A,"valueHasMutated",A.xa),f.L(A,"valueWillMutate",A.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 C=this.v(),R=[],L=typeof g!="function"||f.O(g)?function(O){return O===g}:g,P=0;P<C.length;P++){var Y=C[P];if(L(Y)){if(R.length===0&&this.ya(),C[P]!==Y)throw Error("Array modified during remove; cannot remove item");R.push(Y),C.splice(P,1),P--}}return R.length&&this.xa(),R},removeAll:function(g){if(g===e){var C=this.v(),R=C.slice(0);return this.ya(),C.splice(0,C.length),this.xa(),R}return g?this.remove(function(L){return 0<=f.a.A(g,L)}):[]},destroy:function(g){var C=this.v(),R=typeof g!="function"||f.O(g)?function(Y){return Y===g}:g;this.ya();for(var L=C.length-1;0<=L;L--){var P=C[L];R(P)&&(P._destroy=!0)}this.xa()},destroyAll:function(g){return g===e?this.destroy(function(){return!0}):g?this.destroy(function(C){return 0<=f.a.A(g,C)}):[]},indexOf:function(g){var C=this();return f.a.A(C,g)},replace:function(g,C){var R=this.indexOf(g);0<=R&&(this.ya(),this.v()[R]=C,this.xa())},sorted:function(g){var C=this().slice(0);return g?C.sort(g):C.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 C=this.v();this.ya(),this.zc(C,g,arguments);var R=C[g].apply(C,arguments);return this.xa(),R===C?this:R}}),f.a.D(["slice"],function(g){f.Ha.fn[g]=function(){var C=this();return C[g].apply(C,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,C){function R(){function J(){if(k){var ee=[].concat(g.v()||[]),H;g.Wa("arrayChange")&&((!P||1<k)&&(P=f.a.Pb(D,ee,g.Ob)),H=P),D=ee,P=null,k=0,H&&H.length&&g.notifySubscribers(H,"arrayChange")}}L?J():(L=!0,O=g.subscribe(function(){++k},null,"spectate"),D=[].concat(g.v()||[]),P=null,Y=g.subscribe(J))}if(g.Ob={},C&&typeof C=="object"&&f.a.extend(g.Ob,C),g.Ob.sparse=!0,!g.zc){var L=!1,P=null,Y,O,k=0,D,w=g.Qa,z=g.hb;g.Qa=function(J){w&&w.call(g,J),J==="arrayChange"&&R()},g.hb=function(J){z&&z.call(g,J),J!=="arrayChange"||g.Wa("arrayChange")||(Y&&Y.s(),O&&O.s(),O=Y=null,L=!1,D=e)},g.zc=function(J,ee,H){function te(Ve,we,ke){return $[$.length]={status:Ve,value:we,index:ke}}if(L&&!k){var $=[],pe=J.length,xe=H.length,le=0;switch(ee){case"push":le=pe;case"unshift":for(ee=0;ee<xe;ee++)te("added",H[ee],le+ee);break;case"pop":le=pe-1;case"shift":pe&&te("deleted",J[le],le);break;case"splice":ee=Math.min(Math.max(0,0>H[0]?pe+H[0]:H[0]),pe);for(var pe=xe===1?pe:Math.min(ee+(H[1]||0),pe),xe=ee+xe-2,le=Math.max(pe,xe),Te=[],Se=[],Ee=2;ee<le;++ee,++Ee)ee<pe&&Se.push(te("deleted",J[ee],ee)),ee<xe&&Te.push(te("added",H[Ee],ee));f.a.Kc(Se,Te);break;default:return}P=$}}}};var V=f.a.Da("_state");f.o=f.$=function(g,C,R){function L(){if(0<arguments.length){if(typeof P=="function")P.apply(Y.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 Y.ra||f.u.cc(L),(Y.ka||Y.J&&L.Xa())&&L.ha(),Y.X}if(typeof g=="object"?R=g:(R=R||{},g&&(R.read=g)),typeof R.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var P=R.write,Y={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:R.read,nb:C||R.owner,l:R.disposeWhenNodeIsRemoved||R.l||null,Sa:R.disposeWhen||R.Sa,Rb:null,I:{},V:0,Ic:null};return L[V]=Y,L.Nc=typeof P=="function",f.a.Ba||f.a.extend(L,f.T.fn),f.T.fn.qb(L),f.a.Ab(L,E),R.pure?(Y.wb=!0,Y.J=!0,f.a.extend(L,G)):R.deferEvaluation&&f.a.extend(L,v),f.options.deferUpdates&&f.Ta.deferred(L,!0),Y.l&&(Y.jc=!0,Y.l.nodeType||(Y.l=null)),Y.J||R.deferEvaluation||L.ha(),Y.l&&L.ja()&&f.a.K.za(Y.l,Y.Rb=function(){L.s()}),L};var E={equalityComparer:c,qa:function(){return this[V].V},Va:function(){var g=[];return f.a.P(this[V].I,function(C,R){g[R.Ka]=R.da}),g},Vb:function(g){if(!this[V].V)return!1;var C=this.Va();return f.a.A(C,g)!==-1?!0:!!f.a.Lb(C,function(R){return R.Vb&&R.Vb(g)})},uc:function(g,C,R){if(this[V].wb&&C===this)throw Error("A 'pure' computed must not be called recursively");this[V].I[g]=R,R.Ka=this[V].V++,R.La=C.ob()},Xa:function(){var g,C,R=this[V].I;for(g in R)if(Object.prototype.hasOwnProperty.call(R,g)&&(C=R[g],this.Ia&&C.da.Ja||C.da.Dd(C.La)))return!0},Jd:function(){this.Ia&&!this[V].rb&&this.Ia(!1)},ja:function(){var g=this[V];return g.ka||0<g.V},Rd:function(){this.Ja?this[V].ka&&(this[V].sa=!0):this.Hc()},$c:function(g){if(g.Hb){var C=g.subscribe(this.Jd,this,"dirty"),R=g.subscribe(this.Rd,this);return{da:g,s:function(){C.s(),R.s()}}}return g.subscribe(this.Hc,this)},Hc:function(){var g=this,C=g.throttleEvaluation;C&&0<=C?(clearTimeout(this[V].Ic),this[V].Ic=f.a.setTimeout(function(){g.ha(!0)},C)):g.Ia?g.Ia(!0):g.ha(!0)},ha:function(g){var C=this[V],R=C.Sa,L=!1;if(!C.rb&&!C.ra){if(C.l&&!f.a.Sb(C.l)||R&&R()){if(!C.jc){this.s();return}}else C.jc=!1;C.rb=!0;try{L=this.zd(g)}finally{C.rb=!1}return L}},zd:function(g){var C=this[V],L=!1,R=C.wb?e:!C.V,L={qd:this,mb:C.I,Qb:C.V};f.u.xc({pd:L,od:b,o:this,Ya:R}),C.I={},C.V=0;var P=this.yd(C,L);return C.V?L=this.sb(C.X,P):(this.s(),L=!0),L&&(C.J?this.Gb():this.notifySubscribers(C.X,"beforeChange"),C.X=P,this.notifySubscribers(C.X,"spectate"),!C.J&&g&&this.notifySubscribers(C.X),this.rc&&this.rc()),R&&this.notifySubscribers(C.X,"awake"),L},yd:function(g,C){try{var R=g.Wc;return g.nb?R.call(g.nb):R()}finally{f.u.end(),C.Qb&&!g.J&&f.a.P(C.mb,p),g.sa=g.ka=!1}},v:function(g){var C=this[V];return(C.ka&&(g||!C.V)||C.J&&this.Xa())&&this.ha(),C.X},ub:function(g){f.T.fn.ub.call(this,g),this.nc=function(){return this[V].J||(this[V].sa?this.ha():this[V].ka=!1),this[V].X},this.Ia=function(C){this.pc(this[V].X),this[V].ka=!0,C&&(this[V].sa=!0),this.qc(this,!C)}},s:function(){var g=this[V];!g.J&&g.I&&f.a.P(g.I,function(C,R){R.s&&R.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)}},G={Qa:function(g){var C=this,R=C[V];if(!R.ra&&R.J&&g=="change"){if(R.J=!1,R.sa||C.Xa())R.I=null,R.V=0,C.ha()&&C.Gb();else{var L=[];f.a.P(R.I,function(P,Y){L[Y.Ka]=P}),f.a.D(L,function(P,Y){var O=R.I[P],k=C.$c(O.da);k.Ka=Y,k.La=O.La,R.I[P]=k}),C.Xa()&&C.ha()&&C.Gb()}R.ra||C.notifySubscribers(R.X,"awake")}},hb:function(g){var C=this[V];C.ra||g!="change"||this.Wa("change")||(f.a.P(C.I,function(R,L){L.s&&(C.I[R]={da:L.da,Ka:L.Ka,La:L.La},L.s())}),C.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var g=this[V];return g.J&&(g.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},v={Qa:function(g){g!="change"&&g!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(E,f.T.fn);var I=f.ta.Ma;E[I]=f.o,f.Oc=function(g){return typeof g=="function"&&g[I]===E[I]},f.Fd=function(g){return f.Oc(g)&&g[V]&&g[V].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",E),f.L(E,"peek",E.v),f.L(E,"dispose",E.s),f.L(E,"isActive",E.ja),f.L(E,"getDependenciesCount",E.qa),f.L(E,"getDependencies",E.Va),f.xb=function(g,C){return typeof g=="function"?f.o(g,C,{pure:!0}):(g=f.a.extend({},g),g.pure=!0,f.o(g,C))},f.b("pureComputed",f.xb),(function(){function g(L,P,Y){if(Y=Y||new R,L=P(L),typeof L!="object"||L===null||L===e||L instanceof RegExp||L instanceof Date||L instanceof String||L instanceof Number||L instanceof Boolean)return L;var O=L instanceof Array?[]:{};return Y.save(L,O),C(L,function(k){var D=P(L[k]);switch(typeof D){case"boolean":case"number":case"string":case"function":O[k]=D;break;case"object":case"undefined":var w=Y.get(D);O[k]=w!==e?w:g(D,P,Y)}}),O}function C(L,P){if(L instanceof Array){for(var Y=0;Y<L.length;Y++)P(Y);typeof L.toJSON=="function"&&P("toJSON")}else for(Y in L)P(Y)}function R(){this.keys=[],this.values=[]}f.ad=function(L){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return g(L,function(P){for(var Y=0;f.O(P)&&10>Y;Y++)P=P();return P})},f.toJSON=function(L,P,Y){return L=f.ad(L),f.a.hc(L,P,Y)},R.prototype={constructor:R,save:function(L,P){var Y=f.a.A(this.keys,L);0<=Y?this.values[Y]=P:(this.keys.push(L),this.values.push(P))},get:function(L){return L=f.a.A(this.keys,L),0<=L?this.values[L]:e}}})(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(g,C,R){function L(P){var Y=f.xb(g,R).extend({ma:"always"}),O=Y.subscribe(function(k){k&&(O.s(),P(k))});return Y.notifySubscribers(Y.v()),O}return typeof Promise!="function"||C?L(C.bind(R)):new Promise(L)},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,C,R){switch(f.a.R(g)){case"option":typeof C=="string"?(f.a.g.set(g,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in g&&delete g.__ko__hasDomDataOptionValue__,g.value=C):(f.a.g.set(g,f.c.options.$b,C),g.__ko__hasDomDataOptionValue__=!0,g.value=typeof C=="number"?C:"");break;case"select":(C===""||C===null)&&(C=e);for(var L=-1,P=0,Y=g.options.length,O;P<Y;++P)if(O=f.w.M(g.options[P]),O==C||O===""&&C===e){L=P;break}(R||0<=L||C===e&&1<g.size)&&(g.selectedIndex=L,f.a.W===6&&f.a.setTimeout(function(){g.selectedIndex=L},0));break;default:(C===null||C===e)&&(C=""),g.value=C}}}})(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=(function(){function g(k){k=f.a.Db(k),k.charCodeAt(0)===123&&(k=k.slice(1,-1)),k+=` ,`;var D=[],w=k.match(L),z,J=[],ee=0;if(1<w.length){for(var H=0,te;te=w[H];++H){var $=te.charCodeAt(0);if($===44){if(0>=ee){D.push(z&&J.length?{key:z,value:J.join("")}:{unknown:z||J.join("")}),z=ee=0,J=[];continue}}else if($===58){if(!ee&&!z&&J.length===1){z=J.pop();continue}}else{if($===47&&1<te.length&&(te.charCodeAt(1)===47||te.charCodeAt(1)===42))continue;$===47&&H&&1<te.length?($=w[H-1].match(P))&&!Y[$[0]]&&(k=k.substr(k.indexOf(te)+1),w=k.match(L),H=-1,te="/"):$===40||$===123||$===91?++ee:$===41||$===125||$===93?--ee:z||J.length||$!==34&&$!==39||(te=te.slice(1,-1))}J.push(te)}if(0<ee)throw Error("Unbalanced parentheses, braces, or brackets")}return D}var C=["true","false","null","undefined"],R=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,L=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.* |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),P=/[\])"'A-Za-z0-9_$]+$/,Y={in:1,return:1,typeof:1},O={};return{Ra:[],wa:O,ac:g,vb:function(k,D){function w($,pe){var xe;if(!H){var le=f.getBindingHandler($);if(le&&le.preprocess&&!(pe=le.preprocess(pe,$,w)))return;(le=O[$])&&(xe=pe,0<=f.a.A(C,xe)?xe=!1:(le=xe.match(R),xe=le===null?!1:le[1]?"Object("+le[1]+")"+le[2]:xe),le=xe),le&&J.push("'"+(typeof O[$]=="string"?O[$]:$)+"':function(_z){"+xe+"=_z}")}ee&&(pe="function(){return "+pe+" }"),z.push("'"+$+"':"+pe)}D=D||{};var z=[],J=[],ee=D.valueAccessors,H=D.bindingParams,te=typeof k=="string"?g(k):k;return f.a.D(te,function($){w($.key||$.unknown,$.value)}),J.length&&w("_ko_property_writers","{"+J.join(",")+" }"),z.join(",")},Id:function(k,D){for(var w=0;w<k.length;w++)if(k[w].key==D)return!0;return!1},eb:function(k,D,w,z,J){k&&f.O(k)?!f.Za(k)||J&&k.v()===z||k(z):(k=D.get("_ko_property_writers"))&&k[w]&&k[w](z)}}})(),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(w){return w.nodeType==8&&Y.test(P?w.text:w.nodeValue)}function C(w){return w.nodeType==8&&O.test(P?w.text:w.nodeValue)}function R(w,z){for(var J=w,ee=1,H=[];J=J.nextSibling;){if(C(J)&&(f.a.g.set(J,D,!0),ee--,ee===0))return H;H.push(J),g(J)&&ee++}if(!z)throw Error("Cannot find closing comment tag to match: "+w.nodeValue);return null}function L(w,z){var J=R(w,z);return J?0<J.length?J[J.length-1].nextSibling:w.nextSibling:null}var P=n&&n.createComment("test").text==="<!--test-->",Y=P?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,O=P?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,k={ul:!0,ol:!0},D="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(w){return g(w)?R(w):w.childNodes},Ea:function(w){if(g(w)){w=f.h.childNodes(w);for(var z=0,J=w.length;z<J;z++)f.removeNode(w[z])}else f.a.Tb(w)},va:function(w,z){if(g(w)){f.h.Ea(w);for(var J=w.nextSibling,ee=0,H=z.length;ee<H;ee++)J.parentNode.insertBefore(z[ee],J)}else f.a.va(w,z)},Vc:function(w,z){var J;g(w)?(J=w.nextSibling,w=w.parentNode):J=w.firstChild,J?z!==J&&w.insertBefore(z,J):w.appendChild(z)},Wb:function(w,z,J){J?(J=J.nextSibling,g(w)&&(w=w.parentNode),J?z!==J&&w.insertBefore(z,J):w.appendChild(z)):f.h.Vc(w,z)},firstChild:function(w){if(g(w))return!w.nextSibling||C(w.nextSibling)?null:w.nextSibling;if(w.firstChild&&C(w.firstChild))throw Error("Found invalid end comment, as the first child of "+w);return w.firstChild},nextSibling:function(w){if(g(w)&&(w=L(w)),w.nextSibling&&C(w.nextSibling)){var z=w.nextSibling;if(C(z)&&!f.a.g.get(z,D))throw Error("Found end comment without a matching opening comment, as child of "+w);return null}return w.nextSibling},Cd:g,Vd:function(w){return(w=(P?w.text:w.nodeValue).match(Y))?w[1]:null},Sc:function(w){if(k[f.a.R(w)]){var z=w.firstChild;if(z)do if(z.nodeType===1){var J;J=z.firstChild;var ee=null;if(J)do if(ee)ee.push(J);else if(g(J)){var H=L(J,!0);H?J=H:ee=[J]}else C(J)&&(ee=[J]);while(J=J.nextSibling);if(J=ee)for(ee=z.nextSibling,H=0;H<J.length;H++)ee?w.insertBefore(J[H],ee):w.appendChild(J[H])}while(z=z.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,C){var R=this.getBindingsString(g,C),R=R?this.parseBindingsString(R,C,g):null;return f.j.tc(R,g,C,!1)},getBindingAccessors:function(g,C){var R=this.getBindingsString(g,C),R=R?this.parseBindingsString(R,C,g,{valueAccessors:!0}):null;return f.j.tc(R,g,C,!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,C,R,L){try{var P=this.nd,Y=g+(L&&L.valueAccessors||""),O;if(!(O=P[Y])){var k,D="with($context){with($data||{}){return{"+f.m.vb(g,L)+"}}}";k=new Function("$context","$element",D),O=P[Y]=k}return O(C,R)}catch(w){throw w.message=`Unable to parse bindings. Bindings value: `+g+` Message: `+w.message,w}}}),f.ga.instance=new f.ga})(),f.b("bindingProvider",f.ga),(function(){function g(le){var Te=(le=f.a.g.get(le,xe))&&le.N;Te&&(le.N=null,Te.Tc())}function C(le,Te,Se){this.node=le,this.yc=Te,this.kb=[],this.H=!1,Te.N||f.a.K.za(le,g),Se&&Se.N&&(Se.N.kb.push(le),this.Kb=Se)}function R(le){return function(){return le}}function L(le){return le()}function P(le){return f.a.Ga(f.u.G(le),function(Te,Se){return function(){return le()[Se]}})}function Y(le,Te,Se){return typeof le=="function"?P(le.bind(null,Te,Se)):f.a.Ga(le,R)}function O(le,Te){return P(this.getBindings.bind(this,le,Te))}function k(le,Te){var Se=f.h.firstChild(Te);if(Se){var Ee,Ve=f.ga.instance,we=Ve.preprocessNode;if(we){for(;Ee=Se;)Se=f.h.nextSibling(Ee),we.call(Ve,Ee);Se=f.h.firstChild(Te)}for(;Ee=Se;)Se=f.h.nextSibling(Ee),D(le,Ee)}f.i.ma(Te,f.i.H)}function D(le,Te){var Se=le,Ee=Te.nodeType===1;Ee&&f.h.Sc(Te),(Ee||f.ga.instance.nodeHasBindings(Te))&&(Se=z(Te,null,le).bindingContextForDescendants),Se&&!$[f.a.R(Te)]&&k(Se,Te)}function w(le){var Te=[],Se={},Ee=[];return f.a.P(le,function Ve(we){if(!Se[we]){var ke=f.getBindingHandler(we);ke&&(ke.after&&(Ee.push(we),f.a.D(ke.after,function(nt){if(le[nt]){if(f.a.A(Ee,nt)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Ee.join(", "));Ve(nt)}}),Ee.length--),Te.push({key:we,Mc:ke})),Se[we]=!0}}),Te}function z(le,Te,Se){var Ee=f.a.g.Ub(le,xe,{}),Ve=Ee.hd;if(!Te){if(Ve)throw Error("You cannot apply bindings multiple times to the same element.");Ee.hd=!0}Ve||(Ee.context=Se),Ee.Zb||(Ee.Zb={});var we;if(Te&&typeof Te!="function")we=Te;else{var ke=f.ga.instance,nt=ke.getBindingAccessors||O,bt=f.$(function(){return(we=Te?Te(Se,le):nt.call(ke,le,Se))&&(Se[ee]&&Se[ee](),Se[te]&&Se[te]()),we},null,{l:le});we&&bt.ja()||(bt=null)}var Rt=Se,He;if(we){var mt=function(){return f.a.Ga(bt?bt():we,L)},it=bt?function(rt){return function(){return L(bt()[rt])}}:function(rt){return we[rt]};mt.get=function(rt){return we[rt]&&L(it(rt))},mt.has=function(rt){return rt in we},f.i.H in we&&f.i.subscribe(le,f.i.H,function(){var rt=(0,we[f.i.H])();if(rt){var jt=f.h.childNodes(le);jt.length&&rt(jt,f.Ec(jt[0]))}}),f.i.pa in we&&(Rt=f.i.Cb(le,Se),f.i.subscribe(le,f.i.pa,function(){var rt=(0,we[f.i.pa])();rt&&f.h.firstChild(le)&&rt(le)})),Ee=w(we),f.a.D(Ee,function(rt){var jt=rt.Mc.init,Cn=rt.Mc.update,ct=rt.key;if(le.nodeType===8&&!f.h.ea[ct])throw Error("The binding '"+ct+"' cannot be used with virtual elements");try{typeof jt=="function"&&f.u.G(function(){var Wt=jt(le,it(ct),mt,Rt.$data,Rt);if(Wt&&Wt.controlsDescendantBindings){if(He!==e)throw Error("Multiple bindings ("+He+" and "+ct+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");He=ct}}),typeof Cn=="function"&&f.$(function(){Cn(le,it(ct),mt,Rt.$data,Rt)},null,{l:le})}catch(Wt){throw Wt.message='Unable to process binding "'+ct+": "+we[ct]+`" Message: `+Wt.message,Wt}})}return Ee=He===e,{shouldBindDescendants:Ee,bindingContextForDescendants:Ee&&Rt}}function J(le,Te){return le&&le instanceof f.fa?le:new f.fa(le,e,e,Te)}var ee=f.a.Da("_subscribable"),H=f.a.Da("_ancestorBindingInfo"),te=f.a.Da("_dataDependency");f.c={};var $={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(le){return f.c[le]};var pe={};f.fa=function(le,Te,Se,Ee,Ve){function we(){var it=Rt?bt():bt,rt=f.a.f(it);return Te?(f.a.extend(ke,Te),H in Te&&(ke[H]=Te[H])):(ke.$parents=[],ke.$root=rt,ke.ko=f),ke[ee]=He,nt?rt=ke.$data:(ke.$rawData=it,ke.$data=rt),Se&&(ke[Se]=rt),Ee&&Ee(ke,Te,rt),Te&&Te[ee]&&!f.S.o().Vb(Te[ee])&&Te[ee](),mt&&(ke[te]=mt),ke.$data}var ke=this,nt=le===pe,bt=nt?e:le,Rt=typeof bt=="function"&&!f.O(bt),He,mt=Ve&&Ve.dataDependency;Ve&&Ve.exportDependencies?we():(He=f.xb(we),He.v(),He.ja()?He.equalityComparer=null:ke[ee]=e)},f.fa.prototype.createChildContext=function(le,Te,Se,Ee){if(!Ee&&Te&&typeof Te=="object"&&(Ee=Te,Te=Ee.as,Se=Ee.extend),Te&&Ee&&Ee.noChildContext){var Ve=typeof le=="function"&&!f.O(le);return new f.fa(pe,this,null,function(we){Se&&Se(we),we[Te]=Ve?le():le},Ee)}return new f.fa(le,this,Te,function(we,ke){we.$parentContext=ke,we.$parent=ke.$data,we.$parents=(ke.$parents||[]).slice(0),we.$parents.unshift(we.$parent),Se&&Se(we)},Ee)},f.fa.prototype.extend=function(le,Te){return new f.fa(pe,this,null,function(Se){f.a.extend(Se,typeof le=="function"?le(Se):le)},Te)};var xe=f.a.g.Z();C.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},C.prototype.sd=function(le){f.a.Pa(this.kb,le),!this.kb.length&&this.H&&this.Cc()},C.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(le,Te,Se,Ee,Ve){var we=f.a.g.Ub(le,xe,{});return we.Fa||(we.Fa=new f.T),Ve&&Ve.notifyImmediately&&we.Zb[Te]&&f.u.G(Se,Ee,[le]),we.Fa.subscribe(Se,Ee,Te)},ma:function(le,Te){var Se=f.a.g.get(le,xe);if(Se&&(Se.Zb[Te]=!0,Se.Fa&&Se.Fa.notifySubscribers(le,Te),Te==f.i.H)){if(Se.N)Se.N.Cc();else if(Se.N===e&&Se.Fa&&Se.Fa.Wa(f.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(le,Te){var Se=f.a.g.Ub(le,xe,{});return Se.N||(Se.N=new C(le,Se,Te[H])),Te[H]==Se?Te:Te.extend(function(Ee){Ee[H]=Se})}},f.Td=function(le){return(le=f.a.g.get(le,xe))&&le.context},f.ib=function(le,Te,Se){return le.nodeType===1&&f.h.Sc(le),z(le,Te,J(Se))},f.ld=function(le,Te,Se){return Se=J(Se),f.ib(le,Y(Te,Se,le),Se)},f.Oa=function(le,Te){Te.nodeType!==1&&Te.nodeType!==8||k(J(le),Te)},f.vc=function(le,Te,Se){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(Te=n.body,!Te)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!Te||Te.nodeType!==1&&Te.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");D(J(le,Se),Te)},f.Dc=function(le){return!le||le.nodeType!==1&&le.nodeType!==8?e:f.Td(le)},f.Ec=function(le){return(le=f.Dc(le))?le.$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 C(O,k){var D=Object.prototype.hasOwnProperty.call(P,O)?P[O]:g,w;D?D.subscribe(k):(D=P[O]=new f.T,D.subscribe(k),R(O,function(z,J){var ee=!(!J||!J.synchronous);Y[O]={definition:z,Gd:ee},delete P[O],w||ee?D.notifySubscribers(z):f.na.zb(function(){D.notifySubscribers(z)})}),w=!0)}function R(O,k){L("getConfig",[O],function(D){D?L("loadComponent",[O,D],function(w){k(w,D)}):k(null,null)})}function L(O,k,D,w){w||(w=f.j.loaders.slice(0));var z=w.shift();if(z){var J=z[O];if(J){var ee=!1;if(J.apply(z,k.concat(function(H){ee?D(null):H!==null?D(H):L(O,k,D,w)}))!==g&&(ee=!0,!z.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else L(O,k,D,w)}else D(null)}var P={},Y={};f.j={get:function(O,k){var D=Object.prototype.hasOwnProperty.call(Y,O)?Y[O]:g;D?D.Gd?f.u.G(function(){k(D.definition)}):f.na.zb(function(){k(D.definition)}):C(O,k)},Bc:function(O){delete Y[O]},oc:L},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,w,z,J){function ee(){--te===0&&J(H)}var H={},te=2,$=z.template;z=z.viewModel,$?P(w,$,function(pe){f.j.oc("loadTemplate",[D,pe],function(xe){H.template=xe,ee()})}):ee(),z?P(w,z,function(pe){f.j.oc("loadViewModel",[D,pe],function(xe){H[k]=xe,ee()})}):ee()}function C(D,w,z){if(typeof w=="function")z(function(ee){return new w(ee)});else if(typeof w[k]=="function")z(w[k]);else if("instance"in w){var J=w.instance;z(function(){return J})}else"viewModel"in w?C(D,w.viewModel,z):D("Unknown viewModel value: "+w)}function R(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(L(D.content))return f.a.Ca(D.content.childNodes)}return f.a.Ca(D.childNodes)}function L(D){return t.DocumentFragment?D instanceof DocumentFragment:D&&D.nodeType===11}function P(D,w,z){typeof w.require=="string"?a||t.require?(a||t.require)([w.require],function(J){J&&typeof J=="object"&&J.Xd&&J.default&&(J=J.default),z(J)}):D("Uses require, but no AMD loader is present"):z(w)}function Y(D){return function(w){throw Error("Component '"+D+"': "+w)}}var O={};f.j.register=function(D,w){if(!w)throw Error("Invalid configuration for "+D);if(f.j.tb(D))throw Error("Component "+D+" is already registered");O[D]=w},f.j.tb=function(D){return Object.prototype.hasOwnProperty.call(O,D)},f.j.unregister=function(D){delete O[D],f.j.Bc(D)},f.j.Fc={getConfig:function(D,w){w(f.j.tb(D)?O[D]:null)},loadComponent:function(D,w,z){var J=Y(D);P(J,w,function(ee){g(D,J,ee,z)})},loadTemplate:function(D,w,z){if(D=Y(D),typeof w=="string")z(f.a.ua(w));else if(w instanceof Array)z(w);else if(L(w))z(f.a.la(w.childNodes));else if(w.element)if(w=w.element,t.HTMLElement?w instanceof HTMLElement:w&&w.tagName&&w.nodeType===1)z(R(w));else if(typeof w=="string"){var J=n.getElementById(w);J?z(R(J)):D("Cannot find element with ID "+w)}else D("Unknown element type: "+w);else D("Unknown template value: "+w)},loadViewModel:function(D,w,z){C(Y(D),w,z)}};var k="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=O})(),(function(){function g(R,L){var P=R.getAttribute("params");if(P){var P=C.parseBindingsString(P,L,R,{valueAccessors:!0,bindingParams:!0}),P=f.a.Ga(P,function(k){return f.o(k,null,{l:R})}),Y=f.a.Ga(P,function(k){var D=k.v();return k.ja()?f.o({read:function(){return f.a.f(k())},write:f.Za(D)&&function(w){k()(w)},l:R}):D});return Object.prototype.hasOwnProperty.call(Y,"$raw")||(Y.$raw=P),Y}return{$raw:{}}}f.j.getComponentNameForNode=function(R){var L=f.a.R(R);if(f.j.tb(L)&&(L.indexOf("-")!=-1||""+R=="[object HTMLUnknownElement]"||8>=f.a.W&&R.tagName===L))return L},f.j.tc=function(R,L,P,Y){if(L.nodeType===1){var O=f.j.getComponentNameForNode(L);if(O){if(R=R||{},R.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var k={name:O,params:g(L,P)};R.component=Y?function(){return k}:k}}return R};var C=new f.ga;9>f.a.W&&(f.j.register=(function(R){return function(L){return R.apply(this,arguments)}})(f.j.register),n.createDocumentFragment=(function(R){return function(){var L=R(),P=f.j.dd,Y;for(Y in P);return L}})(n.createDocumentFragment))})(),(function(){function g(L,P,Y){if(P=P.template,!P)throw Error("Component '"+L+"' has no template");L=f.a.Ca(P),f.h.va(Y,L)}function C(L,P,Y){var O=L.createViewModel;return O?O.call(L,P,Y):P}var R=0;f.c.component={init:function(L,P,Y,O,k){function D(){var H=w&&w.dispose;typeof H=="function"&&H.call(w),J&&J.s(),z=w=J=null}var w,z,J,ee=f.a.la(f.h.childNodes(L));return f.h.Ea(L),f.a.K.za(L,D),f.o(function(){var H=f.a.f(P()),te,$;if(typeof H=="string"?te=H:(te=f.a.f(H.name),$=f.a.f(H.params)),!te)throw Error("No component name specified");var pe=f.i.Cb(L,k),xe=z=++R;f.j.get(te,function(le){if(z===xe){if(D(),!le)throw Error("Unknown component '"+te+"'");g(te,le,L);var Te=C(le,$,{element:L,templateNodes:ee});le=pe.createChildContext(Te,{extend:function(Se){Se.$component=Te,Se.$componentTemplateNodes=ee}}),Te&&Te.koDescendantsComplete&&(J=f.i.subscribe(L,f.i.pa,Te.koDescendantsComplete,Te)),w=Te,f.Oa(le,L)}})},null,{l:L}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0})();var X={class:"className",for:"htmlFor"};f.c.attr={update:function(g,C){var R=f.a.f(C())||{};f.a.P(R,function(L,P){P=f.a.f(P);var Y=L.indexOf(":"),Y="lookupNamespaceURI"in g&&0<Y&&g.lookupNamespaceURI(L.substr(0,Y)),O=P===!1||P===null||P===e;O?Y?g.removeAttributeNS(Y,L):g.removeAttribute(L):P=P.toString(),8>=f.a.W&&L in X?(L=X[L],O?g.removeAttribute(L):g[L]=P):O||(Y?g.setAttributeNS(Y,L,P):g.setAttribute(L,P)),L==="name"&&f.a.Yc(g,O?"":P)})}},(function(){f.c.checked={after:["value","attr"],init:function(g,C,R){function L(){var H=g.checked,te=Y();if(!f.S.Ya()&&(H||!k&&!f.S.qa())){var $=f.u.G(C);if(w){var pe=z?$.v():$,xe=ee;ee=te,xe!==te?H&&(f.a.Na(pe,te,!0),f.a.Na(pe,xe,!1)):f.a.Na(pe,te,H),z&&f.Za($)&&$(pe)}else O&&(te===e?te=H:H||(te=e)),f.m.eb($,R,"checked",te,!0)}}function P(){var H=f.a.f(C()),te=Y();w?(g.checked=0<=f.a.A(H,te),ee=te):g.checked=O&&te===e?!!H:Y()===H}var Y=f.xb(function(){if(R.has("checkedValue"))return f.a.f(R.get("checkedValue"));if(J)return R.has("value")?f.a.f(R.get("value")):g.value}),O=g.type=="checkbox",k=g.type=="radio";if(O||k){var D=C(),w=O&&f.a.f(D)instanceof Array,z=!(w&&D.push&&D.splice),J=k||w,ee=w?Y():e;k&&!g.name&&f.c.uniqueName.init(g,function(){return!0}),f.o(L,null,{l:g}),f.a.B(g,"click",L),f.o(P,null,{l:g}),D=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(g,C){g.value=f.a.f(C())}}})(),f.c.class={update:function(g,C){var R=f.a.Db(f.a.f(C()));f.a.Eb(g,g.__ko__cssValue,!1),g.__ko__cssValue=R,f.a.Eb(g,R,!0)}},f.c.css={update:function(g,C){var R=f.a.f(C());R!==null&&typeof R=="object"?f.a.P(R,function(L,P){P=f.a.f(P),f.a.Eb(g,L,P)}):f.c.class.update(g,C)}},f.c.enable={update:function(g,C){var R=f.a.f(C());R&&g.disabled?g.removeAttribute("disabled"):R||g.disabled||(g.disabled=!0)}},f.c.disable={update:function(g,C){f.c.enable.update(g,function(){return!f.a.f(C())})}},f.c.event={init:function(g,C,R,L,P){var Y=C()||{};f.a.P(Y,function(O){typeof O=="string"&&f.a.B(g,O,function(k){var D,w=C()[O];if(w){try{var z=f.a.la(arguments);L=P.$data,z.unshift(L),D=w.apply(L,z)}finally{D!==!0&&(k.preventDefault?k.preventDefault():k.returnValue=!1)}R.get(O+"Bubble")===!1&&(k.cancelBubble=!0,k.stopPropagation&&k.stopPropagation())}})})}},f.c.foreach={Rc:function(g){return function(){var C=g(),R=f.a.bc(C);return!R||typeof R.length=="number"?{foreach:C,templateEngine:f.ba.Ma}:(f.a.f(C),{foreach:R.data,as:R.as,noChildContext:R.noChildContext,includeDestroyed:R.includeDestroyed,afterAdd:R.afterAdd,beforeRemove:R.beforeRemove,afterRender:R.afterRender,beforeMove:R.beforeMove,afterMove:R.afterMove,templateEngine:f.ba.Ma})}},init:function(g,C){return f.c.template.init(g,f.c.foreach.Rc(C))},update:function(g,C,R,L,P){return f.c.template.update(g,f.c.foreach.Rc(C),R,L,P)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(g,C,R){function L(O){g.__ko_hasfocusUpdating=!0;var k=g.ownerDocument;if("activeElement"in k){var D;try{D=k.activeElement}catch{D=k.body}O=D===g}k=C(),f.m.eb(k,R,"hasfocus",O,!0),g.__ko_hasfocusLastValue=O,g.__ko_hasfocusUpdating=!1}var P=L.bind(null,!0),Y=L.bind(null,!1);f.a.B(g,"focus",P),f.a.B(g,"focusin",P),f.a.B(g,"blur",Y),f.a.B(g,"focusout",Y),g.__ko_hasfocusLastValue=!1},update:function(g,C){var R=!!f.a.f(C());g.__ko_hasfocusUpdating||g.__ko_hasfocusLastValue===R||(R?g.focus():g.blur(),!R&&g.__ko_hasfocusLastValue&&g.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[g,R?"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,C){f.a.fc(g,C())}},(function(){function g(C,R,L){f.c[C]={init:function(P,Y,O,k,D){var w,z,J={},ee,H,te;if(R){k=O.get("as");var $=O.get("noChildContext");te=!(k&&$),J={as:k,noChildContext:$,exportDependencies:te}}return H=(ee=O.get("completeOn")=="render")||O.has(f.i.pa),f.o(function(){var pe=f.a.f(Y()),xe=!L!=!pe,le=!z,Te;(te||xe!==w)&&(H&&(D=f.i.Cb(P,D)),xe&&((!R||te)&&(J.dataDependency=f.S.o()),Te=R?D.createChildContext(typeof pe=="function"?pe:Y,J):f.S.qa()?D.extend(null,J):D),le&&f.S.qa()&&(z=f.a.Ca(f.h.childNodes(P),!0)),xe?(le||f.h.va(P,f.a.Ca(z)),f.Oa(Te,P)):(f.h.Ea(P),ee||f.i.ma(P,f.i.H)),w=xe)},null,{l:P}),{controlsDescendantBindings:!0}}},f.m.Ra[C]=!1,f.h.ea[C]=!0}g("if"),g("ifnot",!1,!0),g("with",!0)})(),f.c.let={init:function(g,C,R,L,P){return C=P.extend(C),f.Oa(C,g),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var N={};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,C,R){function L(){return f.a.jb(g.options,function($){return $.selected})}function P($,pe,xe){var le=typeof pe;return le=="function"?pe($):le=="string"?$[pe]:xe}function Y($,pe){if(H&&w)f.i.ma(g,f.i.H);else if(ee.length){var xe=0<=f.a.A(ee,f.w.M(pe[0]));f.a.Zc(pe[0],xe),H&&!xe&&f.u.G(f.a.Fb,null,[g,"change"])}}var O=g.multiple,k=g.length!=0&&O?g.scrollTop:null,D=f.a.f(C()),w=R.get("valueAllowUnset")&&R.has("value"),z=R.get("optionsIncludeDestroyed");C={};var J,ee=[];w||(O?ee=f.a.Mb(L(),f.w.M):0<=g.selectedIndex&&ee.push(f.w.M(g.options[g.selectedIndex]))),D&&(typeof D.length>"u"&&(D=[D]),J=f.a.jb(D,function($){return z||$===e||$===null||!f.a.f($._destroy)}),R.has("optionsCaption")&&(D=f.a.f(R.get("optionsCaption")),D!==null&&D!==e&&J.unshift(N)));var H=!1;if(C.beforeRemove=function($){g.removeChild($)},D=Y,R.has("optionsAfterRender")&&typeof R.get("optionsAfterRender")=="function"&&(D=function($,pe){Y(0,pe),f.u.G(R.get("optionsAfterRender"),null,[pe[0],$!==N?$:e])}),f.a.ec(g,J,function($,pe,xe){return xe.length&&(ee=!w&&xe[0].selected?[f.w.M(xe[0])]:[],H=!0),pe=g.ownerDocument.createElement("option"),$===N?(f.a.Bb(pe,R.get("optionsCaption")),f.w.cb(pe,e)):(xe=P($,R.get("optionsValue"),$),f.w.cb(pe,f.a.f(xe)),$=P($,R.get("optionsText"),xe),f.a.Bb(pe,$)),[pe]},C,D),!w){var te;O?te=ee.length&&L().length<ee.length:te=ee.length&&0<=g.selectedIndex?f.w.M(g.options[g.selectedIndex])!==ee[0]:ee.length||0<=g.selectedIndex,te&&f.u.G(f.a.Fb,null,[g,"change"])}(w||f.S.Ya())&&f.i.ma(g,f.i.H),f.a.wd(g),k&&20<Math.abs(k-g.scrollTop)&&(g.scrollTop=k)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(g,C,R){function L(){var O=C(),k=[];f.a.D(g.getElementsByTagName("option"),function(D){D.selected&&k.push(f.w.M(D))}),f.m.eb(O,R,"selectedOptions",k)}function P(){var O=f.a.f(C()),k=g.scrollTop;O&&typeof O.length=="number"&&f.a.D(g.getElementsByTagName("option"),function(D){var w=0<=f.a.A(O,f.w.M(D));D.selected!=w&&f.a.Zc(D,w)}),g.scrollTop=k}if(f.a.R(g)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var Y;f.i.subscribe(g,f.i.H,function(){Y?L():(f.a.B(g,"change",L),Y=f.o(P,null,{l:g}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(g,C){var R=f.a.f(C()||{});f.a.P(R,function(L,P){if(P=f.a.f(P),(P===null||P===e||P===!1)&&(P=""),o)o(g).css(L,P);else if(/^--/.test(L))g.style.setProperty(L,P);else{L=L.replace(/-(\w)/g,function(O,k){return k.toUpperCase()});var Y=g.style[L];g.style[L]=P,P===Y||g.style[L]!=Y||isNaN(P)||(g.style[L]=P+"px")}})}},f.c.submit={init:function(g,C,R,L,P){if(typeof C()!="function")throw Error("The value for a submit binding must be a function");f.a.B(g,"submit",function(Y){var O,k=C();try{O=k.call(P.$data,g)}finally{O!==!0&&(Y.preventDefault?Y.preventDefault():Y.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(g,C){f.a.Bb(g,C())}},f.h.ea.text=!0,(function(){if(t&&t.navigator){var g=function(J){if(J)return parseFloat(J[1])},C=t.navigator.userAgent,R,L,P,Y,O;(R=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(O=g(C.match(/Edge\/([^ ]+)$/)))||g(C.match(/Chrome\/([^ ]+)/))||(L=g(C.match(/Version\/([^ ]+) Safari/)))||(P=g(C.match(/Firefox\/([^ ]+)/)))||(Y=f.a.W||g(C.match(/MSIE ([^ ]+)/)))||(Y=g(C.match(/rv:([^ )]+)/)))}if(8<=Y&&10>Y)var k=f.a.g.Z(),D=f.a.g.Z(),w=function(J){var ee=this.activeElement;(ee=ee&&f.a.g.get(ee,D))&&ee(J)},z=function(J,ee){var H=J.ownerDocument;f.a.g.get(H,k)||(f.a.g.set(H,k,!0),f.a.B(H,"selectionchange",w)),f.a.g.set(J,D,ee)};f.c.textInput={init:function(J,ee,H){function te(we,ke){f.a.B(J,we,ke)}function $(){var we=f.a.f(ee());(we===null||we===e)&&(we=""),Se!==e&&we===Se?f.a.setTimeout($,4):J.value!==we&&(Ve=!0,J.value=we,Ve=!1,le=J.value)}function pe(){Te||(Se=J.value,Te=f.a.setTimeout(xe,4))}function xe(){clearTimeout(Te),Se=Te=e;var we=J.value;le!==we&&(le=we,f.m.eb(ee(),H,"textInput",we))}var le=J.value,Te,Se,Ee=f.a.W==9?pe:xe,Ve=!1;Y&&te("keypress",xe),11>Y&&te("propertychange",function(we){Ve||we.propertyName!=="value"||Ee(we)}),Y==8&&(te("keyup",xe),te("keydown",xe)),z&&(z(J,Ee),te("dragend",pe)),(!Y||9<=Y)&&te("input",Ee),5>L&&f.a.R(J)==="textarea"?(te("keydown",pe),te("paste",pe),te("cut",pe)):11>R?te("keydown",pe):4>P?(te("DOMAutoComplete",xe),te("dragdrop",xe),te("drop",xe)):O&&J.type==="number"&&te("keydown",pe),te("change",xe),te("blur",xe),f.o($,null,{l:J})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(J,ee,H){H("textInput",J)}}})(),f.c.uniqueName={init:function(g,C){if(C()){var R="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(g,R)}}},f.c.uniqueName.rd=0,f.c.using={init:function(g,C,R,L,P){var Y;return R.has("as")&&(Y={as:R.get("as"),noChildContext:R.get("noChildContext")}),C=P.createChildContext(C,Y),f.Oa(C,g),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(g,C,R){var L=f.a.R(g),P=L=="input";if(!P||g.type!="checkbox"&&g.type!="radio"){var Y=[],O=R.get("valueUpdate"),k=!1,D=null;O&&(typeof O=="string"?Y=[O]:Y=f.a.wc(O),f.a.Pa(Y,"change"));var w=function(){D=null,k=!1;var ee=C(),H=f.w.M(g);f.m.eb(ee,R,"value",H)};!f.a.W||!P||g.type!="text"||g.autocomplete=="off"||g.form&&g.form.autocomplete=="off"||f.a.A(Y,"propertychange")!=-1||(f.a.B(g,"propertychange",function(){k=!0}),f.a.B(g,"focus",function(){k=!1}),f.a.B(g,"blur",function(){k&&w()})),f.a.D(Y,function(ee){var H=w;f.a.Ud(ee,"after")&&(H=function(){D=f.w.M(g),f.a.setTimeout(w,0)},ee=ee.substring(5)),f.a.B(g,ee,H)});var z;if(z=P&&g.type=="file"?function(){var ee=f.a.f(C());ee===null||ee===e||ee===""?g.value="":f.u.G(w)}:function(){var ee=f.a.f(C()),H=f.w.M(g);D!==null&&ee===D?f.a.setTimeout(z,0):(ee!==H||H===e)&&(L==="select"?(H=R.get("valueAllowUnset"),f.w.cb(g,ee,H),H||ee===f.w.M(g)||f.u.G(w)):f.w.cb(g,ee))},L==="select"){var J;f.i.subscribe(g,f.i.H,function(){J?R.get("valueAllowUnset")?z():w():(f.a.B(g,"change",w),J=f.o(z,null,{l:g}))},null,{notifyImmediately:!0})}else f.a.B(g,"change",w),f.o(z,null,{l:g})}else f.ib(g,{checkedValue:C})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(g,C){var R=f.a.f(C()),L=g.style.display!="none";R&&!L?g.style.display="":!R&&L&&(g.style.display="none")}},f.c.hidden={update:function(g,C){f.c.visible.update(g,function(){return!f.a.f(C())})}},(function(g){f.c[g]={init:function(C,R,L,P,Y){return f.c.event.init.call(this,C,function(){var O={};return O[g]=R(),O},L,P,Y)}}})("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,C){if(typeof g=="string"){C=C||n;var R=C.getElementById(g);if(!R)throw Error("Cannot find template with ID "+g);return new f.C.F(R)}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,C,R,L){return g=this.makeTemplateSource(g,L),this.renderTemplateSource(g,C,R,L)},f.ca.prototype.isTemplateRewritten=function(g,C){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(g,C).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(g,C,R){g=this.makeTemplateSource(g,R),C=C(g.text()),g.text(C),g.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=(function(){function g(L,P,Y,O){L=f.m.ac(L);for(var k=f.m.Ra,D=0;D<L.length;D++){var w=L[D].key;if(Object.prototype.hasOwnProperty.call(k,w)){var z=k[w];if(typeof z=="function"){if(w=z(L[D].value))throw Error(w)}else if(!z)throw Error("This template engine does not support the '"+w+"' binding within its templates")}}return Y="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(L,{valueAccessors:!0})+" } })()},'"+Y.toLowerCase()+"')",O.createJavaScriptEvaluatorBlock(Y)+P}var C=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,R=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(L,P,Y){P.isTemplateRewritten(L,Y)||P.rewriteTemplate(L,function(O){return f.kc.Ld(O,P)},Y)},Ld:function(L,P){return L.replace(C,function(Y,O,k,D,w){return g(w,O,k,P)}).replace(R,function(Y,O){return g(O,"<!-- ko -->","#comment",P)})},md:function(L,P){return f.aa.Xb(function(Y,O){var k=Y.nextSibling;k&&k.nodeName.toLowerCase()===P&&f.ib(k,L,O)})}}})(),f.b("__tr_ambtns",f.kc.md),(function(){f.C={},f.C.F=function(R){if(this.F=R){var L=f.a.R(R);this.ab=L==="script"?1:L==="textarea"?2:L=="template"&&R.content&&R.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var R=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[R];var L=arguments[0];R==="innerHTML"?f.a.fc(this.F,L):this.F[R]=L};var g=f.a.g.Z()+"_";f.C.F.prototype.data=function(R){if(arguments.length===1)return f.a.g.get(this.F,g+R);f.a.g.set(this.F,g+R,arguments[1])};var C=f.a.g.Z();f.C.F.prototype.nodes=function(){var R=this.F;if(arguments.length==0){var L=f.a.g.get(R,C)||{},P=L.lb||(this.ab===3?R.content:this.ab===4?R:e);if(!P||L.jd){var Y=this.text();Y&&Y!==L.bb&&(P=f.a.Md(Y,R.ownerDocument),f.a.g.set(R,C,{lb:P,bb:Y,jd:!0}))}return P}L=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(R,C,{lb:L})},f.C.ia=function(R){this.F=R},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 R=f.a.g.get(this.F,C)||{};return R.bb===e&&R.lb&&(R.bb=R.lb.innerHTML),R.bb}f.a.g.set(this.F,C,{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,w,z){var J;for(w=f.h.nextSibling(w);D&&(J=D)!==w;)D=f.h.nextSibling(J),z(J,D)}function C(D,w){if(D.length){var z=D[0],J=D[D.length-1],ee=z.parentNode,H=f.ga.instance,te=H.preprocessNode;if(te){if(g(z,J,function($,pe){var xe=$.previousSibling,le=te.call(H,$);le&&($===z&&(z=le[0]||pe),$===J&&(J=le[le.length-1]||xe))}),D.length=0,!z)return;z===J?D.push(z):(D.push(z,J),f.a.Ua(D,ee))}g(z,J,function($){$.nodeType!==1&&$.nodeType!==8||f.vc(w,$)}),g(z,J,function($){$.nodeType!==1&&$.nodeType!==8||f.aa.cd($,[w])}),f.a.Ua(D,ee)}}function R(D){return D.nodeType?D:0<D.length?D[0]:null}function L(D,w,z,J,ee){ee=ee||{};var H=(D&&R(D)||z||{}).ownerDocument,te=ee.templateEngine||Y;if(f.kc.xd(z,te,H),z=te.renderTemplate(z,J,ee,H),typeof z.length!="number"||0<z.length&&typeof z[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(H=!1,w){case"replaceChildren":f.h.va(D,z),H=!0;break;case"replaceNode":f.a.Xc(D,z),H=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+w)}return H&&(C(z,J),ee.afterRender&&f.u.G(ee.afterRender,null,[z,J[ee.as||"$data"]]),w=="replaceChildren"&&f.i.ma(D,f.i.H)),z}function P(D,w,z){return f.O(D)?D():typeof D=="function"?D(w,z):D}var Y;f.gc=function(D){if(D!=e&&!(D instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");Y=D},f.dc=function(D,w,z,J,ee){if(z=z||{},(z.templateEngine||Y)==e)throw Error("Set a template engine before calling renderTemplate");if(ee=ee||"replaceChildren",J){var H=R(J);return f.$(function(){var $=w&&w instanceof f.fa?w:new f.fa(w,null,null,null,{exportDependencies:!0}),te=P(D,$.$data,$),$=L(J,ee,te,$,z);ee=="replaceNode"&&(J=$,H=R(J))},null,{Sa:function(){return!H||!f.a.Sb(H)},l:H&&ee=="replaceNode"?H.parentNode:H})}return f.aa.Xb(function(te){f.dc(D,w,z,te,"replaceNode")})},f.Qd=function(D,w,z,J,ee){function H(Se,Ee){f.u.G(f.a.ec,null,[J,Se,$,z,te,Ee]),f.i.ma(J,f.i.H)}function te(Se,Ee){C(Ee,pe),z.afterRender&&z.afterRender(Ee,Se),pe=null}function $(Se,Ee){pe=ee.createChildContext(Se,{as:xe,noChildContext:z.noChildContext,extend:function(we){we.$index=Ee,xe&&(we[xe+"Index"]=Ee)}});var Ve=P(D,Se,pe);return L(J,"ignoreTargetNode",Ve,pe,z)}var pe,xe=z.as,le=z.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!z.includeDestroyed;if(le||z.beforeRemove||!f.Pc(w))return f.$(function(){var Se=f.a.f(w)||[];typeof Se.length>"u"&&(Se=[Se]),le&&(Se=f.a.jb(Se,function(Ee){return Ee===e||Ee===null||!f.a.f(Ee._destroy)})),H(Se)},null,{l:J});H(w.v());var Te=w.subscribe(function(Se){H(w(),Se)},null,"arrayChange");return Te.l(J),Te};var O=f.a.g.Z(),k=f.a.g.Z();f.c.template={init:function(D,w){var z=f.a.f(w());if(typeof z=="string"||"name"in z)f.h.Ea(D);else if("nodes"in z){if(z=z.nodes||[],f.O(z))throw Error('The "nodes" option must be a plain, non-observable array.');var J=z[0]&&z[0].parentNode;J&&f.a.g.get(J,k)||(J=f.a.Yb(z),f.a.g.set(J,k,!0)),new f.C.ia(D).nodes(J)}else if(z=f.h.childNodes(D),0<z.length)J=f.a.Yb(z),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,w,z,J,ee){var H=w();w=f.a.f(H),z=!0,J=null,typeof w=="string"?w={}:(H="name"in w?w.name:D,"if"in w&&(z=f.a.f(w.if)),z&&"ifnot"in w&&(z=!f.a.f(w.ifnot)),z&&!H&&(z=!1)),"foreach"in w?J=f.Qd(H,z&&w.foreach||[],w,D,ee):z?(z=ee,"data"in w&&(z=ee.createChildContext(w.data,{as:w.as,noChildContext:w.noChildContext,exportDependencies:!0})),J=f.dc(H,z,w,D)):f.h.Ea(D),ee=J,(w=f.a.g.get(D,O))&&typeof w.s=="function"&&w.s(),f.a.g.set(D,O,!ee||ee.ja&&!ee.ja()?e:ee)}},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,C,R){if(g.length&&C.length){var L,P,Y,O,k;for(L=P=0;(!R||L<R)&&(O=g[P]);++P){for(Y=0;k=C[Y];++Y)if(O.value===k.value){O.moved=k.index,k.moved=O.index,C.splice(Y,1),L=Y=0;break}L+=Y}}},f.a.Pb=(function(){function g(C,R,L,P,Y){var O=Math.min,k=Math.max,D=[],w,z=C.length,J,ee=R.length,H=ee-z||1,te=z+ee+1,$,pe,xe;for(w=0;w<=z;w++)for(pe=$,D.push($=[]),xe=O(ee,w+H),J=k(0,w-1);J<=xe;J++)$[J]=J?w?C[w-1]===R[J-1]?pe[J-1]:O(pe[J]||te,$[J-1]||te)+1:J+1:w+1;for(O=[],k=[],H=[],w=z,J=ee;w||J;)ee=D[w][J]-1,J&&ee===D[w][J-1]?k.push(O[O.length]={status:L,value:R[--J],index:J}):w&&ee===D[w-1][J]?H.push(O[O.length]={status:P,value:C[--w],index:w}):(--J,--w,Y.sparse||O.push({status:"retained",value:R[J]}));return f.a.Kc(H,k,!Y.dontLimitMoves&&10*z),O.reverse()}return function(C,R,L){return L=typeof L=="boolean"?{dontLimitMoves:L}:L||{},C=C||[],R=R||[],C.length<R.length?g(C,R,"added","deleted",L):g(R,C,"deleted","added",L)}})(),f.b("utils.compareArrays",f.a.Pb),(function(){function g(L,P,Y,O,k){var D=[],w=f.$(function(){var z=P(Y,k,f.a.Ua(D,L))||[];0<D.length&&(f.a.Xc(D,z),O&&f.u.G(O,null,[Y,z,k])),D.length=0,f.a.Nb(D,z)},null,{l:L,Sa:function(){return!f.a.kd(D)}});return{Y:D,$:w.ja()?w:e}}var C=f.a.g.Z(),R=f.a.g.Z();f.a.ec=function(L,P,Y,O,k,D){function w(rt){Ve={Aa:rt,pb:f.ta(pe++)},te.push(Ve),H||Ee.push(Ve)}function z(rt){Ve=ee[rt],pe!==Ve.pb.v()&&Se.push(Ve),Ve.pb(pe++),f.a.Ua(Ve.Y,L),te.push(Ve)}function J(rt,jt){if(rt)for(var Cn=0,ct=jt.length;Cn<ct;Cn++)f.a.D(jt[Cn].Y,function(Wt){rt(Wt,Cn,jt[Cn].Aa)})}P=P||[],typeof P.length>"u"&&(P=[P]),O=O||{};var ee=f.a.g.get(L,C),H=!ee,te=[],$=0,pe=0,xe=[],le=[],Te=[],Se=[],Ee=[],Ve,we=0;if(H)f.a.D(P,w);else{if(!D||ee&&ee._countWaitingForRemove){var ke=f.a.Mb(ee,function(rt){return rt.Aa});D=f.a.Pb(ke,P,{dontLimitMoves:O.dontLimitMoves,sparse:!0})}for(var ke=0,nt,bt,Rt;nt=D[ke];ke++)switch(bt=nt.moved,Rt=nt.index,nt.status){case"deleted":for(;$<Rt;)z($++);bt===e&&(Ve=ee[$],Ve.$&&(Ve.$.s(),Ve.$=e),f.a.Ua(Ve.Y,L).length&&(O.beforeRemove&&(te.push(Ve),we++,Ve.Aa===R?Ve=null:Te.push(Ve)),Ve&&xe.push.apply(xe,Ve.Y))),$++;break;case"added":for(;pe<Rt;)z($++);bt!==e?(le.push(te.length),z(bt)):w(nt.value)}for(;pe<P.length;)z($++);te._countWaitingForRemove=we}f.a.g.set(L,C,te),J(O.beforeMove,Se),f.a.D(xe,O.beforeRemove?f.oa:f.removeNode);var He,mt,it;try{it=L.ownerDocument.activeElement}catch{}if(le.length)for(;(ke=le.shift())!=e;){for(Ve=te[ke],He=e;ke;)if((mt=te[--ke].Y)&&mt.length){He=mt[mt.length-1];break}for(P=0;$=Ve.Y[P];He=$,P++)f.h.Wb(L,$,He)}for(ke=0;Ve=te[ke];ke++){for(Ve.Y||f.a.extend(Ve,g(L,Y,Ve.Aa,k,Ve.pb)),P=0;$=Ve.Y[P];He=$,P++)f.h.Wb(L,$,He);!Ve.Ed&&k&&(k(Ve.Aa,Ve.Y,Ve.pb),Ve.Ed=!0,He=Ve.Y[Ve.Y.length-1])}for(it&&L.ownerDocument.activeElement!=it&&it.focus(),J(O.beforeRemove,Te),ke=0;ke<Te.length;++ke)Te[ke].Aa=R;J(O.afterMove,Se),J(O.afterAdd,Ee)}})(),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,C,R,L){return(C=!(9>f.a.W)&&g.nodes?g.nodes():null)?f.a.la(C.cloneNode(!0).childNodes):(g=g.text(),f.a.ua(g,L))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),(function(){f.$a=function(){var C=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(R,L,P,Y){if(Y=Y||n,P=P||{},2>C)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var O=R.data("precompiled");return O||(O=R.text()||"",O=o.template(null,"{{ko_with $item.koBindingContext}}"+O+"{{/ko_with}}"),R.data("precompiled",O)),R=[L.$data],L=o.extend({koBindingContext:L},P.templateOptions),L=o.tmpl(O,R,L),L.appendTo(Y.createElement("div")),o.fragments={},L},this.createJavaScriptEvaluatorBlock=function(R){return"{{ko_code ((function() { return "+R+" })()) }}"},this.addTemplate=function(R,L){n.write("<script type='text/html' id='"+R+"'>"+L+"<\/script>")},0<C&&(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 tIt=ko;typeof window<"u"?(ko=window.ko,typeof ok<"u"?window.ko=ok:delete window.ko):(ko=global.ko,typeof ok<"u"?global.ko=ok:delete global.ko);var jA=tIt;var Tzo=x(T(),1);/** * @license * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 * Copyright (c) Steve Sanderson * MIT license */var aie="__knockoutObservables",cie="__knockoutSubscribable";function cGe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=lGe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===aie||o===cie)&&!(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&&iIt(n,a)}}),e}function lGe(e,t){var n=e[aie];return!n&&t&&(n={},Object.defineProperty(e,aie,{value:n})),n}function nIt(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),cGe.call(i,e,[t]),e}function iIt(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=oIt(e,t,i))})}function oIt(e,t,n){var i=rIt(e,n);return i.subscribe(t)}function rIt(e,t){var n=t[cie];if(!n){n=new e.subscribable,Object.defineProperty(t,cie,{value:n});var i={};sIt(t,n,i),aIt(e,t,n,i)}return n}function sIt(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 aIt(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 dGe(e,t){if(!e)return null;var n=lGe(e,!1);return n&&n[t]||null}function cIt(e,t){var n=dGe(e,t);n&&n.valueHasMutated()}function lIt(e){e.track=cGe,e.getObservable=dGe,e.valueHasMutated=cIt,e.defineProperty=nIt}var rk={attachToKo:lIt};var Szo=x(T(),1),uGe="http://www.w3.org/2000/svg",mGe="cesium-svgPath-svg",dIt={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(uGe,"svg:svg");i.setAttribute("class",mGe);let o=document.createElementNS(uGe,"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",`${mGe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},sk=dIt;rk.attachToKo(jA);sk.register(jA);var Ce=jA;function ak(e){l(e)||(e=new Tf),this._clock=e,this._eventHelper=new Nr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Ce.observable(Q.now()),this.systemTime.equalityComparer=Q.equals,this.startTime=Ce.observable(e.startTime),this.startTime.equalityComparer=Q.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Ce.observable(e.stopTime),this.stopTime.equalityComparer=Q.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Ce.observable(e.currentTime),this.currentTime.equalityComparer=Q.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Ce.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Ce.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Ce.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Ce.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Ce.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Ce.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(ak.prototype,{clock:{get:function(){return this._clock}}});ak.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};ak.prototype.isDestroyed=function(){return!1};ak.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var ck=ak;var Izo=x(T(),1);function uIt(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,fe.throwInstantiationError()}var lie=uIt;var Yzo=x(T(),1);var _R={};_R.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};_R.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};_R.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};_R.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};_R.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 jd=_R;var Ozo=x(T(),1);function hGe(e,t){this._command=e,t=t??B.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Ce.track(this,["toggled","tooltip"])}Object.defineProperties(hGe.prototype,{command:{get:function(){return this._command}}});var sT=hGe;var jzo=x(T(),1);function mIt(e,t){t=t??!0;let n=new _e,i=new _e;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,Ce.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Fn=mIt;var $zo=x(T(),1);function hIt(e,t,n,i,o){return n.call(i,e[t]),Ce.getObservable(e,t).subscribe(n,i,o)}var xc=hIt;var oHo=x(T(),1);var QA="http://www.w3.org/2000/svg",bGe="http://www.w3.org/1999/xlink",Nz,lk=U.fromCssColorString("rgba(247,250,255,0.384)"),Yz=U.fromCssColorString("rgba(143,191,255,0.216)"),die=U.fromCssColorString("rgba(153,197,255,0.098)"),wz=U.fromCssColorString("rgba(255,255,255,0.086)"),fIt=U.fromCssColorString("rgba(255,255,255,0.267)"),pIt=U.fromCssColorString("rgba(255,255,255,0)"),fGe=U.fromCssColorString("rgba(66,67,68,0.3)"),pGe=U.fromCssColorString("rgba(0,0,0,0.5)");function aT(e){return U.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var dk={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 Qf(e){let t=document.createElementNS(QA,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(Qf(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(bGe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function uie(e,t,n){let i=document.createElementNS(QA,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(QA,"tspan");return o.textContent=n,i.appendChild(o),i}function bIt(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var Mz=new U;function Us(e,t){let n=t.alpha,i=1-n;return Mz.red=e.red*i+t.red*n,Mz.green=e.green*i+t.green*n,Mz.blue=e.blue*i+t.blue*n,Mz.toCssColorString()}function mie(e,t,n){let i=dk[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 Qf(o)}function gIt(e,t,n){let i=dk[n],o=dk.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 Qf(r)}function yIt(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&Nz!==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,b=Math.atan2(p,h)*180/Math.PI+90;b>180&&(b-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&d>u.top&&d<u.bottom?(Nz=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=b):b<f?n.slower():b>f&&n.faster(),t.preventDefault()}else e===Nz&&(Nz=void 0),n.shuttleRingDragging=!1}function Og(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=[xc(t,"toggled",this.setToggled,this),xc(t,"tooltip",this.setTooltip,this),xc(t.command,"canExecute",this.setEnabled,this)]}Og.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)};Og.prototype.isDestroyed=function(){return!1};Og.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")}};Og.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")))};Og.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function SR(e,t){e=Mn(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(QA,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",bGe);let s=document.createElementNS(QA,"g");this._topG=s,this._realtimeSVG=new Og(gIt(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new Og(mie(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new Og(mie(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new Og(mie(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(QA,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=Qf({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let d=dk.animation_pathSwooshFX,u=dk.animation_pathPointer,h=Qf({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=Qf({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=Qf({tagName:"g",transform:"translate(100,100)"});this._knobOuter=Qf({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let b=61,f=Qf({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:b});this._knobDate=uie(0,-24,""),this._knobTime=uie(0,-7,""),this._knobStatus=uie(0,-41,"");let y=Qf({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:b}),_=document.createElementNS(QA,"g");_.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(_),s.appendChild(p),s.appendChild(a),_.appendChild(c),_.appendChild(h),_.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(y),r.appendChild(s),e.appendChild(r);let S=this;function A(v){yIt(S,v)}this._mouseCallback=A,c.addEventListener("mousedown",A,!0),c.addEventListener("touchstart",A,!0),h.addEventListener("mousedown",A,!0),h.addEventListener("touchstart",A,!0),n.addEventListener("mousemove",A,!0),n.addEventListener("touchmove",A,!0),n.addEventListener("mouseup",A,!0),n.addEventListener("touchend",A,!0),n.addEventListener("touchcancel",A,!0),this._shuttleRingPointer.addEventListener("mousedown",A,!0),this._shuttleRingPointer.addEventListener("touchstart",A,!0),this._knobOuter.addEventListener("mousedown",A,!0),this._knobOuter.addEventListener("touchstart",A,!0);let Z=this._knobTime.childNodes[0],V=this._knobDate.childNodes[0],E=this._knobStatus.childNodes[0],G;this._subscriptions=[xc(t.pauseViewModel,"toggled",function(v){G!==v&&(G=v,G?S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),xc(t,"shuttleRingAngle",function(v){bIt(S._shuttleRingPointer,S._knobOuter,v)}),xc(t,"dateLabel",function(v){V.textContent!==v&&(V.textContent=v)}),xc(t,"timeLabel",function(v){Z.textContent!==v&&(Z.textContent=v)}),xc(t,"multiplierLabel",function(v){E.textContent!==v&&(E.textContent=v)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(SR.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});SR.prototype.isDestroyed=function(){return!1};SR.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)};SR.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};SR.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=aT(this._themeNormal),n=aT(this._themeHover),i=aT(this._themeSelect),o=aT(this._themeDisabled),r=aT(this._themeKnob),s=aT(this._themePointer),a=aT(this._themeSwoosh),c=aT(this._themeSwooshHover),d=Qf({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Us(t,lk)},{tagName:"stop",offset:"12%","stop-color":Us(t,Yz)},{tagName:"stop",offset:"46%","stop-color":Us(t,die)},{tagName:"stop",offset:"81%","stop-color":Us(t,wz)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Us(n,lk)},{tagName:"stop",offset:"12%","stop-color":Us(n,Yz)},{tagName:"stop",offset:"46%","stop-color":Us(n,die)},{tagName:"stop",offset:"81%","stop-color":Us(n,wz)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Us(i,lk)},{tagName:"stop",offset:"12%","stop-color":Us(i,Yz)},{tagName:"stop",offset:"46%","stop-color":Us(i,die)},{tagName:"stop",offset:"81%","stop-color":Us(i,wz)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Us(o,fIt)},{tagName:"stop",offset:"75%","stop-color":Us(o,pIt)}]},{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":Us(s,pGe)},{tagName:"stop",offset:"100%","stop-color":Us(s,pGe)}]},{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":Us(r,lk)},{tagName:"stop",offset:"60%","stop-color":Us(r,fGe)},{tagName:"stop",offset:"85%","stop-color":Us(r,Yz)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Us(r,fGe)},{tagName:"stop",offset:"60%","stop-color":Us(r,lk)},{tagName:"stop",offset:"85%","stop-color":Us(r,wz)}]}]});l(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var uk=SR;var mHo=x(T(),1);var xIt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],cT=15,AR=105;function gGe(e,t){return e-t}function hie(e,t){let n=To(t,e,gGe);return n<0?~n:n}function TIt(e,t){if(Math.abs(e)<=cT)return e/cT;let n=cT,i=AR,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 _It(e,t,n){if(n.clockStep===Yo.SYSTEM_CLOCK)return cT;if(Math.abs(e)<=1)return e*cT;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=cT,r=AR,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 bh(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=bh.defaultDateFormatter,this._timeFormatter=bh.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Ce.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(bh.defaultTicks),this.timeLabel=void 0,Ce.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Ce.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Ce.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===Yo.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,Ce.defineProperty(this,"shuttleRingAngle",{get:function(){return _It(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,AR),-AR);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=Yo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===AR){c.multiplier=s>0?a[a.length-1]:a[0];return}let d=TIt(s,a);if(t.snapToTicks)d=a[hie(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>cT?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}c.multiplier=d}}),this._canAnimate=void 0,Ce.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===Ss.UNBOUNDED)return!0;let c=s.multiplier,d=s.currentTime,u=s.startTime,h=!1;if(a===Ss.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,Ce.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===Ss.UNBOUNDED)return!0;let c=s.systemTime;return Q.greaterThanOrEquals(c,s.startTime)&&Q.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Ce.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 sT(n,{toggled:Ce.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 sT(i,{toggled:Ce.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 sT(o,{toggled:Ce.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==Yo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Fn(function(){t._clockViewModel.clockStep=Yo.SYSTEM_CLOCK},Ce.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new sT(r,{toggled:Ce.computed(function(){return e.clockStep===Yo.SYSTEM_CLOCK}),tooltip:Ce.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=hie(c,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=Fn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=hie(c,a)+1;d<a.length&&(s.multiplier=a[d])})}bh.defaultDateFormatter=function(e,t){let n=Q.toGregorianDate(e);return`${xIt[n.month-1]} ${n.day} ${n.year}`};bh.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];bh.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`};bh.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};bh.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(gGe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);oi(s,r),this._allShuttleRingTicks=s};Object.defineProperties(bh.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}}});bh._maxShuttleRingAngle=AR;bh._realtimeShuttleRingAngle=cT;var mk=bh;var CHo=x(T(),1);var yHo=x(T(),1);function yGe(e){e=e??B.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??B.EMPTY_ARRAY,i=e.terrainProviderViewModels??B.EMPTY_ARRAY;this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Ce.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Ce.getObservable(this,"imageryProviderViewModels"),r=Ce.pureComputed(function(){let h=o(),p={},b;for(b=0;b<h.length;b++){let _=h[b],S=_.category;l(p[S])?p[S].push(_):p[S]=[_]}let f=Object.keys(p),y=[];for(b=0;b<f.length;b++){let _=f[b];y.push({name:_,providers:p[_]})}return y});this._imageryProviders=r;let s=Ce.getObservable(this,"terrainProviderViewModels"),a=Ce.pureComputed(function(){let h=s(),p={},b;for(b=0;b<h.length;b++){let _=h[b],S=_.category;l(p[S])?p[S].push(_):p[S]=[_]}let f=Object.keys(p),y=[];for(b=0;b<f.length;b++){let _=f[b];y.push({name:_,providers:p[_]})}return y});this._terrainProviders=a,this.buttonTooltip=void 0,Ce.defineProperty(this,"buttonTooltip",function(){let h=this.selectedImagery,p=this.selectedTerrain,b=l(h)?h.name:void 0,f=l(p)?p.name:void 0;return l(b)&&l(f)?`${b} ${f}`:l(b)?b:f}),this.buttonImageUrl=void 0,Ce.defineProperty(this,"buttonImageUrl",function(){let h=this.selectedImagery;if(l(h))return h.iconUrl}),this.selectedImagery=void 0;let c=Ce.observable();this._currentImageryLayers=[],Ce.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(h){if(c()===h){this.dropDownVisible=!1;return}let p,b=this._currentImageryLayers,f=b.length,y=this._globe.imageryLayers,_=!1;for(p=0;p<f;p++){let S=y.length;for(let A=0;A<S;A++){let Z=y.get(A);if(Z===b[p]){y.remove(Z),_=!0;break}}}if(l(h)){let S=h.creationCommand();if(Array.isArray(S)){let A=S.length;for(this._currentImageryLayers=[],p=A-1;p>=0;p--){let Z=bs.fromProviderAsync(S[p]);y.add(Z,0),this._currentImageryLayers.push(Z)}}else{this._currentImageryLayers=[];let A=bs.fromProviderAsync(S);if(A.name=h.name,_)y.add(A,0);else{let Z=y.get(0);l(Z)&&y.remove(Z),y.add(A,0)}this._currentImageryLayers.push(A)}}c(h),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Ce.observable();Ce.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))this._globe.depthTestAgainstTerrain=!(p instanceof r0),this._globe.terrainProvider=p;else if(l(p)){let b=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{b=!0,f()}),_=new K9(p).readyEvent.addEventListener(S=>{b||(this._globe.depthTestAgainstTerrain=!(S instanceof r0),this._globe.terrainProvider=S,_())})}d(h),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Fn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel??n[0],this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(yGe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var hk=yGe;function kz(e,t){e=Mn(e);let n=new hk(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 b=document.createElement("div");b.className="cesium-baseLayerPicker-itemLabel",b.setAttribute("data-bind","text: name"),h.appendChild(b);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 y=document.createElement("div");y.className="cesium-baseLayerPicker-section",y.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(y);let _=document.createElement("div");_.className="cesium-baseLayerPicker-category",y.appendChild(_);let S=document.createElement("div");S.className="cesium-baseLayerPicker-categoryTitle",S.setAttribute("data-bind","text: name"),_.appendChild(S);let A=document.createElement("div");A.className="cesium-baseLayerPicker-choices",A.setAttribute("data-bind","foreach: providers"),_.appendChild(A);let Z=document.createElement("div");Z.className="cesium-baseLayerPicker-item",Z.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),A.appendChild(Z);let V=document.createElement("img");V.className="cesium-baseLayerPicker-itemIcon",V.setAttribute("data-bind","attr: { src: iconUrl }"),V.setAttribute("draggable","false"),Z.appendChild(V);let E=document.createElement("div");E.className="cesium-baseLayerPicker-itemLabel",E.setAttribute("data-bind","text: name"),Z.appendChild(E),Ce.applyBindings(n,i),Ce.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(G){i.contains(G.target)||r.contains(G.target)||(n.dropDownVisible=!1)},dn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}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 dn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ce.cleanNode(this._element),Ce.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),he(this)};var fk=kz;var WHo=x(T(),1);function xGe(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??"",Ce.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(xGe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var sr=xGe;var PHo=x(T(),1);function SIt(){let e=[],t=devicePixelRatio>=2;return e.push(new sr({name:"Bing Maps Aerial",iconUrl:qt("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return Vb({style:Cb.AERIAL})}})),e.push(new sr({name:"Bing Maps Aerial with Labels",iconUrl:qt("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return Vb({style:Cb.AERIAL_WITH_LABELS})}})),e.push(new sr({name:"Bing Maps Roads",iconUrl:qt("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return Vb({style:Cb.ROAD})}})),e.push(new sr({name:"ArcGIS World Imagery",iconUrl:qt("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 Ab.fromBasemapType(tf.SATELLITE,{enablePickFeatures:!1})}})),e.push(new sr({name:"ArcGIS World Hillshade",iconUrl:qt("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 Ab.fromBasemapType(tf.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new sr({name:"Esri World Ocean",iconUrl:qt("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 Ab.fromBasemapType(tf.OCEANS,{enablePickFeatures:!1})}})),e.push(new sr({name:"Open\xADStreet\xADMap",iconUrl:qt("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 Yg({url:"https://tile.openstreetmap.org/"})}})),e.push(new sr({name:"Stadia x Stamen Watercolor",iconUrl:qt("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 Yg({url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/",fileExtension:"jpg",credit:`© <a href="proxy.php?url=https%3A%2F%2Fstamen.com%2F" target="_blank">Stamen Design</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.stadiamaps.com%2F" target="_blank">Stadia Maps</a> © <a href="proxy.php?url=https%3A%2F%2Fopenmaptiles.org%2F" target="_blank">OpenMapTiles</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.openstreetmap.org%2Fabout%2F" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia x Stamen Toner",iconUrl:qt("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 Yg({url:"https://tiles.stadiamaps.com/tiles/stamen_toner/",retinaTiles:t,credit:`© <a href="proxy.php?url=https%3A%2F%2Fstamen.com%2F" target="_blank">Stamen Design</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.stadiamaps.com%2F" target="_blank">Stadia Maps</a> © <a href="proxy.php?url=https%3A%2F%2Fopenmaptiles.org%2F" target="_blank">OpenMapTiles</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.openstreetmap.org%2Fabout%2F" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia Alidade Smooth",iconUrl:qt("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 Yg({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth/",retinaTiles:t,credit:`© <a href="proxy.php?url=https%3A%2F%2Fwww.stadiamaps.com%2F" target="_blank">Stadia Maps</a> © <a href="proxy.php?url=https%3A%2F%2Fopenmaptiles.org%2F" target="_blank">OpenMapTiles</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.openstreetmap.org%2Fabout%2F" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia Alidade Smooth Dark",iconUrl:qt("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 Yg({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/",retinaTiles:t,credit:`© <a href="proxy.php?url=https%3A%2F%2Fwww.stadiamaps.com%2F" target="_blank">Stadia Maps</a> © <a href="proxy.php?url=https%3A%2F%2Fopenmaptiles.org%2F" target="_blank">OpenMapTiles</a> © <a href="proxy.php?url=https%3A%2F%2Fwww.openstreetmap.org%2Fabout%2F" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Sentinel-2",iconUrl:qt("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 Bl.fromAssetId(3954)}})),e.push(new sr({name:"Blue Marble",iconUrl:qt("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3845)}})),e.push(new sr({name:"Earth at night",iconUrl:qt("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 Bl.fromAssetId(3812)}})),e.push(new sr({name:"Natural Earth\xA0II",iconUrl:qt("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return Oy.fromUrl(qt("Assets/Textures/NaturalEarthII"))}})),e.push(new sr({name:"Google Maps Satellite",iconUrl:qt("Widgets/Images/ImageryProviders/googleSatellite.png"),tooltip:"Imagery from Google Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3830182)}})),e.push(new sr({name:"Google Maps Satellite with Labels",iconUrl:qt("Widgets/Images/ImageryProviders/googleSatelliteLabels.png"),tooltip:"Imagery with place labels from Google Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3830183)}})),e.push(new sr({name:"Google Maps Roadmap",iconUrl:qt("Widgets/Images/ImageryProviders/googleRoadmap.png"),tooltip:"Labeled roads and other features on a base landscape from Google Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3830184)}})),e.push(new sr({name:"Google Maps Contour",iconUrl:qt("Widgets/Images/ImageryProviders/googleContour.png"),tooltip:"Hillshade mapping, contour lines, natural features (roadmap features hidden) from Google Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3830186)}})),e.push(new sr({name:"Azure Maps Aerial",iconUrl:qt("Widgets/Images/ImageryProviders/azureAerial.png"),tooltip:"Imagery from Azure Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3891168)}})),e.push(new sr({name:"Azure Maps Roads",iconUrl:qt("Widgets/Images/ImageryProviders/azureRoads.png"),tooltip:"Labeled roads and other features on a base landscape from Azure Maps",category:"Cesium ion",creationFunction:function(){return Bl.fromAssetId(3891169)}})),e}var pk=SIt;var wHo=x(T(),1);function AIt(){let e=[];return e.push(new sr({name:"WGS84 Ellipsoid",iconUrl:qt("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new r0({ellipsoid:ie.WGS84})}})),e.push(new sr({name:"Cesium World Terrain",iconUrl:qt("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 BA({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var bk=AIt;var qHo=x(T(),1);var BHo=x(T(),1);function Uz(e,t){l(t)||(t=document.body),t=Mn(t);let n=this,i=Ce.observable(zr.fullscreen),o=Ce.observable(zr.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Ce.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Ce.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&zr.enabled)}}),this.tooltip=void 0,Ce.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Fn(function(){zr.fullscreen?zr.exitFullscreen():zr.requestFullscreen(n._fullscreenElement)},Ce.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=Mn(e)??r.body,this._callback=function(){i(zr.fullscreen)},r.addEventListener(zr.changeEventName,this._callback)}Object.defineProperties(Uz.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});Uz.prototype.isDestroyed=function(){return!1};Uz.prototype.destroy=function(){document.removeEventListener(zr.changeEventName,this._callback),he(this)};var gk=Uz;var ZIt="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",CIt="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 Dz(e,t){e=Mn(e);let n=new gk(t,e);n._exitFullScreenPath=CIt,n._enterFullScreenPath=ZIt;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),Ce.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}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(),Ce.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var yk=Dz;var uKo=x(T(),1);var oKo=x(T(),1);var TGe=1e3;function gh(e){l(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new KA({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 _e,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=SGe,this._handleArrowUp=_Ge;let t=this;this._suggestionsVisible=Ce.pureComputed(function(){let o=Ce.getObservable(t,"_suggestions")().length>0,r=Ce.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Fn(function(i){if(i=i??nT.SEARCH,t._focusTextbox=!1,l(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)WIt(t);else return GIt(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?_Ge(t):r?SGe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;CGe(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??gh.flyToDestination,this._focusTextbox=!1,Ce.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Ce.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){gh._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Ce.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Ce.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Ce.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(gh.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}}});gh.prototype.destroy=function(){this._suggestionSubscription.dispose()};function _Ge(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],gh._adjustSuggestionsScroll(e,n)}function SGe(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],gh._adjustSuggestionsScroll(e,i)}function VIt(e,t){let n=l(t)?t.availability:void 0;return l(n)?qS(t,[e]).then(function(i){return e=i[0],e.height+=TGe,e}):(e.height+=TGe,Promise.resolve(e))}function RIt(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof ce?W.equalsEpsilon(t.south,t.north,W.EPSILON7)&&W.equalsEpsilon(t.east,t.west,W.EPSILON7)?t=ce.center(t):a=$S(t,n):t=i.cartesianToCartographic(t),l(a)||(a=VIt(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 EIt(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 GIt(e,t,n){let i=e._searchText;if(ZGe(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 EIt(t[o],i,n),l(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,pie(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=AGe(e,yR.getCreditsFromResult(s[0]));l(a)||fie(e,t[o].credit);return}e._searchText=`${i} (not found)`}function fie(e,t){l(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function AGe(e,t){return l(t)&&t.forEach(n=>fie(e,n)),t}function pie(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function LIt(e,t){let n=Mn(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 WIt(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function ZGe(e){return/^\s*$/.test(e)}function CGe(e){Ce.getObservable(e,"_suggestions").removeAll()}async function vIt(e){if(!e.autoComplete)return;let t=e._searchText;if(CGe(e),pie(e),!ZGe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,nT.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=yR.getCreditsFromResult(r);o=o&&!l(s),AGe(e,s)}),o&&fie(e,n.credit)}if(e._suggestions.length>=5)return}}gh.flyToDestination=RIt;gh._updateSearchSuggestions=vIt;gh._adjustSuggestionsScroll=LIt;gh.prototype.isDestroyed=function(){return!1};gh.prototype.destroy=function(){return pie(this),he(this)};var xk=gh;var FIt="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",IIt="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 Oz(e){let t=Mn(e.container),n=new xk(e);n._startSearchPath=FIt,n._stopSearchPath=IIt;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),Ce.applyBindings(n,i),Ce.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()},dn.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(Oz.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});Oz.prototype.isDestroyed=function(){return!1};Oz.prototype.destroy=function(){let e=this._container;return dn.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(),Ce.cleanNode(this._form),Ce.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),he(this)};var Tk=Oz;var CKo=x(T(),1);var gKo=x(T(),1);function PIt(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>    ${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function bie(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var XIt=new xn,NIt=new m;function _k(e,t){let n=this,i=e.canvas,o=new Hu(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="",Ce.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=Ce.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Ce.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Ce.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new Cg({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Fn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Ce.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Fn(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new V9({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=Ce.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=Ce.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Ce.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Ce.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=bie(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Fn(function(){let d=n.depthFrustum-1;return n.depthFrustum=bie(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Ce.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 j9({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&l(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Ce.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Ce.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=Ce.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=Ce.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,Wn.LEFT_CLICK):o.removeInputAction(Wn.LEFT_CLICK)});function c(d){let u,h=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,XIt),b=r.pick(p,n._scene,NIt);if(l(b)){let f=h.cartesianToCartographic(b),y=r._surface.tileProvider._tilesToRenderByTextureCount;for(let _=0;!u&&_<y.length;++_){let S=y[_];if(l(S))for(let A=0;!u&&A<S.length;++A){let Z=S[A];ce.contains(Z.rectangle,f)&&(u=Z)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Fn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Ce.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(c,Wn.LEFT_CLICK):o.removeInputAction(Wn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(_k.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}}});_k.prototype._update=function(){this.frustums&&(this.frustumStatisticText=PIt(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=bie(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}`};_k.prototype.isDestroyed=function(){return!1};_k.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 Sk=_k;function Bz(e,t){e=Mn(e);let n=document.createElement("div"),i=new Sk(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=jd.createSection,c=jd.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 b=document.createElement("div");d.appendChild(b);let f=document.createElement("span");f.setAttribute("data-bind",'html: "     Frustum:"'),b.appendChild(f);let y=document.createElement("span");y.setAttribute("data-bind","text: depthFrustumText"),b.appendChild(y);let _=document.createElement("input");_.type="button",_.value="-",_.className="cesium-cesiumInspector-pickButton",_.setAttribute("data-bind","click: decrementDepthFrustum"),b.appendChild(_);let S=document.createElement("input");S.type="button",S.value="+",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind","click: incrementDepthFrustum"),b.appendChild(S);let A=a(s,"Primitives","primitivesVisible","togglePrimitives"),Z=document.createElement("div");Z.className="cesium-cesiumInspector-pickSection",A.appendChild(Z);let V=document.createElement("input");V.type="button",V.value="Pick a primitive",V.className="cesium-cesiumInspector-pickButton",V.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let E=document.createElement("div");E.className="cesium-cesiumInspector-center",E.appendChild(V),Z.appendChild(E),Z.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),Z.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),Z.appendChild(this._primitiveOnly);let G=a(s,"Terrain","terrainVisible","toggleTerrain"),v=document.createElement("div");v.className="cesium-cesiumInspector-pickSection",G.appendChild(v);let I=document.createElement("input");I.type="button",I.value="Pick a tile",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),E=document.createElement("div"),E.appendChild(I),E.className="cesium-cesiumInspector-center",v.appendChild(E);let X=document.createElement("div");v.appendChild(X);let N=document.createElement("input");N.type="button",N.value="Parent",N.className="cesium-cesiumInspector-pickButton",N.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 C=document.createElement("input");C.type="button",C.value="NE",C.className="cesium-cesiumInspector-pickButton",C.setAttribute("data-bind","click: selectNE");let R=document.createElement("input");R.type="button",R.value="SW",R.className="cesium-cesiumInspector-pickButton",R.setAttribute("data-bind","click: selectSW");let L=document.createElement("input");L.type="button",L.value="SE",L.className="cesium-cesiumInspector-pickButton",L.setAttribute("data-bind","click: selectSE");let P=document.createElement("div");P.className="cesium-cesiumInspector-tileText",X.className="cesium-cesiumInspector-frustumStatistics",X.appendChild(P),X.setAttribute("data-bind","visible: hasPickedTile"),P.setAttribute("data-bind","html: tileText");let Y=document.createElement("div");Y.className="cesium-cesiumInspector-relativeText",Y.textContent="Select relative:",X.appendChild(Y);let O=document.createElement("table"),k=document.createElement("tr"),D=document.createElement("tr"),w=document.createElement("td");w.appendChild(N);let z=document.createElement("td");z.appendChild(g);let J=document.createElement("td");J.appendChild(C),k.appendChild(w),k.appendChild(z),k.appendChild(J);let ee=document.createElement("td"),H=document.createElement("td");H.appendChild(R);let te=document.createElement("td");te.appendChild(L),D.appendChild(ee),D.appendChild(H),D.appendChild(te),O.appendChild(k),O.appendChild(D),X.appendChild(O),v.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),v.appendChild(c("Show only selected","filterTile","hasPickedTile")),G.appendChild(c("Wireframe","wireframe")),G.appendChild(c("Suspend LOD update","suspendUpdates")),G.appendChild(c("Show tile coordinates","tileCoordinates")),Ce.applyBindings(i,this._element)}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 Ce.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var Ak=Bz;var XKo=x(T(),1);var GKo=x(T(),1);function VGe(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",Ce.track(this,["tooltip"])}Object.defineProperties(VGe.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 Zk=VGe;function zz(e,t,n){e=Mn(e);let i=new Zk(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),Ce.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}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 Ce.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var Ck=zz;var KKo=x(T(),1);var kKo=x(T(),1);function YIt(e){return function(t){let n=e._scene.pick(t.position);l(n)&&n.primitive instanceof $s&&(e.tileset=n.primitive),e.pickActive=!1}}function EGe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);l(i)&&i.primitive instanceof $s&&(e.tileset=i.primitive)},Wn.MOUSE_MOVE):(e._eventHandler.removeInputAction(Wn.MOUSE_MOVE),e.picking=e.picking)}var wIt={maximumFractionDigits:3};function Vk(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,wIt):Math.round(t).toLocaleString()}function Rk(e,t){if(!l(e))return"";let n=t?e._statisticsPerPass[or.PICK]:e._statisticsPerPass[or.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>${Vk(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${Vk(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${Vk(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function GGe(){let e=Xi.statistics;return` <ul class="cesium-cesiumInspector-statistics"> <li><strong>Geometry Memory (MB): </strong>${Vk(e.geometryByteLength)}</li> <li><strong>Texture Memory (MB): </strong>${Vk(e.texturesByteLength)}</li> </ul> `}var MIt=[{text:"Highlight",value:Ad.HIGHLIGHT},{text:"Replace",value:Ad.REPLACE},{text:"Mix",value:Ad.MIX}],RGe=new U(1,1,0,.4),kIt=new U,Hz=new U;function Tc(e,t){let n=this,i=e.canvas;this._eventHandler=new Hu(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new Cg({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,Ce.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=Ce.observable({}),this.properties=[],Ce.defineProperty(this,"properties",function(){let w=[],z=n._properties();for(let J in z)z.hasOwnProperty(J)&&w.push(J);return w});let o=Ce.observable();Ce.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(w){o(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceError=w)}}),this.dynamicScreenSpaceError=!1;let r=Ce.observable();Ce.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(w){r(w),l(n._tileset)&&(n._tileset.colorBlendMode=w,n._scene.requestRender())}}),this.colorBlendMode=Ad.HIGHLIGHT;let s=Ce.observable(),a=Ce.observable();Ce.defineProperty(this,"picking",{get:function(){return a()},set:function(w){a(w),w?n._eventHandler.setInputAction(function(z){let J=e.pick(z.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 ee;e.pickPositionSupported&&(ee=e.pickPosition(z.endPosition),l(ee)&&(n._tileset.debugPickPosition=ee)),n._tileset.debugPickedTile=J.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},Wn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(Wn.MOUSE_MOVE))}}),this.picking=!0;let c=Ce.observable();Ce.defineProperty(this,"colorize",{get:function(){return c()},set:function(w){c(w),l(n._tileset)&&(n._tileset.debugColorizeTiles=w,n._scene.requestRender())}}),this.colorize=!1;let d=Ce.observable();Ce.defineProperty(this,"wireframe",{get:function(){return d()},set:function(w){d(w),l(n._tileset)&&(n._tileset.debugWireframe=w,n._scene.requestRender())}}),this.wireframe=!1;let u=Ce.observable();Ce.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(w){u(w),l(n._tileset)&&(n._tileset.debugShowBoundingVolume=w,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let h=Ce.observable();Ce.defineProperty(this,"showContentBoundingVolumes",{get:function(){return h()},set:function(w){h(w),l(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=w,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Ce.observable();Ce.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(w){p(w),l(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=w,n._scene.requestRender())}}),this.showRequestVolumes=!1;let b=Ce.observable();Ce.defineProperty(this,"freezeFrame",{get:function(){return b()},set:function(w){b(w),l(n._tileset)&&(n._tileset.debugFreezeFrame=w,n._scene.debugShowFrustumPlanes=w,n._scene.requestRender())}}),this.freezeFrame=!1,Ce.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(w){s(w),l(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=w,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Ce.observable();Ce.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(w){f(w),l(n._tileset)&&(n._tileset.debugShowGeometricError=w,n._scene.requestRender())}}),this.showGeometricError=!1;let y=Ce.observable();Ce.defineProperty(this,"showRenderingStatistics",{get:function(){return y()},set:function(w){y(w),l(n._tileset)&&(n._tileset.debugShowRenderingStatistics=w,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let _=Ce.observable();Ce.defineProperty(this,"showMemoryUsage",{get:function(){return _()},set:function(w){_(w),l(n._tileset)&&(n._tileset.debugShowMemoryUsage=w,n._scene.requestRender())}}),this.showMemoryUsage=!1;let S=Ce.observable();Ce.defineProperty(this,"showUrl",{get:function(){return S()},set:function(w){S(w),l(n._tileset)&&(n._tileset.debugShowUrl=w,n._scene.requestRender())}}),this.showUrl=!1;let A=Ce.observable();Ce.defineProperty(this,"maximumScreenSpaceError",{get:function(){return A()},set:function(w){w=Number(w),isNaN(w)||(A(w),l(n._tileset)&&(n._tileset.maximumScreenSpaceError=w))}}),this.maximumScreenSpaceError=16;let Z=Ce.observable();Ce.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return Z()},set:function(w){w=Number(w),isNaN(w)||(Z(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=w))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Ce.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(Z(),1/6)},set:function(w){let z=Math.pow(w,6);Z(z),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=z)}});let V=Ce.observable();Ce.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return V()},set:function(w){w=Number(w),isNaN(w)||(V(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=w))}}),this.dynamicScreenSpaceErrorFactor=24;let E=YIt(this),G=Ce.observable();Ce.defineProperty(this,"pickActive",{get:function(){return G()},set:function(w){G(w),w?n._eventHandler.setInputAction(E,Wn.LEFT_CLICK):n._eventHandler.removeInputAction(Wn.LEFT_CLICK)}});let v=Ce.observable();Ce.defineProperty(this,"pointCloudShading",{get:function(){return v()},set:function(w){v(w),l(n._tileset)&&(n._tileset.pointCloudShading.attenuation=w)}}),this.pointCloudShading=!1;let I=Ce.observable();Ce.defineProperty(this,"geometricErrorScale",{get:function(){return I()},set:function(w){w=Number(w),isNaN(w)||(I(w),l(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=w))}}),this.geometricErrorScale=1;let X=Ce.observable();Ce.defineProperty(this,"maximumAttenuation",{get:function(){return X()},set:function(w){w=Number(w),isNaN(w)||(X(w),l(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=w===0?void 0:w))}}),this.maximumAttenuation=0;let N=Ce.observable();Ce.defineProperty(this,"baseResolution",{get:function(){return N()},set:function(w){w=Number(w),isNaN(w)||(N(w),l(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=w===0?void 0:w))}}),this.baseResolution=0;let g=Ce.observable();Ce.defineProperty(this,"eyeDomeLighting",{get:function(){return g()},set:function(w){g(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=w)}}),this.eyeDomeLighting=!1;let C=Ce.observable();Ce.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return C()},set:function(w){w=Number(w),isNaN(w)||(C(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=w))}}),this.eyeDomeLightingStrength=1;let R=Ce.observable();Ce.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return R()},set:function(w){w=Number(w),isNaN(w)||(R(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=w))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let L=Ce.observable();Ce.defineProperty(this,"skipLevelOfDetail",{get:function(){return L()},set:function(w){L(w),l(n._tileset)&&(n._tileset.skipLevelOfDetail=w)}}),this.skipLevelOfDetail=!0;let P=Ce.observable();Ce.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return P()},set:function(w){w=Number(w),isNaN(w)||(P(w),l(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=w))}}),this.skipScreenSpaceErrorFactor=16;let Y=Ce.observable();Ce.defineProperty(this,"baseScreenSpaceError",{get:function(){return Y()},set:function(w){w=Number(w),isNaN(w)||(Y(w),l(n._tileset)&&(n._tileset.baseScreenSpaceError=w))}}),this.baseScreenSpaceError=1024;let O=Ce.observable();Ce.defineProperty(this,"skipLevels",{get:function(){return O()},set:function(w){w=Number(w),isNaN(w)||(O(w),l(n._tileset)&&(n._tileset.skipLevels=w))}}),this.skipLevels=1;let k=Ce.observable();Ce.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return k()},set:function(w){k(w),l(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=w)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let D=Ce.observable();Ce.defineProperty(this,"loadSiblings",{get:function(){return D()},set:function(w){D(w),l(n._tileset)&&(n._tileset.loadSiblings=w)}}),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)||EGe(this,!0)}Object.defineProperties(Tc.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 MIt}},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=Rk(e,!1),this._pickStatisticsText=Rk(e,!0),this._resourceCacheStatisticsText=GGe(),EGe(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,kIt):U.WHITE:t.color=Hz,this._scene.requestRender()),l(e)&&(U.clone(e.color,Hz),e.color=RGe,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()&&!gie(t.content)&&(t.color=Hz,this._scene.requestRender()),l(e)&&!gie(e.content)&&(U.clone(e.color,Hz),e.color=RGe,this._scene.requestRender()),this._tile=e}}});function gie(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(!gie(t[i]))return!1;return!0}return!1}Tc.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};Tc.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Tc.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};Tc.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Tc.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};Tc.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};Tc.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};Tc.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};Tc.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};Tc.prototype.trimTilesCache=function(){l(this._tileset)&&this._tileset.trimLoadedTiles()};Tc.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 Mb(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};Tc.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};Tc.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=Rk(e,!1),this._pickStatisticsText=Rk(e,!0),this._resourceCacheStatisticsText=GGe())};Tc.prototype.isDestroyed=function(){return!1};Tc.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Ce.getObservable(e,t).dispose()}),he(this)};Tc.getStatistics=Rk;var Ek=Tc;function Kz(e,t){e=Mn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new Ek(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=jd.createSection,c=jd.createCheckbox,d=jd.createRangeInput,u=jd.createButton,h=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),b=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),y=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),_=a(s,"Style","styleVisible","toggleStyle"),S=a(s,"Optimization","optimizationVisible","toggleOptimization"),A=document.createElement("div");A.className="field-group";let Z=document.createElement("label");Z.className="field-label",Z.appendChild(document.createTextNode("Properties: "));let V=document.createElement("div");V.setAttribute("data-bind","text: properties"),A.appendChild(Z),A.appendChild(V),h.appendChild(A),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 E=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),G=document.createElement("p");G.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),G.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),G.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",E.appendChild(G),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 v=document.createElement("div");v.setAttribute("data-bind","visible: pointCloudShading"),v.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),v.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),v.appendChild(d("Base Resolution","baseResolution",0,1,.01)),v.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(v);let I=document.createElement("div");I.setAttribute("data-bind","visible: eyeDomeLighting"),I.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),I.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),v.appendChild(I),b.appendChild(c("Freeze Frame","freezeFrame")),b.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let X=document.createElement("div");X.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),b.appendChild(X);let N=document.createElement("div");N.setAttribute("data-bind","visible: dynamicScreenSpaceError"),N.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),N.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),b.appendChild(N),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 C=document.createElement("div");C.className="cesium-3dTilesInspector-statistics",C.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(C),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let R=document.createElement("div");R.className="cesium-3dTilesInspector-statistics",R.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(R);let L=document.createElement("div");_.appendChild(L),L.appendChild(document.createTextNode("Color Blend Mode: "));let P=document.createElement("select");P.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),L.appendChild(P);let Y=document.createElement("textarea");Y.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),L.className="cesium-cesiumInspector-styleEditor",L.appendChild(Y);let O=u("Compile (Ctrl+Enter)","compileStyle");L.appendChild(O);let k=document.createElement("div");k.className="cesium-cesiumInspector-error",k.setAttribute("data-bind","text: editorError"),L.appendChild(k),y.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),y.appendChild(c("Geometric Error","showGeometricError")),y.appendChild(c("Rendering Statistics","showRenderingStatistics")),y.appendChild(c("Memory Usage (MB)","showMemoryUsage")),y.appendChild(c("Url","showUrl")),S.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let D=document.createElement("div");D.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),S.appendChild(D);let w=document.createElement("div");w.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),S.appendChild(w);let z=document.createElement("div");z.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),S.appendChild(z),S.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),S.appendChild(c("Load siblings of visible tiles","loadSiblings")),Ce.applyBindings(o,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 Ce.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var Gk=Kz;var oJo=x(T(),1);var qKo=x(T(),1);function UIt(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function WGe(e,t){Ce.track(e);for(let n=0;n<e.sublayers.length;n++)WGe(e.sublayers[n],t)}function Jz(e){return e.modelName==="FullModel"}function vGe(e){return e.modelName==="Overview"}function FGe(e){return vGe(e)||Jz(e)}function LGe(e,t){if(FGe(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:Ce.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function DIt(e,t){if(FGe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");Jz(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function OIt(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 BIt(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Ce.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Ce.observable(!0),index:-1}],currentLayer:Ce.observable(),expandClickHandler:UIt,setOptionDisable:function(i,o){Ce.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){DIt(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){WGe(n[i],this.viewModel);let o=LGe(n[i],this.viewModel);l(o)&&(vGe(o)||!l(this.viewModel.defaultLayer)&&Jz(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=LGe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=Jz(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return OIt(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var Lk=BIt;function zIt(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 Lk(t);Ce.track(o),Ce.applyBindings(o,n),l(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var yie=zIt;var pJo=x(T(),1);var cJo=x(T(),1);var HIt="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",KIt="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 xie(){this._cameraClicked=new _e,this._closeClicked=new _e,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Ce.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,Ce.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?KIt:HIt}}),Ce.defineProperty(this,"_bodyless",{get:function(){return!l(this.description)||this.description.length===0}})}xie.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(xie.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var Wk=xie;function jz(e){e=Mn(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="×",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 Wk;Ce.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=qt("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=xc(s,"description",function(h){r.style.height="5px",u.innerHTML=h;let p=null,b=u.firstElementChild;if(b!==null&&u.childNodes.length===1){let y=window.getComputedStyle(b);if(y!==null){let _=y["background-color"],S=U.fromCssColorString(_);l(S)&&S.alpha!==0&&(p=y["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(jz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});jz.prototype.isDestroyed=function(){return!1};jz.prototype.destroy=function(){let e=this._container;return Ce.cleanNode(this._element),e.removeChild(this._element),l(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),he(this)};var vk=jz;var VJo=x(T(),1);var xJo=x(T(),1);function IGe(){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",Ce.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(IGe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var Fk=IGe;function Qz(e){let t=Mn(e.container),n=new Fk,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=qt("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=qt("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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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="proxy.php?url=https%3A%2F%2Fopenplains.com%2F%24%7Bqt%28"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),Ce.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(b){o.contains(b.target)||(n.showInstructions=!1)},dn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(Qz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});Qz.prototype.isDestroyed=function(){return!1};Qz.prototype.destroy=function(){return dn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Ce.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var Ik=Qz;var MJo=x(T(),1);var FJo=x(T(),1);function Tie(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,Ce.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Fn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=W9.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(Tie.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});Tie.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),he(this)};var Pk=Tie;function qz(e){let t=Mn(e.container),n=new Pk(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="×",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),Ce.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(qz.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});qz.prototype.isDestroyed=function(){return!1};qz.prototype.destroy=function(){return this._viewModel.destroy(),Ce.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var Xk=qz;var ejo=x(T(),1);var HJo=x(T(),1);function $z(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new Nr,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",Ce.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Ce.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===re.SCENE2D?n.tooltip2D:o===re.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=re}Object.defineProperties($z.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}}});$z.prototype.isDestroyed=function(){return!1};$z.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var Nk=$z;var JIt="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",jIt="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",QIt="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 eH(e,t,n){e=Mn(e);let i=new Nk(t,n);i._globePath=JIt,i._flatMapPath=jIt,i._columbusViewPath=QIt;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),Ce.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},dn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(eH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});eH.prototype.isDestroyed=function(){return!1};eH.prototype.destroy=function(){return this._viewModel.destroy(),dn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ce.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var Yk=eH;var hjo=x(T(),1);var sjo=x(T(),1);function tH(e){this._scene=e,this._orthographic=e.camera.frustum instanceof fn,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Ce.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Ce.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Fn(function(){t.sceneMode===re.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new Nr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===re.SCENE2D||t._scene.camera.frustum instanceof fn}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=l(e.camera._currentFlight)}),this._switchToPerspective=Fn(function(){t.sceneMode!==re.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Fn(function(){t.sceneMode!==re.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=re}Object.defineProperties(tH.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}}});tH.prototype.isDestroyed=function(){return!1};tH.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var wk=tH;var qIt="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",$It="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 nH(e,t){e=Mn(e);let n=new wk(t);n._perspectivePath=qIt,n._orthographicPath=$It;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),Ce.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},dn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(nH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});nH.prototype.isDestroyed=function(){return!1};nH.prototype.destroy=function(){return this._viewModel.destroy(),dn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ce.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var Mk=nH;var Cjo=x(T(),1);var yjo=x(T(),1);var ePt=new M,iH="-1000px";function kk(e,t,n){this._scene=e,this._screenPositionX=iH,this._screenPositionY=iH,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Ce.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Ce.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&l(this.position)}}),Ce.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return co.worldToWindowCoordinates(e,i,o)}}kk.prototype.update=function(){if(this.showSelection&&l(this.position)){let e=this.computeScreenSpacePosition(this.position,ePt);if(!l(e))this._screenPositionX=iH,this._screenPositionY=iH;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`}}};kk.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:Zs.EXPONENTIAL_OUT})};kk.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:Zs.EXPONENTIAL_OUT})};Object.defineProperties(kk.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var Uk=kk;function oH(e,t){e=Mn(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 Uk(t,this._element,this._container);this._viewModel=c,Ce.applyBindings(this._viewModel,this._element)}Object.defineProperties(oH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});oH.prototype.isDestroyed=function(){return!1};oH.prototype.destroy=function(){let e=this._container;return Ce.cleanNode(this._element),e.removeChild(this._element),he(this)};var Dk=oH;var Ujo=x(T(),1);var Pjo=x(T(),1);var wGe=x(YGe(),1);function iPt(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 MGe(){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 oPt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(MGe(),e._locked=!1),e._noSleep.disable(),zr.exitFullscreen(),n(!1)):(zr.fullscreen||zr.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=iPt("landscape")),t.useWebVR=!0,n(!0)))}function rH(e,t){let n=this,i=Ce.observable(zr.enabled),o=Ce.observable(!1);this.isVRMode=void 0,Ce.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Ce.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&zr.enabled)}}),this.tooltip=void 0,Ce.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Ce.observable(!1);this._isOrthographic=void 0,Ce.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new Nr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof fn)}),this._locked=!1,this._noSleep=new wGe.default,this._command=Fn(function(){oPt(n,e,o,r)},Ce.getObservable(this,"isVREnabled")),this._vrElement=Mn(t)??document.body,this._callback=function(){!zr.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(MGe(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(zr.changeEventName,this._callback)}Object.defineProperties(rH.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});rH.prototype.isDestroyed=function(){return!1};rH.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(zr.changeEventName,this._callback),he(this)};var Ok=rH;var rPt="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",sPt="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 sH(e,t,n){e=Mn(e);let i=new Ok(t,n);i._exitVRPath=sPt,i._enterVRPath=rPt;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),Ce.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(sH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});sH.prototype.isDestroyed=function(){return!1};sH.prototype.destroy=function(){return this._viewModel.destroy(),Ce.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var Bk=sH;var e4o=x(T(),1);var Bjo=x(T(),1);function qA(e,t,n){this._color=e,this._height=t,this._base=n??0}qA.prototype.getHeight=function(){return this._height};qA.prototype.getBase=function(){return this._base};qA.prototype.getStartTime=function(){return this._start};qA.prototype.getStopTime=function(){return this._stop};qA.prototype.setRange=function(e,t){this._start=e,this._stop=t};qA.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 zk=qA;var Kjo=x(T(),1);function kGe(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)}kGe.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 Hk=kGe;var Zie=1e12,yh={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},ld={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},lT=[.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],aPt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function dd(e,t){e=Mn(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=yh.none,this._touchMode=ld.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=cPt(this),this._onMouseUp=lPt(this),this._onMouseMove=dPt(this),this._onMouseWheel=uPt(this),this._onTouchStart=mPt(this),this._onTouchMove=fPt(this),this._onTouchEnd=hPt(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()}dd.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};dd.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};dd.prototype.isDestroyed=function(){return!1};dd.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)};dd.prototype.addHighlightRange=function(e,t,n){let i=new zk(e,t,n);return this._highlightRanges.push(i),this.resize(),i};dd.prototype.addTrack=function(e,t,n,i){let o=new Hk(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};dd.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=Q.secondsDifference(t,e),this._clock&&this._clock.clockRange!==Ss.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)};dd.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 Cie(e){return e<10?`0${e.toString()}`:e.toString()}dd.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`${aPt[t.month-1]} ${t.day} ${t.year} ${Cie(t.hour)}:${Cie(t.minute)}:${Cie(t.second)}${i}`};dd.prototype.smallestTicInPixels=7;dd.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 b=this._startJulian,f=Math.min(h/p*1e-5,.4),y,_=Q.toGregorianDate(b);h>31536e4?y=Q.fromDate(new Date(Date.UTC(Math.floor(_.year/100)*100,0))):h>31536e3?y=Q.fromDate(new Date(Date.UTC(Math.floor(_.year/10)*10,0))):h>86400?y=Q.fromDate(new Date(Date.UTC(_.year,0))):y=Q.fromDate(new Date(Date.UTC(_.year,_.month,_.day)));let S=Q.secondsDifference(this._startJulian,Q.addSeconds(y,f,new Q)),A=S+h;this._epochJulian=y;function Z(w){return Math.floor(S/w)*w}function V(w,z){return Math.ceil(w/z+.5)*z}function E(w){return(w-S)/h}function G(w,z){return w-z*Math.round(w/z)}this._rulerEle.innerHTML=this.makeLabel(Q.addSeconds(this._endJulian,-a,new Q));let v=this._rulerEle.offsetWidth+20;v<30&&(v=180);let I=u;u-=d;let X={startTime:S,startJulian:b,epochJulian:y,duration:h,timeBarWidth:p,getAlpha:E};this._highlightRanges.forEach(function(w){s+=w.render(X)});let N=0,g=0,C=0,R=v/p;R>1&&(R=1),R*=this._timeBarSecondsSpan;let L=-1,P=-1,Y=lT.length,O;for(O=0;O<Y;++O){let w=lT[O];if(++L,N=w,w>R&&w>u)break;P<0&&p*(w/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(P=L)}if(L>0){for(;L>0;)if(--L,Math.abs(G(N,lT[L]))<1e-5){lT[L]>=u&&(g=lT[L]);break}if(P>=0)for(;P<L;){if(Math.abs(G(g,lT[P]))<1e-5&&lT[P]>=u){C=lT[P];break}++P}}u=I,u>d&&C<1e-5&&Math.abs(u-N)>d&&(C=u,u<=N+d&&(g=0));let k=-999999,D;if(p*(C/this._timeBarSecondsSpan)>=3)for(o=Z(C);o<=A;o=V(o,C))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*E(o)).toString()}px;"></span>`;if(p*(g/this._timeBarSecondsSpan)>=3)for(o=Z(g);o<=A;o=V(o,g))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*E(o)).toString()}px;"></span>`;if(p*(N/this._timeBarSecondsSpan)>=2){this._mainTicSpan=N,A+=N,o=Z(N);let w=Q.computeTaiMinusUtc(y);for(;o<=A;){let z=Q.addSeconds(b,o-S,new Q);if(N>2.1){let te=Q.computeTaiMinusUtc(z);Math.abs(te-w)>.1&&(o+=te-w,z=Q.addSeconds(b,o-S,new Q))}let J=Math.round(p*E(o)),ee=this.makeLabel(z);this._rulerEle.innerHTML=ee,D=this._rulerEle.offsetWidth,D<10&&(D=v);let H=J-(D/2-1);H>k?(k=H+D+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${J.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${H.toString()}px;">${ee}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${J.toString()}px;"></span>`,o=V(o,N)}}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),X.y=0,this._trackList.forEach(function(w){w.render(r._context,X),X.y+=w.height})};dd.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)))};dd.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 cPt(e){return function(t){e._mouseMode!==yh.touchOnly&&(t.button===0?(e._mouseMode=yh.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=yh.zoom:e._mouseMode=yh.slide)),t.preventDefault()}}function lPt(e){return function(t){e._mouseMode=yh.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function dPt(e){return function(t){let n;if(e._mouseMode===yh.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===yh.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===yh.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function uPt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;Zie=Math.max(Math.min(Math.abs(n),Zie),1),n/=Zie,e.zoomFrom(Math.pow(1.05,-n))}}function mPt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=yh.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=ld.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=ld.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=ld.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=ld.ignore}}function hPt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===ld.singleTap?(e._touchMode=ld.scrub,e._onTouchMove(t)):e._touchMode===ld.scrub&&e._onTouchMove(t),e._mouseMode=yh.touchOnly,n!==1?e._touchMode=n>0?ld.ignore:ld.none:e._touchMode===ld.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function fPt(e){return function(t){let n,i,o,r,s,a,c=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===ld.singleTap&&(e._touchMode=ld.slideZoom),e._mouseMode=yh.touchOnly,e._touchMode===ld.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===ld.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))}}dd.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 Kk=dd;var m4o=x(T(),1);var r4o=x(T(),1);function UGe(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 xh(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=Ce.observable();return Ce.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=UGe(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===yc.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===yc.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===yc.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:-W.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMaxLongitudeMax",initialValue:W.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:-W.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMax",initialValue:W.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:-W.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMaxLatitudeMax",initialValue:W.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:-W.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMax",initialValue:W.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:-W.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingCylinderMaxAngleMax",initialValue:W.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:-W.PI}),n({name:"clippingCylinderMinAngleMax",initialValue:W.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&&A0(t)},getPrimitiveFunction:function(){t.translationX=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)},getPrimitiveFunction:function(){t.translationY=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)},getPrimitiveFunction:function(){t.translationZ=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)},getPrimitiveFunction:function(){t.scaleX=F.getScale(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)},getPrimitiveFunction:function(){t.scaleY=F.getScale(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)},getPrimitiveFunction:function(){t.scaleZ=F.getScale(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&A0(t)}})}var pPt=new m,bPt=new m,gPt=new Sc,yPt=new q;function A0(e){let t=m.fromElements(e.translationX,e.translationY,e.translationZ,pPt),n=m.fromElements(e.scaleX,e.scaleY,e.scaleZ,bPt),i=gPt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=q.fromHeadingPitchRoll(i,yPt),r=q.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=F.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(xh.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=UGe(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,A0(t)}}});xh.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};xh.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};xh.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};xh.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};xh.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};xh.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};xh.prototype.compileShader=function(){l(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new CA({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};xh.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};xh.prototype.isDestroyed=function(){return!1};xh.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Ce.getObservable(e,t).dispose()}),he(this)};var Jk=xh;function aH(e,t){e=Mn(e);let n=document.createElement("div"),i=new Jk(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}=jd,u=s(r,"Display","displayVisible","toggleDisplay"),h=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Clipping","clippingVisible","toggleClipping"),b=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,y=10,_=W.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,+y)),h.appendChild(c("Scale Y","scaleY",0,+y)),h.appendChild(c("Scale Z","scaleZ",0,+y)),h.appendChild(c("Heading","angleX",-_,+_)),h.appendChild(c("Pitch","angleY",-_,+_)),h.appendChild(c("Roll","angleZ",-_,+_)),Vie("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ","shapeIsBox",p),Vie("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight","shapeIsEllipsoid",p),Vie("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight","shapeIsCylinder",p);let S=document.createElement("div");b.appendChild(S);let A=document.createElement("textarea");A.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),S.className="cesium-cesiumInspector-styleEditor",S.appendChild(A);let Z=d("Compile (Ctrl+Enter)","compileShader");S.appendChild(Z);let V=document.createElement("label");V.style.display="block",V.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),S.appendChild(V),Ce.applyBindings(i,n)}Object.defineProperties(aH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});aH.prototype.isDestroyed=function(){return!1};aH.prototype.destroy=function(){return Ce.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};function Vie(e,t,n,i,o,r,s,a,c,d,u,h,p,b){let f=jd.createRangeInputWithDynamicMinMax,y=b.appendChild(document.createElement("div"));y.setAttribute("data-bind",`if: ${p}`),y.appendChild(f(e,s)),y.appendChild(f(t,a)),y.appendChild(f(n,c)),y.appendChild(f(i,d)),y.appendChild(f(o,u)),y.appendChild(f(r,h))}var jk=aH;var F4o=x(T(),1);var DGe=new de;function zGe(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function xPt(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 TPt(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 OGe(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:TPt(n),description:xPt(n),feature:n})}if(l(e.scene.globe))return APt(e,t.position)}var _Pt=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,W.EPSILON2,_Pt)),e.updateFromClock(),e.zoomTo(i,o)}}}var SPt=new m;function APt(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=BGe();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,SPt);c.position=new Ll(d)}e.selectedEntity=c},function(){e.selectedEntity===r&&(e.selectedEntity=BGe())}),r}function BGe(){return new Jo({id:"None",description:"No features found."})}function ZPt(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 b=t||!l(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${b}px`,e.forceResize()}}function po(e,t){e=Mn(e),t=t??B.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 Tf,d=new ck(c),u=!0);let h=new T9(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,b=new Nr;b.add(c.onTick,po.prototype._onTick,this);let f;if(!l(t.selectionIndicator)||t.selectionIndicator!==!1){let z=document.createElement("div");z.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(z),f=new Dk(z,p)}let y;if(!l(t.infoBox)||t.infoBox!==!1){let z=document.createElement("div");z.className="cesium-viewer-infoBoxContainer",o.appendChild(z),y=new vk(z);let J=y.viewModel;b.add(J.cameraClicked,po.prototype._onInfoBoxCameraClicked,this),b.add(J.closeClicked,po.prototype._onInfoBoxClockClicked,this)}let _=document.createElement("div");_.className="cesium-viewer-toolbar",o.appendChild(_);let S;if(!l(t.geocoder)||t.geocoder!==!1){let z=document.createElement("div");z.className="cesium-viewer-geocoderContainer",_.appendChild(z);let J;typeof t.geocoder=="string"?J=[new KA({scene:p,geocodeProviderType:t.geocoder})]:l(t.geocoder)&&typeof t.geocoder!="boolean"&&(J=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),S=new Tk({container:z,geocoderServices:J,scene:p}),b.add(S.viewModel.search.beforeExecute,po.prototype._clearObjects,this)}let A;(!l(t.homeButton)||t.homeButton!==!1)&&(A=new Ck(_,p),l(S)&&b.add(A.viewModel.command.afterExecute,function(){let z=S.viewModel;z.searchText="",z.isSearchInProgress&&z.search()}),b.add(A.viewModel.command.beforeExecute,po.prototype._clearTrackedObject,this));let Z;!a&&(!l(t.sceneModePicker)||t.sceneModePicker!==!1)&&(Z=new Yk(_,p));let V;t.projectionPicker&&(V=new Mk(_,p));let E,G;if(n){let z=t.imageryProviderViewModels??pk(),J=t.terrainProviderViewModels??bk();E=new fk(_,{globe:p.globe,imageryProviderViewModels:z,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:J,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),G=_.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}l(t.baseLayer)&&t.baseLayer!==!1&&(n&&(E.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),l(t.terrainProvider)&&(n&&(E.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),l(t.terrain)&&(n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain));let v;if(!l(t.navigationHelpButton)||t.navigationHelpButton!==!1){let z=!0;try{if(l(window.localStorage)){let J=window.localStorage.getItem("cesium-hasSeenNavHelp");l(J)&&J?z=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}v=new Ik({container:_,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??z})}let I;if(!l(t.animation)||t.animation!==!1){let z=document.createElement("div");z.className="cesium-viewer-animationContainer",o.appendChild(z),I=new uk(z,new mk(d))}let X;if(!l(t.timeline)||t.timeline!==!1){let z=document.createElement("div");z.className="cesium-viewer-timelineContainer",o.appendChild(z),X=new Kk(z,c),X.addEventListener("settime",zGe,!1),X.zoomTo(c.startTime,c.stopTime)}let N,g,C;(!l(t.fullscreenButton)||t.fullscreenButton!==!1)&&(C=document.createElement("div"),C.className="cesium-viewer-fullscreenContainer",o.appendChild(C),N=new yk(C,t.fullscreenElement),g=xc(N.viewModel,"isFullscreenEnabled",function(z){C.style.display=z?"block":"none",l(X)&&(X.container.style.right=`${C.clientWidth}px`,X.resize())}));let R,L,P;if(t.vrButton){let z=document.createElement("div");z.className="cesium-viewer-vrContainer",o.appendChild(z),R=new Bk(z,p,t.fullScreenElement),L=xc(R.viewModel,"isVREnabled",function(J){z.style.display=J?"block":"none",l(N)&&(z.style.right=`${C.clientWidth}px`),l(X)&&(X.container.style.right=`${z.clientWidth}px`,X.resize())}),P=xc(R.viewModel,"isVRMode",function(J){ZPt(i,J)})}this._baseLayerPickerDropDown=G,this._fullscreenSubscription=g,this._vrSubscription=L,this._vrModeSubscription=P,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=h,this._selectionIndicator=f,this._infoBox=y,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=_,this._homeButton=A,this._sceneModePicker=Z,this._projectionPicker=V,this._baseLayerPicker=E,this._navigationHelpButton=v,this._animation=I,this._timeline=X,this._fullscreenButton=N,this._vrButton=R,this._geocoder=S,this._eventHelper=b,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=l(y)||l(f),this._selectedEntity=void 0,this._selectedEntityChanged=new _e;let Y=this._cesiumWidget.dataSources,O=this._cesiumWidget.dataSourceDisplay;b.add(Y.dataSourceAdded,po.prototype._onDataSourceAdded,this),b.add(Y.dataSourceRemoved,po.prototype._onDataSourceRemoved,this),b.add(p.postUpdate,po.prototype.resize,this);let k=Y.length;for(let z=0;z<k;z++)this._dataSourceAdded(Y,Y.get(z));this._dataSourceAdded(void 0,O.defaultDataSource),b.add(Y.dataSourceAdded,po.prototype._dataSourceAdded,this),b.add(Y.dataSourceRemoved,po.prototype._dataSourceRemoved,this);function D(z){let J=OGe(i,z);l(J)?j.getValueOrUndefined(J.position,i.clock.currentTime)?i.trackedEntity=J:i.zoomTo(J):l(i.trackedEntity)&&(i.trackedEntity=void 0)}function w(z){i.selectedEntity=OGe(i,z)}h.screenSpaceEventHandler.setInputAction(w,Wn.LEFT_CLICK),h.screenSpaceEventHandler.setInputAction(D,Wn.LEFT_DOUBLE_CLICK),h._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(po.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))}}});po.prototype.extend=function(e,t){e(this,t)};po.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,b=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,y=this._vrButton,_=c.container,S=_.style;p=_.clientHeight+3,S.left=`${u}px`;let A=0;l(f)&&(A+=f.container.clientWidth),l(y)&&(A+=y.container.clientWidth),S.right=`${A}px`,c.resize()}!r&&l(this._fullscreenButton)&&(b=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${h}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${b}px`,this._lastWidth=n,this._lastHeight=i};po.prototype.forceResize=function(){this._lastWidth=0,this.resize()};po.prototype.render=function(){this._cesiumWidget.render()};po.prototype.isDestroyed=function(){return!1};po.prototype.destroy=function(){return l(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(Wn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(Wn.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",zGe,!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)};po.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(po.prototype._onEntityCollectionChanged,this)};po.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(po.prototype._onEntityCollectionChanged,this),l(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};po.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};po.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,DGe)!==Tt.FAILED?n=DGe.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=j.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};po.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)}};po.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)}};po.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};po.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};po.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};po.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&Rie(this.timeline,e)};po.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,po.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};po.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};po.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};po.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var Eie=po;var X4o=x(T(),1);function CPt(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new Gk(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var Gie=CPt;var w4o=x(T(),1);function VPt(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new Ak(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var Lie=VPt;var D4o=x(T(),1);function RPt(e,t){t=t??B.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new _e,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,c=t.proxy;s=Mn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){HGe(s,d),s=u,Wie(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?Wie(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){$A(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let h=u.dataTransfer.files,p=h.length;for(let b=0;b<p;b++){let f=h[b],y=new FileReader;y.onload=EPt(e,f,c,a),y.onerror=GPt(e,f),y.readAsText(f)}}Wie(s,d),e.destroy=ik(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function $A(e){e.stopPropagation(),e.preventDefault()}function HGe(e,t){let n=e;l(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",$A,!1),n.removeEventListener("dragover",$A,!1),n.removeEventListener("dragexit",$A,!1))}function Wie(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",$A,!1),e.addEventListener("dragover",$A,!1),e.addEventListener("dragexit",$A,!1)}function EPt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=wX.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=Cx.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=KS.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=NN.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 GPt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var vie=RPt;var J4o=x(T(),1);function LPt(e,t){t=t??B.EMPTY_OBJECT;let n=new Xk({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var Fie=LPt;var q4o=x(T(),1);function WPt(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new jk(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var Iie=WPt;globalThis.CESIUM_VERSION="1.140.0";var vPt="1.140.0";return nLe(FPt);})();