Optimistic sort reordering and favorite addition

This commit is contained in:
Jack Kingsman committed 2026-01-18 23:50:00 -08:00
1 parent 9c071dbc53
commit 9e86d263f7
5 files changed
+68 -41

No files matched your search

-1
View File
@@ -1 +0,0 @@
{"version":3,"mappings":"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 truncated
@@ -1,4 +1,4 @@
var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[a]=o;var Oo=(r,a,o)=>Nv(r,typeof a!="symbol"?a+"":a,o);function Lv(r,a){for(var o=0;o<a.length;o++){const l=a[o];if(typeof l!="string"&&!Array.isArray(l)){for(const d in l)if(d!=="default"&&!(d in r)){const f=Object.getOwnPropertyDescriptor(l,d);f&&Object.defineProperty(r,d,f.get?f:{enumerable:!0,get:()=>l[d]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))l(d);new MutationObserver(d=>{for(const f of d)if(f.type==="childList")for(const p of f.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&l(p)}).observe(document,{childList:!0,subtree:!0});function o(d){const f={};return d.integrity&&(f.integrity=d.integrity),d.referrerPolicy&&(f.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?f.credentials="include":d.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function l(d){if(d.ep)return;d.ep=!0;const f=o(d);fetch(d.href,f)}})();var Tf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xs(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Og(r){if(Object.prototype.hasOwnProperty.call(r,"__esModule"))return r;var a=r.default;if(typeof a=="function"){var o=function l(){return this instanceof l?Reflect.construct(a,arguments,this.constructor):a.apply(this,arguments)};o.prototype=a.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(l){var d=Object.getOwnPropertyDescriptor(r,l);Object.defineProperty(o,l,d.get?d:{enumerable:!0,get:function(){return r[l]}})}),o}var Df={exports:{}},Wa={},Rf={exports:{}},dt={};/**
var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[a]=o;var Oo=(r,a,o)=>Nv(r,typeof a!="symbol"?a+"":a,o);function Lv(r,a){for(var o=0;o<a.length;o++){const l=a[o];if(typeof l!="string"&&!Array.isArray(l)){for(const d in l)if(d!=="default"&&!(d in r)){const f=Object.getOwnPropertyDescriptor(l,d);f&&Object.defineProperty(r,d,f.get?f:{enumerable:!0,get:()=>l[d]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))l(d);new MutationObserver(d=>{for(const f of d)if(f.type==="childList")for(const p of f.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&l(p)}).observe(document,{childList:!0,subtree:!0});function o(d){const f={};return d.integrity&&(f.integrity=d.integrity),d.referrerPolicy&&(f.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?f.credentials="include":d.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function l(d){if(d.ep)return;d.ep=!0;const f=o(d);fetch(d.href,f)}})();var Tf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xs(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function Og(r){if(Object.prototype.hasOwnProperty.call(r,"__esModule"))return r;var a=r.default;if(typeof a=="function"){var o=function l(){return this instanceof l?Reflect.construct(a,arguments,this.constructor):a.apply(this,arguments)};o.prototype=a.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(r).forEach(function(l){var d=Object.getOwnPropertyDescriptor(r,l);Object.defineProperty(o,l,d.get?d:{enumerable:!0,get:function(){return r[l]}})}),o}var Df={exports:{}},Wa={},Rf={exports:{}},ft={};/**
* @license React
* react.production.min.js
*
@@ -6,7 +6,7 @@ var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Ep;function Mv(){if(Ep)return dt;Ep=1;var r=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),f=Symbol.for("react.provider"),p=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),y=Symbol.iterator;function w(B){return B===null||typeof B!="object"?null:(B=y&&B[y]||B["@@iterator"],typeof B=="function"?B:null)}var P={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},D=Object.assign,C={};function k(B,V,K){this.props=B,this.context=V,this.refs=C,this.updater=K||P}k.prototype.isReactComponent={},k.prototype.setState=function(B,V){if(typeof B!="object"&&typeof B!="function"&&B!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,B,V,"setState")},k.prototype.forceUpdate=function(B){this.updater.enqueueForceUpdate(this,B,"forceUpdate")};function R(){}R.prototype=k.prototype;function T(B,V,K){this.props=B,this.context=V,this.refs=C,this.updater=K||P}var S=T.prototype=new R;S.constructor=T,D(S,k.prototype),S.isPureReactComponent=!0;var N=Array.isArray,I=Object.prototype.hasOwnProperty,H={current:null},z={key:!0,ref:!0,__self:!0,__source:!0};function j(B,V,K){var $,ce={},de=null,Se=null;if(V!=null)for($ in V.ref!==void 0&&(Se=V.ref),V.key!==void 0&&(de=""+V.key),V)I.call(V,$)&&!z.hasOwnProperty($)&&(ce[$]=V[$]);var Ae=arguments.length-2;if(Ae===1)ce.children=K;else if(1<Ae){for(var Ue=Array(Ae),$e=0;$e<Ae;$e++)Ue[$e]=arguments[$e+2];ce.children=Ue}if(B&&B.defaultProps)for($ in Ae=B.defaultProps,Ae)ce[$]===void 0&&(ce[$]=Ae[$]);return{$$typeof:r,type:B,key:de,ref:Se,props:ce,_owner:H.current}}function J(B,V){return{$$typeof:r,type:B.type,key:V,ref:B.ref,props:B.props,_owner:B._owner}}function W(B){return typeof B=="object"&&B!==null&&B.$$typeof===r}function U(B){var V={"=":"=0",":":"=2"};return"$"+B.replace(/[=:]/g,function(K){return V[K]})}var te=/\/+/g;function X(B,V){return typeof B=="object"&&B!==null&&B.key!=null?U(""+B.key):V.toString(36)}function re(B,V,K,$,ce){var de=typeof B;(de==="undefined"||de==="boolean")&&(B=null);var Se=!1;if(B===null)Se=!0;else switch(de){case"string":case"number":Se=!0;break;case"object":switch(B.$$typeof){case r:case a:Se=!0}}if(Se)return Se=B,ce=ce(Se),B=$===""?"."+X(Se,0):$,N(ce)?(K="",B!=null&&(K=B.replace(te,"$&/")+"/"),re(ce,V,K,"",function($e){return $e})):ce!=null&&(W(ce)&&(ce=J(ce,K+(!ce.key||Se&&Se.key===ce.key?"":(""+ce.key).replace(te,"$&/")+"/")+B)),V.push(ce)),1;if(Se=0,$=$===""?".":$+":",N(B))for(var Ae=0;Ae<B.length;Ae++){de=B[Ae];var Ue=$+X(de,Ae);Se+=re(de,V,K,Ue,ce)}else if(Ue=w(B),typeof Ue=="function")for(B=Ue.call(B),Ae=0;!(de=B.next()).done;)de=de.value,Ue=$+X(de,Ae++),Se+=re(de,V,K,Ue,ce);else if(de==="object")throw V=String(B),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(B).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.");return Se}function fe(B,V,K){if(B==null)return B;var $=[],ce=0;return re(B,$,"","",function(de){return V.call(K,de,ce++)}),$}function ae(B){if(B._status===-1){var V=B._result;V=V(),V.then(function(K){(B._status===0||B._status===-1)&&(B._status=1,B._result=K)},function(K){(B._status===0||B._status===-1)&&(B._status=2,B._result=K)}),B._status===-1&&(B._status=0,B._result=V)}if(B._status===1)return B._result.default;throw B._result}var he={current:null},G={transition:null},pe={ReactCurrentDispatcher:he,ReactCurrentBatchConfig:G,ReactCurrentOwner:H};function Z(){throw Error("act(...) is not supported in production builds of React.")}return dt.Children={map:fe,forEach:function(B,V,K){fe(B,function(){V.apply(this,arguments)},K)},count:function(B){var V=0;return fe(B,function(){V++}),V},toArray:function(B){return fe(B,function(V){return V})||[]},only:function(B){if(!W(B))throw Error("React.Children.only expected to receive a single React element child.");return B}},dt.Component=k,dt.Fragment=o,dt.Profiler=d,dt.PureComponent=T,dt.StrictMode=l,dt.Suspense=g,dt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=pe,dt.act=Z,dt.cloneElement=function(B,V,K){if(B==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+B+".");var $=D({},B.props),ce=B.key,de=B.ref,Se=B._owner;if(V!=null){if(V.ref!==void 0&&(de=V.ref,Se=H.current),V.key!==void 0&&(ce=""+V.key),B.type&&B.type.defaultProps)var Ae=B.type.defaultProps;for(Ue in V)I.call(V,Ue)&&!z.hasOwnProperty(Ue)&&($[Ue]=V[Ue]===void 0&&Ae!==void 0?Ae[Ue]:V[Ue])}var Ue=arguments.length-2;if(Ue===1)$.children=K;else if(1<Ue){Ae=Array(Ue);for(var $e=0;$e<Ue;$e++)Ae[$e]=arguments[$e+2];$.children=Ae}return{$$typeof:r,type:B.type,key:ce,ref:de,props:$,_owner:Se}},dt.creLine truncated
*/var Ep;function Mv(){if(Ep)return ft;Ep=1;var r=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),f=Symbol.for("react.provider"),p=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),y=Symbol.iterator;function w(B){return B===null||typeof B!="object"?null:(B=y&&B[y]||B["@@iterator"],typeof B=="function"?B:null)}var P={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},D=Object.assign,C={};function k(B,V,K){this.props=B,this.context=V,this.refs=C,this.updater=K||P}k.prototype.isReactComponent={},k.prototype.setState=function(B,V){if(typeof B!="object"&&typeof B!="function"&&B!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,B,V,"setState")},k.prototype.forceUpdate=function(B){this.updater.enqueueForceUpdate(this,B,"forceUpdate")};function R(){}R.prototype=k.prototype;function T(B,V,K){this.props=B,this.context=V,this.refs=C,this.updater=K||P}var S=T.prototype=new R;S.constructor=T,D(S,k.prototype),S.isPureReactComponent=!0;var N=Array.isArray,I=Object.prototype.hasOwnProperty,H={current:null},z={key:!0,ref:!0,__self:!0,__source:!0};function j(B,V,K){var $,ce={},de=null,Se=null;if(V!=null)for($ in V.ref!==void 0&&(Se=V.ref),V.key!==void 0&&(de=""+V.key),V)I.call(V,$)&&!z.hasOwnProperty($)&&(ce[$]=V[$]);var Ae=arguments.length-2;if(Ae===1)ce.children=K;else if(1<Ae){for(var Ue=Array(Ae),Ye=0;Ye<Ae;Ye++)Ue[Ye]=arguments[Ye+2];ce.children=Ue}if(B&&B.defaultProps)for($ in Ae=B.defaultProps,Ae)ce[$]===void 0&&(ce[$]=Ae[$]);return{$$typeof:r,type:B,key:de,ref:Se,props:ce,_owner:H.current}}function J(B,V){return{$$typeof:r,type:B.type,key:V,ref:B.ref,props:B.props,_owner:B._owner}}function W(B){return typeof B=="object"&&B!==null&&B.$$typeof===r}function U(B){var V={"=":"=0",":":"=2"};return"$"+B.replace(/[=:]/g,function(K){return V[K]})}var ne=/\/+/g;function Y(B,V){return typeof B=="object"&&B!==null&&B.key!=null?U(""+B.key):V.toString(36)}function re(B,V,K,$,ce){var de=typeof B;(de==="undefined"||de==="boolean")&&(B=null);var Se=!1;if(B===null)Se=!0;else switch(de){case"string":case"number":Se=!0;break;case"object":switch(B.$$typeof){case r:case a:Se=!0}}if(Se)return Se=B,ce=ce(Se),B=$===""?"."+Y(Se,0):$,N(ce)?(K="",B!=null&&(K=B.replace(ne,"$&/")+"/"),re(ce,V,K,"",function(Ye){return Ye})):ce!=null&&(W(ce)&&(ce=J(ce,K+(!ce.key||Se&&Se.key===ce.key?"":(""+ce.key).replace(ne,"$&/")+"/")+B)),V.push(ce)),1;if(Se=0,$=$===""?".":$+":",N(B))for(var Ae=0;Ae<B.length;Ae++){de=B[Ae];var Ue=$+Y(de,Ae);Se+=re(de,V,K,Ue,ce)}else if(Ue=w(B),typeof Ue=="function")for(B=Ue.call(B),Ae=0;!(de=B.next()).done;)de=de.value,Ue=$+Y(de,Ae++),Se+=re(de,V,K,Ue,ce);else if(de==="object")throw V=String(B),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(B).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.");return Se}function fe(B,V,K){if(B==null)return B;var $=[],ce=0;return re(B,$,"","",function(de){return V.call(K,de,ce++)}),$}function ae(B){if(B._status===-1){var V=B._result;V=V(),V.then(function(K){(B._status===0||B._status===-1)&&(B._status=1,B._result=K)},function(K){(B._status===0||B._status===-1)&&(B._status=2,B._result=K)}),B._status===-1&&(B._status=0,B._result=V)}if(B._status===1)return B._result.default;throw B._result}var he={current:null},G={transition:null},me={ReactCurrentDispatcher:he,ReactCurrentBatchConfig:G,ReactCurrentOwner:H};function Z(){throw Error("act(...) is not supported in production builds of React.")}return ft.Children={map:fe,forEach:function(B,V,K){fe(B,function(){V.apply(this,arguments)},K)},count:function(B){var V=0;return fe(B,function(){V++}),V},toArray:function(B){return fe(B,function(V){return V})||[]},only:function(B){if(!W(B))throw Error("React.Children.only expected to receive a single React element child.");return B}},ft.Component=k,ft.Fragment=o,ft.Profiler=d,ft.PureComponent=T,ft.StrictMode=l,ft.Suspense=g,ft.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=me,ft.act=Z,ft.cloneElement=function(B,V,K){if(B==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+B+".");var $=D({},B.props),ce=B.key,de=B.ref,Se=B._owner;if(V!=null){if(V.ref!==void 0&&(de=V.ref,Se=H.current),V.key!==void 0&&(ce=""+V.key),B.type&&B.type.defaultProps)var Ae=B.type.defaultProps;for(Ue in V)I.call(V,Ue)&&!z.hasOwnProperty(Ue)&&($[Ue]=V[Ue]===void 0&&Ae!==void 0?Ae[Ue]:V[Ue])}var Ue=arguments.length-2;if(Ue===1)$.children=K;else if(1<Ue){Ae=Array(Ue);for(var Ye=0;Ye<Ue;Ye++)Ae[Ye]=arguments[Ye+2];$.children=Ae}return{$$typeof:r,type:B.type,key:ce,ref:de,props:$,_owner:Se}},ft.creLine truncated
* @license React
* react-jsx-runtime.production.min.js
*
@@ -14,7 +14,7 @@ var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Sp;function Iv(){if(Sp)return Wa;Sp=1;var r=m0(),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,d=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,f={key:!0,ref:!0,__self:!0,__source:!0};function p(h,g,m){var v,y={},w=null,P=null;m!==void 0&&(w=""+m),g.key!==void 0&&(w=""+g.key),g.ref!==void 0&&(P=g.ref);for(v in g)l.call(g,v)&&!f.hasOwnProperty(v)&&(y[v]=g[v]);if(h&&h.defaultProps)for(v in g=h.defaultProps,g)y[v]===void 0&&(y[v]=g[v]);return{$$typeof:a,type:h,key:w,ref:P,props:y,_owner:d.current}}return Wa.Fragment=o,Wa.jsx=p,Wa.jsxs=p,Wa}var Bp;function Ov(){return Bp||(Bp=1,Df.exports=Iv()),Df.exports}var b=Ov(),F=m0();const Ee=Xs(F),g0=Lv({__proto__:null,default:Ee},[F]);var Pu={},Ff={exports:{}},Zn={},Nf={exports:{}},Lf={};/**
*/var Sp;function Iv(){if(Sp)return Wa;Sp=1;var r=m0(),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,d=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,f={key:!0,ref:!0,__self:!0,__source:!0};function p(h,g,m){var v,y={},w=null,P=null;m!==void 0&&(w=""+m),g.key!==void 0&&(w=""+g.key),g.ref!==void 0&&(P=g.ref);for(v in g)l.call(g,v)&&!f.hasOwnProperty(v)&&(y[v]=g[v]);if(h&&h.defaultProps)for(v in g=h.defaultProps,g)y[v]===void 0&&(y[v]=g[v]);return{$$typeof:a,type:h,key:w,ref:P,props:y,_owner:d.current}}return Wa.Fragment=o,Wa.jsx=p,Wa.jsxs=p,Wa}var Bp;function Ov(){return Bp||(Bp=1,Df.exports=Iv()),Df.exports}var b=Ov(),F=m0();const Ee=Xs(F),g0=Lv({__proto__:null,default:Ee},[F]);var Tu={},Ff={exports:{}},Zn={},Nf={exports:{}},Lf={};/**
* @license React
* scheduler.production.min.js
*
@@ -22,7 +22,7 @@ var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Pp;function jv(){return Pp||(Pp=1,(function(r){function a(G,pe){var Z=G.length;G.push(pe);e:for(;0<Z;){var B=Z-1>>>1,V=G[B];if(0<d(V,pe))G[B]=pe,G[Z]=V,Z=B;else break e}}function o(G){return G.length===0?null:G[0]}function l(G){if(G.length===0)return null;var pe=G[0],Z=G.pop();if(Z!==pe){G[0]=Z;e:for(var B=0,V=G.length,K=V>>>1;B<K;){var $=2*(B+1)-1,ce=G[$],de=$+1,Se=G[de];if(0>d(ce,Z))de<V&&0>d(Se,ce)?(G[B]=Se,G[de]=Z,B=de):(G[B]=ce,G[$]=Z,B=$);else if(de<V&&0>d(Se,Z))G[B]=Se,G[de]=Z,B=de;else break e}}return pe}function d(G,pe){var Z=G.sortIndex-pe.sortIndex;return Z!==0?Z:G.id-pe.id}if(typeof performance=="object"&&typeof performance.now=="function"){var f=performance;r.unstable_now=function(){return f.now()}}else{var p=Date,h=p.now();r.unstable_now=function(){return p.now()-h}}var g=[],m=[],v=1,y=null,w=3,P=!1,D=!1,C=!1,k=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function S(G){for(var pe=o(m);pe!==null;){if(pe.callback===null)l(m);else if(pe.startTime<=G)l(m),pe.sortIndex=pe.expirationTime,a(g,pe);else break;pe=o(m)}}function N(G){if(C=!1,S(G),!D)if(o(g)!==null)D=!0,ae(I);else{var pe=o(m);pe!==null&&he(N,pe.startTime-G)}}function I(G,pe){D=!1,C&&(C=!1,R(j),j=-1),P=!0;var Z=w;try{for(S(pe),y=o(g);y!==null&&(!(y.expirationTime>pe)||G&&!U());){var B=y.callback;if(typeof B=="function"){y.callback=null,w=y.priorityLevel;var V=B(y.expirationTime<=pe);pe=r.unstable_now(),typeof V=="function"?y.callback=V:y===o(g)&&l(g),S(pe)}else l(g);y=o(g)}if(y!==null)var K=!0;else{var $=o(m);$!==null&&he(N,$.startTime-pe),K=!1}return K}finally{y=null,w=Z,P=!1}}var H=!1,z=null,j=-1,J=5,W=-1;function U(){return!(r.unstable_now()-W<J)}function te(){if(z!==null){var G=r.unstable_now();W=G;var pe=!0;try{pe=z(!0,G)}finally{pe?X():(H=!1,z=null)}}else H=!1}var X;if(typeof T=="function")X=function(){T(te)};else if(typeof MessageChannel<"u"){var re=new MessageChannel,fe=re.port2;re.port1.onmessage=te,X=function(){fe.postMessage(null)}}else X=function(){k(te,0)};function ae(G){z=G,H||(H=!0,X())}function he(G,pe){j=k(function(){G(r.unstable_now())},pe)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(G){G.callback=null},r.unstable_continueExecution=function(){D||P||(D=!0,ae(I))},r.unstable_forceFrameRate=function(G){0>G||125<G?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):J=0<G?Math.floor(1e3/G):5},r.unstable_getCurrentPriorityLevel=function(){return w},r.unstable_getFirstCallbackNode=function(){return o(g)},r.unstable_next=function(G){switch(w){case 1:case 2:case 3:var pe=3;break;default:pe=w}var Z=w;w=pe;try{return G()}finally{w=Z}},r.unstable_pauseExecution=function(){},r.unstable_requestPaint=function(){},r.unstable_runWithPriority=function(G,pe){switch(G){case 1:case 2:case 3:case 4:case 5:break;default:G=3}var Z=w;w=G;try{return pe()}finally{w=Z}},r.unstable_scheduleCallback=function(G,pe,Z){var B=r.unstable_now();switch(typeof Z=="object"&&Z!==null?(Z=Z.delay,Z=typeof Z=="number"&&0<Z?B+Z:B):Z=B,G){case 1:var V=-1;break;case 2:V=250;break;case 5:V=1073741823;break;case 4:V=1e4;break;default:V=5e3}return V=Z+V,G={id:v++,callback:pe,priorityLevel:G,startTime:Z,expirationTime:V,sortIndex:-1},Z>B?(G.sortIndex=Z,a(m,G),o(g)===null&&G===o(m)&&(C?(R(j),j=-1):C=!0,he(N,Z-B))):(G.sortIndex=V,a(g,G),D||P||(D=!0,ae(I))),G},r.unstable_shouldYield=U,r.unstable_wrapCallback=function(G){var pe=w;return function(){var Z=w;w=pe;try{return G.apply(this,arguments)}finally{w=Z}}}})(Lf)),Lf}var Tp;function zv(){return Tp||(Tp=1,Nf.exports=jv()),Nf.exports}/**
*/var Pp;function jv(){return Pp||(Pp=1,(function(r){function a(G,me){var Z=G.length;G.push(me);e:for(;0<Z;){var B=Z-1>>>1,V=G[B];if(0<d(V,me))G[B]=me,G[Z]=V,Z=B;else break e}}function o(G){return G.length===0?null:G[0]}function l(G){if(G.length===0)return null;var me=G[0],Z=G.pop();if(Z!==me){G[0]=Z;e:for(var B=0,V=G.length,K=V>>>1;B<K;){var $=2*(B+1)-1,ce=G[$],de=$+1,Se=G[de];if(0>d(ce,Z))de<V&&0>d(Se,ce)?(G[B]=Se,G[de]=Z,B=de):(G[B]=ce,G[$]=Z,B=$);else if(de<V&&0>d(Se,Z))G[B]=Se,G[de]=Z,B=de;else break e}}return me}function d(G,me){var Z=G.sortIndex-me.sortIndex;return Z!==0?Z:G.id-me.id}if(typeof performance=="object"&&typeof performance.now=="function"){var f=performance;r.unstable_now=function(){return f.now()}}else{var p=Date,h=p.now();r.unstable_now=function(){return p.now()-h}}var g=[],m=[],v=1,y=null,w=3,P=!1,D=!1,C=!1,k=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function S(G){for(var me=o(m);me!==null;){if(me.callback===null)l(m);else if(me.startTime<=G)l(m),me.sortIndex=me.expirationTime,a(g,me);else break;me=o(m)}}function N(G){if(C=!1,S(G),!D)if(o(g)!==null)D=!0,ae(I);else{var me=o(m);me!==null&&he(N,me.startTime-G)}}function I(G,me){D=!1,C&&(C=!1,R(j),j=-1),P=!0;var Z=w;try{for(S(me),y=o(g);y!==null&&(!(y.expirationTime>me)||G&&!U());){var B=y.callback;if(typeof B=="function"){y.callback=null,w=y.priorityLevel;var V=B(y.expirationTime<=me);me=r.unstable_now(),typeof V=="function"?y.callback=V:y===o(g)&&l(g),S(me)}else l(g);y=o(g)}if(y!==null)var K=!0;else{var $=o(m);$!==null&&he(N,$.startTime-me),K=!1}return K}finally{y=null,w=Z,P=!1}}var H=!1,z=null,j=-1,J=5,W=-1;function U(){return!(r.unstable_now()-W<J)}function ne(){if(z!==null){var G=r.unstable_now();W=G;var me=!0;try{me=z(!0,G)}finally{me?Y():(H=!1,z=null)}}else H=!1}var Y;if(typeof T=="function")Y=function(){T(ne)};else if(typeof MessageChannel<"u"){var re=new MessageChannel,fe=re.port2;re.port1.onmessage=ne,Y=function(){fe.postMessage(null)}}else Y=function(){k(ne,0)};function ae(G){z=G,H||(H=!0,Y())}function he(G,me){j=k(function(){G(r.unstable_now())},me)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(G){G.callback=null},r.unstable_continueExecution=function(){D||P||(D=!0,ae(I))},r.unstable_forceFrameRate=function(G){0>G||125<G?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):J=0<G?Math.floor(1e3/G):5},r.unstable_getCurrentPriorityLevel=function(){return w},r.unstable_getFirstCallbackNode=function(){return o(g)},r.unstable_next=function(G){switch(w){case 1:case 2:case 3:var me=3;break;default:me=w}var Z=w;w=me;try{return G()}finally{w=Z}},r.unstable_pauseExecution=function(){},r.unstable_requestPaint=function(){},r.unstable_runWithPriority=function(G,me){switch(G){case 1:case 2:case 3:case 4:case 5:break;default:G=3}var Z=w;w=G;try{return me()}finally{w=Z}},r.unstable_scheduleCallback=function(G,me,Z){var B=r.unstable_now();switch(typeof Z=="object"&&Z!==null?(Z=Z.delay,Z=typeof Z=="number"&&0<Z?B+Z:B):Z=B,G){case 1:var V=-1;break;case 2:V=250;break;case 5:V=1073741823;break;case 4:V=1e4;break;default:V=5e3}return V=Z+V,G={id:v++,callback:me,priorityLevel:G,startTime:Z,expirationTime:V,sortIndex:-1},Z>B?(G.sortIndex=Z,a(m,G),o(g)===null&&G===o(m)&&(C?(R(j),j=-1):C=!0,he(N,Z-B))):(G.sortIndex=V,a(g,G),D||P||(D=!0,ae(I))),G},r.unstable_shouldYield=U,r.unstable_wrapCallback=function(G){var me=w;return function(){var Z=w;w=me;try{return G.apply(this,arguments)}finally{w=Z}}}})(Lf)),Lf}var Tp;function zv(){return Tp||(Tp=1,Nf.exports=jv()),Nf.exports}/**
* @license React
* react-dom.production.min.js
*
@@ -30,20 +30,20 @@ var Fv=Object.defineProperty;var Nv=(r,a,o)=>a in r?Fv(r,a,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Dp;function Hv(){if(Dp)return Zn;Dp=1;var r=m0(),a=zv();function o(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,s=1;s<arguments.length;s++)n+="&args[]="+encodeURIComponent(arguments[s]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var l=new Set,d={};function f(e,n){p(e,n),p(e+"Capture",n)}function p(e,n){for(d[e]=n,e=0;e<n.length;e++)l.add(n[e])}var h=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),g=Object.prototype.hasOwnProperty,m=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,v={},y={};function w(e){return g.call(y,e)?!0:g.call(v,e)?!1:m.test(e)?y[e]=!0:(v[e]=!0,!1)}function P(e,n,s,c){if(s!==null&&s.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return c?!1:s!==null?!s.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function D(e,n,s,c){if(n===null||typeof n>"u"||P(e,n,s,c))return!0;if(c)return!1;if(s!==null)switch(s.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function C(e,n,s,c,x,_,M){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=c,this.attributeNamespace=x,this.mustUseProperty=s,this.propertyName=e,this.type=n,this.sanitizeURL=_,this.removeEmptyString=M}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new C(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];k[n]=new C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new C(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){k[e]=new C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var R=/[\-:]([a-z])/g;function T(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function S(e,n,s,c){var x=k.hasOwnProperty(n)?k[n]:null;(x!==null?x.type!==0:c||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!= Line truncated
*/var Dp;function Hv(){if(Dp)return Zn;Dp=1;var r=m0(),a=zv();function o(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,s=1;s<arguments.length;s++)n+="&args[]="+encodeURIComponent(arguments[s]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var l=new Set,d={};function f(e,n){p(e,n),p(e+"Capture",n)}function p(e,n){for(d[e]=n,e=0;e<n.length;e++)l.add(n[e])}var h=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),g=Object.prototype.hasOwnProperty,m=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,v={},y={};function w(e){return g.call(y,e)?!0:g.call(v,e)?!1:m.test(e)?y[e]=!0:(v[e]=!0,!1)}function P(e,n,s,c){if(s!==null&&s.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return c?!1:s!==null?!s.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function D(e,n,s,c){if(n===null||typeof n>"u"||P(e,n,s,c))return!0;if(c)return!1;if(s!==null)switch(s.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function C(e,n,s,c,x,_,M){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=c,this.attributeNamespace=x,this.mustUseProperty=s,this.propertyName=e,this.type=n,this.sanitizeURL=_,this.removeEmptyString=M}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new C(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];k[n]=new C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new C(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){k[e]=new C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var R=/[\-:]([a-z])/g;function T(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(R,T);k[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function S(e,n,s,c){var x=k.hasOwnProperty(n)?k[n]:null;(x!==null?x.type!==0:c||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!= Line truncated
`+B+e}var K=!1;function $(e,n){if(!e||K)return"";K=!0;var s=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(n,[])}catch(ue){var c=ue}Reflect.construct(e,[],n)}else{try{n.call()}catch(ue){c=ue}e.call(n.prototype)}else{try{throw Error()}catch(ue){c=ue}e()}}catch(ue){if(ue&&c&&typeof ue.stack=="string"){for(var x=ue.stack.split(`
`),_=c.stack.split(`
`),M=x.length-1,q=_.length-1;1<=M&&0<=q&&x[M]!==_[q];)q--;for(;1<=M&&0<=q;M--,q--)if(x[M]!==_[q]){if(M!==1||q!==1)do if(M--,q--,0>q||x[M]!==_[q]){var Y=`
`+x[M].replace(" at new "," at ");return e.displayName&&Y.includes("<anonymous>")&&(Y=Y.replace("<anonymous>",e.displayName)),Y}while(1<=M&&0<=q);break}}}finally{K=!1,Error.prepareStackTrace=s}return(e=e?e.displayName||e.name:"")?V(e):""}function ce(e){switch(e.tag){case 5:return V(e.type);case 16:return V("Lazy");case 13:return V("Suspense");case 19:return V("SuspenseList");case 0:case 2:case 15:return e=$(e.type,!1),e;case 11:return e=$(e.type.render,!1),e;case 1:return e=$(e.type,!0),e;default:return""}}function de(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case z:return"Fragment";case H:return"Portal";case J:return"Profiler";case j:return"StrictMode";case X:return"Suspense";case re:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case U:return(e.displayName||"Context")+".Consumer";case W:return(e._context.displayName||"Context")+".Provider";case te:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case fe:return n=e.displayName||null,n!==null?n:de(e.type)||"Memo";case ae:n=e._payload,e=e._init;try{return de(e(n))}catch{}}return null}function Se(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return de(n);case 8:return n===j?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Ae(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ue(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function $e(e){var n=Ue(e)?"checked":"value",s=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),c=""+e[n];if(!e.hasOwnProperty(n)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var x=s.get,_=s.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return x.call(this)},set:function(M){c=""+M,_.call(this,M)}}),Object.defineProperty(e,n,{enumerable:s.enumerable}),{getValue:function(){return c},setValue:function(M){c=""+M},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function bt(e){e._valueTracker||(e._valueTracker=$e(e))}function ut(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var s=n.getValue(),c="";return e&&(c=Ue(e)?e.checked?"true":"false":e.value),e=c,e!==s?(n.setValue(e),!0):!1}function Be(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ze(e,n){var s=n.checked;return Z({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:s??e._wrapperState.initialChecked})}function ct(e,n){var s=n.defaultValue==null?"":n.defaultValue,c=n.checked!=null?n.checked:n.defaultChecked;s=Ae(n.value!=null?n.value:s),e._wrapperState={initialChecked:c,initialValue:s,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Mt(e,n){n=n.checked,n!=null&&S(e,"checked",n,!1)}function st(e,n){Mt(e,n);var s=Ae(n.value),c=n.type;if(s!=null)c==="number"?(s===0&&e.value===""||e.value!=s)&&(e.value=""+s):e.value!==""+s&&(e.value=""+s);else if(c==="submit"||c==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?qe(e,n.type,s):n.hasOwnProperty("defaultValue")&&qe(e,n.type,Ae(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function gt(e,n,s){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var c=n.type;if(!(c!=="submit"&&c!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,s||n===e.value||(e.value=n),e.defaultValue=n}s=e.name,s!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,s!==""&&(e.name=s)}function qe(e,n,s){(n!=="number"||Be(e.ownerDocument)!==e)&&(s==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+s&&(e.defaultValue=""+s))}var et=Array.isArray;function tt(e,n,s,c){if(e=e.options,n){n={};for(var x=0;x<s.length;x++)n["$"+s[x]]=!0;for(s=0;s<e.length;s++)x=n.hasOwnProperty("$"+e[s].value),e[s].selected!==x&&(e[s].selected=x),x&&c&&(e[s].defaultSelected=!0)}else{for(s=""+Ae(s),n=null,x=0;x<e.length;x++){if(e[x].value===s){e[x].selected=!0,c&&(e[x].defaultSelected=!0);return}n!==null||e[x].disabled||(n=e[x])}n!==null&&(n.selected=!0)}}function He(e,n){if(n.dangerouslySetInnerHTM Line truncated
`).replace(Q,"")}function le(e,n,s){if(n=ie(n),ie(e)!==n&&s)throw Error(o(425))}function xe(){}var Pe=null,We=null;function rt(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var sn=typeof setTimeout=="function"?setTimeout:void 0,nn=typeof clearTimeout=="function"?clearTimeout:void 0,Fn=typeof Promise=="function"?Promise:void 0,bn=typeof queueMicrotask=="function"?queueMicrotask:typeof Fn<"u"?function(e){return Fn.resolve(null).then(e).catch(qi)}:sn;function qi(e){setTimeout(function(){throw e})}function Ta(e,n){var s=n,c=0;do{var x=s.nextSibling;if(e.removeChild(s),x&&x.nodeType===8)if(s=x.data,s==="/$"){if(c===0){e.removeChild(x),Yn(n);return}c--}else s!=="$"&&s!=="$?"&&s!=="$!"||c++;s=x}while(s);Yn(n)}function Zr(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function Zl(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var s=e.data;if(s==="$"||s==="$!"||s==="$?"){if(n===0)return e;n--}else s==="/$"&&n++}e=e.previousSibling}return null}var ci=Math.random().toString(36).slice(2),fr="__reactFiber$"+ci,Gi="__reactProps$"+ci,kt="__reactContainer$"+ci,Ki="__reactEvents$"+ci,Cd="__reactListeners$"+ci,Ed="__reactHandles$"+ci;function di(e){var n=e[fr];if(n)return n;for(var s=e.parentNode;s;){if(n=s[kt]||s[fr]){if(s=n.alternate,n.child!==null||s!==null&&s.child!==null)for(e=Zl(e);e!==null;){if(s=e[fr])return s;e=Zl(e)}return n}e=s,s=e.parentNode}return null}function fi(e){return e=e[fr]||e[kt],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function hi(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(o(33))}function Cs(e){return e[Gi]||null}var kd=[],Es=-1;function Qi(e){return{current:e}}function Ot(e){0>Es||(e.current=kd[Es],kd[Es]=null,Es--)}function Lt(e,n){Es++,kd[Es]=e.current,e.current=n}var $i={},Cn=Qi($i),jn=Qi(!1),So=$i;function ks(e,n){var s=e.type.contextTypes;if(!s)return $i;var c=e.stateNode;if(c&&c.__reactInternalMemoizedUnmaskedChildContext===n)return c.__reactInternalMemoizedMaskedChildContext;var x={},_;for(_ in s)x[_]=n[_];return c&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=x),x}function zn(e){return e=e.childContextTypes,e!=null}function Wl(){Ot(jn),Ot(Cn)}function G0(e,n,s){if(Cn.current!==$i)throw Error(o(168));Lt(Cn,n),Lt(jn,s)}function K0(e,n,s){var c=e.stateNode;if(n=n.childContextTypes,typeof c.getChildContext!="function")return s;c=c.getChildContext();for(var x in c)if(!(x in n))throw Error(o(108,Se(e)||"Unknown",x));return Z({},s,c)}function ql(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$i,So=Cn.current,Lt(Cn,e),Lt(jn,jn.current),!0}function Q0(e,n,s){var c=e.stateNode;if(!c)throw Error(o(169));s?(e=K0(e,n,So),c.__reactInternalMemoizedMergedChildContext=e,Ot(jn),Ot(Cn),Lt(Cn,e)):Ot(jn),Lt(jn,s)}var pi=null,Gl=!1,Sd=!1;function $0(e){pi===null?pi=[e]:pi.push(e)}function Xx(e){Gl=!0,$0(e)}function Yi(){if(!Sd&&pi!==null){Sd=!0;var e=0,n=At;try{var s=pi;for(At=1;e<s.length;e++){var c=s[e];do c=c(!0);while(c!==null)}pi=null,Gl=!1}catch(x){throw pi!==null&&(pi=pi.slice(e+1)),yl(oa,Yi),x}finally{At=n,Sd=!1}}return null}var Ss=[],Bs=0,Kl=null,Ql=0,hr=[],pr=0,Bo=null,mi=1,gi="";function Po(e,n){Ss[Bs++]=Ql,Ss[Bs++]=Kl,Kl=e,Ql=n}function Y0(e,n,s){hr[pr++]=mi,hr[pr++]=gi,hr[pr++]=Bo,Bo=e;var c=mi;e=gi;var x=32-nt(c)-1;c&=~(1<<x),s+=1;var _=32-nt(n)+x;if(30<_){var M=x-x%5;_=(c&(1<<M)-1).toString(32),c>>=M,x-=M,mi=1<<32-nt(n)+x|s<<x|c,gi=_+e}else mi=1<<_|s<<x|c,gi=e}function Bd(e){e.return!==null&&(Po(e,1),Y0(e,1,0))}function Pd(e){for(;e===Kl;)Kl=Ss[--Bs],Ss[Bs]=null,Ql=Ss[--Bs],Ss[Bs]=null;for(;e===Bo;)Bo=hr[--pr],hr[pr]=null,gi=hr[--pr],hr[pr]=null,mi=hr[--pr],hr[pr]=null}var nr=null,rr=null,Vt=!1,kr=null;function X0(e,n){var s=xr(5,null,null,0);s.elementType="DELETED",s.stateNode=n,s.return=e,n=e.deletions,n===null?(e.deletions=[s],e.flags|=16):n.push(s)}function J0(e,n){switch(e.tag){case 5:var s=e.type;return n=n.nodeType!==1||s.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,nr=e,rr=Zr(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,nr=e,rr=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(s=Bo!==null?{id:mi,overflow:gi}:null,e.memoizedState={dehydrated:n,treeContext:s,retryLane:1073741824},s=xr(18,null,null,0),s.stateNode=n,s.return=e,e.child=s,nr=e,rr=null,!0):!1;default:return!1}}function Td(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Dd(e){if(Vt){var n=rr;if(n){var s=n;if(!J0(e,n)){if(Td(e))throw Error(o(418));n=Zr(s.nextSibling);var c=nr;n&&J0(e,n)?X0(c,s):(e.flags=e.flags&-4097|2,Vt=!1,nr=e)}}else{if(Td(e))throw Error(o(418));e.flags=e.flags&-4097|2,Vt=!1,nr=e}}}function eh(e){for(e=e.r Line truncated
`),M=x.length-1,q=_.length-1;1<=M&&0<=q&&x[M]!==_[q];)q--;for(;1<=M&&0<=q;M--,q--)if(x[M]!==_[q]){if(M!==1||q!==1)do if(M--,q--,0>q||x[M]!==_[q]){var X=`
`+x[M].replace(" at new "," at ");return e.displayName&&X.includes("<anonymous>")&&(X=X.replace("<anonymous>",e.displayName)),X}while(1<=M&&0<=q);break}}}finally{K=!1,Error.prepareStackTrace=s}return(e=e?e.displayName||e.name:"")?V(e):""}function ce(e){switch(e.tag){case 5:return V(e.type);case 16:return V("Lazy");case 13:return V("Suspense");case 19:return V("SuspenseList");case 0:case 2:case 15:return e=$(e.type,!1),e;case 11:return e=$(e.type.render,!1),e;case 1:return e=$(e.type,!0),e;default:return""}}function de(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case z:return"Fragment";case H:return"Portal";case J:return"Profiler";case j:return"StrictMode";case Y:return"Suspense";case re:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case U:return(e.displayName||"Context")+".Consumer";case W:return(e._context.displayName||"Context")+".Provider";case ne:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case fe:return n=e.displayName||null,n!==null?n:de(e.type)||"Memo";case ae:n=e._payload,e=e._init;try{return de(e(n))}catch{}}return null}function Se(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return de(n);case 8:return n===j?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Ae(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ue(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Ye(e){var n=Ue(e)?"checked":"value",s=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),c=""+e[n];if(!e.hasOwnProperty(n)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var x=s.get,_=s.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return x.call(this)},set:function(M){c=""+M,_.call(this,M)}}),Object.defineProperty(e,n,{enumerable:s.enumerable}),{getValue:function(){return c},setValue:function(M){c=""+M},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function bt(e){e._valueTracker||(e._valueTracker=Ye(e))}function ct(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var s=n.getValue(),c="";return e&&(c=Ue(e)?e.checked?"true":"false":e.value),e=c,e!==s?(n.setValue(e),!0):!1}function Be(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ze(e,n){var s=n.checked;return Z({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:s??e._wrapperState.initialChecked})}function dt(e,n){var s=n.defaultValue==null?"":n.defaultValue,c=n.checked!=null?n.checked:n.defaultChecked;s=Ae(n.value!=null?n.value:s),e._wrapperState={initialChecked:c,initialValue:s,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Mt(e,n){n=n.checked,n!=null&&S(e,"checked",n,!1)}function at(e,n){Mt(e,n);var s=Ae(n.value),c=n.type;if(s!=null)c==="number"?(s===0&&e.value===""||e.value!=s)&&(e.value=""+s):e.value!==""+s&&(e.value=""+s);else if(c==="submit"||c==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?qe(e,n.type,s):n.hasOwnProperty("defaultValue")&&qe(e,n.type,Ae(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function gt(e,n,s){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var c=n.type;if(!(c!=="submit"&&c!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,s||n===e.value||(e.value=n),e.defaultValue=n}s=e.name,s!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,s!==""&&(e.name=s)}function qe(e,n,s){(n!=="number"||Be(e.ownerDocument)!==e)&&(s==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+s&&(e.defaultValue=""+s))}var tt=Array.isArray;function nt(e,n,s,c){if(e=e.options,n){n={};for(var x=0;x<s.length;x++)n["$"+s[x]]=!0;for(s=0;s<e.length;s++)x=n.hasOwnProperty("$"+e[s].value),e[s].selected!==x&&(e[s].selected=x),x&&c&&(e[s].defaultSelected=!0)}else{for(s=""+Ae(s),n=null,x=0;x<e.length;x++){if(e[x].value===s){e[x].selected=!0,c&&(e[x].defaultSelected=!0);return}n!==null||e[x].disabled||(n=e[x])}n!==null&&(n.selected=!0)}}function He(e,n){if(n.dangerouslySetInnerHTM Line truncated
`).replace(Q,"")}function le(e,n,s){if(n=ie(n),ie(e)!==n&&s)throw Error(o(425))}function xe(){}var Pe=null,We=null;function it(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var sn=typeof setTimeout=="function"?setTimeout:void 0,nn=typeof clearTimeout=="function"?clearTimeout:void 0,Fn=typeof Promise=="function"?Promise:void 0,bn=typeof queueMicrotask=="function"?queueMicrotask:typeof Fn<"u"?function(e){return Fn.resolve(null).then(e).catch(qi)}:sn;function qi(e){setTimeout(function(){throw e})}function Ta(e,n){var s=n,c=0;do{var x=s.nextSibling;if(e.removeChild(s),x&&x.nodeType===8)if(s=x.data,s==="/$"){if(c===0){e.removeChild(x),Yn(n);return}c--}else s!=="$"&&s!=="$?"&&s!=="$!"||c++;s=x}while(s);Yn(n)}function Zr(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function Wl(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var s=e.data;if(s==="$"||s==="$!"||s==="$?"){if(n===0)return e;n--}else s==="/$"&&n++}e=e.previousSibling}return null}var ci=Math.random().toString(36).slice(2),fr="__reactFiber$"+ci,Gi="__reactProps$"+ci,kt="__reactContainer$"+ci,Ki="__reactEvents$"+ci,Cd="__reactListeners$"+ci,Ed="__reactHandles$"+ci;function di(e){var n=e[fr];if(n)return n;for(var s=e.parentNode;s;){if(n=s[kt]||s[fr]){if(s=n.alternate,n.child!==null||s!==null&&s.child!==null)for(e=Wl(e);e!==null;){if(s=e[fr])return s;e=Wl(e)}return n}e=s,s=e.parentNode}return null}function fi(e){return e=e[fr]||e[kt],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function hi(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(o(33))}function Es(e){return e[Gi]||null}var kd=[],ks=-1;function Qi(e){return{current:e}}function Ot(e){0>ks||(e.current=kd[ks],kd[ks]=null,ks--)}function Lt(e,n){ks++,kd[ks]=e.current,e.current=n}var $i={},Cn=Qi($i),jn=Qi(!1),So=$i;function Ss(e,n){var s=e.type.contextTypes;if(!s)return $i;var c=e.stateNode;if(c&&c.__reactInternalMemoizedUnmaskedChildContext===n)return c.__reactInternalMemoizedMaskedChildContext;var x={},_;for(_ in s)x[_]=n[_];return c&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=x),x}function zn(e){return e=e.childContextTypes,e!=null}function ql(){Ot(jn),Ot(Cn)}function G0(e,n,s){if(Cn.current!==$i)throw Error(o(168));Lt(Cn,n),Lt(jn,s)}function K0(e,n,s){var c=e.stateNode;if(n=n.childContextTypes,typeof c.getChildContext!="function")return s;c=c.getChildContext();for(var x in c)if(!(x in n))throw Error(o(108,Se(e)||"Unknown",x));return Z({},s,c)}function Gl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$i,So=Cn.current,Lt(Cn,e),Lt(jn,jn.current),!0}function Q0(e,n,s){var c=e.stateNode;if(!c)throw Error(o(169));s?(e=K0(e,n,So),c.__reactInternalMemoizedMergedChildContext=e,Ot(jn),Ot(Cn),Lt(Cn,e)):Ot(jn),Lt(jn,s)}var pi=null,Kl=!1,Sd=!1;function $0(e){pi===null?pi=[e]:pi.push(e)}function Xx(e){Kl=!0,$0(e)}function Yi(){if(!Sd&&pi!==null){Sd=!0;var e=0,n=At;try{var s=pi;for(At=1;e<s.length;e++){var c=s[e];do c=c(!0);while(c!==null)}pi=null,Kl=!1}catch(x){throw pi!==null&&(pi=pi.slice(e+1)),_l(oa,Yi),x}finally{At=n,Sd=!1}}return null}var Bs=[],Ps=0,Ql=null,$l=0,hr=[],pr=0,Bo=null,mi=1,gi="";function Po(e,n){Bs[Ps++]=$l,Bs[Ps++]=Ql,Ql=e,$l=n}function Y0(e,n,s){hr[pr++]=mi,hr[pr++]=gi,hr[pr++]=Bo,Bo=e;var c=mi;e=gi;var x=32-rt(c)-1;c&=~(1<<x),s+=1;var _=32-rt(n)+x;if(30<_){var M=x-x%5;_=(c&(1<<M)-1).toString(32),c>>=M,x-=M,mi=1<<32-rt(n)+x|s<<x|c,gi=_+e}else mi=1<<_|s<<x|c,gi=e}function Bd(e){e.return!==null&&(Po(e,1),Y0(e,1,0))}function Pd(e){for(;e===Ql;)Ql=Bs[--Ps],Bs[Ps]=null,$l=Bs[--Ps],Bs[Ps]=null;for(;e===Bo;)Bo=hr[--pr],hr[pr]=null,gi=hr[--pr],hr[pr]=null,mi=hr[--pr],hr[pr]=null}var nr=null,rr=null,Vt=!1,kr=null;function X0(e,n){var s=xr(5,null,null,0);s.elementType="DELETED",s.stateNode=n,s.return=e,n=e.deletions,n===null?(e.deletions=[s],e.flags|=16):n.push(s)}function J0(e,n){switch(e.tag){case 5:var s=e.type;return n=n.nodeType!==1||s.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,nr=e,rr=Zr(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,nr=e,rr=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(s=Bo!==null?{id:mi,overflow:gi}:null,e.memoizedState={dehydrated:n,treeContext:s,retryLane:1073741824},s=xr(18,null,null,0),s.stateNode=n,s.return=e,e.child=s,nr=e,rr=null,!0):!1;default:return!1}}function Td(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Dd(e){if(Vt){var n=rr;if(n){var s=n;if(!J0(e,n)){if(Td(e))throw Error(o(418));n=Zr(s.nextSibling);var c=nr;n&&J0(e,n)?X0(c,s):(e.flags=e.flags&-4097|2,Vt=!1,nr=e)}}else{if(Td(e))throw Error(o(418));e.flags=e.flags&-4097|2,Vt=!1,nr=e}}}function eh(e){for(e=e.r Line truncated
Error generating stack: `+_.message+`
`+_.stack}return{value:e,source:n,stack:x,digest:null}}function Jd(e,n,s){return{value:e,source:null,stack:s??null,digest:n??null}}function ef(e,n){try{console.error(n.value)}catch(s){setTimeout(function(){throw s})}}var av=typeof WeakMap=="function"?WeakMap:Map;function Nh(e,n,s){s=xi(-1,s),s.tag=3,s.payload={element:null};var c=n.value;return s.callback=function(){mu||(mu=!0,gf=c),ef(e,n)},s}function Lh(e,n,s){s=xi(-1,s),s.tag=3;var c=e.type.getDerivedStateFromError;if(typeof c=="function"){var x=n.value;s.payload=function(){return c(x)},s.callback=function(){ef(e,n)}}var _=e.stateNode;return _!==null&&typeof _.componentDidCatch=="function"&&(s.callback=function(){ef(e,n),typeof c!="function"&&(to===null?to=new Set([this]):to.add(this));var M=n.stack;this.componentDidCatch(n.value,{componentStack:M!==null?M:""})}),s}function Mh(e,n,s){var c=e.pingCache;if(c===null){c=e.pingCache=new av;var x=new Set;c.set(n,x)}else x=c.get(n),x===void 0&&(x=new Set,c.set(n,x));x.has(s)||(x.add(s),e=_v.bind(null,e,n,s),n.then(e,e))}function Ih(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function Oh(e,n,s,c,x){return(e.mode&1)===0?(e===n?e.flags|=65536:(e.flags|=128,s.flags|=131072,s.flags&=-52805,s.tag===1&&(s.alternate===null?s.tag=17:(n=xi(-1,1),n.tag=2,Ji(s,n,1))),s.lanes|=1),e):(e.flags|=65536,e.lanes=x,e)}var lv=N.ReactCurrentOwner,Hn=!1;function Nn(e,n,s,c){n.child=e===null?ih(n,null,s,c):Ts(n,e.child,s,c)}function jh(e,n,s,c,x){s=s.render;var _=n.ref;return Rs(n,x),c=Wd(e,n,s,c,_,x),s=qd(),e!==null&&!Hn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,vi(e,n,x)):(Vt&&s&&Bd(n),n.flags|=1,Nn(e,n,c,x),n.child)}function zh(e,n,s,c,x){if(e===null){var _=s.type;return typeof _=="function"&&!bf(_)&&_.defaultProps===void 0&&s.compare===null&&s.defaultProps===void 0?(n.tag=15,n.type=_,Hh(e,n,_,c,x)):(e=_u(s.type,null,c,n,n.mode,x),e.ref=n.ref,e.return=n,n.child=e)}if(_=e.child,(e.lanes&x)===0){var M=_.memoizedProps;if(s=s.compare,s=s!==null?s:Hr,s(M,c)&&e.ref===n.ref)return vi(e,n,x)}return n.flags|=1,e=oo(_,c),e.ref=n.ref,e.return=n,n.child=e}function Hh(e,n,s,c,x){if(e!==null){var _=e.memoizedProps;if(Hr(_,c)&&e.ref===n.ref)if(Hn=!1,n.pendingProps=c=_,(e.lanes&x)!==0)(e.flags&131072)!==0&&(Hn=!0);else return n.lanes=e.lanes,vi(e,n,x)}return tf(e,n,s,c,x)}function Vh(e,n,s){var c=n.pendingProps,x=c.children,_=e!==null?e.memoizedState:null;if(c.mode==="hidden")if((n.mode&1)===0)n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Lt(Ms,ir),ir|=s;else{if((s&1073741824)===0)return e=_!==null?_.baseLanes|s:s,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Lt(Ms,ir),ir|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},c=_!==null?_.baseLanes:s,Lt(Ms,ir),ir|=c}else _!==null?(c=_.baseLanes|s,n.memoizedState=null):c=s,Lt(Ms,ir),ir|=c;return Nn(e,n,x,s),n.child}function Uh(e,n){var s=n.ref;(e===null&&s!==null||e!==null&&e.ref!==s)&&(n.flags|=512,n.flags|=2097152)}function tf(e,n,s,c,x){var _=zn(s)?So:Cn.current;return _=ks(n,_),Rs(n,x),s=Wd(e,n,s,c,_,x),c=qd(),e!==null&&!Hn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,vi(e,n,x)):(Vt&&c&&Bd(n),n.flags|=1,Nn(e,n,s,x),n.child)}function Zh(e,n,s,c,x){if(zn(s)){var _=!0;ql(n)}else _=!1;if(Rs(n,x),n.stateNode===null)cu(e,n),Rh(n,s,c),Xd(n,s,c,x),c=!0;else if(e===null){var M=n.stateNode,q=n.memoizedProps;M.props=q;var Y=M.context,ue=s.contextType;typeof ue=="object"&&ue!==null?ue=mr(ue):(ue=zn(s)?So:Cn.current,ue=ks(n,ue));var ye=s.getDerivedStateFromProps,we=typeof ye=="function"||typeof M.getSnapshotBeforeUpdate=="function";we||typeof M.UNSAFE_componentWillReceiveProps!="function"&&typeof M.componentWillReceiveProps!="function"||(q!==c||Y!==ue)&&Fh(n,M,c,ue),Xi=!1;var ve=n.memoizedState;M.state=ve,tu(n,c,M,x),Y=n.memoizedState,q!==c||ve!==Y||jn.current||Xi?(typeof ye=="function"&&(Yd(n,s,ye,c),Y=n.memoizedState),(q=Xi||Dh(n,s,q,c,ve,Y,ue))?(we||typeof M.UNSAFE_componentWillMount!="function"&&typeof M.componentWillMount!="function"||(typeof M.componentWillMount=="function"&&M.componentWillMount(),typeof M.UNSAFE_componentWillMount=="function"&&M.UNSAFE_componentWillMount()),typeof M.componentDidMount=="function"&&(n.flags|=4194308)):(typeof M.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=c,n.memoizedState=Y),M.props=c,M.state=Y,M.context=ue,c=q):(typeof M.componentDidMount=="function"&&(n.flags|=4194308),c=!1)}else{M=n.stateNode,sh(e,n),q=n.memoizedProps,ue=n.type===n.elementType?q:Sr(n.type,q),M.props=ue,we=n.pendingProps,ve=M.context,Y=s.contextType,typeof Y=="object"&&Y!==null?Y=mr(Y):(Y=zn(s)?So:Cn.current,Y=ks(n,Y));var Re=s.getDerivedStateFromProps;(ye=typeof Re=="function"||typeof M.getSnapshotBeforeUpdate=="function")||typeof M.UNSAFE_componentWillReceiveProps!="function"&&typeof M.componentWillReceiveProps!="function"||(q!==we||ve!==Y)&&Fh(n,M,c,Y),Xi=!1,ve=n.m Line truncated
`)}function js(r,a,o){const l=Math.floor(Date.now()/1e3);return{id:-Date.now(),type:"PRIV",conversation_key:r,text:a,sender_timestamp:l,received_at:l,paths:null,txt_type:0,signature:null,outgoing:o,acked:1}}function Qv(r){const a=F.useRef(null),o=F.useRef(null),l=F.useCallback(()=>{o.current!==null&&(clearInterval(o.current),o.current=null),a.current=null},[]),d=F.useCallback(async()=>{const p=a.current;if(!p)return;let h=null,g=null;for(let m=0;m<2;m++)try{h=await Je.requestTelemetry(p.conversationId,"");break}catch(v){g=v instanceof Error?v:new Error("Unknown error"),m===0&&await new Promise(y=>setTimeout(y,2e3))}if(h){const m=js(p.conversationId,Kv(p,h),!1);r(v=>[...v,m])}else{const m=js(p.conversationId,`Duty cycle poll failed after retry: ${(g==null?void 0:g.message)??"Unknown error"}`,!1);r(v=>[...v,m])}},[r]),f=F.useCallback(async(p,h)=>{const g=p.trim().toLowerCase();if(g==="dutycycle_start"){l();let m=null,v=null;for(let P=0;P<2;P++)try{m=await Je.requestTelemetry(h,"");break}catch(D){v=D instanceof Error?D:new Error("Unknown error"),P===0&&await new Promise(C=>setTimeout(C,2e3))}if(!m){const P=js(h,`Failed to start duty cycle tracking after retry: ${(v==null?void 0:v.message)??"Unknown error"}`,!1);return r(D=>[...D,P]),!0}const y=Math.floor(Date.now()/1e3);a.current={startTime:y,uptime:m.uptime_seconds,txAirtime:m.airtime_seconds,rxAirtime:m.rx_airtime_seconds,sentFlood:m.sent_flood,sentDirect:m.sent_direct,recvFlood:m.recv_flood,recvDirect:m.recv_direct,conversationId:h};const w=js(h,`Airtime/duty cycle statistics gathering begins at ${y}. Logs will follow every 5 minutes. To stop, run dutycycle_stop or navigate away from this conversation.`,!1);return r(P=>[...P,w]),o.current=window.setInterval(d,qv),!0}if(g==="dutycycle_stop"){if(a.current&&a.current.conversationId===h){await d(),l();const m=js(h,"Airtime/duty cycle statistics gathering stopped.",!1);r(v=>[...v,m])}else{const m=js(h,"Duty cycle tracking is not active.",!1);r(v=>[...v,m])}return!0}return!1},[r,l,d]);return F.useEffect(()=>()=>{o.current!==null&&clearInterval(o.current)},[]),{handleAirtimeCommand:f,stopTracking:l}}function Hu(r){if(r<60)return`${r}s`;const a=Math.floor(r/86400),o=Math.floor(r%86400/3600),l=Math.floor(r%3600/60);return a>0?o>0&&l>0?`${a}d${o}h${l}m`:o>0?`${a}d${o}h`:l>0?`${a}d${l}m`:`${a}d`:o>0?l>0?`${o}h${l}m`:`${o}h`:`${l}m`}function $v(r){return["Telemetry",`Battery Voltage: ${r.battery_volts.toFixed(3)}V`,`Uptime: ${Hu(r.uptime_seconds)}`,`TX Airtime: ${Hu(r.airtime_seconds)}`,`RX Airtime: ${Hu(r.rx_airtime_seconds)}`,"",`Noise Floor: ${r.noise_floor_dbm} dBm`,`Last RSSI: ${r.last_rssi_dbm} dBm`,`Last SNR: ${r.last_snr_db.toFixed(1)} dB`,"",`Packets: ${r.packets_received.toLocaleString()} rx / ${r.packets_sent.toLocaleString()} tx`,`Flood: ${r.recv_flood.toLocaleString()} rx / ${r.sent_flood.toLocaleString()} tx`,`Direct: ${r.recv_direct.toLocaleString()} rx / ${r.sent_direct.toLocaleString()} tx`,`Duplicates: ${r.flood_dups.toLocaleString()} flood / ${r.direct_dups.toLocaleString()} direct`,"",`TX Queue: ${r.tx_queue_len}`,`Debug Flags: ${r.full_events}`].join(`
`+_.stack}return{value:e,source:n,stack:x,digest:null}}function Jd(e,n,s){return{value:e,source:null,stack:s??null,digest:n??null}}function ef(e,n){try{console.error(n.value)}catch(s){setTimeout(function(){throw s})}}var av=typeof WeakMap=="function"?WeakMap:Map;function Nh(e,n,s){s=xi(-1,s),s.tag=3,s.payload={element:null};var c=n.value;return s.callback=function(){gu||(gu=!0,gf=c),ef(e,n)},s}function Lh(e,n,s){s=xi(-1,s),s.tag=3;var c=e.type.getDerivedStateFromError;if(typeof c=="function"){var x=n.value;s.payload=function(){return c(x)},s.callback=function(){ef(e,n)}}var _=e.stateNode;return _!==null&&typeof _.componentDidCatch=="function"&&(s.callback=function(){ef(e,n),typeof c!="function"&&(to===null?to=new Set([this]):to.add(this));var M=n.stack;this.componentDidCatch(n.value,{componentStack:M!==null?M:""})}),s}function Mh(e,n,s){var c=e.pingCache;if(c===null){c=e.pingCache=new av;var x=new Set;c.set(n,x)}else x=c.get(n),x===void 0&&(x=new Set,c.set(n,x));x.has(s)||(x.add(s),e=_v.bind(null,e,n,s),n.then(e,e))}function Ih(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function Oh(e,n,s,c,x){return(e.mode&1)===0?(e===n?e.flags|=65536:(e.flags|=128,s.flags|=131072,s.flags&=-52805,s.tag===1&&(s.alternate===null?s.tag=17:(n=xi(-1,1),n.tag=2,Ji(s,n,1))),s.lanes|=1),e):(e.flags|=65536,e.lanes=x,e)}var lv=N.ReactCurrentOwner,Hn=!1;function Nn(e,n,s,c){n.child=e===null?ih(n,null,s,c):Ds(n,e.child,s,c)}function jh(e,n,s,c,x){s=s.render;var _=n.ref;return Fs(n,x),c=Wd(e,n,s,c,_,x),s=qd(),e!==null&&!Hn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,vi(e,n,x)):(Vt&&s&&Bd(n),n.flags|=1,Nn(e,n,c,x),n.child)}function zh(e,n,s,c,x){if(e===null){var _=s.type;return typeof _=="function"&&!bf(_)&&_.defaultProps===void 0&&s.compare===null&&s.defaultProps===void 0?(n.tag=15,n.type=_,Hh(e,n,_,c,x)):(e=wu(s.type,null,c,n,n.mode,x),e.ref=n.ref,e.return=n,n.child=e)}if(_=e.child,(e.lanes&x)===0){var M=_.memoizedProps;if(s=s.compare,s=s!==null?s:Hr,s(M,c)&&e.ref===n.ref)return vi(e,n,x)}return n.flags|=1,e=oo(_,c),e.ref=n.ref,e.return=n,n.child=e}function Hh(e,n,s,c,x){if(e!==null){var _=e.memoizedProps;if(Hr(_,c)&&e.ref===n.ref)if(Hn=!1,n.pendingProps=c=_,(e.lanes&x)!==0)(e.flags&131072)!==0&&(Hn=!0);else return n.lanes=e.lanes,vi(e,n,x)}return tf(e,n,s,c,x)}function Vh(e,n,s){var c=n.pendingProps,x=c.children,_=e!==null?e.memoizedState:null;if(c.mode==="hidden")if((n.mode&1)===0)n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Lt(Is,ir),ir|=s;else{if((s&1073741824)===0)return e=_!==null?_.baseLanes|s:s,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Lt(Is,ir),ir|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},c=_!==null?_.baseLanes:s,Lt(Is,ir),ir|=c}else _!==null?(c=_.baseLanes|s,n.memoizedState=null):c=s,Lt(Is,ir),ir|=c;return Nn(e,n,x,s),n.child}function Uh(e,n){var s=n.ref;(e===null&&s!==null||e!==null&&e.ref!==s)&&(n.flags|=512,n.flags|=2097152)}function tf(e,n,s,c,x){var _=zn(s)?So:Cn.current;return _=Ss(n,_),Fs(n,x),s=Wd(e,n,s,c,_,x),c=qd(),e!==null&&!Hn?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~x,vi(e,n,x)):(Vt&&c&&Bd(n),n.flags|=1,Nn(e,n,s,x),n.child)}function Zh(e,n,s,c,x){if(zn(s)){var _=!0;Gl(n)}else _=!1;if(Fs(n,x),n.stateNode===null)du(e,n),Rh(n,s,c),Xd(n,s,c,x),c=!0;else if(e===null){var M=n.stateNode,q=n.memoizedProps;M.props=q;var X=M.context,ue=s.contextType;typeof ue=="object"&&ue!==null?ue=mr(ue):(ue=zn(s)?So:Cn.current,ue=Ss(n,ue));var ye=s.getDerivedStateFromProps,we=typeof ye=="function"||typeof M.getSnapshotBeforeUpdate=="function";we||typeof M.UNSAFE_componentWillReceiveProps!="function"&&typeof M.componentWillReceiveProps!="function"||(q!==c||X!==ue)&&Fh(n,M,c,ue),Xi=!1;var ve=n.memoizedState;M.state=ve,nu(n,c,M,x),X=n.memoizedState,q!==c||ve!==X||jn.current||Xi?(typeof ye=="function"&&(Yd(n,s,ye,c),X=n.memoizedState),(q=Xi||Dh(n,s,q,c,ve,X,ue))?(we||typeof M.UNSAFE_componentWillMount!="function"&&typeof M.componentWillMount!="function"||(typeof M.componentWillMount=="function"&&M.componentWillMount(),typeof M.UNSAFE_componentWillMount=="function"&&M.UNSAFE_componentWillMount()),typeof M.componentDidMount=="function"&&(n.flags|=4194308)):(typeof M.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=c,n.memoizedState=X),M.props=c,M.state=X,M.context=ue,c=q):(typeof M.componentDidMount=="function"&&(n.flags|=4194308),c=!1)}else{M=n.stateNode,sh(e,n),q=n.memoizedProps,ue=n.type===n.elementType?q:Sr(n.type,q),M.props=ue,we=n.pendingProps,ve=M.context,X=s.contextType,typeof X=="object"&&X!==null?X=mr(X):(X=zn(s)?So:Cn.current,X=Ss(n,X));var Fe=s.getDerivedStateFromProps;(ye=typeof Fe=="function"||typeof M.getSnapshotBeforeUpdate=="function")||typeof M.UNSAFE_componentWillReceiveProps!="function"&&typeof M.componentWillReceiveProps!="function"||(q!==we||ve!==X)&&Fh(n,M,c,X),Xi=!1,ve=n.m Line truncated
`)}function zs(r,a,o){const l=Math.floor(Date.now()/1e3);return{id:-Date.now(),type:"PRIV",conversation_key:r,text:a,sender_timestamp:l,received_at:l,paths:null,txt_type:0,signature:null,outgoing:o,acked:1}}function Qv(r){const a=F.useRef(null),o=F.useRef(null),l=F.useCallback(()=>{o.current!==null&&(clearInterval(o.current),o.current=null),a.current=null},[]),d=F.useCallback(async()=>{const p=a.current;if(!p)return;let h=null,g=null;for(let m=0;m<2;m++)try{h=await et.requestTelemetry(p.conversationId,"");break}catch(v){g=v instanceof Error?v:new Error("Unknown error"),m===0&&await new Promise(y=>setTimeout(y,2e3))}if(h){const m=zs(p.conversationId,Kv(p,h),!1);r(v=>[...v,m])}else{const m=zs(p.conversationId,`Duty cycle poll failed after retry: ${(g==null?void 0:g.message)??"Unknown error"}`,!1);r(v=>[...v,m])}},[r]),f=F.useCallback(async(p,h)=>{const g=p.trim().toLowerCase();if(g==="dutycycle_start"){l();let m=null,v=null;for(let P=0;P<2;P++)try{m=await et.requestTelemetry(h,"");break}catch(D){v=D instanceof Error?D:new Error("Unknown error"),P===0&&await new Promise(C=>setTimeout(C,2e3))}if(!m){const P=zs(h,`Failed to start duty cycle tracking after retry: ${(v==null?void 0:v.message)??"Unknown error"}`,!1);return r(D=>[...D,P]),!0}const y=Math.floor(Date.now()/1e3);a.current={startTime:y,uptime:m.uptime_seconds,txAirtime:m.airtime_seconds,rxAirtime:m.rx_airtime_seconds,sentFlood:m.sent_flood,sentDirect:m.sent_direct,recvFlood:m.recv_flood,recvDirect:m.recv_direct,conversationId:h};const w=zs(h,`Airtime/duty cycle statistics gathering begins at ${y}. Logs will follow every 5 minutes. To stop, run dutycycle_stop or navigate away from this conversation.`,!1);return r(P=>[...P,w]),o.current=window.setInterval(d,qv),!0}if(g==="dutycycle_stop"){if(a.current&&a.current.conversationId===h){await d(),l();const m=zs(h,"Airtime/duty cycle statistics gathering stopped.",!1);r(v=>[...v,m])}else{const m=zs(h,"Duty cycle tracking is not active.",!1);r(v=>[...v,m])}return!0}return!1},[r,l,d]);return F.useEffect(()=>()=>{o.current!==null&&clearInterval(o.current)},[]),{handleAirtimeCommand:f,stopTracking:l}}function Vu(r){if(r<60)return`${r}s`;const a=Math.floor(r/86400),o=Math.floor(r%86400/3600),l=Math.floor(r%3600/60);return a>0?o>0&&l>0?`${a}d${o}h${l}m`:o>0?`${a}d${o}h`:l>0?`${a}d${l}m`:`${a}d`:o>0?l>0?`${o}h${l}m`:`${o}h`:`${l}m`}function $v(r){return["Telemetry",`Battery Voltage: ${r.battery_volts.toFixed(3)}V`,`Uptime: ${Vu(r.uptime_seconds)}`,`TX Airtime: ${Vu(r.airtime_seconds)}`,`RX Airtime: ${Vu(r.rx_airtime_seconds)}`,"",`Noise Floor: ${r.noise_floor_dbm} dBm`,`Last RSSI: ${r.last_rssi_dbm} dBm`,`Last SNR: ${r.last_snr_db.toFixed(1)} dB`,"",`Packets: ${r.packets_received.toLocaleString()} rx / ${r.packets_sent.toLocaleString()} tx`,`Flood: ${r.recv_flood.toLocaleString()} rx / ${r.sent_flood.toLocaleString()} tx`,`Direct: ${r.recv_direct.toLocaleString()} rx / ${r.sent_direct.toLocaleString()} tx`,`Duplicates: ${r.flood_dups.toLocaleString()} flood / ${r.direct_dups.toLocaleString()} direct`,"",`TX Queue: ${r.tx_queue_len}`,`Debug Flags: ${r.full_events}`].join(`
`)}function Yv(r){if(r.length===0)return`Neighbors
No neighbors reported`;const a=[...r].sort((l,d)=>d.snr-l.snr),o=[`Neighbors (${a.length})`];for(const l of a){const d=l.name||l.pubkey_prefix,f=l.snr>=0?`+${l.snr.toFixed(1)}`:l.snr.toFixed(1);o.push(`${d}, ${f} dB [${Hu(l.last_heard_seconds)} ago]`)}return o.join(`
No neighbors reported`;const a=[...r].sort((l,d)=>d.snr-l.snr),o=[`Neighbors (${a.length})`];for(const l of a){const d=l.name||l.pubkey_prefix,f=l.snr>=0?`+${l.snr.toFixed(1)}`:l.snr.toFixed(1);o.push(`${d}, ${f} dB [${Vu(l.last_heard_seconds)} ago]`)}return o.join(`
`)}function Xv(r){if(r.length===0)return`ACL
No ACL entries`;const a=[`ACL (${r.length})`];for(const o of r){const l=o.name||o.pubkey_prefix;a.push(`${l}: ${o.permission_name}`)}return a.join(`
`)}function jo(r,a,o,l=0){const d=Math.floor(Date.now()/1e3);return{id:-Date.now()-l,type:"PRIV",conversation_key:r,text:a,sender_timestamp:d,received_at:d,paths:null,txt_type:0,signature:null,outgoing:o,acked:1}}function Jv(r,a,o){const[l,d]=F.useState(!1),{handleAirtimeCommand:f,stopTracking:p}=Qv(o);F.useEffect(()=>{d(!1),p()},[r==null?void 0:r.id,p]);const h=F.useMemo(()=>{if(!r||r.type!=="contact")return!1;const v=a.find(y=>y.public_key===r.id);return(v==null?void 0:v.type)===jc},[r,a]),g=F.useCallback(async v=>{if(!(!r||r.type!=="contact")&&h)try{const y=await Je.requestTelemetry(r.id,v),w=jo(r.id,$v(y),!1,0),P=jo(r.id,Yv(y.neighbors),!1,1),D=jo(r.id,Xv(y.acl),!1,2);o(C=>[...C,w,P,D]),d(!0)}catch(y){const w=jo(r.id,`Telemetry request failed: ${y instanceof Error?y.message:"Unknown error"}`,!1,0);o(P=>[...P,w])}},[r,h,o]),m=F.useCallback(async v=>{if(!r||r.type!=="contact"||!h||!l||await f(v,r.id))return;const w=jo(r.id,`> ${v}`,!0,0);o(P=>[...P,w]);try{const P=await Je.sendRepeaterCommand(r.id,v),D=jo(r.id,P.response,!1,1);P.sender_timestamp&&(D.sender_timestamp=P.sender_timestamp),o(C=>[...C,D])}catch(P){const D=jo(r.id,`Command failed: ${P instanceof Error?P.message:"Unknown error"}`,!1,1);o(C=>[...C,D])}},[r,h,l,o,f]);return{repeaterLoggedIn:l,activeContactIsRepeater:h,handleTelemetryRequest:g,handleRepeaterCommand:m}}const ey=12;function Ks(r){return r.slice(0,ey)}function zc(r,a){return!r||!a?!1:Ks(r)===Ks(a)}function Ei(r,a){return r||Ks(a)}const zg="remoteterm-lastMessageTime",Hg="remoteterm-sortOrder";let Dc={};function Lp(r){Dc={...r}}function Mp(){return{...Dc}}function Mf(r,a){return Dc[r]=a,{...Dc}}function Rr(r,a){return r==="channel"?`channel-${a}`:`contact-${Ks(a)}`}function ty(){try{const r=localStorage.getItem(zg);return r?JSON.parse(r):{}}catch{return{}}}function ny(){try{return localStorage.getItem(Hg)==="alpha"?"alpha":"recent"}catch{return"recent"}}function Ip(){try{localStorage.removeItem(zg),localStorage.removeItem(Hg)}catch{}}function Op(r,a){if(!a)return!1;const o=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`@\\[${o}\\]`,"i").test(r)}function ry(r,a,o,l=null){const[d,f]=F.useState({}),[p,h]=F.useState({}),[g,m]=F.useState(Mp),v=F.useRef(l);F.useEffect(()=>{v.current=l},[l]);const y=F.useRef(new Set),w=F.useRef(new Set);F.useEffect(()=>{const R=r.filter(N=>!y.current.has(N.key)),T=a.filter(N=>N.public_key&&!w.current.has(N.public_key));if(R.length===0&&T.length===0)return;R.forEach(N=>y.current.add(N.key)),T.forEach(N=>w.current.add(N.public_key)),(async()=>{const N=[...R.map(I=>({type:"CHAN",conversation_key:I.key})),...T.map(I=>({type:"PRIV",conversation_key:I.public_key}))];if(N.length!==0)try{const I=await Je.getMessagesBulk(N,A0),H={},z={},j={};for(const J of R){const W=I[`CHAN:${J.key}`]||[];if(W.length>0){const U=Rr("channel",J.key),te=J.last_read_at||0,X=W.filter(fe=>!fe.outgoing&&fe.received_at>te);X.length>0&&(H[U]=X.length,X.some(fe=>Op(fe.text,v.current))&&(z[U]=!0));const re=Math.max(...W.map(fe=>fe.received_at));j[U]=re,Mf(U,re)}}for(const J of T){const W=I[`PRIV:${J.public_key}`]||[];if(W.length>0){const U=Rr("contact",J.public_key),te=J.last_read_at||0,X=W.filter(fe=>!fe.outgoing&&fe.received_at>te);X.length>0&&(H[U]=X.length,X.some(fe=>Op(fe.text,v.current))&&(z[U]=!0));const re=Math.max(...W.map(fe=>fe.received_at));j[U]=re,Mf(U,re)}}Object.keys(H).length>0&&f(J=>({...J,...H})),Object.keys(z).length>0&&h(J=>({...J,...z})),m(Mp())}catch(I){console.error("Failed to fetch messages bulk:",I)}})()},[r,a]),F.useEffect(()=>{if(o&&o.type!=="raw"&&o.type!=="map"){const R=Rr(o.type,o.id);f(T=>{if(T[R]){const S={...T};return delete S[R],S}return T}),h(T=>{if(T[R]){const S={...T};return delete S[R],S}return T}),o.type==="channel"?Je.markChannelRead(o.id).catch(T=>{console.error("Failed to mark channel as read on server:",T)}):o.type==="contact"&&Je.markContactRead(o.id).catch(T=>{console.error("Failed to mark contact as read on server:",T)})}},[o]);const P=F.useCallback((R,T)=>{f(S=>({...S,[R]:(S[R]||0)+1})),T&&h(S=>({...S,[R]:!0}))},[]),D=F.useCallback(()=>{f({}),h({}),Je.markAllRead().catch(R=>{console.error("Failed to mark all as read on server:",R)})},[]),C=F.useCallback(R=>{if(R.type==="raw"||R.type==="map")return;const T=Rr(R.type,R.id);f(S=>{if(S[T]){const N={...S};return delete N[T],N}return S}),h(S=>{if(S[T]){const N={...S};return delete N[T],N}return S}),R.type==="channel"?Je.markChannelRead(R.id).catch(S=>{console.error("Failed to mark channel as read on server:",S)}):R.type==="contact"&&Je.markContactRead(R.id).catch(S=>{console.error("Failed to mark contact as read on server:",S)})},[]),k=F.useCallback(R=>{let T=null;if(R.type==="CHAN"&&R.conversation_key?T=Rr("channel",R.conversation_key):R.type==="PRIV"&&R.conversation_key&&(T=Rr("contact",R.conversation_key)),T){const S=R.received_at||Math.floor(Date.now()/1e3),N=Mf(T,S);m(N)}},[]);return{unreadCounts:d,mentions:p,lastMessageTimes:g,incrementUnread:P,markAllRead:D,markConversationRead:C,trac Line truncated
`)}function jo(r,a,o,l=0){const d=Math.floor(Date.now()/1e3);return{id:-Date.now()-l,type:"PRIV",conversation_key:r,text:a,sender_timestamp:d,received_at:d,paths:null,txt_type:0,signature:null,outgoing:o,acked:1}}function Jv(r,a,o){const[l,d]=F.useState(!1),{handleAirtimeCommand:f,stopTracking:p}=Qv(o);F.useEffect(()=>{d(!1),p()},[r==null?void 0:r.id,p]);const h=F.useMemo(()=>{if(!r||r.type!=="contact")return!1;const v=a.find(y=>y.public_key===r.id);return(v==null?void 0:v.type)===zc},[r,a]),g=F.useCallback(async v=>{if(!(!r||r.type!=="contact")&&h)try{const y=await et.requestTelemetry(r.id,v),w=jo(r.id,$v(y),!1,0),P=jo(r.id,Yv(y.neighbors),!1,1),D=jo(r.id,Xv(y.acl),!1,2);o(C=>[...C,w,P,D]),d(!0)}catch(y){const w=jo(r.id,`Telemetry request failed: ${y instanceof Error?y.message:"Unknown error"}`,!1,0);o(P=>[...P,w])}},[r,h,o]),m=F.useCallback(async v=>{if(!r||r.type!=="contact"||!h||!l||await f(v,r.id))return;const w=jo(r.id,`> ${v}`,!0,0);o(P=>[...P,w]);try{const P=await et.sendRepeaterCommand(r.id,v),D=jo(r.id,P.response,!1,1);P.sender_timestamp&&(D.sender_timestamp=P.sender_timestamp),o(C=>[...C,D])}catch(P){const D=jo(r.id,`Command failed: ${P instanceof Error?P.message:"Unknown error"}`,!1,1);o(C=>[...C,D])}},[r,h,l,o,f]);return{repeaterLoggedIn:l,activeContactIsRepeater:h,handleTelemetryRequest:g,handleRepeaterCommand:m}}const ey=12;function Ks(r){return r.slice(0,ey)}function ul(r,a){return!r||!a?!1:Ks(r)===Ks(a)}function Ei(r,a){return r||Ks(a)}const zg="remoteterm-lastMessageTime",Hg="remoteterm-sortOrder";let Rc={};function Lp(r){Rc={...r}}function Mp(){return{...Rc}}function Mf(r,a){return Rc[r]=a,{...Rc}}function Rr(r,a){return r==="channel"?`channel-${a}`:`contact-${Ks(a)}`}function ty(){try{const r=localStorage.getItem(zg);return r?JSON.parse(r):{}}catch{return{}}}function ny(){try{return localStorage.getItem(Hg)==="alpha"?"alpha":"recent"}catch{return"recent"}}function Ip(){try{localStorage.removeItem(zg),localStorage.removeItem(Hg)}catch{}}function Op(r,a){if(!a)return!1;const o=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`@\\[${o}\\]`,"i").test(r)}function ry(r,a,o,l=null){const[d,f]=F.useState({}),[p,h]=F.useState({}),[g,m]=F.useState(Mp),v=F.useRef(l);F.useEffect(()=>{v.current=l},[l]);const y=F.useRef(new Set),w=F.useRef(new Set);F.useEffect(()=>{const R=r.filter(N=>!y.current.has(N.key)),T=a.filter(N=>N.public_key&&!w.current.has(N.public_key));if(R.length===0&&T.length===0)return;R.forEach(N=>y.current.add(N.key)),T.forEach(N=>w.current.add(N.public_key)),(async()=>{const N=[...R.map(I=>({type:"CHAN",conversation_key:I.key})),...T.map(I=>({type:"PRIV",conversation_key:I.public_key}))];if(N.length!==0)try{const I=await et.getMessagesBulk(N,A0),H={},z={},j={};for(const J of R){const W=I[`CHAN:${J.key}`]||[];if(W.length>0){const U=Rr("channel",J.key),ne=J.last_read_at||0,Y=W.filter(fe=>!fe.outgoing&&fe.received_at>ne);Y.length>0&&(H[U]=Y.length,Y.some(fe=>Op(fe.text,v.current))&&(z[U]=!0));const re=Math.max(...W.map(fe=>fe.received_at));j[U]=re,Mf(U,re)}}for(const J of T){const W=I[`PRIV:${J.public_key}`]||[];if(W.length>0){const U=Rr("contact",J.public_key),ne=J.last_read_at||0,Y=W.filter(fe=>!fe.outgoing&&fe.received_at>ne);Y.length>0&&(H[U]=Y.length,Y.some(fe=>Op(fe.text,v.current))&&(z[U]=!0));const re=Math.max(...W.map(fe=>fe.received_at));j[U]=re,Mf(U,re)}}Object.keys(H).length>0&&f(J=>({...J,...H})),Object.keys(z).length>0&&h(J=>({...J,...z})),m(Mp())}catch(I){console.error("Failed to fetch messages bulk:",I)}})()},[r,a]),F.useEffect(()=>{if(o&&o.type!=="raw"&&o.type!=="map"){const R=Rr(o.type,o.id);f(T=>{if(T[R]){const S={...T};return delete S[R],S}return T}),h(T=>{if(T[R]){const S={...T};return delete S[R],S}return T}),o.type==="channel"?et.markChannelRead(o.id).catch(T=>{console.error("Failed to mark channel as read on server:",T)}):o.type==="contact"&&et.markContactRead(o.id).catch(T=>{console.error("Failed to mark contact as read on server:",T)})}},[o]);const P=F.useCallback((R,T)=>{f(S=>({...S,[R]:(S[R]||0)+1})),T&&h(S=>({...S,[R]:!0}))},[]),D=F.useCallback(()=>{f({}),h({}),et.markAllRead().catch(R=>{console.error("Failed to mark all as read on server:",R)})},[]),C=F.useCallback(R=>{if(R.type==="raw"||R.type==="map")return;const T=Rr(R.type,R.id);f(S=>{if(S[T]){const N={...S};return delete N[T],N}return S}),h(S=>{if(S[T]){const N={...S};return delete N[T],N}return S}),R.type==="channel"?et.markChannelRead(R.id).catch(S=>{console.error("Failed to mark channel as read on server:",S)}):R.type==="contact"&&et.markContactRead(R.id).catch(S=>{console.error("Failed to mark contact as read on server:",S)})},[]),k=F.useCallback(R=>{let T=null;if(R.type==="CHAN"&&R.conversation_key?T=Rr("channel",R.conversation_key):R.type==="PRIV"&&R.conversation_key&&(T=Rr("contact",R.conversation_key)),T){const S=R.received_at||Math.floor(Date.now()/1e3),N=Mf(T,S);m(N)}},[]);return{unreadCounts:d,mentions:p,lastMessageTimes:g,incrementUnread:P,markAllRead:D,markConversationRead:C,trac Line truncated
* @license lucide-react v0.562.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -78,7 +78,7 @@ No ACL entries`;const a=[`ACL (${r.length})`];for(const o of r){const l=o.name||
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Vy=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Zg=v0("x",Vy);function Uy({health:r,config:a,onSettingsClick:o,onMenuClick:l}){const d=(r==null?void 0:r.radio_connected)??!1,[f,p]=F.useState(!1),h=async()=>{p(!0);try{const g=await Je.reconnectRadio();g.connected&&xt.success("Reconnected",{description:g.message})}catch(g){xt.error("Reconnection failed",{description:g instanceof Error?g.message:"Check radio connection and power"})}finally{p(!1)}};return b.jsxs("div",{className:"flex items-center gap-4 px-4 py-2 bg-[#252525] border-b border-[#333] text-xs",children:[l&&b.jsx("button",{onClick:l,className:"md:hidden p-1 bg-transparent border-none text-[#e0e0e0] cursor-pointer","aria-label":"Open menu",children:b.jsx(Hy,{className:"h-5 w-5"})}),b.jsx("h1",{className:"text-base font-semibold mr-auto",children:"RemoteTerm"}),b.jsxs("div",{className:"flex items-center gap-1 text-[#888]",children:[b.jsx("div",{className:`w-2 h-2 rounded-full ${d?"bg-[#4caf50]":"bg-[#666]"}`}),b.jsx("span",{className:"hidden lg:inline text-[#e0e0e0]",children:d?"Connected":"Disconnected"})]}),a&&b.jsxs("div",{className:"hidden lg:flex items-center gap-2 text-[#888]",children:[b.jsx("span",{className:"text-[#e0e0e0]",children:a.name||"Unnamed"}),b.jsx("span",{className:"font-mono text-[#888] cursor-pointer hover:text-[#4a9eff]",onClick:()=>{navigator.clipboard.writeText(a.public_key),xt.success("Public key copied!")},title:"Click to copy public key",children:a.public_key.toLowerCase()})]}),!d&&b.jsx("button",{onClick:h,disabled:f,className:"px-3 py-1 bg-[#4a3000] border border-[#6b4500] text-[#ffa500] rounded text-xs cursor-pointer hover:bg-[#5a3a00] disabled:opacity-50 disabled:cursor-not-allowed",children:f?"Reconnecting...":"Reconnect"}),b.jsxs("button",{onClick:o,className:"px-3 py-1 bg-[#333] border border-[#444] text-[#e0e0e0] rounded text-xs cursor-pointer hover:bg-[#444]",children:[b.jsx("span",{role:"img","aria-label":"Settings",children:"🔧"})," ","Radio & Config"]})]})}const e0=2,Zy={text:"🛜",background:"#444444",textColor:"#ffffff"};function Wy(r){let a=0;for(let o=0;o<r.length;o++){const l=r.charCodeAt(o);a=(a<<5)-a+l,a=a&a}return Math.abs(a)}const qy=/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]/u;function Gy(r,a){if(!r)return a.slice(0,2).toUpperCase();const o=r.match(qy);if(o)return o[0];const l=r.match(/[a-zA-Z]/g);if(!l||l.length===0)return a.slice(0,2).toUpperCase();const d=r.indexOf(" ");if(d!==-1){const f=l[0],p=r.slice(d+1).match(/[a-zA-Z]/);if(p)return(f+p[0]).toUpperCase()}return l[0].toUpperCase()}function Ky(r){const a=Wy(r),o=a%360,l=50+(a>>8)%30,d=35+(a>>16)%20,f=`hsl(${o}, ${l}%, ${d}%)`,p=d<45?"#ffffff":"#000000";return{background:f,text:p}}function Qy(r,a,o){if(o===e0)return Zy;const l=Gy(r,a),d=Ky(a);return{text:l,background:d.background,textColor:d.text}}function t0({name:r,publicKey:a,size:o=28,contactType:l}){const d=Qy(r,a,l);return b.jsx("div",{className:"flex items-center justify-center rounded-full font-semibold flex-shrink-0 select-none",style:{backgroundColor:d.background,color:d.textColor,width:o,height:o,fontSize:o*.45},children:d.text})}const Wg="remoteterm-favorites";function Zs(r,a,o){return r.some(l=>l.type!==a?!1:a==="contact"?zc(l.id,o):l.id===o)}function $y(){try{const r=localStorage.getItem(Wg);return r?JSON.parse(r):[]}catch{return[]}}function Vp(){try{localStorage.removeItem(Wg)}catch{}}function qg(r){var a,o,l="";if(typeof r=="string"||typeof r=="number")l+=r;else if(typeof r=="object")if(Array.isArray(r)){var d=r.length;for(a=0;a<d;a++)r[a]&&(o=qg(r[a]))&&(l&&(l+=" "),l+=o)}else for(o in r)r[o]&&(l&&(l+=" "),l+=o);return l}function Gg(){for(var r,a,o=0,l="",d=arguments.length;o<d;o++)(r=arguments[o])&&(a=qg(r))&&(l&&(l+=" "),l+=a);return l}const Yy=(r,a)=>{const o=new Array(r.length+a.length);for(let l=0;l<r.length;l++)o[l]=r[l];for(let l=0;l<a.length;l++)o[r.length+l]=a[l];return o},Xy=(r,a)=>({classGroupId:r,validator:a}),Kg=(r=new Map,a=null,o)=>({nextPart:r,validators:a,classGroupId:o}),Rc="-",Up=[],Jy="arbitrary..",e_=r=>{const a=n_(r),{conflictingClassGroups:o,conflictingClassGroupModifiers:l}=r;return{getClassGroupId:p=>{if(p.startsWith("[")&&p.endsWith("]"))return t_(p);const h=p.split(Rc),g=h[0]===""&&h.length>1?1:0;return Qg(h,g,a)},getConflictingClassGroupIds:(p,h)=>{if(h){const g=l[p],m=o[p];return g?m?Yy(m,g):g:m||Up}return o[p]||Up}}},Qg=(r,a,o)=>{if(r.length-a===0)return o.classGroupId;const d=r[a],f=o.nextPart.get(d);if(f){const m=Qg(r,a+1,f);if(m)return m}const p=o.validators;if(p===null)return;const h=a===0?r.join(Rc):r.slice(a).join(Rc),g=p.length;for(let m=0;m<g;m++){const v=p[m];if(v.validator(h))return v.classGroupId}},t_=r=>r.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const a=r.slice(1,-1),o=a.indexOf(":"),l=a.slice(0,o);return l?Jy+l:void 0})(),n_=r=>{const{theme:a,classGroups:o}=r;return r_(o,a)},r_=(r,a)=>{const o=Kg();for(cLine truncated
*/const Vy=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Zg=v0("x",Vy);function Uy({health:r,config:a,onSettingsClick:o,onMenuClick:l}){const d=(r==null?void 0:r.radio_connected)??!1,[f,p]=F.useState(!1),h=async()=>{p(!0);try{const g=await et.reconnectRadio();g.connected&&xt.success("Reconnected",{description:g.message})}catch(g){xt.error("Reconnection failed",{description:g instanceof Error?g.message:"Check radio connection and power"})}finally{p(!1)}};return b.jsxs("div",{className:"flex items-center gap-4 px-4 py-2 bg-[#252525] border-b border-[#333] text-xs",children:[l&&b.jsx("button",{onClick:l,className:"md:hidden p-1 bg-transparent border-none text-[#e0e0e0] cursor-pointer","aria-label":"Open menu",children:b.jsx(Hy,{className:"h-5 w-5"})}),b.jsx("h1",{className:"text-base font-semibold mr-auto",children:"RemoteTerm"}),b.jsxs("div",{className:"flex items-center gap-1 text-[#888]",children:[b.jsx("div",{className:`w-2 h-2 rounded-full ${d?"bg-[#4caf50]":"bg-[#666]"}`}),b.jsx("span",{className:"hidden lg:inline text-[#e0e0e0]",children:d?"Connected":"Disconnected"})]}),a&&b.jsxs("div",{className:"hidden lg:flex items-center gap-2 text-[#888]",children:[b.jsx("span",{className:"text-[#e0e0e0]",children:a.name||"Unnamed"}),b.jsx("span",{className:"font-mono text-[#888] cursor-pointer hover:text-[#4a9eff]",onClick:()=>{navigator.clipboard.writeText(a.public_key),xt.success("Public key copied!")},title:"Click to copy public key",children:a.public_key.toLowerCase()})]}),!d&&b.jsx("button",{onClick:h,disabled:f,className:"px-3 py-1 bg-[#4a3000] border border-[#6b4500] text-[#ffa500] rounded text-xs cursor-pointer hover:bg-[#5a3a00] disabled:opacity-50 disabled:cursor-not-allowed",children:f?"Reconnecting...":"Reconnect"}),b.jsxs("button",{onClick:o,className:"px-3 py-1 bg-[#333] border border-[#444] text-[#e0e0e0] rounded text-xs cursor-pointer hover:bg-[#444]",children:[b.jsx("span",{role:"img","aria-label":"Settings",children:"🔧"})," ","Radio & Config"]})]})}const e0=2,Zy={text:"🛜",background:"#444444",textColor:"#ffffff"};function Wy(r){let a=0;for(let o=0;o<r.length;o++){const l=r.charCodeAt(o);a=(a<<5)-a+l,a=a&a}return Math.abs(a)}const qy=/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]/u;function Gy(r,a){if(!r)return a.slice(0,2).toUpperCase();const o=r.match(qy);if(o)return o[0];const l=r.match(/[a-zA-Z]/g);if(!l||l.length===0)return a.slice(0,2).toUpperCase();const d=r.indexOf(" ");if(d!==-1){const f=l[0],p=r.slice(d+1).match(/[a-zA-Z]/);if(p)return(f+p[0]).toUpperCase()}return l[0].toUpperCase()}function Ky(r){const a=Wy(r),o=a%360,l=50+(a>>8)%30,d=35+(a>>16)%20,f=`hsl(${o}, ${l}%, ${d}%)`,p=d<45?"#ffffff":"#000000";return{background:f,text:p}}function Qy(r,a,o){if(o===e0)return Zy;const l=Gy(r,a),d=Ky(a);return{text:l,background:d.background,textColor:d.text}}function t0({name:r,publicKey:a,size:o=28,contactType:l}){const d=Qy(r,a,l);return b.jsx("div",{className:"flex items-center justify-center rounded-full font-semibold flex-shrink-0 select-none",style:{backgroundColor:d.background,color:d.textColor,width:o,height:o,fontSize:o*.45},children:d.text})}const Wg="remoteterm-favorites";function Ko(r,a,o){return r.some(l=>l.type!==a?!1:a==="contact"?ul(l.id,o):l.id===o)}function $y(){try{const r=localStorage.getItem(Wg);return r?JSON.parse(r):[]}catch{return[]}}function Vp(){try{localStorage.removeItem(Wg)}catch{}}function qg(r){var a,o,l="";if(typeof r=="string"||typeof r=="number")l+=r;else if(typeof r=="object")if(Array.isArray(r)){var d=r.length;for(a=0;a<d;a++)r[a]&&(o=qg(r[a]))&&(l&&(l+=" "),l+=o)}else for(o in r)r[o]&&(l&&(l+=" "),l+=o);return l}function Gg(){for(var r,a,o=0,l="",d=arguments.length;o<d;o++)(r=arguments[o])&&(a=qg(r))&&(l&&(l+=" "),l+=a);return l}const Yy=(r,a)=>{const o=new Array(r.length+a.length);for(let l=0;l<r.length;l++)o[l]=r[l];for(let l=0;l<a.length;l++)o[r.length+l]=a[l];return o},Xy=(r,a)=>({classGroupId:r,validator:a}),Kg=(r=new Map,a=null,o)=>({nextPart:r,validators:a,classGroupId:o}),Fc="-",Up=[],Jy="arbitrary..",e_=r=>{const a=n_(r),{conflictingClassGroups:o,conflictingClassGroupModifiers:l}=r;return{getClassGroupId:p=>{if(p.startsWith("[")&&p.endsWith("]"))return t_(p);const h=p.split(Fc),g=h[0]===""&&h.length>1?1:0;return Qg(h,g,a)},getConflictingClassGroupIds:(p,h)=>{if(h){const g=l[p],m=o[p];return g?m?Yy(m,g):g:m||Up}return o[p]||Up}}},Qg=(r,a,o)=>{if(r.length-a===0)return o.classGroupId;const d=r[a],f=o.nextPart.get(d);if(f){const m=Qg(r,a+1,f);if(m)return m}const p=o.validators;if(p===null)return;const h=a===0?r.join(Fc):r.slice(a).join(Fc),g=p.length;for(let m=0;m<g;m++){const v=p[m];if(v.validator(h))return v.classGroupId}},t_=r=>r.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const a=r.slice(1,-1),o=a.indexOf(":"),l=a.slice(0,o);return l?Jy+l:void 0})(),n_=r=>{const{theme:a,classGroups:o}=r;return r_(o,a)},r_=(r,a)=>{const o=Kg();for(cLine truncated
.`.concat(O1,` {
overflow: hidden `).concat(l,`;
padding-right: `).concat(h,"px ").concat(l,`;
@@ -96,37 +96,37 @@ No ACL entries`;const a=[`ACL (${r.length})`];for(const o of r){const l=o.name||
`),o==="padding"&&"padding-right: ".concat(h,"px ").concat(l,";")].filter(Boolean).join(""),`
}
.`).concat(Uu,` {
.`).concat(Zu,` {
right: `).concat(h,"px ").concat(l,`;
}
.`).concat(Zu,` {
.`).concat(Wu,` {
margin-right: `).concat(h,"px ").concat(l,`;
}
.`).concat(Uu," .").concat(Uu,` {
.`).concat(Zu," .").concat(Zu,` {
right: 0 `).concat(l,`;
}
.`).concat(Zu," .").concat(Zu,` {
.`).concat(Wu," .").concat(Wu,` {
margin-right: 0 `).concat(l,`;
}
body[`).concat(qs,`] {
`).concat(j1,": ").concat(h,`px;
}
`)},sm=function(){var r=parseInt(document.body.getAttribute(qs)||"0",10);return isFinite(r)?r:0},iw=function(){F.useEffect(function(){return document.body.setAttribute(qs,(sm()+1).toString()),function(){var r=sm()-1;r<=0?document.body.removeAttribute(qs):document.body.setAttribute(qs,r.toString())}},[])},ow=function(r){var a=r.noRelative,o=r.noImportant,l=r.gapMode,d=l===void 0?"margin":l;iw();var f=F.useMemo(function(){return tw(d)},[d]);return F.createElement(nw,{styles:rw(f,!a,d,o?"":"!important")})},i0=!1;if(typeof window<"u")try{var Iu=Object.defineProperty({},"passive",{get:function(){return i0=!0,!0}});window.addEventListener("test",Iu,Iu),window.removeEventListener("test",Iu,Iu)}catch{i0=!1}var Hs=i0?{passive:!1}:!1,sw=function(r){return r.tagName==="TEXTAREA"},AA=function(r,a){if(!(r instanceof Element))return!1;var o=window.getComputedStyle(r);return o[a]!=="hidden"&&!(o.overflowY===o.overflowX&&!sw(r)&&o[a]==="visible")},aw=function(r){return AA(r,"overflowY")},lw=function(r){return AA(r,"overflowX")},am=function(r,a){var o=a.ownerDocument,l=a;do{typeof ShadowRoot<"u"&&l instanceof ShadowRoot&&(l=l.host);var d=xA(r,l);if(d){var f=vA(r,l),p=f[1],h=f[2];if(p>h)return!0}l=l.parentNode}while(l&&l!==o.body);return!1},uw=function(r){var a=r.scrollTop,o=r.scrollHeight,l=r.clientHeight;return[a,o,l]},cw=function(r){var a=r.scrollLeft,o=r.scrollWidth,l=r.clientWidth;return[a,o,l]},xA=function(r,a){return r==="v"?aw(a):lw(a)},vA=function(r,a){return r==="v"?uw(a):cw(a)},dw=function(r,a){return r==="h"&&a==="rtl"?-1:1},fw=function(r,a,o,l,d){var f=dw(r,window.getComputedStyle(a).direction),p=f*l,h=o.target,g=a.contains(h),m=!1,v=p>0,y=0,w=0;do{if(!h)break;var P=vA(r,h),D=P[0],C=P[1],k=P[2],R=C-k-f*D;(D||R)&&xA(r,h)&&(y+=R,w+=D);var T=h.parentNode;h=T&&T.nodeType===Node.DOCUMENT_FRAGMENT_NODE?T.host:T}while(!g&&h!==document.body||g&&(a.contains(h)||a===h));return(v&&Math.abs(y)<1||!v&&Math.abs(w)<1)&&(m=!0),m},Ou=function(r){return"changedTouches"in r?[r.changedTouches[0].clientX,r.changedTouches[0].clientY]:[0,0]},lm=function(r){return[r.deltaX,r.deltaY]},um=function(r){return r&&"current"in r?r.current:r},hw=function(r,a){return r[0]===a[0]&&r[1]===a[1]},pw=function(r){return`
`)},sm=function(){var r=parseInt(document.body.getAttribute(qs)||"0",10);return isFinite(r)?r:0},iw=function(){F.useEffect(function(){return document.body.setAttribute(qs,(sm()+1).toString()),function(){var r=sm()-1;r<=0?document.body.removeAttribute(qs):document.body.setAttribute(qs,r.toString())}},[])},ow=function(r){var a=r.noRelative,o=r.noImportant,l=r.gapMode,d=l===void 0?"margin":l;iw();var f=F.useMemo(function(){return tw(d)},[d]);return F.createElement(nw,{styles:rw(f,!a,d,o?"":"!important")})},i0=!1;if(typeof window<"u")try{var Ou=Object.defineProperty({},"passive",{get:function(){return i0=!0,!0}});window.addEventListener("test",Ou,Ou),window.removeEventListener("test",Ou,Ou)}catch{i0=!1}var Vs=i0?{passive:!1}:!1,sw=function(r){return r.tagName==="TEXTAREA"},AA=function(r,a){if(!(r instanceof Element))return!1;var o=window.getComputedStyle(r);return o[a]!=="hidden"&&!(o.overflowY===o.overflowX&&!sw(r)&&o[a]==="visible")},aw=function(r){return AA(r,"overflowY")},lw=function(r){return AA(r,"overflowX")},am=function(r,a){var o=a.ownerDocument,l=a;do{typeof ShadowRoot<"u"&&l instanceof ShadowRoot&&(l=l.host);var d=xA(r,l);if(d){var f=vA(r,l),p=f[1],h=f[2];if(p>h)return!0}l=l.parentNode}while(l&&l!==o.body);return!1},uw=function(r){var a=r.scrollTop,o=r.scrollHeight,l=r.clientHeight;return[a,o,l]},cw=function(r){var a=r.scrollLeft,o=r.scrollWidth,l=r.clientWidth;return[a,o,l]},xA=function(r,a){return r==="v"?aw(a):lw(a)},vA=function(r,a){return r==="v"?uw(a):cw(a)},dw=function(r,a){return r==="h"&&a==="rtl"?-1:1},fw=function(r,a,o,l,d){var f=dw(r,window.getComputedStyle(a).direction),p=f*l,h=o.target,g=a.contains(h),m=!1,v=p>0,y=0,w=0;do{if(!h)break;var P=vA(r,h),D=P[0],C=P[1],k=P[2],R=C-k-f*D;(D||R)&&xA(r,h)&&(y+=R,w+=D);var T=h.parentNode;h=T&&T.nodeType===Node.DOCUMENT_FRAGMENT_NODE?T.host:T}while(!g&&h!==document.body||g&&(a.contains(h)||a===h));return(v&&Math.abs(y)<1||!v&&Math.abs(w)<1)&&(m=!0),m},ju=function(r){return"changedTouches"in r?[r.changedTouches[0].clientX,r.changedTouches[0].clientY]:[0,0]},lm=function(r){return[r.deltaX,r.deltaY]},um=function(r){return r&&"current"in r?r.current:r},hw=function(r,a){return r[0]===a[0]&&r[1]===a[1]},pw=function(r){return`
.block-interactivity-`.concat(r,` {pointer-events: none;}
.allow-interactivity-`).concat(r,` {pointer-events: all;}
`)},mw=0,Vs=[];function gw(r){var a=F.useRef([]),o=F.useRef([0,0]),l=F.useRef(),d=F.useState(mw++)[0],f=F.useState(gA)[0],p=F.useRef(r);F.useEffect(function(){p.current=r},[r]),F.useEffect(function(){if(r.inert){document.body.classList.add("block-interactivity-".concat(d));var C=I1([r.lockRef.current],(r.shards||[]).map(um),!0).filter(Boolean);return C.forEach(function(k){return k.classList.add("allow-interactivity-".concat(d))}),function(){document.body.classList.remove("block-interactivity-".concat(d)),C.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(d))})}}},[r.inert,r.lockRef.current,r.shards]);var h=F.useCallback(function(C,k){if("touches"in C&&C.touches.length===2||C.type==="wheel"&&C.ctrlKey)return!p.current.allowPinchZoom;var R=Ou(C),T=o.current,S="deltaX"in C?C.deltaX:T[0]-R[0],N="deltaY"in C?C.deltaY:T[1]-R[1],I,H=C.target,z=Math.abs(S)>Math.abs(N)?"h":"v";if("touches"in C&&z==="h"&&H.type==="range")return!1;var j=window.getSelection(),J=j&&j.anchorNode,W=J?J===H||J.contains(H):!1;if(W)return!1;var U=am(z,H);if(!U)return!0;if(U?I=z:(I=z==="v"?"h":"v",U=am(z,H)),!U)return!1;if(!l.current&&"changedTouches"in C&&(S||N)&&(l.current=I),!I)return!0;var te=l.current||I;return fw(te,k,C,te==="h"?S:N)},[]),g=F.useCallback(function(C){var k=C;if(!(!Vs.length||Vs[Vs.length-1]!==f)){var R="deltaY"in k?lm(k):Ou(k),T=a.current.filter(function(I){return I.name===k.type&&(I.target===k.target||k.target===I.shadowParent)&&hw(I.delta,R)})[0];if(T&&T.should){k.cancelable&&k.preventDefault();return}if(!T){var S=(p.current.shards||[]).map(um).filter(Boolean).filter(function(I){return I.contains(k.target)}),N=S.length>0?h(k,S[0]):!p.current.noIsolation;N&&k.cancelable&&k.preventDefault()}}},[]),m=F.useCallback(function(C,k,R,T){var S={name:C,delta:k,target:R,should:T,shadowParent:Aw(R)};a.current.push(S),setTimeout(function(){a.current=a.current.filter(function(N){return N!==S})},1)},[]),v=F.useCallback(function(C){o.current=Ou(C),l.current=void 0},[]),y=F.useCallback(function(C){m(C.type,lm(C),C.target,h(C,r.lockRef.current))},[]),w=F.useCallback(function(C){m(C.type,Ou(C),C.target,h(C,r.lockRef.current))},[]);F.useEffect(function(){return Vs.push(f),r.setCallbacks({onScrollCapture:y,onWheelCapture:y,onTouchMoveCapture:w}),document.addEventListener("wheel",g,Hs),document.addEventListener("touchmove",g,Hs),document.addEventListener("touchstart",v,Hs),function(){Vs=Vs.filter(function(C){return C!==f}),document.removeEventListener("wheel",g,Hs),document.removeEventListener("touchmove",g,Hs),document.removeEventListener("touchstart",v,Hs)}},[]);var P=r.removeScrollBar,D=r.inert;return F.createElement(F.Fragment,null,D?F.createElement(f,{styles:pw(d)}):null,P?F.createElement(ow,{noRelative:r.noRelative,gapMode:r.gapMode}):null)}function Aw(r){for(var a=null;r!==null;)r instanceof ShadowRoot&&(a=r.host,r=r.host),r=r.parentNode;return a}const xw=q1(mA,gw);var yA=F.forwardRef(function(r,a){return F.createElement(Vc,Yr({},r,{ref:a,sideCar:xw}))});yA.classNames=Vc.classNames;var vw=function(r){if(typeof document>"u")return null;var a=Array.isArray(r)?r[0]:r;return a.ownerDocument.body},Us=new WeakMap,ju=new WeakMap,zu={},Wf=0,_A=function(r){return r&&(r.host||_A(r.parentNode))},yw=function(r,a){return a.map(function(o){if(r.contains(o))return o;var l=_A(o);return l&&r.contains(l)?l:(console.error("aria-hidden",o,"in not contained inside",r,". Doing nothing"),null)}).filter(function(o){return!!o})},_w=function(r,a,o,l){var d=yw(a,Array.isArray(r)?r:[r]);zu[o]||(zu[o]=new WeakMap);var f=zu[o],p=[],h=new Set,g=new Set(d),m=function(y){!y||h.has(y)||(h.add(y),m(y.parentNode))};d.forEach(m);var v=function(y){!y||g.has(y)||Array.prototype.forEach.call(y.children,function(w){if(h.has(w))v(w);else try{var P=w.getAttribute(l),D=P!==null&&P!=="false",C=(Us.get(w)||0)+1,k=(f.get(w)||0)+1;Us.set(w,C),f.set(w,k),p.push(w),C===1&&D&&ju.set(w,!0),k===1&&w.setAttribute(o,"true"),D||w.setAttribute(l,"true")}catch(R){console.error("aria-hidden: cannot operate on ",w,R)}})};return v(a),h.clear(),Wf++,function(){p.forEach(function(y){var w=Us.get(y)-1,P=f.get(y)-1;Us.set(y,w),f.set(y,P),w||(ju.has(y)||y.removeAttribute(l),ju.delete(y)),P||y.removeAttribute(o)}),Wf--,Wf||(Us=new WeakMap,Us=new WeakMap,ju=new WeakMap,zu={})}},ww=function(r,a,o){o===void 0&&(o="data-aria-hidden");var l=Array.from(Array.isArray(r)?r:[r]),d=vw(r);return d?(l.push.apply(l,Array.from(d.querySelectorAll("[aria-live], script"))),_w(l,d,o,"aria-hidden")):function(){return null}};function bw(r){const a=Cw(r),o=F.forwardRef((l,d)=>{const{children:f,...p}=l,h=F.Children.toArray(f),g=h.find(kw);if(g){const m=g.props.children,v=h.map(y=>y===g?F.Children.count(m)>1?F.Children.only(null):F.isValidElement(m)?m.props.children:null:y);return b.jsx(a,{...p,ref:d,children:F.isValidElement(m)?F.cloneElement(m,void 0,v):null})}return b.jsx(a,{...p,ref:d,children:f})});return o.displayName=`${r}.Slot`,o}function Cw(r){const a=F.forwardRef((o,l)=>{const{childre Line truncated
`)},mw=0,Us=[];function gw(r){var a=F.useRef([]),o=F.useRef([0,0]),l=F.useRef(),d=F.useState(mw++)[0],f=F.useState(gA)[0],p=F.useRef(r);F.useEffect(function(){p.current=r},[r]),F.useEffect(function(){if(r.inert){document.body.classList.add("block-interactivity-".concat(d));var C=I1([r.lockRef.current],(r.shards||[]).map(um),!0).filter(Boolean);return C.forEach(function(k){return k.classList.add("allow-interactivity-".concat(d))}),function(){document.body.classList.remove("block-interactivity-".concat(d)),C.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(d))})}}},[r.inert,r.lockRef.current,r.shards]);var h=F.useCallback(function(C,k){if("touches"in C&&C.touches.length===2||C.type==="wheel"&&C.ctrlKey)return!p.current.allowPinchZoom;var R=ju(C),T=o.current,S="deltaX"in C?C.deltaX:T[0]-R[0],N="deltaY"in C?C.deltaY:T[1]-R[1],I,H=C.target,z=Math.abs(S)>Math.abs(N)?"h":"v";if("touches"in C&&z==="h"&&H.type==="range")return!1;var j=window.getSelection(),J=j&&j.anchorNode,W=J?J===H||J.contains(H):!1;if(W)return!1;var U=am(z,H);if(!U)return!0;if(U?I=z:(I=z==="v"?"h":"v",U=am(z,H)),!U)return!1;if(!l.current&&"changedTouches"in C&&(S||N)&&(l.current=I),!I)return!0;var ne=l.current||I;return fw(ne,k,C,ne==="h"?S:N)},[]),g=F.useCallback(function(C){var k=C;if(!(!Us.length||Us[Us.length-1]!==f)){var R="deltaY"in k?lm(k):ju(k),T=a.current.filter(function(I){return I.name===k.type&&(I.target===k.target||k.target===I.shadowParent)&&hw(I.delta,R)})[0];if(T&&T.should){k.cancelable&&k.preventDefault();return}if(!T){var S=(p.current.shards||[]).map(um).filter(Boolean).filter(function(I){return I.contains(k.target)}),N=S.length>0?h(k,S[0]):!p.current.noIsolation;N&&k.cancelable&&k.preventDefault()}}},[]),m=F.useCallback(function(C,k,R,T){var S={name:C,delta:k,target:R,should:T,shadowParent:Aw(R)};a.current.push(S),setTimeout(function(){a.current=a.current.filter(function(N){return N!==S})},1)},[]),v=F.useCallback(function(C){o.current=ju(C),l.current=void 0},[]),y=F.useCallback(function(C){m(C.type,lm(C),C.target,h(C,r.lockRef.current))},[]),w=F.useCallback(function(C){m(C.type,ju(C),C.target,h(C,r.lockRef.current))},[]);F.useEffect(function(){return Us.push(f),r.setCallbacks({onScrollCapture:y,onWheelCapture:y,onTouchMoveCapture:w}),document.addEventListener("wheel",g,Vs),document.addEventListener("touchmove",g,Vs),document.addEventListener("touchstart",v,Vs),function(){Us=Us.filter(function(C){return C!==f}),document.removeEventListener("wheel",g,Vs),document.removeEventListener("touchmove",g,Vs),document.removeEventListener("touchstart",v,Vs)}},[]);var P=r.removeScrollBar,D=r.inert;return F.createElement(F.Fragment,null,D?F.createElement(f,{styles:pw(d)}):null,P?F.createElement(ow,{noRelative:r.noRelative,gapMode:r.gapMode}):null)}function Aw(r){for(var a=null;r!==null;)r instanceof ShadowRoot&&(a=r.host,r=r.host),r=r.parentNode;return a}const xw=q1(mA,gw);var yA=F.forwardRef(function(r,a){return F.createElement(Vc,Yr({},r,{ref:a,sideCar:xw}))});yA.classNames=Vc.classNames;var vw=function(r){if(typeof document>"u")return null;var a=Array.isArray(r)?r[0]:r;return a.ownerDocument.body},Zs=new WeakMap,zu=new WeakMap,Hu={},Wf=0,_A=function(r){return r&&(r.host||_A(r.parentNode))},yw=function(r,a){return a.map(function(o){if(r.contains(o))return o;var l=_A(o);return l&&r.contains(l)?l:(console.error("aria-hidden",o,"in not contained inside",r,". Doing nothing"),null)}).filter(function(o){return!!o})},_w=function(r,a,o,l){var d=yw(a,Array.isArray(r)?r:[r]);Hu[o]||(Hu[o]=new WeakMap);var f=Hu[o],p=[],h=new Set,g=new Set(d),m=function(y){!y||h.has(y)||(h.add(y),m(y.parentNode))};d.forEach(m);var v=function(y){!y||g.has(y)||Array.prototype.forEach.call(y.children,function(w){if(h.has(w))v(w);else try{var P=w.getAttribute(l),D=P!==null&&P!=="false",C=(Zs.get(w)||0)+1,k=(f.get(w)||0)+1;Zs.set(w,C),f.set(w,k),p.push(w),C===1&&D&&zu.set(w,!0),k===1&&w.setAttribute(o,"true"),D||w.setAttribute(l,"true")}catch(R){console.error("aria-hidden: cannot operate on ",w,R)}})};return v(a),h.clear(),Wf++,function(){p.forEach(function(y){var w=Zs.get(y)-1,P=f.get(y)-1;Zs.set(y,w),f.set(y,P),w||(zu.has(y)||y.removeAttribute(l),zu.delete(y)),P||y.removeAttribute(o)}),Wf--,Wf||(Zs=new WeakMap,Zs=new WeakMap,zu=new WeakMap,Hu={})}},ww=function(r,a,o){o===void 0&&(o="data-aria-hidden");var l=Array.from(Array.isArray(r)?r:[r]),d=vw(r);return d?(l.push.apply(l,Array.from(d.querySelectorAll("[aria-live], script"))),_w(l,d,o,"aria-hidden")):function(){return null}};function bw(r){const a=Cw(r),o=F.forwardRef((l,d)=>{const{children:f,...p}=l,h=F.Children.toArray(f),g=h.find(kw);if(g){const m=g.props.children,v=h.map(y=>y===g?F.Children.count(m)>1?F.Children.only(null):F.isValidElement(m)?m.props.children:null:y);return b.jsx(a,{...p,ref:d,children:F.isValidElement(m)?F.cloneElement(m,void 0,v):null})}return b.jsx(a,{...p,ref:d,children:f})});return o.displayName=`${r}.Slot`,o}function Cw(r){const a=F.forwardRef((o,l)=>{const{childre Line truncated
If you want to hide the \`${a.titleName}\`, you can wrap it with our VisuallyHidden component.
For more information, see https://radix-ui.com/primitives/docs/components/${a.docsSlug}`;return F.useEffect(()=>{r&&(document.getElementById(r)||console.error(o))},[o,r]),null},Iw="DialogDescriptionWarning",Ow=({contentRef:r,descriptionId:a})=>{const l=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${MA(Iw).contentName}}.`;return F.useEffect(()=>{var f;const d=(f=r.current)==null?void 0:f.getAttribute("aria-describedby");a&&d&&(document.getElementById(a)||console.warn(l))},[l,r,a]),null},IA=bA,OA=kA,Zc=SA,Wc=BA,qc=TA,Gc=RA,jA=NA;const k0=IA,jw=OA,zA=F.forwardRef(({className:r,...a},o)=>b.jsx(Zc,{ref:o,className:lt("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",r),...a}));zA.displayName=Zc.displayName;const Kc=F.forwardRef(({className:r,children:a,...o},l)=>b.jsxs(jw,{children:[b.jsx(zA,{}),b.jsxs(Wc,{ref:l,className:lt("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",r),...o,children:[a,b.jsxs(jA,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[b.jsx(Zg,{className:"h-4 w-4"}),b.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));Kc.displayName=Wc.displayName;const Qc=({className:r,...a})=>b.jsx("div",{className:lt("flex flex-col space-y-1.5 text-center sm:text-left",r),...a});Qc.displayName="DialogHeader";const S0=({className:r,...a})=>b.jsx("div",{className:lt("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",r),...a});S0.displayName="DialogFooter";const $c=F.forwardRef(({className:r,...a},o)=>b.jsx(qc,{ref:o,className:lt("text-lg font-semibold leading-none tracking-tight",r),...a}));$c.displayName=qc.displayName;const Yc=F.forwardRef(({className:r,...a},o)=>b.jsx(Gc,{ref:o,className:lt("text-sm text-muted-foreground",r),...a}));Yc.displayName=Gc.displayName;function zw(){const r=window.location.hash.slice(1);if(!r)return null;if(r==="raw")return{type:"raw",name:"raw"};if(r==="map")return{type:"map",name:"map"};if(r.startsWith("map/focus/")){const d=r.slice(10);return d?{type:"map",name:"map",mapFocusKey:decodeURIComponent(d)}:{type:"map",name:"map"}}const a=r.indexOf("/");if(a===-1)return null;const o=r.slice(0,a),l=decodeURIComponent(r.slice(a+1));return(o==="channel"||o==="contact")&&l?{type:o,name:l}:null}function HA(r){return`#map/focus/${encodeURIComponent(r)}`}function Hw(r){if(!r)return"";if(r.type==="raw")return"#raw";if(r.type==="map")return"#map";const a=r.type==="channel"&&r.name.startsWith("#")?r.name.slice(1):r.name;return`#${r.type}/${encodeURIComponent(a)}`}function Vw(r){const a=Hw(r);a!==window.location.hash&&window.history.replaceState(null,"",a||window.location.pathname)}function Uw({open:r,onClose:a,paths:o,senderInfo:l,contacts:d,config:f}){const p=o.map(g=>({...g,resolved:e1(g.path,l,d,f)})),h=o.length===1;return b.jsx(k0,{open:r,onOpenChange:g=>!g&&a(),children:b.jsxs(Kc,{className:"max-w-md max-h-[80vh] flex flex-col",children:[b.jsxs(Qc,{children:[b.jsxs($c,{children:["Message Path",!h&&`s (${o.length})`]}),b.jsx(Yc,{children:h?b.jsxs(b.Fragment,{children:["This shows ",b.jsx("em",{children:"one route"})," that this message traveled through the mesh network. Routers may be incorrectly identified due to prefix collisions between heard and non-heard router advertisements."]}):b.jsxs(b.Fragment,{children:["This message was received via ",b.jsxs("strong",{children:[o.length," different routes"]}),". Routers may be incorrectly identified due to prefix collisions."]})})]}),b.jsxs("div",{className:"flex-1 overflow-y-auto py-2 space-y-4",children:[p.map((g,m)=>b.jsxs("div",{children:[!h&&b.jsxs("div",{className:"text-xs text-muted-foreground font-medium mb-2 pb-1 border-b border-border",children:["Path ",m+1," — received ",Qs(g.received_at)]}),b.jsx(Zw,{resolved:g.resolved,senderInfo:l,hideStraightLine:!h})]},m)),!h&&p.length>0&&(()=>{const g=p[0].resolved;return St(g.sender.lat,g.sender.lon)&&St(g.receiver.lat,g.receiver.lon)?b.jsxs("div",{className:"pt-3 mt-1 border-t border-border",children:[b.jsx("span",{className:"text-sm text-muted-foreground",children:"Straight-line distance: "}),b.jsx("span",{className:"text-sm font-medium",children:Ko(Fr(g.sender.lat,g.sender.lon,g.receiver.lat,g.receiver.lon))})]}):null})()]}),b.jsx(S0,{children:b Line truncated
`).map(($,ce,de)=>b.jsxs("span",{children:[Gw($,h),ce<de.length-1&&b.jsx("br",{})]},ce)),!pe&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[10px] text-muted-foreground/50 ml-2",children:Qs(j.sender_timestamp||j.received_at)}),!j.outgoing&&j.paths&&j.paths.length>0&&b.jsx(dm,{paths:j.paths,variant:"inline",onClick:()=>C({paths:j.paths,senderInfo:I(j,W,te)})})]}),j.outgoing&&(j.acked>0?` ✓${j.acked>1?j.acked:""}`:" ?")]})]})]},j.id)})]}),w&&b.jsx("button",{onClick:T,className:"absolute bottom-4 right-4 w-10 h-10 rounded-full bg-muted hover:bg-accent border border-border flex items-center justify-center shadow-lg transition-opacity",title:"Scroll to bottom",children:b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-muted-foreground",children:b.jsx("polyline",{points:"6 9 12 15 18 9"})})}),D&&b.jsx(Uw,{open:!0,onClose:()=>C(null),paths:D.paths,senderInfo:D.senderInfo,contacts:a,config:g??null})]})}const fm=156,Qw=140,$w=156,Yw=120,Xw=8,Jw=F.forwardRef(function({onSend:a,disabled:o,placeholder:l,isRepeaterMode:d,conversationType:f,senderName:p},h){const[g,m]=F.useState(""),[v,y]=F.useState(!1),w=F.useRef(null);F.useImperativeHandle(h,()=>({appendText:I=>{var H;m(z=>z+I),(H=w.current)==null||H.focus()}}));const P=F.useMemo(()=>{if(f==="contact")return{warningAt:Qw,dangerAt:fm,hardLimit:fm};if(f==="channel"){const I=(p==null?void 0:p.length)??10,H=Math.max(1,$w-I-2);return{warningAt:Yw,dangerAt:Math.max(1,H-Xw),hardLimit:H}}return null},[f,p]),{limitState:D,warningMessage:C}=F.useMemo(()=>{if(!P)return{limitState:"normal",warningMessage:null};const I=g.length;return I>=P.hardLimit?{limitState:"error",warningMessage:"likely truncated by radio"}:I>=P.dangerAt?{limitState:"danger",warningMessage:"may impact multi-repeater hop delivery"}:I>=P.warningAt?{limitState:"warning",warningMessage:"may impact multi-repeater hop delivery"}:{limitState:"normal",warningMessage:null}},[g.length,P]),k=P?P.hardLimit-g.length:0,R=F.useCallback(async I=>{I.preventDefault();const H=g.trim();if(d){if(v||o)return;y(!0);try{await a(H),m("")}catch(z){console.error("Failed to request telemetry:",z),xt.error("Failed to request telemetry",{description:z instanceof Error?z.message:"Check radio connection"});return}finally{y(!1)}setTimeout(()=>{var z;return(z=w.current)==null?void 0:z.focus()},0)}else{if(!H||v||o)return;y(!0);try{await a(H),m("")}catch(z){console.error("Failed to send message:",z),xt.error("Failed to send message",{description:z instanceof Error?z.message:"Check radio connection"});return}finally{y(!1)}setTimeout(()=>{var z;return(z=w.current)==null?void 0:z.focus()},0)}},[g,v,o,a,d]),T=F.useCallback(I=>{I.key==="Enter"&&!I.shiftKey&&(I.preventDefault(),R(I))},[R]),S=d?!0:g.trim().length>0,N=!d&&P!==null;return b.jsxs("form",{className:"px-4 py-3 border-t border-border flex flex-col gap-1",onSubmit:R,children:[b.jsxs("div",{className:"flex gap-2",children:[b.jsx(tn,{ref:w,type:d?"password":"text",autoComplete:d?"off":void 0,value:g,onChange:I=>m(I.target.value),onKeyDown:T,placeholder:l||(d?"Enter password for admin login...":"Type a message..."),disabled:o||v,className:"flex-1 min-w-0"}),b.jsx(Pn,{type:"submit",disabled:o||v||!S,className:"flex-shrink-0",children:v?d?"Logging in...":"Sending...":d?g.trim()?"Log in with password":"Log in as guest/use repeater ACLs":"Send"})]}),N&&b.jsxs("div",{className:"flex items-center justify-end gap-2 text-xs",children:[b.jsxs("span",{className:lt("tabular-nums",D==="error"||D==="danger"?"text-red-500 font-medium":D==="warning"?"text-yellow-500":"text-muted-foreground"),children:[g.length,"/",P.hardLimit,k<0&&` (${k})`]}),C&&b.jsxs("span",{className:lt(D==="error"?"text-red-500":"text-yellow-500"),children:["— ",C]})]})]})});function hm(r){const a=e2(r),o=F.forwardRef((l,d)=>{const{children:f,...p}=l,h=F.Children.toArray(f),g=h.find(n2);if(g){const m=g.props.children,v=h.map(y=>y===g?F.Children.count(m)>1?F.Children.only(null):F.isValidElement(m)?m.props.children:null:y);return b.jsx(a,{...p,ref:d,children:F.isValidElement(m)?F.cloneElement(m,void 0,v):null})}return b.jsx(a,{...p,ref:d,children:f})});return o.displayName=`${r}.Slot`,o}function e2(r){const a=F.forwardRef((o,l)=>{const{children:d,...f}=o;if(F.isValidElement(d)){const p=i2(d),h=r2(f,d.props);return d.type!==F.Fragment&&(h.ref=l?fl(l,p):p),F.cloneElement(d,h)}return F.Children.count(d)>1?F.Children.only(null):null});return a.displayName=`${r}.SlotClone`,a}var t2=Symbol("radix.slottable");function n2(r){return F.isValidElement(r)&&typeof r.type=="function"&&"__radixId"in r.type&&r.type.__radixId===t2}function r2(r,a){const o={...a};for(const l in a){const d=r[l],f=a[l];/^on[A-Z]/.test(l)?d&&f?o[l]=(...h)=>{const g=f(...h);return d(...h),g}:d&&(o[l]=d):l==="style"?o[l]={...d,...f}:l==="className"&&(o[l]=[d,f].filter(Boolean).join(" "))}return{...r,...o}}functio Line truncated
For more information, see https://radix-ui.com/primitives/docs/components/${a.docsSlug}`;return F.useEffect(()=>{r&&(document.getElementById(r)||console.error(o))},[o,r]),null},Iw="DialogDescriptionWarning",Ow=({contentRef:r,descriptionId:a})=>{const l=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${MA(Iw).contentName}}.`;return F.useEffect(()=>{var f;const d=(f=r.current)==null?void 0:f.getAttribute("aria-describedby");a&&d&&(document.getElementById(a)||console.warn(l))},[l,r,a]),null},IA=bA,OA=kA,Zc=SA,Wc=BA,qc=TA,Gc=RA,jA=NA;const k0=IA,jw=OA,zA=F.forwardRef(({className:r,...a},o)=>b.jsx(Zc,{ref:o,className:ut("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",r),...a}));zA.displayName=Zc.displayName;const Kc=F.forwardRef(({className:r,children:a,...o},l)=>b.jsxs(jw,{children:[b.jsx(zA,{}),b.jsxs(Wc,{ref:l,className:ut("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",r),...o,children:[a,b.jsxs(jA,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[b.jsx(Zg,{className:"h-4 w-4"}),b.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));Kc.displayName=Wc.displayName;const Qc=({className:r,...a})=>b.jsx("div",{className:ut("flex flex-col space-y-1.5 text-center sm:text-left",r),...a});Qc.displayName="DialogHeader";const S0=({className:r,...a})=>b.jsx("div",{className:ut("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",r),...a});S0.displayName="DialogFooter";const $c=F.forwardRef(({className:r,...a},o)=>b.jsx(qc,{ref:o,className:ut("text-lg font-semibold leading-none tracking-tight",r),...a}));$c.displayName=qc.displayName;const Yc=F.forwardRef(({className:r,...a},o)=>b.jsx(Gc,{ref:o,className:ut("text-sm text-muted-foreground",r),...a}));Yc.displayName=Gc.displayName;function zw(){const r=window.location.hash.slice(1);if(!r)return null;if(r==="raw")return{type:"raw",name:"raw"};if(r==="map")return{type:"map",name:"map"};if(r.startsWith("map/focus/")){const d=r.slice(10);return d?{type:"map",name:"map",mapFocusKey:decodeURIComponent(d)}:{type:"map",name:"map"}}const a=r.indexOf("/");if(a===-1)return null;const o=r.slice(0,a),l=decodeURIComponent(r.slice(a+1));return(o==="channel"||o==="contact")&&l?{type:o,name:l}:null}function HA(r){return`#map/focus/${encodeURIComponent(r)}`}function Hw(r){if(!r)return"";if(r.type==="raw")return"#raw";if(r.type==="map")return"#map";const a=r.type==="channel"&&r.name.startsWith("#")?r.name.slice(1):r.name;return`#${r.type}/${encodeURIComponent(a)}`}function Vw(r){const a=Hw(r);a!==window.location.hash&&window.history.replaceState(null,"",a||window.location.pathname)}function Uw({open:r,onClose:a,paths:o,senderInfo:l,contacts:d,config:f}){const p=o.map(g=>({...g,resolved:e1(g.path,l,d,f)})),h=o.length===1;return b.jsx(k0,{open:r,onOpenChange:g=>!g&&a(),children:b.jsxs(Kc,{className:"max-w-md max-h-[80vh] flex flex-col",children:[b.jsxs(Qc,{children:[b.jsxs($c,{children:["Message Path",!h&&`s (${o.length})`]}),b.jsx(Yc,{children:h?b.jsxs(b.Fragment,{children:["This shows ",b.jsx("em",{children:"one route"})," that this message traveled through the mesh network. Routers may be incorrectly identified due to prefix collisions between heard and non-heard router advertisements."]}):b.jsxs(b.Fragment,{children:["This message was received via ",b.jsxs("strong",{children:[o.length," different routes"]}),". Routers may be incorrectly identified due to prefix collisions."]})})]}),b.jsxs("div",{className:"flex-1 overflow-y-auto py-2 space-y-4",children:[p.map((g,m)=>b.jsxs("div",{children:[!h&&b.jsxs("div",{className:"text-xs text-muted-foreground font-medium mb-2 pb-1 border-b border-border",children:["Path ",m+1," — received ",Qs(g.received_at)]}),b.jsx(Zw,{resolved:g.resolved,senderInfo:l,hideStraightLine:!h})]},m)),!h&&p.length>0&&(()=>{const g=p[0].resolved;return St(g.sender.lat,g.sender.lon)&&St(g.receiver.lat,g.receiver.lon)?b.jsxs("div",{className:"pt-3 mt-1 border-t border-border",children:[b.jsx("span",{className:"text-sm text-muted-foreground",children:"Straight-line distance: "}),b.jsx("span",{className:"text-sm font-medium",children:Qo(Fr(g.sender.lat,g.sender.lon,g.receiver.lat,g.receiver.lon))})]}):null})()]}),b.jsx(S0,{children:b Line truncated
`).map(($,ce,de)=>b.jsxs("span",{children:[Gw($,h),ce<de.length-1&&b.jsx("br",{})]},ce)),!me&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[10px] text-muted-foreground/50 ml-2",children:Qs(j.sender_timestamp||j.received_at)}),!j.outgoing&&j.paths&&j.paths.length>0&&b.jsx(dm,{paths:j.paths,variant:"inline",onClick:()=>C({paths:j.paths,senderInfo:I(j,W,ne)})})]}),j.outgoing&&(j.acked>0?` ✓${j.acked>1?j.acked:""}`:" ?")]})]})]},j.id)})]}),w&&b.jsx("button",{onClick:T,className:"absolute bottom-4 right-4 w-10 h-10 rounded-full bg-muted hover:bg-accent border border-border flex items-center justify-center shadow-lg transition-opacity",title:"Scroll to bottom",children:b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-muted-foreground",children:b.jsx("polyline",{points:"6 9 12 15 18 9"})})}),D&&b.jsx(Uw,{open:!0,onClose:()=>C(null),paths:D.paths,senderInfo:D.senderInfo,contacts:a,config:g??null})]})}const fm=156,Qw=140,$w=156,Yw=120,Xw=8,Jw=F.forwardRef(function({onSend:a,disabled:o,placeholder:l,isRepeaterMode:d,conversationType:f,senderName:p},h){const[g,m]=F.useState(""),[v,y]=F.useState(!1),w=F.useRef(null);F.useImperativeHandle(h,()=>({appendText:I=>{var H;m(z=>z+I),(H=w.current)==null||H.focus()}}));const P=F.useMemo(()=>{if(f==="contact")return{warningAt:Qw,dangerAt:fm,hardLimit:fm};if(f==="channel"){const I=(p==null?void 0:p.length)??10,H=Math.max(1,$w-I-2);return{warningAt:Yw,dangerAt:Math.max(1,H-Xw),hardLimit:H}}return null},[f,p]),{limitState:D,warningMessage:C}=F.useMemo(()=>{if(!P)return{limitState:"normal",warningMessage:null};const I=g.length;return I>=P.hardLimit?{limitState:"error",warningMessage:"likely truncated by radio"}:I>=P.dangerAt?{limitState:"danger",warningMessage:"may impact multi-repeater hop delivery"}:I>=P.warningAt?{limitState:"warning",warningMessage:"may impact multi-repeater hop delivery"}:{limitState:"normal",warningMessage:null}},[g.length,P]),k=P?P.hardLimit-g.length:0,R=F.useCallback(async I=>{I.preventDefault();const H=g.trim();if(d){if(v||o)return;y(!0);try{await a(H),m("")}catch(z){console.error("Failed to request telemetry:",z),xt.error("Failed to request telemetry",{description:z instanceof Error?z.message:"Check radio connection"});return}finally{y(!1)}setTimeout(()=>{var z;return(z=w.current)==null?void 0:z.focus()},0)}else{if(!H||v||o)return;y(!0);try{await a(H),m("")}catch(z){console.error("Failed to send message:",z),xt.error("Failed to send message",{description:z instanceof Error?z.message:"Check radio connection"});return}finally{y(!1)}setTimeout(()=>{var z;return(z=w.current)==null?void 0:z.focus()},0)}},[g,v,o,a,d]),T=F.useCallback(I=>{I.key==="Enter"&&!I.shiftKey&&(I.preventDefault(),R(I))},[R]),S=d?!0:g.trim().length>0,N=!d&&P!==null;return b.jsxs("form",{className:"px-4 py-3 border-t border-border flex flex-col gap-1",onSubmit:R,children:[b.jsxs("div",{className:"flex gap-2",children:[b.jsx(tn,{ref:w,type:d?"password":"text",autoComplete:d?"off":void 0,value:g,onChange:I=>m(I.target.value),onKeyDown:T,placeholder:l||(d?"Enter password for admin login...":"Type a message..."),disabled:o||v,className:"flex-1 min-w-0"}),b.jsx(Pn,{type:"submit",disabled:o||v||!S,className:"flex-shrink-0",children:v?d?"Logging in...":"Sending...":d?g.trim()?"Log in with password":"Log in as guest/use repeater ACLs":"Send"})]}),N&&b.jsxs("div",{className:"flex items-center justify-end gap-2 text-xs",children:[b.jsxs("span",{className:ut("tabular-nums",D==="error"||D==="danger"?"text-red-500 font-medium":D==="warning"?"text-yellow-500":"text-muted-foreground"),children:[g.length,"/",P.hardLimit,k<0&&` (${k})`]}),C&&b.jsxs("span",{className:ut(D==="error"?"text-red-500":"text-yellow-500"),children:["— ",C]})]})]})});function hm(r){const a=e2(r),o=F.forwardRef((l,d)=>{const{children:f,...p}=l,h=F.Children.toArray(f),g=h.find(n2);if(g){const m=g.props.children,v=h.map(y=>y===g?F.Children.count(m)>1?F.Children.only(null):F.isValidElement(m)?m.props.children:null:y);return b.jsx(a,{...p,ref:d,children:F.isValidElement(m)?F.cloneElement(m,void 0,v):null})}return b.jsx(a,{...p,ref:d,children:f})});return o.displayName=`${r}.Slot`,o}function e2(r){const a=F.forwardRef((o,l)=>{const{children:d,...f}=o;if(F.isValidElement(d)){const p=i2(d),h=r2(f,d.props);return d.type!==F.Fragment&&(h.ref=l?hl(l,p):p),F.cloneElement(d,h)}return F.Children.count(d)>1?F.Children.only(null):null});return a.displayName=`${r}.SlotClone`,a}var t2=Symbol("radix.slottable");function n2(r){return F.isValidElement(r)&&typeof r.type=="function"&&"__radixId"in r.type&&r.type.__radixId===t2}function r2(r,a){const o={...a};for(const l in a){const d=r[l],f=a[l];/^on[A-Z]/.test(l)?d&&f?o[l]=(...h)=>{const g=f(...h);return d(...h),g}:d&&(o[l]=d):l==="style"?o[l]={...d,...f}:l==="className"&&(o[l]=[d,f].filter(Boolean).join(" "))}return{...r,...o}}functio Line truncated
* Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
* (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/var Y2=sl.exports,gm;function X2(){return gm||(gm=1,(function(r,a){(function(o,l){l(a)})(Y2,(function(o){var l="1.9.4";function d(t){var i,u,A,E;for(u=1,A=arguments.length;u<A;u++){E=arguments[u];for(i in E)t[i]=E[i]}return t}var f=Object.create||(function(){function t(){}return function(i){return t.prototype=i,new t}})();function p(t,i){var u=Array.prototype.slice;if(t.bind)return t.bind.apply(t,u.call(arguments,1));var A=u.call(arguments,2);return function(){return t.apply(i,A.length?A.concat(u.call(arguments)):arguments)}}var h=0;function g(t){return"_leaflet_id"in t||(t._leaflet_id=++h),t._leaflet_id}function m(t,i,u){var A,E,O,Q;return Q=function(){A=!1,E&&(O.apply(u,E),E=!1)},O=function(){A?E=arguments:(t.apply(u,arguments),setTimeout(Q,i),A=!0)},O}function v(t,i,u){var A=i[1],E=i[0],O=A-E;return t===A&&u?t:((t-E)%O+O)%O+E}function y(){return!1}function w(t,i){if(i===!1)return t;var u=Math.pow(10,i===void 0?6:i);return Math.round(t*u)/u}function P(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function D(t){return P(t).split(/\s+/)}function C(t,i){Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?f(t.options):{});for(var u in i)t.options[u]=i[u];return t.options}function k(t,i,u){var A=[];for(var E in t)A.push(encodeURIComponent(u?E.toUpperCase():E)+"="+encodeURIComponent(t[E]));return(!i||i.indexOf("?")===-1?"?":"&")+A.join("&")}var R=/\{ *([\w_ -]+) *\}/g;function T(t,i){return t.replace(R,function(u,A){var E=i[A];if(E===void 0)throw new Error("No value provided for variable "+u);return typeof E=="function"&&(E=E(i)),E})}var S=Array.isArray||function(t){return Object.prototype.toString.call(t)==="[object Array]"};function N(t,i){for(var u=0;u<t.length;u++)if(t[u]===i)return u;return-1}var I="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function H(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var z=0;function j(t){var i=+new Date,u=Math.max(0,16-(i-z));return z=i+u,window.setTimeout(t,u)}var J=window.requestAnimationFrame||H("RequestAnimationFrame")||j,W=window.cancelAnimationFrame||H("CancelAnimationFrame")||H("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function U(t,i,u){if(u&&J===j)t.call(i);else return J.call(window,p(t,i))}function te(t){t&&W.call(window,t)}var X={__proto__:null,extend:d,create:f,bind:p,get lastId(){return h},stamp:g,throttle:m,wrapNum:v,falseFn:y,formatNum:w,trim:P,splitWords:D,setOptions:C,getParamString:k,template:T,isArray:S,indexOf:N,emptyImageUrl:I,requestFn:J,cancelFn:W,requestAnimFrame:U,cancelAnimFrame:te};function re(){}re.extend=function(t){var i=function(){C(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},u=i.__super__=this.prototype,A=f(u);A.constructor=i,i.prototype=A;for(var E in this)Object.prototype.hasOwnProperty.call(this,E)&&E!=="prototype"&&E!=="__super__"&&(i[E]=this[E]);return t.statics&&d(i,t.statics),t.includes&&(fe(t.includes),d.apply(null,[A].concat(t.includes))),d(A,t),delete A.statics,delete A.includes,A.options&&(A.options=u.options?f(u.options):{},d(A.options,t.options)),A._initHooks=[],A.callInitHooks=function(){if(!this._initHooksCalled){u.callInitHooks&&u.callInitHooks.call(this),this._initHooksCalled=!0;for(var O=0,Q=A._initHooks.length;O<Q;O++)A._initHooks[O].call(this)}},i},re.include=function(t){var i=this.prototype.options;return d(this.prototype,t),t.options&&(this.prototype.options=i,this.mergeOptions(t.options)),this},re.mergeOptions=function(t){return d(this.prototype.options,t),this},re.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),u=typeof t=="function"?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(u),this};function fe(t){if(!(typeof L>"u"||!L||!L.Mixin)){t=S(t)?t:[t];for(var i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",new Error().stack)}}var ae={on:function(t,i,u){if(typeof t=="object")for(var A in t)this._on(A,t[A],i);else{t=D(t);for(var E=0,O=t.length;E<O;E++)this._on(t[E],i,u)}return this},off:function(t,i,u){if(!arguments.length)delete this._events;else if(typeof t=="object")for(var A in t)this._off(A,t[A],i);else{t=D(t);for(var E=arguments.length===1,O=0,Q=t.length;O<Q;O++)E?this._off(t[O]):this._off(t[O],i,u)}return this},_on:function(t,i,u,A){if(typeof i!="function"){console.warn("wrong listener type: "+typeof i);return}if(this._listens(t,i,u)===!1){u===this&&(u=void 0);var E={fn:i,ctx:u};A&&(E.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(E)}},_off:function(t,i,u){var A,E,O;if(this._events&&(A=this._events[t],!!A)){if(arguments.length===1){if(this._firingCount)for(E=0,O=A.length;E<O;E++)A[E].fn=y;delete this._events[t];return}if(typeof i!="function"){console.warn("wrong listener type: "+typeof i);return}var Q=this.Line truncated
*/var Y2=sl.exports,gm;function X2(){return gm||(gm=1,(function(r,a){(function(o,l){l(a)})(Y2,(function(o){var l="1.9.4";function d(t){var i,u,A,E;for(u=1,A=arguments.length;u<A;u++){E=arguments[u];for(i in E)t[i]=E[i]}return t}var f=Object.create||(function(){function t(){}return function(i){return t.prototype=i,new t}})();function p(t,i){var u=Array.prototype.slice;if(t.bind)return t.bind.apply(t,u.call(arguments,1));var A=u.call(arguments,2);return function(){return t.apply(i,A.length?A.concat(u.call(arguments)):arguments)}}var h=0;function g(t){return"_leaflet_id"in t||(t._leaflet_id=++h),t._leaflet_id}function m(t,i,u){var A,E,O,Q;return Q=function(){A=!1,E&&(O.apply(u,E),E=!1)},O=function(){A?E=arguments:(t.apply(u,arguments),setTimeout(Q,i),A=!0)},O}function v(t,i,u){var A=i[1],E=i[0],O=A-E;return t===A&&u?t:((t-E)%O+O)%O+E}function y(){return!1}function w(t,i){if(i===!1)return t;var u=Math.pow(10,i===void 0?6:i);return Math.round(t*u)/u}function P(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function D(t){return P(t).split(/\s+/)}function C(t,i){Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?f(t.options):{});for(var u in i)t.options[u]=i[u];return t.options}function k(t,i,u){var A=[];for(var E in t)A.push(encodeURIComponent(u?E.toUpperCase():E)+"="+encodeURIComponent(t[E]));return(!i||i.indexOf("?")===-1?"?":"&")+A.join("&")}var R=/\{ *([\w_ -]+) *\}/g;function T(t,i){return t.replace(R,function(u,A){var E=i[A];if(E===void 0)throw new Error("No value provided for variable "+u);return typeof E=="function"&&(E=E(i)),E})}var S=Array.isArray||function(t){return Object.prototype.toString.call(t)==="[object Array]"};function N(t,i){for(var u=0;u<t.length;u++)if(t[u]===i)return u;return-1}var I="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function H(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var z=0;function j(t){var i=+new Date,u=Math.max(0,16-(i-z));return z=i+u,window.setTimeout(t,u)}var J=window.requestAnimationFrame||H("RequestAnimationFrame")||j,W=window.cancelAnimationFrame||H("CancelAnimationFrame")||H("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function U(t,i,u){if(u&&J===j)t.call(i);else return J.call(window,p(t,i))}function ne(t){t&&W.call(window,t)}var Y={__proto__:null,extend:d,create:f,bind:p,get lastId(){return h},stamp:g,throttle:m,wrapNum:v,falseFn:y,formatNum:w,trim:P,splitWords:D,setOptions:C,getParamString:k,template:T,isArray:S,indexOf:N,emptyImageUrl:I,requestFn:J,cancelFn:W,requestAnimFrame:U,cancelAnimFrame:ne};function re(){}re.extend=function(t){var i=function(){C(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},u=i.__super__=this.prototype,A=f(u);A.constructor=i,i.prototype=A;for(var E in this)Object.prototype.hasOwnProperty.call(this,E)&&E!=="prototype"&&E!=="__super__"&&(i[E]=this[E]);return t.statics&&d(i,t.statics),t.includes&&(fe(t.includes),d.apply(null,[A].concat(t.includes))),d(A,t),delete A.statics,delete A.includes,A.options&&(A.options=u.options?f(u.options):{},d(A.options,t.options)),A._initHooks=[],A.callInitHooks=function(){if(!this._initHooksCalled){u.callInitHooks&&u.callInitHooks.call(this),this._initHooksCalled=!0;for(var O=0,Q=A._initHooks.length;O<Q;O++)A._initHooks[O].call(this)}},i},re.include=function(t){var i=this.prototype.options;return d(this.prototype,t),t.options&&(this.prototype.options=i,this.mergeOptions(t.options)),this},re.mergeOptions=function(t){return d(this.prototype.options,t),this},re.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),u=typeof t=="function"?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(u),this};function fe(t){if(!(typeof L>"u"||!L||!L.Mixin)){t=S(t)?t:[t];for(var i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",new Error().stack)}}var ae={on:function(t,i,u){if(typeof t=="object")for(var A in t)this._on(A,t[A],i);else{t=D(t);for(var E=0,O=t.length;E<O;E++)this._on(t[E],i,u)}return this},off:function(t,i,u){if(!arguments.length)delete this._events;else if(typeof t=="object")for(var A in t)this._off(A,t[A],i);else{t=D(t);for(var E=arguments.length===1,O=0,Q=t.length;O<Q;O++)E?this._off(t[O]):this._off(t[O],i,u)}return this},_on:function(t,i,u,A){if(typeof i!="function"){console.warn("wrong listener type: "+typeof i);return}if(this._listens(t,i,u)===!1){u===this&&(u=void 0);var E={fn:i,ctx:u};A&&(E.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(E)}},_off:function(t,i,u){var A,E,O;if(this._events&&(A=this._events[t],!!A)){if(arguments.length===1){if(this._firingCount)for(E=0,O=A.length;E<O;E++)A[E].fn=y;delete this._events[t];return}if(typeof i!="function"){console.warn("wrong listener type: "+typeof i);return}var Q=this.Line truncated
(c) 2012 by Cédric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@@ -135,17 +135,17 @@ For more information, see https://radix-ui.com/primitives/docs/components/${a.do
- 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.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 HOLDER 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.
*/return(function(l){var d=o,f=d.lib,p=f.WordArray,h=f.Hasher,g=d.algo,m=p.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),v=p.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),y=p.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),w=p.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),P=p.create([0,1518500249,1859775393,2400959708,2840853838]),D=p.create([1352829926,1548603684,1836072691,2053994217,0]),C=g.RIPEMD160=h.extend({_doReset:function(){this._hash=p.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(H,z){for(var j=0;j<16;j++){var J=z+j,W=H[J];H[J]=(W<<8|W>>>24)&16711935|(W<<24|W>>>8)&4278255360}var U=this._hash.words,te=P.words,X=D.words,re=m.words,fe=v.words,ae=y.words,he=w.words,G,pe,Z,B,V,K,$,ce,de,Se;K=G=U[0],$=pe=U[1],ce=Z=U[2],de=B=U[3],Se=V=U[4];for(var Ae,j=0;j<80;j+=1)Ae=G+H[z+re[j]]|0,j<16?Ae+=k(pe,Z,B)+te[0]:j<32?Ae+=R(pe,Z,B)+te[1]:j<48?Ae+=T(pe,Z,B)+te[2]:j<64?Ae+=S(pe,Z,B)+te[3]:Ae+=N(pe,Z,B)+te[4],Ae=Ae|0,Ae=I(Ae,ae[j]),Ae=Ae+V|0,G=V,V=B,B=I(Z,10),Z=pe,pe=Ae,Ae=K+H[z+fe[j]]|0,j<16?Ae+=N($,ce,de)+X[0]:j<32?Ae+=S($,ce,de)+X[1]:j<48?Ae+=T($,ce,de)+X[2]:j<64?Ae+=R($,ce,de)+X[3]:Ae+=k($,ce,de)+X[4],Ae=Ae|0,Ae=I(Ae,he[j]),Ae=Ae+Se|0,K=Se,Se=de,de=I(ce,10),ce=$,$=Ae;Ae=U[1]+Z+de|0,U[1]=U[2]+B+Se|0,U[2]=U[3]+V+K|0,U[3]=U[4]+G+$|0,U[4]=U[0]+pe+ce|0,U[0]=Ae},_doFinalize:function(){var H=this._data,z=H.words,j=this._nDataBytes*8,J=H.sigBytes*8;z[J>>>5]|=128<<24-J%32,z[(J+64>>>9<<4)+14]=(j<<8|j>>>24)&16711935|(j<<24|j>>>8)&4278255360,H.sigBytes=(z.length+1)*4,this._process();for(var W=this._hash,U=W.words,te=0;te<5;te++){var X=U[te];U[te]=(X<<8|X>>>24)&16711935|(X<<24|X>>>8)&4278255360}return W},clone:function(){var H=h.clone.call(this);return H._hash=this._hash.clone(),H}});function k(H,z,j){return H^z^j}function R(H,z,j){return H&z|~H&j}function T(H,z,j){return(H|~z)^j}function S(H,z,j){return H&j|z&~j}function N(H,z,j){return H^(z|~j)}function I(H,z){return H<<z|H>>>32-z}d.RIPEMD160=h._createHelper(C),d.HmacRIPEMD160=h._createHmacHelper(C)})(),o.RIPEMD160})})(oc)),oc.exports}var sc={exports:{}},Hb=sc.exports,Lm;function id(){return Lm||(Lm=1,(function(r,a){(function(o,l){r.exports=l(mt())})(Hb,function(o){(function(){var l=o,d=l.lib,f=d.Base,p=l.enc,h=p.Utf8,g=l.algo;g.HMAC=f.extend({init:function(m,v){m=this._hasher=new m.init,typeof v=="string"&&(v=h.parse(v));var y=m.blockSize,w=y*4;v.sigBytes>w&&(v=m.finalize(v)),v.clamp();for(var P=this._oKey=v.clone(),D=this._iKey=v.clone(),C=P.words,k=D.words,R=0;R<y;R++)C[R]^=1549556828,k[R]^=909522486;P.sigBytes=D.sigBytes=w,this.reset()},reset:function(){var m=this._hasher;m.reset(),m.update(this._iKey)},update:function(m){return this._hasher.update(m),this},finalize:function(m){var v=this._hasher,y=v.finalize(m);v.reset();var w=v.finalize(this._oKey.clone().concat(y));return w}})})()})})(sc)),sc.exports}var ac={exports:{}},Vb=ac.exports,Mm;function Ub(){return Mm||(Mm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),ml(),id())})(Vb,function(o){return(function(){var l=o,d=l.lib,f=d.Base,p=d.WordArray,h=l.algo,g=h.SHA256,m=h.HMAC,v=h.PBKDF2=f.extend({cfg:f.extend({keySize:128/32,hasher:g,iterations:25e4}),init:function(y){this.cfg=this.cfg.extend(y)},compute:function(y,w){for(var P=this.cfg,D=m.create(P.hasher,y),C=p.create(),k=p.create([1]),R=C.words,T=k.words,S=P.keySize,N=P.iterations;R.length<S;){var I=D.update(w).finalize(k);D.reset();for(var H=I.words,z=H.length,j=I,J=1;J<N;J++){j=D.finalize(j),D.reset();for(var W=j.words,U=0;U<z;U++)H[U]^=W[U]}C.concat(I),T[0]++}return C.sigBytes=S*4,C}});l.PBKDF2=function(y,w,P){return v.create(P).compute(y,w)}})(),o.PBKDF2})})(ac)),ac.exports}var lc={exports:{}},Zb=lc.exports,Im;function fo(){return Im||(Im=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),Ex(),id())})(Zb,function(o){return(function(){var l=o,d=l.lib,f=d.Base,p=d.WordArray,h=l.algo,g=h.MD5,m=h.EvpKDF=f.extend({cfg:f.extend({keySize:128/32,hasher:g,iterations:1}),init:function(v){this.cfg=this.cfg.extend(v)},compute:function(v,y){for(var w,P=this.cfg,D=P.hasher.create(),C=p.create(),k=C.words,R=P.keySize,T=P.iterations;k.length<R;){w&&D.update(w),w=D.update(v).finalize(y),D.reset();for(var S=1;S<T;S++)w=D.finalize(w),D.reset();C.concat(w)}return C.sigBytes=R*4,C}});l.EvpKDF=function(v,y,w){return m.create(w).compute(v,y)}})(),o.EvpKDF})})(lc)),lc.exports}var uc={exports:{}},Wb=uc.exports,Line truncated
*/return(function(l){var d=o,f=d.lib,p=f.WordArray,h=f.Hasher,g=d.algo,m=p.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),v=p.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),y=p.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),w=p.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),P=p.create([0,1518500249,1859775393,2400959708,2840853838]),D=p.create([1352829926,1548603684,1836072691,2053994217,0]),C=g.RIPEMD160=h.extend({_doReset:function(){this._hash=p.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(H,z){for(var j=0;j<16;j++){var J=z+j,W=H[J];H[J]=(W<<8|W>>>24)&16711935|(W<<24|W>>>8)&4278255360}var U=this._hash.words,ne=P.words,Y=D.words,re=m.words,fe=v.words,ae=y.words,he=w.words,G,me,Z,B,V,K,$,ce,de,Se;K=G=U[0],$=me=U[1],ce=Z=U[2],de=B=U[3],Se=V=U[4];for(var Ae,j=0;j<80;j+=1)Ae=G+H[z+re[j]]|0,j<16?Ae+=k(me,Z,B)+ne[0]:j<32?Ae+=R(me,Z,B)+ne[1]:j<48?Ae+=T(me,Z,B)+ne[2]:j<64?Ae+=S(me,Z,B)+ne[3]:Ae+=N(me,Z,B)+ne[4],Ae=Ae|0,Ae=I(Ae,ae[j]),Ae=Ae+V|0,G=V,V=B,B=I(Z,10),Z=me,me=Ae,Ae=K+H[z+fe[j]]|0,j<16?Ae+=N($,ce,de)+Y[0]:j<32?Ae+=S($,ce,de)+Y[1]:j<48?Ae+=T($,ce,de)+Y[2]:j<64?Ae+=R($,ce,de)+Y[3]:Ae+=k($,ce,de)+Y[4],Ae=Ae|0,Ae=I(Ae,he[j]),Ae=Ae+Se|0,K=Se,Se=de,de=I(ce,10),ce=$,$=Ae;Ae=U[1]+Z+de|0,U[1]=U[2]+B+Se|0,U[2]=U[3]+V+K|0,U[3]=U[4]+G+$|0,U[4]=U[0]+me+ce|0,U[0]=Ae},_doFinalize:function(){var H=this._data,z=H.words,j=this._nDataBytes*8,J=H.sigBytes*8;z[J>>>5]|=128<<24-J%32,z[(J+64>>>9<<4)+14]=(j<<8|j>>>24)&16711935|(j<<24|j>>>8)&4278255360,H.sigBytes=(z.length+1)*4,this._process();for(var W=this._hash,U=W.words,ne=0;ne<5;ne++){var Y=U[ne];U[ne]=(Y<<8|Y>>>24)&16711935|(Y<<24|Y>>>8)&4278255360}return W},clone:function(){var H=h.clone.call(this);return H._hash=this._hash.clone(),H}});function k(H,z,j){return H^z^j}function R(H,z,j){return H&z|~H&j}function T(H,z,j){return(H|~z)^j}function S(H,z,j){return H&j|z&~j}function N(H,z,j){return H^(z|~j)}function I(H,z){return H<<z|H>>>32-z}d.RIPEMD160=h._createHelper(C),d.HmacRIPEMD160=h._createHmacHelper(C)})(),o.RIPEMD160})})(sc)),sc.exports}var ac={exports:{}},Hb=ac.exports,Lm;function id(){return Lm||(Lm=1,(function(r,a){(function(o,l){r.exports=l(mt())})(Hb,function(o){(function(){var l=o,d=l.lib,f=d.Base,p=l.enc,h=p.Utf8,g=l.algo;g.HMAC=f.extend({init:function(m,v){m=this._hasher=new m.init,typeof v=="string"&&(v=h.parse(v));var y=m.blockSize,w=y*4;v.sigBytes>w&&(v=m.finalize(v)),v.clamp();for(var P=this._oKey=v.clone(),D=this._iKey=v.clone(),C=P.words,k=D.words,R=0;R<y;R++)C[R]^=1549556828,k[R]^=909522486;P.sigBytes=D.sigBytes=w,this.reset()},reset:function(){var m=this._hasher;m.reset(),m.update(this._iKey)},update:function(m){return this._hasher.update(m),this},finalize:function(m){var v=this._hasher,y=v.finalize(m);v.reset();var w=v.finalize(this._oKey.clone().concat(y));return w}})})()})})(ac)),ac.exports}var lc={exports:{}},Vb=lc.exports,Mm;function Ub(){return Mm||(Mm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),gl(),id())})(Vb,function(o){return(function(){var l=o,d=l.lib,f=d.Base,p=d.WordArray,h=l.algo,g=h.SHA256,m=h.HMAC,v=h.PBKDF2=f.extend({cfg:f.extend({keySize:128/32,hasher:g,iterations:25e4}),init:function(y){this.cfg=this.cfg.extend(y)},compute:function(y,w){for(var P=this.cfg,D=m.create(P.hasher,y),C=p.create(),k=p.create([1]),R=C.words,T=k.words,S=P.keySize,N=P.iterations;R.length<S;){var I=D.update(w).finalize(k);D.reset();for(var H=I.words,z=H.length,j=I,J=1;J<N;J++){j=D.finalize(j),D.reset();for(var W=j.words,U=0;U<z;U++)H[U]^=W[U]}C.concat(I),T[0]++}return C.sigBytes=S*4,C}});l.PBKDF2=function(y,w,P){return v.create(P).compute(y,w)}})(),o.PBKDF2})})(lc)),lc.exports}var uc={exports:{}},Zb=uc.exports,Im;function fo(){return Im||(Im=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),Ex(),id())})(Zb,function(o){return(function(){var l=o,d=l.lib,f=d.Base,p=d.WordArray,h=l.algo,g=h.MD5,m=h.EvpKDF=f.extend({cfg:f.extend({keySize:128/32,hasher:g,iterations:1}),init:function(v){this.cfg=this.cfg.extend(v)},compute:function(v,y){for(var w,P=this.cfg,D=P.hasher.create(),C=p.create(),k=C.words,R=P.keySize,T=P.iterations;k.length<R;){w&&D.update(w),w=D.update(v).finalize(y),D.reset();for(var S=1;S<T;S++)w=D.finalize(w),D.reset();C.concat(w)}return C.sigBytes=R*4,C}});l.EvpKDF=function(v,y,w){return m.create(w).compute(v,y)}})(),o.EvpKDF})})(uc)),uc.exports}var cc={exports:{}},Wb=cc.exports,Line truncated
* Counter block mode compatible with Dr Brian Gladman fileenc.c
* derived from CryptoJS.mode.CTR
* Jan Hruby jhruby.web@gmail.com
*/return o.mode.CTRGladman=(function(){var l=o.lib.BlockCipherMode.extend();function d(h){if((h>>24&255)===255){var g=h>>16&255,m=h>>8&255,v=h&255;g===255?(g=0,m===255?(m=0,v===255?v=0:++v):++m):++g,h=0,h+=g<<16,h+=m<<8,h+=v}else h+=1<<24;return h}function f(h){return(h[0]=d(h[0]))===0&&(h[1]=d(h[1])),h}var p=l.Encryptor=l.extend({processBlock:function(h,g){var m=this._cipher,v=m.blockSize,y=this._iv,w=this._counter;y&&(w=this._counter=y.slice(0),this._iv=void 0),f(w);var P=w.slice(0);m.encryptBlock(P,0);for(var D=0;D<v;D++)h[g+D]^=P[D]}});return l.Decryptor=p,l})(),o.mode.CTRGladman})})(fc)),fc.exports}var hc={exports:{}},Xb=hc.exports,Vm;function Jb(){return Vm||(Vm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(Xb,function(o){return o.mode.OFB=(function(){var l=o.lib.BlockCipherMode.extend(),d=l.Encryptor=l.extend({processBlock:function(f,p){var h=this._cipher,g=h.blockSize,m=this._iv,v=this._keystream;m&&(v=this._keystream=m.slice(0),this._iv=void 0),h.encryptBlock(v,0);for(var y=0;y<g;y++)f[p+y]^=v[y]}});return l.Decryptor=d,l})(),o.mode.OFB})})(hc)),hc.exports}var pc={exports:{}},eC=pc.exports,Um;function tC(){return Um||(Um=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(eC,function(o){return o.mode.ECB=(function(){var l=o.lib.BlockCipherMode.extend();return l.Encryptor=l.extend({processBlock:function(d,f){this._cipher.encryptBlock(d,f)}}),l.Decryptor=l.extend({processBlock:function(d,f){this._cipher.decryptBlock(d,f)}}),l})(),o.mode.ECB})})(pc)),pc.exports}var mc={exports:{}},nC=mc.exports,Zm;function rC(){return Zm||(Zm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(nC,function(o){return o.pad.AnsiX923={pad:function(l,d){var f=l.sigBytes,p=d*4,h=p-f%p,g=f+h-1;l.clamp(),l.words[g>>>2]|=h<<24-g%4*8,l.sigBytes+=h},unpad:function(l){var d=l.words[l.sigBytes-1>>>2]&255;l.sigBytes-=d}},o.pad.Ansix923})})(mc)),mc.exports}var gc={exports:{}},iC=gc.exports,Wm;function oC(){return Wm||(Wm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(iC,function(o){return o.pad.Iso10126={pad:function(l,d){var f=d*4,p=f-l.sigBytes%f;l.concat(o.lib.WordArray.random(p-1)).concat(o.lib.WordArray.create([p<<24],1))},unpad:function(l){var d=l.words[l.sigBytes-1>>>2]&255;l.sigBytes-=d}},o.pad.Iso10126})})(gc)),gc.exports}var Ac={exports:{}},sC=Ac.exports,qm;function aC(){return qm||(qm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(sC,function(o){return o.pad.Iso97971={pad:function(l,d){l.concat(o.lib.WordArray.create([2147483648],1)),o.pad.ZeroPadding.pad(l,d)},unpad:function(l){o.pad.ZeroPadding.unpad(l),l.sigBytes--}},o.pad.Iso97971})})(Ac)),Ac.exports}var xc={exports:{}},lC=xc.exports,Gm;function uC(){return Gm||(Gm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(lC,function(o){return o.pad.ZeroPadding={pad:function(l,d){var f=d*4;l.clamp(),l.sigBytes+=f-(l.sigBytes%f||f)},unpad:function(l){for(var d=l.words,f=l.sigBytes-1,f=l.sigBytes-1;f>=0;f--)if(d[f>>>2]>>>24-f%4*8&255){l.sigBytes=f+1;break}}},o.pad.ZeroPadding})})(xc)),xc.exports}var vc={exports:{}},cC=vc.exports,Km;function dC(){return Km||(Km=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(cC,function(o){return o.pad.NoPadding={pad:function(){},unpad:function(){}},o.pad.NoPadding})})(vc)),vc.exports}var yc={exports:{}},fC=yc.exports,Qm;function hC(){return Qm||(Qm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(fC,function(o){return(function(l){var d=o,f=d.lib,p=f.CipherParams,h=d.enc,g=h.Hex,m=d.format;m.Hex={stringify:function(v){return v.ciphertext.toString(g)},parse:function(v){var y=g.parse(v);return p.create({ciphertext:y})}}})(),o.format.Hex})})(yc)),yc.exports}var _c={exports:{}},pC=_c.exports,$m;function mC(){return $m||($m=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),Yo(),Xo(),fo(),mn())})(pC,function(o){return(function(){var l=o,d=l.lib,f=d.BlockCipher,p=l.algo,h=[],g=[],m=[],v=[],y=[],w=[],P=[],D=[],C=[],k=[];(function(){for(var S=[],N=0;N<256;N++)N<128?S[N]=N<<1:S[N]=N<<1^283;for(var I=0,H=0,N=0;N<256;N++){var z=H^H<<1^H<<2^H<<3^H<<4;z=z>>>8^z&255^99,h[I]=z,g[z]=I;var j=S[I],J=S[j],W=S[J],U=S[z]*257^z*16843008;m[I]=U<<24|U>>>8,v[I]=U<<16|U>>>16,y[I]=U<<8|U>>>24,w[I]=U;var U=W*16843009^J*65537^j*257^I*16843008;P[z]=U<<24|U>>>8,D[z]=U<<16|U>>>16,C[z]=U<<8|U>>>24,k[z]=U,I?(I=j^S[S[S[W^j]]],H^=S[S[H]]):I=H=1}})();var R=[0,1,2,4,8,16,32,64,128,27,54],T=p.AES=f.extend({_doReset:function(){var S;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var N=this._keyPriorReset=this._key,I=N.words,H=N.sigBytes/4,z=this._nRounds=H+6,j=(z+1)*4,J=this._keySchedule=[],W=0;W<j;W++)W<H?J[W]=I[W]:(S=J[W-1],W%H?H>6&&W%H==4&&(S=h[S>>>24]<<24|h[S>>>16&255]<<16|h[S>>>8&255]<<8|h[S&255]):(S=S<<8|S>>>24,S=h[S>>>24]<<24|h[S>>>16&255]<<16|h[S>>>8&255]<<8|h[S&255],S^=R[W/H|0]<<24),J[W]=J[W-H]^S);for(var U=this._invKeySchedule=[],te=0;te<j;te++){var W=j-te;if(te%4)var S=J[W];else var S=J[W-4];te<4||W<=4?U[te]=S:U[te]=P[h[S>>>24]]^D[h[S>>>16&255]]^C[h[S>>>8&255]]^k[h[S&255]]}}},encryLine truncated
*/return o.mode.CTRGladman=(function(){var l=o.lib.BlockCipherMode.extend();function d(h){if((h>>24&255)===255){var g=h>>16&255,m=h>>8&255,v=h&255;g===255?(g=0,m===255?(m=0,v===255?v=0:++v):++m):++g,h=0,h+=g<<16,h+=m<<8,h+=v}else h+=1<<24;return h}function f(h){return(h[0]=d(h[0]))===0&&(h[1]=d(h[1])),h}var p=l.Encryptor=l.extend({processBlock:function(h,g){var m=this._cipher,v=m.blockSize,y=this._iv,w=this._counter;y&&(w=this._counter=y.slice(0),this._iv=void 0),f(w);var P=w.slice(0);m.encryptBlock(P,0);for(var D=0;D<v;D++)h[g+D]^=P[D]}});return l.Decryptor=p,l})(),o.mode.CTRGladman})})(hc)),hc.exports}var pc={exports:{}},Xb=pc.exports,Vm;function Jb(){return Vm||(Vm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(Xb,function(o){return o.mode.OFB=(function(){var l=o.lib.BlockCipherMode.extend(),d=l.Encryptor=l.extend({processBlock:function(f,p){var h=this._cipher,g=h.blockSize,m=this._iv,v=this._keystream;m&&(v=this._keystream=m.slice(0),this._iv=void 0),h.encryptBlock(v,0);for(var y=0;y<g;y++)f[p+y]^=v[y]}});return l.Decryptor=d,l})(),o.mode.OFB})})(pc)),pc.exports}var mc={exports:{}},eC=mc.exports,Um;function tC(){return Um||(Um=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(eC,function(o){return o.mode.ECB=(function(){var l=o.lib.BlockCipherMode.extend();return l.Encryptor=l.extend({processBlock:function(d,f){this._cipher.encryptBlock(d,f)}}),l.Decryptor=l.extend({processBlock:function(d,f){this._cipher.decryptBlock(d,f)}}),l})(),o.mode.ECB})})(mc)),mc.exports}var gc={exports:{}},nC=gc.exports,Zm;function rC(){return Zm||(Zm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(nC,function(o){return o.pad.AnsiX923={pad:function(l,d){var f=l.sigBytes,p=d*4,h=p-f%p,g=f+h-1;l.clamp(),l.words[g>>>2]|=h<<24-g%4*8,l.sigBytes+=h},unpad:function(l){var d=l.words[l.sigBytes-1>>>2]&255;l.sigBytes-=d}},o.pad.Ansix923})})(gc)),gc.exports}var Ac={exports:{}},iC=Ac.exports,Wm;function oC(){return Wm||(Wm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(iC,function(o){return o.pad.Iso10126={pad:function(l,d){var f=d*4,p=f-l.sigBytes%f;l.concat(o.lib.WordArray.random(p-1)).concat(o.lib.WordArray.create([p<<24],1))},unpad:function(l){var d=l.words[l.sigBytes-1>>>2]&255;l.sigBytes-=d}},o.pad.Iso10126})})(Ac)),Ac.exports}var xc={exports:{}},sC=xc.exports,qm;function aC(){return qm||(qm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(sC,function(o){return o.pad.Iso97971={pad:function(l,d){l.concat(o.lib.WordArray.create([2147483648],1)),o.pad.ZeroPadding.pad(l,d)},unpad:function(l){o.pad.ZeroPadding.unpad(l),l.sigBytes--}},o.pad.Iso97971})})(xc)),xc.exports}var vc={exports:{}},lC=vc.exports,Gm;function uC(){return Gm||(Gm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(lC,function(o){return o.pad.ZeroPadding={pad:function(l,d){var f=d*4;l.clamp(),l.sigBytes+=f-(l.sigBytes%f||f)},unpad:function(l){for(var d=l.words,f=l.sigBytes-1,f=l.sigBytes-1;f>=0;f--)if(d[f>>>2]>>>24-f%4*8&255){l.sigBytes=f+1;break}}},o.pad.ZeroPadding})})(vc)),vc.exports}var yc={exports:{}},cC=yc.exports,Km;function dC(){return Km||(Km=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(cC,function(o){return o.pad.NoPadding={pad:function(){},unpad:function(){}},o.pad.NoPadding})})(yc)),yc.exports}var _c={exports:{}},fC=_c.exports,Qm;function hC(){return Qm||(Qm=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),mn())})(fC,function(o){return(function(l){var d=o,f=d.lib,p=f.CipherParams,h=d.enc,g=h.Hex,m=d.format;m.Hex={stringify:function(v){return v.ciphertext.toString(g)},parse:function(v){var y=g.parse(v);return p.create({ciphertext:y})}}})(),o.format.Hex})})(_c)),_c.exports}var wc={exports:{}},pC=wc.exports,$m;function mC(){return $m||($m=1,(function(r,a){(function(o,l,d){r.exports=l(mt(),Xo(),Jo(),fo(),mn())})(pC,function(o){return(function(){var l=o,d=l.lib,f=d.BlockCipher,p=l.algo,h=[],g=[],m=[],v=[],y=[],w=[],P=[],D=[],C=[],k=[];(function(){for(var S=[],N=0;N<256;N++)N<128?S[N]=N<<1:S[N]=N<<1^283;for(var I=0,H=0,N=0;N<256;N++){var z=H^H<<1^H<<2^H<<3^H<<4;z=z>>>8^z&255^99,h[I]=z,g[z]=I;var j=S[I],J=S[j],W=S[J],U=S[z]*257^z*16843008;m[I]=U<<24|U>>>8,v[I]=U<<16|U>>>16,y[I]=U<<8|U>>>24,w[I]=U;var U=W*16843009^J*65537^j*257^I*16843008;P[z]=U<<24|U>>>8,D[z]=U<<16|U>>>16,C[z]=U<<8|U>>>24,k[z]=U,I?(I=j^S[S[S[W^j]]],H^=S[S[H]]):I=H=1}})();var R=[0,1,2,4,8,16,32,64,128,27,54],T=p.AES=f.extend({_doReset:function(){var S;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var N=this._keyPriorReset=this._key,I=N.words,H=N.sigBytes/4,z=this._nRounds=H+6,j=(z+1)*4,J=this._keySchedule=[],W=0;W<j;W++)W<H?J[W]=I[W]:(S=J[W-1],W%H?H>6&&W%H==4&&(S=h[S>>>24]<<24|h[S>>>16&255]<<16|h[S>>>8&255]<<8|h[S&255]):(S=S<<8|S>>>24,S=h[S>>>24]<<24|h[S>>>16&255]<<16|h[S>>>8&255]<<8|h[S&255],S^=R[W/H|0]<<24),J[W]=J[W-H]^S);for(var U=this._invKeySchedule=[],ne=0;ne<j;ne++){var W=j-ne;if(ne%4)var S=J[W];else var S=J[W-4];ne<4||W<=4?U[ne]=S:U[ne]=P[h[S>>>24]]^D[h[S>>>16&255]]^C[h[S>>>8&255]]^k[h[S&255]]}}},encryLine truncated
• Timestamp (4 bytes) - send time as unix timestamp
• Request Type (1 byte) - type of request (GetStats, GetTelemetryData, etc.)
• Request Data (remaining bytes) - additional request-specific data`,startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.Request,version:r.PayloadVersion.Version1,isValid:!0,timestamp:0,requestType:r.RequestType.GetStats,requestData:"",destinationHash:m,sourceHash:v,cipherMac:y,ciphertext:w};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.Request,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode request payload"],timestamp:0,requestType:r.RequestType.GetStats,requestData:"",destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:""}}}}return Ja.RequestPayloadDecoder=o,Ja}var el={},vg;function YC(){if(vg)return el;vg=1,Object.defineProperty(el,"__esModule",{value:!0}),el.ResponsePayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<4){const D={type:r.PayloadType.Response,version:r.PayloadVersion.Version1,isValid:!1,errors:["Response payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return f!=null&&f.includeSegments&&(D.segments=[{name:"Invalid Response Data",description:"Response payload too short (minimum 4 bytes required)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),D}const p=[],h=(f==null?void 0:f.segmentOffset)||0;let g=0;const m=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:h+g,endByte:h+g,value:m}),g+=1;const v=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Source Hash",description:"First byte of source node public key",startByte:h+g,endByte:h+g,value:v}),g+=1;const y=(0,a.bytesToHex)(d.subarray(g,g+2));f!=null&&f.includeSegments&&p.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:h+g,endByte:h+g+1,value:y}),g+=2;const w=(0,a.bytesToHex)(d.subarray(g));f!=null&&f.includeSegments&&d.length>g&&p.push({name:"Ciphertext",description:"Encrypted response data (tag + content)",startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.Response,version:r.PayloadVersion.Version1,isValid:!0,destinationHash:m,sourceHash:v,cipherMac:y,ciphertext:w,ciphertextLength:d.length-4};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.Response,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode response payload"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return el.ResponsePayloadDecoder=o,el}var tl={},yg;function XC(){if(yg)return tl;yg=1,Object.defineProperty(tl,"__esModule",{value:!0}),tl.AnonRequestPayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<35){const D={type:r.PayloadType.AnonRequest,version:r.PayloadVersion.Version1,isValid:!1,errors:["AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return f!=null&&f.includeSegments&&(D.segments=[{name:"Invalid AnonRequest Data",description:"AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),D}const p=[],h=(f==null?void 0:f.segmentOffset)||0;let g=0;const m=(0,a.byteToHex)(d[0]);f!=null&&f.includeSegments&&p.push({name:"Destination Hash",description:`First byte of destination node public key: 0x${m}`,startByte:h+g,endByte:h+g,value:m}),g+=1;const v=(0,a.bytesToHex)(d.subarray(1,33));f!=null&&f.includeSegments&&p.push({name:"Sender Public Key",description:"Ed25519 public key of the sender (32 bytes)",startByte:h+g,endByte:h+g+31,value:v}),g+=32;const y=(0,a.bytesToHex)(d.subarray(33,35));f!=null&&f.includeSegments&&p.push({name:"Cipher MAC",description:"MAC for encrypted data verification (2 bytes)",startByte:h+g,endByte:h+g+1,value:y}),g+=2;const w=(0,a.bytesToHex)(d.subarray(35));f!=null&&f.includeSegments&&d.length>35&&p.push({name:"Ciphertext",description:`Encrypted message data (${d.length-35} bytes). Contains encrypted plaintext with this structure:
• Timestamp (4 bytes) - send time as unix timestamp
• Sync Timestamp (4 bytes) - room server only, sender's "sync messages SINCE x" timestamp
• Password (remaining bytes) - password for repeater/room`,startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.AnonRequest,version:r.PayloadVersion.Version1,isValid:!0,destinationHash:m,senderPublicKey:v,cipherMac:y,ciphertext:w,ciphertextLength:d.length-35};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.AnonRequest,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode AnonRequest payload"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return tl.AnonRequestPayloadDecoder=o,tl}var nl={},_g;function JC(){if(_g)return nl;_g=1,Object.defineProperty(nl,"__esModule",{value:!0}),nl.AckPayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<4){const v={type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!1,errors:["Ack payload too short (minimum 4 bytes for checksum)"],checksum:""};return f!=null&&f.includeSegments&&(v.segments=[{name:"Invalid Ack Data",description:"Ack payload too short (minimum 4 bytes required for checksum)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),v}const p=[],h=(f==null?void 0:f.segmentOffset)||0,g=(0,a.bytesToHex)(d.subarray(0,4));f!=null&&f.includeSegments&&p.push({name:"Checksum",description:`CRC checksum of message timestamp, text, and sender pubkey: 0x${g}`,startByte:h,endByte:h+3,value:g}),f!=null&&f.includeSegments&&d.length>4&&p.push({name:"Additional Data",description:"Extra data in Ack payload",startByte:h+4,endByte:h+d.length-1,value:(0,a.bytesToHex)(d.subarray(4))});const m={type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!0,checksum:g};return f!=null&&f.includeSegments&&(m.segments=p),m}catch(p){return{type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode Ack payload"],checksum:""}}}}return nl.AckPayloadDecoder=o,nl}var rl={},wg;function eE(){if(wg)return rl;wg=1,Object.defineProperty(rl,"__esModule",{value:!0}),rl.PathPayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d){try{if(d.length<2)return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:["Path payload too short (minimum 2 bytes: path length + extra type)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};const f=d[0];if(d.length<1+f+1)return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:[`Path payload too short (need ${1+f+1} bytes for path length + path + extra type)`],pathLength:f,pathHashes:[],extraType:0,extraData:""};const p=[];for(let m=0;m<f;m++)p.push((0,a.byteToHex)(d[1+m]));const h=d[1+f];let g="";return d.length>1+f+1&&(g=(0,a.bytesToHex)(d.subarray(1+f+1))),{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!0,pathLength:f,pathHashes:p,extraType:h,extraData:g}}catch(f){return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:[f instanceof Error?f.message:"Failed to decode Path payload"],pathLength:0,pathHashes:[],extraType:0,extraData:""}}}}return rl.PathPayloadDecoder=o,rl}var il={},bg;function tE(){if(bg)return il;bg=1,Object.defineProperty(il,"__esModule",{value:!0}),il.TextMessagePayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<4){const D={type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,isValid:!1,errors:["TextMessage payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return f!=null&&f.includeSegments&&(D.segments=[{name:"Invalid TextMessage Data",description:"TextMessage payload too short (minimum 4 bytes required)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),D}const p=[],h=(f==null?void 0:f.segmentOffset)||0;let g=0;const m=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:h+g,endByte:h+g,value:m}),g+=1;const v=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Source Hash",description:"First byte of source node public key",startByte:h+g,endByte:h+g,value:v}),g+=1;const y=(0,a.bytesToHex)(d.subarray(g,g+2));f!=null&&f.includeSegments&&p.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:h+g,endByte:h+g+1,value:y}),g+=2;const w=(0,a.bytesToHex)(d.subarray(g));f!=null&&f.includeSegments&&d.length>g&&p.push({name:"Ciphertext",description:"Encrypted message data (timestamp + message text)",startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,isValid:!0,destinationHash:m,sourceHash:v,cipherMac:y,ciphertext:w,ciphertextLength:d.length-4};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,i Line truncated
• Password (remaining bytes) - password for repeater/room`,startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.AnonRequest,version:r.PayloadVersion.Version1,isValid:!0,destinationHash:m,senderPublicKey:v,cipherMac:y,ciphertext:w,ciphertextLength:d.length-35};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.AnonRequest,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode AnonRequest payload"],destinationHash:"",senderPublicKey:"",cipherMac:"",ciphertext:"",ciphertextLength:0}}}}return tl.AnonRequestPayloadDecoder=o,tl}var nl={},_g;function JC(){if(_g)return nl;_g=1,Object.defineProperty(nl,"__esModule",{value:!0}),nl.AckPayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<4){const v={type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!1,errors:["Ack payload too short (minimum 4 bytes for checksum)"],checksum:""};return f!=null&&f.includeSegments&&(v.segments=[{name:"Invalid Ack Data",description:"Ack payload too short (minimum 4 bytes required for checksum)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),v}const p=[],h=(f==null?void 0:f.segmentOffset)||0,g=(0,a.bytesToHex)(d.subarray(0,4));f!=null&&f.includeSegments&&p.push({name:"Checksum",description:`CRC checksum of message timestamp, text, and sender pubkey: 0x${g}`,startByte:h,endByte:h+3,value:g}),f!=null&&f.includeSegments&&d.length>4&&p.push({name:"Additional Data",description:"Extra data in Ack payload",startByte:h+4,endByte:h+d.length-1,value:(0,a.bytesToHex)(d.subarray(4))});const m={type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!0,checksum:g};return f!=null&&f.includeSegments&&(m.segments=p),m}catch(p){return{type:r.PayloadType.Ack,version:r.PayloadVersion.Version1,isValid:!1,errors:[p instanceof Error?p.message:"Failed to decode Ack payload"],checksum:""}}}}return nl.AckPayloadDecoder=o,nl}var rl={},wg;function eE(){if(wg)return rl;wg=1,Object.defineProperty(rl,"__esModule",{value:!0}),rl.PathPayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d){try{if(d.length<2)return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:["Path payload too short (minimum 2 bytes: path length + extra type)"],pathLength:0,pathHashes:[],extraType:0,extraData:""};const f=d[0];if(d.length<1+f+1)return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:[`Path payload too short (need ${1+f+1} bytes for path length + path + extra type)`],pathLength:f,pathHashes:[],extraType:0,extraData:""};const p=[];for(let m=0;m<f;m++)p.push((0,a.byteToHex)(d[1+m]));const h=d[1+f];let g="";return d.length>1+f+1&&(g=(0,a.bytesToHex)(d.subarray(1+f+1))),{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!0,pathLength:f,pathHashes:p,extraType:h,extraData:g}}catch(f){return{type:r.PayloadType.Path,version:r.PayloadVersion.Version1,isValid:!1,errors:[f instanceof Error?f.message:"Failed to decode Path payload"],pathLength:0,pathHashes:[],extraType:0,extraData:""}}}}return rl.PathPayloadDecoder=o,rl}var il={},bg;function tE(){if(bg)return il;bg=1,Object.defineProperty(il,"__esModule",{value:!0}),il.TextMessagePayloadDecoder=void 0;const r=sr(),a=vn();class o{static decode(d,f){try{if(d.length<4){const D={type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,isValid:!1,errors:["TextMessage payload too short (minimum 4 bytes: dest + source + MAC)"],destinationHash:"",sourceHash:"",cipherMac:"",ciphertext:"",ciphertextLength:0};return f!=null&&f.includeSegments&&(D.segments=[{name:"Invalid TextMessage Data",description:"TextMessage payload too short (minimum 4 bytes required)",startByte:f.segmentOffset||0,endByte:(f.segmentOffset||0)+d.length-1,value:(0,a.bytesToHex)(d)}]),D}const p=[],h=(f==null?void 0:f.segmentOffset)||0;let g=0;const m=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Destination Hash",description:"First byte of destination node public key",startByte:h+g,endByte:h+g,value:m}),g+=1;const v=(0,a.byteToHex)(d[g]);f!=null&&f.includeSegments&&p.push({name:"Source Hash",description:"First byte of source node public key",startByte:h+g,endByte:h+g,value:v}),g+=1;const y=(0,a.bytesToHex)(d.subarray(g,g+2));f!=null&&f.includeSegments&&p.push({name:"Cipher MAC",description:"MAC for encrypted data in next field",startByte:h+g,endByte:h+g+1,value:y}),g+=2;const w=(0,a.bytesToHex)(d.subarray(g));f!=null&&f.includeSegments&&d.length>g&&p.push({name:"Ciphertext",description:"Encrypted message data (timestamp + message text)",startByte:h+g,endByte:h+d.length-1,value:w});const P={type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,isValid:!0,destinationHash:m,sourceHash:v,cipherMac:y,ciphertext:w,ciphertextLength:d.length-4};return f!=null&&f.includeSegments&&(P.segments=p),P}catch(p){return{type:r.PayloadType.TextMessage,version:r.PayloadVersion.Version1,i Line truncated
// SHA256 round constants
const K: array<u32, 64> = array<u32, 64>(
0x428a2f98u, 0x71374491u, 0xb5c0fbcfu, 0xe9b5dba5u, 0x3956c25bu, 0x59f111f1u, 0x923f82a4u, 0xab1c5ed5u,
@@ -532,11 +532,11 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
}
}
`}async init(){if(!navigator.gpu)return console.warn("WebGPU not supported"),!1;try{const a=await navigator.gpu.requestAdapter();if(!a)return console.warn("No GPU adapter found"),!1;this.device=await a.requestDevice(),this.bindGroupLayout=this.device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}]}),this.paramsBuffer=this.device.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.matchCountBuffer=this.device.createBuffer({size:4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),this.matchIndicesBuffer=this.device.createBuffer({size:1024*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC});for(let d=0;d<2;d++)this.matchCountReadBuffers[d]=this.device.createBuffer({size:4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),this.matchIndicesReadBuffers[d]=this.device.createBuffer({size:1024*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});const o=this.device.createShaderModule({code:this.shaderCode}),l=this.device.createPipelineLayout({bindGroupLayouts:[this.bindGroupLayout]});return this.pipeline=this.device.createComputePipeline({layout:l,compute:{module:o,entryPoint:"main"}}),!0}catch(a){return console.error("WebGPU initialization failed:",a),!1}}isAvailable(){return this.device!==null&&this.pipeline!==null}indexToRoomName(a,o){return Go(o,a)}countNamesForLength(a){return al(a)}async runBatch(a,o,l,d,f,p){if(!this.device||!this.pipeline||!this.bindGroupLayout||!this.paramsBuffer||!this.matchCountBuffer||!this.matchIndicesBuffer||!this.matchCountReadBuffers[0]||!this.matchCountReadBuffers[1]||!this.matchIndicesReadBuffers[0]||!this.matchIndicesReadBuffers[1])throw new Error("GPU not initialized");const h=this.currentReadBufferIndex;this.currentReadBufferIndex=1-this.currentReadBufferIndex;const g=this.matchCountReadBuffers[h],m=this.matchIndicesReadBuffers[h],v=f&&p?1:0;let y,w=0,P=0;if(v){const I=new Uint8Array(f.length/2);for(let W=0;W<I.length;W++)I[W]=parseInt(f.substr(W*2,2),16);w=I.length*8;const H=Math.ceil(I.length/4)*4,z=new Uint8Array(H);z.set(I),y=new Uint32Array(H/4);for(let W=0;W<y.length;W++)y[W]=z[W*4]<<24|z[W*4+1]<<16|z[W*4+2]<<8|z[W*4+3];const j=parseInt(p.substr(0,2),16),J=parseInt(p.substr(2,2),16);P=j<<24|J<<16}else y=new Uint32Array([0]);const D=Math.max(y.length*4,4);(!this.ciphertextBuffer||this.ciphertextBufferSize<D)&&(this.ciphertextBuffer&&this.ciphertextBuffer.destroy(),this.ciphertextBuffer=this.device.createBuffer({size:D,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),this.ciphertextBufferSize=D,this.bindGroupDirty=!0);const C=new Uint32Array([a,l,o,d,P,y.length,w,v]);this.device.queue.writeBuffer(this.paramsBuffer,0,C),this.device.queue.writeBuffer(this.ciphertextBuffer,0,y),this.device.queue.writeBuffer(this.matchCountBuffer,0,sd.ZERO_DATA),(this.bindGroupDirty||!this.bindGroup)&&(this.bindGroup=this.device.createBindGroup({layout:this.bindGroupLayout,entries:[{binding:0,resource:{buffer:this.paramsBuffer}},{binding:1,resource:{buffer:this.matchCountBuffer}},{binding:2,resource:{buffer:this.matchIndicesBuffer}},{binding:3,resource:{buffer:this.ciphertextBuffer}}]}),this.bindGroupDirty=!1);const k=this.device.createCommandEncoder(),R=k.beginComputePass();R.setPipeline(this.pipeline),R.setBindGroup(0,this.bindGroup),R.dispatchWorkgroups(Math.ceil(d/(256*32))),R.end(),k.copyBufferToBuffer(this.matchCountBuffer,0,g,0,4),k.copyBufferToBuffer(this.matchIndicesBuffer,0,m,0,1024*4),this.device.queue.submit([k.finish()]),await g.mapAsync(GPUMapMode.READ);const S=new Uint32Array(g.getMappedRange())[0];g.unmap();const N=[];if(S>0){await m.mapAsync(GPUMapMode.READ);const I=new Uint32Array(m.getMappedRange());for(let H=0;H<Math.min(S,1024);H++)N.push(I[H]);m.unmap()}return N}destroy(){var a,o,l,d,f,p,h,g;(a=this.paramsBuffer)==null||a.destroy(),(o=this.matchCountBuffer)==null||o.destroy(),(l=this.matchIndicesBuffer)==null||l.destroy(),(d=this.ciphertextBuffer)==null||d.destroy(),(f=this.matchCountReadBuffers[0])==null||f.destroy(),(p=this.matchCountReadBuffers[1])==null||p.destroy(),(h=this.matchIndicesReadBuffers[0])==null||h.destroy(),(g=this.matchIndicesReadBuffers[1])==null||g.destroy(),this.paramsBuffer=null,this.matchCountBuffer=null,this.matchIndicesBuffer=null,this.ciphertextBuffer=null,this.ciphertextBufferSize=0,this.matchCountReadBuffers=[null,null],this.matchIndicesReadBuffers=[null,null],this.currentReadBufferIndex=0,this.bindGroup=null,this.bindGroupDirty=!0,this.device&&(this.device.destroy(),this.device=null),this.pipeline=null,this.bindGroupLayout=null}}sd.ZERO_DATA=new Uint32Array([0]);function mE(){return typeof navigator<"u"&&"gpu"in navigator}class Fg{runBatch(a,o,l,d,f,p){const h=[],g=a.toString(16).padStart(2,"0") Line truncated
`).map(f=>f.trim().toLowerCase()).filter(f=>f.length>0);this.wordlist=d.filter(Ng)}setWordlist(a){this.wordlist=a.map(o=>o.trim().toLowerCase()).filter(Ng)}abort(){this.abortFlag=!0}isGpuAvailable(){return mE()}async decodePacket(a){var l;const o=a.trim().replace(/\s+/g,"").replace(/^0x/i,"");if(!o||!/^[0-9a-fA-F]+$/.test(o))return null;try{const f=(l=(await Tg.MeshCorePacketDecoder.decodeWithVerification(o,{})).payload)==null?void 0:l.decoded;return!(f!=null&&f.channelHash)||!(f!=null&&f.ciphertext)||!(f!=null&&f.cipherMac)?null:{channelHash:f.channelHash,ciphertext:f.ciphertext,cipherMac:f.cipherMac,isGroupText:!0}}catch{return null}}async crack(a,o,l){this.abortFlag=!1,this.useTimestampFilter=(o==null?void 0:o.useTimestampFilter)??!0,this.useUtf8Filter=(o==null?void 0:o.useUtf8Filter)??!0,this.useSenderFilter=(o==null?void 0:o.useSenderFilter)??!0,this.validSeconds=(o==null?void 0:o.validSeconds)??f0,this.useCpu=(o==null?void 0:o.forceCpu)??!1;const d=(o==null?void 0:o.maxLength)??8,f=(o==null?void 0:o.startingLength)??1,p=(o==null?void 0:o.useDictionary)??!0,h=(o==null?void 0:o.startFromType)??"bruteforce",g=a.toLowerCase(),m=await this.decodePacket(g);if(!m)return{found:!1,error:"Invalid packet or not a GroupText packet"};const{channelHash:v,ciphertext:y,cipherMac:w}=m,P=parseInt(v,16);this.useCpu?this.cpuInstance||(this.cpuInstance=new Fg):this.gpuInstance||(this.gpuInstance=new sd,await this.gpuInstance.init()||(this.useCpu=!0,this.cpuInstance=new Fg));const D=performance.now();let C=0,k=performance.now(),R=f,T=0,S=0,N=!1;if(o!=null&&o.startFrom){const X=o.startFrom.toLowerCase();if(h==="dictionary"){const re=this.wordlist.indexOf(X);re>=0&&(S=re+1)}else{N=!0;const re=fE(X);re&&(R=Math.max(f,re.length),T=re.index+1,T>=al(R)&&(R++,T=0))}}let I=0;p&&!N&&this.wordlist.length>0&&(I+=this.wordlist.length-S);for(let X=R;X<=d;X++)I+=al(X);I-=T;const H=(X,re,fe)=>{if(!l)return;const he=(performance.now()-D)/1e3,G=he>0?Math.round(C/he):0,pe=I-C,Z=G>0?pe/G:0;l({checked:C,total:I,percent:I>0?Math.min(100,C/I*100):0,rateKeysPerSec:G,etaSeconds:Z,elapsedSeconds:he,currentLength:re,currentPosition:fe,phase:X})},z=X=>{if(!Gx(y,w,X))return{valid:!1};const re=Tg.ChannelCrypto.decryptGroupTextMessage(y,w,X);return!re.success||!re.data?{valid:!1}:this.useTimestampFilter&&!hE(re.data.timestamp,this.validSeconds)?{valid:!1}:this.useUtf8Filter&&!pE(re.data.message)?{valid:!1}:this.useSenderFilter&&!re.data.sender?{valid:!1}:{valid:!0,message:re.data.sender?`${re.data.sender}: ${re.data.message}`:re.data.message}};if(!N&&S===0&&R===f&&T===0){H("public-key",0,d0);const X=p0(Tc);if(v===X){const re=z(Tc);if(re.valid)return{found:!0,roomName:d0,key:Tc,decryptedMessage:re.message}}}if(p&&!N&&this.wordlist.length>0)for(let X=S;X<this.wordlist.length;X++){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:this.wordlist[X],resumeType:"dictionary"};const re=this.wordlist[X],fe=h0("#"+re),ae=p0(fe);if(parseInt(ae,16)===P){const G=z(fe);if(G.valid)return{found:!0,roomName:re,key:fe,decryptedMessage:G.message,resumeFrom:re,resumeType:"dictionary"}}C++;const he=performance.now();he-k>=200&&(H("wordlist",re.length,re),k=he,await new Promise(G=>setTimeout(G,0)))}const j=this.useCpu?1024:32768,J=(o==null?void 0:o.gpuDispatchMs)??1e3;let W=j,U=!1;for(let X=R;X<=d;X++){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:Go(X,0)||void 0,resumeType:"bruteforce"};const re=al(X);let fe=X===R?T:0;for(;fe<re;){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:Go(X,fe)||void 0,resumeType:"bruteforce"};const ae=Math.min(W,re-fe),he=performance.now();let G;this.useCpu?G=this.cpuInstance.runBatch(P,X,fe,ae,y,w):G=await this.gpuInstance.runBatch(P,X,fe,ae,y,w);const pe=performance.now()-he;if(C+=ae,!this.useCpu&&!U&&ae>=j&&pe>0){const B=J/pe,V=Math.round(ae*B),K=Math.pow(2,Math.round(Math.log2(Math.max(j,V))));W=Math.max(j,K),U=!0}for(const B of G){const V=Go(X,B);if(!V)continue;const K=h0("#"+V),$=z(K);if($.valid)return{found:!0,roomName:V,key:K,decryptedMessage:$.message,resumeFrom:V,resumeType:"bruteforce"}}fe+=ae;const Z=performance.now();if(Z-k>=200){const B=Go(X,Math.min(fe,re-1))||"";H("bruteforce",X,B),k=Z,await new Promise(V=>setTimeout(V,0))}}}return{found:!1,resumeFrom:Go(d,al(d)-1)||void 0,resumeType:"bruteforce"}}destroy(){this.gpuInstance&&(this.gpuInstance.destroy(),this.gpuInstance=null),this.cpuInstance&&(this.cpuInstance.destroy(),this.cpuInstance=null)}}var Yf,Lg;function yE(){return Lg||(Lg=1,Yf={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAA Line truncated
`).map(f=>f.trim().toLowerCase()).filter(f=>f.length>0);this.wordlist=d.filter(Ng)}setWordlist(a){this.wordlist=a.map(o=>o.trim().toLowerCase()).filter(Ng)}abort(){this.abortFlag=!0}isGpuAvailable(){return mE()}async decodePacket(a){var l;const o=a.trim().replace(/\s+/g,"").replace(/^0x/i,"");if(!o||!/^[0-9a-fA-F]+$/.test(o))return null;try{const f=(l=(await Tg.MeshCorePacketDecoder.decodeWithVerification(o,{})).payload)==null?void 0:l.decoded;return!(f!=null&&f.channelHash)||!(f!=null&&f.ciphertext)||!(f!=null&&f.cipherMac)?null:{channelHash:f.channelHash,ciphertext:f.ciphertext,cipherMac:f.cipherMac,isGroupText:!0}}catch{return null}}async crack(a,o,l){this.abortFlag=!1,this.useTimestampFilter=(o==null?void 0:o.useTimestampFilter)??!0,this.useUtf8Filter=(o==null?void 0:o.useUtf8Filter)??!0,this.useSenderFilter=(o==null?void 0:o.useSenderFilter)??!0,this.validSeconds=(o==null?void 0:o.validSeconds)??f0,this.useCpu=(o==null?void 0:o.forceCpu)??!1;const d=(o==null?void 0:o.maxLength)??8,f=(o==null?void 0:o.startingLength)??1,p=(o==null?void 0:o.useDictionary)??!0,h=(o==null?void 0:o.startFromType)??"bruteforce",g=a.toLowerCase(),m=await this.decodePacket(g);if(!m)return{found:!1,error:"Invalid packet or not a GroupText packet"};const{channelHash:v,ciphertext:y,cipherMac:w}=m,P=parseInt(v,16);this.useCpu?this.cpuInstance||(this.cpuInstance=new Fg):this.gpuInstance||(this.gpuInstance=new sd,await this.gpuInstance.init()||(this.useCpu=!0,this.cpuInstance=new Fg));const D=performance.now();let C=0,k=performance.now(),R=f,T=0,S=0,N=!1;if(o!=null&&o.startFrom){const Y=o.startFrom.toLowerCase();if(h==="dictionary"){const re=this.wordlist.indexOf(Y);re>=0&&(S=re+1)}else{N=!0;const re=fE(Y);re&&(R=Math.max(f,re.length),T=re.index+1,T>=al(R)&&(R++,T=0))}}let I=0;p&&!N&&this.wordlist.length>0&&(I+=this.wordlist.length-S);for(let Y=R;Y<=d;Y++)I+=al(Y);I-=T;const H=(Y,re,fe)=>{if(!l)return;const he=(performance.now()-D)/1e3,G=he>0?Math.round(C/he):0,me=I-C,Z=G>0?me/G:0;l({checked:C,total:I,percent:I>0?Math.min(100,C/I*100):0,rateKeysPerSec:G,etaSeconds:Z,elapsedSeconds:he,currentLength:re,currentPosition:fe,phase:Y})},z=Y=>{if(!Gx(y,w,Y))return{valid:!1};const re=Tg.ChannelCrypto.decryptGroupTextMessage(y,w,Y);return!re.success||!re.data?{valid:!1}:this.useTimestampFilter&&!hE(re.data.timestamp,this.validSeconds)?{valid:!1}:this.useUtf8Filter&&!pE(re.data.message)?{valid:!1}:this.useSenderFilter&&!re.data.sender?{valid:!1}:{valid:!0,message:re.data.sender?`${re.data.sender}: ${re.data.message}`:re.data.message}};if(!N&&S===0&&R===f&&T===0){H("public-key",0,d0);const Y=p0(Dc);if(v===Y){const re=z(Dc);if(re.valid)return{found:!0,roomName:d0,key:Dc,decryptedMessage:re.message}}}if(p&&!N&&this.wordlist.length>0)for(let Y=S;Y<this.wordlist.length;Y++){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:this.wordlist[Y],resumeType:"dictionary"};const re=this.wordlist[Y],fe=h0("#"+re),ae=p0(fe);if(parseInt(ae,16)===P){const G=z(fe);if(G.valid)return{found:!0,roomName:re,key:fe,decryptedMessage:G.message,resumeFrom:re,resumeType:"dictionary"}}C++;const he=performance.now();he-k>=200&&(H("wordlist",re.length,re),k=he,await new Promise(G=>setTimeout(G,0)))}const j=this.useCpu?1024:32768,J=(o==null?void 0:o.gpuDispatchMs)??1e3;let W=j,U=!1;for(let Y=R;Y<=d;Y++){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:Go(Y,0)||void 0,resumeType:"bruteforce"};const re=al(Y);let fe=Y===R?T:0;for(;fe<re;){if(this.abortFlag)return{found:!1,aborted:!0,resumeFrom:Go(Y,fe)||void 0,resumeType:"bruteforce"};const ae=Math.min(W,re-fe),he=performance.now();let G;this.useCpu?G=this.cpuInstance.runBatch(P,Y,fe,ae,y,w):G=await this.gpuInstance.runBatch(P,Y,fe,ae,y,w);const me=performance.now()-he;if(C+=ae,!this.useCpu&&!U&&ae>=j&&me>0){const B=J/me,V=Math.round(ae*B),K=Math.pow(2,Math.round(Math.log2(Math.max(j,V))));W=Math.max(j,K),U=!0}for(const B of G){const V=Go(Y,B);if(!V)continue;const K=h0("#"+V),$=z(K);if($.valid)return{found:!0,roomName:V,key:K,decryptedMessage:$.message,resumeFrom:V,resumeType:"bruteforce"}}fe+=ae;const Z=performance.now();if(Z-k>=200){const B=Go(Y,Math.min(fe,re-1))||"";H("bruteforce",Y,B),k=Z,await new Promise(V=>setTimeout(V,0))}}}return{found:!1,resumeFrom:Go(d,al(d)-1)||void 0,resumeType:"bruteforce"}}destroy(){this.gpuInstance&&(this.gpuInstance.destroy(),this.gpuInstance=null),this.cpuInstance&&(this.cpuInstance.destroy(),this.cpuInstance=null)}}var Yf,Lg;function yE(){return Lg||(Lg=1,Yf={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAA Line truncated
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(h=>(this.enabled=!0,h)).catch(h=>{throw this.enabled=!1,h})}disable(){l()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):o()?this.noSleepTimer&&(console.warn(`
NoSleep now disabled for older iOS devices.
`),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}return Xf=d,Xf}var wE=_E();const bE=Xs(wE);function CE(r){if(r.length<4)return null;try{const o=parseInt(r.slice(0,2),16)&3;let l=2;if(o===0||o===3){if(r.length<l+8)return null;l+=8}if(r.length<l+2)return null;const d=parseInt(r.slice(l,l+2),16);l+=2;const f=d*2;return r.length<l+f?null:(l+=f,r.slice(l))}catch{return null}}function EE({packets:r,channels:a,onChannelCreate:o,onRunningChange:l,visible:d=!1}){const[f,p]=F.useState(!1),[h,g]=F.useState(6),[m,v]=F.useState(!1),[y,w]=F.useState(!0),[P,D]=F.useState(!1),[C,k]=F.useState(null),[R,T]=F.useState(new Map),[S,N]=F.useState([]),[I,H]=F.useState(!1),[z,j]=F.useState(null),[J,W]=F.useState(null),[U,te]=F.useState(0),X=F.useRef(null),re=F.useRef(null),fe=F.useRef(!1),ae=F.useRef(!1),he=F.useRef(!1),G=F.useRef(new Map),pe=F.useRef(!1),Z=F.useRef(6),B=F.useRef(!0),V=F.useRef(!1),K=F.useRef(new Set),$=F.useRef(new Set);F.useEffect(()=>{const Be=new vE;X.current=Be,j(Be.isGpuAvailable());const Ze=new bE;return re.current=Ze,()=>{Be.destroy(),X.current=null,Ze.disable(),re.current=null}},[]),F.useEffect(()=>{!d||I||Ab(async()=>{const{ENGLISH_WORDLIST:Be}=await import("./wordlist-BtmChKSf.js");return{ENGLISH_WORDLIST:Be}},[]).then(({ENGLISH_WORDLIST:Be})=>{X.current&&(X.current.setWordlist(Be),H(!0))}).catch(Be=>{console.error("Failed to load wordlist:",Be),xt.error("Failed to load wordlist",{description:"Cracking will not be available"})})},[d,I]),F.useEffect(()=>{const Be=()=>{Je.getUndecryptedPacketCount().then(({count:ct})=>W(ct)).catch(()=>W(null))};Be();const Ze=setInterval(Be,3e4);return()=>clearInterval(Ze)},[]);const ce=F.useMemo(()=>new Set(a.map(Be=>Be.key.toUpperCase())),[a]),de=r.filter(Be=>Be.payload_type==="GROUP_TEXT"&&!Be.decrypted);F.useEffect(()=>{let Be=0;T(Ze=>{const ct=new Map(Ze);let Mt=!1;for(const st of de)if(!ct.has(st.id)){const gt=CE(st.data);if(gt&&$.current.has(gt)){Be++;continue}gt&&$.current.add(gt),ct.set(st.id,{packet:st,attempts:0,lastAttemptLength:0,status:"pending"}),Mt=!0}return Mt?(G.current=ct,ct):Ze}),Be>0&&te(Ze=>Ze+Be)},[de.length]),F.useEffect(()=>{G.current=R},[R]),F.useEffect(()=>{pe.current=m},[m]),F.useEffect(()=>{Z.current=h},[h]),F.useEffect(()=>{B.current=y},[y]),F.useEffect(()=>{V.current=P},[P]),F.useEffect(()=>{K.current=new Set(de.map(Be=>Be.id))},[de]),F.useEffect(()=>{l==null||l(f)},[f,l]);const Se=Array.from(R.values()).filter(Be=>Be.status==="pending").length,Ae=Array.from(R.values()).filter(Be=>Be.status==="cracked").length,Ue=Array.from(R.values()).filter(Be=>Be.status==="failed").length,$e=F.useCallback(async()=>{if(he.current||!X.current||!fe.current)return;const Be=G.current;let Ze=null,ct=null;for(const[qe,et]of Be.entries())if(et.status==="pending"){Ze=et,ct=qe;break}if(!Ze&&pe.current){const qe=Array.from(Be.entries()).filter(([,et])=>et.status==="failed"&&et.lastAttemptLength<10);qe.length>0&&(qe.sort((et,tt)=>et[1].lastAttemptLength-tt[1].lastAttemptLength),[ct,Ze]=qe[0])}if(!Ze||ct===null){fe.current&&setTimeout(()=>$e(),1e3);return}if(!K.current.has(ct)){T(qe=>{const et=new Map(qe);return et.delete(ct),et}),fe.current&&setTimeout(()=>$e(),10);return}he.current=!0;const Mt=Z.current,st=Ze.lastAttemptLength>0,gt=st?Ze.lastAttemptLength+1:Mt;try{const qe=await X.current.crack(Ze.packet.data,{maxLength:gt,useSenderFilter:!0,useTimestampFilter:!0,useUtf8Filter:!0,...V.current&&{gpuDispatchMs:1e4},...st&&{useDictionary:!1,startingLength:gt}},et=>{k(et)});if(ae.current){ae.current=!1,he.current=!1,k(null);return}if(qe.found&&qe.roomName&&qe.key){T(He=>{const Ct=new Map(He),Ce=Ct.get(ct);return Ce&&Ct.set(ct,{...Ce,status:"cracked",attempts:Ce.attempts+1,lastAttemptLength:gt}),Ct});const et={roomName:qe.roomName,key:qe.key,packetId:ct,message:qe.decryptedMessage||"",crackedAt:Date.now()};N(He=>[...He,et]);const tt=qe.key.toUpperCase();if(!ce.has(tt))try{const He="#"+qe.roomName;await o(He,qe.key),B.current&&await Je.decryptHistoricalPackets({key_type:"channel",channel_name:He})}catch(He){console.error("Failed to create channel or decrypt historical:",He),xt.error("Failed to save cracked channel",{description:He instanceof Error?He.message:"Channel discovered but could not be saved"})}}else T(et=>{const tt=new Map(et),He=tt.get(ct);return He&&tt.set(ct,{...He,status:"failed",attempts:He.attempts+1,lastAttemptLength:gt}),tt})}catch(qe){console.error("Cracking error:",qe),T(et=>{const tt=new Map(et),He=tt.get(ct);return He&&tt.set(ct,{...He,status:"failed",attempts:He.attempts+1,lastAttemptLength:gt}),tt})}he.current=!1,k(null),fe.current&&setTimeout(()=>$e(),100)},[ce,o]),bt=()=>{var Be;if(!z){xt.error("WebGPU not available",{description:"Cracking requires Chrome 113+ or Edge 113+ with WebGPU support."});return}p(!0),fe.current=!0,ae.current=!1,(Be=re.current)==null||Be.enable(),$e()},ut=()=>{var Be,Ze;p(!1),fe.current=!1,ae.current=!0,(Be=X.current)==null||Be.abort(),(Ze=re.current)== Line truncated
//# sourceMappingURL=index-BVIx9g0k.js.map
`),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}return Xf=d,Xf}var wE=_E();const bE=Xs(wE);function CE(r){if(r.length<4)return null;try{const o=parseInt(r.slice(0,2),16)&3;let l=2;if(o===0||o===3){if(r.length<l+8)return null;l+=8}if(r.length<l+2)return null;const d=parseInt(r.slice(l,l+2),16);l+=2;const f=d*2;return r.length<l+f?null:(l+=f,r.slice(l))}catch{return null}}function EE({packets:r,channels:a,onChannelCreate:o,onRunningChange:l,visible:d=!1}){const[f,p]=F.useState(!1),[h,g]=F.useState(6),[m,v]=F.useState(!1),[y,w]=F.useState(!0),[P,D]=F.useState(!1),[C,k]=F.useState(null),[R,T]=F.useState(new Map),[S,N]=F.useState([]),[I,H]=F.useState(!1),[z,j]=F.useState(null),[J,W]=F.useState(null),[U,ne]=F.useState(0),Y=F.useRef(null),re=F.useRef(null),fe=F.useRef(!1),ae=F.useRef(!1),he=F.useRef(!1),G=F.useRef(new Map),me=F.useRef(!1),Z=F.useRef(6),B=F.useRef(!0),V=F.useRef(!1),K=F.useRef(new Set),$=F.useRef(new Set);F.useEffect(()=>{const Be=new vE;Y.current=Be,j(Be.isGpuAvailable());const Ze=new bE;return re.current=Ze,()=>{Be.destroy(),Y.current=null,Ze.disable(),re.current=null}},[]),F.useEffect(()=>{!d||I||Ab(async()=>{const{ENGLISH_WORDLIST:Be}=await import("./wordlist-BtmChKSf.js");return{ENGLISH_WORDLIST:Be}},[]).then(({ENGLISH_WORDLIST:Be})=>{Y.current&&(Y.current.setWordlist(Be),H(!0))}).catch(Be=>{console.error("Failed to load wordlist:",Be),xt.error("Failed to load wordlist",{description:"Cracking will not be available"})})},[d,I]),F.useEffect(()=>{const Be=()=>{et.getUndecryptedPacketCount().then(({count:dt})=>W(dt)).catch(()=>W(null))};Be();const Ze=setInterval(Be,3e4);return()=>clearInterval(Ze)},[]);const ce=F.useMemo(()=>new Set(a.map(Be=>Be.key.toUpperCase())),[a]),de=r.filter(Be=>Be.payload_type==="GROUP_TEXT"&&!Be.decrypted);F.useEffect(()=>{let Be=0;T(Ze=>{const dt=new Map(Ze);let Mt=!1;for(const at of de)if(!dt.has(at.id)){const gt=CE(at.data);if(gt&&$.current.has(gt)){Be++;continue}gt&&$.current.add(gt),dt.set(at.id,{packet:at,attempts:0,lastAttemptLength:0,status:"pending"}),Mt=!0}return Mt?(G.current=dt,dt):Ze}),Be>0&&ne(Ze=>Ze+Be)},[de.length]),F.useEffect(()=>{G.current=R},[R]),F.useEffect(()=>{me.current=m},[m]),F.useEffect(()=>{Z.current=h},[h]),F.useEffect(()=>{B.current=y},[y]),F.useEffect(()=>{V.current=P},[P]),F.useEffect(()=>{K.current=new Set(de.map(Be=>Be.id))},[de]),F.useEffect(()=>{l==null||l(f)},[f,l]);const Se=Array.from(R.values()).filter(Be=>Be.status==="pending").length,Ae=Array.from(R.values()).filter(Be=>Be.status==="cracked").length,Ue=Array.from(R.values()).filter(Be=>Be.status==="failed").length,Ye=F.useCallback(async()=>{if(he.current||!Y.current||!fe.current)return;const Be=G.current;let Ze=null,dt=null;for(const[qe,tt]of Be.entries())if(tt.status==="pending"){Ze=tt,dt=qe;break}if(!Ze&&me.current){const qe=Array.from(Be.entries()).filter(([,tt])=>tt.status==="failed"&&tt.lastAttemptLength<10);qe.length>0&&(qe.sort((tt,nt)=>tt[1].lastAttemptLength-nt[1].lastAttemptLength),[dt,Ze]=qe[0])}if(!Ze||dt===null){fe.current&&setTimeout(()=>Ye(),1e3);return}if(!K.current.has(dt)){T(qe=>{const tt=new Map(qe);return tt.delete(dt),tt}),fe.current&&setTimeout(()=>Ye(),10);return}he.current=!0;const Mt=Z.current,at=Ze.lastAttemptLength>0,gt=at?Ze.lastAttemptLength+1:Mt;try{const qe=await Y.current.crack(Ze.packet.data,{maxLength:gt,useSenderFilter:!0,useTimestampFilter:!0,useUtf8Filter:!0,...V.current&&{gpuDispatchMs:1e4},...at&&{useDictionary:!1,startingLength:gt}},tt=>{k(tt)});if(ae.current){ae.current=!1,he.current=!1,k(null);return}if(qe.found&&qe.roomName&&qe.key){T(He=>{const Ct=new Map(He),Ce=Ct.get(dt);return Ce&&Ct.set(dt,{...Ce,status:"cracked",attempts:Ce.attempts+1,lastAttemptLength:gt}),Ct});const tt={roomName:qe.roomName,key:qe.key,packetId:dt,message:qe.decryptedMessage||"",crackedAt:Date.now()};N(He=>[...He,tt]);const nt=qe.key.toUpperCase();if(!ce.has(nt))try{const He="#"+qe.roomName;await o(He,qe.key),B.current&&await et.decryptHistoricalPackets({key_type:"channel",channel_name:He})}catch(He){console.error("Failed to create channel or decrypt historical:",He),xt.error("Failed to save cracked channel",{description:He instanceof Error?He.message:"Channel discovered but could not be saved"})}}else T(tt=>{const nt=new Map(tt),He=nt.get(dt);return He&&nt.set(dt,{...He,status:"failed",attempts:He.attempts+1,lastAttemptLength:gt}),nt})}catch(qe){console.error("Cracking error:",qe),T(tt=>{const nt=new Map(tt),He=nt.get(dt);return He&&nt.set(dt,{...He,status:"failed",attempts:He.attempts+1,lastAttemptLength:gt}),nt})}he.current=!1,k(null),fe.current&&setTimeout(()=>Ye(),100)},[ce,o]),bt=()=>{var Be;if(!z){xt.error("WebGPU not available",{description:"Cracking requires Chrome 113+ or Edge 113+ with WebGPU support."});return}p(!0),fe.current=!0,ae.current=!1,(Be=re.current)==null||Be.enable(),Ye()},ct=()=>{var Be,Ze;p(!1),fe.current=!1,ae.current=!0,(Be=Y.current)==null||Be.abort(),(Ze=re.current)== Line truncated
//# sourceMappingURL=index-eCIKhXih.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"mappings":"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 truncated
+1 -1
View File
@@ -13,7 +13,7 @@
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<script type="module" crossorigin src="/assets/index-BVIx9g0k.js"></script>
<script type="module" crossorigin src="/assets/index-eCIKhXih.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CnRBRJ10.css">
</head>
<body>
+38 -11
View File
@@ -513,16 +513,35 @@ export function App() {
setSidebarOpen(false);
}, []);
// Toggle favorite status for a conversation (via API)
const handleToggleFavorite = useCallback(async (type: 'channel' | 'contact', id: string) => {
try {
const updatedSettings = await api.toggleFavorite(type, id);
setAppSettings(updatedSettings);
} catch (err) {
console.error('Failed to toggle favorite:', err);
toast.error('Failed to update favorite');
}
}, []);
// Toggle favorite status for a conversation (via API) with optimistic update
const handleToggleFavorite = useCallback(
async (type: 'channel' | 'contact', id: string) => {
// Compute optimistic new state
const wasFavorited = isFavorite(favorites, type, id);
const optimisticFavorites = wasFavorited
? favorites.filter((f) => {
if (f.type !== type) return true;
// Use prefix matching for contacts, exact match for channels
if (type === 'contact') return !pubkeysMatch(f.id, id);
return f.id !== id;
})
: [...favorites, { type, id }];
// Optimistic update
setAppSettings((prev) => (prev ? { ...prev, favorites: optimisticFavorites } : prev));
try {
const updatedSettings = await api.toggleFavorite(type, id);
setAppSettings(updatedSettings);
} catch (err) {
console.error('Failed to toggle favorite:', err);
// Revert on error
setAppSettings((prev) => (prev ? { ...prev, favorites } : prev));
toast.error('Failed to update favorite');
}
},
[favorites]
);
// Delete channel handler
const handleDeleteChannel = useCallback(async (key: string) => {
@@ -622,13 +641,21 @@ export function App() {
[fetchUndecryptedCount]
);
// Handle sort order change via API
// Handle sort order change via API with optimistic update
const handleSortOrderChange = useCallback(async (order: 'recent' | 'alpha') => {
// Optimistic update for responsive UI
setAppSettings((prev) => (prev ? { ...prev, sidebar_sort_order: order } : prev));
try {
const updatedSettings = await api.updateSettings({ sidebar_sort_order: order });
setAppSettings(updatedSettings);
} catch (err) {
console.error('Failed to update sort order:', err);
// Revert on error
setAppSettings((prev) =>
prev ? { ...prev, sidebar_sort_order: order === 'recent' ? 'alpha' : 'recent' } : prev
);
toast.error('Failed to save sort preference');
}
}, []);