+ Enum IntervalTimerType + +
+ + + + + + +public enum IntervalTimerType
+ Fields +
+-
+
ManualUpdate = 3
+
+ SystemTime = 0
+
+ UnityTime = 1
+
+ UnityUnscaledTime = 2
+
+
diff --git a/README.md b/README.md index 6e1c5fe..e02f28f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ Core Game Libraries for Unity ![](https://img.shields.io/badge/unity-2022.3%20or%20later-green?logo=unity) [![](https://img.shields.io/badge/license-MIT-blue)](https://github.com/mewlist/MewCore/blob/main/LICENSE) +## Documents + +https://mewlist.github.io/MewCore/ + +## Readme (日本語) + +[Readme_ja.md](./README_ja.md) + ## Installation It can be installed via UPM. diff --git a/Documents.meta b/docs.meta similarity index 77% rename from Documents.meta rename to docs.meta index 68e1bba..52c9183 100644 --- a/Documents.meta +++ b/docs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 53aab28cd45e83e419d45c37e7bb4d79 +guid: 4203f787c9eb7034abbc67e1b171f14f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/api.meta b/docs/api.meta new file mode 100644 index 0000000..310557a --- /dev/null +++ b/docs/api.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ee7c5fd729e62a4286e37291abcb1c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/docs/api/Mew.Core.IntervalTimerType.html b/docs/api/Mew.Core.IntervalTimerType.html new file mode 100644 index 0000000..b4ab6f6 --- /dev/null +++ b/docs/api/Mew.Core.IntervalTimerType.html @@ -0,0 +1,157 @@ + + +
+ +public enum IntervalTimerType
+ ManualUpdate = 3
SystemTime = 0
UnityTime = 1
UnityUnscaledTime = 2
public enum LagProcessType
+ Flood = 1
Skip = 0
public class MewLoop
+ Add update callback function to default delegate collection. +Default delegate collection is set through SetDefaultCollection().
+public static void Add(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionAdd update callback function to delegate collection for id.
+public static void Add(string id, MewLoopDelegateCollection.UpdateFunction updateFunction)
+ id
stringupdateFunction
MewLoopDelegateCollection.UpdateFunctionAdd update callback function to delegate collection for type T.
+public static void Add<T>(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionT
public static string LoopId<T>()
+ T
Register delegate collection for id.
+public static void Register(string id, MewLoopDelegateCollection delegateCollection)
+ id
stringdelegateCollection
MewLoopDelegateCollectionRegister delegate collection for type T.
+public static void Register<T>(MewLoopDelegateCollection delegateCollection)
+ delegateCollection
MewLoopDelegateCollectionT
Remove update callback function from default delegate collection.
+public static void Remove(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionRemove update callback function from delegate collection for id.
+public static void Remove(string id, MewLoopDelegateCollection.UpdateFunction updateFunction)
+ id
stringupdateFunction
MewLoopDelegateCollection.UpdateFunctionRemove update callback function from delegate collection for type T.
+public static void Remove<T>(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionT
Set default delegate collection id.
+public static void SetDefaultCollection(string? id)
+ id
stringSet default delegate collection id as T.
+public static void SetDefaultCollection<T>()
+ T
Invoke update callback functions in default delegate collection.
+public static void Update()
+ Invoke update callback functions in delegate collection for id.
+public static void Update(string id)
+ id
stringInvoke update callback functions in delegate collection for type T.
+public static void Update<T>()
+ T
public delegate void MewLoopDelegateCollection.UpdateFunction()
+ public class MewLoopDelegateCollection
+ public void Add(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionpublic void Invoke()
+ public void Remove(MewLoopDelegateCollection.UpdateFunction updateFunction)
+ updateFunction
MewLoopDelegateCollection.UpdateFunctionpublic static MewLoopDelegateCollection operator +(MewLoopDelegateCollection collection, MewLoopDelegateCollection.UpdateFunction func)
+ collection
MewLoopDelegateCollectionfunc
MewLoopDelegateCollection.UpdateFunctionpublic static MewLoopDelegateCollection operator -(MewLoopDelegateCollection collection, MewLoopDelegateCollection.UpdateFunction func)
+ collection
MewLoopDelegateCollectionfunc
MewLoopDelegateCollection.UpdateFunctionpublic static class MewLoopUnityInitializer
+ public struct MewManualUpdate
+ public struct MewUnityEarlyUpdate
+ public struct MewUnityFixedUpdate
+ public struct MewUnityPostLateUpdate
+ public struct MewUnityPreLateUpdate
+ public struct MewUnityPreUpdate
+ public struct MewUnityUpdate
+ public delegate Task TaskAction(CancellationToken ct)
+ ct
CancellationTokenpublic class TaskInterval<T> : TaskInterval, IDisposable
+ T
Create TaskInterval.
+public static TaskInterval Create(double intervalMs, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(double intervalMs, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypepublic class TaskInterval : IDisposable
+ protected TaskInterval(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType, LagProcessType lagProcessType, string loopId)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeloopId
stringprotected TaskInterval(TimeSpan interval, Action action, IntervalTimerType intervalTimerType, LagProcessType lagProcessType, string loopId)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeloopId
stringpublic TimeSpan Interval { get; }
+ public IntervalTimerType IntervalTimerType { get; }
+ public LagProcessType LagProcessType { get; }
+ public string LoopId { get; }
+ Create TaskInterval.
+public static TaskInterval Create(double intervalMs, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(double intervalMs, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypepublic void Dispose()
+ Run action every interval.
+public void Start(CancellationToken? ct = null)
+ ct
CancellationToken?Dispose TaskInterval when ct is cancelled.
+Progress timer manually.
+public void Tick(float elapsedTime)
+ elapsedTime
floatTaskQueue for specific loop.
+public class TaskQueue<T> : TaskQueue, IDisposable
+ T
Loop Timing Type
+public TaskQueue()
+ public TaskQueue(TaskQueueLimitType taskQueueLimitType, int maxSize)
+ taskQueueLimitType
TaskQueueLimitTypemaxSize
intpublic class TaskQueue : IDisposable
+ public TaskQueue(TaskQueueLimitType taskQueueLimitType = TaskQueueLimitType.None, int maxSize = 0)
+ taskQueueLimitType
TaskQueueLimitTypemaxSize
intprotected string loopId
+ Count of running or waiting tasks.
+public int Count { get; }
+ true if disposed.
+public bool Disposed { get; }
+ public TaskQueueLimitType LimitType { get; }
+ public int MaxSize { get; }
+ public bool Any()
+ public void Dispose()
+ public void Enqueue(TaskAction func, int priority = 0)
+ func
TaskActionpriority
intStart TaskQueue.
+public void Start(CancellationToken? ct = null)
+ ct
CancellationToken?Dispose TaskQueue when ct is cancelled.
+public Task WaitForEmptyAsync()
+ public enum TaskQueueLimitType
+ Discard = 2
Keep queue and discard new task.
+None = 0
SwapLast = 1
Discard last less-or-equal priority task. Then enqueue. +If all tasks have higher priority, discard new task.
+public class TaskWithPriority
+ public TaskWithPriority(TaskAction func, int priority)
+ func
TaskActionpriority
intpublic TaskAction Func { get; }
+ public int Priority { get; }
+ public enum IntervalTimerType
+ ManualUpdate = 3
SystemTime = 0
UnityTime = 1
UnityUnscaledTime = 2
public enum LagProcessType
+ Flood = 1
Skip = 0
public delegate Task TaskAction(CancellationToken ct)
+ ct
CancellationTokenpublic class TaskInterval<T> : TaskInterval, IDisposable
+ T
Create TaskInterval.
+public static TaskInterval Create(double intervalMs, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(double intervalMs, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypepublic class TaskInterval : IDisposable
+ protected TaskInterval(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType, LagProcessType lagProcessType, string loopId)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeloopId
stringprotected TaskInterval(TimeSpan interval, Action action, IntervalTimerType intervalTimerType, LagProcessType lagProcessType, string loopId)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeloopId
stringpublic TimeSpan Interval { get; }
+ public IntervalTimerType IntervalTimerType { get; }
+ public LagProcessType LagProcessType { get; }
+ public string LoopId { get; }
+ Create TaskInterval.
+public static TaskInterval Create(double intervalMs, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(double intervalMs, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ intervalMs
doubleaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, TaskAction action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
TaskActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypeCreate TaskInterval.
+public static TaskInterval Create(TimeSpan interval, Action action, IntervalTimerType intervalTimerType = IntervalTimerType.UnityTime, LagProcessType lagProcessType = LagProcessType.Skip)
+ interval
TimeSpanaction
ActionintervalTimerType
IntervalTimerTypelagProcessType
LagProcessTypepublic void Dispose()
+ Run action every interval.
+public void Start(CancellationToken? ct = null)
+ ct
CancellationToken?Dispose TaskInterval when ct is cancelled.
+Progress timer manually.
+public void Tick(float elapsedTime)
+ elapsedTime
floatTaskQueue for specific loop.
+public class TaskQueue<T> : TaskQueue, IDisposable
+ T
Loop Timing Type
+public TaskQueue()
+ public TaskQueue(TaskQueueLimitType taskQueueLimitType, int maxSize)
+ taskQueueLimitType
TaskQueueLimitTypemaxSize
intpublic class TaskQueue : IDisposable
+ public TaskQueue(TaskQueueLimitType taskQueueLimitType = TaskQueueLimitType.None, int maxSize = 0)
+ taskQueueLimitType
TaskQueueLimitTypemaxSize
intprotected string loopId
+ Count of running or waiting tasks.
+public int Count { get; }
+ true if disposed.
+public bool Disposed { get; }
+ public TaskQueueLimitType LimitType { get; }
+ public int MaxSize { get; }
+ public bool Any()
+ public void Dispose()
+ public void Enqueue(TaskAction func, int priority = 0)
+ func
TaskActionpriority
intStart TaskQueue.
+public void Start(CancellationToken? ct = null)
+ ct
CancellationToken?Dispose TaskQueue when ct is cancelled.
+public Task WaitForEmptyAsync()
+ public enum TaskQueueLimitType
+ Discard = 2
Keep queue and discard new task.
+None = 0
SwapLast = 1
Discard last less-or-equal priority task. Then enqueue. +If all tasks have higher priority, discard new task.
+public class TaskWithPriority
+ public TaskWithPriority(TaskAction func, int priority)
+ func
TaskActionpriority
intpublic TaskAction Func { get; }
+ public int Priority { get; }
+ TaskQueue for specific loop.
+public class TaskIntervalBehaviourTest : MonoBehaviour
+ public class TaskIntervalPlayModeTest
+ [UnityTest]
+public IEnumerator BasicTest()
+ [UnityTest]
+public IEnumerator FixedUpdateTest()
+ [UnityTest]
+public IEnumerator SkipTaskWhenFloodTest()
+ public class TaskQueueBehaviourTest : MonoBehaviour
+ public class TaskQueuePlayModeTest
+ [UnityTest]
+public IEnumerator DiscardHighPriorityTest()
+ [UnityTest]
+public IEnumerator DiscardLowPriorityTest()
+ [UnityTest]
+public IEnumerator DiscardTest()
+ [UnityTest]
+public IEnumerator DisposeByCancellationTokenTest()
+ [UnityTest]
+public IEnumerator DisposeTest()
+ [UnityTest]
+public IEnumerator SwapLastHighPriorityTest()
+ [UnityTest]
+public IEnumerator SwapLastLowPriorityTest()
+ [UnityTest]
+public IEnumerator SwapLastTest()
+ TaskInterval is a library that facilitates the execution of specific processes at regular intervals in Unity development. This library allows for periodic execution of asynchronous functions and prevents multiple asynchronous processes from running concurrently.
+Regular Execution of Asynchronous Functions: Automatically executes asynchronous functions at specified intervals, making it easier to manage tasks that include asynchronous processes.
+Flexible Response to Processing Time: If the execution of an asynchronous function takes longer than the specified interval, it can either skip the process or continue executing it delayed. This differs from typical periodic execution and adapts better to real-time operating environments.
+Prevention of Concurrent Execution: Only one asynchronous process is executed at a time, preventing multiple processes from running simultaneously. This makes task execution predictable and safe.
+Stable Interval Execution: If synchronous functions are used, it is also possible to execute functions at stable intervals.
+Regular Updates Within the Game: Used for regularly updating the state of the game or objects at set intervals.
+Background Processes: Suitable for regular background processes such as network communication and data loading.
+Regular UI Updates: Can also be used for regularly updating user interface elements.
+Using TaskInterval makes the implementation of regular processes in Unity development more flexible and efficient, and prevents issues due to concurrent execution.
+public class Sample : MonoBahaviour
+{
+ private void Awake()
+ {
+ // Create a TaskInterval that executes TestTaskAsync every second.
+ // Passing destroyCancellationToken will automatically stop the process and dispose of it when the MonoBehaviour is destroyed.
+ TaskInterval
+ .Create(TimeSpan.FromSeconds(1), TestTaskAsync)
+ .Start(destroyCancellationToken);
+ }
+
+ private float time;
+ private async Task TestTaskAsync(CancellationToken ct)
+ {
+ var currentTime = Time.time;
+ Debug.Log($"{currentTime - time}");
+ time = currentTime;
+ await Task.Delay(100, ct);
+ }
+}
+
+0.9996152
+1.000825
+1.000599
+0.9999266
+1.000448
+0.9925194
+...
+
+You can change the timer used by specifying the type of timer as the third argument in Create.
+Timer Type | +Description | +
---|---|
IntervalTimerType.SystemTime |
+Uses system time. | +
IntervalTimerType.UnityTime |
+Uses Unity's Time.time. | +
IntervalTimerType.UnityUnscaledTime |
+Time.unscaledTime. | +
Example of executing a process unaffected by Time.timeScale.
+TaskInterval
+ .Create(1000 /* ms */, TestTaskAsync, IntervalTimerType.UnityUnscaledTime)
+ .Start(destroyCancellationToken);
+
+You can specify the PlayerLoop timing for processing tasks. +The following timing types are defined.
+Timing | +Description | +
---|---|
MewUnityEarlyUpdate |
+Called at the beginning of Unity's frame update. At this stage, initial event processing and input updates occur. | +
MewUnityFixedUpdate |
+The timing for physics updates. Corresponds to fixed-frame-rate processing in Unity Engine. | +
MewUnityPreUpdate |
+Processing executed before the Update method. Includes scene state updates and animation updates. | +
MewUnityUpdate |
+The normal Update method timing, mainly used for updating game logic. | +
MewUnityPreLateUpdate |
+Processing executed before LateUpdate. Some post-processing for cameras and animations may occur. | +
MewUnityPostLateUpdate |
+Processing at the end of the frame, including rendering preparation and final camera updates. | +
To specify PlayerLoop timing, specify the timing type for TaskInterval. +For example, specifying MewUnityFixedUpdate can ensure stable game-time task execution even in case of frame skips, preventing delays.
+TaskInterval<MewUnityFixedUpdate>
+ .Create(1000 /* ms */, TestTaskAsync, IntervalTimerType.UnityUnscaledTime)
+ .Start(destroyCancellationToken);
+
+
+TaskQueue is a library that simplifies and efficiently handles asynchronous processes in Unity development. This library enables the management of dynamically changing asynchronous functions and the determination of execution order based on priority.
+Dynamic Function Addition: Allows adding asynchronous functions to the task queue at runtime. This enables flexible response to changing requirements and situations.
+Priority-Based Execution Management: Sets priorities for each asynchronous function and processes important tasks preferentially. This prevents delays in critical processes.
+Serial Processing and Safety: Executes multiple asynchronous functions in order, waiting for one function to complete before starting the next. This improves safety in UI updates and game sequencing.
+Simple Description: TaskQueue is designed to simplify the description of executing asynchronous functions.
+Dynamic UI Updates: Used for smooth control of dynamic display and hiding of dialog boxes and menus in the game.
+Game Event Sequencing: Suitable for managing ordered events such as story progression and tutorials.
+Command Pattern Adaptation: Suitable for implementing the command pattern, including asynchronous processes.
+UI Event Handling: Used to prevent concurrent execution in response to asynchronous UI events such as clicks.
+class Sample : Monobehaviour
+{
+ void Start()
+ {
+ // Create an instance of TaskQueue.
+ var taskQueue = new TaskQueue();
+ // Start executing TaskQueue.
+ // Passing destroyCancellationToken will automatically stop the process and dispose of it when the MonoBehaviour is destroyed.
+ taskQueue.Start(destroyCancellationToken);
+
+ // Add asynchronous functions to TaskQueue.
+ taskQueue.Enqueue(async cancellationToken =>
+ {
+ Debug.Log("Hello");
+ await Task.Delay(1000, cancellationToken);
+ });
+ taskQueue.Enqueue(async cancellationToken =>
+ {
+ await Task.Delay(1000, cancellationToken);
+ Debug.Log("Bye");
+ });
+ }
+}
+
+Hello
+// 2sec later
+Bye
+
+You can execute priority tasks by specifying the priority as the second argument in Enqueue. +The higher the number, the more prioritized the processing. The default value is 0.
+taskQueue.Enqueue(async ct => { ... }, priority: 1);
+
+You can specify the PlayerLoop timing for processing the queue. +The following timing types are defined.
+Timing | +Description | +
---|---|
MewUnityEarlyUpdate |
+Called at the beginning of Unity's frame update. At this stage, initial event processing and input updates occur. | +
MewUnityFixedUpdate |
+The timing for physics updates. Corresponds to fixed-frame-rate processing in Unity Engine. | +
MewUnityPreUpdate |
+Processing executed before the Update method. Includes scene state updates and animation updates. | +
MewUnityUpdate |
+The normal Update method timing, mainly used for updating game logic. | +
MewUnityPreLateUpdate |
+Processing executed before LateUpdate. Some post-processing for cameras and animations may occur. | +
MewUnityPostLateUpdate |
+Processing at the end of the frame, including rendering preparation and final camera updates. | +
To specify PlayerLoop timing, specify the timing type in the constructor. +For example, specifying MewUnityFixedUpdate can prevent queue processing delays in case of frame skips.
+var fixedUpdateTaskQueue = new TaskQueue<MewUnityFixedUpdate>();
+
+
+Core Game Libraries for Unity
+ +It can be installed via UPM. +Please specify the following git URL.
+git@github.com:mewlist/MewCore.git
+
+TaskQueue is a library that simplifies and efficiently handles asynchronous processes in Unity development. This library enables the management of dynamically changing asynchronous functions and the determination of execution order based on priority.
+TaskInterval is a library that facilitates the execution of specific processes at regular intervals in Unity development. This library allows for periodic execution of asynchronous functions and prevents multiple asynchronous processes from running concurrently.
+ +/gm),At=a(/\${[\w\W]*}/gm),Gt=a(/^data-[\-\w.\u00B7-\uFFFF]/),gt=a(/^aria-[\-\w]+$/),Pt=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ht=a(/^(?:\w+script|data):/i),It=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),O=a(/^html$/i);var V=Object.freeze({__proto__:null,MUSTACHE_EXPR:at,ERB_EXPR:Bt,TMPLIT_EXPR:At,DATA_ATTR:Gt,ARIA_ATTR:gt,IS_ALLOWED_URI:Pt,IS_SCRIPT_OR_DATA:ht,ATTR_WHITESPACE:It,DOCTYPE_NAME:O});let K=()=>typeof window>"u"?null:window,k=function(P,Q){if(typeof P!="object"||typeof P.createPolicy!="function")return null;let J=null,Ct="data-tt-policy-suffix";Q&&Q.hasAttribute(Ct)&&(J=Q.getAttribute(Ct));let te="dompurify"+(J?"#"+J:"");try{return P.createPolicy(te,{createHTML(se){return se},createScriptURL(se){return se}})}catch{return console.warn("TrustedTypes policy "+te+" could not be created."),null}};function Ft(){let X=arguments.length>0&&arguments[0]!==void 0?arguments[0]:K(),P=W=>Ft(W);if(P.version="3.0.5",P.removed=[],!X||!X.document||X.document.nodeType!==9)return P.isSupported=!1,P;let Q=X.document,J=Q.currentScript,{document:Ct}=X,{DocumentFragment:te,HTMLTemplateElement:se,Node:ba,Element:Zl,NodeFilter:Ta,NamedNodeMap:Tg=X.NamedNodeMap||X.MozNamedAttrMap,HTMLFormElement:vg,DOMParser:kg,trustedTypes:_o}=X,Co=Zl.prototype,Sg=et(Co,"cloneNode"),wg=et(Co,"nextSibling"),Bg=et(Co,"childNodes"),va=et(Co,"parentNode");if(typeof se=="function"){let W=Ct.createElement("template");W.content&&W.content.ownerDocument&&(Ct=W.content.ownerDocument)}let Rt,Si="",{implementation:ka,createNodeIterator:Ag,createDocumentFragment:Fg,getElementsByTagName:Lg}=Ct,{importNode:Mg}=Q,le={};P.isSupported=typeof t=="function"&&typeof va=="function"&&ka&&ka.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Sa,ERB_EXPR:wa,TMPLIT_EXPR:Ba,DATA_ATTR:Eg,ARIA_ATTR:Og,IS_SCRIPT_OR_DATA:Ig,ATTR_WHITESPACE:Ql}=V,{IS_ALLOWED_URI:Jl}=V,bt=null,tc=y({},[...rt,...T,...C,...B,...N]),Tt=null,ec=y({},[...R,...j,...G,...Z]),ft=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),wi=null,Aa=null,rc=!0,Fa=!0,ic=!1,oc=!0,Ir=!1,rr=!1,La=!1,Ma=!1,Dr=!1,bo=!1,To=!1,nc=!0,ac=!1,Dg="user-content-",Ea=!0,Bi=!1,Nr={},Pr=null,sc=y({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),lc=null,cc=y({},["audio","video","img","source","image","track"]),Oa=null,uc=y({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),vo="http://www.w3.org/1998/Math/MathML",ko="http://www.w3.org/2000/svg",_e="http://www.w3.org/1999/xhtml",Rr=_e,Ia=!1,Da=null,Ng=y({},[vo,ko,_e],x),ir,Pg=["application/xhtml+xml","text/html"],Rg="text/html",vt,$r=null,$g=Ct.createElement("form"),hc=function(d){return d instanceof RegExp||d instanceof Function},Na=function(d){if(!($r&&$r===d)){if((!d||typeof d!="object")&&(d={}),d=$(d),ir=Pg.indexOf(d.PARSER_MEDIA_TYPE)===-1?ir=Rg:ir=d.PARSER_MEDIA_TYPE,vt=ir==="application/xhtml+xml"?x:p,bt="ALLOWED_TAGS"in d?y({},d.ALLOWED_TAGS,vt):tc,Tt="ALLOWED_ATTR"in d?y({},d.ALLOWED_ATTR,vt):ec,Da="ALLOWED_NAMESPACES"in d?y({},d.ALLOWED_NAMESPACES,x):Ng,Oa="ADD_URI_SAFE_ATTR"in d?y($(uc),d.ADD_URI_SAFE_ATTR,vt):uc,lc="ADD_DATA_URI_TAGS"in d?y($(cc),d.ADD_DATA_URI_TAGS,vt):cc,Pr="FORBID_CONTENTS"in d?y({},d.FORBID_CONTENTS,vt):sc,wi="FORBID_TAGS"in d?y({},d.FORBID_TAGS,vt):{},Aa="FORBID_ATTR"in d?y({},d.FORBID_ATTR,vt):{},Nr="USE_PROFILES"in d?d.USE_PROFILES:!1,rc=d.ALLOW_ARIA_ATTR!==!1,Fa=d.ALLOW_DATA_ATTR!==!1,ic=d.ALLOW_UNKNOWN_PROTOCOLS||!1,oc=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ir=d.SAFE_FOR_TEMPLATES||!1,rr=d.WHOLE_DOCUMENT||!1,Dr=d.RETURN_DOM||!1,bo=d.RETURN_DOM_FRAGMENT||!1,To=d.RETURN_TRUSTED_TYPE||!1,Ma=d.FORCE_BODY||!1,nc=d.SANITIZE_DOM!==!1,ac=d.SANITIZE_NAMED_PROPS||!1,Ea=d.KEEP_CONTENT!==!1,Bi=d.IN_PLACE||!1,Jl=d.ALLOWED_URI_REGEXP||Pt,Rr=d.NAMESPACE||_e,ft=d.CUSTOM_ELEMENT_HANDLING||{},d.CUSTOM_ELEMENT_HANDLING&&hc(d.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ft.tagNameCheck=d.CUSTOM_ELEMENT_HANDLING.tagNameCheck),d.CUSTOM_ELEMENT_HANDLING&&hc(d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ft.attributeNameCheck=d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ft.allowCustomizedBuiltInElements=d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ir&&(Fa=!1),bo&&(Dr=!0),Nr&&(bt=y({},[...N]),Tt=[],Nr.html===!0&&(y(bt,rt),y(Tt,R)),Nr.svg===!0&&(y(bt,T),y(Tt,j),y(Tt,Z)),Nr.svgFilters===!0&&(y(bt,C),y(Tt,j),y(Tt,Z)),Nr.mathMl===!0&&(y(bt,B),y(Tt,G),y(Tt,Z))),d.ADD_TAGS&&(bt===tc&&(bt=$(bt)),y(bt,d.ADD_TAGS,vt)),d.ADD_ATTR&&(Tt===ec&&(Tt=$(Tt)),y(Tt,d.ADD_ATTR,vt)),d.ADD_URI_SAFE_ATTR&&y(Oa,d.ADD_URI_SAFE_ATTR,vt),d.FORBID_CONTENTS&&(Pr===sc&&(Pr=$(Pr)),y(Pr,d.FORBID_CONTENTS,vt)),Ea&&(bt["#text"]=!0),rr&&y(bt,["html","head","body"]),bt.table&&(y(bt,["tbody"]),delete wi.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw E('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw E('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');Rt=d.TRUSTED_TYPES_POLICY,Si=Rt.createHTML("")}else Rt===void 0&&(Rt=k(_o,J)),Rt!==null&&typeof Si=="string"&&(Si=Rt.createHTML(""));n&&n(d),$r=d}},fc=y({},["mi","mo","mn","ms","mtext"]),pc=y({},["foreignobject","desc","title","annotation-xml"]),zg=y({},["title","style","font","a","script"]),So=y({},T);y(So,C),y(So,g);let Pa=y({},B);y(Pa,F);let qg=function(d){let S=va(d);(!S||!S.tagName)&&(S={namespaceURI:Rr,tagName:"template"});let D=p(d.tagName),ot=p(S.tagName);return Da[d.namespaceURI]?d.namespaceURI===ko?S.namespaceURI===_e?D==="svg":S.namespaceURI===vo?D==="svg"&&(ot==="annotation-xml"||fc[ot]):!!So[D]:d.namespaceURI===vo?S.namespaceURI===_e?D==="math":S.namespaceURI===ko?D==="math"&&pc[ot]:!!Pa[D]:d.namespaceURI===_e?S.namespaceURI===ko&&!pc[ot]||S.namespaceURI===vo&&!fc[ot]?!1:!Pa[D]&&(zg[D]||!So[D]):!!(ir==="application/xhtml+xml"&&Da[d.namespaceURI]):!1},or=function(d){u(P.removed,{element:d});try{d.parentNode.removeChild(d)}catch{d.remove()}},Ra=function(d,S){try{u(P.removed,{attribute:S.getAttributeNode(d),from:S})}catch{u(P.removed,{attribute:null,from:S})}if(S.removeAttribute(d),d==="is"&&!Tt[d])if(Dr||bo)try{or(S)}catch{}else try{S.setAttribute(d,"")}catch{}},dc=function(d){let S,D;if(Ma)d=""+d;else{let Xt=_(d,/^[\r\n\t ]+/);D=Xt&&Xt[0]}ir==="application/xhtml+xml"&&Rr===_e&&(d=''+d+"");let ot=Rt?Rt.createHTML(d):d;if(Rr===_e)try{S=new kg().parseFromString(ot,ir)}catch{}if(!S||!S.documentElement){S=ka.createDocument(Rr,"template",null);try{S.documentElement.innerHTML=Ia?Si:ot}catch{}}let kt=S.body||S.documentElement;return d&&D&&kt.insertBefore(Ct.createTextNode(D),kt.childNodes[0]||null),Rr===_e?Lg.call(S,rr?"html":"body")[0]:rr?S.documentElement:kt},mc=function(d){return Ag.call(d.ownerDocument||d,d,Ta.SHOW_ELEMENT|Ta.SHOW_COMMENT|Ta.SHOW_TEXT,null,!1)},Wg=function(d){return d instanceof vg&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof Tg)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},wo=function(d){return typeof ba=="object"?d instanceof ba:d&&typeof d=="object"&&typeof d.nodeType=="number"&&typeof d.nodeName=="string"},Ce=function(d,S,D){le[d]&&h(le[d],ot=>{ot.call(P,S,D,$r)})},gc=function(d){let S;if(Ce("beforeSanitizeElements",d,null),Wg(d))return or(d),!0;let D=vt(d.nodeName);if(Ce("uponSanitizeElement",d,{tagName:D,allowedTags:bt}),d.hasChildNodes()&&!wo(d.firstElementChild)&&(!wo(d.content)||!wo(d.content.firstElementChild))&&L(/<[/\w]/g,d.innerHTML)&&L(/<[/\w]/g,d.textContent))return or(d),!0;if(!bt[D]||wi[D]){if(!wi[D]&&yc(D)&&(ft.tagNameCheck instanceof RegExp&&L(ft.tagNameCheck,D)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(D)))return!1;if(Ea&&!Pr[D]){let ot=va(d)||d.parentNode,kt=Bg(d)||d.childNodes;if(kt&&ot){let Xt=kt.length;for(let ut=Xt-1;ut>=0;--ut)ot.insertBefore(Sg(kt[ut],!0),wg(d))}}return or(d),!0}return d instanceof Zl&&!qg(d)||(D==="noscript"||D==="noembed"||D==="noframes")&&L(/<\/no(script|embed|frames)/i,d.innerHTML)?(or(d),!0):(Ir&&d.nodeType===3&&(S=d.textContent,S=b(S,Sa," "),S=b(S,wa," "),S=b(S,Ba," "),d.textContent!==S&&(u(P.removed,{element:d.cloneNode()}),d.textContent=S)),Ce("afterSanitizeElements",d,null),!1)},xc=function(d,S,D){if(nc&&(S==="id"||S==="name")&&(D in Ct||D in $g))return!1;if(!(Fa&&!Aa[S]&&L(Eg,S))){if(!(rc&&L(Og,S))){if(!Tt[S]||Aa[S]){if(!(yc(d)&&(ft.tagNameCheck instanceof RegExp&&L(ft.tagNameCheck,d)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(d))&&(ft.attributeNameCheck instanceof RegExp&&L(ft.attributeNameCheck,S)||ft.attributeNameCheck instanceof Function&&ft.attributeNameCheck(S))||S==="is"&&ft.allowCustomizedBuiltInElements&&(ft.tagNameCheck instanceof RegExp&&L(ft.tagNameCheck,D)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(D))))return!1}else if(!Oa[S]){if(!L(Jl,b(D,Ql,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&d!=="script"&&w(D,"data:")===0&&lc[d])){if(!(ic&&!L(Ig,b(D,Ql,"")))){if(D)return!1}}}}}}return!0},yc=function(d){return d.indexOf("-")>0},_c=function(d){let S,D,ot,kt;Ce("beforeSanitizeAttributes",d,null);let{attributes:Xt}=d;if(!Xt)return;let ut={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tt};for(kt=Xt.length;kt--;){S=Xt[kt];let{name:ce,namespaceURI:$a}=S;if(D=ce==="value"?S.value:v(S.value),ot=vt(ce),ut.attrName=ot,ut.attrValue=D,ut.keepAttr=!0,ut.forceKeepAttr=void 0,Ce("uponSanitizeAttribute",d,ut),D=ut.attrValue,ut.forceKeepAttr||(Ra(ce,d),!ut.keepAttr))continue;if(!oc&&L(/\/>/i,D)){Ra(ce,d);continue}Ir&&(D=b(D,Sa," "),D=b(D,wa," "),D=b(D,Ba," "));let Cc=vt(d.nodeName);if(xc(Cc,ot,D)){if(ac&&(ot==="id"||ot==="name")&&(Ra(ce,d),D=Dg+D),Rt&&typeof _o=="object"&&typeof _o.getAttributeType=="function"&&!$a)switch(_o.getAttributeType(Cc,ot)){case"TrustedHTML":{D=Rt.createHTML(D);break}case"TrustedScriptURL":{D=Rt.createScriptURL(D);break}}try{$a?d.setAttributeNS($a,ce,D):d.setAttribute(ce,D),f(P.removed)}catch{}}}Ce("afterSanitizeAttributes",d,null)},Ug=function W(d){let S,D=mc(d);for(Ce("beforeSanitizeShadowDOM",d,null);S=D.nextNode();)Ce("uponSanitizeShadowNode",S,null),!gc(S)&&(S.content instanceof te&&W(S.content),_c(S));Ce("afterSanitizeShadowDOM",d,null)};return P.sanitize=function(W){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},S,D,ot,kt;if(Ia=!W,Ia&&(W=""),typeof W!="string"&&!wo(W))if(typeof W.toString=="function"){if(W=W.toString(),typeof W!="string")throw E("dirty is not a string, aborting")}else throw E("toString is not a function");if(!P.isSupported)return W;if(La||Na(d),P.removed=[],typeof W=="string"&&(Bi=!1),Bi){if(W.nodeName){let ce=vt(W.nodeName);if(!bt[ce]||wi[ce])throw E("root node is forbidden and cannot be sanitized in-place")}}else if(W instanceof ba)S=dc(""),D=S.ownerDocument.importNode(W,!0),D.nodeType===1&&D.nodeName==="BODY"||D.nodeName==="HTML"?S=D:S.appendChild(D);else{if(!Dr&&!Ir&&!rr&&W.indexOf("<")===-1)return Rt&&To?Rt.createHTML(W):W;if(S=dc(W),!S)return Dr?null:To?Si:""}S&&Ma&&or(S.firstChild);let Xt=mc(Bi?W:S);for(;ot=Xt.nextNode();)gc(ot)||(ot.content instanceof te&&Ug(ot.content),_c(ot));if(Bi)return W;if(Dr){if(bo)for(kt=Fg.call(S.ownerDocument);S.firstChild;)kt.appendChild(S.firstChild);else kt=S;return(Tt.shadowroot||Tt.shadowrootmode)&&(kt=Mg.call(Q,kt,!0)),kt}let ut=rr?S.outerHTML:S.innerHTML;return rr&&bt["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&L(O,S.ownerDocument.doctype.name)&&(ut=" +`+ut),Ir&&(ut=b(ut,Sa," "),ut=b(ut,wa," "),ut=b(ut,Ba," ")),Rt&&To?Rt.createHTML(ut):ut},P.setConfig=function(W){Na(W),La=!0},P.clearConfig=function(){$r=null,La=!1},P.isValidAttribute=function(W,d,S){$r||Na({});let D=vt(W),ot=vt(d);return xc(D,ot,S)},P.addHook=function(W,d){typeof d=="function"&&(le[W]=le[W]||[],u(le[W],d))},P.removeHook=function(W){if(le[W])return f(le[W])},P.removeHooks=function(W){le[W]&&(le[W]=[])},P.removeAllHooks=function(){le={}},P}var it=Ft();return it})});function bc(t){for(var e=[],r=1;r =i)&&(r=i);else{let i=-1;for(let o of t)(o=e(o,++i,t))!=null&&(r =o)&&(r=o)}return r}function Sc(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let o of t)(o=e(o,++i,t))!=null&&(r>o||r===void 0&&o>=o)&&(r=o)}return r}function nr(t,e){return t==null||e==null?NaN:t e?1:t>=e?0:NaN}function Ha(t,e){return t==null||e==null?NaN:e t?1:e>=t?0:NaN}function ar(t){let e,r,i;t.length!==2?(e=nr,r=(s,l)=>nr(t(s),l),i=(s,l)=>t(s)-l):(e=t===nr||t===Ha?t:Jg,r=t,i=t);function o(s,l,c=0,h=s.length){if(c >>1;r(s[f],l)<0?c=f+1:h=f}while(c >>1;r(s[f],l)<=0?c=f+1:h=f}while(c c&&i(s[f-1],l)>-i(s[f],l)?f-1:f}return{left:o,center:a,right:n}}function Jg(){return 0}function Ya(t){return t===null?NaN:+t}var wc=ar(nr),Bc=wc.right,t0=wc.left,e0=ar(Ya).center,ja=Bc;var zr=class extends Map{constructor(e,r=o0){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[i,o]of e)this.set(i,o)}get(e){return super.get(Ac(this,e))}has(e){return super.has(Ac(this,e))}set(e,r){return super.set(r0(this,e),r)}delete(e){return super.delete(i0(this,e))}};function Ac({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):r}function r0({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):(t.set(i,r),r)}function i0({_intern:t,_key:e},r){let i=e(r);return t.has(i)&&(r=t.get(i),t.delete(i)),r}function o0(t){return t!==null&&typeof t=="object"?t.valueOf():t}var n0=Math.sqrt(50),a0=Math.sqrt(10),s0=Math.sqrt(2);function Ao(t,e,r){let i=(e-t)/Math.max(0,r),o=Math.floor(Math.log10(i)),n=i/Math.pow(10,o),a=n>=n0?10:n>=a0?5:n>=s0?2:1,s,l,c;return o<0?(c=Math.pow(10,-o)/a,s=Math.round(t*c),l=Math.round(e*c),s/c e&&--l,c=-c):(c=Math.pow(10,o)*a,s=Math.round(t/c),l=Math.round(e/c),s*c e&&--l),l 0))return[];if(t===e)return[t];let i=e=o))return[];let s=n-o+1,l=new Array(s);if(i)if(a<0)for(let c=0;c +t(e)}function h0(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function f0(){return!this.__axis}function Mc(t,e){var r=[],i=null,o=null,n=6,a=6,s=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,c=t===Eo||t===Mo?-1:1,h=t===Mo||t===Ga?"x":"y",f=t===Eo||t===Va?l0:c0;function u(p){var x=i??(e.ticks?e.ticks.apply(e,r):e.domain()),_=o??(e.tickFormat?e.tickFormat.apply(e,r):Fc),b=Math.max(n,0)+s,w=e.range(),v=+w[0]+l,L=+w[w.length-1]+l,E=(e.bandwidth?h0:u0)(e.copy(),l),I=p.selection?p.selection():p,A=I.selectAll(".domain").data([null]),y=I.selectAll(".tick").data(x,e).order(),$=y.exit(),et=y.enter().append("g").attr("class","tick"),rt=y.select("line"),T=y.select("text");A=A.merge(A.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),y=y.merge(et),rt=rt.merge(et.append("line").attr("stroke","currentColor").attr(h+"2",c*n)),T=T.merge(et.append("text").attr("fill","currentColor").attr(h,c*b).attr("dy",t===Eo?"0em":t===Va?"0.71em":"0.32em")),p!==I&&(A=A.transition(p),y=y.transition(p),rt=rt.transition(p),T=T.transition(p),$=$.transition(p).attr("opacity",Lc).attr("transform",function(C){return isFinite(C=E(C))?f(C+l):this.getAttribute("transform")}),et.attr("opacity",Lc).attr("transform",function(C){var g=this.parentNode.__axis;return f((g&&isFinite(g=g(C))?g:E(C))+l)})),$.remove(),A.attr("d",t===Mo||t===Ga?a?"M"+c*a+","+v+"H"+l+"V"+L+"H"+c*a:"M"+l+","+v+"V"+L:a?"M"+v+","+c*a+"V"+l+"H"+L+"V"+c*a:"M"+v+","+l+"H"+L),y.attr("opacity",1).attr("transform",function(C){return f(E(C)+l)}),rt.attr(h+"2",c*n),T.attr(h,c*b).text(_),I.filter(f0).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Ga?"start":t===Mo?"end":"middle"),I.each(function(){this.__axis=E})}return u.scale=function(p){return arguments.length?(e=p,u):e},u.ticks=function(){return r=Array.from(arguments),u},u.tickArguments=function(p){return arguments.length?(r=p==null?[]:Array.from(p),u):r.slice()},u.tickValues=function(p){return arguments.length?(i=p==null?null:Array.from(p),u):i&&i.slice()},u.tickFormat=function(p){return arguments.length?(o=p,u):o},u.tickSize=function(p){return arguments.length?(n=a=+p,u):n},u.tickSizeInner=function(p){return arguments.length?(n=+p,u):n},u.tickSizeOuter=function(p){return arguments.length?(a=+p,u):a},u.tickPadding=function(p){return arguments.length?(s=+p,u):s},u.offset=function(p){return arguments.length?(l=+p,u):l},u}function p0(t){return Mc(Eo,t)}function d0(t){return Mc(Va,t)}function m0(){}function sr(t){return t==null?m0:function(){return this.querySelector(t)}}function Ec(t){typeof t!="function"&&(t=sr(t));for(var e=this._groups,r=e.length,i=new Array(r),o=0;o=L&&(L=v+1);!(I=b[L])&&++L =0;)(a=i[o])&&(n&&a.compareDocumentPosition(n)^4&&n.parentNode.insertBefore(a,n),n=a);return this}function Hc(t){t||(t=A0);function e(f,u){return f&&u?t(f.__data__,u.__data__):!f-!u}for(var r=this._groups,i=r.length,o=new Array(i),n=0;ne?1:t>=e?0:NaN}function Yc(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function jc(){return Array.from(this)}function Gc(){for(var t=this._groups,e=0,r=t.length;e =0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),Xa.hasOwnProperty(e)?{space:Xa[e],local:t}:t}function F0(t){return function(){this.removeAttribute(t)}}function L0(t){return function(){this.removeAttributeNS(t.space,t.local)}}function M0(t,e){return function(){this.setAttribute(t,e)}}function E0(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function O0(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function I0(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function Zc(t,e){var r=be(t);if(arguments.length<2){var i=this.node();return r.local?i.getAttributeNS(r.space,r.local):i.getAttribute(r)}return this.each((e==null?r.local?L0:F0:typeof e=="function"?r.local?I0:O0:r.local?E0:M0)(r,e))}function No(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function D0(t){return function(){this.style.removeProperty(t)}}function N0(t,e,r){return function(){this.style.setProperty(t,e,r)}}function P0(t,e,r){return function(){var i=e.apply(this,arguments);i==null?this.style.removeProperty(t):this.style.setProperty(t,i,r)}}function Qc(t,e,r){return arguments.length>1?this.each((e==null?D0:typeof e=="function"?P0:N0)(t,e,r??"")):De(this.node(),t)}function De(t,e){return t.style.getPropertyValue(e)||No(t).getComputedStyle(t,null).getPropertyValue(e)}function R0(t){return function(){delete this[t]}}function $0(t,e){return function(){this[t]=e}}function z0(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function Jc(t,e){return arguments.length>1?this.each((e==null?R0:typeof e=="function"?z0:$0)(t,e)):this.node()[t]}function tu(t){return t.trim().split(/^|\s+/)}function Ka(t){return t.classList||new eu(t)}function eu(t){this._node=t,this._names=tu(t.getAttribute("class")||"")}eu.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function ru(t,e){for(var r=Ka(t),i=-1,o=e.length;++i =0&&(r=e.slice(i+1),e=e.slice(0,i)),{type:e,name:r}})}function ax(t){return function(){var e=this.__on;if(e){for(var r=0,i=-1,o=e.length,n;r >8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Ro(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Ro(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=px.exec(t))?new Lt(e[1],e[2],e[3],1):(e=dx.exec(t))?new Lt(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=mx.exec(t))?Ro(e[1],e[2],e[3],e[4]):(e=gx.exec(t))?Ro(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=xx.exec(t))?Su(e[1],e[2]/100,e[3]/100,1):(e=yx.exec(t))?Su(e[1],e[2]/100,e[3]/100,e[4]):_u.hasOwnProperty(t)?Tu(_u[t]):t==="transparent"?new Lt(NaN,NaN,NaN,0):null}function Tu(t){return new Lt(t>>16&255,t>>8&255,t&255,1)}function Ro(t,e,r,i){return i<=0&&(t=e=r=NaN),new Lt(t,e,r,i)}function Qa(t){return t instanceof Ne||(t=re(t)),t?(t=t.rgb(),new Lt(t.r,t.g,t.b,t.opacity)):new Lt}function Hr(t,e,r,i){return arguments.length===1?Qa(t):new Lt(t,e,r,i??1)}function Lt(t,e,r,i){this.r=+t,this.g=+e,this.b=+r,this.opacity=+i}lr(Lt,Hr,Wr(Ne,{brighter(t){return t=t==null?zo:Math.pow(zo,t),new Lt(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Ii:Math.pow(Ii,t),new Lt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Lt(ur(this.r),ur(this.g),ur(this.b),qo(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:vu,formatHex:vu,formatHex8:bx,formatRgb:ku,toString:ku}));function vu(){return`#${cr(this.r)}${cr(this.g)}${cr(this.b)}`}function bx(){return`#${cr(this.r)}${cr(this.g)}${cr(this.b)}${cr((isNaN(this.opacity)?1:this.opacity)*255)}`}function ku(){let t=qo(this.opacity);return`${t===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${t===1?")":`, ${t})`}`}function qo(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ur(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function cr(t){return t=ur(t),(t<16?"0":"")+t.toString(16)}function Su(t,e,r,i){return i<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new ee(t,e,r,i)}function Bu(t){if(t instanceof ee)return new ee(t.h,t.s,t.l,t.opacity);if(t instanceof Ne||(t=re(t)),!t)return new ee;if(t instanceof ee)return t;t=t.rgb();var e=t.r/255,r=t.g/255,i=t.b/255,o=Math.min(e,r,i),n=Math.max(e,r,i),a=NaN,s=n-o,l=(n+o)/2;return s?(e===n?a=(r-i)/s+(r0&&l<1?0:a,new ee(a,s,l,t.opacity)}function Au(t,e,r,i){return arguments.length===1?Bu(t):new ee(t,e,r,i??1)}function ee(t,e,r,i){this.h=+t,this.s=+e,this.l=+r,this.opacity=+i}lr(ee,Au,Wr(Ne,{brighter(t){return t=t==null?zo:Math.pow(zo,t),new ee(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Ii:Math.pow(Ii,t),new ee(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*e,o=2*r-i;return new Lt(Za(t>=240?t-240:t+120,o,i),Za(t,o,i),Za(t<120?t+240:t-120,o,i),this.opacity)},clamp(){return new ee(wu(this.h),$o(this.s),$o(this.l),qo(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=qo(this.opacity);return`${t===1?"hsl(":"hsla("}${wu(this.h)}, ${$o(this.s)*100}%, ${$o(this.l)*100}%${t===1?")":`, ${t})`}`}}));function wu(t){return t=(t||0)%360,t<0?t+360:t}function $o(t){return Math.max(0,Math.min(1,t||0))}function Za(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var Fu=Math.PI/180,Lu=180/Math.PI;var Wo=18,Mu=.96422,Eu=1,Ou=.82521,Iu=4/29,Yr=6/29,Du=3*Yr*Yr,Tx=Yr*Yr*Yr;function Nu(t){if(t instanceof he)return new he(t.l,t.a,t.b,t.opacity);if(t instanceof ve)return Pu(t);t instanceof Lt||(t=Qa(t));var e=rs(t.r),r=rs(t.g),i=rs(t.b),o=Ja((.2225045*e+.7168786*r+.0606169*i)/Eu),n,a;return e===r&&r===i?n=a=o:(n=Ja((.4360747*e+.3850649*r+.1430804*i)/Mu),a=Ja((.0139322*e+.0971045*r+.7141733*i)/Ou)),new he(116*o-16,500*(n-o),200*(o-a),t.opacity)}function is(t,e,r,i){return arguments.length===1?Nu(t):new he(t,e,r,i??1)}function he(t,e,r,i){this.l=+t,this.a=+e,this.b=+r,this.opacity=+i}lr(he,is,Wr(Ne,{brighter(t){return new he(this.l+Wo*(t??1),this.a,this.b,this.opacity)},darker(t){return new he(this.l-Wo*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=Mu*ts(e),t=Eu*ts(t),r=Ou*ts(r),new Lt(es(3.1338561*e-1.6168667*t-.4906146*r),es(-.9787684*e+1.9161415*t+.033454*r),es(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));function Ja(t){return t>Tx?Math.pow(t,1/3):t/Du+Iu}function ts(t){return t>Yr?t*t*t:Du*(t-Iu)}function es(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function rs(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function vx(t){if(t instanceof ve)return new ve(t.h,t.c,t.l,t.opacity);if(t instanceof he||(t=Nu(t)),t.a===0&&t.b===0)return new ve(NaN,0 ()=>t;function Ru(t,e){return function(r){return t+r*e}}function kx(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(i){return Math.pow(t+i*e,r)}}function $u(t,e){var r=e-t;return r?Ru(t,r>180||r<-180?r-360*Math.round(r/360):r):jr(isNaN(t)?e:t)}function zu(t){return(t=+t)==1?ke:function(e,r){return r-e?kx(e,r,t):jr(isNaN(e)?r:e)}}function ke(t,e){var r=e-t;return r?Ru(t,r):jr(isNaN(t)?e:t)}function qu(t){return function(e,r){var i=t((e=Ni(e)).h,(r=Ni(r)).h),o=ke(e.c,r.c),n=ke(e.l,r.l),a=ke(e.opacity,r.opacity);return function(s){return e.h=i(s),e.c=o(s),e.l=n(s),e.opacity=a(s),e+""}}}var Sx=qu($u),wx=qu(ke);function os(t,e,r,i,o){var n=t*t,a=n*t;return((1-3*t+3*n-a)*e+(4-6*n+3*a)*r+(1+3*t+3*n-3*a)*i+a*o)/6}function Wu(t){var e=t.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),o=t[i],n=t[i+1],a=i>0?t[i-1]:2*o-n,s=i r&&(n=e.slice(r,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(o=o[0])?s[a]?s[a]+=o:s[++a]=o:(s[++a]=null,l.push({i:a,x:Mt(i,o)})),r=ns.lastIndex;return r 180?h+=360:h-c>180&&(c+=360),u.push({i:f.push(o(f)+"rotate(",null,i)-2,x:Mt(c,h)})):h&&f.push(o(f)+"rotate("+h+i)}function s(c,h,f,u){c!==h?u.push({i:f.push(o(f)+"skewX(",null,i)-2,x:Mt(c,h)}):h&&f.push(o(f)+"skewX("+h+i)}function l(c,h,f,u,p,x){if(c!==f||h!==u){var _=p.push(o(p)+"scale(",null,",",null,")");x.push({i:_-4,x:Mt(c,f)},{i:_-2,x:Mt(h,u)})}else(f!==1||u!==1)&&p.push(o(p)+"scale("+f+","+u+")")}return function(c,h){var f=[],u=[];return c=t(c),h=t(h),n(c.translateX,c.translateY,h.translateX,h.translateY,f,u),a(c.rotate,h.rotate,f,u),s(c.skewX,h.skewX,f,u),l(c.scaleX,c.scaleY,h.scaleX,h.scaleY,f,u),c=h=null,function(p){for(var x=-1,_=u.length,b;++x<_;)f[(b=u[x]).i]=b.x(p);return f.join("")}}}var cs=Ju(Zu,"px, ","px)","deg)"),us=Ju(Qu,", ",")",")");function Pe(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var hs=Symbol("implicit");function Ri(){var t=new zr,e=[],r=[],i=hs;function o(n){let a=t.get(n);if(a===void 0){if(i!==hs)return i;t.set(n,a=e.push(n)-1)}return r[a%r.length]}return o.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new zr;for(let a of n)t.has(a)||t.set(a,e.push(a)-1);return o},o.range=function(n){return arguments.length?(r=Array.from(n),o):r.slice()},o.unknown=function(n){return arguments.length?(i=n,o):i},o.copy=function(){return Ri(e,r).unknown(i)},Pe.apply(o,arguments),o}function fs(){var t=Ri().unknown(void 0),e=t.domain,r=t.range,i=0,o=1,n,a,s=!1,l=0,c=0,h=.5;delete t.unknown;function f(){var u=e().length,p=oe&&(r=t,t=e,e=r),function(i){return Math.max(t,Math.min(e,i))}}function Ex(t,e,r){var i=t[0],o=t[1],n=e[0],a=e[1];return o2?Ox:Ex,l=c=null,f}function f(u){return u==null||isNaN(u=+u)?n:(l||(l=s(t.map(i),e,r)))(i(a(u)))}return f.invert=function(u){return a(o((c||(c=s(e,t.map(i),Mt)))(u)))},f.domain=function(u){return arguments.length?(t=Array.from(u,ds),h()):t.slice()},f.range=function(u){return arguments.length?(e=Array.from(u),h()):e.slice()},f.rangeRound=function(u){return e=Array.from(u),r=ss,h()},f.clamp=function(u){return arguments.length?(a=u?!0:Gr,h()):a!==Gr},f.interpolate=function(u){return arguments.length?(r=u,h()):r},f.unknown=function(u){return arguments.length?(n=u,f):n},function(u,p){return i=u,o=p,h()}}function $i(){return Ix()(Gr,Gr)}function eh(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function pr(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,i=t.slice(0,r);return[i.length>1?i[0]+i.slice(2):i,+t.slice(r+1)]}function fe(t){return t=pr(Math.abs(t)),t?t[1]:NaN}function rh(t,e){return function(r,i){for(var o=r.length,n=[],a=0,s=t[0],l=0;o>0&&s>0&&(l+s+1>i&&(s=Math.max(1,i-l)),n.push(r.substring(o-=s,o+s)),!((l+=s+1)>i));)s=t[a=(a+1)%t.length];return n.reverse().join(e)}}function ih(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var Dx=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Re(t){if(!(e=Dx.exec(t)))throw new Error("invalid format: "+t);var e;return new jo({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Re.prototype=jo.prototype;function jo(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}jo.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function oh(t){t:for(var e=t.length,r=1,i=-1,o;r 0&&(i=0);break}return i>0?t.slice(0,i)+t.slice(o+1):t}var gs;function nh(t,e){var r=pr(t,e);if(!r)return t+"";var i=r[0],o=r[1],n=o-(gs=Math.max(-8,Math.min(8,Math.floor(o/3)))*3)+1,a=i.length;return n===a?i:n>a?i+new Array(n-a+1).join("0"):n>0?i.slice(0,n)+"."+i.slice(n):"0."+new Array(1-n).join("0")+pr(t,Math.max(0,e+n-1))[0]}function xs(t,e){var r=pr(t,e);if(!r)return t+"";var i=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+i:i.length>o+1?i.slice(0,o+1)+"."+i.slice(o+1):i+new Array(o-i.length+2).join("0")}var ys={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:eh,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>xs(t*100,e),r:xs,s:nh,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function _s(t){return t}var ah=Array.prototype.map,sh=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function lh(t){var e=t.grouping===void 0||t.thousands===void 0?_s:rh(ah.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",i=t.currency===void 0?"":t.currency[1]+"",o=t.decimal===void 0?".":t.decimal+"",n=t.numerals===void 0?_s:ih(ah.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",s=t.minus===void 0?"\u2212":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function c(f){f=Re(f);var u=f.fill,p=f.align,x=f.sign,_=f.symbol,b=f.zero,w=f.width,v=f.comma,L=f.precision,E=f.trim,I=f.type;I==="n"?(v=!0,I="g"):ys[I]||(L===void 0&&(L=12),E=!0,I="g"),(b||u==="0"&&p==="=")&&(b=!0,u="0",p="=");var A=_==="$"?r:_==="#"&&/[boxX]/.test(I)?"0"+I.toLowerCase():"",y=_==="$"?i:/[%p]/.test(I)?a:"",$=ys[I],et=/[defgprs%]/.test(I);L=L===void 0?6:/[gprs]/.test(I)?Math.max(1,Math.min(21,L)):Math.max(0,Math.min(20,L));function rt(T){var C=A,g=y,B,F,N;if(I==="c")g=$(T)+g,T="";else{T=+T;var R=T<0||1/T<0;if(T=isNaN(T)?l:$(Math.abs(T),L),E&&(T=oh(T)),R&&+T==0&&x!=="+"&&(R=!1),C=(R?x==="("?x:s:x==="-"||x==="("?"":x)+C,g=(I==="s"?sh[8+gs/3]:"")+g+(R&&x==="("?")":""),et){for(B=-1,F=T.length;++B N||N>57){g=(N===46?o+T.slice(B+1):T.slice(B))+g,T=T.slice(0,B);break}}}v&&!b&&(T=e(T,1/0));var j=C.length+T.length+g.length,G=j >1)+C+T+g+G.slice(j);break;default:T=G+C+T+g;break}return n(T)}return rt.toString=function(){return f+""},rt}function h(f,u){var p=c((f=Re(f),f.type="f",f)),x=Math.max(-8,Math.min(8,Math.floor(fe(u)/3)))*3,_=Math.pow(10,-x),b=sh[8+x/3];return function(w){return p(_*w)+b}}return{format:c,formatPrefix:h}}var Go,Vo,Xo;Cs({thousands:",",grouping:[3],currency:["$",""]});function Cs(t){return Go=lh(t),Vo=Go.format,Xo=Go.formatPrefix,Go}function bs(t){return Math.max(0,-fe(Math.abs(t)))}function Ts(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(fe(e)/3)))*3-fe(Math.abs(t)))}function vs(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,fe(e)-fe(t))+1}function ks(t,e,r,i){var o=qr(t,e,r),n;switch(i=Re(i??",f"),i.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return i.precision==null&&!isNaN(n=Ts(o,a))&&(i.precision=n),Xo(i,a)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(n=vs(o,Math.max(Math.abs(t),Math.abs(e))))&&(i.precision=n-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(n=bs(o))&&(i.precision=n-(i.type==="%")*2);break}}return Vo(i)}function Nx(t){var e=t.domain;return t.ticks=function(r){var i=e();return Fo(i[0],i[i.length-1],r??10)},t.tickFormat=function(r,i){var o=e();return ks(o[0],o[o.length-1],r??10,i)},t.nice=function(r){r==null&&(r=10);var i=e(),o=0,n=i.length-1,a=i[o],s=i[n],l,c,h=10;for(s0;){if(c=Ai(a,s,r),c===l)return i[o]=a,i[n]=s,e(i);if(c>0)a=Math.floor(a/c)*c,s=Math.ceil(s/c)*c;else if(c<0)a=Math.ceil(a*c)/c,s=Math.floor(s*c)/c;else break;l=c}return t},t}function Ss(){var t=$i();return t.copy=function(){return Yo(t,Ss())},Pe.apply(t,arguments),Nx(t)}var ws=new Date,Bs=new Date;function nt(t,e,r,i){function o(n){return t(n=arguments.length===0?new Date:new Date(+n)),n}return o.floor=n=>(t(n=new Date(+n)),n),o.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),o.round=n=>{let a=o(n),s=o.ceil(n);return n-a (e(n=new Date(+n),a==null?1:Math.floor(a)),n),o.range=(n,a,s)=>{let l=[];if(n=o.ceil(n),s=s==null?1:Math.floor(s),!(n0))return l;let c;do l.push(c=new Date(+n)),e(n,s),t(n);while(c nt(a=>{if(a>=a)for(;t(a),!n(a);)a.setTime(a-1)},(a,s)=>{if(a>=a)if(s<0)for(;++s<=0;)for(;e(a,-1),!n(a););else for(;--s>=0;)for(;e(a,1),!n(a););}),r&&(o.count=(n,a)=>(ws.setTime(+n),Bs.setTime(+a),t(ws),t(Bs),Math.floor(r(ws,Bs))),o.every=n=>(n=Math.floor(n),!isFinite(n)||!(n>0)?null:n>1?o.filter(i?a=>i(a)%n===0:a=>o.count(0,a)%n===0):o)),o}var dr=nt(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);dr.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?nt(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):dr);var ch=dr.range;var pe=nt(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),uh=pe.range;var Vr=nt(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),Px=Vr.range,Ko=nt(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),Rx=Ko.range;var Xr=nt(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),$x=Xr.range,Zo=nt(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),zx=Zo.range;var Se=nt(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),qx=Se.range,qi=nt(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),Wx=qi.range,Qo=nt(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),Ux=Qo.range;function xr(t){return nt(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}var we=xr(0),Kr=xr(1),fh=xr(2),ph=xr(3),$e=xr(4),dh=xr(5),mh=xr(6),gh=we.range,Hx=Kr.range,Yx=fh.range,jx=ph.range,Gx=$e.range,Vx=dh.range,Xx=mh.range;function yr(t){return nt(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var _r=yr(0),Zr=yr(1),xh=yr(2),yh=yr(3),ze=yr(4),_h=yr(5),Ch=yr(6),bh=_r.range,Kx=Zr.range,Zx=xh.range,Qx=yh.range,Jx=ze.range,ty=_h.range,ey=Ch.range;var Qr=nt(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),ry=Qr.range,Jo=nt(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),iy=Jo.range;var Vt=nt(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Vt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:nt(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});var oy=Vt.range,ie=nt(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());ie.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:nt(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});var ny=ie.range;function vh(t,e,r,i,o,n){let a=[[pe,1,1e3],[pe,5,5*1e3],[pe,15,15*1e3],[pe,30,30*1e3],[n,1,6e4],[n,5,5*6e4],[n,15,15*6e4],[n,30,30*6e4],[o,1,36e5],[o,3,3*36e5],[o,6,6*36e5],[o,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function s(c,h,f){let u=h b).right(a,u);if(p===a.length)return t.every(qr(c/31536e6,h/31536e6,f));if(p===0)return dr.every(Math.max(qr(c,h,f),1));let[x,_]=a[u/a[p-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(it=Ms(Wi(k.y,0,1)),X=it.getUTCDay(),it=X>4||X===0?Zr.ceil(it):Zr(it),it=qi.offset(it,(k.V-1)*7),k.y=it.getUTCFullYear(),k.m=it.getUTCMonth(),k.d=it.getUTCDate()+(k.w+6)%7):(it=Ls(Wi(k.y,0,1)),X=it.getDay(),it=X>4||X===0?Kr.ceil(it):Kr(it),it=Se.offset(it,(k.V-1)*7),k.y=it.getFullYear(),k.m=it.getMonth(),k.d=it.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),X="Z"in k?Ms(Wi(k.y,0,1)).getUTCDay():Ls(Wi(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(X+5)%7:k.w+k.U*7-(X+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,Ms(k)):Ls(k)}}function $(O,V,K,k){for(var Ft=0,it=V.length,X=K.length,P,Q;Ft =X)return-1;if(P=V.charCodeAt(Ft++),P===37){if(P=V.charAt(Ft++),Q=I[P in kh?V.charAt(Ft++):P],!Q||(k=Q(O,K,k))<0)return-1}else if(P!=K.charCodeAt(k++))return-1}return k}function et(O,V,K){var k=c.exec(V.slice(K));return k?(O.p=h.get(k[0].toLowerCase()),K+k[0].length):-1}function rt(O,V,K){var k=p.exec(V.slice(K));return k?(O.w=x.get(k[0].toLowerCase()),K+k[0].length):-1}function T(O,V,K){var k=f.exec(V.slice(K));return k?(O.w=u.get(k[0].toLowerCase()),K+k[0].length):-1}function C(O,V,K){var k=w.exec(V.slice(K));return k?(O.m=v.get(k[0].toLowerCase()),K+k[0].length):-1}function g(O,V,K){var k=_.exec(V.slice(K));return k?(O.m=b.get(k[0].toLowerCase()),K+k[0].length):-1}function B(O,V,K){return $(O,e,V,K)}function F(O,V,K){return $(O,r,V,K)}function N(O,V,K){return $(O,i,V,K)}function R(O){return a[O.getDay()]}function j(O){return n[O.getDay()]}function G(O){return l[O.getMonth()]}function Z(O){return s[O.getMonth()]}function at(O){return o[+(O.getHours()>=12)]}function Bt(O){return 1+~~(O.getMonth()/3)}function At(O){return a[O.getUTCDay()]}function Gt(O){return n[O.getUTCDay()]}function gt(O){return l[O.getUTCMonth()]}function Pt(O){return s[O.getUTCMonth()]}function ht(O){return o[+(O.getUTCHours()>=12)]}function It(O){return 1+~~(O.getUTCMonth()/3)}return{format:function(O){var V=A(O+="",L);return V.toString=function(){return O},V},parse:function(O){var V=y(O+="",!1);return V.toString=function(){return O},V},utcFormat:function(O){var V=A(O+="",E);return V.toString=function(){return O},V},utcParse:function(O){var V=y(O+="",!0);return V.toString=function(){return O},V}}}var kh={"-":"",_:" ",0:"0"},St=/^\s*\d+/,cy=/^%/,uy=/[\\^$*+?|[\]().{}]/g;function tt(t,e,r){var i=t<0?"-":"",o=(i?-t:t)+"",n=o.length;return i+(n [e.toLowerCase(),r]))}function fy(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.w=+i[0],r+i[0].length):-1}function py(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.u=+i[0],r+i[0].length):-1}function dy(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.U=+i[0],r+i[0].length):-1}function my(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.V=+i[0],r+i[0].length):-1}function gy(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.W=+i[0],r+i[0].length):-1}function Sh(t,e,r){var i=St.exec(e.slice(r,r+4));return i?(t.y=+i[0],r+i[0].length):-1}function wh(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),r+i[0].length):-1}function xy(t,e,r){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),r+i[0].length):-1}function yy(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.q=i[0]*3-3,r+i[0].length):-1}function _y(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.m=i[0]-1,r+i[0].length):-1}function Bh(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.d=+i[0],r+i[0].length):-1}function Cy(t,e,r){var i=St.exec(e.slice(r,r+3));return i?(t.m=0,t.d=+i[0],r+i[0].length):-1}function Ah(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.H=+i[0],r+i[0].length):-1}function by(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.M=+i[0],r+i[0].length):-1}function Ty(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.S=+i[0],r+i[0].length):-1}function vy(t,e,r){var i=St.exec(e.slice(r,r+3));return i?(t.L=+i[0],r+i[0].length):-1}function ky(t,e,r){var i=St.exec(e.slice(r,r+6));return i?(t.L=Math.floor(i[0]/1e3),r+i[0].length):-1}function Sy(t,e,r){var i=cy.exec(e.slice(r,r+1));return i?r+i[0].length:-1}function wy(t,e,r){var i=St.exec(e.slice(r));return i?(t.Q=+i[0],r+i[0].length):-1}function By(t,e,r){var i=St.exec(e.slice(r));return i?(t.s=+i[0],r+i[0].length):-1}function Fh(t,e){return tt(t.getDate(),e,2)}function Ay(t,e){return tt(t.getHours(),e,2)}function Fy(t,e){return tt(t.getHours()%12||12,e,2)}function Ly(t,e){return tt(1+Se.count(Vt(t),t),e,3)}function Ih(t,e){return tt(t.getMilliseconds(),e,3)}function My(t,e){return Ih(t,e)+"000"}function Ey(t,e){return tt(t.getMonth()+1,e,2)}function Oy(t,e){return tt(t.getMinutes(),e,2)}function Iy(t,e){return tt(t.getSeconds(),e,2)}function Dy(t){var e=t.getDay();return e===0?7:e}function Ny(t,e){return tt(we.count(Vt(t)-1,t),e,2)}function Dh(t){var e=t.getDay();return e>=4||e===0?$e(t):$e.ceil(t)}function Py(t,e){return t=Dh(t),tt($e.count(Vt(t),t)+(Vt(t).getDay()===4),e,2)}function Ry(t){return t.getDay()}function $y(t,e){return tt(Kr.count(Vt(t)-1,t),e,2)}function zy(t,e){return tt(t.getFullYear()%100,e,2)}function qy(t,e){return t=Dh(t),tt(t.getFullYear()%100,e,2)}function Wy(t,e){return tt(t.getFullYear()%1e4,e,4)}function Uy(t,e){var r=t.getDay();return t=r>=4||r===0?$e(t):$e.ceil(t),tt(t.getFullYear()%1e4,e,4)}function Hy(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+tt(e/60|0,"0",2)+tt(e%60,"0",2)}function Lh(t,e){return tt(t.getUTCDate(),e,2)}function Yy(t,e){return tt(t.getUTCHours(),e,2)}function jy(t,e){return tt(t.getUTCHours()%12||12,e,2)}function Gy(t,e){return tt(1+qi.count(ie(t),t),e,3)}function Nh(t,e){return tt(t.getUTCMilliseconds(),e,3)}function Vy(t,e){return Nh(t,e)+"000"}function Xy(t,e){return tt(t.getUTCMonth()+1,e,2)}function Ky(t,e){return tt(t.getUTCMinutes(),e,2)}function Zy(t,e){return tt(t.getUTCSeconds(),e,2)}function Qy(t){var e=t.getUTCDay();return e===0?7:e}function Jy(t,e){return tt(_r.count(ie(t)-1,t),e,2)}function Ph(t){var e=t.getUTCDay();return e>=4||e===0?ze(t):ze.ceil(t)}function t_(t,e){return t=Ph(t),tt(ze.count(ie(t),t)+(ie(t).getUTCDay()===4),e,2)}function e_(t){return t.getUTCDay()}function r_(t,e){return tt(Zr.count(ie(t)-1,t),e,2)}function i_(t,e){return tt(t.getUTCFullYear()%100,e,2)}function o_(t,e){return t=Ph(t),tt(t.getUTCFullYear()%100,e,2)}function n_(t,e){return tt(t.getUTCFullYear()%1e4,e,4)}function a_(t,e){var r=t.getUTCDay();return t=r>=4||r===0?ze(t):ze.ceil(t),tt(t.getUTCFullYear()%1e4,e,4)}function s_(){return"+0000"}function Mh(){return"%"}function Eh(t){return+t}function Oh(t){return Math.floor(+t/1e3)}var Jr,tn,Rh,$h,zh;Os({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Os(t){return Jr=Es(t),tn=Jr.format,Rh=Jr.parse,$h=Jr.utcFormat,zh=Jr.utcParse,Jr}function Is(t,e){t=t.slice();var r=0,i=t.length-1,o=t[r],n=t[i],a;return n 1?0:t<-1?ti:Math.acos(t)}function Ns(t){return t>=1?Yi:t<=-1?-Yi:Math.asin(t)}var Ps=Math.PI,Rs=2*Ps,br=1e-6,h_=Rs-br;function jh(t){this._+=t[0];for(let e=1,r=t.length;e =0))throw new Error(`invalid digits: ${t}`);if(e>15)return jh;let r=10**e;return function(i){this._+=i[0];for(let o=1,n=i.length;o br)if(!(Math.abs(f*l-c*h)>br)||!n)this._append`L${this._x1=e},${this._y1=r}`;else{let p=i-a,x=o-s,_=l*l+c*c,b=p*p+x*x,w=Math.sqrt(_),v=Math.sqrt(u),L=n*Math.tan((Ps-Math.acos((_+u-b)/(2*w*v)))/2),E=L/v,I=L/w;Math.abs(E-1)>br&&this._append`L${e+E*h},${r+E*f}`,this._append`A${n},${n},0,0,${+(f*p>h*x)},${this._x1=e+I*l},${this._y1=r+I*c}`}}arc(e,r,i,o,n,a){if(e=+e,r=+r,i=+i,a=!!a,i<0)throw new Error(`negative radius: ${i}`);let s=i*Math.cos(o),l=i*Math.sin(o),c=e+s,h=r+l,f=1^a,u=a?o-n:n-o;this._x1===null?this._append`M${c},${h}`:(Math.abs(this._x1-c)>br||Math.abs(this._y1-h)>br)&&this._append`L${c},${h}`,i&&(u<0&&(u=u%Rs+Rs),u>h_?this._append`A${i},${i},0,1,${f},${e-s},${r-l}A${i},${i},0,1,${f},${this._x1=c},${this._y1=h}`:u>br&&this._append`A${i},${i},0,${+(u>=Ps)},${f},${this._x1=e+i*Math.cos(n)},${this._y1=r+i*Math.sin(n)}`)}rect(e,r,i,o){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${i=+i}v${+o}h${-i}Z`}toString(){return this._}};function Gh(){return new Tr}Gh.prototype=Tr.prototype;function rn(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);e=i}return t},()=>new Tr(e)}function p_(t){return t.innerRadius}function d_(t){return t.outerRadius}function m_(t){return t.startAngle}function g_(t){return t.endAngle}function x_(t){return t&&t.padAngle}function y_(t,e,r,i,o,n,a,s){var l=r-t,c=i-e,h=a-o,f=s-n,u=f*l-h*c;if(!(u*u B*B+F*F&&($=rt,et=T),{cx:$,cy:et,x01:-h,y01:-f,x11:$*(o/I-1),y11:et*(o/I-1)}}function __(){var t=p_,e=d_,r=ct(0),i=null,o=m_,n=g_,a=x_,s=null,l=rn(c);function c(){var h,f,u=+t.apply(this,arguments),p=+e.apply(this,arguments),x=o.apply(this,arguments)-Yi,_=n.apply(this,arguments)-Yi,b=Ds(_-x),w=_>x;if(s||(s=h=l()),pwt))s.moveTo(0,0);else if(b>ei-wt)s.moveTo(p*qe(x),p*oe(x)),s.arc(0,0,p,x,_,!w),u>wt&&(s.moveTo(u*qe(_),u*oe(_)),s.arc(0,0,u,_,x,w));else{var v=x,L=_,E=x,I=_,A=b,y=b,$=a.apply(this,arguments)/2,et=$>wt&&(i?+i.apply(this,arguments):Cr(u*u+p*p)),rt=en(Ds(p-u)/2,+r.apply(this,arguments)),T=rt,C=rt,g,B;if(et>wt){var F=Ns(et/u*oe($)),N=Ns(et/p*oe($));(A-=F*2)>wt?(F*=w?1:-1,E+=F,I-=F):(A=0,E=I=(x+_)/2),(y-=N*2)>wt?(N*=w?1:-1,v+=N,L-=N):(y=0,v=L=(x+_)/2)}var R=p*qe(v),j=p*oe(v),G=u*qe(I),Z=u*oe(I);if(rt>wt){var at=p*qe(L),Bt=p*oe(L),At=u*qe(E),Gt=u*oe(E),gt;if(b wt?C>wt?(g=on(At,Gt,R,j,p,C,w),B=on(at,Bt,G,Z,p,C,w),s.moveTo(g.cx+g.x01,g.cy+g.y01),C