diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..e382387
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,40 @@
+# 使用官方 Ubuntu 基础镜像
+FROM ubuntu:22.04
+ 
+# 安装 Node.js 和 npm
+RUN apt-get update && \
+    apt-get install -y curl gnupg && \
+    curl -sL https://deb.nodesource.com/setup_20.x | bash - && \
+    apt-get install -y nodejs
+ 
+# 安装 Nginx
+RUN apt-get install -y nginx && \
+    apt-get clean && \
+    rm -rf /var/lib/apt/lists/*
+ 
+# 设置工作目录
+WORKDIR /app
+ 
+# 复制应用程序文件
+COPY . .
+ 
+# 安装应用程序依赖
+RUN npm install
+ 
+# 构建应用程序
+RUN npm run build
+ 
+# 将构建好的 React 应用复制到 Nginx 的目录下
+RUN cp -r build/* /var/www/html/
+ 
+# 复制 Nginx 配置文件到容器
+COPY ./nginx.conf /etc/nginx/sites-available/default
+ 
+# 映射出来的 Nginx 配置目录
+VOLUME /etc/nginx/sites-enabled
+ 
+# 暴露 80 端口
+EXPOSE 80
+ 
+# 启动 Nginx 服务器
+CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
diff --git a/build/asset-manifest.json b/build/asset-manifest.json
new file mode 100644
index 0000000..826fab1
--- /dev/null
+++ b/build/asset-manifest.json
@@ -0,0 +1,15 @@
+{
+  "files": {
+    "main.css": "/static/css/main.aef1c2f9.css",
+    "main.js": "/static/js/main.dd76cdc0.js",
+    "static/js/845.116b9008.chunk.js": "/static/js/845.116b9008.chunk.js",
+    "index.html": "/index.html",
+    "main.aef1c2f9.css.map": "/static/css/main.aef1c2f9.css.map",
+    "main.dd76cdc0.js.map": "/static/js/main.dd76cdc0.js.map",
+    "845.116b9008.chunk.js.map": "/static/js/845.116b9008.chunk.js.map"
+  },
+  "entrypoints": [
+    "static/css/main.aef1c2f9.css",
+    "static/js/main.dd76cdc0.js"
+  ]
+}
\ No newline at end of file
diff --git a/build/favicon.ico b/build/favicon.ico
new file mode 100644
index 0000000..a11777c
--- /dev/null
+++ b/build/favicon.ico
Binary files differ
diff --git a/build/index.html b/build/index.html
new file mode 100644
index 0000000..a148054
--- /dev/null
+++ b/build/index.html
@@ -0,0 +1 @@
+<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.dd76cdc0.js"></script><link href="/static/css/main.aef1c2f9.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
\ No newline at end of file
diff --git a/build/logo192.png b/build/logo192.png
new file mode 100644
index 0000000..fc44b0a
--- /dev/null
+++ b/build/logo192.png
Binary files differ
diff --git a/build/logo512.png b/build/logo512.png
new file mode 100644
index 0000000..a4e47a6
--- /dev/null
+++ b/build/logo512.png
Binary files differ
diff --git a/build/manifest.json b/build/manifest.json
new file mode 100644
index 0000000..080d6c7
--- /dev/null
+++ b/build/manifest.json
@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}
diff --git a/build/robots.txt b/build/robots.txt
new file mode 100644
index 0000000..e9e57dc
--- /dev/null
+++ b/build/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/build/static/css/main.aef1c2f9.css b/build/static/css/main.aef1c2f9.css
new file mode 100644
index 0000000..0c82900
--- /dev/null
+++ b/build/static/css/main.aef1c2f9.css
@@ -0,0 +1,2 @@
+@charset "UTF-8";body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.dashboard-container{background-color:#f5f5f5;display:flex;flex-direction:column;height:100vh}.top-bar{align-items:center;background-color:#fff;box-shadow:0 2px 4px #0000001a;display:flex;justify-content:space-between;padding:10px 20px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.search-container{flex-grow:1;margin:0 auto;max-width:600px}.search-input{border:1px solid #ddd;border-radius:20px 0 0 20px;outline:none}.search-button,.search-input{font-size:16px;padding:8px 15px}.search-button{background-color:#007bff;border:none;border-radius:0 20px 20px 0;color:#fff;cursor:pointer}.search-button:hover{background-color:#0056b3}.user-info{align-items:center;display:flex;gap:10px}.user-avatar{border-radius:50%;height:40px;object-fit:cover;width:40px}.username{font-weight:700}.logout-button{background-color:#f8f9fa;border:1px solid #ddd;border-radius:4px;cursor:pointer;margin-left:10px;padding:5px 10px}.logout-button:hover{background-color:#e9ecef}.nav-tabs{background-color:#fff;border-bottom:1px solid #ddd;display:flex;padding:0 20px}.tab-button{color:#666;padding:12px 20px}.tab-button:hover{color:#007bff}.tab-button.active{border-bottom-color:#007bff;color:#007bff;font-weight:700}.content-area{background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;flex-grow:1;margin:20px;padding:20px}.error,.loading{font-size:18px;padding:20px;text-align:center}.error{color:#dc3545}.carousel-container{border-radius:4px;height:200px;margin-bottom:20px;overflow:hidden;position:relative;width:100%}.carousel-slide{height:100%;opacity:0;position:absolute;transition:opacity 1s ease-in-out;width:100%}.carousel-slide.active{opacity:1}.carousel-image{font-size:24px;font-weight:700;height:100%;width:100%}.gray-bg{background-color:#666}.carousel-dots{bottom:15px;display:flex;gap:10px;justify-content:center;left:0;position:absolute;right:0}.dot{background-color:#ffffff80;border-radius:50%;cursor:pointer;height:12px;width:12px}.dot.active{background-color:#fff}.announcement-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.announcement-card{background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;padding:15px;transition:transform .2s,box-shadow .2s}.announcement-card:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-2px)}.announcement-card h3{border-bottom:1px solid #eee;color:#007bff;margin-top:0;padding-bottom:8px}.announcement-card p{color:#666;line-height:1.5;margin-bottom:0}.upload-header{display:flex;justify-content:flex-start;margin-bottom:20px}.upload-btn{background:#1890ff;font-size:16px;transition:all .3s}.upload-btn:hover{background:#40a9ff}.upload-modal{background:#fff;border-radius:8px;max-width:90%;padding:25px;position:relative;width:500px}.close-btn{background:none;border:none;cursor:pointer;font-size:20px;position:absolute;right:15px;top:15px}.form-group input[type=text],.form-group select,.form-group textarea{border:1px solid #d9d9d9;border-radius:4px;padding:8px;width:100%}.form-group textarea{min-height:80px}.form-actions{margin-top:20px}.cancel-btn{padding:8px 15px}.cancel-btn:hover{background:#e6e6e6}.filter-section{background:#f9f9f9;border-radius:8px;margin-bottom:20px}.filter-group{margin-bottom:15px}.filter-group h4{color:#666;font-size:15px;margin:0 0 8px}.filter-btn{background:#fff;border:1px solid #ddd;border-radius:4px;cursor:pointer;margin-bottom:8px;margin-right:8px;padding:6px 12px;transition:all .2s}.filter-btn:hover{border-color:#1890ff;color:#1890ff}.filter-btn.active{background:#1890ff;border-color:#1890ff;color:#fff}.confirm-btn{background:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 20px;transition:opacity .3s}.confirm-btn:hover{background:#007bff}.confirm-btn:disabled{cursor:not-allowed;opacity:.5}.resource-list{display:flex;flex-direction:column;gap:15px}.resource-item{align-items:center;background-color:#fff;border-radius:4px;box-shadow:0 1px 3px #0000001a;display:flex;padding:15px;transition:transform .2s,box-shadow .2s}.resource-item:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-2px)}.resource-poster{margin-right:15px}.poster-image{align-items:center;background-color:#666;border-radius:4px;color:#fff;display:flex;font-size:24px;font-weight:700;height:80px;justify-content:center;width:60px}.resource-info{flex-grow:1}.resource-title{font-size:16px;font-weight:700;margin:0 0 5px}.resource-meta{color:#666;font-size:14px;margin:0}.resource-stats{align-items:flex-end;display:flex;flex-direction:column;margin-right:20px;min-width:150px}.stat{color:#666;font-size:13px;margin-bottom:5px}.download-btn{background-color:#28a745;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 15px;transition:background-color .2s}.download-btn:hover{background-color:#218838}.post-header{margin-bottom:20px;text-align:right}.create-post-btn{background-color:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:8px 16px;transition:background-color .3s}.create-post-btn:hover{background-color:#40a9ff}.post-modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.post-modal{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;max-width:90%;padding:24px;position:relative;width:500px}.post-modal h3{color:#333;font-size:18px;margin-bottom:20px;margin-top:0}.modal-close-btn{background:none;border:none;color:#999;cursor:pointer;font-size:20px;position:absolute;right:16px;top:16px}.modal-close-btn:hover{color:#666}.form-group{margin-bottom:16px}.form-group label{color:#333;font-weight:500;margin-bottom:8px}.form-group input[type=text],.form-group textarea{border:1px solid #d9d9d9;border-radius:4px;font-size:14px;padding:8px 12px;width:100%}.form-group textarea{min-height:120px;resize:vertical}.upload-image-btn{align-items:center;display:flex}.upload-image-btn label{background-color:#f5f5f5;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;margin-right:10px;padding:8px 16px;transition:all .3s}.upload-image-btn label:hover{border-color:#1890ff;color:#1890ff}.image-name{color:#666;font-size:14px}.form-actions{justify-content:flex-end;margin-top:24px}.cancel-btn{background-color:#f5f5f5;border:none;border-radius:4px;color:#333;cursor:pointer;margin-right:10px;padding:8px 16px;transition:background-color .3s}.cancel-btn:hover{background-color:#e6e6e6}.submit-btn{background-color:#1890ff;border-radius:4px;cursor:pointer;padding:8px 16px;transition:background-color .3s}.submit-btn:hover{background-color:#40a9ff}.pagination{gap:5px;margin:20px 0}.pagination button{background:#fff;border:1px solid #ddd;padding:5px 10px}.pagination button.active{background:#1890ff;border-color:#1890ff;color:#fff}.pagination button:disabled{opacity:.5}.filter-section{background:#fff;box-shadow:0 2px 5px #0000001a;padding:15px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.admin-center-btn{background-color:#ff5722;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;margin-right:10px;padding:5px 10px}.admin-center-btn:hover{background-color:#e64a19}.section-search-container{display:flex;gap:10px}.section-search-input{border-radius:4px;flex:1 1;font-size:1rem;padding:10px 15px}.section-search-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 20px;transition:background-color .3s}.section-search-button:hover{background-color:#0056b3}.share-top-actions{align-items:center;display:flex;gap:20px;justify-content:space-between;margin-bottom:20px}.upload-btn{background-color:#28a745;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 20px;transition:background-color .3s;white-space:nowrap}.upload-btn:hover{background-color:#218838}.modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.download-modal{background:#fff;border-radius:8px;max-width:90%;padding:20px;position:relative;width:500px}.download-modal .close-btn{background:none;border:none;cursor:pointer;font-size:20px;position:absolute;right:10px;top:10px}.download-modal .form-group{margin-bottom:15px}.download-modal .form-group label{display:block;margin-bottom:5px}.download-modal .form-group input{border:1px solid #ddd;border-radius:4px;padding:8px;width:100%}.progress-container{background:#f0f0f0;border-radius:4px;height:20px;margin:15px 0;overflow:hidden}.progress-bar{background:#1890ff;color:#fff;font-size:12px;height:100%;line-height:20px;text-align:center;transition:width .3s}.modal-actions{margin-top:20px}.modal-actions button:first-child{background:#f5f5f5;border:1px solid #d9d9d9}.modal-actions button:last-child{background:#1890ff;border:none;color:#fff}.modal-actions button:disabled{background:#d9d9d9;cursor:not-allowed;opacity:.7}.resource-actions{display:flex;gap:10px;margin-left:auto}.delete-btn{border:none;border-radius:4px;cursor:pointer;padding:8px 15px;transition:background-color .3s}.delete-btn:disabled{background-color:#d9d9d9;cursor:not-allowed}.carousel-image{align-items:center;background:linear-gradient(90deg,#f7b733,#fc4a1a);border-radius:10px;color:#fff;display:flex;flex-direction:column;font-size:18px;height:180px;justify-content:center;padding:1rem;transition:all .5s ease-in-out}.carousel-image h3{font-size:22px;margin:0}.carousel-image p{margin:4px 0}.platform-name{align-items:center;display:flex;flex:1 1;padding-left:20px}.platform-name h2{color:#333;font-size:24px;font-weight:700;margin:0}.section-search-container{margin-bottom:20px;padding:10px 20px}.section-search-input{border:1px solid #ddd;border-radius:20px;font-size:14px;outline:none;padding:8px 15px;width:100%}.section-search-input:focus{border-color:#1890ff}.no-results{color:#888;font-size:16px;padding:20px;text-align:center}.reset-button{background-color:#f0f0f0;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:8px 15px;transition:background-color .3s}.reset-button:hover{background-color:#e0e0e0}.personal-container{margin:0 auto;max-width:800px;padding:20px}.profile-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.profile-header{align-items:center;display:flex;margin-bottom:20px}.profile-avatar{border-radius:50%;height:80px;margin-right:20px;object-fit:cover;width:80px}.profile-info{flex-grow:1}.username{font-size:24px;margin:0 0 5px}.user-meta{color:#666;display:flex;font-size:14px;gap:15px}.stats-grid{grid-gap:15px;display:grid;gap:15px;grid-template-columns:repeat(4,1fr)}.stat-item{background:#f5f5f5;border-radius:6px;padding:15px;text-align:center}.stat-label{color:#666;font-size:14px;margin-bottom:5px}.stat-value{font-size:18px;font-weight:700}.quota-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.quota-card h3{margin-bottom:15px;margin-top:0}.quota-info{display:flex;justify-content:space-between;margin-bottom:10px}.quota-used{color:#1890ff}.quota-remaining{color:#52c41a}.progress-bar{height:10px;margin-bottom:10px}.progress-bar,.progress-fill{border-radius:5px}.quota-total{color:#666;font-size:14px;text-align:right}.action-cards{grid-gap:15px;display:grid;gap:15px;grid-template-columns:repeat(2,1fr)}.action-card{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;cursor:pointer;padding:20px;transition:transform .2s ease}.action-card:hover{box-shadow:0 4px 8px #0000001a;transform:translateY(-3px)}.action-card h3{color:#1890ff;margin-top:0}.action-card p{color:#666;margin-bottom:0}.subpage-container{border-top:1px solid #f0f0f0;margin-top:20px;padding-top:20px}.progress-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;margin-bottom:20px;padding:20px}.download-task{margin-bottom:15px}.task-info{display:flex;justify-content:space-between;margin-bottom:5px}.task-id{color:#666;font-size:14px}.task-progress{color:#1890ff;font-size:14px;font-weight:700}.progress-bar{background:#f0f0f0;border-radius:4px;height:8px;overflow:hidden}.progress-fill{background:#1890ff;border-radius:4px;height:100%;transition:width .3s ease}.user-meta span{color:#666;margin-right:15px}.user-meta span:last-child{color:#ff9800;font-weight:700}.auth-container{align-items:center;background-color:#f5f5f5;display:flex;flex-direction:column;justify-content:center;min-height:100vh;padding:20px}.auth-title{color:#333;font-size:2.5rem;margin-bottom:2rem;text-align:center}.auth-form-wrapper{background:#fff;border-radius:8px;box-shadow:0 4px 6px #0000001a;max-width:400px;padding:2rem;width:100%}.auth-form{display:flex;flex-direction:column;gap:1rem}.auth-form h2{color:#333;margin-bottom:1.5rem;text-align:center}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group input{font-size:1rem;height:42px;padding:.8rem}.form-group input:focus{border-color:#007bff;outline:none}.auth-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:1rem;height:42px;padding:.8rem;transition:background-color .3s}.auth-button:hover{background-color:#0056b3}.auth-button:disabled{background-color:#ccc;cursor:not-allowed}.auth-switch{align-items:center;color:#666;display:flex;font-size:.9rem;gap:.5rem;justify-content:center;margin-top:1rem}.switch-button{background:none;border:none;color:#007bff;cursor:pointer;font-size:.9rem;padding:0;text-decoration:underline}.switch-button:hover{color:#0056b3}.error-message{background-color:#f8d7da;border-radius:4px;color:#dc3545;margin-bottom:1rem;padding:.5rem}.announcement-container{margin:0 auto;max-width:800px;padding:20px}.announcement-detail{background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;padding:25px}.announcement-header{border-bottom:1px solid #f0f0f0;margin-bottom:20px;padding-bottom:15px}.announcement-header h1{font-size:24px;margin:0 0 10px}.announcement-meta{align-items:center;color:#666;display:flex;font-size:14px;gap:15px}.category-badge{background:#e6f7ff;border-radius:4px;color:#1890ff;font-size:12px;padding:2px 8px}.announcement-content{font-size:15px;line-height:1.8}.announcement-content p{margin:0 0 16px}.error-message{color:#ff4d4f;font-size:16px;padding:50px;text-align:center}.torrent-detail-container{color:#333;margin:0 auto;max-width:1000px;padding:20px}.back-button{color:#3498db;padding:5px 10px}.back-button:hover{text-decoration:underline}.torrent-main{display:flex;gap:30px;margin-bottom:40px}.torrent-cover{flex:0 0 300px}.cover-placeholder{align-items:center;background-color:#eee;border-radius:5px;color:#999;display:flex;font-size:72px;height:450px;justify-content:center;width:100%}.torrent-info{flex:1 1}.torrent-title{color:#222;font-size:28px;margin-bottom:20px}.uploader-info{align-items:center;display:flex;gap:15px;margin-bottom:20px}.uploader-avatar{align-items:center;background-color:#3498db;border-radius:50%;color:#fff;display:flex;font-weight:700;height:40px;justify-content:center;width:40px}.uploader-details{flex:1 1}.uploader-name{font-weight:700}.upload-time{color:#777;font-size:14px}.torrent-meta{margin-bottom:20px}.torrent-meta p{margin:5px 0}.torrent-description{line-height:1.6;margin-bottom:30px}.interaction-buttons{display:flex;gap:15px}.interaction-buttons button{border:none;border-radius:4px;cursor:pointer;font-size:14px;padding:8px 15px;transition:background-color .2s}.like-button{background-color:#f0f0f0}.like-button:hover{background-color:#e0e0e0}.download-button{background-color:#3498db;color:#fff}.download-button:hover{background-color:#2980b9}.comments-section{margin-top:40px}.comments-section h2{border-bottom:1px solid #eee;font-size:22px;margin-bottom:20px;padding-bottom:10px}.comment-form{margin-bottom:30px}.comment-form button{background-color:#3498db;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 15px}.comment-form button:hover{background-color:#2980b9}.comment-container{margin-bottom:15px}.comment-item{border:1px solid #eaeaea;gap:15px;padding:12px}.comment-container.is-reply{margin-left:40px;position:relative}.comment-container.is-reply:before{background:#ddd;content:"";height:1px;left:-20px;position:absolute;top:20px;width:15px}.comment-avatar{align-items:center;background-color:#e74c3c;color:#fff;display:flex;flex:0 0 40px;font-weight:700;justify-content:center}.comment-user{font-weight:700;margin-right:10px}.reply-to{color:#666;font-size:14px;margin:0 5px}.comment-time{color:#777;font-size:14px}.comment-actions{gap:15px}.comment-actions button{background:none;border:none;color:#3498db;cursor:pointer;font-size:14px;padding:0}.comment-actions button:hover{text-decoration:underline}.replies-container{margin-top:15px}.comment-container.is-reply .comment-item{background:#f9f9f9}.reply-form{margin-top:15px}.reply-form textarea{margin-bottom:10px}.reply-actions{display:flex;gap:10px;justify-content:flex-end}.reply-actions button{border:none;border-radius:3px;cursor:pointer;font-size:13px;padding:5px 10px}.reply-actions button[type=button]{background-color:#f0f0f0}.reply-actions button[type=submit]{background-color:#3498db;color:#fff}.error,.loading{font-size:18px;padding:50px;text-align:center}.error{color:#e74c3c}.reply-form{background:#f5f5f5;border-radius:4px;padding:10px}.reply-form-buttons{margin-top:8px}.reply-form-buttons button{border:none;padding:5px 10px}.comment-list{border-top:1px solid #eee;padding-top:20px}.reply-form{background:#f9f9f9;border:1px solid #eee;border-radius:6px;margin-bottom:15px;margin-left:50px;padding:12px}.reply-form.nested-reply{margin-left:80px}.reply-form textarea{font-family:inherit;font-size:14px;padding:10px}.reply-form-buttons{display:flex;gap:10px;margin-top:10px}.reply-form-buttons button{border-radius:4px;cursor:pointer;font-size:13px;padding:6px 12px;transition:all .2s}.reply-form-buttons button[type=submit]{background-color:#1890ff;border:none;color:#fff}.reply-form-buttons button[type=submit]:hover{background-color:#40a9ff}.reply-form-buttons .cancel-reply{background-color:#f5f5f5;border:1px solid #d9d9d9;color:#666}.reply-form-buttons .cancel-reply:hover{background-color:#e8e8e8}.reply-modal-overlay{background-color:#00000080}.reply-modal{box-shadow:0 2px 10px #0000001a;max-width:500px;width:90%}.modal-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:15px}.modal-header h3{font-size:18px;margin:0}.close-modal{background:none;border:none;color:#666;cursor:pointer;font-size:24px}.reply-modal textarea{font-size:14px;min-height:120px;padding:12px}.modal-actions button{border-radius:4px;cursor:pointer;font-size:14px;padding:8px 16px}.cancel-btn{background:#f5f5f5;border:1px solid #d9d9d9;color:#666}.cancel-btn:hover{background:#e8e8e8}.submit-btn{background:#1890ff;border:none;color:#fff}.submit-btn:hover{background:#40a9ff}.request-detail-container{margin:0 auto;max-width:800px;padding:20px}.request-post{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.favorite-button,.like-button{background:#f5f5f5;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:5px 15px}.form-actions{display:flex;gap:10px}.submit-comment,.submit-torrent{border:none;border-radius:4px;cursor:pointer;padding:8px 16px}.submit-comment{background:#1890ff;color:#fff}.submit-torrent{background:#52c41a;color:#fff}.torrent-comment{align-items:center;background:#f0f8ff;border-radius:4px;display:flex;margin-bottom:8px;padding:8px}.torrent-title{color:#1890ff;flex-grow:1}.torrent-size{color:#666;font-size:14px;margin:0 15px}.download-torrent{background:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:5px 10px}.comment-like{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:0}.help-detail-container{margin:0 auto;max-width:800px;padding:20px}.back-button{background:none;border:none;color:#1890ff;cursor:pointer;font-size:16px;margin-bottom:20px;padding:5px 0}.help-post{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:20px;padding:20px}.help-post.solved{border-left:4px solid #52c41a}.post-header{align-items:center;display:flex;margin-bottom:15px;position:relative}.post-avatar{border-radius:50%;height:40px;margin-right:10px;width:40px}.post-meta{display:flex;flex-direction:column}.post-author{font-weight:700}.post-date{color:#888;font-size:14px}.solved-badge{background:#52c41a;border-radius:4px;color:#fff;font-size:12px;padding:2px 8px;position:absolute;right:0;top:0}.post-title{font-size:20px;margin:0 0 15px}.post-content{line-height:1.6;margin-bottom:15px}.post-actions{display:flex;gap:15px}.favorite-button,.like-button,.solve-button{background:#f5f5f5;border:1px solid #ddd;border-radius:4px;cursor:pointer;padding:5px 15px}.like-button.liked{background:#e6f7ff;border-color:#91d5ff;color:#1890ff}.favorite-button.favorited{background:#fff7e6;border-color:#ffd591;color:#fa8c16}.solve-button.solved{background:#f6ffed;border-color:#b7eb8f;color:#52c41a}.comments-section{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:20px}.comment-form{margin-bottom:20px}.comment-form textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:10px;min-height:80px;padding:10px;resize:vertical;width:100%}.image-upload,.upload-button{margin-bottom:10px}.upload-button{background:#f5f5f5;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;padding:8px 16px}.image-preview{display:flex;flex-wrap:wrap;gap:10px}.preview-item{height:100px;position:relative;width:100px}.preview-item img{border-radius:4px;height:100%;object-fit:cover;width:100%}.remove-image{align-items:center;background:#ff4d4f;border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:12px;height:20px;justify-content:center;position:absolute;right:-8px;top:-8px;width:20px}.comment-list{margin-top:20px}.comment-item{border-bottom:1px solid #f0f0f0;padding:15px 0}.comment-item:last-child{border-bottom:none}.comment-avatar{flex-shrink:0}.comment-content{flex-grow:1}.comment-header{justify-content:space-between}.comment-date{color:#888;font-size:14px}.comment-text{line-height:1.6;margin-bottom:8px}.comment-images{display:flex;gap:10px;margin-bottom:10px}.comment-image{max-height:150px;max-width:200px}.reply-form{display:flex;gap:10px}.reply-form textarea{flex-grow:1;min-height:40px}.submit-reply{align-self:flex-end;background:#f5f5f5;border:1px solid #d9d9d9;margin-bottom:5px;padding:0 15px}.reply-list{border-left:2px solid #f0f0f0}.reply-item,.reply-list{margin-top:10px}.reply-avatar{height:30px;width:30px}.reply-content{flex-grow:1}.reply-header{gap:10px}.reply-date{color:#888}.reply-text{line-height:1.5}.comment-item{background:#fff;border-radius:8px;box-shadow:0 1px 3px #0000001a;display:flex;margin-bottom:20px;padding:15px}.comment-avatar{border-radius:50%;height:40px;margin-right:15px;object-fit:cover;width:40px}.comment-content{flex:1 1}.comment-header{align-items:center;display:flex;margin-bottom:8px}.comment-author{color:#333;font-weight:700;margin-right:10px}.comment-date{color:#999;font-size:12px}.comment-text{color:#333;line-height:1.5;margin-bottom:10px}.comment-actions{margin-top:10px}.comment-actions,.like-button{align-items:center;display:flex}.like-button{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:4px 8px}.like-button.liked{color:#1877f2}.like-button:hover{text-decoration:underline}.reply-controls{margin:10px 0}.toggle-replies-btn{background:none;border:none;color:#666;cursor:pointer;font-size:14px;padding:4px 8px}.toggle-replies-btn:hover{color:#333;text-decoration:underline}.toggle-replies-btn:disabled{color:#ccc;cursor:not-allowed}.reply-form{margin-top:10px;width:100%}.reply-form textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:8px;min-height:60px;padding:8px;resize:vertical;width:100%}.submit-reply{background-color:#f0f2f5;border:none;border-radius:4px;color:#333;cursor:pointer;padding:6px 12px}.submit-reply:hover{background-color:#e4e6eb}.reply-list{border-left:2px solid #eee;margin-left:55px;margin-top:15px;padding-left:15px}.reply-item{background:#f9f9f9;border-radius:6px;display:flex;margin-bottom:15px;padding:12px}.reply-avatar{border-radius:50%;height:32px;margin-right:10px;object-fit:cover;width:32px}.reply-content{flex:1 1}.reply-header{align-items:center;display:flex;margin-bottom:5px}.reply-author{color:#333;font-size:14px;font-weight:700;margin-right:8px}.reply-date{color:#999;font-size:12px}.reply-text{color:#333;font-size:14px;line-height:1.4;margin-bottom:5px}.reply-actions{margin-top:5px}.reply-modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.reply-modal{background:#fff;border-radius:8px;max-width:90%;padding:20px;width:500px}.reply-modal h3{margin-bottom:15px;margin-top:0}.reply-modal textarea{border:1px solid #ddd;border-radius:4px;margin-bottom:15px;min-height:100px;padding:10px;resize:vertical;width:100%}.modal-actions{display:flex;gap:10px;justify-content:flex-end}.cancel-button{background:#f5f5f5;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;padding:8px 16px}.submit-button{background:#1890ff;padding:8px 16px}.post-image-container{margin:10px 0;max-width:500px;width:100%}.post-image{border-radius:4px;height:auto;max-height:400px;object-fit:contain;width:100%}.comment-image-container{margin:10px 0;max-width:500px;width:100%}.comment-image{border-radius:4px;height:auto;max-height:400px;object-fit:contain;width:100%}.uploads-table{border-collapse:collapse;margin-top:20px;width:100%}.uploads-table td,.uploads-table th{border-bottom:1px solid #e0e0e0;padding:12px 15px;text-align:left}.uploads-table th{background-color:#f5f5f5;font-weight:600}.list-item:hover{background-color:#f9f9f9}.action-btn{border:none;border-radius:4px;cursor:pointer;font-size:14px;padding:6px 12px;transition:background-color .2s}.delete-btn{background-color:#ff4d4f;color:#fff}.delete-btn:hover{background-color:#ff7875}.pagination{gap:15px}.pagination button{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;padding:6px 12px}.pagination button:disabled{color:#d9d9d9;cursor:not-allowed}.pagination button:not(:disabled):hover{border-color:#1890ff;color:#1890ff}.pagination{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:20px}.page-nav,.page-number{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer;min-width:32px;padding:6px 12px;text-align:center}.page-nav:disabled,.page-number:disabled{color:#d9d9d9;cursor:not-allowed}.page-nav:not(:disabled):hover,.page-number:not(:disabled):hover{border-color:#1890ff;color:#1890ff}.page-number.active{background-color:#1890ff;border-color:#1890ff;color:#fff}.ellipsis{padding:0 8px}.page-info{align-items:center;display:flex;gap:8px;margin-left:15px}.page-info input{border:1px solid #d9d9d9;border-radius:4px;padding:4px;text-align:center;width:50px}.page-info input:focus{border-color:#1890ff;outline:none}.uploads-table td:first-child,.uploads-table th:first-child{width:30%}.uploads-table td:nth-child(2),.uploads-table th:nth-child(2){width:15%}.uploads-table td:nth-child(3),.uploads-table th:nth-child(3){width:20%}.uploads-table td:nth-child(4),.uploads-table th:nth-child(4){text-align:center;width:15%}.uploads-table td:nth-child(5),.uploads-table th:nth-child(5){text-align:center;width:20%}.exchange-section{background-color:#f9f9f9;border-radius:8px;margin-top:20px;padding:20px}.exchange-card{background-color:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;margin-bottom:20px;padding:15px}.exchange-card h4{color:#333;margin-top:0}.exchange-card p{color:#666;margin-bottom:15px}.exchange-btn{background-color:#1890ff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 16px;transition:background-color .3s}.exchange-btn:hover{background-color:#40a9ff}.exchange-btn:disabled{background-color:#d9d9d9;cursor:not-allowed}.exchange-input-group{display:flex;gap:10px;margin-top:10px}.exchange-input-group input{border:1px solid #d9d9d9;border-radius:4px;flex:1 1;padding:8px}.invite-code-list{margin-top:20px}.invite-code-list ul{list-style:none;padding:0}.invite-code-list li{border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:10px}.invite-code-list .code{font-family:monospace}.invite-code-list .status{border-radius:3px;font-size:12px;padding:2px 6px}.invite-code-list .status.available{background-color:#f6ffed;border:1px solid #b7eb8f;color:#52c41a}.invite-code-list .status.used{background-color:#fff2f0;border:1px solid #ffccc7;color:#ff4d4f}.setting-section{margin:0 auto;max-width:600px;padding:20px}.password-form-card,.user-info-card{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;margin-bottom:20px;padding:20px}.info-item{display:flex;margin-bottom:10px}.info-item label{font-weight:700;width:100px}.info-item span{flex:1 1}.info-note{color:#666;font-size:.9em;margin-top:10px}.form-group label{display:block;font-weight:700;margin-bottom:5px}.form-group input{border:1px solid #ddd;border-radius:4px;box-sizing:border-box;padding:8px;width:100%}.submit-button{background-color:#4caf50;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:16px;padding:10px 15px}.submit-button:hover{background-color:#45a049}.submit-button:disabled{background-color:#ccc;cursor:not-allowed}.success-message{color:#4caf50;margin-bottom:15px}.administer-container{margin:0 auto;max-width:1200px;padding:20px}.search-container{display:flex;gap:10px;margin-bottom:20px}.search-input{border:1px solid #ccc;border-radius:4px;flex-grow:1;max-width:300px;padding:8px}.reset-button,.search-button{background-color:#4caf50;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:8px 16px}.reset-button{background-color:#f44336}.error-message{color:#f44336;margin-bottom:15px}.loading-message{color:#2196f3;margin-bottom:15px}.user-list-container{overflow-x:auto}.user-table{border-collapse:collapse;width:100%}.user-table td,.user-table th{border:1px solid #ddd;padding:8px;text-align:left}.user-table th{background-color:#f2f2f2}.user-table tr:nth-child(2n){background-color:#f9f9f9}.user-table tr:hover{background-color:#f1f1f1}.authority-select{border:1px solid #ccc;border-radius:4px;padding:5px}.tab-container{border-bottom:1px solid #ddd;display:flex;margin-bottom:20px}.tab-button{background:none;border:none;border-bottom:3px solid #0000;cursor:pointer;font-size:16px;padding:10px 20px}.tab-button.active{border-bottom:3px solid #1890ff;color:#1890ff}.current-discount-card{background-color:#f5f5f5;border-radius:5px;margin-bottom:20px;padding:15px}.add-discount-form{background-color:#f9f9f9;border-radius:5px;margin-bottom:20px;padding:20px}.form-group{margin-bottom:15px}.form-group label{display:inline-block;margin-right:10px;width:100px}.discount-table{border-collapse:collapse;width:100%}.discount-table td,.discount-table th{border:1px solid #ddd;padding:10px;text-align:left}.discount-table th{background-color:#f2f2f2}.delete-button{background-color:#ff4d4f;border:none;border-radius:3px;color:#fff;cursor:pointer;padding:5px 10px}.delete-button:hover{background-color:#ff7875}.react-datepicker{font-size:14px}.react-datepicker__time-container{width:120px}.react-datepicker-time__header{font-size:13px}.time-preview{background:#f5f5f5;border-radius:4px;margin:10px 0;padding:10px}.announcement-form{background:#f5f5f5;border-radius:8px;margin-bottom:20px;padding:20px}.announcement-form .form-group{margin-bottom:15px}.announcement-form label{display:block;font-weight:700;margin-bottom:5px}.announcement-form input[type=text],.announcement-form textarea{border:1px solid #ddd;border-radius:4px;padding:8px;width:100%}.announcement-form textarea{min-height:100px}.announcement-list-container{margin-top:20px}.announcement-table{border-collapse:collapse;width:100%}.announcement-table td,.announcement-table th{border-bottom:1px solid #ddd;padding:12px;text-align:left}.announcement-table th{background-color:#f2f2f2;font-weight:700}.announcement-table tr:hover{background-color:#f9f9f9}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker-wrapper{border:0;display:inline-block;padding:0}.react-datepicker{background-color:#fff;border:1px solid #aeaeae;border-radius:.3rem;color:#000;display:inline-block;font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;line-height:normal;position:relative}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{line-height:0;z-index:1}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative;text-align:center}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__year-dropdown-container--select{display:inline-block;margin:0 15px}.react-datepicker-time__header,.react-datepicker-year-header,.react-datepicker__current-month{color:#000;font-size:.944rem;font-weight:700;margin-top:0}h2.react-datepicker__current-month{margin:0;padding:0}.react-datepicker-time__header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.react-datepicker__navigation{align-items:center;background:none;border:none;cursor:pointer;display:flex;height:32px;justify-content:center;overflow:hidden;padding:0;position:absolute;text-align:center;text-indent:-999em;top:2px;width:32px;z-index:1}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{display:block;margin-left:auto;margin-right:auto;position:relative;top:0}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover :before{border-color:#a6a6a6}.react-datepicker__navigation-icon{font-size:20px;position:relative;top:-1px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{left:-7px;transform:rotate(45deg)}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{right:-7px;transform:rotate(225deg)}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;margin:2px;width:4rem}.react-datepicker__input-time-container{clear:both;float:left;margin:5px 0 10px 15px;text-align:left;width:100%}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{display:inline-block;margin-left:5px}.react-datepicker__time-container{border-left:1px solid #aeaeae;float:right;width:85px}.react-datepicker__time-container--with-today-button{border:1px solid #aeaeae;border-radius:.3rem;display:inline;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{background:#fff;border-bottom-right-radius:.3rem;position:relative}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{border-bottom-right-radius:.3rem;margin:0 auto;overflow-x:hidden;text-align:center;width:85px}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{box-sizing:initial;height:calc(195px + .85rem);list-style:none;margin:0;overflow-y:scroll;padding-left:0;padding-right:0;width:100%}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{background-color:#f0f0f0;cursor:pointer}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{background-color:initial;cursor:default}.react-datepicker__week-number{color:#ccc;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__week-number--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{margin-bottom:-8px;white-space:nowrap}.react-datepicker__week{white-space:nowrap}.react-datepicker__day,.react-datepicker__day-name,.react-datepicker__time-name{color:#000;display:inline-block;line-height:1.7rem;margin:.166rem;text-align:center;width:1.7rem}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{background-color:#f0f0f0;border-radius:.3rem}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{background-color:#3dcc4a;border-radius:.3rem;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{background-color:#ff6803;border-radius:.3rem;color:#fff;position:relative}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{background-color:#333;border-radius:4px;bottom:100%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{opacity:1;visibility:visible}.react-datepicker__day--in-range,.react-datepicker__day--in-selecting-range,.react-datepicker__day--selected,.react-datepicker__month-text--in-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--selected,.react-datepicker__quarter-text--in-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--selected,.react-datepicker__year-text--in-range,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--selected{background-color:#216ba5;border-radius:.3rem;color:#fff}.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{background-color:#bad9f1;border-radius:.3rem;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{color:#ccc;cursor:default}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{background-color:#333;border-radius:4px;bottom:70%;color:#fff;left:50%;opacity:0;padding:4px;position:absolute;transform:translateX(-50%);transition:visibility 0s,opacity .3s ease-in-out;visibility:hidden;white-space:nowrap}.react-datepicker__input-container{display:inline-block;position:relative;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{box-sizing:initial;padding:.5rem;position:absolute}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__month-read-view,.react-datepicker__month-year-read-view,.react-datepicker__year-read-view{border:1px solid #0000;border-radius:.3rem;position:relative}.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover,.react-datepicker__year-read-view:hover{cursor:pointer}.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__year-read-view--down-arrow{right:-16px;top:0;transform:rotate(135deg)}.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown,.react-datepicker__year-dropdown{background-color:#f0f0f0;border:1px solid #aeaeae;border-radius:.3rem;left:25%;position:absolute;text-align:center;top:30px;width:50%;z-index:1}.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover,.react-datepicker__year-dropdown:hover{cursor:pointer}.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable,.react-datepicker__year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__month-option,.react-datepicker__month-year-option,.react-datepicker__year-option{display:block;line-height:20px;margin-left:auto;margin-right:auto;width:100%}.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type,.react-datepicker__year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type,.react-datepicker__year-option:last-of-type{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem;-webkit-user-select:none;user-select:none}.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover,.react-datepicker__year-option:hover{background-color:#ccc}.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected,.react-datepicker__year-option--selected{left:15px;position:absolute}.react-datepicker__close-icon{background-color:initial;border:0;cursor:pointer;display:table-cell;height:100%;outline:0;padding:0 6px 0 0;position:absolute;right:0;top:0;vertical-align:middle}.react-datepicker__close-icon:after{background-color:#216ba5;border-radius:50%;color:#fff;content:"×";cursor:pointer;display:table-cell;font-size:12px;height:16px;line-height:1;padding:2px;text-align:center;vertical-align:middle;width:16px}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{background-color:#ccc;cursor:default}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;clear:left;cursor:pointer;font-weight:700;padding:5px 0;text-align:center}.react-datepicker__portal{align-items:center;background-color:#000c;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:2147483647}.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:3rem;width:3rem}@media (max-height:550px),(max-width:400px){.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__time-name{line-height:2rem;width:2rem}}.react-datepicker__portal .react-datepicker-time__header,.react-datepicker__portal .react-datepicker__current-month{font-size:1.44rem}.react-datepicker__children-container{height:auto;margin:.4rem;padding-left:.2rem;padding-right:.2rem;width:13.8rem}.react-datepicker__aria-live{border:0;-webkit-clip-path:circle(0);clip-path:circle(0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.react-datepicker__calendar-icon{height:1em;vertical-align:-.125em;width:1em}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:10%}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}
+/*# sourceMappingURL=main.aef1c2f9.css.map*/
\ No newline at end of file
diff --git a/build/static/css/main.aef1c2f9.css.map b/build/static/css/main.aef1c2f9.css.map
new file mode 100644
index 0000000..e302d98
--- /dev/null
+++ b/build/static/css/main.aef1c2f9.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/css/main.aef1c2f9.css","mappings":"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","sources":["../node_modules/react-datepicker/dist/react-datepicker.css","index.css","components/Dashboard.css","components/Personal/Personal.css","components/AuthForm.css","components/AnnouncementDetail.css","components/TorrentDetail.css","components/RequestDetail.css","components/HelpDetail.css","components/Personal/personalSubpage.css","components/Administer.css","App.css"],"sourcesContent":["@charset \"UTF-8\";\n.react-datepicker__navigation-icon::before, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 3px 3px 0 0;\n  content: \"\";\n  display: block;\n  height: 9px;\n  position: absolute;\n  top: 6px;\n  width: 9px;\n}\n.react-datepicker-wrapper {\n  display: inline-block;\n  padding: 0;\n  border: 0;\n}\n\n.react-datepicker {\n  font-family: \"Helvetica Neue\", helvetica, arial, sans-serif;\n  font-size: 0.8rem;\n  background-color: #fff;\n  color: #000;\n  border: 1px solid #aeaeae;\n  border-radius: 0.3rem;\n  display: inline-block;\n  position: relative;\n  line-height: initial;\n}\n\n.react-datepicker--time-only .react-datepicker__time-container {\n  border-left: 0;\n}\n.react-datepicker--time-only .react-datepicker__time,\n.react-datepicker--time-only .react-datepicker__time-box {\n  border-bottom-left-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.react-datepicker-popper {\n  z-index: 1;\n  line-height: 0;\n}\n.react-datepicker-popper .react-datepicker__triangle {\n  stroke: #aeaeae;\n}\n.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle {\n  fill: #f0f0f0;\n  color: #f0f0f0;\n}\n.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle {\n  fill: #fff;\n  color: #fff;\n}\n\n.react-datepicker__header {\n  text-align: center;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid #aeaeae;\n  border-top-left-radius: 0.3rem;\n  padding: 8px 0;\n  position: relative;\n}\n.react-datepicker__header--time {\n  padding-bottom: 8px;\n  padding-left: 5px;\n  padding-right: 5px;\n}\n.react-datepicker__header--time:not(.react-datepicker__header--time--only) {\n  border-top-left-radius: 0;\n}\n.react-datepicker__header:not(.react-datepicker__header--has-time-select) {\n  border-top-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-dropdown-container--select,\n.react-datepicker__month-dropdown-container--select,\n.react-datepicker__month-year-dropdown-container--select,\n.react-datepicker__year-dropdown-container--scroll,\n.react-datepicker__month-dropdown-container--scroll,\n.react-datepicker__month-year-dropdown-container--scroll {\n  display: inline-block;\n  margin: 0 15px;\n}\n\n.react-datepicker__current-month,\n.react-datepicker-time__header,\n.react-datepicker-year-header {\n  margin-top: 0;\n  color: #000;\n  font-weight: bold;\n  font-size: 0.944rem;\n}\n\nh2.react-datepicker__current-month {\n  padding: 0;\n  margin: 0;\n}\n\n.react-datepicker-time__header {\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.react-datepicker__navigation {\n  align-items: center;\n  background: none;\n  display: flex;\n  justify-content: center;\n  text-align: center;\n  cursor: pointer;\n  position: absolute;\n  top: 2px;\n  padding: 0;\n  border: none;\n  z-index: 1;\n  height: 32px;\n  width: 32px;\n  text-indent: -999em;\n  overflow: hidden;\n}\n.react-datepicker__navigation--previous {\n  left: 2px;\n}\n.react-datepicker__navigation--next {\n  right: 2px;\n}\n.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button) {\n  right: 85px;\n}\n.react-datepicker__navigation--years {\n  position: relative;\n  top: 0;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.react-datepicker__navigation--years-previous {\n  top: 4px;\n}\n.react-datepicker__navigation--years-upcoming {\n  top: -4px;\n}\n.react-datepicker__navigation:hover *::before {\n  border-color: rgb(165.75, 165.75, 165.75);\n}\n\n.react-datepicker__navigation-icon {\n  position: relative;\n  top: -1px;\n  font-size: 20px;\n  width: 0;\n}\n.react-datepicker__navigation-icon--next {\n  left: -2px;\n}\n.react-datepicker__navigation-icon--next::before {\n  transform: rotate(45deg);\n  left: -7px;\n}\n.react-datepicker__navigation-icon--previous {\n  right: -2px;\n}\n.react-datepicker__navigation-icon--previous::before {\n  transform: rotate(225deg);\n  right: -7px;\n}\n\n.react-datepicker__month-container {\n  float: left;\n}\n\n.react-datepicker__year {\n  margin: 0.4rem;\n  text-align: center;\n}\n.react-datepicker__year-wrapper {\n  display: flex;\n  flex-wrap: wrap;\n  max-width: 180px;\n}\n.react-datepicker__year .react-datepicker__year-text {\n  display: inline-block;\n  width: 4rem;\n  margin: 2px;\n}\n\n.react-datepicker__month {\n  margin: 0.4rem;\n  text-align: center;\n}\n.react-datepicker__month .react-datepicker__month-text,\n.react-datepicker__month .react-datepicker__quarter-text {\n  display: inline-block;\n  width: 4rem;\n  margin: 2px;\n}\n\n.react-datepicker__input-time-container {\n  clear: both;\n  width: 100%;\n  float: left;\n  margin: 5px 0 10px 15px;\n  text-align: left;\n}\n.react-datepicker__input-time-container .react-datepicker-time__caption {\n  display: inline-block;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container {\n  display: inline-block;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input {\n  display: inline-block;\n  margin-left: 10px;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input {\n  width: auto;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time] {\n  -moz-appearance: textfield;\n}\n.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter {\n  margin-left: 5px;\n  display: inline-block;\n}\n\n.react-datepicker__time-container {\n  float: right;\n  border-left: 1px solid #aeaeae;\n  width: 85px;\n}\n.react-datepicker__time-container--with-today-button {\n  display: inline;\n  border: 1px solid #aeaeae;\n  border-radius: 0.3rem;\n  position: absolute;\n  right: -87px;\n  top: 0;\n}\n.react-datepicker__time-container .react-datepicker__time {\n  position: relative;\n  background: white;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box {\n  width: 85px;\n  overflow-x: hidden;\n  margin: 0 auto;\n  text-align: center;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list {\n  list-style: none;\n  margin: 0;\n  height: calc(195px + 1.7rem / 2);\n  overflow-y: scroll;\n  padding-right: 0;\n  padding-left: 0;\n  width: 100%;\n  box-sizing: content-box;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item {\n  height: 30px;\n  padding: 5px 10px;\n  white-space: nowrap;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover {\n  cursor: pointer;\n  background-color: #f0f0f0;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected {\n  background-color: #216ba5;\n  color: white;\n  font-weight: bold;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover {\n  background-color: #216ba5;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled {\n  color: #ccc;\n}\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover {\n  cursor: default;\n  background-color: transparent;\n}\n\n.react-datepicker__week-number {\n  color: #ccc;\n  display: inline-block;\n  width: 1.7rem;\n  line-height: 1.7rem;\n  text-align: center;\n  margin: 0.166rem;\n}\n.react-datepicker__week-number.react-datepicker__week-number--clickable {\n  cursor: pointer;\n}\n.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover {\n  border-radius: 0.3rem;\n  background-color: #f0f0f0;\n}\n.react-datepicker__week-number--selected {\n  border-radius: 0.3rem;\n  background-color: #216ba5;\n  color: #fff;\n}\n.react-datepicker__week-number--selected:hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n\n.react-datepicker__day-names {\n  white-space: nowrap;\n  margin-bottom: -8px;\n}\n\n.react-datepicker__week {\n  white-space: nowrap;\n}\n\n.react-datepicker__day-name,\n.react-datepicker__day,\n.react-datepicker__time-name {\n  color: #000;\n  display: inline-block;\n  width: 1.7rem;\n  line-height: 1.7rem;\n  text-align: center;\n  margin: 0.166rem;\n}\n\n.react-datepicker__day,\n.react-datepicker__month-text,\n.react-datepicker__quarter-text,\n.react-datepicker__year-text {\n  cursor: pointer;\n}\n.react-datepicker__day:not([aria-disabled=true]):hover,\n.react-datepicker__month-text:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text:not([aria-disabled=true]):hover,\n.react-datepicker__year-text:not([aria-disabled=true]):hover {\n  border-radius: 0.3rem;\n  background-color: #f0f0f0;\n}\n.react-datepicker__day--today,\n.react-datepicker__month-text--today,\n.react-datepicker__quarter-text--today,\n.react-datepicker__year-text--today {\n  font-weight: bold;\n}\n.react-datepicker__day--highlighted,\n.react-datepicker__month-text--highlighted,\n.react-datepicker__quarter-text--highlighted,\n.react-datepicker__year-text--highlighted {\n  border-radius: 0.3rem;\n  background-color: #3dcc4a;\n  color: #fff;\n}\n.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover {\n  background-color: rgb(49.8551020408, 189.6448979592, 62.5632653061);\n}\n.react-datepicker__day--highlighted-custom-1,\n.react-datepicker__month-text--highlighted-custom-1,\n.react-datepicker__quarter-text--highlighted-custom-1,\n.react-datepicker__year-text--highlighted-custom-1 {\n  color: magenta;\n}\n.react-datepicker__day--highlighted-custom-2,\n.react-datepicker__month-text--highlighted-custom-2,\n.react-datepicker__quarter-text--highlighted-custom-2,\n.react-datepicker__year-text--highlighted-custom-2 {\n  color: green;\n}\n.react-datepicker__day--holidays,\n.react-datepicker__month-text--holidays,\n.react-datepicker__quarter-text--holidays,\n.react-datepicker__year-text--holidays {\n  position: relative;\n  border-radius: 0.3rem;\n  background-color: #ff6803;\n  color: #fff;\n}\n.react-datepicker__day--holidays .overlay,\n.react-datepicker__month-text--holidays .overlay,\n.react-datepicker__quarter-text--holidays .overlay,\n.react-datepicker__year-text--holidays .overlay {\n  position: absolute;\n  bottom: 100%;\n  left: 50%;\n  transform: translateX(-50%);\n  background-color: #333;\n  color: #fff;\n  padding: 4px;\n  border-radius: 4px;\n  white-space: nowrap;\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s, opacity 0.3s ease-in-out;\n}\n.react-datepicker__day--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover {\n  background-color: rgb(207, 82.9642857143, 0);\n}\n.react-datepicker__day--holidays:hover .overlay,\n.react-datepicker__month-text--holidays:hover .overlay,\n.react-datepicker__quarter-text--holidays:hover .overlay,\n.react-datepicker__year-text--holidays:hover .overlay {\n  visibility: visible;\n  opacity: 1;\n}\n.react-datepicker__day--selected, .react-datepicker__day--in-selecting-range, .react-datepicker__day--in-range,\n.react-datepicker__month-text--selected,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--selected,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--selected,\n.react-datepicker__year-text--in-selecting-range,\n.react-datepicker__year-text--in-range {\n  border-radius: 0.3rem;\n  background-color: #216ba5;\n  color: #fff;\n}\n.react-datepicker__day--selected:not([aria-disabled=true]):hover, .react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover, .react-datepicker__day--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n.react-datepicker__day--keyboard-selected,\n.react-datepicker__month-text--keyboard-selected,\n.react-datepicker__quarter-text--keyboard-selected,\n.react-datepicker__year-text--keyboard-selected {\n  border-radius: 0.3rem;\n  background-color: rgb(186.25, 217.0833333333, 241.25);\n  color: rgb(0, 0, 0);\n}\n.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,\n.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover {\n  background-color: rgb(28.75, 93.2196969697, 143.75);\n}\n.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range),\n.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,\n.react-datepicker__month-text--in-range,\n.react-datepicker__quarter-text--in-range,\n.react-datepicker__year-text--in-range) {\n  background-color: rgba(33, 107, 165, 0.5);\n}\n.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range), .react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range),\n.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,\n.react-datepicker__month-text--in-selecting-range,\n.react-datepicker__quarter-text--in-selecting-range,\n.react-datepicker__year-text--in-selecting-range) {\n  background-color: #f0f0f0;\n  color: #000;\n}\n.react-datepicker__day--disabled,\n.react-datepicker__month-text--disabled,\n.react-datepicker__quarter-text--disabled,\n.react-datepicker__year-text--disabled {\n  cursor: default;\n  color: #ccc;\n}\n.react-datepicker__day--disabled .overlay,\n.react-datepicker__month-text--disabled .overlay,\n.react-datepicker__quarter-text--disabled .overlay,\n.react-datepicker__year-text--disabled .overlay {\n  position: absolute;\n  bottom: 70%;\n  left: 50%;\n  transform: translateX(-50%);\n  background-color: #333;\n  color: #fff;\n  padding: 4px;\n  border-radius: 4px;\n  white-space: nowrap;\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s, opacity 0.3s ease-in-out;\n}\n\n.react-datepicker__input-container {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n}\n.react-datepicker__input-container .react-datepicker__calendar-icon {\n  position: absolute;\n  padding: 0.5rem;\n  box-sizing: content-box;\n}\n\n.react-datepicker__view-calendar-icon input {\n  padding: 6px 10px 5px 25px;\n}\n\n.react-datepicker__year-read-view,\n.react-datepicker__month-read-view,\n.react-datepicker__month-year-read-view {\n  border: 1px solid transparent;\n  border-radius: 0.3rem;\n  position: relative;\n}\n.react-datepicker__year-read-view:hover,\n.react-datepicker__month-read-view:hover,\n.react-datepicker__month-year-read-view:hover {\n  cursor: pointer;\n}\n.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow {\n  border-top-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n  transform: rotate(135deg);\n  right: -16px;\n  top: 0;\n}\n\n.react-datepicker__year-dropdown,\n.react-datepicker__month-dropdown,\n.react-datepicker__month-year-dropdown {\n  background-color: #f0f0f0;\n  position: absolute;\n  width: 50%;\n  left: 25%;\n  top: 30px;\n  z-index: 1;\n  text-align: center;\n  border-radius: 0.3rem;\n  border: 1px solid #aeaeae;\n}\n.react-datepicker__year-dropdown:hover,\n.react-datepicker__month-dropdown:hover,\n.react-datepicker__month-year-dropdown:hover {\n  cursor: pointer;\n}\n.react-datepicker__year-dropdown--scrollable,\n.react-datepicker__month-dropdown--scrollable,\n.react-datepicker__month-year-dropdown--scrollable {\n  height: 150px;\n  overflow-y: scroll;\n}\n\n.react-datepicker__year-option,\n.react-datepicker__month-option,\n.react-datepicker__month-year-option {\n  line-height: 20px;\n  width: 100%;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.react-datepicker__year-option:first-of-type,\n.react-datepicker__month-option:first-of-type,\n.react-datepicker__month-year-option:first-of-type {\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n.react-datepicker__year-option:last-of-type,\n.react-datepicker__month-option:last-of-type,\n.react-datepicker__month-year-option:last-of-type {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  border-bottom-left-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n.react-datepicker__year-option:hover,\n.react-datepicker__month-option:hover,\n.react-datepicker__month-year-option:hover {\n  background-color: #ccc;\n}\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming {\n  border-bottom-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous {\n  border-top-color: rgb(178.5, 178.5, 178.5);\n}\n.react-datepicker__year-option--selected,\n.react-datepicker__month-option--selected,\n.react-datepicker__month-year-option--selected {\n  position: absolute;\n  left: 15px;\n}\n\n.react-datepicker__close-icon {\n  cursor: pointer;\n  background-color: transparent;\n  border: 0;\n  outline: 0;\n  padding: 0 6px 0 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  height: 100%;\n  display: table-cell;\n  vertical-align: middle;\n}\n.react-datepicker__close-icon::after {\n  cursor: pointer;\n  background-color: #216ba5;\n  color: #fff;\n  border-radius: 50%;\n  height: 16px;\n  width: 16px;\n  padding: 2px;\n  font-size: 12px;\n  line-height: 1;\n  text-align: center;\n  display: table-cell;\n  vertical-align: middle;\n  content: \"×\";\n}\n.react-datepicker__close-icon--disabled {\n  cursor: default;\n}\n.react-datepicker__close-icon--disabled::after {\n  cursor: default;\n  background-color: #ccc;\n}\n\n.react-datepicker__today-button {\n  background: #f0f0f0;\n  border-top: 1px solid #aeaeae;\n  cursor: pointer;\n  text-align: center;\n  font-weight: bold;\n  padding: 5px 0;\n  clear: left;\n}\n\n.react-datepicker__portal {\n  position: fixed;\n  width: 100vw;\n  height: 100vh;\n  background-color: rgba(0, 0, 0, 0.8);\n  left: 0;\n  top: 0;\n  justify-content: center;\n  align-items: center;\n  display: flex;\n  z-index: 2147483647;\n}\n.react-datepicker__portal .react-datepicker__day-name,\n.react-datepicker__portal .react-datepicker__day,\n.react-datepicker__portal .react-datepicker__time-name {\n  width: 3rem;\n  line-height: 3rem;\n}\n@media (max-width: 400px), (max-height: 550px) {\n  .react-datepicker__portal .react-datepicker__day-name,\n  .react-datepicker__portal .react-datepicker__day,\n  .react-datepicker__portal .react-datepicker__time-name {\n    width: 2rem;\n    line-height: 2rem;\n  }\n}\n.react-datepicker__portal .react-datepicker__current-month,\n.react-datepicker__portal .react-datepicker-time__header {\n  font-size: 1.44rem;\n}\n\n.react-datepicker__children-container {\n  width: 13.8rem;\n  margin: 0.4rem;\n  padding-right: 0.2rem;\n  padding-left: 0.2rem;\n  height: auto;\n}\n\n.react-datepicker__aria-live {\n  position: absolute;\n  clip-path: circle(0);\n  border: 0;\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  width: 1px;\n  white-space: nowrap;\n}\n\n.react-datepicker__calendar-icon {\n  width: 1em;\n  height: 1em;\n  vertical-align: -0.125em;\n}\n","body {\r\n  margin: 0;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\r\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\r\n    sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\ncode {\r\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\r\n    monospace;\r\n}\r\n","/* src/components/Dashboard.css */\r\n.dashboard-container {\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100vh;\r\n    background-color: #f5f5f5;\r\n  }\r\n  \r\n  .top-bar {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 10px 20px;\r\n    background-color: #fff;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 100;\r\n  }\r\n  \r\n  .search-container {\r\n    display: flex;\r\n    flex-grow: 1;\r\n    max-width: 600px;\r\n    margin: 0 auto;\r\n  }\r\n  \r\n  .search-input {\r\n    flex-grow: 1;\r\n    padding: 8px 15px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 20px 0 0 20px;\r\n    font-size: 16px;\r\n    outline: none;\r\n  }\r\n  \r\n  .search-button {\r\n    padding: 8px 15px;\r\n    background-color: #007bff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 0 20px 20px 0;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n  }\r\n  \r\n  .search-button:hover {\r\n    background-color: #0056b3;\r\n  }\r\n  \r\n  .user-info {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .user-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    object-fit: cover;\r\n  }\r\n  \r\n  .username {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .logout-button {\r\n    padding: 5px 10px;\r\n    background-color: #f8f9fa;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n    margin-left: 10px;\r\n  }\r\n  \r\n  .logout-button:hover {\r\n    background-color: #e9ecef;\r\n  }\r\n  \r\n  .nav-tabs {\r\n    display: flex;\r\n    background-color: #fff;\r\n    border-bottom: 1px solid #ddd;\r\n    padding: 0 20px;\r\n  }\r\n  \r\n  .tab-button {\r\n    padding: 12px 20px;\r\n    background: none;\r\n    border: none;\r\n    border-bottom: 3px solid transparent;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    color: #666;\r\n  }\r\n  \r\n  .tab-button:hover {\r\n    color: #007bff;\r\n  }\r\n  \r\n  .tab-button.active {\r\n    color: #007bff;\r\n    border-bottom-color: #007bff;\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .content-area {\r\n    flex-grow: 1;\r\n    padding: 20px;\r\n    background-color: #fff;\r\n    margin: 20px;\r\n    border-radius: 4px;\r\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n  }\r\n  \r\n  .loading, .error {\r\n    padding: 20px;\r\n    text-align: center;\r\n    font-size: 18px;\r\n  }\r\n  \r\n  .error {\r\n    color: #dc3545;\r\n  }\r\n\r\n/* 公告区样式 */\r\n  /* 轮播图样式 */\r\n.carousel-container {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 200px;\r\n    overflow: hidden;\r\n    margin-bottom: 20px;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .carousel-slide {\r\n    position: absolute;\r\n    width: 100%;\r\n    height: 100%;\r\n    opacity: 0;\r\n    transition: opacity 1s ease-in-out;\r\n  }\r\n  \r\n  .carousel-slide.active {\r\n    opacity: 1;\r\n  }\r\n  \r\n  .carousel-image {\r\n    width: 100%;\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 24px;\r\n    font-weight: bold;\r\n    color: white;\r\n  }\r\n  \r\n  .gray-bg {\r\n    background-color: #666;\r\n  }\r\n  \r\n  .carousel-dots {\r\n    position: absolute;\r\n    bottom: 15px;\r\n    left: 0;\r\n    right: 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .dot {\r\n    width: 12px;\r\n    height: 12px;\r\n    border-radius: 50%;\r\n    background-color: rgba(255, 255, 255, 0.5);\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .dot.active {\r\n    background-color: white;\r\n  }\r\n  \r\n  /* 公告网格样式 */\r\n  .announcement-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n    gap: 20px;\r\n  }\r\n  \r\n  .announcement-card {\r\n    background-color: white;\r\n    padding: 15px;\r\n    border-radius: 4px;\r\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n    transition: transform 0.2s, box-shadow 0.2s;\r\n  }\r\n  \r\n  .announcement-card:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n  }\r\n  \r\n  .announcement-card h3 {\r\n    margin-top: 0;\r\n    color: #007bff;\r\n    border-bottom: 1px solid #eee;\r\n    padding-bottom: 8px;\r\n  }\r\n  \r\n  .announcement-card p {\r\n    margin-bottom: 0;\r\n    color: #666;\r\n    line-height: 1.5;\r\n  }\r\n/* 分享区样式   */\r\n /* 上传头部样式 */\r\n.upload-header {\r\n  margin-bottom: 20px;\r\n  display: flex;\r\n  justify-content: flex-start;\r\n}\r\n\r\n.upload-btn {\r\n  padding: 10px 20px;\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  transition: all 0.3s;\r\n}\r\n\r\n.upload-btn:hover {\r\n  background: #40a9ff;\r\n}\r\n\r\n/* 弹窗样式 */\r\n.modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0,0,0,0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.upload-modal {\r\n  background: white;\r\n  padding: 25px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n  position: relative;\r\n}\r\n\r\n.close-btn {\r\n  position: absolute;\r\n  top: 15px;\r\n  right: 15px;\r\n  background: none;\r\n  border: none;\r\n  font-size: 20px;\r\n  cursor: pointer;\r\n}\r\n\r\n/* 表单样式 */\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: 500;\r\n}\r\n\r\n.form-group input[type=\"text\"],\r\n.form-group select,\r\n.form-group textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n}\r\n\r\n.form-group textarea {\r\n  min-height: 80px;\r\n}\r\n\r\n.form-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n  margin-top: 20px;\r\n}\r\n\r\n.cancel-btn {\r\n  padding: 8px 15px;\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background: #e6e6e6;\r\n}\r\n  /* 筛选区域 */\r\n.filter-section {\r\n  background: #f9f9f9;\r\n  padding: 15px;\r\n  border-radius: 8px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.filter-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.filter-group h4 {\r\n  margin: 0 0 8px 0;\r\n  font-size: 15px;\r\n  color: #666;\r\n}\r\n\r\n/* 筛选按钮 */\r\n.filter-btn {\r\n  padding: 6px 12px;\r\n  margin-right: 8px;\r\n  margin-bottom: 8px;\r\n  border: 1px solid #ddd;\r\n  background: white;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: all 0.2s;\r\n}\r\n\r\n.filter-btn:hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.filter-btn.active {\r\n  background: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n/* 确定按钮 */\r\n.confirm-btn {\r\n  padding: 8px 20px;\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: opacity 0.3s;\r\n}\r\n\r\n.confirm-btn:hover {\r\n  background: #007bff;\r\n}\r\n\r\n.confirm-btn:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n\r\n/* 资源列表 */\r\n.resource-list {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 15px;\r\n}\r\n\r\n.resource-item {\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 15px;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n  transition: transform 0.2s, box-shadow 0.2s;\r\n}\r\n\r\n.resource-item:hover {\r\n  transform: translateY(-2px);\r\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.resource-poster {\r\n  margin-right: 15px;\r\n}\r\n\r\n.poster-image {\r\n  width: 60px;\r\n  height: 80px;\r\n  background-color: #666;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: white;\r\n  font-size: 24px;\r\n  font-weight: bold;\r\n  border-radius: 4px;\r\n}\r\n\r\n.resource-info {\r\n  flex-grow: 1;\r\n}\r\n\r\n.resource-title {\r\n  margin: 0 0 5px 0;\r\n  font-size: 16px;\r\n  font-weight: bold;\r\n}\r\n\r\n.resource-meta {\r\n  margin: 0;\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n.resource-stats {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: flex-end;\r\n  margin-right: 20px;\r\n  min-width: 150px;\r\n}\r\n\r\n.stat {\r\n  font-size: 13px;\r\n  color: #666;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.download-btn {\r\n  padding: 8px 15px;\r\n  background-color: #28a745;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.download-btn:hover {\r\n  background-color: #218838;\r\n}\r\n/* 发帖按钮样式 */\r\n.post-header {\r\n  margin-bottom: 20px;\r\n  text-align: right;\r\n}\r\n\r\n.create-post-btn {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.create-post-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n/* 弹窗样式 */\r\n.post-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.post-modal {\r\n  background-color: white;\r\n  padding: 24px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n  position: relative;\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n}\r\n\r\n.post-modal h3 {\r\n  margin-top: 0;\r\n  margin-bottom: 20px;\r\n  font-size: 18px;\r\n  color: #333;\r\n}\r\n\r\n.modal-close-btn {\r\n  position: absolute;\r\n  top: 16px;\r\n  right: 16px;\r\n  background: none;\r\n  border: none;\r\n  font-size: 20px;\r\n  cursor: pointer;\r\n  color: #999;\r\n}\r\n\r\n.modal-close-btn:hover {\r\n  color: #666;\r\n}\r\n\r\n/* 表单样式 */\r\n.form-group {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 8px;\r\n  font-weight: 500;\r\n  color: #333;\r\n}\r\n\r\n.form-group input[type=\"text\"],\r\n.form-group textarea {\r\n  width: 100%;\r\n  padding: 8px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  font-size: 14px;\r\n}\r\n\r\n.form-group textarea {\r\n  min-height: 120px;\r\n  resize: vertical;\r\n}\r\n\r\n.upload-image-btn {\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.upload-image-btn label {\r\n  background-color: #f5f5f5;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  border: 1px dashed #d9d9d9;\r\n  margin-right: 10px;\r\n  transition: all 0.3s;\r\n}\r\n\r\n.upload-image-btn label:hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.image-name {\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n/* 按钮样式 */\r\n.form-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  margin-top: 24px;\r\n}\r\n\r\n.cancel-btn {\r\n  background-color: #f5f5f5;\r\n  color: #333;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  margin-right: 10px;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background-color: #e6e6e6;\r\n}\r\n\r\n.submit-btn {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.submit-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.pagination {\r\n  display: flex;\r\n  justify-content: center;\r\n  margin: 20px 0;\r\n  gap: 5px;\r\n}\r\n\r\n.pagination button {\r\n  padding: 5px 10px;\r\n  border: 1px solid #ddd;\r\n  background: white;\r\n  cursor: pointer;\r\n}\r\n\r\n.pagination button.active {\r\n  background: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n.pagination button:disabled {\r\n  opacity: 0.5;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.filter-section {\r\n  position: sticky;\r\n  top: 0;\r\n  background: white;\r\n  z-index: 100;\r\n  padding: 15px;\r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1);\r\n}\r\n\r\n.admin-center-btn {\r\n  padding: 5px 10px;\r\n  margin-right: 10px;\r\n  background-color: #ff5722;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n}\r\n\r\n.admin-center-btn:hover {\r\n  background-color: #e64a19;\r\n}\r\n\r\n/* 区域搜索容器样式 */\r\n.section-search-container {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  gap: 10px;\r\n}\r\n\r\n.section-search-input {\r\n  flex: 1;\r\n  padding: 10px 15px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  font-size: 1rem;\r\n}\r\n\r\n.section-search-button {\r\n  padding: 10px 20px;\r\n  background-color: #007bff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.section-search-button:hover {\r\n  background-color: #0056b3;\r\n}\r\n\r\n/* 分享区顶部操作栏 */\r\n.share-top-actions {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 20px;\r\n  gap: 20px;\r\n}\r\n\r\n/* 上传按钮样式 */\r\n.upload-btn {\r\n  padding: 10px 20px;\r\n  background-color: #28a745;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n  white-space: nowrap;\r\n}\r\n\r\n.upload-btn:hover {\r\n  background-color: #218838;\r\n}\r\n\r\n/* 下载模态框样式 */\r\n.modal-overlay {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    background: rgba(0, 0, 0, 0.5);\r\n    z-index: 1000;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.download-modal {\r\n    background: white;\r\n    padding: 20px;\r\n    border-radius: 8px;\r\n    width: 500px;\r\n    max-width: 90%;\r\n    position: relative;\r\n}\r\n\r\n.download-modal .close-btn {\r\n    position: absolute;\r\n    top: 10px;\r\n    right: 10px;\r\n    background: none;\r\n    border: none;\r\n    font-size: 20px;\r\n    cursor: pointer;\r\n}\r\n\r\n.download-modal .form-group {\r\n    margin-bottom: 15px;\r\n}\r\n\r\n.download-modal .form-group label {\r\n    display: block;\r\n    margin-bottom: 5px;\r\n}\r\n\r\n.download-modal .form-group input {\r\n    width: 100%;\r\n    padding: 8px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n}\r\n\r\n.progress-container {\r\n    margin: 15px 0;\r\n    background: #f0f0f0;\r\n    border-radius: 4px;\r\n    height: 20px;\r\n    overflow: hidden;\r\n}\r\n\r\n.progress-bar {\r\n    height: 100%;\r\n    background: #1890ff;\r\n    transition: width 0.3s;\r\n    color: white;\r\n    text-align: center;\r\n    font-size: 12px;\r\n    line-height: 20px;\r\n}\r\n\r\n.modal-actions {\r\n    display: flex;\r\n    justify-content: flex-end;\r\n    gap: 10px;\r\n    margin-top: 20px;\r\n}\r\n\r\n.modal-actions button {\r\n    padding: 8px 16px;\r\n    border-radius: 4px;\r\n    cursor: pointer;\r\n}\r\n\r\n.modal-actions button:first-child {\r\n    background: #f5f5f5;\r\n    border: 1px solid #d9d9d9;\r\n}\r\n\r\n.modal-actions button:last-child {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n}\r\n\r\n.modal-actions button:disabled {\r\n    background: #d9d9d9;\r\n    cursor: not-allowed;\r\n    opacity: 0.7;\r\n}\r\n\r\n/* 在Dashboard.css中添加以下样式 */\r\n\r\n.resource-actions {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-left: auto;\r\n}\r\n\r\n.delete-btn {\r\n  padding: 8px 15px;\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.delete-btn:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n.delete-btn:disabled {\r\n  background-color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.carousel-image {\r\n  padding: 1rem;\r\n  background: linear-gradient(to right, #f7b733, #fc4a1a);\r\n  color: white;\r\n  border-radius: 10px;\r\n  height: 180px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  align-items: center;\r\n  font-size: 18px;\r\n  transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.carousel-image h3 {\r\n  font-size: 22px;\r\n  margin: 0;\r\n}\r\n\r\n.carousel-image p {\r\n  margin: 4px 0;\r\n}\r\n\r\n\r\n/* 平台名称样式 */\r\n.platform-name {\r\n  flex: 1;\r\n  display: flex;\r\n  align-items: center;\r\n  padding-left: 20px;\r\n}\r\n\r\n.platform-name h2 {\r\n  margin: 0;\r\n  color: #333;\r\n  font-size: 24px;\r\n  font-weight: bold;\r\n}\r\n\r\n/* 分区搜索框样式 */\r\n.section-search-container {\r\n  padding: 10px 20px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.section-search-input {\r\n  width: 100%;\r\n  padding: 8px 15px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 20px;\r\n  font-size: 14px;\r\n  outline: none;\r\n}\r\n\r\n.section-search-input:focus {\r\n  border-color: #1890ff;\r\n}\r\n\r\n.no-results {\r\n  text-align: center;\r\n  padding: 20px;\r\n  color: #888;\r\n  font-size: 16px;\r\n}\r\n\r\n.reset-button {\r\n  padding: 8px 15px;\r\n  background-color: #f0f0f0;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.reset-button:hover {\r\n  background-color: #e0e0e0;\r\n}","/* Personal.css */\r\n.personal-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .profile-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .profile-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .profile-avatar {\r\n    width: 80px;\r\n    height: 80px;\r\n    border-radius: 50%;\r\n    margin-right: 20px;\r\n    object-fit: cover;\r\n  }\r\n  \r\n  .profile-info {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .username {\r\n    font-size: 24px;\r\n    margin: 0 0 5px;\r\n  }\r\n  \r\n  .user-meta {\r\n    display: flex;\r\n    gap: 15px;\r\n    color: #666;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .stats-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(4, 1fr);\r\n    gap: 15px;\r\n  }\r\n  \r\n  .stat-item {\r\n    background: #f5f5f5;\r\n    border-radius: 6px;\r\n    padding: 15px;\r\n    text-align: center;\r\n  }\r\n  \r\n  .stat-label {\r\n    font-size: 14px;\r\n    color: #666;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .stat-value {\r\n    font-size: 18px;\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .quota-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .quota-card h3 {\r\n    margin-top: 0;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .quota-info {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .quota-used {\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .quota-remaining {\r\n    color: #52c41a;\r\n  }\r\n  \r\n  .progress-bar {\r\n    height: 10px;\r\n    background: #f0f0f0;\r\n    border-radius: 5px;\r\n    margin-bottom: 10px;\r\n    overflow: hidden;\r\n  }\r\n  \r\n  .progress-fill {\r\n    height: 100%;\r\n    background: #1890ff;\r\n    border-radius: 5px;\r\n    transition: width 0.3s ease;\r\n  }\r\n  \r\n  .quota-total {\r\n    text-align: right;\r\n    color: #666;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .action-cards {\r\n    display: grid;\r\n    grid-template-columns: repeat(2, 1fr);\r\n    gap: 15px;\r\n  }\r\n  \r\n  .action-card {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n    cursor: pointer;\r\n    transition: transform 0.2s ease;\r\n  }\r\n  \r\n  .action-card:hover {\r\n    transform: translateY(-3px);\r\n    box-shadow: 0 4px 8px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .action-card h3 {\r\n    margin-top: 0;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .action-card p {\r\n    color: #666;\r\n    margin-bottom: 0;\r\n  }\r\n\r\n  .subpage-container {\r\n    margin-top: 20px;\r\n    border-top: 1px solid #f0f0f0;\r\n    padding-top: 20px;\r\n  }\r\n\r\n\r\n  /* Personal.css */\r\n/* ... 其他已有样式 ... */\r\n\r\n/* 下载进度卡片样式 */\r\n.progress-card {\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  padding: 20px;\r\n  margin-bottom: 20px;\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.download-task {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.task-info {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.task-id {\r\n  font-size: 14px;\r\n  color: #666;\r\n}\r\n\r\n.task-progress {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  color: #1890ff;\r\n}\r\n\r\n.progress-bar {\r\n  height: 8px;\r\n  background: #f0f0f0;\r\n  border-radius: 4px;\r\n  overflow: hidden;\r\n}\r\n\r\n.progress-fill {\r\n  height: 100%;\r\n  background: #1890ff;\r\n  border-radius: 4px;\r\n  transition: width 0.3s ease;\r\n}\r\n\r\n\r\n.user-meta span {\r\n  margin-right: 15px;\r\n  color: #666;\r\n}\r\n\r\n.user-meta span:last-child {\r\n  color: #ff9800;\r\n  font-weight: bold;\r\n}\r\n","/* src/components/AuthForm.css */\r\n.auth-container {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 100vh;\r\n    background-color: #f5f5f5;\r\n    padding: 20px;\r\n}\r\n\r\n.auth-title {\r\n    color: #333;\r\n    font-size: 2.5rem;\r\n    margin-bottom: 2rem;\r\n    text-align: center;\r\n}\r\n\r\n.auth-form-wrapper {\r\n    width: 100%;\r\n    max-width: 400px;\r\n    background: white;\r\n    padding: 2rem;\r\n    border-radius: 8px;\r\n    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.auth-form {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 1rem;\r\n}\r\n\r\n.auth-form h2 {\r\n    color: #333;\r\n    text-align: center;\r\n    margin-bottom: 1.5rem;\r\n}\r\n\r\n.form-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.5rem;\r\n}\r\n\r\n.form-group input {\r\n    padding: 0.8rem;\r\n    border: 1px solid #ddd;\r\n    border-radius: 4px;\r\n    font-size: 1rem;\r\n    width: 100%;\r\n    box-sizing: border-box; /* 确保padding不会影响宽度 */\r\n    height: 42px; /* 固定高度 */\r\n}\r\n\r\n.form-group input:focus {\r\n    outline: none;\r\n    border-color: #007bff;\r\n}\r\n\r\n.auth-button {\r\n    padding: 0.8rem;\r\n    background-color: #007bff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    font-size: 1rem;\r\n    cursor: pointer;\r\n    transition: background-color 0.3s;\r\n    height: 42px; /* 与输入框高度一致 */\r\n}\r\n\r\n.auth-button:hover {\r\n    background-color: #0056b3;\r\n}\r\n\r\n.auth-button:disabled {\r\n    background-color: #cccccc;\r\n    cursor: not-allowed;\r\n}\r\n\r\n.auth-switch {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    gap: 0.5rem;\r\n    margin-top: 1rem;\r\n    font-size: 0.9rem;\r\n    color: #666;\r\n}\r\n\r\n.switch-button {\r\n    background: none;\r\n    border: none;\r\n    color: #007bff;\r\n    cursor: pointer;\r\n    text-decoration: underline;\r\n    font-size: 0.9rem;\r\n    padding: 0;\r\n}\r\n\r\n.switch-button:hover {\r\n    color: #0056b3;\r\n}\r\n\r\n.error-message {\r\n    color: #dc3545;\r\n    background-color: #f8d7da;\r\n    padding: 0.5rem;\r\n    border-radius: 4px;\r\n    text-align: center;\r\n    margin-bottom: 1rem;\r\n}",".announcement-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    font-size: 16px;\r\n    cursor: pointer;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .announcement-detail {\r\n    background: white;\r\n    padding: 25px;\r\n    border-radius: 8px;\r\n    box-shadow: 0 2px 10px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .announcement-header {\r\n    border-bottom: 1px solid #f0f0f0;\r\n    padding-bottom: 15px;\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .announcement-header h1 {\r\n    margin: 0 0 10px 0;\r\n    font-size: 24px;\r\n  }\r\n  \r\n  .announcement-meta {\r\n    display: flex;\r\n    gap: 15px;\r\n    color: #666;\r\n    font-size: 14px;\r\n    align-items: center;\r\n  }\r\n  \r\n  .category-badge {\r\n    background: #e6f7ff;\r\n    color: #1890ff;\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .announcement-content {\r\n    line-height: 1.8;\r\n    font-size: 15px;\r\n  }\r\n  \r\n  .announcement-content p {\r\n    margin: 0 0 16px 0;\r\n  }\r\n  \r\n  .error-message {\r\n    text-align: center;\r\n    padding: 50px;\r\n    color: #ff4d4f;\r\n    font-size: 16px;\r\n  }","/* 基础布局样式 */\r\n.torrent-detail-container {\r\n  max-width: 1000px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n  color: #333;\r\n}\r\n\r\n.back-button {\r\n  background: none;\r\n  border: none;\r\n  color: #3498db;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  margin-bottom: 20px;\r\n  padding: 5px 10px;\r\n}\r\n\r\n.back-button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 种子信息区域 */\r\n.torrent-main {\r\n  display: flex;\r\n  gap: 30px;\r\n  margin-bottom: 40px;\r\n}\r\n\r\n.torrent-cover {\r\n  flex: 0 0 300px;\r\n}\r\n\r\n.cover-placeholder {\r\n  width: 100%;\r\n  height: 450px;\r\n  background-color: #eee;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 72px;\r\n  color: #999;\r\n  border-radius: 5px;\r\n}\r\n\r\n.torrent-info {\r\n  flex: 1;\r\n}\r\n\r\n.torrent-title {\r\n  font-size: 28px;\r\n  margin-bottom: 20px;\r\n  color: #222;\r\n}\r\n\r\n.uploader-info {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 15px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.uploader-avatar {\r\n  width: 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  background-color: #3498db;\r\n  color: white;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-weight: bold;\r\n}\r\n\r\n.uploader-details {\r\n  flex: 1;\r\n}\r\n\r\n.uploader-name {\r\n  font-weight: bold;\r\n}\r\n\r\n.upload-time {\r\n  font-size: 14px;\r\n  color: #777;\r\n}\r\n\r\n.torrent-meta {\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.torrent-meta p {\r\n  margin: 5px 0;\r\n}\r\n\r\n.torrent-description {\r\n  margin-bottom: 30px;\r\n  line-height: 1.6;\r\n}\r\n\r\n.interaction-buttons {\r\n  display: flex;\r\n  gap: 15px;\r\n}\r\n\r\n.interaction-buttons button {\r\n  padding: 8px 15px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.like-button {\r\n  background-color: #f0f0f0;\r\n}\r\n\r\n.like-button:hover {\r\n  background-color: #e0e0e0;\r\n}\r\n\r\n.download-button {\r\n  background-color: #3498db;\r\n  color: white;\r\n}\r\n\r\n.download-button:hover {\r\n  background-color: #2980b9;\r\n}\r\n\r\n/* 评论区域样式 */\r\n.comments-section {\r\n  margin-top: 40px;\r\n}\r\n\r\n.comments-section h2 {\r\n  font-size: 22px;\r\n  margin-bottom: 20px;\r\n  padding-bottom: 10px;\r\n  border-bottom: 1px solid #eee;\r\n}\r\n\r\n.comment-form {\r\n  margin-bottom: 30px;\r\n}\r\n\r\n.comment-form textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  margin-bottom: 10px;\r\n  resize: vertical;\r\n  min-height: 80px;\r\n}\r\n\r\n.comment-form button {\r\n  background-color: #3498db;\r\n  color: white;\r\n  border: none;\r\n  padding: 8px 15px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.comment-form button:hover {\r\n  background-color: #2980b9;\r\n}\r\n\r\n.comment-list {\r\n  margin-top: 20px;\r\n}\r\n\r\n/* 评论项统一样式 */\r\n.comment-container {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.comment-item {\r\n  display: flex;\r\n  gap: 15px;\r\n  padding: 12px;\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  border: 1px solid #eaeaea;\r\n}\r\n\r\n/* 副评论统一缩进 */\r\n.comment-container.is-reply {\r\n  margin-left: 40px;\r\n  position: relative;\r\n}\r\n\r\n/* 副评论连接线 */\r\n.comment-container.is-reply:before {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: -20px;\r\n  top: 20px;\r\n  width: 15px;\r\n  height: 1px;\r\n  background: #ddd;\r\n}\r\n\r\n.comment-avatar {\r\n  flex: 0 0 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  background-color: #e74c3c;\r\n  color: white;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-weight: bold;\r\n}\r\n\r\n.comment-content {\r\n  flex: 1;\r\n}\r\n\r\n.comment-header {\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.comment-user {\r\n  font-weight: bold;\r\n  margin-right: 10px;\r\n}\r\n\r\n.reply-to {\r\n  color: #666;\r\n  font-size: 14px;\r\n  margin: 0 5px;\r\n}\r\n\r\n.comment-time {\r\n  font-size: 14px;\r\n  color: #777;\r\n}\r\n\r\n.comment-text {\r\n  margin-bottom: 10px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.comment-actions {\r\n  display: flex;\r\n  gap: 15px;\r\n}\r\n\r\n.comment-actions button {\r\n  background: none;\r\n  border: none;\r\n  color: #3498db;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  padding: 0;\r\n}\r\n\r\n.comment-actions button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 回复列表容器 */\r\n.replies-container {\r\n  margin-top: 15px;\r\n}\r\n\r\n/* 副评论背景色 */\r\n.comment-container.is-reply .comment-item {\r\n  background: #f9f9f9;\r\n}\r\n\r\n/* 回复表单样式 */\r\n.reply-form {\r\n  margin-top: 15px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  margin-bottom: 10px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n}\r\n\r\n.reply-actions {\r\n  display: flex;\r\n  gap: 10px;\r\n  justify-content: flex-end;\r\n}\r\n\r\n.reply-actions button {\r\n  padding: 5px 10px;\r\n  border: none;\r\n  border-radius: 3px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n}\r\n\r\n.reply-actions button[type=\"button\"] {\r\n  background-color: #f0f0f0;\r\n}\r\n\r\n.reply-actions button[type=\"submit\"] {\r\n  background-color: #3498db;\r\n  color: white;\r\n}\r\n\r\n/* 加载和错误状态 */\r\n.loading {\r\n  text-align: center;\r\n  padding: 50px;\r\n  font-size: 18px;\r\n}\r\n\r\n.error {\r\n  color: #e74c3c;\r\n  text-align: center;\r\n  padding: 50px;\r\n  font-size: 18px;\r\n}\r\n/* 回复表单样式 */\r\n.reply-form {\r\n  margin-left: 50px;\r\n  margin-top: 10px;\r\n  background: #f5f5f5;\r\n  padding: 10px;\r\n  border-radius: 4px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n}\r\n\r\n.reply-form-buttons {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 8px;\r\n}\r\n\r\n.reply-form-buttons button {\r\n  padding: 5px 10px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"] {\r\n  background-color: #1890ff;\r\n  color: white;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply {\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n}\r\n\r\n.comment-list {\r\n  margin-top: 20px;\r\n  border-top: 1px solid #eee;\r\n  padding-top: 20px;\r\n}\r\n\r\n.reply-form {\r\n  margin-left: 50px;\r\n  margin-top: 10px;\r\n  margin-bottom: 15px;\r\n  background: #f9f9f9;\r\n  padding: 12px;\r\n  border-radius: 6px;\r\n  border: 1px solid #eee;\r\n}\r\n\r\n.reply-form.nested-reply {\r\n  margin-left: 80px;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n  font-family: inherit;\r\n  font-size: 14px;\r\n}\r\n\r\n.reply-form-buttons {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.reply-form-buttons button {\r\n  padding: 6px 12px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 13px;\r\n  transition: all 0.2s;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"] {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n}\r\n\r\n.reply-form-buttons button[type=\"submit\"]:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply {\r\n  background-color: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  color: #666;\r\n}\r\n\r\n.reply-form-buttons .cancel-reply:hover {\r\n  background-color: #e8e8e8;\r\n}\r\n\r\n/* 回复弹窗样式 */\r\n.reply-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.reply-modal {\r\n  background: white;\r\n  border-radius: 8px;\r\n  width: 90%;\r\n  max-width: 500px;\r\n  padding: 20px;\r\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.modal-header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-header h3 {\r\n  margin: 0;\r\n  font-size: 18px;\r\n}\r\n\r\n.close-modal {\r\n  background: none;\r\n  border: none;\r\n  font-size: 24px;\r\n  cursor: pointer;\r\n  color: #666;\r\n}\r\n\r\n.reply-modal textarea {\r\n  width: 100%;\r\n  padding: 12px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 120px;\r\n  font-size: 14px;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n}\r\n\r\n.modal-actions button {\r\n  padding: 8px 16px;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n}\r\n\r\n.cancel-btn {\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  color: #666;\r\n}\r\n\r\n.cancel-btn:hover {\r\n  background: #e8e8e8;\r\n}\r\n\r\n.submit-btn {\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n}\r\n\r\n.submit-btn:hover {\r\n  background: #40a9ff;\r\n}\r\n","/* RequestDetail.css */\r\n.request-detail-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .request-post {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .post-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .post-meta {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n  \r\n  .post-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .post-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .post-title {\r\n    font-size: 20px;\r\n    margin: 0 0 15px;\r\n  }\r\n  \r\n  .post-content {\r\n    line-height: 1.6;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-actions {\r\n    display: flex;\r\n    gap: 15px;\r\n  }\r\n  \r\n  .like-button, .favorite-button {\r\n    padding: 5px 15px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    background: #f5f5f5;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .like-button.liked {\r\n    background: #e6f7ff;\r\n    border-color: #91d5ff;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .favorite-button.favorited {\r\n    background: #fff7e6;\r\n    border-color: #ffd591;\r\n    color: #fa8c16;\r\n  }\r\n  \r\n  .comments-section {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .comment-form {\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .comment-form textarea {\r\n    width: 100%;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 80px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .form-actions {\r\n    display: flex;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .submit-comment, .submit-torrent {\r\n    padding: 8px 16px;\r\n    border-radius: 4px;\r\n    border: none;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .submit-comment {\r\n    background: #1890ff;\r\n    color: white;\r\n  }\r\n  \r\n  .submit-torrent {\r\n    background: #52c41a;\r\n    color: white;\r\n  }\r\n  \r\n  .comment-list {\r\n    margin-top: 20px;\r\n  }\r\n  \r\n  .comment-item {\r\n    display: flex;\r\n    padding: 15px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n  \r\n  .comment-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n  \r\n  .comment-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 15px;\r\n    flex-shrink: 0;\r\n  }\r\n  \r\n  .comment-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .comment-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .comment-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .comment-text {\r\n    line-height: 1.6;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .torrent-comment {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 8px;\r\n    padding: 8px;\r\n    background: #f0f8ff;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .torrent-title {\r\n    color: #1890ff;\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .torrent-size {\r\n    color: #666;\r\n    margin: 0 15px;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .download-torrent {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    padding: 5px 10px;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .comment-like {\r\n    background: none;\r\n    border: none;\r\n    color: #666;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n    padding: 0;\r\n  }","/* HelpDetail.css */\r\n.help-detail-container {\r\n    max-width: 800px;\r\n    margin: 0 auto;\r\n    padding: 20px;\r\n  }\r\n  \r\n  .back-button {\r\n    background: none;\r\n    border: none;\r\n    color: #1890ff;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    margin-bottom: 20px;\r\n    padding: 5px 0;\r\n  }\r\n  \r\n  .help-post {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    margin-bottom: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .help-post.solved {\r\n    border-left: 4px solid #52c41a;\r\n  }\r\n  \r\n  .post-header {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-bottom: 15px;\r\n    position: relative;\r\n  }\r\n  \r\n  .post-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .post-meta {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n  \r\n  .post-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .post-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .solved-badge {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    background: #52c41a;\r\n    color: white;\r\n    padding: 2px 8px;\r\n    border-radius: 4px;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .post-title {\r\n    font-size: 20px;\r\n    margin: 0 0 15px;\r\n  }\r\n  \r\n  .post-content {\r\n    line-height: 1.6;\r\n    margin-bottom: 15px;\r\n  }\r\n  \r\n  .post-actions {\r\n    display: flex;\r\n    gap: 15px;\r\n  }\r\n  \r\n  .like-button, .favorite-button, .solve-button {\r\n    padding: 5px 15px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    background: #f5f5f5;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .like-button.liked {\r\n    background: #e6f7ff;\r\n    border-color: #91d5ff;\r\n    color: #1890ff;\r\n  }\r\n  \r\n  .favorite-button.favorited {\r\n    background: #fff7e6;\r\n    border-color: #ffd591;\r\n    color: #fa8c16;\r\n  }\r\n  \r\n  .solve-button.solved {\r\n    background: #f6ffed;\r\n    border-color: #b7eb8f;\r\n    color: #52c41a;\r\n  }\r\n  \r\n  .comments-section {\r\n    background: #fff;\r\n    border-radius: 8px;\r\n    padding: 20px;\r\n    box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n  }\r\n  \r\n  .comment-form {\r\n    margin-bottom: 20px;\r\n  }\r\n  \r\n  .comment-form textarea {\r\n    width: 100%;\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 80px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .image-upload {\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .upload-button {\r\n    background: #f5f5f5;\r\n    border: 1px dashed #d9d9d9;\r\n    border-radius: 4px;\r\n    padding: 8px 16px;\r\n    cursor: pointer;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .image-preview {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .preview-item {\r\n    position: relative;\r\n    width: 100px;\r\n    height: 100px;\r\n  }\r\n  \r\n  .preview-item img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .remove-image {\r\n    position: absolute;\r\n    top: -8px;\r\n    right: -8px;\r\n    width: 20px;\r\n    height: 20px;\r\n    background: #ff4d4f;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .submit-button {\r\n    background: #1890ff;\r\n    color: white;\r\n    border: none;\r\n    border-radius: 4px;\r\n    padding: 8px 16px;\r\n    cursor: pointer;\r\n  }\r\n  \r\n  .comment-list {\r\n    margin-top: 20px;\r\n  }\r\n  \r\n  .comment-item {\r\n    display: flex;\r\n    padding: 15px 0;\r\n    border-bottom: 1px solid #f0f0f0;\r\n  }\r\n  \r\n  .comment-item:last-child {\r\n    border-bottom: none;\r\n  }\r\n  \r\n  .comment-avatar {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    margin-right: 15px;\r\n    flex-shrink: 0;\r\n  }\r\n  \r\n  .comment-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .comment-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-author {\r\n    font-weight: bold;\r\n  }\r\n  \r\n  .comment-date {\r\n    color: #888;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .comment-text {\r\n    line-height: 1.6;\r\n    margin-bottom: 8px;\r\n  }\r\n  \r\n  .comment-images {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 10px;\r\n  }\r\n  \r\n  .comment-image {\r\n    max-width: 200px;\r\n    max-height: 150px;\r\n    border-radius: 4px;\r\n  }\r\n  \r\n  .comment-actions {\r\n    margin-top: 10px;\r\n  }\r\n  \r\n  .reply-form {\r\n    margin-top: 10px;\r\n    display: flex;\r\n    gap: 10px;\r\n  }\r\n  \r\n  .reply-form textarea {\r\n    flex-grow: 1;\r\n    padding: 8px;\r\n    border-radius: 4px;\r\n    border: 1px solid #ddd;\r\n    resize: vertical;\r\n    min-height: 40px;\r\n  }\r\n  \r\n  .submit-reply {\r\n    background: #f5f5f5;\r\n    border: 1px solid #d9d9d9;\r\n    border-radius: 4px;\r\n    padding: 0 15px;\r\n    cursor: pointer;\r\n    align-self: flex-end;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .reply-list {\r\n    margin-top: 10px;\r\n    padding-left: 15px;\r\n    border-left: 2px solid #f0f0f0;\r\n  }\r\n  \r\n  .reply-item {\r\n    display: flex;\r\n    margin-top: 10px;\r\n  }\r\n  \r\n  .reply-avatar {\r\n    width: 30px;\r\n    height: 30px;\r\n    border-radius: 50%;\r\n    margin-right: 10px;\r\n  }\r\n  \r\n  .reply-content {\r\n    flex-grow: 1;\r\n  }\r\n  \r\n  .reply-header {\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 5px;\r\n  }\r\n  \r\n  .reply-author {\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n  }\r\n  \r\n  .reply-date {\r\n    color: #888;\r\n    font-size: 12px;\r\n  }\r\n  \r\n  .reply-text {\r\n    font-size: 14px;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  /* 评论项样式 */\r\n.comment-item {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  padding: 15px;\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n}\r\n\r\n.comment-avatar {\r\n  width: 40px;\r\n  height: 40px;\r\n  border-radius: 50%;\r\n  margin-right: 15px;\r\n  object-fit: cover;\r\n}\r\n\r\n.comment-content {\r\n  flex: 1;\r\n}\r\n\r\n.comment-header {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.comment-author {\r\n  font-weight: bold;\r\n  margin-right: 10px;\r\n  color: #333;\r\n}\r\n\r\n.comment-date {\r\n  font-size: 12px;\r\n  color: #999;\r\n}\r\n\r\n.comment-text {\r\n  margin-bottom: 10px;\r\n  line-height: 1.5;\r\n  color: #333;\r\n}\r\n\r\n.comment-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-top: 10px;\r\n}\r\n\r\n.like-button {\r\n  background: none;\r\n  border: none;\r\n  cursor: pointer;\r\n  color: #666;\r\n  font-size: 14px;\r\n  padding: 4px 8px;\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.like-button.liked {\r\n  color: #1877f2;\r\n}\r\n\r\n.like-button:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n/* 回复控制按钮 */\r\n.reply-controls {\r\n  margin: 10px 0;\r\n}\r\n\r\n.toggle-replies-btn {\r\n  background: none;\r\n  border: none;\r\n  color: #666;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  padding: 4px 8px;\r\n}\r\n\r\n.toggle-replies-btn:hover {\r\n  color: #333;\r\n  text-decoration: underline;\r\n}\r\n\r\n.toggle-replies-btn:disabled {\r\n  color: #ccc;\r\n  cursor: not-allowed;\r\n}\r\n\r\n/* 回复表单 */\r\n.reply-form {\r\n  margin-top: 10px;\r\n  width: 100%;\r\n}\r\n\r\n.reply-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 60px;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.submit-reply {\r\n  background-color: #f0f2f5;\r\n  border: none;\r\n  border-radius: 4px;\r\n  padding: 6px 12px;\r\n  cursor: pointer;\r\n  color: #333;\r\n}\r\n\r\n.submit-reply:hover {\r\n  background-color: #e4e6eb;\r\n}\r\n\r\n/* 回复列表 */\r\n.reply-list {\r\n  margin-left: 55px; /* 头像宽度 + 边距 */\r\n  border-left: 2px solid #eee;\r\n  padding-left: 15px;\r\n  margin-top: 15px;\r\n}\r\n\r\n.reply-item {\r\n  display: flex;\r\n  margin-bottom: 15px;\r\n  padding: 12px;\r\n  background: #f9f9f9;\r\n  border-radius: 6px;\r\n}\r\n\r\n.reply-avatar {\r\n  width: 32px;\r\n  height: 32px;\r\n  border-radius: 50%;\r\n  margin-right: 10px;\r\n  object-fit: cover;\r\n}\r\n\r\n.reply-content {\r\n  flex: 1;\r\n}\r\n\r\n.reply-header {\r\n  display: flex;\r\n  align-items: center;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.reply-author {\r\n  font-weight: bold;\r\n  margin-right: 8px;\r\n  font-size: 14px;\r\n  color: #333;\r\n}\r\n\r\n.reply-date {\r\n  font-size: 12px;\r\n  color: #999;\r\n}\r\n\r\n.reply-text {\r\n  font-size: 14px;\r\n  line-height: 1.4;\r\n  color: #333;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.reply-actions {\r\n  margin-top: 5px;\r\n}\r\n\r\n/* 回复弹窗样式 */\r\n.reply-modal-overlay {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 1000;\r\n}\r\n\r\n.reply-modal {\r\n  background: white;\r\n  padding: 20px;\r\n  border-radius: 8px;\r\n  width: 500px;\r\n  max-width: 90%;\r\n}\r\n\r\n.reply-modal h3 {\r\n  margin-top: 0;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.reply-modal textarea {\r\n  width: 100%;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  resize: vertical;\r\n  min-height: 100px;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.modal-actions {\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 10px;\r\n}\r\n\r\n.cancel-button {\r\n  background: #f5f5f5;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  padding: 8px 16px;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-button {\r\n  background: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  padding: 8px 16px;\r\n  cursor: pointer;\r\n}\r\n\r\n.post-image-container {\r\n  width: 100%;\r\n  max-width: 500px; /* 最大宽度 */\r\n  margin: 10px 0;\r\n}\r\n\r\n.post-image {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 400px; /* 最大高度 */\r\n  object-fit: contain; /* 保持比例完整显示图片 */\r\n  border-radius: 4px;\r\n}\r\n\r\n.comment-image-container {\r\n  width: 100%;\r\n  max-width: 500px; /* 最大宽度 */\r\n  margin: 10px 0;\r\n}\r\n\r\n.comment-image {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 400px; /* 最大高度 */\r\n  object-fit: contain; /* 保持比例完整显示图片 */\r\n  border-radius: 4px;\r\n}\r\n\r\n","/* 上传记录表格样式 */\r\n.uploads-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  margin-top: 20px;\r\n}\r\n\r\n.uploads-table th, .uploads-table td {\r\n  padding: 12px 15px;\r\n  text-align: left;\r\n  border-bottom: 1px solid #e0e0e0;\r\n}\r\n\r\n.uploads-table th {\r\n  background-color: #f5f5f5;\r\n  font-weight: 600;\r\n}\r\n\r\n.list-item:hover {\r\n  background-color: #f9f9f9;\r\n}\r\n\r\n/* 操作按钮样式 */\r\n.action-btn {\r\n  padding: 6px 12px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 14px;\r\n  transition: background-color 0.2s;\r\n}\r\n\r\n.delete-btn {\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n}\r\n\r\n.delete-btn:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n/* 分页控件样式 */\r\n.pagination {\r\n  margin-top: 20px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 15px;\r\n}\r\n\r\n.pagination button {\r\n  padding: 6px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  background-color: #fff;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.pagination button:disabled {\r\n  color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.pagination button:not(:disabled):hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n/* 分页控件样式 */\r\n.pagination {\r\n  margin-top: 20px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 8px;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.page-nav, .page-number {\r\n  padding: 6px 12px;\r\n  border: 1px solid #d9d9d9;\r\n  background-color: #fff;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  min-width: 32px;\r\n  text-align: center;\r\n}\r\n\r\n.page-nav:disabled, .page-number:disabled {\r\n  color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.page-nav:not(:disabled):hover, \r\n.page-number:not(:disabled):hover {\r\n  border-color: #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n.page-number.active {\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border-color: #1890ff;\r\n}\r\n\r\n.ellipsis {\r\n  padding: 0 8px;\r\n}\r\n\r\n.page-info {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  margin-left: 15px;\r\n}\r\n\r\n.page-info input {\r\n  width: 50px;\r\n  padding: 4px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n  text-align: center;\r\n}\r\n\r\n.page-info input:focus {\r\n  outline: none;\r\n  border-color: #1890ff;\r\n}\r\n\r\n/* 调整表格列宽 */\r\n.uploads-table th:nth-child(1),\r\n.uploads-table td:nth-child(1) {\r\n  width: 30%;\r\n}\r\n\r\n.uploads-table th:nth-child(2),\r\n.uploads-table td:nth-child(2) {\r\n  width: 15%;\r\n}\r\n\r\n.uploads-table th:nth-child(3),\r\n.uploads-table td:nth-child(3) {\r\n  width: 20%;\r\n}\r\n\r\n.uploads-table th:nth-child(4),\r\n.uploads-table td:nth-child(4) {\r\n  width: 15%;\r\n  text-align: center;\r\n}\r\n\r\n.uploads-table th:nth-child(5),\r\n.uploads-table td:nth-child(5) {\r\n  width: 20%;\r\n  text-align: center;\r\n}\r\n\r\n/* 兑换区样式 */\r\n.exchange-section {\r\n  margin-top: 20px;\r\n  padding: 20px;\r\n  background-color: #f9f9f9;\r\n  border-radius: 8px;\r\n}\r\n\r\n.exchange-card {\r\n  margin-bottom: 20px;\r\n  padding: 15px;\r\n  background-color: white;\r\n  border-radius: 6px;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.exchange-card h4 {\r\n  margin-top: 0;\r\n  color: #333;\r\n}\r\n\r\n.exchange-card p {\r\n  color: #666;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.exchange-btn {\r\n  padding: 8px 16px;\r\n  background-color: #1890ff;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  transition: background-color 0.3s;\r\n}\r\n\r\n.exchange-btn:hover {\r\n  background-color: #40a9ff;\r\n}\r\n\r\n.exchange-btn:disabled {\r\n  background-color: #d9d9d9;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.exchange-input-group {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.exchange-input-group input {\r\n  flex: 1;\r\n  padding: 8px;\r\n  border: 1px solid #d9d9d9;\r\n  border-radius: 4px;\r\n}\r\n\r\n.invite-code-list {\r\n  margin-top: 20px;\r\n}\r\n\r\n.invite-code-list ul {\r\n  list-style: none;\r\n  padding: 0;\r\n}\r\n\r\n.invite-code-list li {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  padding: 10px;\r\n  border-bottom: 1px solid #eee;\r\n}\r\n\r\n.invite-code-list .code {\r\n  font-family: monospace;\r\n}\r\n\r\n.invite-code-list .status {\r\n  padding: 2px 6px;\r\n  border-radius: 3px;\r\n  font-size: 12px;\r\n}\r\n\r\n.invite-code-list .status.available {\r\n  background-color: #f6ffed;\r\n  color: #52c41a;\r\n  border: 1px solid #b7eb8f;\r\n}\r\n\r\n.invite-code-list .status.used {\r\n  background-color: #fff2f0;\r\n  color: #ff4d4f;\r\n  border: 1px solid #ffccc7;\r\n}\r\n\r\n\r\n/* personalSubpage.css 中添加以下样式 */\r\n\r\n.setting-section {\r\n  max-width: 600px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n}\r\n\r\n.user-info-card, .password-form-card {\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  padding: 20px;\r\n  margin-bottom: 20px;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.info-item {\r\n  display: flex;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.info-item label {\r\n  font-weight: bold;\r\n  width: 100px;\r\n}\r\n\r\n.info-item span {\r\n  flex: 1;\r\n}\r\n\r\n.info-note {\r\n  color: #666;\r\n  font-size: 0.9em;\r\n  margin-top: 10px;\r\n}\r\n\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: bold;\r\n}\r\n\r\n.form-group input {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.submit-button {\r\n  background-color: #4CAF50;\r\n  color: white;\r\n  padding: 10px 15px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n}\r\n\r\n.submit-button:hover {\r\n  background-color: #45a049;\r\n}\r\n\r\n.submit-button:disabled {\r\n  background-color: #cccccc;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.error-message {\r\n  color: #f44336;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.success-message {\r\n  color: #4CAF50;\r\n  margin-bottom: 15px;\r\n}",".administer-container {\r\n  padding: 20px;\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.search-container {\r\n  margin-bottom: 20px;\r\n  display: flex;\r\n  gap: 10px;\r\n}\r\n\r\n.search-input {\r\n  padding: 8px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 4px;\r\n  flex-grow: 1;\r\n  max-width: 300px;\r\n}\r\n\r\n.search-button, .reset-button {\r\n  padding: 8px 16px;\r\n  background-color: #4CAF50;\r\n  color: white;\r\n  border: none;\r\n  border-radius: 4px;\r\n  cursor: pointer;\r\n}\r\n\r\n.reset-button {\r\n  background-color: #f44336;\r\n}\r\n\r\n.error-message {\r\n  color: #f44336;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.loading-message {\r\n  color: #2196F3;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.user-list-container {\r\n  overflow-x: auto;\r\n}\r\n\r\n.user-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.user-table th, .user-table td {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n  text-align: left;\r\n}\r\n\r\n.user-table th {\r\n  background-color: #f2f2f2;\r\n}\r\n\r\n.user-table tr:nth-child(even) {\r\n  background-color: #f9f9f9;\r\n}\r\n\r\n.user-table tr:hover {\r\n  background-color: #f1f1f1;\r\n}\r\n\r\n.authority-select {\r\n  padding: 5px;\r\n  border-radius: 4px;\r\n  border: 1px solid #ccc;\r\n}\r\n\r\n/* 选项卡样式 */\r\n.tab-container {\r\n  display: flex;\r\n  margin-bottom: 20px;\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.tab-button {\r\n  padding: 10px 20px;\r\n  background: none;\r\n  border: none;\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n  border-bottom: 3px solid transparent;\r\n}\r\n\r\n.tab-button.active {\r\n  border-bottom: 3px solid #1890ff;\r\n  color: #1890ff;\r\n}\r\n\r\n/* 折扣卡片样式 */\r\n.current-discount-card {\r\n  background-color: #f5f5f5;\r\n  padding: 15px;\r\n  border-radius: 5px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n/* 折扣表单样式 */\r\n.add-discount-form {\r\n  background-color: #f9f9f9;\r\n  padding: 20px;\r\n  border-radius: 5px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.form-group label {\r\n  display: inline-block;\r\n  width: 100px;\r\n  margin-right: 10px;\r\n}\r\n\r\n/* 折扣表格样式 */\r\n.discount-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.discount-table th, .discount-table td {\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  text-align: left;\r\n}\r\n\r\n.discount-table th {\r\n  background-color: #f2f2f2;\r\n}\r\n\r\n.delete-button {\r\n  background-color: #ff4d4f;\r\n  color: white;\r\n  border: none;\r\n  padding: 5px 10px;\r\n  border-radius: 3px;\r\n  cursor: pointer;\r\n}\r\n\r\n.delete-button:hover {\r\n  background-color: #ff7875;\r\n}\r\n\r\n.react-datepicker {\r\n  font-size: 14px;\r\n}\r\n\r\n.react-datepicker__time-container {\r\n  width: 120px;\r\n}\r\n\r\n.react-datepicker-time__header {\r\n  font-size: 13px;\r\n}\r\n\r\n.time-preview {\r\n  margin: 10px 0;\r\n  padding: 10px;\r\n  background: #f5f5f5;\r\n  border-radius: 4px;\r\n}\r\n\r\n/* 公告表单样式 */\r\n.announcement-form {\r\n  padding: 20px;\r\n  background: #f5f5f5;\r\n  border-radius: 8px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.announcement-form .form-group {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.announcement-form label {\r\n  display: block;\r\n  margin-bottom: 5px;\r\n  font-weight: bold;\r\n}\r\n\r\n.announcement-form input[type=\"text\"],\r\n.announcement-form textarea {\r\n  width: 100%;\r\n  padding: 8px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n}\r\n\r\n.announcement-form textarea {\r\n  min-height: 100px;\r\n}\r\n\r\n/* 公告列表样式 */\r\n.announcement-list-container {\r\n  margin-top: 20px;\r\n}\r\n\r\n.announcement-table {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\n.announcement-table th,\r\n.announcement-table td {\r\n  padding: 12px;\r\n  text-align: left;\r\n  border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.announcement-table th {\r\n  background-color: #f2f2f2;\r\n  font-weight: bold;\r\n}\r\n\r\n.announcement-table tr:hover {\r\n  background-color: #f9f9f9;\r\n}",".App {\r\n  text-align: center;\r\n}\r\n\r\n.App-logo {\r\n  height: 40vmin;\r\n  pointer-events: none;\r\n}\r\n\r\n@media (prefers-reduced-motion: no-preference) {\r\n  .App-logo {\r\n    animation: App-logo-spin infinite 20s linear;\r\n  }\r\n}\r\n\r\n.App-header {\r\n  background-color: #282c34;\r\n  min-height: 10%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: calc(10px + 2vmin);\r\n  color: white;\r\n}\r\n\r\n.App-link {\r\n  color: #61dafb;\r\n}\r\n\r\n@keyframes App-logo-spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/static/js/845.116b9008.chunk.js b/build/static/js/845.116b9008.chunk.js
new file mode 100644
index 0000000..6a7ec66
--- /dev/null
+++ b/build/static/js/845.116b9008.chunk.js
@@ -0,0 +1,2 @@
+"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[845],{845:(e,t,n)=>{n.r(t),n.d(t,{getCLS:()=>y,getFCP:()=>g,getFID:()=>C,getLCP:()=>P,getTTFB:()=>D});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,d=function(){return"hidden"===document.visibilityState?0:1/0},p=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=d(),p(),s((function(){setTimeout((function(){v=d(),p()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=u("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},h=!1,T=-1,y=function(e,t){h||(g((function(e){T=e.value})),h=!0);var n,i=function(t){T>-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},d=c("layout-shift",v);d&&(n=m(i,r,t),f((function(){d.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),d=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},p=c("first-input",d);n=m(e,v,t),p&&f((function(){p.takeRecords().map(d),p.disconnect()}),!0),p&&s((function(){var a;v=u("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=d,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=u("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=c("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=u("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
+//# sourceMappingURL=845.116b9008.chunk.js.map
\ No newline at end of file
diff --git a/build/static/js/845.116b9008.chunk.js.map b/build/static/js/845.116b9008.chunk.js.map
new file mode 100644
index 0000000..37233f7
--- /dev/null
+++ b/build/static/js/845.116b9008.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/845.116b9008.chunk.js","mappings":"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","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime<i.firstHiddenTime&&(o.value=e.startTime,o.entries.push(e),n(!0)))},s=window.performance&&performance.getEntriesByName&&performance.getEntriesByName(\"first-contentful-paint\")[0],m=s?null:a(\"paint\",f);(s||m)&&(n=c(e,o,t),s&&f(s),u((function(i){o=r(\"FCP\"),n=c(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-i.timeStamp,n(!0)}))}))})))},p=!1,l=-1,h=function(e,t){p||(d((function(e){l=e.value})),p=!0);var n,i=function(t){l>-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t<n-y){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(r)})),i=[]}},S=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTime<m.firstHiddenTime&&(d.value=e.processingStart-e.startTime,d.entries.push(e),s(!0))},l=a(\"first-input\",p);s=c(n,d,f),l&&o((function(){l.takeRecords().map(p),l.disconnect()}),!0),l&&u((function(){var a;d=r(\"FID\"),s=c(n,d,f),i=[],t=-1,e=null,w(addEventListener),a=p,i.push(a),E()}))},b={},F=function(e,t){var n,i=v(),f=r(\"LCP\"),s=function(e){var t=e.startTime;t<i.firstHiddenTime&&(f.value=t,f.entries.push(e),n())},m=a(\"largest-contentful-paint\",s);if(m){n=c(e,f,t);var d=function(){b[f.id]||(m.takeRecords().map(s),m.disconnect(),b[f.id]=!0,n(!0))};[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,d,{once:!0,capture:!0})})),o(d,!0),u((function(i){f=r(\"LCP\"),n=c(e,f,t),requestAnimationFrame((function(){requestAnimationFrame((function(){f.value=performance.now()-i.timeStamp,b[f.id]=!0,n(!0)}))}))}))}},P=function(e){var t,n=r(\"TTFB\");t=function(){try{var t=performance.getEntriesByType(\"navigation\")[0]||function(){var e=performance.timing,t={entryType:\"navigation\",startTime:0};for(var n in e)\"navigationStart\"!==n&&\"toJSON\"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/static/js/main.dd76cdc0.js b/build/static/js/main.dd76cdc0.js
new file mode 100644
index 0000000..d77b8d8
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js
@@ -0,0 +1,3 @@
+/*! For license information please see main.dd76cdc0.js.LICENSE.txt */
+(()=>{var e={97:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"===typeof e||"number"===typeof e)return e;if("object"!==typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},276:(e,t)=>{"use strict";var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen");function g(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case a:case s:case i:case f:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case d:case m:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.ForwardRef=d,t.isMemo=function(e){return g(e)===h}},317:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,a=s(e),i=a[0],l=a[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),u=0,d=l>0?i-4:i;for(n=0;n<d;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,a=[],i=16383,s=0,c=r-o;s<c;s+=i)a.push(l(e,s,s+i>c?c:s+i));1===o?(t=e[r-1],a.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],a.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return a.join("")};for(var n=[],r=[],o="undefined"!==typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)n[i]=a[i],r[a.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,a,i=[],s=t;s<r;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),i.push(n[(a=o)>>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},365:e=>{var t,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"===typeof setTimeout?setTimeout:o}catch(e){t=o}try{n="function"===typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var s,l=[],c=!1,u=-1;function d(){c&&s&&(c=!1,s.length?l=s.concat(l):u=-1,l.length&&f())}function f(){if(!c){var e=i(d);c=!0;for(var t=l.length;t;){for(s=l,l=[];++u<t;)s&&s[u].run();u=-1,t=l.length}s=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function h(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||c||i(f)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=h,r.addListener=h,r.once=h,r.off=h,r.removeListener=h,r.removeAllListeners=h,r.emit=h,r.prependListener=h,r.prependOnceListener=h,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},478:(e,t,n)=>{"use strict";const r=n(317),o=n(956),a="function"===typeof Symbol&&"function"===typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.hp=l,t.IS=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"===typeof e){if("string"===typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return d(e)}return c(e,t,n)}function c(e,t,n){if("string"===typeof e)return function(e,t){"string"===typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if($(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if($(e,ArrayBuffer)||e&&$(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!==typeof SharedArrayBuffer&&($(e,SharedArrayBuffer)||e&&$(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"===typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|h(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!==typeof e.length||G(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!==typeof Symbol&&null!=Symbol.toPrimitive&&"function"===typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!==typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function d(e){return u(e),s(e<0?0:0|h(e))}function f(e){const t=e.length<0?0:0|h(e.length),n=s(t);for(let r=0;r<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('"length" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function h(e){if(e>=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||$(e,ArrayBuffer))return e.byteLength;if("string"!==typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Q(e).length;default:if(o)return r?-1:V(e).length;t=(""+t).toLowerCase(),o=!0}}function v(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return N(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return C(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,o){if(0===e.length)return-1;if("string"===typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),G(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"===typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"===typeof t)return t&=255,"function"===typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){let a,i=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(a=n;a<s;a++)if(c(e,a)===c(t,-1===r?0:a-r)){if(-1===r&&(r=a),a-r+1===l)return r*i}else-1!==r&&(a-=a-r),r=-1}else for(n+l>s&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let r=0;r<l;r++)if(c(e,a+r)!==c(t,r)){n=!1;break}if(n)return a}return-1}function w(e,t,n,r){n=Number(n)||0;const o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;const a=t.length;let i;for(r>a/2&&(r=a/2),i=0;i<r;++i){const r=parseInt(t.substr(2*i,2),16);if(G(r))return i;e[n+i]=r}return i}function x(e,t,n,r){return K(V(t,e.length-n),e,n,r)}function k(e,t,n,r){return K(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return K(Q(t),e,n,r)}function E(e,t,n,r){return K(function(e,t){let n,r,o;const a=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,o=n%256,a.push(o),a.push(r);return a}(t,e.length-n),e,n,r)}function C(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function N(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o<n;){const t=e[o];let a=null,i=t>239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:n=e[o+1],128===(192&n)&&(l=(31&t)<<6|63&n,l>127&&(a=l));break;case 3:n=e[o+1],r=e[o+2],128===(192&n)&&128===(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=e[o+1],r=e[o+2],s=e[o+3],128===(192&n)&&128===(192&r)&&128===(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=i}return function(e){const t=e.length;if(t<=j)return String.fromCharCode.apply(String,e);let n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=j));return n}(r)}l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||"undefined"===typeof console||"function"!==typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return u(e),e<=0?s(e):void 0!==t?"string"===typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return d(e)},l.allocUnsafeSlow=function(e){return d(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),$(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let o=0,a=Math.min(n,r);o<a;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let o=0;for(n=0;n<e.length;++n){let t=e[n];if($(t,Uint8Array))o+t.length>r.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?"":0===arguments.length?N(this,0,e):v.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e="";const n=t.IS;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let a=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const s=Math.min(a,i),c=this.slice(r,o),u=e.slice(t,n);for(let l=0;l<s;++l)if(c[l]!==u[l]){a=c[l],i=u[l];break}return a<i?-1:i<a?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return y(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return y(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"===typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let a=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return x(this,e,t,n);case"ascii":case"latin1":case"binary":return k(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const j=4096;function D(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function P(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function T(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let o="";for(let a=t;a<n;++a)o+=X[e[a]];return o}function _(e,t,n){const r=e.slice(t,n);let o="";for(let a=0;a<r.length-1;a+=2)o+=String.fromCharCode(r[a]+256*r[a+1]);return o}function O(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,r,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<a)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function R(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function A(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n+7]=a,a>>=8,e[n+6]=a,a>>=8,e[n+5]=a,a>>=8,e[n+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function L(e,t,n,r,o,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function I(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function F(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<<BigInt(32))})),l.prototype.readBigUInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<<BigInt(32))+BigInt(o)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=t,o=1,a=this[e+--r];for(;r>0&&(o*=256);)a+=this[e+--r]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,a=0;for(this[t]=255&e;++a<n&&(o*=256);)this[t+a]=e/o&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=0,a=1,i=0;for(this[t]=255&e;++o<n&&(a*=256);)e<0&&0===i&&0!==this[t+o-1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=n-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return I(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return I(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return F(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return F(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);const o=r-n;return this===e&&"function"===typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},l.prototype.fill=function(e,t,n,r){if("string"===typeof e){if("string"===typeof t?(r=t,t=0,n=this.length):"string"===typeof n&&(r=n,n=this.length),void 0!==r&&"string"!==typeof r)throw new TypeError("encoding must be a string");if("string"===typeof r&&!l.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){const t=e.charCodeAt(0);("utf8"===r&&t<128||"latin1"===r)&&(e=t)}}else"number"===typeof e?e&=255:"boolean"===typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;let o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"===typeof e)for(o=t;o<n;++o)this[o]=e;else{const a=l.isBuffer(e)?e:l.from(e,r),i=a.length;if(0===i)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<n-t;++o)this[o+t]=a[o%i]}return this};const z={};function B(e,t,n){z[e]=class extends n{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name="".concat(this.name," [").concat(e,"]"),this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}}function H(e){let t="",n=e.length;const r="-"===e[0]?1:0;for(;n>=r+4;n-=3)t="_".concat(e.slice(n-3,n)).concat(t);return"".concat(e.slice(0,n)).concat(t)}function U(e,t,n,r,o,a){if(e>n||e<t){const r="bigint"===typeof t?"n":"";let o;throw o=a>3?0===t||t===BigInt(0)?">= 0".concat(r," and < 2").concat(r," ** ").concat(8*(a+1)).concat(r):">= -(2".concat(r," ** ").concat(8*(a+1)-1).concat(r,") and < 2 ** ")+"".concat(8*(a+1)-1).concat(r):">= ".concat(t).concat(r," and <= ").concat(n).concat(r),new z.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,n){Y(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||W(t,e.length-(n+1))}(r,o,a)}function Y(e,t){if("number"!==typeof e)throw new z.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,n){if(Math.floor(e)!==e)throw Y(e,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",">= ".concat(n?1:0," and <= ").concat(t),e)}B("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?"".concat(e," is outside of buffer bounds"):"Attempt to access memory outside buffer bounds"}),RangeError),B("ERR_INVALID_ARG_TYPE",(function(e,t){return'The "'.concat(e,'" argument must be of type number. Received type ').concat(typeof t)}),TypeError),B("ERR_OUT_OF_RANGE",(function(e,t,n){let r='The value of "'.concat(e,'" is out of range.'),o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=H(String(n)):"bigint"===typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=H(o)),o+="n"),r+=" It must be ".concat(t,". Received ").concat(o),r}),RangeError);const q=/[^+/0-9A-Za-z-_]/g;function V(e,t){let n;t=t||1/0;const r=e.length;let o=null;const a=[];for(let i=0;i<r;++i){if(n=e.charCodeAt(i),n>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&a.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function Q(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;e.length%4!==0;)e+="=";return e}(e))}function K(e,t,n,r){let o;for(o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function $(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function G(e){return e!==e}const X=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function J(e){return"undefined"===typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},483:(e,t,n)=>{"use strict";e.exports=n(592)},556:(e,t,n)=>{"use strict";var r=n(557),o=n(483),a=n(998);function i(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function l(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!==(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function u(e){if(l(e)!==e)throw Error(i(188))}function d(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e;for(e=e.child;null!==e;){if(null!==(t=d(e)))return t;e=e.sibling}return null}var f=Object.assign,p=Symbol.for("react.element"),h=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),v=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),b=Symbol.for("react.provider"),w=Symbol.for("react.consumer"),x=Symbol.for("react.context"),k=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),C=Symbol.for("react.memo"),N=Symbol.for("react.lazy");Symbol.for("react.scope");var j=Symbol.for("react.activity");Symbol.for("react.legacy_hidden"),Symbol.for("react.tracing_marker");var D=Symbol.for("react.memo_cache_sentinel");Symbol.for("react.view_transition");var P=Symbol.iterator;function T(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=P&&e[P]||e["@@iterator"])?e:null}var _=Symbol.for("react.client.reference");function O(e){if(null==e)return null;if("function"===typeof e)return e.$$typeof===_?null:e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case v:return"Fragment";case y:return"Profiler";case g:return"StrictMode";case S:return"Suspense";case E:return"SuspenseList";case j:return"Activity"}if("object"===typeof e)switch(e.$$typeof){case m:return"Portal";case x:return(e.displayName||"Context")+".Provider";case w:return(e._context.displayName||"Context")+".Consumer";case k:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case C:return null!==(t=e.displayName||null)?t:O(e.type)||"Memo";case N:t=e._payload,e=e._init;try{return O(e(t))}catch(n){}}return null}var M=Array.isArray,R=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L={pending:!1,data:null,method:null,action:null},I=[],F=-1;function z(e){return{current:e}}function B(e){0>F||(e.current=I[F],I[F]=null,F--)}function H(e,t){F++,I[F]=e.current,e.current=t}var U=z(null),Y=z(null),W=z(null),q=z(null);function V(e,t){switch(H(W,t),H(Y,e),H(U,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(U),H(U,e)}function Q(){B(U),B(Y),B(W)}function K(e){null!==e.memoizedState&&H(q,e);var t=U.current,n=ad(t,e.type);t!==n&&(H(Y,e),H(U,n))}function $(e){Y.current===e&&(B(U),B(Y)),q.current===e&&(B(q),Kd._currentValue=L)}var G=Object.prototype.hasOwnProperty,X=r.unstable_scheduleCallback,J=r.unstable_cancelCallback,Z=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,se=r.unstable_IdlePriority,le=r.log,ce=r.unstable_setDisableYieldValue,ue=null,de=null;function fe(e){if("function"===typeof le&&ce(e),de&&"function"===typeof de.setStrictMode)try{de.setStrictMode(ue,e)}catch(t){}}var pe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(he(e)/me|0)|0},he=Math.log,me=Math.LN2;var ve=256,ge=4194304;function ye(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function be(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var s=134217727&r;return 0!==s?0!==(r=s&~a)?o=ye(r):0!==(i&=s)?o=ye(i):n||0!==(n=s&~e)&&(o=ye(n)):0!==(s=r&~a)?o=ye(s):0!==i?o=ye(i):n||0!==(n=r&~e)&&(o=ye(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&0!==(4194048&n))?t:o}function we(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function xe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ke(){var e=ve;return 0===(4194048&(ve<<=1))&&(ve=256),e}function Se(){var e=ge;return 0===(62914560&(ge<<=1))&&(ge=4194304),e}function Ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ce(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ne(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-pe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function je(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-pe(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function De(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Pe(e){return 2<(e&=-e)?8<e?0!==(134217727&e)?32:268435456:8:2}function Te(){var e=A.p;return 0!==e?e:void 0===(e=window.event)?32:uf(e.type)}var _e=Math.random().toString(36).slice(2),Oe="__reactFiber$"+_e,Me="__reactProps$"+_e,Re="__reactContainer$"+_e,Ae="__reactEvents$"+_e,Le="__reactListeners$"+_e,Ie="__reactHandles$"+_e,Fe="__reactResources$"+_e,ze="__reactMarker$"+_e;function Be(e){delete e[Oe],delete e[Me],delete e[Ae],delete e[Le],delete e[Ie]}function He(e){var t=e[Oe];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Re]||n[Oe]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=bd(e);null!==e;){if(n=e[Oe])return n;e=bd(e)}return t}n=(e=n).parentNode}return null}function Ue(e){if(e=e[Oe]||e[Re]){var t=e.tag;if(5===t||6===t||13===t||26===t||27===t||3===t)return e}return null}function Ye(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(i(33))}function We(e){var t=e[Fe];return t||(t=e[Fe]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function qe(e){e[ze]=!0}var Ve=new Set,Qe={};function Ke(e,t){$e(e,t),$e(e+"Capture",t)}function $e(e,t){for(Qe[e]=t,e=0;e<t.length;e++)Ve.add(t[e])}var Ge,Xe,Je=RegExp("^[: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]*$"),Ze={},et={};function tt(e,t,n){if(o=t,G.call(et,o)||!G.call(Ze,o)&&(Je.test(o)?et[o]=!0:(Ze[o]=!0,0)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":return void e.removeAttribute(t);case"boolean":var r=t.toLowerCase().slice(0,5);if("data-"!==r&&"aria-"!==r)return void e.removeAttribute(t)}e.setAttribute(t,""+n)}var o}function nt(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(t)}e.setAttribute(t,""+n)}}function rt(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(n)}e.setAttributeNS(t,n,""+r)}}function ot(e){if(void 0===Ge)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Ge=t&&t[1]||"",Xe=-1<n.stack.indexOf("\n    at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+Ge+e+Xe}var at=!1;function it(e,t){if(!e||at)return"";at=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(o){var r=o}Reflect.construct(e,[],n)}else{try{n.call()}catch(a){r=a}e.call(n.prototype)}}else{try{throw Error()}catch(i){r=i}(n=e())&&"function"===typeof n.catch&&n.catch((function(){}))}}catch(s){if(s&&r&&"string"===typeof s.stack)return[s.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,"name");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var a=r.DetermineComponentFrameRoot(),i=a[0],s=a[1];if(i&&s){var l=i.split("\n"),c=s.split("\n");for(o=r=0;r<l.length&&!l[r].includes("DetermineComponentFrameRoot");)r++;for(;o<c.length&&!c[o].includes("DetermineComponentFrameRoot");)o++;if(r===l.length||o===c.length)for(r=l.length-1,o=c.length-1;1<=r&&0<=o&&l[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(l[r]!==c[o]){if(1!==r||1!==o)do{if(r--,0>--o||l[r]!==c[o]){var u="\n"+l[r].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function st(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function lt(e){try{var t="";do{t+=st(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ct(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ut(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ut(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof n&&"function"===typeof n.get&&"function"===typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function ft(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ut(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function pt(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var ht=/[\n"\\]/g;function mt(e){return e.replace(ht,(function(e){return"\\"+e.charCodeAt(0).toString(16)+" "}))}function vt(e,t,n,r,o,a,i,s){e.name="",null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ct(t)):e.value!==""+ct(t)&&(e.value=""+ct(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?yt(e,i,ct(t)):null!=n?yt(e,i,ct(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!==typeof o&&"symbol"!==typeof o),null!=s&&"function"!==typeof s&&"symbol"!==typeof s&&"boolean"!==typeof s?e.name=""+ct(s):e.removeAttribute("name")}function gt(e,t,n,r,o,a,i,s){if(null!=a&&"function"!==typeof a&&"symbol"!==typeof a&&"boolean"!==typeof a&&(e.type=a),null!=t||null!=n){if(!("submit"!==a&&"reset"!==a||void 0!==t&&null!==t))return;n=null!=n?""+ct(n):"",t=null!=t?""+ct(t):n,s||t===e.value||(e.value=t),e.defaultValue=t}r="function"!==typeof(r=null!=r?r:o)&&"symbol"!==typeof r&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i&&(e.name=i)}function yt(e,t,n){"number"===t&&pt(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function bt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ct(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function wt(e,t,n){null==t||((t=""+ct(t))!==e.value&&(e.value=t),null!=n)?e.defaultValue=null!=n?""+ct(n):"":e.defaultValue!==t&&(e.defaultValue=t)}function xt(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(i(92));if(M(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}null==n&&(n=""),t=n}n=ct(t),e.defaultValue=n,(r=e.textContent)===n&&""!==r&&null!==r&&(e.value=r)}function kt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var St=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Et(e,t,n){var r=0===t.indexOf("--");null==n||"boolean"===typeof n||""===n?r?e.setProperty(t,""):"float"===t?e.cssFloat="":e[t]="":r?e.setProperty(t,n):"number"!==typeof n||0===n||St.has(t)?"float"===t?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function Ct(e,t,n){if(null!=t&&"object"!==typeof t)throw Error(i(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf("--")?e.setProperty(r,""):"float"===r?e.cssFloat="":e[r]="");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&Et(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&Et(e,a,t[a])}function Nt(e){if(-1===e.indexOf("-"))return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var jt=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Dt=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Pt(e){return Dt.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}var Tt=null;function _t(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ot=null,Mt=null;function Rt(e){var t=Ue(e);if(t&&(e=t.stateNode)){var n=e[Me]||null;e:switch(e=t.stateNode,t.type){case"input":if(vt(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+mt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[Me]||null;if(!o)throw Error(i(90));vt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&ft(r)}break e;case"textarea":wt(e,n.value,n.defaultValue);break e;case"select":null!=(t=n.value)&&bt(e,!!n.multiple,t,!1)}}}var At=!1;function Lt(e,t,n){if(At)return e(t,n);At=!0;try{return e(t)}finally{if(At=!1,(null!==Ot||null!==Mt)&&(Hc(),Ot&&(t=Ot,e=Mt,Mt=Ot=null,Rt(t),e)))for(t=0;t<e.length;t++)Rt(e[t])}}function It(e,t){var n=e.stateNode;if(null===n)return null;var r=n[Me]||null;if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!==typeof n)throw Error(i(231,t,typeof n));return n}var Ft=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),zt=!1;if(Ft)try{var Bt={};Object.defineProperty(Bt,"passive",{get:function(){zt=!0}}),window.addEventListener("test",Bt,Bt),window.removeEventListener("test",Bt,Bt)}catch(Rf){zt=!1}var Ht=null,Ut=null,Yt=null;function Wt(){if(Yt)return Yt;var e,t,n=Ut,r=n.length,o="value"in Ht?Ht.value:Ht.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Yt=o.slice(e,1<t?1-t:void 0)}function qt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function Vt(){return!0}function Qt(){return!1}function Kt(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?Vt:Qt,this.isPropagationStopped=Qt,this}return f(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vt)},persist:function(){},isPersistent:Vt}),t}var $t,Gt,Xt,Jt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Zt=Kt(Jt),en=f({},Jt,{view:0,detail:0}),tn=Kt(en),nn=f({},en,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:hn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Xt&&(Xt&&"mousemove"===e.type?($t=e.screenX-Xt.screenX,Gt=e.screenY-Xt.screenY):Gt=$t=0,Xt=e),$t)},movementY:function(e){return"movementY"in e?e.movementY:Gt}}),rn=Kt(nn),on=Kt(f({},nn,{dataTransfer:0})),an=Kt(f({},en,{relatedTarget:0})),sn=Kt(f({},Jt,{animationName:0,elapsedTime:0,pseudoElement:0})),ln=Kt(f({},Jt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),cn=Kt(f({},Jt,{data:0})),un={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},dn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},fn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function pn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=fn[e])&&!!t[e]}function hn(){return pn}var mn=Kt(f({},en,{key:function(e){if(e.key){var t=un[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=qt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?dn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:hn,charCode:function(e){return"keypress"===e.type?qt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?qt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),vn=Kt(f({},nn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),gn=Kt(f({},en,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:hn})),yn=Kt(f({},Jt,{propertyName:0,elapsedTime:0,pseudoElement:0})),bn=Kt(f({},nn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),wn=Kt(f({},Jt,{newState:0,oldState:0})),xn=[9,13,27,32],kn=Ft&&"CompositionEvent"in window,Sn=null;Ft&&"documentMode"in document&&(Sn=document.documentMode);var En=Ft&&"TextEvent"in window&&!Sn,Cn=Ft&&(!kn||Sn&&8<Sn&&11>=Sn),Nn=String.fromCharCode(32),jn=!1;function Dn(e,t){switch(e){case"keyup":return-1!==xn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Pn(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Tn=!1;var _n={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function On(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!_n[e.type]:"textarea"===t}function Mn(e,t,n,r){Ot?Mt?Mt.push(r):Mt=[r]:Ot=r,0<(t=Wu(t,"onChange")).length&&(n=new Zt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Rn=null,An=null;function Ln(e){Lu(e,0)}function In(e){if(ft(Ye(e)))return e}function Fn(e,t){if("change"===e)return t}var zn=!1;if(Ft){var Bn;if(Ft){var Hn="oninput"in document;if(!Hn){var Un=document.createElement("div");Un.setAttribute("oninput","return;"),Hn="function"===typeof Un.oninput}Bn=Hn}else Bn=!1;zn=Bn&&(!document.documentMode||9<document.documentMode)}function Yn(){Rn&&(Rn.detachEvent("onpropertychange",Wn),An=Rn=null)}function Wn(e){if("value"===e.propertyName&&In(An)){var t=[];Mn(t,An,e,_t(e)),Lt(Ln,t)}}function qn(e,t,n){"focusin"===e?(Yn(),An=n,(Rn=t).attachEvent("onpropertychange",Wn)):"focusout"===e&&Yn()}function Vn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return In(An)}function Qn(e,t){if("click"===e)return In(t)}function Kn(e,t){if("input"===e||"change"===e)return In(t)}var $n="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t};function Gn(e,t){if($n(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!G.call(t,o)||!$n(e[o],t[o]))return!1}return!0}function Xn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Jn(e,t){var n,r=Xn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Xn(r)}}function Zn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Zn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=pt((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"===typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=pt((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=Ft&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==pt(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Gn(ar,r)||(ar=r,0<(r=Wu(or,"onSelect")).length&&(t=new Zt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function lr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var cr={animationend:lr("Animation","AnimationEnd"),animationiteration:lr("Animation","AnimationIteration"),animationstart:lr("Animation","AnimationStart"),transitionrun:lr("Transition","TransitionRun"),transitionstart:lr("Transition","TransitionStart"),transitioncancel:lr("Transition","TransitionCancel"),transitionend:lr("Transition","TransitionEnd")},ur={},dr={};function fr(e){if(ur[e])return ur[e];if(!cr[e])return e;var t,n=cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return ur[e]=n[t];return e}Ft&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete cr.animationend.animation,delete cr.animationiteration.animation,delete cr.animationstart.animation),"TransitionEvent"in window||delete cr.transitionend.transition);var pr=fr("animationend"),hr=fr("animationiteration"),mr=fr("animationstart"),vr=fr("transitionrun"),gr=fr("transitionstart"),yr=fr("transitioncancel"),br=fr("transitionend"),wr=new Map,xr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function kr(e,t){wr.set(e,t),Ke(t,[e])}xr.push("scrollEnd");var Sr=new WeakMap;function Er(e,t){if("object"===typeof e&&null!==e){var n=Sr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:lt(t)},Sr.set(e,t),t)}return{value:e,source:t,stack:lt(t)}}var Cr=[],Nr=0,jr=0;function Dr(){for(var e=Nr,t=jr=Nr=0;t<e;){var n=Cr[t];Cr[t++]=null;var r=Cr[t];Cr[t++]=null;var o=Cr[t];Cr[t++]=null;var a=Cr[t];if(Cr[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&Or(n,o,a)}}function Pr(e,t,n,r){Cr[Nr++]=e,Cr[Nr++]=t,Cr[Nr++]=n,Cr[Nr++]=r,jr|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function Tr(e,t,n,r){return Pr(e,t,n,r),Mr(e)}function _r(e,t){return Pr(e,null,null,t),Mr(e)}function Or(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-pe(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=536870912|n),a):null}function Mr(e){if(50<Oc)throw Oc=0,Mc=null,Error(i(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var Rr={};function Ar(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lr(e,t,n,r){return new Ar(e,t,n,r)}function Ir(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Fr(e,t){var n=e.alternate;return null===n?((n=Lr(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=65011712&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zr(e,t){e.flags&=65011714;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Br(e,t,n,r,o,a){var s=0;if(r=e,"function"===typeof e)Ir(e)&&(s=1);else if("string"===typeof e)s=function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case"meta":case"title":return!0;case"style":if("string"!==typeof t.precedence||"string"!==typeof t.href||""===t.href)break;return!0;case"link":if("string"!==typeof t.rel||"string"!==typeof t.href||""===t.href||t.onLoad||t.onError)break;return"stylesheet"!==t.rel||(e=t.disabled,"string"===typeof t.precedence&&null==e);case"script":if(t.async&&"function"!==typeof t.async&&"symbol"!==typeof t.async&&!t.onLoad&&!t.onError&&t.src&&"string"===typeof t.src)return!0}return!1}(e,n,U.current)?26:"html"===e||"head"===e||"body"===e?27:5;else e:switch(e){case j:return(e=Lr(31,n,t,o)).elementType=j,e.lanes=a,e;case v:return Hr(n.children,o,a,t);case g:s=8,o|=24;break;case y:return(e=Lr(12,n,t,2|o)).elementType=y,e.lanes=a,e;case S:return(e=Lr(13,n,t,o)).elementType=S,e.lanes=a,e;case E:return(e=Lr(19,n,t,o)).elementType=E,e.lanes=a,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case b:case x:s=10;break e;case w:s=9;break e;case k:s=11;break e;case C:s=14;break e;case N:s=16,r=null;break e}s=29,n=Error(i(130,null===e?"null":typeof e,"")),r=null}return(t=Lr(s,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Hr(e,t,n,r){return(e=Lr(7,e,r,t)).lanes=n,e}function Ur(e,t,n){return(e=Lr(6,e,null,t)).lanes=n,e}function Yr(e,t,n){return(t=Lr(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Wr=[],qr=0,Vr=null,Qr=0,Kr=[],$r=0,Gr=null,Xr=1,Jr="";function Zr(e,t){Wr[qr++]=Qr,Wr[qr++]=Vr,Vr=e,Qr=t}function eo(e,t,n){Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Gr=e;var r=Xr;e=Jr;var o=32-pe(r)-1;r&=~(1<<o),n+=1;var a=32-pe(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xr=1<<32-pe(t)+o|n<<o|r,Jr=a+e}else Xr=1<<a|n<<o|r,Jr=e}function to(e){null!==e.return&&(Zr(e,1),eo(e,1,0))}function no(e){for(;e===Vr;)Vr=Wr[--qr],Wr[qr]=null,Qr=Wr[--qr],Wr[qr]=null;for(;e===Gr;)Gr=Kr[--$r],Kr[$r]=null,Jr=Kr[--$r],Kr[$r]=null,Xr=Kr[--$r],Kr[$r]=null}var ro=null,oo=null,ao=!1,io=null,so=!1,lo=Error(i(519));function co(e){throw vo(Er(Error(i(418,"")),e)),lo}function uo(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[Oe]=e,t[Me]=r,n){case"dialog":Iu("cancel",t),Iu("close",t);break;case"iframe":case"object":case"embed":Iu("load",t);break;case"video":case"audio":for(n=0;n<Ru.length;n++)Iu(Ru[n],t);break;case"source":Iu("error",t);break;case"img":case"image":case"link":Iu("error",t),Iu("load",t);break;case"details":Iu("toggle",t);break;case"input":Iu("invalid",t),gt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0),dt(t);break;case"select":Iu("invalid",t);break;case"textarea":Iu("invalid",t),xt(t,r.value,r.defaultValue,r.children),dt(t)}"string"!==typeof(n=r.children)&&"number"!==typeof n&&"bigint"!==typeof n||t.textContent===""+n||!0===r.suppressHydrationWarning||Gu(t.textContent,n)?(null!=r.popover&&(Iu("beforetoggle",t),Iu("toggle",t)),null!=r.onScroll&&Iu("scroll",t),null!=r.onScrollEnd&&Iu("scrollend",t),null!=r.onClick&&(t.onclick=Xu),t=!0):t=!1,t||co(e)}function fo(e){for(ro=e.return;ro;)switch(ro.tag){case 5:case 13:return void(so=!1);case 27:case 3:return void(so=!0);default:ro=ro.return}}function po(e){if(e!==ro)return!1;if(!ao)return fo(e),ao=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=!("form"!==(t=e.type)&&"button"!==t)||id(e.type,e.memoizedProps)),t=!t),t&&oo&&co(e),fo(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType)if("/$"===(t=e.data)){if(0===n){oo=gd(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++;e=e.nextSibling}oo=null}}else 27===n?(n=oo,pd(e.type)?(e=yd,yd=null,oo=e):oo=n):oo=ro?gd(e.stateNode.nextSibling):null;return!0}function ho(){oo=ro=null,ao=!1}function mo(){var e=io;return null!==e&&(null===bc?bc=e:bc.push.apply(bc,e),io=null),e}function vo(e){null===io?io=[e]:io.push(e)}var go=z(null),yo=null,bo=null;function wo(e,t,n){H(go,t._currentValue),t._currentValue=n}function xo(e){e._currentValue=go.current,B(go)}function ko(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function So(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var s=o.child;a=a.firstContext;e:for(;null!==a;){var l=a;a=o;for(var c=0;c<t.length;c++)if(l.context===t[c]){a.lanes|=n,null!==(l=a.alternate)&&(l.lanes|=n),ko(a.return,n,e),r||(s=null);break e}a=l.next}}else if(18===o.tag){if(null===(s=o.return))throw Error(i(341));s.lanes|=n,null!==(a=s.alternate)&&(a.lanes|=n),ko(s,n,e),s=null}else s=o.child;if(null!==s)s.return=o;else for(s=o;null!==s;){if(s===e){s=null;break}if(null!==(o=s.sibling)){o.return=s.return,s=o;break}s=s.return}o=s}}function Eo(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a)if(0!==(524288&o.flags))a=!0;else if(0!==(262144&o.flags))break;if(10===o.tag){var s=o.alternate;if(null===s)throw Error(i(387));if(null!==(s=s.memoizedProps)){var l=o.type;$n(o.pendingProps.value,s.value)||(null!==e?e.push(l):e=[l])}}else if(o===q.current){if(null===(s=o.alternate))throw Error(i(387));s.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(Kd):e=[Kd])}o=o.return}null!==e&&So(t,e,n,r),t.flags|=262144}function Co(e){for(e=e.firstContext;null!==e;){if(!$n(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function No(e){yo=e,bo=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function jo(e){return Po(yo,e)}function Do(e,t){return null===yo&&No(e),Po(e,t)}function Po(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===bo){if(null===e)throw Error(i(308));bo=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else bo=bo.next=t;return n}var To="undefined"!==typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach((function(e){return e()}))}},_o=r.unstable_scheduleCallback,Oo=r.unstable_NormalPriority,Mo={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Ro(){return{controller:new To,data:new Map,refCount:0}}function Ao(e){e.refCount--,0===e.refCount&&_o(Oo,(function(){e.controller.abort()}))}var Lo=null,Io=0,Fo=0,zo=null;function Bo(){if(0===--Io&&null!==Lo){null!==zo&&(zo.status="fulfilled");var e=Lo;Lo=null,Fo=0,zo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var Ho=R.S;R.S=function(e,t){"object"===typeof t&&null!==t&&"function"===typeof t.then&&function(e,t){if(null===Lo){var n=Lo=[];Io=0,Fo=Pu(),zo={status:"pending",value:void 0,then:function(e){n.push(e)}}}Io++,t.then(Bo,Bo)}(0,t),null!==Ho&&Ho(e,t)};var Uo=z(null);function Yo(){var e=Uo.current;return null!==e?e:rc.pooledCache}function Wo(e,t){H(Uo,null===t?Uo.current:t.pool)}function qo(){var e=Yo();return null===e?null:{parent:Mo._currentValue,pool:e}}var Vo=Error(i(460)),Qo=Error(i(474)),Ko=Error(i(542)),$o={then:function(){}};function Go(e){return"fulfilled"===(e=e.status)||"rejected"===e}function Xo(){}function Jo(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(Xo,Xo),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e;default:if("string"===typeof t.status)t.then(Xo,Xo);else{if(null!==(e=rc)&&100<e.shellSuspendCounter)throw Error(i(482));(e=t).status="pending",e.then((function(e){if("pending"===t.status){var n=t;n.status="fulfilled",n.value=e}}),(function(e){if("pending"===t.status){var n=t;n.status="rejected",n.reason=e}}))}switch(t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e}throw Zo=t,Vo}}var Zo=null;function ea(){if(null===Zo)throw Error(i(459));var e=Zo;return Zo=null,e}function ta(e){if(e===Vo||e===Ko)throw Error(i(483))}var na=!1;function ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function aa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!==(2&nc)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=Mr(e),Or(e,null,n),t}return Pr(e,r,t,n),Mr(e)}function sa(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!==(4194048&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}function la(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var ca=!1;function ua(){if(ca){if(null!==zo)throw zo}}function da(e,t,n,r){ca=!1;var o=e.updateQueue;na=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=-536870913&s.lane,h=p!==s.lane;if(h?(ac&p)===p:(r&p)===p){0!==p&&p===Fo&&(ca=!0),null!==u&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var m=e,v=s;p=t;var g=n;switch(v.tag){case 1:if("function"===typeof(m=v.payload)){d=m.call(g,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null===(p="function"===typeof(m=v.payload)?m.call(g,d,p):m)||void 0===p)break e;d=f({},d,p);break e;case 2:na=!0}}null!==(p=s.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=h,l=d):u=u.next=h,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(h=s).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}}null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),pc|=i,e.lanes=i,e.memoizedState=d}}function fa(e,t){if("function"!==typeof e)throw Error(i(191,e));e.call(t)}function pa(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)fa(n[e],t)}var ha=z(null),ma=z(0);function va(e,t){H(ma,e=dc),H(ha,t),dc=e|t.baseLanes}function ga(){H(ma,dc),H(ha,ha.current)}function ya(){dc=ma.current,B(ha),B(ma)}var ba=0,wa=null,xa=null,ka=null,Sa=!1,Ea=!1,Ca=!1,Na=0,ja=0,Da=null,Pa=0;function Ta(){throw Error(i(321))}function _a(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!$n(e[n],t[n]))return!1;return!0}function Oa(e,t,n,r,o,a){return ba=a,wa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,R.H=null===e||null===e.memoizedState?Vi:Qi,Ca=!1,a=n(r,o),Ca=!1,Ea&&(a=Ra(t,n,r,o)),Ma(e),a}function Ma(e){R.H=qi;var t=null!==xa&&null!==xa.next;if(ba=0,ka=xa=wa=null,Sa=!1,ja=0,Da=null,t)throw Error(i(300));null===e||js||null!==(e=e.dependencies)&&Co(e)&&(js=!0)}function Ra(e,t,n,r){wa=e;var o=0;do{if(Ea&&(Da=null),ja=0,Ea=!1,25<=o)throw Error(i(301));if(o+=1,ka=xa=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}R.H=Ki,a=t(n,r)}while(Ea);return a}function Aa(){var e=R.H,t=e.useState()[0];return t="function"===typeof t.then?Ha(t):t,e=e.useState()[0],(null!==xa?xa.memoizedState:null)!==e&&(wa.flags|=1024),t}function La(){var e=0!==Na;return Na=0,e}function Ia(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Fa(e){if(Sa){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}Sa=!1}ba=0,ka=xa=wa=null,Ea=!1,ja=Na=0,Da=null}function za(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ka?wa.memoizedState=ka=e:ka=ka.next=e,ka}function Ba(){if(null===xa){var e=wa.alternate;e=null!==e?e.memoizedState:null}else e=xa.next;var t=null===ka?wa.memoizedState:ka.next;if(null!==t)ka=t,xa=e;else{if(null===e){if(null===wa.alternate)throw Error(i(467));throw Error(i(310))}e={memoizedState:(xa=e).memoizedState,baseState:xa.baseState,baseQueue:xa.baseQueue,queue:xa.queue,next:null},null===ka?wa.memoizedState=ka=e:ka=ka.next=e}return ka}function Ha(e){var t=ja;return ja+=1,null===Da&&(Da=[]),e=Jo(Da,e,t),t=wa,null===(null===ka?t.memoizedState:ka.next)&&(t=t.alternate,R.H=null===t||null===t.memoizedState?Vi:Qi),e}function Ua(e){if(null!==e&&"object"===typeof e){if("function"===typeof e.then)return Ha(e);if(e.$$typeof===x)return jo(e)}throw Error(i(438,String(e)))}function Ya(e){var t=null,n=wa.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=wa.alternate;null!==r&&(null!==(r=r.updateQueue)&&(null!=(r=r.memoCache)&&(t={data:r.data.map((function(e){return e.slice()})),index:0})))}if(null==t&&(t={data:[],index:0}),null===n&&(n={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=D;return t.index++,n}function Wa(e,t){return"function"===typeof t?t(e):t}function qa(e){return Va(Ba(),xa,e)}function Va(e,t,n){var r=e.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{var l=s=null,c=null,u=t=o.next,d=!1;do{var f=-536870913&u.lane;if(f!==u.lane?(ac&f)===f:(ba&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===Fo&&(d=!0);else{if((ba&p)===p){u=u.next,p===Fo&&(d=!0);continue}f={lane:0,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=f,s=a):c=c.next=f,wa.lanes|=p,pc|=p}f=u.action,Ca&&n(a,f),a=u.hasEagerState?u.eagerState:n(a,f)}else p={lane:f,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=p,s=a):c=c.next=p,wa.lanes|=f,pc|=f;u=u.next}while(null!==u&&u!==t);if(null===c?s=a:c.next=l,!$n(a,e.memoizedState)&&(js=!0,d&&null!==(n=zo)))throw n;e.memoizedState=a,e.baseState=s,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Qa(e){var t=Ba(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);$n(a,t.memoizedState)||(js=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Ka(e,t,n){var r=wa,o=Ba(),a=ao;if(a){if(void 0===n)throw Error(i(407));n=n()}else n=t();var s=!$n((xa||o).memoizedState,n);if(s&&(o.memoizedState=n,js=!0),o=o.queue,gi(2048,8,Xa.bind(null,r,o,e),[e]),o.getSnapshot!==t||s||null!==ka&&1&ka.memoizedState.tag){if(r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,o,n,t),null),null===rc)throw Error(i(349));a||0!==(124&ba)||$a(r,t,n)}return n}function $a(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=wa.updateQueue)?(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ga(e,t,n,r){t.value=n,t.getSnapshot=r,Ja(t)&&Za(e)}function Xa(e,t,n){return n((function(){Ja(t)&&Za(e)}))}function Ja(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!$n(e,n)}catch(r){return!0}}function Za(e){var t=_r(e,2);null!==t&&Lc(t,e,2)}function ei(e){var t=za();if("function"===typeof e){var n=e;if(e=n(),Ca){fe(!0);try{n()}finally{fe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:e},t}function ti(e,t,n,r){return e.baseState=n,Va(e,xa,"function"===typeof r?r:Wa)}function ni(e,t,n,r,o){if(Ui(e))throw Error(i(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==R.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,ri(t,a)):(a.next=n.next,t.pending=n.next=a)}}function ri(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=R.T,i={};R.T=i;try{var s=n(o,r),l=R.S;null!==l&&l(i,s),oi(e,t,s)}catch(c){ii(e,t,c)}finally{R.T=a}}else try{oi(e,t,a=n(o,r))}catch(u){ii(e,t,u)}}function oi(e,t,n){null!==n&&"object"===typeof n&&"function"===typeof n.then?n.then((function(n){ai(e,t,n)}),(function(n){return ii(e,t,n)})):ai(e,t,n)}function ai(e,t,n){t.status="fulfilled",t.value=n,si(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,ri(e,n)))}function ii(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do{t.status="rejected",t.reason=n,si(t),t=t.next}while(t!==r)}e.action=null}function si(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function li(e,t){return t}function ci(e,t){if(ao){var n=rc.formState;if(null!==n){e:{var r=wa;if(ao){if(oo){t:{for(var o=oo,a=so;8!==o.nodeType;){if(!a){o=null;break t}if(null===(o=gd(o.nextSibling))){o=null;break t}}o="F!"===(a=o.data)||"F"===a?o:null}if(o){oo=gd(o.nextSibling),r="F!"===o.data;break e}}co(r)}r=!1}r&&(t=n[0])}}return(n=za()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:t},n.queue=r,n=zi.bind(null,wa,r),r.dispatch=n,r=ei(!1),a=Hi.bind(null,wa,!1,r.queue),o={state:t,dispatch:null,action:e,pending:null},(r=za()).queue=o,n=ni.bind(null,wa,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function ui(e){return di(Ba(),xa,e)}function di(e,t,n){if(t=Va(e,t,li)[0],e=qa(Wa)[0],"object"===typeof t&&null!==t&&"function"===typeof t.then)try{var r=Ha(t)}catch(i){if(i===Vo)throw Ko;throw i}else r=t;var o=(t=Ba()).queue,a=o.dispatch;return n!==t.memoizedState&&(wa.flags|=2048,hi(9,{destroy:void 0,resource:void 0},fi.bind(null,o,n),null)),[r,a,e]}function fi(e,t){e.action=t}function pi(e){var t=Ba(),n=xa;if(null!==n)return di(t,n,e);Ba(),t=t.memoizedState;var r=(n=Ba()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function hi(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=wa.updateQueue)&&(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function mi(){return Ba().memoizedState}function vi(e,t,n,r){var o=za();r=void 0===r?null:r,wa.flags|=e,o.memoizedState=hi(1|t,{destroy:void 0,resource:void 0},n,r)}function gi(e,t,n,r){var o=Ba();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==xa&&null!==r&&_a(r,xa.memoizedState.deps)?o.memoizedState=hi(t,a,n,r):(wa.flags|=e,o.memoizedState=hi(1|t,a,n,r))}function yi(e,t){vi(8390656,8,e,t)}function bi(e,t){gi(2048,8,e,t)}function wi(e,t){return gi(4,2,e,t)}function xi(e,t){return gi(4,4,e,t)}function ki(e,t){if("function"===typeof t){e=e();var n=t(e);return function(){"function"===typeof n?n():t(null)}}if(null!==t&&void 0!==t)return e=e(),t.current=e,function(){t.current=null}}function Si(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,gi(4,4,ki.bind(null,t,e),n)}function Ei(){}function Ci(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&_a(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ni(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&_a(t,r[1]))return r[0];if(r=e(),Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r}function ji(e,t,n){return void 0===n||0!==(1073741824&ba)?e.memoizedState=t:(e.memoizedState=n,e=Ac(),wa.lanes|=e,pc|=e,n)}function Di(e,t,n,r){return $n(n,t)?n:null!==ha.current?(e=ji(e,n,r),$n(e,t)||(js=!0),e):0===(42&ba)?(js=!0,e.memoizedState=n):(e=Ac(),wa.lanes|=e,pc|=e,t)}function Pi(e,t,n,r,o){var a=A.p;A.p=0!==a&&8>a?a:8;var i=R.T,s={};R.T=s,Hi(e,!1,t,n);try{var l=o(),c=R.S;if(null!==c&&c(s,l),null!==l&&"object"===typeof l&&"function"===typeof l.then)Bi(e,t,function(e,t){var n=[],r={status:"pending",value:null,reason:null,then:function(e){n.push(e)}};return e.then((function(){r.status="fulfilled",r.value=t;for(var e=0;e<n.length;e++)(0,n[e])(t)}),(function(e){for(r.status="rejected",r.reason=e,e=0;e<n.length;e++)(0,n[e])(void 0)})),r}(l,r),Rc());else Bi(e,t,r,Rc())}catch(u){Bi(e,t,{then:function(){},status:"rejected",reason:u},Rc())}finally{A.p=a,R.T=i}}function Ti(){}function _i(e,t,n,r){if(5!==e.tag)throw Error(i(476));var o=Oi(e).queue;Pi(e,o,t,L,null===n?Ti:function(){return Mi(e),n(r)})}function Oi(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:L,baseState:L,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:L},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function Mi(e){Bi(e,Oi(e).next.queue,{},Rc())}function Ri(){return jo(Kd)}function Ai(){return Ba().memoizedState}function Li(){return Ba().memoizedState}function Ii(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=Rc(),r=ia(t,e=aa(n),n);return null!==r&&(Lc(r,t,n),sa(r,t,n)),t={cache:Ro()},void(e.payload=t)}t=t.return}}function Fi(e,t,n){var r=Rc();n={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ui(e)?Yi(t,n):null!==(n=Tr(e,t,n,r))&&(Lc(n,e,r),Wi(n,t,r))}function zi(e,t,n){Bi(e,t,n,Rc())}function Bi(e,t,n,r){var o={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ui(e))Yi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,$n(s,i))return Pr(e,t,o,0),null===rc&&Dr(),!1}catch(l){}if(null!==(n=Tr(e,t,o,r)))return Lc(n,e,r),Wi(n,t,r),!0}return!1}function Hi(e,t,n,r){if(r={lane:2,revertLane:Pu(),action:r,hasEagerState:!1,eagerState:null,next:null},Ui(e)){if(t)throw Error(i(479))}else null!==(t=Tr(e,n,r,2))&&Lc(t,e,2)}function Ui(e){var t=e.alternate;return e===wa||null!==t&&t===wa}function Yi(e,t){Ea=Sa=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Wi(e,t,n){if(0!==(4194048&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}var qi={readContext:jo,use:Ua,useCallback:Ta,useContext:Ta,useEffect:Ta,useImperativeHandle:Ta,useLayoutEffect:Ta,useInsertionEffect:Ta,useMemo:Ta,useReducer:Ta,useRef:Ta,useState:Ta,useDebugValue:Ta,useDeferredValue:Ta,useTransition:Ta,useSyncExternalStore:Ta,useId:Ta,useHostTransitionStatus:Ta,useFormState:Ta,useActionState:Ta,useOptimistic:Ta,useMemoCache:Ta,useCacheRefresh:Ta},Vi={readContext:jo,use:Ua,useCallback:function(e,t){return za().memoizedState=[e,void 0===t?null:t],e},useContext:jo,useEffect:yi,useImperativeHandle:function(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,vi(4194308,4,ki.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4194308,4,e,t)},useInsertionEffect:function(e,t){vi(4,2,e,t)},useMemo:function(e,t){var n=za();t=void 0===t?null:t;var r=e();if(Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=za();if(void 0!==n){var o=n(t);if(Ca){fe(!0);try{n(t)}finally{fe(!1)}}}else o=t;return r.memoizedState=r.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},r.queue=e,e=e.dispatch=Fi.bind(null,wa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},za().memoizedState=e},useState:function(e){var t=(e=ei(e)).queue,n=zi.bind(null,wa,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ei,useDeferredValue:function(e,t){return ji(za(),e,t)},useTransition:function(){var e=ei(!1);return e=Pi.bind(null,wa,e.queue,!0,!1),za().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=wa,o=za();if(ao){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===rc)throw Error(i(349));0!==(124&ac)||$a(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,yi(Xa.bind(null,r,a,e),[e]),r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,a,n,t),null),n},useId:function(){var e=za(),t=rc.identifierPrefix;if(ao){var n=Jr;t="\xab"+t+"R"+(n=(Xr&~(1<<32-pe(Xr)-1)).toString(32)+n),0<(n=Na++)&&(t+="H"+n.toString(32)),t+="\xbb"}else t="\xab"+t+"r"+(n=Pa++).toString(32)+"\xbb";return e.memoizedState=t},useHostTransitionStatus:Ri,useFormState:ci,useActionState:ci,useOptimistic:function(e){var t=za();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=Hi.bind(null,wa,!0,n),n.dispatch=t,[e,t]},useMemoCache:Ya,useCacheRefresh:function(){return za().memoizedState=Ii.bind(null,wa)}},Qi={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:qa,useRef:mi,useState:function(){return qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){return Di(Ba(),xa.memoizedState,e,t)},useTransition:function(){var e=qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:ui,useActionState:ui,useOptimistic:function(e,t){return ti(Ba(),0,e,t)},useMemoCache:Ya,useCacheRefresh:Li},Ki={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:Qa,useRef:mi,useState:function(){return Qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){var n=Ba();return null===xa?ji(n,e,t):Di(n,xa.memoizedState,e,t)},useTransition:function(){var e=Qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:pi,useActionState:pi,useOptimistic:function(e,t){var n=Ba();return null!==xa?ti(n,0,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:Ya,useCacheRefresh:Li},$i=null,Gi=0;function Xi(e){var t=Gi;return Gi+=1,null===$i&&($i=[]),Jo($i,e,t)}function Ji(e,t){t=t.props.ref,e.ref=void 0!==t?t:null}function Zi(e,t){if(t.$$typeof===p)throw Error(i(525));throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function es(e){return(0,e._init)(e._payload)}function ts(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=Fr(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=67108866,n):r:(t.flags|=67108866,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=67108866),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Ur(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===v?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"===typeof a&&null!==a&&a.$$typeof===N&&es(a)===t.type)?(Ji(t=o(t,n.props),n),t.return=e,t):(Ji(t=Br(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Hr(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"===typeof t&&""!==t||"number"===typeof t||"bigint"===typeof t)return(t=Ur(""+t,e.mode,n)).return=e,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case h:return Ji(n=Br(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case m:return(t=Yr(t,e.mode,n)).return=e,t;case N:return f(e,t=(0,t._init)(t._payload),n)}if(M(t)||T(t))return(t=Hr(t,e.mode,n,null)).return=e,t;if("function"===typeof t.then)return f(e,Xi(t),n);if(t.$$typeof===x)return f(e,Do(e,t),n);Zi(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"===typeof n&&""!==n||"number"===typeof n||"bigint"===typeof n)return null!==o?null:l(e,t,""+n,r);if("object"===typeof n&&null!==n){switch(n.$$typeof){case h:return n.key===o?c(e,t,n,r):null;case m:return n.key===o?u(e,t,n,r):null;case N:return p(e,t,n=(o=n._init)(n._payload),r)}if(M(n)||T(n))return null!==o?null:d(e,t,n,r,null);if("function"===typeof n.then)return p(e,t,Xi(n),r);if(n.$$typeof===x)return p(e,t,Do(e,n),r);Zi(e,n)}return null}function g(e,t,n,r,o){if("string"===typeof r&&""!==r||"number"===typeof r||"bigint"===typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"===typeof r&&null!==r){switch(r.$$typeof){case h:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case m:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case N:return g(e,t,n,r=(0,r._init)(r._payload),o)}if(M(r)||T(r))return d(t,e=e.get(n)||null,r,o,null);if("function"===typeof r.then)return g(e,t,n,Xi(r),o);if(r.$$typeof===x)return g(e,t,n,Do(t,r),o);Zi(t,r)}return null}function y(l,c,u,d){if("object"===typeof u&&null!==u&&u.type===v&&null===u.key&&(u=u.props.children),"object"===typeof u&&null!==u){switch(u.$$typeof){case h:e:{for(var b=u.key;null!==c;){if(c.key===b){if((b=u.type)===v){if(7===c.tag){n(l,c.sibling),(d=o(c,u.props.children)).return=l,l=d;break e}}else if(c.elementType===b||"object"===typeof b&&null!==b&&b.$$typeof===N&&es(b)===c.type){n(l,c.sibling),Ji(d=o(c,u.props),u),d.return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}u.type===v?((d=Hr(u.props.children,l.mode,d,u.key)).return=l,l=d):(Ji(d=Br(u.type,u.key,u.props,null,l.mode,d),u),d.return=l,l=d)}return s(l);case m:e:{for(b=u.key;null!==c;){if(c.key===b){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(l,c.sibling),(d=o(c,u.children||[])).return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}(d=Yr(u,l.mode,d)).return=l,l=d}return s(l);case N:return y(l,c,u=(b=u._init)(u._payload),d)}if(M(u))return function(o,i,s,l){for(var c=null,u=null,d=i,h=i=0,m=null;null!==d&&h<s.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var v=p(o,d,s[h],l);if(null===v){null===d&&(d=m);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,h),null===u?c=v:u.sibling=v,u=v,d=m}if(h===s.length)return n(o,d),ao&&Zr(o,h),c;if(null===d){for(;h<s.length;h++)null!==(d=f(o,s[h],l))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return ao&&Zr(o,h),c}for(d=r(d);h<s.length;h++)null!==(m=g(d,o,h,s[h],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(o,e)})),ao&&Zr(o,h),c}(l,c,u,d);if(T(u)){if("function"!==typeof(b=T(u)))throw Error(i(150));return function(o,s,l,c){if(null==l)throw Error(i(151));for(var u=null,d=null,h=s,m=s=0,v=null,y=l.next();null!==h&&!y.done;m++,y=l.next()){h.index>m?(v=h,h=null):v=h.sibling;var b=p(o,h,y.value,c);if(null===b){null===h&&(h=v);break}e&&h&&null===b.alternate&&t(o,h),s=a(b,s,m),null===d?u=b:d.sibling=b,d=b,h=v}if(y.done)return n(o,h),ao&&Zr(o,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=f(o,y.value,c))&&(s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Zr(o,m),u}for(h=r(h);!y.done;m++,y=l.next())null!==(y=g(h,o,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),ao&&Zr(o,m),u}(l,c,u=b.call(u),d)}if("function"===typeof u.then)return y(l,c,Xi(u),d);if(u.$$typeof===x)return y(l,c,Do(l,u),d);Zi(l,u)}return"string"===typeof u&&""!==u||"number"===typeof u||"bigint"===typeof u?(u=""+u,null!==c&&6===c.tag?(n(l,c.sibling),(d=o(c,u)).return=l,l=d):(n(l,c),(d=Ur(u,l.mode,d)).return=l,l=d),s(l)):n(l,c)}return function(e,t,n,r){try{Gi=0;var o=y(e,t,n,r);return $i=null,o}catch(i){if(i===Vo||i===Ko)throw i;var a=Lr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var ns=ts(!0),rs=ts(!1),os=z(null),as=null;function is(e){var t=e.alternate;H(us,1&us.current),H(os,e),null===as&&(null===t||null!==ha.current||null!==t.memoizedState)&&(as=e)}function ss(e){if(22===e.tag){if(H(us,us.current),H(os,e),null===as){var t=e.alternate;null!==t&&null!==t.memoizedState&&(as=e)}}else ls()}function ls(){H(us,us.current),H(os,os.current)}function cs(e){B(os),as===e&&(as=null),B(us)}var us=z(0);function ds(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||vd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function fs(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:f({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ps={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.tag=1,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rc(),r=aa(n);r.tag=2,void 0!==t&&null!==t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Lc(t,e,n),sa(t,e,n))}};function hs(e,t,n,r,o,a,i){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Gn(n,r)||!Gn(o,a))}function ms(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ps.enqueueReplaceState(t,t.state,null)}function vs(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=f({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var gs="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function ys(e){gs(e)}function bs(e){console.error(e)}function ws(e){gs(e)}function xs(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout((function(){throw n}))}}function ks(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout((function(){throw r}))}}function Ss(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){xs(e,t)},n}function Es(e){return(e=aa(e)).tag=3,e}function Cs(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"===typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ks(t,n,r)}}var i=n.stateNode;null!==i&&"function"===typeof i.componentDidCatch&&(e.callback=function(){ks(t,n,r),"function"!==typeof o&&(null===Ec?Ec=new Set([this]):Ec.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var Ns=Error(i(461)),js=!1;function Ds(e,t,n,r){t.child=null===e?rs(t,null,n,r):ns(t,e.child,n,r)}function Ps(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var s in r)"ref"!==s&&(i[s]=r[s])}else i=r;return No(t),r=Oa(e,t,n,i,a,o),s=La(),null===e||js?(ao&&s&&to(t),t.flags|=1,Ds(e,t,r,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ts(e,t,n,r,o){if(null===e){var a=n.type;return"function"!==typeof a||Ir(a)||void 0!==a.defaultProps||null!==n.compare?((e=Br(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_s(e,t,a,r,o))}if(a=e.child,!Gs(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Gn)(i,r)&&e.ref===t.ref)return $s(e,t,o)}return t.flags|=1,(e=Fr(a,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Gn(a,r)&&e.ref===t.ref){if(js=!1,t.pendingProps=r=a,!Gs(e,o))return t.lanes=e.lanes,$s(e,t,o);0!==(131072&e.flags)&&(js=!0)}}return As(e,t,n,r,o)}function Os(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(0!==(128&t.flags)){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Ms(e,t,r,n)}if(0===(536870912&n))return t.lanes=t.childLanes=536870912,Ms(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&Wo(0,null!==a?a.cachePool:null),null!==a?va(t,a):ga(),ss(t)}else null!==a?(Wo(0,a.cachePool),va(t,a),ls(),t.memoizedState=null):(null!==e&&Wo(0,null),ga(),ls());return Ds(e,t,o,n),t.child}function Ms(e,t,n,r){var o=Yo();return o=null===o?null:{parent:Mo._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&Wo(0,null),ga(),ss(t),null!==e&&Eo(e,t,r,!0),null}function Rs(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!==typeof n&&"object"!==typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function As(e,t,n,r,o){return No(t),n=Oa(e,t,n,r,void 0,o),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ls(e,t,n,r,o,a){return No(t),t.updateQueue=null,n=Ra(t,r,n,o),Ma(e),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,a),t.child):(Ia(e,t,a),$s(e,t,a))}function Is(e,t,n,r,o){if(No(t),null===t.stateNode){var a=Rr,i=n.contextType;"object"===typeof i&&null!==i&&(a=jo(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=ps,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"===typeof i&&null!==i?jo(i):Rr,a.state=t.memoizedState,"function"===typeof(i=n.getDerivedStateFromProps)&&(fs(t,n,i,r),a.state=t.memoizedState),"function"===typeof n.getDerivedStateFromProps||"function"===typeof a.getSnapshotBeforeUpdate||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||(i=a.state,"function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ps.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ua(),a.state=t.memoizedState),"function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var s=t.memoizedProps,l=vs(n,s);a.props=l;var c=a.context,u=n.contextType;i=Rr,"object"===typeof u&&null!==u&&(i=jo(u));var d=n.getDerivedStateFromProps;u="function"===typeof d||"function"===typeof a.getSnapshotBeforeUpdate,s=t.pendingProps!==s,u||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(s||c!==i)&&ms(t,a,r,i),na=!1;var f=t.memoizedState;a.state=f,da(t,r,a,o),ua(),c=t.memoizedState,s||f!==c||na?("function"===typeof d&&(fs(t,n,d,r),c=t.memoizedState),(l=na||hs(t,n,l,r,f,c,i))?(u||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||("function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"===typeof a.componentDidMount&&(t.flags|=4194308)):("function"===typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=l):("function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),u=vs(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,f=a.context,c=n.contextType,l=Rr,"object"===typeof c&&null!==c&&(l=jo(c)),(c="function"===typeof(s=n.getDerivedStateFromProps)||"function"===typeof a.getSnapshotBeforeUpdate)||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(i!==d||f!==l)&&ms(t,a,r,l),na=!1,f=t.memoizedState,a.state=f,da(t,r,a,o),ua();var p=t.memoizedState;i!==d||f!==p||na||null!==e&&null!==e.dependencies&&Co(e.dependencies)?("function"===typeof s&&(fs(t,n,s,r),p=t.memoizedState),(u=na||hs(t,n,u,r,f,p,l)||null!==e&&null!==e.dependencies&&Co(e.dependencies))?(c||"function"!==typeof a.UNSAFE_componentWillUpdate&&"function"!==typeof a.componentWillUpdate||("function"===typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,l),"function"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,l)),"function"===typeof a.componentDidUpdate&&(t.flags|=4),"function"===typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=l,r=u):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Rs(e,t),r=0!==(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!==typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=ns(t,e.child,null,o),t.child=ns(t,null,n,o)):Ds(e,t,n,o),t.memoizedState=a.state,e=t.child):e=$s(e,t,o),e}function Fs(e,t,n,r){return ho(),t.flags|=256,Ds(e,t,n,r),t.child}var zs={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Bs(e){return{baseLanes:e,cachePool:qo()}}function Hs(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=vc),e}function Us(e,t,n){var r,o=t.pendingProps,a=!1,s=0!==(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!==(2&us.current)),r&&(a=!0,t.flags&=-129),r=0!==(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?is(t):ls(),ao){var l,c=oo;if(l=c){e:{for(l=c,c=so;8!==l.nodeType;){if(!c){c=null;break e}if(null===(l=gd(l.nextSibling))){c=null;break e}}c=l}null!==c?(t.memoizedState={dehydrated:c,treeContext:null!==Gr?{id:Xr,overflow:Jr}:null,retryLane:536870912,hydrationErrors:null},(l=Lr(18,null,null,0)).stateNode=c,l.return=t,t.child=l,ro=t,oo=null,l=!0):l=!1}l||co(t)}if(null!==(c=t.memoizedState)&&null!==(c=c.dehydrated))return vd(c)?t.lanes=32:t.lanes=536870912,null;cs(t)}return c=o.children,o=o.fallback,a?(ls(),c=Ws({mode:"hidden",children:c},a=t.mode),o=Hr(o,a,n,null),c.return=t,o.return=t,c.sibling=o,t.child=c,(a=t.child).memoizedState=Bs(n),a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),Ys(t,c))}if(null!==(l=e.memoizedState)&&null!==(c=l.dehydrated)){if(s)256&t.flags?(is(t),t.flags&=-257,t=qs(e,t,n)):null!==t.memoizedState?(ls(),t.child=e.child,t.flags|=128,t=null):(ls(),a=o.fallback,c=t.mode,o=Ws({mode:"visible",children:o.children},c),(a=Hr(a,c,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,ns(t,e.child,null,n),(o=t.child).memoizedState=Bs(n),o.childLanes=Hs(e,r,n),t.memoizedState=zs,t=a);else if(is(t),vd(c)){if(r=c.nextSibling&&c.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(i(419))).stack="",o.digest=r,vo({value:o,source:null,stack:null}),t=qs(e,t,n)}else if(js||Eo(e,t,n,!1),r=0!==(n&e.childLanes),js||r){if(null!==(r=rc)&&(0!==(o=0!==((o=0!==(42&(o=n&-n))?1:De(o))&(r.suspendedLanes|n))?0:o)&&o!==l.retryLane))throw l.retryLane=o,_r(e,o),Lc(r,e,o),Ns;"$?"===c.data||Qc(),t=qs(e,t,n)}else"$?"===c.data?(t.flags|=192,t.child=e.child,t=null):(e=l.treeContext,oo=gd(c.nextSibling),ro=t,ao=!0,io=null,so=!1,null!==e&&(Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Xr=e.id,Jr=e.overflow,Gr=t),(t=Ys(t,o.children)).flags|=4096);return t}return a?(ls(),a=o.fallback,c=t.mode,u=(l=e.child).sibling,(o=Fr(l,{mode:"hidden",children:o.children})).subtreeFlags=65011712&l.subtreeFlags,null!==u?a=Fr(u,a):(a=Hr(a,c,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(c=e.child.memoizedState)?c=Bs(n):(null!==(l=c.cachePool)?(u=Mo._currentValue,l=l.parent!==u?{parent:u,pool:u}:l):l=qo(),c={baseLanes:c.baseLanes|n,cachePool:l}),a.memoizedState=c,a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),e=(n=e.child).sibling,(n=Fr(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function Ys(e,t){return(t=Ws({mode:"visible",children:t},e.mode)).return=e,e.child=t}function Ws(e,t){return(e=Lr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function qs(e,t,n){return ns(t,e.child,null,n),(e=Ys(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),ko(e.return,t,n)}function Qs(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ks(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Ds(e,t,r.children,n),0!==(2&(r=us.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!==(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vs(e,n,t);else if(19===e.tag)Vs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch(H(us,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ds(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Qs(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ds(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Qs(t,!0,n,null,a);break;case"together":Qs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function $s(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),pc|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(Eo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Fr(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Fr(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Gs(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!Co(e))}function Xs(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)js=!0;else{if(!Gs(e,n)&&0===(128&t.flags))return js=!1,function(e,t,n){switch(t.tag){case 3:V(t,t.stateNode.containerInfo),wo(0,Mo,e.memoizedState.cache),ho();break;case 27:case 5:K(t);break;case 4:V(t,t.stateNode.containerInfo);break;case 10:wo(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(is(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Us(e,t,n):(is(t),null!==(e=$s(e,t,n))?e.sibling:null);is(t);break;case 19:var o=0!==(128&e.flags);if((r=0!==(n&t.childLanes))||(Eo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Ks(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),H(us,us.current),r)break;return null;case 22:case 23:return t.lanes=0,Os(e,t,n);case 24:wo(0,Mo,e.memoizedState.cache)}return $s(e,t,n)}(e,t,n);js=0!==(131072&e.flags)}else js=!1,ao&&0!==(1048576&t.flags)&&eo(t,Qr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!==typeof r){if(void 0!==r&&null!==r){if((o=r.$$typeof)===k){t.tag=11,t=Ps(null,t,r,e,n);break e}if(o===C){t.tag=14,t=Ts(null,t,r,e,n);break e}}throw t=O(r)||r,Error(i(306,t,""))}Ir(r)?(e=vs(r,e),t.tag=1,t=Is(null,t,r,e,n)):(t.tag=0,t=As(null,t,r,e,n))}return t;case 0:return As(e,t,t.type,t.pendingProps,n);case 1:return Is(e,t,r=t.type,o=vs(r,t.pendingProps),n);case 3:e:{if(V(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var s=t.memoizedState;if(r=s.cache,wo(0,Mo,r),r!==a.cache&&So(t,[Mo],n,!0),ua(),r=s.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Fs(e,t,r,n);break e}if(r!==o){vo(o=Er(Error(i(424)),t)),t=Fs(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=gd(e.firstChild),ro=t,ao=!0,io=null,so=!0,n=rs(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ho(),r===o){t=$s(e,t,n);break e}Ds(e,t,r,n)}t=t.child}return t;case 26:return Rs(e,t),null===e?(n=Dd(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd(W.current).createElement(n))[Oe]=t,r[Me]=e,ed(r,n,e),qe(r),t.stateNode=r):t.memoizedState=Dd(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return K(t),null===e&&ao&&(r=t.stateNode=wd(t.type,t.pendingProps,W.current),ro=t,so=!0,o=oo,pd(t.type)?(yd=o,oo=gd(r.firstChild)):oo=o),Ds(e,t,t.pendingProps.children,n),Rs(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[ze])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=gd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,so))?(t.stateNode=r,ro=t,oo=gd(r.firstChild),so=!1,o=!0):o=!1),o||co(t)),K(t),o=t.type,a=t.pendingProps,s=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==s&&id(o,s)&&(t.flags|=32),null!==t.memoizedState&&(o=Oa(e,t,Aa,null,null,n),Kd._currentValue=o),Rs(e,t),Ds(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=gd(e.nextSibling)))return null}return e}(n,t.pendingProps,so))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||co(t)),null;case 13:return Us(e,t,n);case 4:return V(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ns(t,null,r,n):Ds(e,t,r,n),t.child;case 11:return Ps(e,t,t.type,t.pendingProps,n);case 7:return Ds(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ds(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,wo(0,t.type,r.value),Ds(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,No(t),r=r(o=jo(o)),t.flags|=1,Ds(e,t,r,n),t.child;case 14:return Ts(e,t,t.type,t.pendingProps,n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 19:return Ks(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=Ws(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Fr(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Os(e,t,n);case 24:return No(t),r=jo(Mo),null===e?(null===(o=Yo())&&(o=rc,a=Ro(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),wo(0,Mo,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ua()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),wo(0,Mo,r)):(r=a.cache,wo(0,Mo,r),r!==o.cache&&So(t,[Mo],n,!0))),Ds(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Js(e){e.flags|=4}function Zs(e,t){if("stylesheet"!==t.type||0!==(4&t.state.loading))e.flags&=-16777217;else if(e.flags|=16777216,!Hd(t)){if(null!==(t=os.current)&&((4194048&ac)===ac?null!==as:(62914560&ac)!==ac&&0===(536870912&ac)||t!==as))throw Zo=$o,Qo;e.flags|=8192}}function el(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?Se():536870912,e.lanes|=t,gc|=t)}function tl(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function nl(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rl(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return nl(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),xo(Mo),Q(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(po(t)?Js(t):null===e||e.memoizedState.isDehydrated&&0===(256&t.flags)||(t.flags|=1024,mo())),nl(t),null;case 26:return n=t.memoizedState,null===e?(Js(t),null!==n?(nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Js(t),nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217):(e.memoizedProps!==r&&Js(t),nl(t),t.flags&=-16777217),null;case 27:$(t),n=W.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}e=U.current,po(t)?uo(t):(e=wd(o,r,n),t.stateNode=e,Js(t))}return nl(t),null;case 5:if($(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}if(e=U.current,po(t))uo(t);else{switch(o=rd(W.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild);break;case"select":e="string"===typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?e.multiple=!0:r.size&&(e.size=r.size);break;default:e="string"===typeof r.is?o.createElement(n,{is:r.is}):o.createElement(n)}}e[Oe]=t,e[Me]=r;e:for(o=t.child;null!==o;){if(5===o.tag||6===o.tag)e.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;null===o.sibling;){if(null===o.return||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=e;e:switch(ed(e,n,r),n){case"button":case"input":case"select":case"textarea":e=!!r.autoFocus;break e;case"img":e=!0;break e;default:e=!1}e&&Js(t)}}return nl(t),t.flags&=-16777217,null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if("string"!==typeof r&&null===t.stateNode)throw Error(i(166));if(e=W.current,po(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=ro))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[Oe]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||Gu(e.nodeValue,n)))||co(t)}else(e=rd(e).createTextNode(r))[Oe]=t,t.stateNode=e}return nl(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(i(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(i(317));o[Oe]=t}else ho(),0===(128&t.flags)&&(t.memoizedState=null),t.flags|=4;nl(t),o=!1}else o=mo(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return 256&t.flags?(cs(t),t):(cs(t),null)}if(cs(t),0!==(128&t.flags))return t.lanes=n,t;if(n=null!==r,e=null!==e&&null!==e.memoizedState,n){o=null,null!==(r=t.child).alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool);var a=null;null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)}return n!==e&&n&&(t.child.flags|=8192),el(t,t.updateQueue),nl(t),null;case 4:return Q(),null===e&&Bu(t.stateNode.containerInfo),nl(t),null;case 10:return xo(t.type),nl(t),null;case 19:if(B(us),null===(o=t.memoizedState))return nl(t),null;if(r=0!==(128&t.flags),null===(a=o.rendering))if(r)tl(o,!1);else{if(0!==fc||null!==e&&0!==(128&e.flags))for(e=t.child;null!==e;){if(null!==(a=ds(e))){for(t.flags|=128,tl(o,!1),e=a.updateQueue,t.updateQueue=e,el(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)zr(n,e),n=n.sibling;return H(us,1&us.current|2),t.child}e=e.sibling}null!==o.tail&&te()>kc&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ds(a))){if(t.flags|=128,r=!0,e=e.updateQueue,t.updateQueue=e,el(t,e),tl(o,!0),null===o.tail&&"hidden"===o.tailMode&&!a.alternate&&!ao)return nl(t),null}else 2*te()-o.renderingStartTime>kc&&536870912!==n&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=o.last)?e.sibling=a:t.child=a,o.last=a)}return null!==o.tail?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=te(),t.sibling=null,e=us.current,H(us,r?1&e|2:1&e),t):(nl(t),null);case 22:case 23:return cs(t),ya(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?0!==(536870912&n)&&0===(128&t.flags)&&(nl(t),6&t.subtreeFlags&&(t.flags|=8192)):nl(t),null!==(n=t.updateQueue)&&el(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&B(Uo),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),xo(Mo),nl(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}function ol(e,t){switch(no(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return xo(Mo),Q(),0!==(65536&(e=t.flags))&&0===(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return $(t),null;case 13:if(cs(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));ho()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return B(us),null;case 4:return Q(),null;case 10:return xo(t.type),null;case 22:case 23:return cs(t),ya(),null!==e&&B(Uo),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return xo(Mo),null;default:return null}}function al(e,t){switch(no(t),t.tag){case 3:xo(Mo),Q();break;case 26:case 27:case 5:$(t);break;case 4:Q();break;case 13:cs(t);break;case 19:B(us);break;case 10:xo(t.type);break;case 22:case 23:cs(t),ya(),null!==e&&B(Uo);break;case 24:xo(Mo)}}function il(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create,i=n.inst;r=a(),i.destroy=r}n=n.next}while(n!==o)}}catch(s){uu(t,t.return,s)}}function sl(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,s=i.destroy;if(void 0!==s){i.destroy=void 0,o=t;var l=n,c=s;try{c()}catch(u){uu(o,l,u)}}}r=r.next}while(r!==a)}}catch(u){uu(t,t.return,u)}}function ll(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{pa(t,n)}catch(r){uu(e,e.return,r)}}}function cl(e,t,n){n.props=vs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(r){uu(e,t,r)}}function ul(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}"function"===typeof n?e.refCleanup=n(r):n.current=r}}catch(o){uu(e,t,o)}}function dl(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if("function"===typeof r)try{r()}catch(o){uu(e,t,o)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if("function"===typeof n)try{n(null)}catch(a){uu(e,t,a)}else n.current=null}function fl(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&r.focus();break e;case"img":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(o){uu(e,e.return,o)}}function pl(e,t,n){try{var r=e.stateNode;!function(e,t,n,r){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var o=null,a=null,s=null,l=null,c=null,u=null,d=null;for(h in n){var f=n[h];if(n.hasOwnProperty(h)&&null!=f)switch(h){case"checked":case"value":break;case"defaultValue":c=f;default:r.hasOwnProperty(h)||Ju(e,t,h,null,r,f)}}for(var p in r){var h=r[p];if(f=n[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case"type":a=h;break;case"name":o=h;break;case"checked":u=h;break;case"defaultChecked":d=h;break;case"value":s=h;break;case"defaultValue":l=h;break;case"children":case"dangerouslySetInnerHTML":if(null!=h)throw Error(i(137,t));break;default:h!==f&&Ju(e,t,p,h,r,f)}}return void vt(e,s,l,c,u,d,a,o);case"select":for(a in h=s=l=p=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case"value":break;case"multiple":h=c;default:r.hasOwnProperty(a)||Ju(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case"value":p=a;break;case"defaultValue":l=a;break;case"multiple":s=a;default:a!==c&&Ju(e,t,o,a,r,c)}return t=l,n=s,r=h,void(null!=p?bt(e,!!n,p,!1):!!r!==!!n&&(null!=t?bt(e,!!n,t,!0):bt(e,!!n,n?[]:"",!1)));case"textarea":for(l in h=p=null,n)if(o=n[l],n.hasOwnProperty(l)&&null!=o&&!r.hasOwnProperty(l))switch(l){case"value":case"children":break;default:Ju(e,t,l,null,r,o)}for(s in r)if(o=r[s],a=n[s],r.hasOwnProperty(s)&&(null!=o||null!=a))switch(s){case"value":p=o;break;case"defaultValue":h=o;break;case"children":break;case"dangerouslySetInnerHTML":if(null!=o)throw Error(i(91));break;default:o!==a&&Ju(e,t,s,o,r,a)}return void wt(e,p,h);case"option":for(var m in n)if(p=n[m],n.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m))if("selected"===m)e.selected=!1;else Ju(e,t,m,null,r,p);for(c in r)if(p=r[c],h=n[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h))if("selected"===c)e.selected=p&&"function"!==typeof p&&"symbol"!==typeof p;else Ju(e,t,c,p,r,h);return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var v in n)p=n[v],n.hasOwnProperty(v)&&null!=p&&!r.hasOwnProperty(v)&&Ju(e,t,v,null,r,p);for(u in r)if(p=r[u],h=n[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case"children":case"dangerouslySetInnerHTML":if(null!=p)throw Error(i(137,t));break;default:Ju(e,t,u,p,r,h)}return;default:if(Nt(t)){for(var g in n)p=n[g],n.hasOwnProperty(g)&&void 0!==p&&!r.hasOwnProperty(g)&&Zu(e,t,g,void 0,r,p);for(d in r)p=r[d],h=n[d],!r.hasOwnProperty(d)||p===h||void 0===p&&void 0===h||Zu(e,t,d,p,r,h);return}}for(var y in n)p=n[y],n.hasOwnProperty(y)&&null!=p&&!r.hasOwnProperty(y)&&Ju(e,t,y,null,r,p);for(f in r)p=r[f],h=n[f],!r.hasOwnProperty(f)||p===h||null==p&&null==h||Ju(e,t,f,p,r,h)}(r,e.type,n,t),r[Me]=t}catch(o){uu(e,e.return,o)}}function hl(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&pd(e.type)||4===e.tag}function ml(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||hl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&pd(e.type))continue e;if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function vl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?(9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).insertBefore(e,t):((t=9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).appendChild(e),null!==(n=n._reactRootContainer)&&void 0!==n||null!==t.onclick||(t.onclick=Xu));else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode,t=null),null!==(e=e.child)))for(vl(e,t,n),e=e.sibling;null!==e;)vl(e,t,n),e=e.sibling}function gl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(gl(e,t,n),e=e.sibling;null!==e;)gl(e,t,n),e=e.sibling}function yl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ed(t,r,n),t[Oe]=e,t[Me]=n}catch(a){uu(e,e.return,a)}}var bl=!1,wl=!1,xl=!1,kl="function"===typeof WeakSet?WeakSet:Set,Sl=null;function El(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Il(e,n),4&r&&il(5,n);break;case 1:if(Il(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(i){uu(n,n.return,i)}else{var o=vs(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(s){uu(n,n.return,s)}}64&r&&ll(n),512&r&&ul(n,n.return);break;case 3:if(Il(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{pa(e,t)}catch(i){uu(n,n.return,i)}}break;case 27:null===t&&4&r&&yl(n);case 26:case 5:Il(e,n),null===t&&4&r&&fl(n),512&r&&ul(n,n.return);break;case 12:Il(e,n);break;case 13:Il(e,n),4&r&&Tl(e,n),64&r&&(null!==(e=n.memoizedState)&&(null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if("$?"!==e.data||"complete"===n.readyState)t();else{var r=function(){t(),n.removeEventListener("DOMContentLoaded",r)};n.addEventListener("DOMContentLoaded",r),e._reactRetry=r}}(e,n=hu.bind(null,n))));break;case 22:if(!(r=null!==n.memoizedState||bl)){t=null!==t&&null!==t.memoizedState||wl,o=bl;var a=wl;bl=r,(wl=t)&&!a?zl(e,n,0!==(8772&n.subtreeFlags)):Il(e,n),bl=o,wl=a}break;case 30:break;default:Il(e,n)}}function Cl(e){var t=e.alternate;null!==t&&(e.alternate=null,Cl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&Be(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Nl=null,jl=!1;function Dl(e,t,n){for(n=n.child;null!==n;)Pl(e,t,n),n=n.sibling}function Pl(e,t,n){if(de&&"function"===typeof de.onCommitFiberUnmount)try{de.onCommitFiberUnmount(ue,n)}catch(a){}switch(n.tag){case 26:wl||dl(n,t),Dl(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:wl||dl(n,t);var r=Nl,o=jl;pd(n.type)&&(Nl=n.stateNode,jl=!1),Dl(e,t,n),xd(n.stateNode),Nl=r,jl=o;break;case 5:wl||dl(n,t);case 6:if(r=Nl,o=jl,Nl=null,Dl(e,t,n),jl=o,null!==(Nl=r))if(jl)try{(9===Nl.nodeType?Nl.body:"HTML"===Nl.nodeName?Nl.ownerDocument.body:Nl).removeChild(n.stateNode)}catch(i){uu(n,t,i)}else try{Nl.removeChild(n.stateNode)}catch(i){uu(n,t,i)}break;case 18:null!==Nl&&(jl?(hd(9===(e=Nl).nodeType?e.body:"HTML"===e.nodeName?e.ownerDocument.body:e,n.stateNode),Df(e)):hd(Nl,n.stateNode));break;case 4:r=Nl,o=jl,Nl=n.stateNode.containerInfo,jl=!0,Dl(e,t,n),Nl=r,jl=o;break;case 0:case 11:case 14:case 15:wl||sl(2,n,t),wl||sl(4,n,t),Dl(e,t,n);break;case 1:wl||(dl(n,t),"function"===typeof(r=n.stateNode).componentWillUnmount&&cl(n,t,r)),Dl(e,t,n);break;case 21:Dl(e,t,n);break;case 22:wl=(r=wl)||null!==n.memoizedState,Dl(e,t,n),wl=r;break;default:Dl(e,t,n)}}function Tl(e,t){if(null===t.memoizedState&&(null!==(e=t.alternate)&&(null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))))try{Df(e)}catch(n){uu(t,t.return,n)}}function _l(e,t){var n=function(e){switch(e.tag){case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new kl),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new kl),t;default:throw Error(i(435,e.tag))}}(e);t.forEach((function(t){var r=mu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}function Ol(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 27:if(pd(l.type)){Nl=l.stateNode,jl=!1;break e}break;case 5:Nl=l.stateNode,jl=!1;break e;case 3:case 4:Nl=l.stateNode.containerInfo,jl=!0;break e}l=l.return}if(null===Nl)throw Error(i(160));Pl(a,s,o),Nl=null,jl=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)Rl(t,e),t=t.sibling}var Ml=null;function Rl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ol(t,e),Al(e),4&r&&(sl(3,e,e.return),il(3,e),sl(5,e,e.return));break;case 1:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),64&r&&bl&&(null!==(e=e.updateQueue)&&(null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r))));break;case 26:var o=Ml;if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case"title":(!(a=o.getElementsByTagName("title")[0])||a[ze]||a[Oe]||"http://www.w3.org/2000/svg"===a.namespaceURI||a.hasAttribute("itemprop"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector("head > title"))),ed(a,r,n),a[Oe]=e,qe(a),r=a;break e;case"link":var s=zd("link","href",o).get(r+(n.href||""));if(s)for(var l=0;l<s.length;l++)if((a=s[l]).getAttribute("href")===(null==n.href||""===n.href?null:n.href)&&a.getAttribute("rel")===(null==n.rel?null:n.rel)&&a.getAttribute("title")===(null==n.title?null:n.title)&&a.getAttribute("crossorigin")===(null==n.crossOrigin?null:n.crossOrigin)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;case"meta":if(s=zd("meta","content",o).get(r+(n.content||"")))for(l=0;l<s.length;l++)if((a=s[l]).getAttribute("content")===(null==n.content?null:""+n.content)&&a.getAttribute("name")===(null==n.name?null:n.name)&&a.getAttribute("property")===(null==n.property?null:n.property)&&a.getAttribute("http-equiv")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute("charset")===(null==n.charSet?null:n.charSet)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(i(468,r))}a[Oe]=e,qe(a),r=a}e.stateNode=r}else Bd(o,e.type,e.stateNode);else e.stateNode=Rd(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?Bd(o,e.type,e.stateNode):Rd(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&pl(e,e.memoizedProps,n.memoizedProps)}break;case 27:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),null!==n&&4&r&&pl(e,e.memoizedProps,n.memoizedProps);break;case 5:if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),32&e.flags){o=e.stateNode;try{kt(o,"")}catch(h){uu(e,e.return,h)}}4&r&&null!=e.stateNode&&pl(e,o=e.memoizedProps,null!==n?n.memoizedProps:o),1024&r&&(xl=!0);break;case 6:if(Ol(t,e),Al(e),4&r){if(null===e.stateNode)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(h){uu(e,e.return,h)}}break;case 3:if(Fd=null,o=Ml,Ml=Ed(t.containerInfo),Ol(t,e),Ml=o,Al(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Df(t.containerInfo)}catch(h){uu(e,e.return,h)}xl&&(xl=!1,Ll(e));break;case 4:r=Ml,Ml=Ed(e.stateNode.containerInfo),Ol(t,e),Al(e),Ml=r;break;case 12:default:Ol(t,e),Al(e);break;case 13:Ol(t,e),Al(e),8192&e.child.flags&&null!==e.memoizedState!==(null!==n&&null!==n.memoizedState)&&(xc=te()),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=bl,d=wl;if(bl=u||o,wl=d||c,Ol(t,e),wl=d,bl=u,Al(e),8192&r)e:for(t=e.stateNode,t._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||bl||wl||Fl(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)"function"===typeof(s=a.style).setProperty?s.setProperty("display","none","important"):s.display="none";else{l=c.stateNode;var f=c.memoizedProps.style,p=void 0!==f&&null!==f&&f.hasOwnProperty("display")?f.display:null;l.style.display=null==p||"boolean"===typeof p?"":(""+p).trim()}}catch(h){uu(c,c.return,h)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?"":c.memoizedProps}catch(h){uu(c,c.return,h)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&(null!==(r=e.updateQueue)&&(null!==(n=r.retryQueue)&&(r.retryQueue=null,_l(e,n))));break;case 19:Ol(t,e),Al(e),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));case 30:case 21:}}function Al(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(hl(r)){n=r;break}r=r.return}if(null==n)throw Error(i(160));switch(n.tag){case 27:var o=n.stateNode;gl(e,ml(e),o);break;case 5:var a=n.stateNode;32&n.flags&&(kt(a,""),n.flags&=-33),gl(e,ml(e),a);break;case 3:case 4:var s=n.stateNode.containerInfo;vl(e,ml(e),s);break;default:throw Error(i(161))}}catch(l){uu(e,e.return,l)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Ll(e){if(1024&e.subtreeFlags)for(e=e.child;null!==e;){var t=e;Ll(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),e=e.sibling}}function Il(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)El(e,t.alternate,t),t=t.sibling}function Fl(e){for(e=e.child;null!==e;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:sl(4,t,t.return),Fl(t);break;case 1:dl(t,t.return);var n=t.stateNode;"function"===typeof n.componentWillUnmount&&cl(t,t.return,n),Fl(t);break;case 27:xd(t.stateNode);case 26:case 5:dl(t,t.return),Fl(t);break;case 22:null===t.memoizedState&&Fl(t);break;default:Fl(t)}e=e.sibling}}function zl(e,t,n){for(n=n&&0!==(8772&t.subtreeFlags),t=t.child;null!==t;){var r=t.alternate,o=e,a=t,i=a.flags;switch(a.tag){case 0:case 11:case 15:zl(o,a,n),il(4,a);break;case 1:if(zl(o,a,n),"function"===typeof(o=(r=a).stateNode).componentDidMount)try{o.componentDidMount()}catch(c){uu(r,r.return,c)}if(null!==(o=(r=a).updateQueue)){var s=r.stateNode;try{var l=o.shared.hiddenCallbacks;if(null!==l)for(o.shared.hiddenCallbacks=null,o=0;o<l.length;o++)fa(l[o],s)}catch(c){uu(r,r.return,c)}}n&&64&i&&ll(a),ul(a,a.return);break;case 27:yl(a);case 26:case 5:zl(o,a,n),n&&null===r&&4&i&&fl(a),ul(a,a.return);break;case 12:zl(o,a,n);break;case 13:zl(o,a,n),n&&4&i&&Tl(o,a);break;case 22:null===a.memoizedState&&zl(o,a,n),ul(a,a.return);break;case 30:break;default:zl(o,a,n)}t=t.sibling}}function Bl(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&Ao(n))}function Hl(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e))}function Ul(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)Yl(e,t,n,r),t=t.sibling}function Yl(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:Ul(e,t,n,r),2048&o&&il(9,t);break;case 1:case 13:default:Ul(e,t,n,r);break;case 3:Ul(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e)));break;case 12:if(2048&o){Ul(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,s=a.onPostCommit;"function"===typeof s&&s(i,null===t.alternate?"mount":"update",e.passiveEffectDuration,-0)}catch(l){uu(t,t.return,l)}}else Ul(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?Ul(e,t,n,r):ql(e,t):2&a._visibility?Ul(e,t,n,r):(a._visibility|=2,Wl(e,t,n,r,0!==(10256&t.subtreeFlags))),2048&o&&Bl(i,t);break;case 24:Ul(e,t,n,r),2048&o&&Hl(t.alternate,t)}}function Wl(e,t,n,r,o){for(o=o&&0!==(10256&t.subtreeFlags),t=t.child;null!==t;){var a=e,i=t,s=n,l=r,c=i.flags;switch(i.tag){case 0:case 11:case 15:Wl(a,i,s,l,o),il(8,i);break;case 23:break;case 22:var u=i.stateNode;null!==i.memoizedState?2&u._visibility?Wl(a,i,s,l,o):ql(a,i):(u._visibility|=2,Wl(a,i,s,l,o)),o&&2048&c&&Bl(i.alternate,i);break;case 24:Wl(a,i,s,l,o),o&&2048&c&&Hl(i.alternate,i);break;default:Wl(a,i,s,l,o)}t=t.sibling}}function ql(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=e,r=t,o=r.flags;switch(r.tag){case 22:ql(n,r),2048&o&&Bl(r.alternate,r);break;case 24:ql(n,r),2048&o&&Hl(r.alternate,r);break;default:ql(n,r)}t=t.sibling}}var Vl=8192;function Ql(e){if(e.subtreeFlags&Vl)for(e=e.child;null!==e;)Kl(e),e=e.sibling}function Kl(e){switch(e.tag){case 26:Ql(e),e.flags&Vl&&null!==e.memoizedState&&function(e,t,n){if(null===Ud)throw Error(i(475));var r=Ud;if("stylesheet"===t.type&&("string"!==typeof n.media||!1!==matchMedia(n.media).matches)&&0===(4&t.state.loading)){if(null===t.instance){var o=Pd(n.href),a=e.querySelector(Td(o));if(a)return null!==(e=a._p)&&"object"===typeof e&&"function"===typeof e.then&&(r.count++,r=Wd.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,void qe(a);a=e.ownerDocument||e,n=_d(n),(o=kd.get(o))&&Ld(n,o),qe(a=a.createElement("link"));var s=a;s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&0===(3&t.state.loading)&&(r.count++,t=Wd.bind(r),e.addEventListener("load",t),e.addEventListener("error",t))}}(Ml,e.memoizedState,e.memoizedProps);break;case 5:default:Ql(e);break;case 3:case 4:var t=Ml;Ml=Ed(e.stateNode.containerInfo),Ql(e),Ml=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=Vl,Vl=16777216,Ql(e),Vl=t):Ql(e))}}function $l(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do{t=e.sibling,e.sibling=null,e=t}while(null!==e)}}function Gl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)Xl(e),e=e.sibling}function Xl(e){switch(e.tag){case 0:case 11:case 15:Gl(e),2048&e.flags&&sl(9,e,e.return);break;case 3:case 12:default:Gl(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,Jl(e)):Gl(e)}}function Jl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}for(e=e.child;null!==e;){switch((t=e).tag){case 0:case 11:case 15:sl(8,t,t.return),Jl(t);break;case 22:2&(n=t.stateNode)._visibility&&(n._visibility&=-3,Jl(t));break;default:Jl(t)}e=e.sibling}}function Zl(e,t){for(;null!==Sl;){var n=Sl;switch(n.tag){case 0:case 11:case 15:sl(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:Ao(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,Sl=r;else e:for(n=e;null!==Sl;){var o=(r=Sl).sibling,a=r.return;if(Cl(r),r===n){Sl=null;break e}if(null!==o){o.return=a,Sl=o;break e}Sl=a}}}var ec={getCacheForType:function(e){var t=jo(Mo),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n}},tc="function"===typeof WeakMap?WeakMap:Map,nc=0,rc=null,oc=null,ac=0,ic=0,sc=null,lc=!1,cc=!1,uc=!1,dc=0,fc=0,pc=0,hc=0,mc=0,vc=0,gc=0,yc=null,bc=null,wc=!1,xc=0,kc=1/0,Sc=null,Ec=null,Cc=0,Nc=null,jc=null,Dc=0,Pc=0,Tc=null,_c=null,Oc=0,Mc=null;function Rc(){if(0!==(2&nc)&&0!==ac)return ac&-ac;if(null!==R.T){return 0!==Fo?Fo:Pu()}return Te()}function Ac(){0===vc&&(vc=0===(536870912&ac)||ao?ke():536870912);var e=os.current;return null!==e&&(e.flags|=32),vc}function Lc(e,t,n){(e!==rc||2!==ic&&9!==ic)&&null===e.cancelPendingCommit||(Yc(e,0),Bc(e,ac,vc,!1)),Ce(e,n),0!==(2&nc)&&e===rc||(e===rc&&(0===(2&nc)&&(hc|=n),4===fc&&Bc(e,ac,vc,!1)),ku(e))}function Ic(e,t,n){if(0!==(6&nc))throw Error(i(327));for(var r=!n&&0===(124&t)&&0===(t&e.expiredLanes)||we(e,t),o=r?function(e,t){var n=nc;nc|=2;var r=qc(),o=Vc();rc!==e||ac!==t?(Sc=null,kc=te()+500,Yc(e,t)):cc=we(e,t);e:for(;;)try{if(0!==ic&&null!==oc){t=oc;var a=sc;t:switch(ic){case 1:ic=0,sc=null,Zc(e,t,a,1);break;case 2:case 9:if(Go(a)){ic=0,sc=null,Jc(t);break}t=function(){2!==ic&&9!==ic||rc!==e||(ic=7),ku(e)},a.then(t,t);break e;case 3:ic=7;break e;case 4:ic=5;break e;case 7:Go(a)?(ic=0,sc=null,Jc(t)):(ic=0,sc=null,Zc(e,t,a,7));break;case 5:var s=null;switch(oc.tag){case 26:s=oc.memoizedState;case 5:case 27:var l=oc;if(!s||Hd(s)){ic=0,sc=null;var c=l.sibling;if(null!==c)oc=c;else{var u=l.return;null!==u?(oc=u,eu(u)):oc=null}break t}}ic=0,sc=null,Zc(e,t,a,5);break;case 6:ic=0,sc=null,Zc(e,t,a,6);break;case 8:Uc(),fc=6;break e;default:throw Error(i(462))}}Gc();break}catch(d){Wc(e,d)}return bo=yo=null,R.H=r,R.A=o,nc=n,null!==oc?0:(rc=null,ac=0,Dr(),fc)}(e,t):Kc(e,t,!0),a=r;;){if(0===o){cc&&!r&&Bc(e,t,0,!1);break}if(n=e.current.alternate,!a||zc(n)){if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var s=0;else s=0!==(s=-536870913&e.pendingLanes)?s:536870912&s?536870912:0;if(0!==s){t=s;e:{var l=e;o=yc;var c=l.current.memoizedState.isDehydrated;if(c&&(Yc(l,s).flags|=256),2!==(s=Kc(l,s,!1))){if(uc&&!c){l.errorRecoveryDisabledLanes|=a,hc|=a,o=4;break e}a=bc,bc=o,null!==a&&(null===bc?bc=a:bc.push.apply(bc,a))}o=s}if(a=!1,2!==o)continue}}if(1===o){Yc(e,0),Bc(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(i(345));case 4:if((4194048&t)!==t)break;case 6:Bc(r,t,vc,!lc);break e;case 2:bc=null;break;case 3:case 5:break;default:throw Error(i(329))}if((62914560&t)===t&&10<(o=xc+300-te())){if(Bc(r,t,vc,!lc),0!==be(r,0,!0))break e;r.timeoutHandle=ld(Fc.bind(null,r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,2,-0,0),o)}else Fc(r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,0,-0,0)}break}o=Kc(e,t,!1),a=!1}ku(e)}function Fc(e,t,n,r,o,a,s,l,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=t.subtreeFlags)||16785408===(16785408&f))&&(Ud={stylesheets:null,count:0,unsuspend:Yd},Kl(t),null!==(f=function(){if(null===Ud)throw Error(i(475));var e=Ud;return e.stylesheets&&0===e.count&&Vd(e,e.stylesheets),0<e.count?function(t){var n=setTimeout((function(){if(e.stylesheets&&Vd(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}),6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}())))return e.cancelPendingCommit=f(nu.bind(null,e,t,a,n,r,o,s,l,c,d,1,p,h)),void Bc(e,a,s,!u);nu(e,t,a,n,r,o,s,l,c)}function zc(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&(null!==(n=t.updateQueue)&&null!==(n=n.stores)))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!$n(a(),o))return!1}catch(i){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Bc(e,t,n,r){t&=~mc,t&=~hc,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-pe(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&Ne(e,n,t)}function Hc(){return 0!==(6&nc)||(Su(0,!1),!1)}function Uc(){if(null!==oc){if(0===ic)var e=oc.return;else bo=yo=null,Fa(e=oc),$i=null,Gi=0,e=oc;for(;null!==e;)al(e.alternate,e),e=e.return;oc=null}}function Yc(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cd(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),Uc(),rc=e,oc=n=Fr(e.current,null),ac=t,ic=0,sc=null,lc=!1,cc=we(e,t),uc=!1,gc=vc=mc=hc=pc=fc=0,bc=yc=null,wc=!1,0!==(8&t)&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-pe(r),a=1<<o;t|=e[o],r&=~a}return dc=t,Dr(),n}function Wc(e,t){wa=null,R.H=qi,t===Vo||t===Ko?(t=ea(),ic=3):t===Qo?(t=ea(),ic=4):ic=t===Ns?8:null!==t&&"object"===typeof t&&"function"===typeof t.then?6:1,sc=t,null===oc&&(fc=1,xs(e,Er(t,e.current)))}function qc(){var e=R.H;return R.H=qi,null===e?qi:e}function Vc(){var e=R.A;return R.A=ec,e}function Qc(){fc=4,lc||(4194048&ac)!==ac&&null!==os.current||(cc=!0),0===(134217727&pc)&&0===(134217727&hc)||null===rc||Bc(rc,ac,vc,!1)}function Kc(e,t,n){var r=nc;nc|=2;var o=qc(),a=Vc();rc===e&&ac===t||(Sc=null,Yc(e,t)),t=!1;var i=fc;e:for(;;)try{if(0!==ic&&null!==oc){var s=oc,l=sc;switch(ic){case 8:Uc(),i=6;break e;case 3:case 2:case 9:case 6:null===os.current&&(t=!0);var c=ic;if(ic=0,sc=null,Zc(e,s,l,c),n&&cc){i=0;break e}break;default:c=ic,ic=0,sc=null,Zc(e,s,l,c)}}$c(),i=fc;break}catch(u){Wc(e,u)}return t&&e.shellSuspendCounter++,bo=yo=null,nc=r,R.H=o,R.A=a,null===oc&&(rc=null,ac=0,Dr()),i}function $c(){for(;null!==oc;)Xc(oc)}function Gc(){for(;null!==oc&&!Z();)Xc(oc)}function Xc(e){var t=Xs(e.alternate,e,dc);e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Jc(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Ls(n,t,t.pendingProps,t.type,void 0,ac);break;case 11:t=Ls(n,t,t.pendingProps,t.type.render,t.ref,ac);break;case 5:Fa(t);default:al(n,t),t=Xs(n,t=oc=zr(t,dc),dc)}e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Zc(e,t,n,r){bo=yo=null,Fa(t),$i=null,Gi=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&"object"===typeof r&&"function"===typeof r.then){if(null!==(t=n.alternate)&&Eo(t,n,o,!0),null!==(n=os.current)){switch(n.tag){case 13:return null===as?Qc():null===n.alternate&&0===fc&&(fc=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),du(e,r,o)),!1;case 22:return n.flags|=65536,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),du(e,r,o)),!1}throw Error(i(435,n.tag))}return du(e,r,o),Qc(),!1}if(ao)return null!==(t=os.current)?(0===(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==lo&&vo(Er(e=Error(i(422),{cause:r}),n))):(r!==lo&&vo(Er(t=Error(i(423),{cause:r}),n)),(e=e.current.alternate).flags|=65536,o&=-o,e.lanes|=o,r=Er(r,n),la(e,o=Ss(e.stateNode,r,o)),4!==fc&&(fc=2)),!1;var a=Error(i(520),{cause:r});if(a=Er(a,n),null===yc?yc=[a]:yc.push(a),4!==fc&&(fc=2),null===t)return!0;r=Er(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,la(n,e=Ss(n.stateNode,r,e)),!1;case 1:if(t=n.type,a=n.stateNode,0===(128&n.flags)&&("function"===typeof t.getDerivedStateFromError||null!==a&&"function"===typeof a.componentDidCatch&&(null===Ec||!Ec.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,Cs(o=Es(o),e,n,r),la(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,ac))return fc=1,xs(e,Er(n,e.current)),void(oc=null)}catch(a){if(null!==o)throw oc=o,a;return fc=1,xs(e,Er(n,e.current)),void(oc=null)}32768&t.flags?(ao||1===r?e=!0:cc||0!==(536870912&ac)?e=!1:(lc=e=!0,(2===r||9===r||3===r||6===r)&&(null!==(r=os.current)&&13===r.tag&&(r.flags|=16384))),tu(t,e)):eu(t)}function eu(e){var t=e;do{if(0!==(32768&t.flags))return void tu(t,lc);e=t.return;var n=rl(t.alternate,t,dc);if(null!==n)return void(oc=n);if(null!==(t=t.sibling))return void(oc=t);oc=t=e}while(null!==t);0===fc&&(fc=5)}function tu(e,t){do{var n=ol(e.alternate,e);if(null!==n)return n.flags&=32767,void(oc=n);if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling))return void(oc=e);oc=e=n}while(null!==e);fc=6,oc=null}function nu(e,t,n,r,o,a,s,l,c){e.cancelPendingCommit=null;do{su()}while(0!==Cc);if(0!==(6&nc))throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(a=t.lanes|t.childLanes,function(e,t,n,r,o,a){var i=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,l=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-pe(n),d=1<<u;s[u]=0,l[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-536870913)}n&=~d}0!==r&&Ne(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a|=jr,s,l,c),e===rc&&(oc=rc=null,ac=0),jc=t,Nc=e,Dc=n,Pc=a,Tc=o,_c=r,0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?(e.callbackNode=null,e.callbackPriority=0,X(ae,(function(){return lu(),null}))):(e.callbackNode=null,e.callbackPriority=0),r=0!==(13878&t.flags),0!==(13878&t.subtreeFlags)||r){r=R.T,R.T=null,o=A.p,A.p=2,s=nc,nc|=4;try{!function(e,t){if(e=e.containerInfo,td=nf,tr(e=er(e))){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch(v){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var h;f!==n||0!==o&&3!==f.nodeType||(l=s+o),f!==a||0!==r&&3!==f.nodeType||(c=s+r),3===f.nodeType&&(s+=f.nodeValue.length),null!==(h=f.firstChild);)p=f,f=h;for(;;){if(f===e)break t;if(p===n&&++u===o&&(l=s),p===a&&++d===r&&(c=s),null!==(h=f.nextSibling))break;p=(f=p).parentNode}f=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(nd={focusedElem:e,selectionRange:n},nf=!1,Sl=t;null!==Sl;)if(e=(t=Sl).child,0!==(1024&t.subtreeFlags)&&null!==e)e.return=t,Sl=e;else for(;null!==Sl;){switch(a=(t=Sl).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!==(1024&e)&&null!==a){e=void 0,n=t,o=a.memoizedProps,a=a.memoizedState,r=n.stateNode;try{var m=vs(n.type,o,(n.elementType,n.type));e=r.getSnapshotBeforeUpdate(m,a),r.__reactInternalSnapshotBeforeUpdate=e}catch(g){uu(n,n.return,g)}}break;case 3:if(0!==(1024&e))if(9===(n=(e=t.stateNode.containerInfo).nodeType))md(e);else if(1===n)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":md(e);break;default:e.textContent=""}break;default:if(0!==(1024&e))throw Error(i(163))}if(null!==(e=t.sibling)){e.return=t.return,Sl=e;break}Sl=t.return}}(e,t)}finally{nc=s,A.p=o,R.T=r}}Cc=1,ru(),ou(),au()}}function ru(){if(1===Cc){Cc=0;var e=Nc,t=jc,n=0!==(13878&t.flags);if(0!==(13878&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{Rl(t,e);var a=nd,i=er(e.containerInfo),s=a.focusedElem,l=a.selectionRange;if(i!==s&&s&&s.ownerDocument&&Zn(s.ownerDocument.documentElement,s)){if(null!==l&&tr(s)){var c=l.start,u=l.end;if(void 0===u&&(u=c),"selectionStart"in s)s.selectionStart=c,s.selectionEnd=Math.min(u,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=s.textContent.length,m=Math.min(l.start,h),v=void 0===l.end?m:Math.min(l.end,h);!p.extend&&m>v&&(i=v,v=m,m=i);var g=Jn(s,m),y=Jn(s,v);if(g&&y&&(1!==p.rangeCount||p.anchorNode!==g.node||p.anchorOffset!==g.offset||p.focusNode!==y.node||p.focusOffset!==y.offset)){var b=d.createRange();b.setStart(g.node,g.offset),p.removeAllRanges(),m>v?(p.addRange(b),p.extend(y.node,y.offset)):(b.setEnd(y.node,y.offset),p.addRange(b))}}}}for(d=[],p=s;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for("function"===typeof s.focus&&s.focus(),s=0;s<d.length;s++){var w=d[s];w.element.scrollLeft=w.left,w.element.scrollTop=w.top}}nf=!!td,nd=td=null}finally{nc=o,A.p=r,R.T=n}}e.current=t,Cc=2}}function ou(){if(2===Cc){Cc=0;var e=Nc,t=jc,n=0!==(8772&t.flags);if(0!==(8772&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{El(e,t.alternate,t)}finally{nc=o,A.p=r,R.T=n}}Cc=3}}function au(){if(4===Cc||3===Cc){Cc=0,ee();var e=Nc,t=jc,n=Dc,r=_c;0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?Cc=5:(Cc=0,jc=Nc=null,iu(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(Ec=null),Pe(n),t=t.stateNode,de&&"function"===typeof de.onCommitFiberRoot)try{de.onCommitFiberRoot(ue,t,void 0,128===(128&t.current.flags))}catch(l){}if(null!==r){t=R.T,o=A.p,A.p=2,R.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var s=r[i];a(s.value,{componentStack:s.stack})}}finally{R.T=t,A.p=o}}0!==(3&Dc)&&su(),ku(e),o=e.pendingLanes,0!==(4194090&n)&&0!==(42&o)?e===Mc?Oc++:(Oc=0,Mc=e):Oc=0,Su(0,!1)}}function iu(e,t){0===(e.pooledCacheLanes&=t)&&(null!=(t=e.pooledCache)&&(e.pooledCache=null,Ao(t)))}function su(e){return ru(),ou(),au(),lu()}function lu(){if(5!==Cc)return!1;var e=Nc,t=Pc;Pc=0;var n=Pe(Dc),r=R.T,o=A.p;try{A.p=32>n?32:n,R.T=null,n=Tc,Tc=null;var a=Nc,s=Dc;if(Cc=0,jc=Nc=null,Dc=0,0!==(6&nc))throw Error(i(331));var l=nc;if(nc|=4,Xl(a.current),Yl(a,a.current,s,n),nc=l,Su(0,!1),de&&"function"===typeof de.onPostCommitFiberRoot)try{de.onPostCommitFiberRoot(ue,a)}catch(c){}return!0}finally{A.p=o,R.T=r,iu(e,t)}}function cu(e,t,n){t=Er(n,t),null!==(e=ia(e,t=Ss(e.stateNode,t,2),2))&&(Ce(e,2),ku(e))}function uu(e,t,n){if(3===e.tag)cu(e,e,n);else for(;null!==t;){if(3===t.tag){cu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"===typeof t.type.getDerivedStateFromError||"function"===typeof r.componentDidCatch&&(null===Ec||!Ec.has(r))){e=Er(n,e),null!==(r=ia(t,n=Es(2),2))&&(Cs(n,r,t,e),Ce(r,2),ku(r));break}}t=t.return}}function du(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new tc;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(uc=!0,o.add(n),e=fu.bind(null,e,t,n),t.then(e,e))}function fu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,rc===e&&(ac&n)===n&&(4===fc||3===fc&&(62914560&ac)===ac&&300>te()-xc?0===(2&nc)&&Yc(e,0):mc|=n,gc===ac&&(gc=0)),ku(e)}function pu(e,t){0===t&&(t=Se()),null!==(e=_r(e,t))&&(Ce(e,t),ku(e))}function hu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),pu(e,n)}function mu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),pu(e,n)}var vu=null,gu=null,yu=!1,bu=!1,wu=!1,xu=0;function ku(e){e!==gu&&null===e.next&&(null===gu?vu=gu=e:gu=gu.next=e),bu=!0,yu||(yu=!0,dd((function(){0!==(6&nc)?X(re,Eu):Cu()})))}function Su(e,t){if(!wu&&bu){wu=!0;do{for(var n=!1,r=vu;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-pe(42|e)+1)-1,a=201326741&(a&=o&~(i&~s))?201326741&a|1:a?2|a:0}0!==a&&(n=!0,Du(r,a))}else a=ac,0===(3&(a=be(r,r===rc?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||we(r,a)||(n=!0,Du(r,a));r=r.next}}while(n);wu=!1}}function Eu(){Cu()}function Cu(){bu=yu=!1;var e=0;0!==xu&&(function(){var e=window.event;if(e&&"popstate"===e.type)return e!==sd&&(sd=e,!0);return sd=null,!1}()&&(e=xu),xu=0);for(var t=te(),n=null,r=vu;null!==r;){var o=r.next,a=Nu(r,t);0===a?(r.next=null,null===n?vu=o:n.next=o,null===o&&(gu=n)):(n=r,(0!==e||0!==(3&a))&&(bu=!0)),r=o}Su(e,!1)}function Nu(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-62914561&e.pendingLanes;0<a;){var i=31-pe(a),s=1<<i,l=o[i];-1===l?0!==(s&n)&&0===(s&r)||(o[i]=xe(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}if(n=ac,n=be(e,e===(t=rc)?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===ic||9===ic)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&J(r),e.callbackNode=null,e.callbackPriority=0;if(0===(3&n)||we(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&J(r),Pe(n)){case 2:case 8:n=oe;break;case 32:default:n=ae;break;case 268435456:n=se}return r=ju.bind(null,e),n=X(n,r),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&J(r),e.callbackPriority=2,e.callbackNode=null,2}function ju(e,t){if(0!==Cc&&5!==Cc)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(su()&&e.callbackNode!==n)return null;var r=ac;return 0===(r=be(e,e===rc?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(Ic(e,r,t),Nu(e,te()),null!=e.callbackNode&&e.callbackNode===n?ju.bind(null,e):null)}function Du(e,t){if(su())return null;Ic(e,t,!0)}function Pu(){return 0===xu&&(xu=ke()),xu}function Tu(e){return null==e||"symbol"===typeof e||"boolean"===typeof e?null:"function"===typeof e?e:Pt(""+e)}function _u(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var Ou=0;Ou<xr.length;Ou++){var Mu=xr[Ou];kr(Mu.toLowerCase(),"on"+(Mu[0].toUpperCase()+Mu.slice(1)))}kr(pr,"onAnimationEnd"),kr(hr,"onAnimationIteration"),kr(mr,"onAnimationStart"),kr("dblclick","onDoubleClick"),kr("focusin","onFocus"),kr("focusout","onBlur"),kr(vr,"onTransitionRun"),kr(gr,"onTransitionStart"),kr(yr,"onTransitionCancel"),kr(br,"onTransitionEnd"),$e("onMouseEnter",["mouseout","mouseover"]),$e("onMouseLeave",["mouseout","mouseover"]),$e("onPointerEnter",["pointerout","pointerover"]),$e("onPointerLeave",["pointerout","pointerover"]),Ke("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Ke("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Ke("onBeforeInput",["compositionend","keypress","textInput","paste"]),Ke("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ru="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Au=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ru));function Lu(e,t){t=0!==(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}}}}function Iu(e,t){var n=t[Ae];void 0===n&&(n=t[Ae]=new Set);var r=e+"__bubble";n.has(r)||(Hu(t,e,2,!1),n.add(r))}function Fu(e,t,n){var r=0;t&&(r|=4),Hu(n,e,r,t)}var zu="_reactListening"+Math.random().toString(36).slice(2);function Bu(e){if(!e[zu]){e[zu]=!0,Ve.forEach((function(t){"selectionchange"!==t&&(Au.has(t)||Fu(t,!1,e),Fu(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zu]||(t[zu]=!0,Fu("selectionchange",!1,t))}}function Hu(e,t,n,r){switch(uf(t)){case 2:var o=rf;break;case 8:o=of;break;default:o=af}n=o.bind(null,t,n,e),o=void 0,!zt||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Uu(e,t,n,r,o){var a=r;if(0===(1&t)&&0===(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==s;){if(null===(i=He(s)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}s=s.parentNode}}r=r.return}Lt((function(){var r=a,o=_t(n),i=[];e:{var s=wr.get(e);if(void 0!==s){var c=Zt,u=e;switch(e){case"keypress":if(0===qt(n))break e;case"keydown":case"keyup":c=mn;break;case"focusin":u="focus",c=an;break;case"focusout":u="blur",c=an;break;case"beforeblur":case"afterblur":c=an;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=rn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=on;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=gn;break;case pr:case hr:case mr:c=sn;break;case br:c=yn;break;case"scroll":case"scrollend":c=tn;break;case"wheel":c=bn;break;case"copy":case"cut":case"paste":c=ln;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=vn;break;case"toggle":case"beforetoggle":c=wn}var d=0!==(4&t),f=!d&&("scroll"===e||"scrollend"===e),p=d?null!==s?s+"Capture":null:s;d=[];for(var h,m=r;null!==m;){var v=m;if(h=v.stateNode,5!==(v=v.tag)&&26!==v&&27!==v||null===h||null===p||null!=(v=It(m,p))&&d.push(Yu(m,v,h)),f)break;m=m.return}0<d.length&&(s=new c(s,u,null,n,o),i.push({event:s,listeners:d}))}}if(0===(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===Tt||!(u=n.relatedTarget||n.fromElement)||!He(u)&&!u[Re])&&(c||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=r,null!==(u=(u=n.relatedTarget||n.toElement)?He(u):null)&&(f=l(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=rn,v="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(d=vn,v="onPointerLeave",p="onPointerEnter",m="pointer"),f=null==c?s:Ye(c),h=null==u?s:Ye(u),(s=new d(v,m+"leave",c,n,o)).target=f,s.relatedTarget=h,v=null,He(o)===r&&((d=new d(p,m+"enter",u,n,o)).target=h,d.relatedTarget=f,v=d),f=v,c&&u)e:{for(p=u,m=0,h=d=c;h;h=qu(h))m++;for(h=0,v=p;v;v=qu(v))h++;for(;0<m-h;)d=qu(d),m--;for(;0<h-m;)p=qu(p),h--;for(;m--;){if(d===p||null!==p&&d===p.alternate)break e;d=qu(d),p=qu(p)}d=null}else d=null;null!==c&&Vu(i,s,c,d,!1),null!==u&&null!==f&&Vu(i,f,u,d,!0)}if("select"===(c=(s=r?Ye(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var g=Fn;else if(On(s))if(zn)g=Kn;else{g=Vn;var y=qn}else!(c=s.nodeName)||"input"!==c.toLowerCase()||"checkbox"!==s.type&&"radio"!==s.type?r&&Nt(r.elementType)&&(g=Fn):g=Qn;switch(g&&(g=g(e,r))?Mn(i,g,n,o):(y&&y(e,s,r),"focusout"===e&&r&&"number"===s.type&&null!=r.memoizedProps.value&&yt(s,"number",s.value)),y=r?Ye(r):window,e){case"focusin":(On(y)||"true"===y.contentEditable)&&(rr=y,or=r,ar=null);break;case"focusout":ar=or=rr=null;break;case"mousedown":ir=!0;break;case"contextmenu":case"mouseup":case"dragend":ir=!1,sr(i,n,o);break;case"selectionchange":if(nr)break;case"keydown":case"keyup":sr(i,n,o)}var b;if(kn)e:{switch(e){case"compositionstart":var w="onCompositionStart";break e;case"compositionend":w="onCompositionEnd";break e;case"compositionupdate":w="onCompositionUpdate";break e}w=void 0}else Tn?Dn(e,n)&&(w="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(w="onCompositionStart");w&&(Cn&&"ko"!==n.locale&&(Tn||"onCompositionStart"!==w?"onCompositionEnd"===w&&Tn&&(b=Wt()):(Ut="value"in(Ht=o)?Ht.value:Ht.textContent,Tn=!0)),0<(y=Wu(r,w)).length&&(w=new cn(w,e,null,n,o),i.push({event:w,listeners:y}),b?w.data=b:null!==(b=Pn(n))&&(w.data=b))),(b=En?function(e,t){switch(e){case"compositionend":return Pn(t);case"keypress":return 32!==t.which?null:(jn=!0,Nn);case"textInput":return(e=t.data)===Nn&&jn?null:e;default:return null}}(e,n):function(e,t){if(Tn)return"compositionend"===e||!kn&&Dn(e,t)?(e=Wt(),Yt=Ut=Ht=null,Tn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Cn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(w=Wu(r,"onBeforeInput")).length&&(y=new cn("onBeforeInput","beforeinput",null,n,o),i.push({event:y,listeners:w}),y.data=b)),function(e,t,n,r,o){if("submit"===t&&n&&n.stateNode===o){var a=Tu((o[Me]||null).action),i=r.submitter;i&&null!==(t=(t=i[Me]||null)?Tu(t.formAction):i.getAttribute("formAction"))&&(a=t,i=null);var s=new Zt("action","action",null,r,o);e.push({event:s,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(0!==xu){var e=i?_u(o,i):new FormData(o);_i(n,{pending:!0,data:e,method:o.method,action:a},null,e)}}else"function"===typeof a&&(s.preventDefault(),e=i?_u(o,i):new FormData(o),_i(n,{pending:!0,data:e,method:o.method,action:a},a,e))},currentTarget:o}]})}}(i,e,r,n,o)}Lu(i,t)}))}function Yu(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Wu(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=It(e,n))&&r.unshift(Yu(e,o,a)),null!=(o=It(e,t))&&r.push(Yu(e,o,a))),3===e.tag)return r;e=e.return}return[]}function qu(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag&&27!==e.tag);return e||null}function Vu(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(s=s.tag,null!==l&&l===r)break;5!==s&&26!==s&&27!==s||null===c||(l=c,o?null!=(c=It(n,a))&&i.unshift(Yu(n,c,l)):o||null!=(c=It(n,a))&&i.push(Yu(n,c,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Qu=/\r\n?/g,Ku=/\u0000|\uFFFD/g;function $u(e){return("string"===typeof e?e:""+e).replace(Qu,"\n").replace(Ku,"")}function Gu(e,t){return t=$u(t),$u(e)===t}function Xu(){}function Ju(e,t,n,r,o,a){switch(n){case"children":"string"===typeof r?"body"===t||"textarea"===t&&""===r||kt(e,r):("number"===typeof r||"bigint"===typeof r)&&"body"!==t&&kt(e,""+r);break;case"className":nt(e,"class",r);break;case"tabIndex":nt(e,"tabindex",r);break;case"dir":case"role":case"viewBox":case"width":case"height":nt(e,n,r);break;case"style":Ct(e,r,a);break;case"data":if("object"!==t){nt(e,"data",r);break}case"src":case"href":if(""===r&&("a"!==t||"href"!==n)){e.removeAttribute(n);break}if(null==r||"function"===typeof r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"action":case"formAction":if("function"===typeof r){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}if("function"===typeof a&&("formAction"===n?("input"!==t&&Ju(e,t,"name",o.name,o,null),Ju(e,t,"formEncType",o.formEncType,o,null),Ju(e,t,"formMethod",o.formMethod,o,null),Ju(e,t,"formTarget",o.formTarget,o,null)):(Ju(e,t,"encType",o.encType,o,null),Ju(e,t,"method",o.method,o,null),Ju(e,t,"target",o.target,o,null))),null==r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"multiple":e.multiple=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"muted":e.muted=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":case"autoFocus":break;case"xlinkHref":if(null==r||"function"===typeof r||"boolean"===typeof r||"symbol"===typeof r){e.removeAttribute("xlink:href");break}n=Pt(""+r),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""+r):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":!0===r?e.setAttribute(n,""):!1!==r&&null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":null!=r&&"function"!==typeof r&&"symbol"!==typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case"rowSpan":case"start":null==r||"function"===typeof r||"symbol"===typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case"popover":Iu("beforetoggle",e),Iu("toggle",e),tt(e,"popover",r);break;case"xlinkActuate":rt(e,"http://www.w3.org/1999/xlink","xlink:actuate",r);break;case"xlinkArcrole":rt(e,"http://www.w3.org/1999/xlink","xlink:arcrole",r);break;case"xlinkRole":rt(e,"http://www.w3.org/1999/xlink","xlink:role",r);break;case"xlinkShow":rt(e,"http://www.w3.org/1999/xlink","xlink:show",r);break;case"xlinkTitle":rt(e,"http://www.w3.org/1999/xlink","xlink:title",r);break;case"xlinkType":rt(e,"http://www.w3.org/1999/xlink","xlink:type",r);break;case"xmlBase":rt(e,"http://www.w3.org/XML/1998/namespace","xml:base",r);break;case"xmlLang":rt(e,"http://www.w3.org/XML/1998/namespace","xml:lang",r);break;case"xmlSpace":rt(e,"http://www.w3.org/XML/1998/namespace","xml:space",r);break;case"is":tt(e,"is",r);break;case"innerText":case"textContent":break;default:(!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&tt(e,n=jt.get(n)||n,r)}}function Zu(e,t,n,r,o,a){switch(n){case"style":Ct(e,r,a);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"children":"string"===typeof r?kt(e,r):("number"===typeof r||"bigint"===typeof r)&&kt(e,""+r);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":case"innerText":case"textContent":break;default:Qe.hasOwnProperty(n)||("o"!==n[0]||"n"!==n[1]||(o=n.endsWith("Capture"),t=n.slice(2,o?n.length-7:void 0),"function"===typeof(a=null!=(a=e[Me]||null)?a[n]:null)&&e.removeEventListener(t,a,o),"function"!==typeof r)?n in e?e[n]=r:!0===r?e.setAttribute(n,""):tt(e,n,r):("function"!==typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o)))}}function ed(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Iu("error",e),Iu("load",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var s=n[r];if(null!=s)switch(r){case"src":o=!0;break;case"srcSet":a=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,r,s,n,null)}}return a&&Ju(e,t,"srcSet",n.srcSet,n,null),void(o&&Ju(e,t,"src",n.src,n,null));case"input":Iu("invalid",e);var l=r=s=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case"name":a=d;break;case"type":s=d;break;case"checked":c=d;break;case"defaultChecked":u=d;break;case"value":r=d;break;case"defaultValue":l=d;break;case"children":case"dangerouslySetInnerHTML":if(null!=d)throw Error(i(137,t));break;default:Ju(e,t,o,d,n,null)}}return gt(e,r,l,c,u,s,a,!1),void dt(e);case"select":for(a in Iu("invalid",e),o=s=r=null,n)if(n.hasOwnProperty(a)&&null!=(l=n[a]))switch(a){case"value":r=l;break;case"defaultValue":s=l;break;case"multiple":o=l;default:Ju(e,t,a,l,n,null)}return t=r,n=s,e.multiple=!!o,void(null!=t?bt(e,!!o,t,!1):null!=n&&bt(e,!!o,n,!0));case"textarea":for(s in Iu("invalid",e),r=a=o=null,n)if(n.hasOwnProperty(s)&&null!=(l=n[s]))switch(s){case"value":o=l;break;case"defaultValue":a=l;break;case"children":r=l;break;case"dangerouslySetInnerHTML":if(null!=l)throw Error(i(91));break;default:Ju(e,t,s,l,n,null)}return xt(e,o,a,r),void dt(e);case"option":for(c in n)if(n.hasOwnProperty(c)&&null!=(o=n[c]))if("selected"===c)e.selected=o&&"function"!==typeof o&&"symbol"!==typeof o;else Ju(e,t,c,o,n,null);return;case"dialog":Iu("beforetoggle",e),Iu("toggle",e),Iu("cancel",e),Iu("close",e);break;case"iframe":case"object":Iu("load",e);break;case"video":case"audio":for(o=0;o<Ru.length;o++)Iu(Ru[o],e);break;case"image":Iu("error",e),Iu("load",e);break;case"details":Iu("toggle",e);break;case"embed":case"source":case"link":Iu("error",e),Iu("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,u,o,n,null)}return;default:if(Nt(t)){for(d in n)n.hasOwnProperty(d)&&(void 0!==(o=n[d])&&Zu(e,t,d,o,n,void 0));return}}for(l in n)n.hasOwnProperty(l)&&(null!=(o=n[l])&&Ju(e,t,l,o,n,null))}var td=null,nd=null;function rd(e){return 9===e.nodeType?e:e.ownerDocument}function od(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ad(e,t){if(0===e)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return 1===e&&"foreignObject"===t?0:e}function id(e,t){return"textarea"===e||"noscript"===e||"string"===typeof t.children||"number"===typeof t.children||"bigint"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var sd=null;var ld="function"===typeof setTimeout?setTimeout:void 0,cd="function"===typeof clearTimeout?clearTimeout:void 0,ud="function"===typeof Promise?Promise:void 0,dd="function"===typeof queueMicrotask?queueMicrotask:"undefined"!==typeof ud?function(e){return ud.resolve(null).then(e).catch(fd)}:ld;function fd(e){setTimeout((function(){throw e}))}function pd(e){return"head"===e}function hd(e,t){var n=t,r=0,o=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0<r&&8>r){n=r;var i=e.ownerDocument;if(1&n&&xd(i.documentElement),2&n&&xd(i.body),4&n)for(xd(n=i.head),i=n.firstChild;i;){var s=i.nextSibling,l=i.nodeName;i[ze]||"SCRIPT"===l||"STYLE"===l||"LINK"===l&&"stylesheet"===i.rel.toLowerCase()||n.removeChild(i),i=s}}if(0===o)return e.removeChild(a),void Df(t);o--}else"$"===n||"$?"===n||"$!"===n?o++:r=n.charCodeAt(0)-48;else r=0;n=a}while(n);Df(t)}function md(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":md(n),Be(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if("stylesheet"===n.rel.toLowerCase())continue}e.removeChild(n)}}function vd(e){return"$!"===e.data||"$?"===e.data&&"complete"===e.ownerDocument.readyState}function gd(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t||"F!"===t||"F"===t)break;if("/$"===t)return null}}return e}var yd=null;function bd(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}function wd(e,t,n){switch(t=rd(n),e){case"html":if(!(e=t.documentElement))throw Error(i(452));return e;case"head":if(!(e=t.head))throw Error(i(453));return e;case"body":if(!(e=t.body))throw Error(i(454));return e;default:throw Error(i(451))}}function xd(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Be(e)}var kd=new Map,Sd=new Set;function Ed(e){return"function"===typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var Cd=A.d;A.d={f:function(){var e=Cd.f(),t=Hc();return e||t},r:function(e){var t=Ue(e);null!==t&&5===t.tag&&"form"===t.type?Mi(t):Cd.r(e)},D:function(e){Cd.D(e),jd("dns-prefetch",e,null)},C:function(e,t){Cd.C(e,t),jd("preconnect",e,t)},L:function(e,t,n){Cd.L(e,t,n);var r=Nd;if(r&&e&&t){var o='link[rel="preload"][as="'+mt(t)+'"]';"image"===t&&n&&n.imageSrcSet?(o+='[imagesrcset="'+mt(n.imageSrcSet)+'"]',"string"===typeof n.imageSizes&&(o+='[imagesizes="'+mt(n.imageSizes)+'"]')):o+='[href="'+mt(e)+'"]';var a=o;switch(t){case"style":a=Pd(e);break;case"script":a=Od(e)}kd.has(a)||(e=f({rel:"preload",href:"image"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),kd.set(a,e),null!==r.querySelector(o)||"style"===t&&r.querySelector(Td(a))||"script"===t&&r.querySelector(Md(a))||(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}},m:function(e,t){Cd.m(e,t);var n=Nd;if(n&&e){var r=t&&"string"===typeof t.as?t.as:"script",o='link[rel="modulepreload"][as="'+mt(r)+'"][href="'+mt(e)+'"]',a=o;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Od(e)}if(!kd.has(a)&&(e=f({rel:"modulepreload",href:e},t),kd.set(a,e),null===n.querySelector(o))){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Md(a)))return}ed(r=n.createElement("link"),"link",e),qe(r),n.head.appendChild(r)}}},X:function(e,t){Cd.X(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}},S:function(e,t,n){Cd.S(e,t,n);var r=Nd;if(r&&e){var o=We(r).hoistableStyles,a=Pd(e);t=t||"default";var i=o.get(a);if(!i){var s={loading:0,preload:null};if(i=r.querySelector(Td(a)))s.loading=5;else{e=f({rel:"stylesheet",href:e,"data-precedence":t},n),(n=kd.get(a))&&Ld(e,n);var l=i=r.createElement("link");qe(l),ed(l,"link",e),l._p=new Promise((function(e,t){l.onload=e,l.onerror=t})),l.addEventListener("load",(function(){s.loading|=1})),l.addEventListener("error",(function(){s.loading|=2})),s.loading|=4,Ad(i,t,r)}i={type:"stylesheet",instance:i,count:1,state:s},o.set(a,i)}}},M:function(e,t){Cd.M(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0,type:"module"},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}}};var Nd="undefined"===typeof document?null:document;function jd(e,t,n){var r=Nd;if(r&&"string"===typeof t&&t){var o=mt(t);o='link[rel="'+e+'"][href="'+o+'"]',"string"===typeof n&&(o+='[crossorigin="'+n+'"]'),Sd.has(o)||(Sd.add(o),e={rel:e,crossOrigin:n,href:t},null===r.querySelector(o)&&(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}}function Dd(e,t,n,r){var o,a,s,l,c=(c=W.current)?Ed(c):null;if(!c)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return"string"===typeof n.precedence&&"string"===typeof n.href?(t=Pd(n.href),(r=(n=We(c).hoistableStyles).get(t))||(r={type:"style",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if("stylesheet"===n.rel&&"string"===typeof n.href&&"string"===typeof n.precedence){e=Pd(n.href);var u=We(c).hoistableStyles,d=u.get(e);if(d||(c=c.ownerDocument||c,d={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=c.querySelector(Td(e)))&&!u._p&&(d.instance=u,d.state.loading=5),kd.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},kd.set(e,n),u||(o=c,a=e,s=n,l=d.state,o.querySelector('link[rel="preload"][as="style"]['+a+"]")?l.loading=1:(a=o.createElement("link"),l.preload=a,a.addEventListener("load",(function(){return l.loading|=1})),a.addEventListener("error",(function(){return l.loading|=2})),ed(a,"link",s),qe(a),o.head.appendChild(a))))),t&&null===r)throw Error(i(528,""));return d}if(t&&null!==r)throw Error(i(529,""));return null;case"script":return t=n.async,"string"===typeof(n=n.src)&&t&&"function"!==typeof t&&"symbol"!==typeof t?(t=Od(n),(r=(n=We(c).hoistableScripts).get(t))||(r={type:"script",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pd(e){return'href="'+mt(e)+'"'}function Td(e){return'link[rel="stylesheet"]['+e+"]"}function _d(e){return f({},e,{"data-precedence":e.precedence,precedence:null})}function Od(e){return'[src="'+mt(e)+'"]'}function Md(e){return"script[async]"+e}function Rd(e,t,n){if(t.count++,null===t.instance)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+mt(n.href)+'"]');if(r)return t.instance=r,qe(r),r;var o=f({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return qe(r=(e.ownerDocument||e).createElement("style")),ed(r,"style",o),Ad(r,n.precedence,e),t.instance=r;case"stylesheet":o=Pd(n.href);var a=e.querySelector(Td(o));if(a)return t.state.loading|=4,t.instance=a,qe(a),a;r=_d(n),(o=kd.get(o))&&Ld(r,o),qe(a=(e.ownerDocument||e).createElement("link"));var s=a;return s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",r),t.state.loading|=4,Ad(a,n.precedence,e),t.instance=a;case"script":return a=Od(n.src),(o=e.querySelector(Md(a)))?(t.instance=o,qe(o),o):(r=n,(o=kd.get(a))&&Id(r=f({},n),o),qe(o=(e=e.ownerDocument||e).createElement("script")),ed(o,"link",r),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(i(443,t.type))}else"stylesheet"===t.type&&0===(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,Ad(r,n.precedence,e));return t.instance}function Ad(e,t,n){for(var r=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var s=r[i];if(s.dataset.precedence===t)a=s;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function Ld(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function Id(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var Fd=null;function zd(e,t,n){if(null===Fd){var r=new Map,o=Fd=new Map;o.set(n,r)}else(r=(o=Fd).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[ze]||a[Oe]||"link"===e&&"stylesheet"===a.getAttribute("rel"))&&"http://www.w3.org/2000/svg"!==a.namespaceURI){var i=a.getAttribute(t)||"";i=e+i;var s=r.get(i);s?s.push(a):r.set(i,[a])}}return r}function Bd(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,"title"===t?e.querySelector("head > title"):null)}function Hd(e){return"stylesheet"!==e.type||0!==(3&e.state.loading)}var Ud=null;function Yd(){}function Wd(){if(this.count--,0===this.count)if(this.stylesheets)Vd(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}var qd=null;function Vd(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,qd=new Map,t.forEach(Qd,e),qd=null,Wd.call(e))}function Qd(e,t){if(!(4&t.state.loading)){var n=qd.get(e);if(n)var r=n.get(null);else{n=new Map,qd.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a<o.length;a++){var i=o[a];"LINK"!==i.nodeName&&"not all"===i.getAttribute("media")||(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute("data-precedence"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=Wd.bind(this),o.addEventListener("load",r),o.addEventListener("error",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var Kd={$$typeof:x,Provider:null,Consumer:null,_currentValue:L,_currentValue2:L,_threadCount:0};function $d(e,t,n,r,o,a,i,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Ee(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ee(0),this.hiddenUpdates=Ee(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function Gd(e,t,n,r,o,a,i,s,l,c,u,d){return e=new $d(e,t,n,i,s,l,c,d),t=1,!0===a&&(t|=24),a=Lr(3,null,null,t),e.current=a,a.stateNode=e,(t=Ro()).refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ra(a),e}function Xd(e){return e?e=Rr:Rr}function Jd(e,t,n,r,o,a){o=Xd(o),null===r.context?r.context=o:r.pendingContext=o,(r=aa(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ia(e,r,t))&&(Lc(n,0,t),sa(n,e,t))}function Zd(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ef(e,t){Zd(e,t),(e=e.alternate)&&Zd(e,t)}function tf(e){if(13===e.tag){var t=_r(e,67108864);null!==t&&Lc(t,0,67108864),ef(e,67108864)}}var nf=!0;function rf(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=2,af(e,t,n,r)}finally{A.p=a,R.T=o}}function of(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=8,af(e,t,n,r)}finally{A.p=a,R.T=o}}function af(e,t,n,r){if(nf){var o=sf(r);if(null===o)Uu(e,t,r,lf,n),bf(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return ff=wf(ff,e,t,n,r,o),!0;case"dragenter":return pf=wf(pf,e,t,n,r,o),!0;case"mouseover":return hf=wf(hf,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return mf.set(a,wf(mf.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,vf.set(a,wf(vf.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(bf(e,r),4&t&&-1<yf.indexOf(e)){for(;null!==o;){var a=Ue(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ye(a.pendingLanes);if(0!==i){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;i;){var l=1<<31-pe(i);s.entanglements[1]|=l,i&=~l}ku(a),0===(6&nc)&&(kc=te()+500,Su(0,!1))}}break;case 13:null!==(s=_r(a,2))&&Lc(s,0,2),Hc(),ef(a,2)}if(null===(a=sf(r))&&Uu(e,t,r,lf,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Uu(e,t,r,null,n)}}function sf(e){return cf(e=_t(e))}var lf=null;function cf(e){if(lf=null,null!==(e=He(e))){var t=l(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return lf=e,null}function uf(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ne()){case re:return 2;case oe:return 8;case ae:case ie:return 32;case se:return 268435456;default:return 32}default:return 32}}var df=!1,ff=null,pf=null,hf=null,mf=new Map,vf=new Map,gf=[],yf="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function bf(e,t){switch(e){case"focusin":case"focusout":ff=null;break;case"dragenter":case"dragleave":pf=null;break;case"mouseover":case"mouseout":hf=null;break;case"pointerover":case"pointerout":mf.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":vf.delete(t.pointerId)}}function wf(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=Ue(t))&&tf(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function xf(e){var t=He(e.target);if(null!==t){var n=l(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=c(n)))return e.blockedOn=t,void function(e,t){var n=A.p;try{return A.p=e,t()}finally{A.p=n}}(e.priority,(function(){if(13===n.tag){var e=Rc();e=De(e);var t=_r(n,e);null!==t&&Lc(t,0,e),ef(n,e)}}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function kf(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=sf(e.nativeEvent);if(null!==n)return null!==(t=Ue(n))&&tf(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Tt=r,n.target.dispatchEvent(r),Tt=null,t.shift()}return!0}function Sf(e,t,n){kf(e)&&n.delete(t)}function Ef(){df=!1,null!==ff&&kf(ff)&&(ff=null),null!==pf&&kf(pf)&&(pf=null),null!==hf&&kf(hf)&&(hf=null),mf.forEach(Sf),vf.forEach(Sf)}function Cf(e,t){e.blockedOn===t&&(e.blockedOn=null,df||(df=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ef)))}var Nf=null;function jf(e){Nf!==e&&(Nf=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,(function(){Nf===e&&(Nf=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if("function"!==typeof r){if(null===cf(r||n))continue;break}var a=Ue(n);null!==a&&(e.splice(t,3),t-=3,_i(a,{pending:!0,data:o,method:n.method,action:r},r,o))}})))}function Df(e){function t(t){return Cf(t,e)}null!==ff&&Cf(ff,e),null!==pf&&Cf(pf,e),null!==hf&&Cf(hf,e),mf.forEach(t),vf.forEach(t);for(var n=0;n<gf.length;n++){var r=gf[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<gf.length&&null===(n=gf[0]).blockedOn;)xf(n),null===n.blockedOn&&gf.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[Me]||null;if("function"===typeof a)i||jf(n);else if(i){var s=null;if(a&&a.hasAttribute("formAction")){if(o=a,i=a[Me]||null)s=i.formAction;else if(null!==cf(o))continue}else s=i.action;"function"===typeof s?n[r+1]=s:(n.splice(r,3),r-=3),jf(n)}}}function Pf(e){this._internalRoot=e}function Tf(e){this._internalRoot=e}Tf.prototype.render=Pf.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Jd(t.current,Rc(),e,t,null,null)},Tf.prototype.unmount=Pf.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;Jd(e.current,2,null,e,null,null),Hc(),t[Re]=null}},Tf.prototype.unstable_scheduleHydration=function(e){if(e){var t=Te();e={blockedOn:null,target:e,priority:t};for(var n=0;n<gf.length&&0!==t&&t<gf[n].priority;n++);gf.splice(n,0,e),0===n&&xf(e)}};var _f=o.version;if("19.1.0"!==_f)throw Error(i(527,_f,"19.1.0"));A.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if("function"===typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=function(e){var t=e.alternate;if(!t){if(null===(t=l(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return u(o),e;if(a===r)return u(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var s=!1,c=o.child;c;){if(c===n){s=!0,n=o,r=a;break}if(c===r){s=!0,r=o,n=a;break}c=c.sibling}if(!s){for(c=a.child;c;){if(c===n){s=!0,n=a,r=o;break}if(c===r){s=!0,r=a,n=o;break}c=c.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(t),e=null===(e=null!==e?d(e):null)?null:e.stateNode};var Of={bundleType:0,version:"19.1.0",rendererPackageName:"react-dom",currentDispatcherRef:R,reconcilerVersion:"19.1.0"};if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var Mf=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Mf.isDisabled&&Mf.supportsFiber)try{ue=Mf.inject(Of),de=Mf}catch(Af){}}t.createRoot=function(e,t){if(!s(e))throw Error(i(299));var n=!1,r="",o=ys,a=bs,l=ws;return null!==t&&void 0!==t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onUncaughtError&&(o=t.onUncaughtError),void 0!==t.onCaughtError&&(a=t.onCaughtError),void 0!==t.onRecoverableError&&(l=t.onRecoverableError),void 0!==t.unstable_transitionCallbacks&&t.unstable_transitionCallbacks),t=Gd(e,1,!1,null,0,n,r,o,a,l,0,null),e[Re]=t.current,Bu(e),new Pf(t)},t.hydrateRoot=function(e,t,n){if(!s(e))throw Error(i(299));var r=!1,o="",a=ys,l=bs,c=ws,u=null;return null!==n&&void 0!==n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(o=n.identifierPrefix),void 0!==n.onUncaughtError&&(a=n.onUncaughtError),void 0!==n.onCaughtError&&(l=n.onCaughtError),void 0!==n.onRecoverableError&&(c=n.onRecoverableError),void 0!==n.unstable_transitionCallbacks&&n.unstable_transitionCallbacks,void 0!==n.formState&&(u=n.formState)),(t=Gd(e,1,!0,t,0,r,o,a,l,c,0,u)).context=Xd(null),n=t.current,(o=aa(r=De(r=Rc()))).callback=null,ia(n,o,r),n=r,t.current.lanes=n,Ce(t,n),ku(t),e[Re]=t.current,Bu(e),new Tf(t)},t.version="19.1.0"},557:(e,t,n)=>{"use strict";e.exports=n(696)},592:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,v={};function g(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var w=b.prototype=new y;w.constructor=b,m(w,g.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k={H:null,A:null,T:null,S:null,V:null},S=Object.prototype.hasOwnProperty;function E(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function C(e){return"object"===typeof e&&null!==e&&e.$$typeof===n}var N=/\/+/g;function j(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function D(){}function P(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l,c,u=!1;if(null===e)u=!0;else switch(s){case"bigint":case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0;break;case f:return P((u=e._init)(e._payload),t,o,a,i)}}if(u)return i=i(e),u=""===a?"."+j(e,0):a,x(i)?(o="",null!=u&&(o=u.replace(N,"$&/")+"/"),P(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(l=i,c=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(N,"$&/")+"/")+u,i=E(l.type,c,void 0,0,0,l.props)),t.push(i)),1;u=0;var d,h=""===a?".":a+":";if(x(e))for(var m=0;m<e.length;m++)u+=P(a=e[m],t,o,s=h+j(a,m),i);else if("function"===typeof(m=null===(d=e)||"object"!==typeof d?null:"function"===typeof(d=p&&d[p]||d["@@iterator"])?d:null))for(e=m.call(e),m=0;!(a=e.next()).done;)u+=P(a=a.value,t,o,s=h+j(a,m++),i);else if("object"===s){if("function"===typeof e.then)return P(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"===typeof e.status?e.then(D,D):(e.status="pending",e.then((function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)}),(function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)}))),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return u}function T(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function _(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function M(){}t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cloneElement=function(e,t,n){if(null===e||void 0===e)throw Error("The argument must be a React element, but you passed "+e+".");var r=m({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.ref&&void 0,void 0!==t.key&&(o=""+t.key),t)!S.call(t,a)||"key"===a||"__self"===a||"__source"===a||"ref"===a&&void 0===t.ref||(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),s=0;s<a;s++)i[s]=arguments[s+2];r.children=i}return E(e.type,o,void 0,0,0,r)},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:s,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=""+t.key),t)S.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var s=Array(i),l=0;l<i;l++)s[l]=arguments[l+2];o.children=s}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return E(e,a,void 0,0,0,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:_}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.T,n={};k.T=n;try{var r=e(),o=k.S;null!==o&&o(n,r),"object"===typeof r&&null!==r&&"function"===typeof r.then&&r.then(M,O)}catch(a){O(a)}finally{k.T=t}},t.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},t.use=function(e){return k.H.use(e)},t.useActionState=function(e,t,n){return k.H.useActionState(e,t,n)},t.useCallback=function(e,t){return k.H.useCallback(e,t)},t.useContext=function(e){return k.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return k.H.useDeferredValue(e,t)},t.useEffect=function(e,t,n){var r=k.H;if("function"===typeof n)throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,t)},t.useId=function(){return k.H.useId()},t.useImperativeHandle=function(e,t,n){return k.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return k.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return k.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return k.H.useMemo(e,t)},t.useOptimistic=function(e,t){return k.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return k.H.useReducer(e,t,n)},t.useRef=function(e){return k.H.useRef(e)},t.useState=function(e){return k.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return k.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return k.H.useTransition()},t.version="19.1.0"},696:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"===typeof performance&&"function"===typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,p=3,h=!1,m=!1,v=!1,g=!1,y="function"===typeof setTimeout?setTimeout:null,b="function"===typeof clearTimeout?clearTimeout:null,w="undefined"!==typeof setImmediate?setImmediate:null;function x(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(v=!1,x(e),!m)if(null!==r(c))m=!0,E||(E=!0,S());else{var t=r(u);null!==t&&O(k,t.startTime-e)}}var S,E=!1,C=-1,N=5,j=-1;function D(){return!!g||!(t.unstable_now()-j<N)}function P(){if(g=!1,E){var e=t.unstable_now();j=e;var n=!0;try{e:{m=!1,v&&(v=!1,b(C),C=-1),h=!0;var a=p;try{t:{for(x(e),f=r(c);null!==f&&!(f.expirationTime>e&&D());){var i=f.callback;if("function"===typeof i){f.callback=null,p=f.priorityLevel;var s=i(f.expirationTime<=e);if(e=t.unstable_now(),"function"===typeof s){f.callback=s,x(e),n=!0;break t}f===r(c)&&o(c),x(e)}else o(c);f=r(c)}if(null!==f)n=!0;else{var l=r(u);null!==l&&O(k,l.startTime-e),n=!1}}break e}finally{f=null,p=a,h=!1}n=void 0}}finally{n?S():E=!1}}}if("function"===typeof w)S=function(){w(P)};else if("undefined"!==typeof MessageChannel){var T=new MessageChannel,_=T.port2;T.port1.onmessage=P,S=function(){_.postMessage(null)}}else S=function(){y(P,0)};function O(e,n){C=y((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=n}},t.unstable_requestPaint=function(){g=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"===typeof a&&null!==a?a="number"===typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(v?(b(C),C=-1):v=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,E||(E=!0,S()))),e},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},719:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},723:(e,t,n)=>{"use strict";e.exports=n(719)},775:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(556)},808:(e,t,n)=>{"use strict";e.exports=n(276)},904:(e,t,n)=>{"use strict";var r=n(483);function o(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},s=Symbol.for("react.portal");var l=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return"font"===e?"":"string"===typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:s,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=l.T,n=i.p;try{if(l.T=null,i.p=2,e)return e()}finally{l.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){"string"===typeof e&&(t?t="string"===typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:t=null,i.d.C(e,t))},t.prefetchDNS=function(e){"string"===typeof e&&i.d.D(e)},t.preinit=function(e,t){if("string"===typeof e&&t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o="string"===typeof t.integrity?t.integrity:void 0,a="string"===typeof t.fetchPriority?t.fetchPriority:void 0;"style"===n?i.d.S(e,"string"===typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):"script"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:"string"===typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"===typeof e)if("object"===typeof t&&null!==t){if(null==t.as||"script"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if("string"===typeof e&&"object"===typeof t&&null!==t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0,type:"string"===typeof t.type?t.type:void 0,fetchPriority:"string"===typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"===typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"===typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"===typeof t.imageSizes?t.imageSizes:void 0,media:"string"===typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"===typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:"string"===typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return l.H.useFormState(e,t,n)},t.useFormStatus=function(){return l.H.useHostTransitionStatus()},t.version="19.1.0"},956:(e,t)=>{t.read=function(e,t,n,r,o){var a,i,s=8*o-r-1,l=(1<<s)-1,c=l>>1,u=-7,d=n?o-1:0,f=n?-1:1,p=e[t+d];for(d+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=256*a+e[t+d],d+=f,u-=8);for(i=a&(1<<-u)-1,a>>=-u,u+=r;u>0;i=256*i+e[t+d],d+=f,u-=8);if(0===a)a=1-c;else{if(a===l)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,r),a-=c}return(p?-1:1)*i*Math.pow(2,a-r)},t.write=function(e,t,n,r,o,a){var i,s,l,c=8*a-o-1,u=(1<<c)-1,d=u>>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:a-1,h=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+d>=1?f/l:f*Math.pow(2,1-d))*l>=2&&(i++,l/=2),i+d>=u?(s=0,i=u):i+d>=1?(s=(t*l-1)*Math.pow(2,o),i+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,o),i=0));o>=8;e[n+p]=255&s,p+=h,s/=256,o-=8);for(i=i<<o|s,c+=o;c>0;e[n+p]=255&i,p+=h,i/=256,c-=8);e[n+p-h]|=128*m}},998:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(904)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;n.t=function(r,o){if(1&o&&(r=this(r)),8&o)return r;if("object"===typeof r&&r){if(4&o&&r.__esModule)return r;if(16&o&&"function"===typeof r.then)return r}var a=Object.create(null);n.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&r;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>r[e]));return i.default=()=>r,n.d(a,i),a}})(),n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".116b9008.chunk.js",n.miniCssF=e=>{},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="frontend:";n.l=(r,o,a,i)=>{if(e[r])e[r].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var d=c[u];if(d.getAttribute("src")==r||d.getAttribute("data-webpack")==t+a){s=d;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,n.nc&&s.setAttribute("nonce",n.nc),s.setAttribute("data-webpack",t+a),s.src=r),e[r]=[o];var f=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=f.bind(null,s.onerror),s.onload=f.bind(null,s.onload),l&&document.head.appendChild(s)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",(()=>{var e={792:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var a=new Promise(((n,r)=>o=e[t]=[n,r]));r.push(o[2]=a);var i=n.p+n.u(t),s=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,a,i=r[0],s=r[1],l=r[2],c=0;if(i.some((t=>0!==e[t]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(l)l(n)}for(t&&t(r);c<i.length;c++)a=i[c],n.o(e,a)&&e[a]&&e[a][0](),e[a]=0},r=self.webpackChunkfrontend=self.webpackChunkfrontend||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";var e={};n.r(e),n.d(e,{hasBrowserEnv:()=>Ft,hasStandardBrowserEnv:()=>Bt,hasStandardBrowserWebWorkerEnv:()=>Ht,navigator:()=>zt,origin:()=>Ut});var t,r=n(483),o=n.t(r,2),a=n(775),i=n(998),s=n.t(i,2);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(t||(t={}));const c="popstate";function u(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function d(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function f(e,t){return{usr:e.state,key:e.key,idx:t}}function p(e,t,n,r){return void 0===n&&(n=null),l({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?m(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function h(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function m(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function v(e,n,r,o){void 0===o&&(o={});let{window:a=document.defaultView,v5Compat:i=!1}=o,s=a.history,d=t.Pop,m=null,v=g();function g(){return(s.state||{idx:null}).idx}function y(){d=t.Pop;let e=g(),n=null==e?null:e-v;v=e,m&&m({action:d,location:w.location,delta:n})}function b(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:h(e);return n=n.replace(/ $/,"%20"),u(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==v&&(v=0,s.replaceState(l({},s.state,{idx:v}),""));let w={get action(){return d},get location(){return e(a,s)},listen(e){if(m)throw new Error("A history only accepts one active listener");return a.addEventListener(c,y),m=e,()=>{a.removeEventListener(c,y),m=null}},createHref:e=>n(a,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,n){d=t.Push;let o=p(w.location,e,n);r&&r(o,e),v=g()+1;let l=f(o,v),c=w.createHref(o);try{s.pushState(l,"",c)}catch(u){if(u instanceof DOMException&&"DataCloneError"===u.name)throw u;a.location.assign(c)}i&&m&&m({action:d,location:w.location,delta:1})},replace:function(e,n){d=t.Replace;let o=p(w.location,e,n);r&&r(o,e),v=g();let a=f(o,v),l=w.createHref(o);s.replaceState(a,"",l),i&&m&&m({action:d,location:w.location,delta:0})},go:e=>s.go(e)};return w}var g;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(g||(g={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function y(e,t,n){return void 0===n&&(n="/"),b(e,t,n,!1)}function b(e,t,n,r){let o=M(("string"===typeof t?m(t):t).pathname||"/",n);if(null==o)return null;let a=w(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let s=0;null==i&&s<a.length;++s){let e=O(o);i=T(a[s],e,r)}return i}function w(e,t,n,r){void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r="");let o=(e,o,a)=>{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(u(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let s=F([r,i.relativePath]),l=n.concat(i);e.children&&e.children.length>0&&(u(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+s+'".'),w(e.children,t,l,s)),(null!=e.path||e.index)&&t.push({path:s,score:P(s,e.index),routesMeta:l})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of x(e.path))o(e,t,r);else o(e,t)})),t}function x(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=x(r.join("/")),s=[];return s.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const k=/^:[\w-]+$/,S=3,E=2,C=1,N=10,j=-2,D=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(D)&&(r+=j),t&&(r+=E),n.filter((e=>!D(e))).reduce(((e,t)=>e+(k.test(t)?S:""===t?C:N)),r)}function T(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let s=0;s<r.length;++s){let e=r[s],l=s===r.length-1,c="/"===a?t:t.slice(a.length)||"/",u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:l},c),d=e.route;if(!u&&l&&n&&!r[r.length-1].route.index&&(u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:!1},c)),!u)return null;Object.assign(o,u.params),i.push({params:o,pathname:F([a,u.pathname]),pathnameBase:z(F([a,u.pathnameBase])),route:d}),"/"!==u.pathnameBase&&(a=F([a,u.pathnameBase]))}return i}function _(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);d("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,n)=>(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let a=new RegExp(o,t?void 0:"i");return[a,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),s=o.slice(1),l=r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const l=s[n];return e[r]=o&&!l?void 0:(l||"").replace(/%2F/g,"/"),e}),{});return{params:l,pathname:a,pathnameBase:i,pattern:e}}function O(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return d(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function M(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function R(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function A(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function L(e,t){let n=A(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}function I(e,t,n,r){let o;void 0===r&&(r=!1),"string"===typeof e?o=m(e):(o=l({},e),u(!o.pathname||!o.pathname.includes("?"),R("?","pathname","search",o)),u(!o.pathname||!o.pathname.includes("#"),R("#","pathname","hash",o)),u(!o.search||!o.search.includes("#"),R("#","search","hash",o)));let a,i=""===e||""===o.pathname,s=i?"/":o.pathname;if(null==s)a=n;else{let e=t.length-1;if(!r&&s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let c=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?m(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:B(r),hash:H(o)}}(o,a),d=s&&"/"!==s&&s.endsWith("/"),f=(i||"."===s)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!f||(c.pathname+="/"),c}const F=e=>e.join("/").replace(/\/\/+/g,"/"),z=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",H=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function U(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const Y=["post","put","patch","delete"],W=(new Set(Y),["get",...Y]);new Set(W),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},q.apply(this,arguments)}const V=r.createContext(null);const Q=r.createContext(null);const K=r.createContext(null);const $=r.createContext(null);const G=r.createContext({outlet:null,matches:[],isDataRoute:!1});const X=r.createContext(null);function J(){return null!=r.useContext($)}function Z(){return J()||u(!1),r.useContext($).location}function ee(e){r.useContext(K).static||r.useLayoutEffect(e)}function te(){let{isDataRoute:e}=r.useContext(G);return e?function(){let{router:e}=fe(ue.UseNavigateStable),t=he(de.UseNavigateStable),n=r.useRef(!1);return ee((()=>{n.current=!0})),r.useCallback((function(r,o){void 0===o&&(o={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,q({fromRouteId:t},o)))}),[e,t])}():function(){J()||u(!1);let e=r.useContext(V),{basename:t,future:n,navigator:o}=r.useContext(K),{matches:a}=r.useContext(G),{pathname:i}=Z(),s=JSON.stringify(L(a,n.v7_relativeSplatPath)),l=r.useRef(!1);return ee((()=>{l.current=!0})),r.useCallback((function(n,r){if(void 0===r&&(r={}),!l.current)return;if("number"===typeof n)return void o.go(n);let a=I(n,JSON.parse(s),i,"path"===r.relative);null==e&&"/"!==t&&(a.pathname="/"===a.pathname?t:F([t,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[t,o,s,i,e])}()}const ne=r.createContext(null);function re(){let{matches:e}=r.useContext(G),t=e[e.length-1];return t?t.params:{}}function oe(e,n,o,a){J()||u(!1);let{navigator:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),c=l[l.length-1],d=c?c.params:{},f=(c&&c.pathname,c?c.pathnameBase:"/");c&&c.route;let p,h=Z();if(n){var v;let e="string"===typeof n?m(n):n;"/"===f||(null==(v=e.pathname)?void 0:v.startsWith(f))||u(!1),p=e}else p=h;let g=p.pathname||"/",b=g;if("/"!==f){let e=f.replace(/^\//,"").split("/");b="/"+g.replace(/^\//,"").split("/").slice(e.length).join("/")}let w=!s&&o&&o.matches&&o.matches.length>0?o.matches:y(e,{pathname:b});let x=ce(w&&w.map((e=>Object.assign({},e,{params:Object.assign({},d,e.params),pathname:F([f,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?f:F([f,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,o,a);return n&&x?r.createElement($.Provider,{value:{location:q({pathname:"/",search:"",hash:"",state:null,key:"default"},p),navigationType:t.Pop}},x):x}function ae(){let e=function(){var e;let t=r.useContext(X),n=pe(de.UseRouteError),o=he(de.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[o]}(),t=U(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o};return r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:a},n):null,null)}const ie=r.createElement(ae,null);class se extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?r.createElement(G.Provider,{value:this.props.routeContext},r.createElement(X.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function le(e){let{routeContext:t,match:n,children:o}=e,a=r.useContext(V);return a&&a.static&&a.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=n.route.id),r.createElement(G.Provider,{value:t},o)}function ce(e,t,n,o){var a;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===o&&(o=null),null==e){var i;if(!n)return null;if(n.errors)e=n.matches;else{if(!(null!=(i=o)&&i.v7_partialHydration&&0===t.length&&!n.initialized&&n.matches.length>0))return null;e=n.matches}}let s=e,l=null==(a=n)?void 0:a.errors;if(null!=l){let e=s.findIndex((e=>e.route.id&&void 0!==(null==l?void 0:l[e.route.id])));e>=0||u(!1),s=s.slice(0,Math.min(s.length,e+1))}let c=!1,d=-1;if(n&&o&&o.v7_partialHydration)for(let r=0;r<s.length;r++){let e=s[r];if((e.route.HydrateFallback||e.route.hydrateFallbackElement)&&(d=r),e.route.id){let{loaderData:t,errors:r}=n,o=e.route.loader&&void 0===t[e.route.id]&&(!r||void 0===r[e.route.id]);if(e.route.lazy||o){c=!0,s=d>=0?s.slice(0,d+1):[s[0]];break}}}return s.reduceRight(((e,o,a)=>{let i,u=!1,f=null,p=null;var h;n&&(i=l&&o.route.id?l[o.route.id]:void 0,f=o.route.errorElement||ie,c&&(d<0&&0===a?(h="route-fallback",!1||me[h]||(me[h]=!0),u=!0,p=null):d===a&&(u=!0,p=o.route.hydrateFallbackElement||null)));let m=t.concat(s.slice(0,a+1)),v=()=>{let t;return t=i?f:u?p:o.route.Component?r.createElement(o.route.Component,null):o.route.element?o.route.element:e,r.createElement(le,{match:o,routeContext:{outlet:e,matches:m,isDataRoute:null!=n},children:t})};return n&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?r.createElement(se,{location:n.location,revalidation:n.revalidation,component:f,error:i,children:v(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):v()}),null)}var ue=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ue||{}),de=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(de||{});function fe(e){let t=r.useContext(V);return t||u(!1),t}function pe(e){let t=r.useContext(Q);return t||u(!1),t}function he(e){let t=function(){let e=r.useContext(G);return e||u(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||u(!1),n.route.id}const me={};function ve(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}o.startTransition;function ge(e){let{to:t,replace:n,state:o,relative:a}=e;J()||u(!1);let{future:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),{pathname:c}=Z(),d=te(),f=I(t,L(l,i.v7_relativeSplatPath),c,"path"===a),p=JSON.stringify(f);return r.useEffect((()=>d(JSON.parse(p),{replace:n,state:o,relative:a})),[d,p,a,n,o]),null}function ye(e){return function(e){let t=r.useContext(G).outlet;return t?r.createElement(ne.Provider,{value:e},t):t}(e.context)}function be(e){u(!1)}function we(e){let{basename:n="/",children:o=null,location:a,navigationType:i=t.Pop,navigator:s,static:l=!1,future:c}=e;J()&&u(!1);let d=n.replace(/^\/*/,"/"),f=r.useMemo((()=>({basename:d,navigator:s,static:l,future:q({v7_relativeSplatPath:!1},c)})),[d,c,s,l]);"string"===typeof a&&(a=m(a));let{pathname:p="/",search:h="",hash:v="",state:g=null,key:y="default"}=a,b=r.useMemo((()=>{let e=M(p,d);return null==e?null:{location:{pathname:e,search:h,hash:v,state:g,key:y},navigationType:i}}),[d,p,h,v,g,y,i]);return null==b?null:r.createElement(K.Provider,{value:f},r.createElement($.Provider,{children:o,value:b}))}function xe(e){let{children:t,location:n}=e;return oe(ke(t),n)}new Promise((()=>{}));r.Component;function ke(e,t){void 0===t&&(t=[]);let n=[];return r.Children.forEach(e,((e,o)=>{if(!r.isValidElement(e))return;let a=[...t,o];if(e.type===r.Fragment)return void n.push.apply(n,ke(e.props.children,a));e.type!==be&&u(!1),e.props.index&&e.props.children&&u(!1);let i={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=ke(e.props.children,a)),n.push(i)})),n}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(Dy){}new Map;const Se=o.startTransition;s.flushSync,o.useId;function Ee(e){let{basename:t,children:n,future:o,window:a}=e,i=r.useRef();var s;null==i.current&&(i.current=(void 0===(s={window:a,v5Compat:!0})&&(s={}),v((function(e,t){let{pathname:n,search:r,hash:o}=e.location;return p("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:h(t)}),null,s)));let l=i.current,[c,u]=r.useState({action:l.action,location:l.location}),{v7_startTransition:d}=o||{},f=r.useCallback((e=>{d&&Se?Se((()=>u(e))):u(e)}),[u,d]);return r.useLayoutEffect((()=>l.listen(f)),[l,f]),r.useEffect((()=>ve(o)),[o]),r.createElement(we,{basename:t,children:n,location:c.location,navigationType:c.action,navigator:l,future:o})}"undefined"!==typeof window&&"undefined"!==typeof window.document&&window.document.createElement;var Ce,Ne;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ce||(Ce={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Ne||(Ne={}));function je(e){return je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},je(e)}function De(e){var t=function(e,t){if("object"!=je(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==je(t)?t:t+""}function Pe(e,t,n){return(t=De(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Te(Object(n),!0).forEach((function(t){Pe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Te(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t){return function(){return e.apply(t,arguments)}}const{toString:Me}=Object.prototype,{getPrototypeOf:Re}=Object,{iterator:Ae,toStringTag:Le}=Symbol,Ie=(Fe=Object.create(null),e=>{const t=Me.call(e);return Fe[t]||(Fe[t]=t.slice(8,-1).toLowerCase())});var Fe;const ze=e=>(e=e.toLowerCase(),t=>Ie(t)===e),Be=e=>t=>typeof t===e,{isArray:He}=Array,Ue=Be("undefined");const Ye=ze("ArrayBuffer");const We=Be("string"),qe=Be("function"),Ve=Be("number"),Qe=e=>null!==e&&"object"===typeof e,Ke=e=>{if("object"!==Ie(e))return!1;const t=Re(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Le in e)&&!(Ae in e)},$e=ze("Date"),Ge=ze("File"),Xe=ze("Blob"),Je=ze("FileList"),Ze=ze("URLSearchParams"),[et,tt,nt,rt]=["ReadableStream","Request","Response","Headers"].map(ze);function ot(e,t){let n,r,{allOwnKeys:o=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),He(e))for(n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else{const r=o?Object.getOwnPropertyNames(e):Object.keys(e),a=r.length;let i;for(n=0;n<a;n++)i=r[n],t.call(null,e[i],i,e)}}function at(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const it="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:global,st=e=>!Ue(e)&&e!==it;const lt=(ct="undefined"!==typeof Uint8Array&&Re(Uint8Array),e=>ct&&e instanceof ct);var ct;const ut=ze("HTMLFormElement"),dt=(e=>{let{hasOwnProperty:t}=e;return(e,n)=>t.call(e,n)})(Object.prototype),ft=ze("RegExp"),pt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};ot(n,((n,o)=>{let a;!1!==(a=t(n,o,e))&&(r[o]=a||n)})),Object.defineProperties(e,r)};const ht=ze("AsyncFunction"),mt=(vt="function"===typeof setImmediate,gt=qe(it.postMessage),vt?setImmediate:gt?((e,t)=>(it.addEventListener("message",(n=>{let{source:r,data:o}=n;r===it&&o===e&&t.length&&t.shift()()}),!1),n=>{t.push(n),it.postMessage(e,"*")}))("axios@".concat(Math.random()),[]):e=>setTimeout(e));var vt,gt;const yt="undefined"!==typeof queueMicrotask?queueMicrotask.bind(it):"undefined"!==typeof process&&process.nextTick||mt,bt={isArray:He,isArrayBuffer:Ye,isBuffer:function(e){return null!==e&&!Ue(e)&&null!==e.constructor&&!Ue(e.constructor)&&qe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"===typeof FormData&&e instanceof FormData||qe(e.append)&&("formdata"===(t=Ie(e))||"object"===t&&qe(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ye(e.buffer),t},isString:We,isNumber:Ve,isBoolean:e=>!0===e||!1===e,isObject:Qe,isPlainObject:Ke,isReadableStream:et,isRequest:tt,isResponse:nt,isHeaders:rt,isUndefined:Ue,isDate:$e,isFile:Ge,isBlob:Xe,isRegExp:ft,isFunction:qe,isStream:e=>Qe(e)&&qe(e.pipe),isURLSearchParams:Ze,isTypedArray:lt,isFileList:Je,forEach:ot,merge:function e(){const{caseless:t}=st(this)&&this||{},n={},r=(r,o)=>{const a=t&&at(n,o)||o;Ke(n[a])&&Ke(r)?n[a]=e(n[a],r):Ke(r)?n[a]=e({},r):He(r)?n[a]=r.slice():n[a]=r};for(let o=0,a=arguments.length;o<a;o++)arguments[o]&&ot(arguments[o],r);return n},extend:function(e,t,n){let{allOwnKeys:r}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return ot(t,((t,r)=>{n&&qe(t)?e[r]=Oe(t,n):e[r]=t}),{allOwnKeys:r}),e},trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,a,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),a=o.length;a-- >0;)i=o[a],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Re(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ie,kindOfTest:ze,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(He(e))return e;let t=e.length;if(!Ve(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Ae]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:ut,hasOwnProperty:dt,hasOwnProp:dt,reduceDescriptors:pt,freezeMethods:e=>{pt(e,((t,n)=>{if(qe(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];qe(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return He(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:at,global:it,isContextDefined:st,isSpecCompliantForm:function(e){return!!(e&&qe(e.append)&&"FormData"===e[Le]&&e[Ae])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Qe(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=He(e)?[]:{};return ot(e,((e,t)=>{const a=n(e,r+1);!Ue(a)&&(o[t]=a)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:ht,isThenable:e=>e&&(Qe(e)||qe(e))&&qe(e.then)&&qe(e.catch),setImmediate:mt,asap:yt,isIterable:e=>null!=e&&qe(e[Ae])};function wt(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}bt.inherits(wt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:bt.toJSONObject(this.config),code:this.code,status:this.status}}});const xt=wt.prototype,kt={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{kt[e]={value:e}})),Object.defineProperties(wt,kt),Object.defineProperty(xt,"isAxiosError",{value:!0}),wt.from=(e,t,n,r,o,a)=>{const i=Object.create(xt);return bt.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),wt.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};const St=wt;function Et(e){return bt.isPlainObject(e)||bt.isArray(e)}function Ct(e){return bt.endsWith(e,"[]")?e.slice(0,-2):e}function Nt(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ct(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const jt=bt.toFlatObject(bt,{},null,(function(e){return/^is[A-Z]/.test(e)}));const Dt=function(e,t,n){if(!bt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=bt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!bt.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,a=n.dots,i=n.indexes,s=(n.Blob||"undefined"!==typeof Blob&&Blob)&&bt.isSpecCompliantForm(t);if(!bt.isFunction(o))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(bt.isDate(e))return e.toISOString();if(!s&&bt.isBlob(e))throw new St("Blob is not supported. Use a Buffer instead.");return bt.isArrayBuffer(e)||bt.isTypedArray(e)?s&&"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let s=e;if(e&&!o&&"object"===typeof e)if(bt.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(bt.isArray(e)&&function(e){return bt.isArray(e)&&!e.some(Et)}(e)||(bt.isFileList(e)||bt.endsWith(n,"[]"))&&(s=bt.toArray(e)))return n=Ct(n),s.forEach((function(e,r){!bt.isUndefined(e)&&null!==e&&t.append(!0===i?Nt([n],r,a):null===i?n:n+"[]",l(e))})),!1;return!!Et(e)||(t.append(Nt(o,n,a),l(e)),!1)}const u=[],d=Object.assign(jt,{defaultVisitor:c,convertValue:l,isVisitable:Et});if(!bt.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!bt.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),bt.forEach(n,(function(n,a){!0===(!(bt.isUndefined(n)||null===n)&&o.call(t,n,bt.isString(a)?a.trim():a,r,d))&&e(n,r?r.concat(a):[a])})),u.pop()}}(e),t};function Pt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Tt(e,t){this._pairs=[],e&&Dt(e,this,t)}const _t=Tt.prototype;_t.append=function(e,t){this._pairs.push([e,t])},_t.toString=function(e){const t=e?function(t){return e.call(this,t,Pt)}:Pt;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Ot=Tt;function Mt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Rt(e,t,n){if(!t)return e;const r=n&&n.encode||Mt;bt.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let a;if(a=o?o(t,n):bt.isURLSearchParams(t)?t.toString():new Ot(t,n).toString(r),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}const At=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){bt.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},It={isBrowser:!0,classes:{URLSearchParams:"undefined"!==typeof URLSearchParams?URLSearchParams:Ot,FormData:"undefined"!==typeof FormData?FormData:null,Blob:"undefined"!==typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ft="undefined"!==typeof window&&"undefined"!==typeof document,zt="object"===typeof navigator&&navigator||void 0,Bt=Ft&&(!zt||["ReactNative","NativeScript","NS"].indexOf(zt.product)<0),Ht="undefined"!==typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"===typeof self.importScripts,Ut=Ft&&window.location.href||"http://localhost",Yt=_e(_e({},e),It);const Wt=function(e){function t(e,n,r,o){let a=e[o++];if("__proto__"===a)return!0;const i=Number.isFinite(+a),s=o>=e.length;if(a=!a&&bt.isArray(r)?r.length:a,s)return bt.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!i;r[a]&&bt.isObject(r[a])||(r[a]=[]);return t(e,n,r[a],o)&&bt.isArray(r[a])&&(r[a]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let a;for(r=0;r<o;r++)a=n[r],t[a]=e[a];return t}(r[a])),!i}if(bt.isFormData(e)&&bt.isFunction(e.entries)){const n={};return bt.forEachEntry(e,((e,r)=>{t(function(e){return bt.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null};const qt={transitional:Lt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=bt.isObject(e);o&&bt.isHTMLForm(e)&&(e=new FormData(e));if(bt.isFormData(e))return r?JSON.stringify(Wt(e)):e;if(bt.isArrayBuffer(e)||bt.isBuffer(e)||bt.isStream(e)||bt.isFile(e)||bt.isBlob(e)||bt.isReadableStream(e))return e;if(bt.isArrayBufferView(e))return e.buffer;if(bt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Dt(e,new Yt.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return Yt.isNode&&bt.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((a=bt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Dt(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(bt.isString(e))try{return(t||JSON.parse)(e),bt.trim(e)}catch(Dy){if("SyntaxError"!==Dy.name)throw Dy}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||qt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(bt.isResponse(e)||bt.isReadableStream(e))return e;if(e&&bt.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(Dy){if(n){if("SyntaxError"===Dy.name)throw St.from(Dy,St.ERR_BAD_RESPONSE,this,null,this.response);throw Dy}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yt.classes.FormData,Blob:Yt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};bt.forEach(["delete","get","head","post","put","patch"],(e=>{qt.headers[e]={}}));const Vt=qt,Qt=bt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Kt=Symbol("internals");function $t(e){return e&&String(e).trim().toLowerCase()}function Gt(e){return!1===e||null==e?e:bt.isArray(e)?e.map(Gt):String(e)}function Xt(e,t,n,r,o){return bt.isFunction(r)?r.call(this,t,n):(o&&(t=n),bt.isString(t)?bt.isString(r)?-1!==t.indexOf(r):bt.isRegExp(r)?r.test(t):void 0:void 0)}class Jt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=$t(t);if(!o)throw new Error("header name must be a non-empty string");const a=bt.findKey(r,o);(!a||void 0===r[a]||!0===n||void 0===n&&!1!==r[a])&&(r[a||t]=Gt(e))}const a=(e,t)=>bt.forEach(e,((e,n)=>o(e,n,t)));if(bt.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(bt.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))a((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Qt[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(bt.isObject(e)&&bt.isIterable(e)){let n,r,o={};for(const t of e){if(!bt.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?bt.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}a(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=$t(e)){const n=bt.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(bt.isFunction(t))return t.call(this,e,n);if(bt.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=$t(e)){const n=bt.findKey(this,e);return!(!n||void 0===this[n]||t&&!Xt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=$t(e)){const o=bt.findKey(n,e);!o||t&&!Xt(0,n[o],o,t)||(delete n[o],r=!0)}}return bt.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Xt(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return bt.forEach(this,((r,o)=>{const a=bt.findKey(n,o);if(a)return t[a]=Gt(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();i!==o&&delete t[o],t[i]=Gt(r),n[i]=!0})),this}concat(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.constructor.concat(this,...t)}toJSON(e){const t=Object.create(null);return bt.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&bt.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((e=>{let[t,n]=e;return t+": "+n})).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e){const t=new this(e);for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach((e=>t.set(e))),t}static accessor(e){const t=(this[Kt]=this[Kt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=$t(e);t[r]||(!function(e,t){const n=bt.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return bt.isArray(e)?e.forEach(r):r(e),this}}Jt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),bt.reduceDescriptors(Jt.prototype,((e,t)=>{let{value:n}=e,r=t[0].toUpperCase()+t.slice(1);return{get:()=>n,set(e){this[r]=e}}})),bt.freezeMethods(Jt);const Zt=Jt;function en(e,t){const n=this||Vt,r=t||n,o=Zt.from(r.headers);let a=r.data;return bt.forEach(e,(function(e){a=e.call(n,a,o.normalize(),t?t.status:void 0)})),o.normalize(),a}function tn(e){return!(!e||!e.__CANCEL__)}function nn(e,t,n){St.call(this,null==e?"canceled":e,St.ERR_CANCELED,t,n),this.name="CanceledError"}bt.inherits(nn,St,{__CANCEL__:!0});const rn=nn;function on(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new St("Request failed with status code "+n.status,[St.ERR_BAD_REQUEST,St.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const an=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,a=0,i=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=r[i];o||(o=l),n[a]=s,r[a]=l;let u=i,d=0;for(;u!==a;)d+=n[u++],u%=e;if(a=(a+1)%e,a===i&&(i=(i+1)%e),l-o<t)return;const f=c&&l-c;return f?Math.round(1e3*d/f):void 0}};const sn=function(e,t){let n,r,o=0,a=1e3/t;const i=function(t){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();o=a,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[function(){const e=Date.now(),t=e-o;for(var s=arguments.length,l=new Array(s),c=0;c<s;c++)l[c]=arguments[c];t>=a?i(l,e):(n=l,r||(r=setTimeout((()=>{r=null,i(n)}),a-t)))},()=>n&&i(n)]},ln=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,r=0;const o=an(50,250);return sn((n=>{const a=n.loaded,i=n.lengthComputable?n.total:void 0,s=a-r,l=o(s);r=a;e({loaded:a,total:i,progress:i?a/i:void 0,bytes:s,rate:l||void 0,estimated:l&&i&&a<=i?(i-a)/l:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})}),n)},cn=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},un=e=>function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return bt.asap((()=>e(...n)))},dn=Yt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yt.origin),Yt.navigator&&/(msie|trident)/i.test(Yt.navigator.userAgent)):()=>!0,fn=Yt.hasStandardBrowserEnv?{write(e,t,n,r,o,a){const i=[e+"="+encodeURIComponent(t)];bt.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),bt.isString(r)&&i.push("path="+r),bt.isString(o)&&i.push("domain="+o),!0===a&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function pn(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const hn=e=>e instanceof Zt?_e({},e):e;function mn(e,t){t=t||{};const n={};function r(e,t,n,r){return bt.isPlainObject(e)&&bt.isPlainObject(t)?bt.merge.call({caseless:r},e,t):bt.isPlainObject(t)?bt.merge({},t):bt.isArray(t)?t.slice():t}function o(e,t,n,o){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function a(e,t){if(!bt.isUndefined(t))return r(void 0,t)}function i(e,t){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,a){return a in t?r(n,o):a in e?r(void 0,n):void 0}const l={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(hn(e),hn(t),0,!0)};return bt.forEach(Object.keys(Object.assign({},e,t)),(function(r){const a=l[r]||o,i=a(e[r],t[r],r);bt.isUndefined(i)&&a!==s||(n[r]=i)})),n}const vn=e=>{const t=mn({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:a,xsrfCookieName:i,headers:s,auth:l}=t;if(t.headers=s=Zt.from(s),t.url=Rt(pn(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),bt.isFormData(r))if(Yt.hasStandardBrowserEnv||Yt.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(n=s.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(Yt.hasStandardBrowserEnv&&(o&&bt.isFunction(o)&&(o=o(t)),o||!1!==o&&dn(t.url))){const e=a&&i&&fn.read(i);e&&s.set(a,e)}return t},gn="undefined"!==typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=vn(e);let o=r.data;const a=Zt.from(r.headers).normalize();let i,s,l,c,u,{responseType:d,onUploadProgress:f,onDownloadProgress:p}=r;function h(){c&&c(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function v(){if(!m)return;const r=Zt.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());on((function(e){t(e),h()}),(function(e){n(e),h()}),{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=v:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(v)},m.onabort=function(){m&&(n(new St("Request aborted",St.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new St("Network Error",St.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Lt;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new St(t,o.clarifyTimeoutError?St.ETIMEDOUT:St.ECONNABORTED,e,m)),m=null},void 0===o&&a.setContentType(null),"setRequestHeader"in m&&bt.forEach(a.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),bt.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),p&&([l,u]=ln(p,!0),m.addEventListener("progress",l)),f&&m.upload&&([s,c]=ln(f),m.upload.addEventListener("progress",s),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new rn(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const g=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);g&&-1===Yt.protocols.indexOf(g)?n(new St("Unsupported protocol "+g+":",St.ERR_BAD_REQUEST,e)):m.send(o||null)}))},yn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof St?t:new rn(t instanceof Error?t.message:t))}};let a=t&&setTimeout((()=>{a=null,o(new St("timeout ".concat(t," of ms exceeded"),St.ETIMEDOUT))}),t);const i=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:s}=r;return s.unsubscribe=()=>bt.asap(i),s}};function bn(e,t){this.v=e,this.k=t}function wn(e){return function(){return new xn(e.apply(this,arguments))}}function xn(e){var t,n;function r(t,n){try{var a=e[t](n),i=a.value,s=i instanceof bn;Promise.resolve(s?i.v:i).then((function(n){if(s){var l="return"===t?"return":"next";if(!i.k||n.done)return r(l,n);n=e[l](n).value}o(a.done?"return":"normal",n)}),(function(e){r("throw",e)}))}catch(e){o("throw",e)}}function o(e,o){switch(e){case"return":t.resolve({value:o,done:!0});break;case"throw":t.reject(o);break;default:t.resolve({value:o,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,o){return new Promise((function(a,i){var s={key:e,arg:o,resolve:a,reject:i,next:null};n?n=n.next=s:(t=n=s,r(e,o))}))},"function"!=typeof e.return&&(this.return=void 0)}function kn(e){return new bn(e,0)}function Sn(e){var t={},n=!1;function r(t,r){return n=!0,r=new Promise((function(n){n(e[t](r))})),{done:!1,value:new bn(r,1)}}return t["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},t.next=function(e){return n?(n=!1,e):r("next",e)},"function"==typeof e.throw&&(t.throw=function(e){if(n)throw n=!1,e;return r("throw",e)}),"function"==typeof e.return&&(t.return=function(e){return n?(n=!1,e):r("return",e)}),t}function En(e){var t,n,r,o=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);o--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new Cn(t.call(e));n="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function Cn(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return Cn=function(e){this.s=e,this.n=e.next},Cn.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new Cn(e)}xn.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},xn.prototype.next=function(e){return this._invoke("next",e)},xn.prototype.throw=function(e){return this._invoke("throw",e)},xn.prototype.return=function(e){return this._invoke("return",e)};const Nn=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},jn=function(){var e=wn((function*(e,t){var n,r=!1,o=!1;try{for(var a,i=En(Dn(e));r=!(a=yield kn(i.next())).done;r=!1){const e=a.value;yield*Sn(En(Nn(e,t)))}}catch(s){o=!0,n=s}finally{try{r&&null!=i.return&&(yield kn(i.return()))}finally{if(o)throw n}}}));return function(t,n){return e.apply(this,arguments)}}(),Dn=function(){var e=wn((function*(e){if(e[Symbol.asyncIterator])return void(yield*Sn(En(e)));const t=e.getReader();try{for(;;){const{done:e,value:n}=yield kn(t.read());if(e)break;yield n}}finally{yield kn(t.cancel())}}));return function(t){return e.apply(this,arguments)}}(),Pn=(e,t,n,r)=>{const o=jn(e,t);let a,i=0,s=e=>{a||(a=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let a=r.byteLength;if(n){let e=i+=a;n(e)}e.enqueue(new Uint8Array(r))}catch(t){throw s(t),t}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},Tn="function"===typeof fetch&&"function"===typeof Request&&"function"===typeof Response,_n=Tn&&"function"===typeof ReadableStream,On=Tn&&("function"===typeof TextEncoder?(Mn=new TextEncoder,e=>Mn.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Mn;const Rn=function(e){try{for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return!!e(...n)}catch(Dy){return!1}},An=_n&&Rn((()=>{let e=!1;const t=new Request(Yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ln=_n&&Rn((()=>bt.isReadableStream(new Response("").body))),In={stream:Ln&&(e=>e.body)};var Fn;Tn&&(Fn=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!In[e]&&(In[e]=bt.isFunction(Fn[e])?t=>t[e]():(t,n)=>{throw new St("Response type '".concat(e,"' is not supported"),St.ERR_NOT_SUPPORT,n)})})));const zn=async(e,t)=>{const n=bt.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(bt.isBlob(e))return e.size;if(bt.isSpecCompliantForm(e)){const t=new Request(Yt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return bt.isArrayBufferView(e)||bt.isArrayBuffer(e)?e.byteLength:(bt.isURLSearchParams(e)&&(e+=""),bt.isString(e)?(await On(e)).byteLength:void 0)})(t):n},Bn=Tn&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:a,timeout:i,onDownloadProgress:s,onUploadProgress:l,responseType:c,headers:u,withCredentials:d="same-origin",fetchOptions:f}=vn(e);c=c?(c+"").toLowerCase():"text";let p,h=yn([o,a&&a.toAbortSignal()],i);const m=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let v;try{if(l&&An&&"get"!==n&&"head"!==n&&0!==(v=await zn(u,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(bt.isFormData(r)&&(e=n.headers.get("content-type"))&&u.setContentType(e),n.body){const[e,t]=cn(v,ln(un(l)));r=Pn(n.body,65536,e,t)}}bt.isString(d)||(d=d?"include":"omit");const o="credentials"in Request.prototype;p=new Request(t,_e(_e({},f),{},{signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:r,duplex:"half",credentials:o?d:void 0}));let a=await fetch(p);const i=Ln&&("stream"===c||"response"===c);if(Ln&&(s||i&&m)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=a[t]}));const t=bt.toFiniteNumber(a.headers.get("content-length")),[n,r]=s&&cn(t,ln(un(s),!0))||[];a=new Response(Pn(a.body,65536,n,(()=>{r&&r(),m&&m()})),e)}c=c||"text";let g=await In[bt.findKey(In,c)||"text"](a,e);return!i&&m&&m(),await new Promise(((t,n)=>{on(t,n,{data:g,headers:Zt.from(a.headers),status:a.status,statusText:a.statusText,config:e,request:p})}))}catch(g){if(m&&m(),g&&"TypeError"===g.name&&/Load failed|fetch/i.test(g.message))throw Object.assign(new St("Network Error",St.ERR_NETWORK,e,p),{cause:g.cause||g});throw St.from(g,g&&g.code,e,p)}}),Hn={http:null,xhr:gn,fetch:Bn};bt.forEach(Hn,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(Dy){}Object.defineProperty(e,"adapterName",{value:t})}}));const Un=e=>"- ".concat(e),Yn=e=>bt.isFunction(e)||null===e||!1===e,Wn=e=>{e=bt.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let a=0;a<t;a++){let t;if(n=e[a],r=n,!Yn(n)&&(r=Hn[(t=String(n)).toLowerCase()],void 0===r))throw new St("Unknown adapter '".concat(t,"'"));if(r)break;o[t||"#"+a]=r}if(!r){const e=Object.entries(o).map((e=>{let[t,n]=e;return"adapter ".concat(t," ")+(!1===n?"is not supported by the environment":"is not available in the build")}));let n=t?e.length>1?"since :\n"+e.map(Un).join("\n"):" "+Un(e[0]):"as no adapter specified";throw new St("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function qn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new rn(null,e)}function Vn(e){qn(e),e.headers=Zt.from(e.headers),e.data=en.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Wn(e.adapter||Vt.adapter)(e).then((function(t){return qn(e),t.data=en.call(e,e.transformResponse,t),t.headers=Zt.from(t.headers),t}),(function(t){return tn(t)||(qn(e),t&&t.response&&(t.response.data=en.call(e,e.transformResponse,t.response),t.response.headers=Zt.from(t.response.headers))),Promise.reject(t)}))}const Qn="1.9.0",Kn={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Kn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const $n={};Kn.transitional=function(e,t,n){function r(e,t){return"[Axios v1.9.0] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,a)=>{if(!1===e)throw new St(r(o," has been removed"+(t?" in "+t:"")),St.ERR_DEPRECATED);return t&&!$n[o]&&($n[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,a)}},Kn.spelling=function(e){return(t,n)=>(console.warn("".concat(n," is likely a misspelling of ").concat(e)),!0)};const Gn={assertOptions:function(e,t,n){if("object"!==typeof e)throw new St("options must be an object",St.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const a=r[o],i=t[a];if(i){const t=e[a],n=void 0===t||i(t,a,e);if(!0!==n)throw new St("option "+a+" must be "+n,St.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new St("Unknown option "+a,St.ERR_BAD_OPTION)}},validators:Kn},Xn=Gn.validators;class Jn{constructor(e){this.defaults=e||{},this.interceptors={request:new At,response:new At}}async request(e,t){try{return await this._request(e,t)}catch(n){if(n instanceof Error){let e={};Error.captureStackTrace?Error.captureStackTrace(e):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}catch(Dy){}}throw n}}_request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=mn(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Gn.assertOptions(n,{silentJSONParsing:Xn.transitional(Xn.boolean),forcedJSONParsing:Xn.transitional(Xn.boolean),clarifyTimeoutError:Xn.transitional(Xn.boolean)},!1),null!=r&&(bt.isFunction(r)?t.paramsSerializer={serialize:r}:Gn.assertOptions(r,{encode:Xn.function,serialize:Xn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Gn.assertOptions(t,{baseUrl:Xn.spelling("baseURL"),withXsrfToken:Xn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let a=o&&bt.merge(o.common,o[t.method]);o&&bt.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Zt.concat(a,o);const i=[];let s=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let u,d=0;if(!s){const e=[Vn.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,l),u=e.length,c=Promise.resolve(t);d<u;)c=c.then(e[d++],e[d++]);return c}u=i.length;let f=t;for(d=0;d<u;){const e=i[d++],t=i[d++];try{f=e(f)}catch(p){t.call(this,p);break}}try{c=Vn.call(this,f)}catch(p){return Promise.reject(p)}for(d=0,u=l.length;d<u;)c=c.then(l[d++],l[d++]);return c}getUri(e){return Rt(pn((e=mn(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}bt.forEach(["delete","get","head","options"],(function(e){Jn.prototype[e]=function(t,n){return this.request(mn(n||{},{method:e,url:t,data:(n||{}).data}))}})),bt.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(mn(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Jn.prototype[e]=t(),Jn.prototype[e+"Form"]=t(!0)}));const Zn=Jn;class er{constructor(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new rn(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new er((function(t){e=t})),cancel:e}}}const tr=er;const nr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(nr).forEach((e=>{let[t,n]=e;nr[n]=t}));const rr=nr;const or=function e(t){const n=new Zn(t),r=Oe(Zn.prototype.request,n);return bt.extend(r,Zn.prototype,n,{allOwnKeys:!0}),bt.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(mn(t,n))},r}(Vt);or.Axios=Zn,or.CanceledError=rn,or.CancelToken=tr,or.isCancel=tn,or.VERSION=Qn,or.toFormData=Dt,or.AxiosError=St,or.Cancel=or.CanceledError,or.all=function(e){return Promise.all(e)},or.spread=function(e){return function(t){return e.apply(null,t)}},or.isAxiosError=function(e){return bt.isObject(e)&&!0===e.isAxiosError},or.mergeConfig=mn,or.AxiosHeaders=Zt,or.formToJSON=e=>Wt(bt.isHTMLForm(e)?new FormData(e):e),or.getAdapter=Wn,or.HttpStatusCode=rr,or.default=or;const ar=or,ir=ar.create({baseURL:"http://localhost:8088",timeout:5e3});ir.interceptors.request.use((e=>{const t=localStorage.getItem("token");return t&&(e.headers.Authorization="Bearer ".concat(t)),e}));const sr=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code)return e.data.data;throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}};const lr=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/torrent/search",{params:{keyword:e,page:t,size:n}})},cr=e=>ir.get("/help/posts/".concat(e)),ur=e=>ir.get("/request/posts/".concat(e));function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function fr(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function pr(e,t){if(e){if("string"==typeof e)return dr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dr(e,t):void 0}}function hr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||fr(e)||pr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const mr=r.createContext({}),vr="ant",gr="anticon",yr=r.createContext({getPrefixCls:(e,t)=>t||(e?"".concat(vr,"-").concat(e):vr),iconPrefixCls:gr}),{Consumer:br}=yr;function wr(e){if(Array.isArray(e))return e}function xr(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kr(e,t){return wr(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,t)||pr(e,t)||xr()}const Sr=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)};function Er(){return!("undefined"===typeof window||!window.document||!window.document.createElement)}var Cr="data-rc-order",Nr="data-rc-priority",jr=new Map;function Dr(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).mark;return e?e.startsWith("data-")?e:"data-".concat(e):"rc-util-key"}function Pr(e){return e.attachTo?e.attachTo:document.querySelector("head")||document.body}function Tr(e){return Array.from((jr.get(e)||e).children).filter((function(e){return"STYLE"===e.tagName}))}function _r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Er())return null;var n=t.csp,r=t.prepend,o=t.priority,a=void 0===o?0:o,i=function(e){return"queue"===e?"prependQueue":e?"prepend":"append"}(r),s="prependQueue"===i,l=document.createElement("style");l.setAttribute(Cr,i),s&&a&&l.setAttribute(Nr,"".concat(a)),null!==n&&void 0!==n&&n.nonce&&(l.nonce=null===n||void 0===n?void 0:n.nonce),l.innerHTML=e;var c=Pr(t),u=c.firstChild;if(r){if(s){var d=(t.styles||Tr(c)).filter((function(e){if(!["prepend","prependQueue"].includes(e.getAttribute(Cr)))return!1;var t=Number(e.getAttribute(Nr)||0);return a>=t}));if(d.length)return c.insertBefore(l,d[d.length-1].nextSibling),l}c.insertBefore(l,u)}else c.appendChild(l);return l}function Or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Pr(t);return(t.styles||Tr(n)).find((function(n){return n.getAttribute(Dr(t))===e}))}function Mr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Or(e,t);n&&Pr(t).removeChild(n)}function Rr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=Pr(n),o=Tr(r),a=_e(_e({},n),{},{styles:o});!function(e,t){var n=jr.get(e);if(!n||!function(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1}(document,n)){var r=_r("",t),o=r.parentNode;jr.set(e,o),e.removeChild(r)}}(r,a);var i=Or(t,a);if(i){var s,l,c;if(null!==(s=a.csp)&&void 0!==s&&s.nonce&&i.nonce!==(null===(l=a.csp)||void 0===l?void 0:l.nonce))i.nonce=null===(c=a.csp)||void 0===c?void 0:c.nonce;return i.innerHTML!==e&&(i.innerHTML=e),i}var u=_r(e,a);return u.setAttribute(Dr(a),t),u}function Ar(e,t,n){var o=r.useRef({});return"value"in o.current&&!n(o.current.condition,t)||(o.current.value=e(),o.current.condition=t),o.current.value}var Lr={},Ir=[];function Fr(e,t){}function zr(e,t){}function Br(e,t,n){t||Lr[n]||(e(!1,n),Lr[n]=!0)}function Hr(e,t){Br(Fr,e,t)}Hr.preMessage=function(e){Ir.push(e)},Hr.resetWarned=function(){Lr={}},Hr.noteOnce=function(e,t){Br(zr,e,t)};const Ur=Hr;const Yr=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new Set;return function e(t,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=r.has(t);if(Ur(!i,"Warning: There may be circular references"),i)return!1;if(t===o)return!0;if(n&&a>1)return!1;r.add(t);var s=a+1;if(Array.isArray(t)){if(!Array.isArray(o)||t.length!==o.length)return!1;for(var l=0;l<t.length;l++)if(!e(t[l],o[l],s))return!1;return!0}if(t&&o&&"object"===je(t)&&"object"===je(o)){var c=Object.keys(t);return c.length===Object.keys(o).length&&c.every((function(n){return e(t[n],o[n],s)}))}return!1}(e,t)};function Wr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qr(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,De(r.key),r)}}function Vr(e,t,n){return t&&qr(e.prototype,t),n&&qr(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Qr(e){return e.join("%")}var Kr=function(){function e(t){Wr(this,e),Pe(this,"instanceId",void 0),Pe(this,"cache",new Map),this.instanceId=t}return Vr(e,[{key:"get",value:function(e){return this.opGet(Qr(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(Qr(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}();const $r=Kr;var Gr="data-token-hash",Xr="data-css-hash",Jr="__cssinjs_instance__";function Zr(){var e=Math.random().toString(12).slice(2);if("undefined"!==typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(Xr,"]"))||[],n=document.head.firstChild;Array.from(t).forEach((function(t){t[Jr]=t[Jr]||e,t[Jr]===e&&document.head.insertBefore(t,n)}));var r={};Array.from(document.querySelectorAll("style[".concat(Xr,"]"))).forEach((function(t){var n,o=t.getAttribute(Xr);r[o]?t[Jr]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0}))}return new $r(e)}var eo=r.createContext({hashPriority:"low",cache:Zr(),defaultCache:!0});const to=eo;var no="CALC_UNIT";new RegExp(no,"g");var ro=function(){function e(){Wr(this,e),Pe(this,"cache",void 0),Pe(this,"keys",void 0),Pe(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return Vr(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach((function(e){var t;o?o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e):o=void 0})),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce((function(e,t){var n=kr(e,2)[1];return r.internalGet(t)[1]<n?[t,r.internalGet(t)[1]]:e}),[this.keys[0],this.cacheCallTimes]),a=kr(o,1)[0];this.delete(a)}this.keys.push(t)}var i=this.cache;t.forEach((function(e,o){if(o===t.length-1)i.set(e,{value:[n,r.cacheCallTimes++]});else{var a=i.get(e);a?a.map||(a.map=new Map):i.set(e,{map:new Map}),i=i.get(e).map}}))}},{key:"deleteByPath",value:function(e,t){var n,r=e.get(t[0]);if(1===t.length)return r.map?e.set(t[0],{map:r.map}):e.delete(t[0]),null===(n=r.value)||void 0===n?void 0:n[0];var o=this.deleteByPath(r.map,t.slice(1));return r.map&&0!==r.map.size||r.value||e.delete(t[0]),o}},{key:"delete",value:function(e){if(this.has(e))return this.keys=this.keys.filter((function(t){return!function(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}(t,e)})),this.deleteByPath(this.cache,e)}}]),e}();Pe(ro,"MAX_CACHE_SIZE",20),Pe(ro,"MAX_CACHE_OFFSET",5);var oo=0,ao=function(){function e(t){Wr(this,e),Pe(this,"derivatives",void 0),Pe(this,"id",void 0),this.derivatives=Array.isArray(t)?t:[t],this.id=oo,0===t.length&&t.length,oo+=1}return Vr(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce((function(t,n){return n(e,t)}),void 0)}}]),e}(),io=new ro;function so(e){var t=Array.isArray(e)?e:[e];return io.has(t)||io.set(t,new ao(t)),io.get(t)}var lo=new WeakMap,co={};var uo=new WeakMap;function fo(e){var t=uo.get(e)||"";return t||(Object.keys(e).forEach((function(n){var r=e[n];t+=n,r instanceof ao?t+=r.id:r&&"object"===je(r)?t+=fo(r):t+=r})),t=Sr(t),uo.set(e,t)),t}function po(e,t){return Sr("".concat(t,"_").concat(fo(e)))}"random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,"");var ho=Er();function mo(e){return"number"===typeof e?"".concat(e,"px"):e}function vo(e,t,n){var r;if(arguments.length>4&&void 0!==arguments[4]&&arguments[4])return e;var o=_e(_e({},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}),{},(Pe(r={},Gr,t),Pe(r,Xr,n),r)),a=Object.keys(o).map((function(e){var t=o[e];return t?"".concat(e,'="').concat(t,'"'):null})).filter((function(e){return e})).join(" ");return"<style ".concat(a,">").concat(e,"</style>")}var go=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},yo=function(e,t,n){return Object.keys(e).length?".".concat(t).concat(null!==n&&void 0!==n&&n.scope?".".concat(n.scope):"","{").concat(Object.entries(e).map((function(e){var t=kr(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")})).join(""),"}"):""},bo=function(e,t,n){var r={},o={};return Object.entries(e).forEach((function(e){var t,a,i=kr(e,2),s=i[0],l=i[1];if(null!==n&&void 0!==n&&null!==(t=n.preserve)&&void 0!==t&&t[s])o[s]=l;else if(("string"===typeof l||"number"===typeof l)&&(null===n||void 0===n||null===(a=n.ignore)||void 0===a||!a[s])){var c,u=go(s,null===n||void 0===n?void 0:n.prefix);r[u]="number"!==typeof l||null!==n&&void 0!==n&&null!==(c=n.unitless)&&void 0!==c&&c[s]?String(l):"".concat(l,"px"),o[s]="var(".concat(u,")")}})),[o,yo(r,t,{scope:null===n||void 0===n?void 0:n.scope})]},wo=Er()?r.useLayoutEffect:r.useEffect,xo=function(e,t){var n=r.useRef(!0);wo((function(){return e(n.current)}),t),wo((function(){return n.current=!1,function(){n.current=!0}}),[])};const ko=xo;var So=_e({},o).useInsertionEffect;const Eo=So?function(e,t,n){return So((function(){return e(),t()}),n)}:function(e,t,n){r.useMemo(e,n),ko((function(){return t(!0)}),n)};const Co="undefined"!==typeof _e({},o).useInsertionEffect?function(e){var t=[],n=!1;return r.useEffect((function(){return n=!1,function(){n=!0,t.length&&t.forEach((function(e){return e()}))}}),e),function(e){n||t.push(e)}}:function(){return function(e){e()}};const No=function(){return!1};function jo(e,t,n,o,a){var i=r.useContext(to).cache,s=Qr([e].concat(hr(t))),l=Co([s]),c=(No(),function(e){i.opUpdate(s,(function(t){var r=kr(t||[void 0,void 0],2),o=r[0];var a=[void 0===o?0:o,r[1]||n()];return e?e(a):a}))});r.useMemo((function(){c()}),[s]);var u=i.opGet(s)[1];return Eo((function(){null===a||void 0===a||a(u)}),(function(e){return c((function(t){var n=kr(t,2),r=n[0],o=n[1];return e&&0===r&&(null===a||void 0===a||a(u)),[r+1,o]})),function(){i.opUpdate(s,(function(t){var n=kr(t||[],2),r=n[0],a=void 0===r?0:r,c=n[1];return 0===a-1?(l((function(){!e&&i.opGet(s)||null===o||void 0===o||o(c,!1)})),null):[a-1,c]}))}}),[s]),u}var Do={},Po=new Map;function To(e,t){Po.set(e,(Po.get(e)||0)-1);var n=Array.from(Po.keys()),r=n.filter((function(e){return(Po.get(e)||0)<=0}));n.length-r.length>0&&r.forEach((function(e){!function(e,t){"undefined"!==typeof document&&document.querySelectorAll("style[".concat(Gr,'="').concat(e,'"]')).forEach((function(e){var n;e[Jr]===t&&(null===(n=e.parentNode)||void 0===n||n.removeChild(e))}))}(e,t),Po.delete(e)}))}var _o="token";function Oo(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=(0,r.useContext)(to),a=o.cache.instanceId,i=o.container,s=n.salt,l=void 0===s?"":s,c=n.override,u=void 0===c?Do:c,d=n.formatToken,f=n.getComputedToken,p=n.cssVar,h=function(e,t){for(var n=lo,r=0;r<t.length;r+=1){var o=t[r];n.has(o)||n.set(o,new WeakMap),n=n.get(o)}return n.has(co)||n.set(co,e()),n.get(co)}((function(){return Object.assign.apply(Object,[{}].concat(hr(t)))}),t),m=fo(h),v=fo(u),g=p?fo(p):"",y=jo(_o,[l,e.id,m,v,g],(function(){var t,n=f?f(h,u,e):function(e,t,n,r){var o=_e(_e({},n.getDerivativeToken(e)),t);return r&&(o=r(o)),o}(h,u,e,d),r=_e({},n),o="";if(p){var a=kr(bo(n,p.key,{prefix:p.prefix,ignore:p.ignore,unitless:p.unitless,preserve:p.preserve}),2);n=a[0],o=a[1]}var i=po(n,l);n._tokenKey=i,r._tokenKey=po(r,l);var s=null!==(t=null===p||void 0===p?void 0:p.key)&&void 0!==t?t:i;n._themeKey=s,function(e){Po.set(e,(Po.get(e)||0)+1)}(s);var c="".concat("css","-").concat(Sr(i));return n._hashId=c,[n,c,r,o,(null===p||void 0===p?void 0:p.key)||""]}),(function(e){To(e[0]._themeKey,a)}),(function(e){var t=kr(e,4),n=t[0],r=t[3];if(p&&r){var o=Rr(r,Sr("css-variables-".concat(n._themeKey)),{mark:Xr,prepend:"queue",attachTo:i,priority:-999});o[Jr]=a,o.setAttribute(Gr,n._themeKey)}}));return y}function Mo(){return Mo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mo.apply(null,arguments)}const Ro={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var Ao="comm",Lo="rule",Io="decl",Fo=Math.abs,zo=String.fromCharCode;Object.assign;function Bo(e){return e.trim()}function Ho(e,t,n){return e.replace(t,n)}function Uo(e,t,n){return e.indexOf(t,n)}function Yo(e,t){return 0|e.charCodeAt(t)}function Wo(e,t,n){return e.slice(t,n)}function qo(e){return e.length}function Vo(e,t){return t.push(e),e}function Qo(e,t){for(var n="",r=0;r<e.length;r++)n+=t(e[r],r,e,t)||"";return n}function Ko(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case"@namespace":case Io:return e.return=e.return||e.value;case Ao:return"";case"@keyframes":return e.return=e.value+"{"+Qo(e.children,r)+"}";case Lo:if(!qo(e.value=e.props.join(",")))return""}return qo(n=Qo(e.children,r))?e.return=e.value+"{"+n+"}":""}var $o=1,Go=1,Xo=0,Jo=0,Zo=0,ea="";function ta(e,t,n,r,o,a,i,s){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:$o,column:Go,length:i,return:"",siblings:s}}function na(){return Zo=Jo>0?Yo(ea,--Jo):0,Go--,10===Zo&&(Go=1,$o--),Zo}function ra(){return Zo=Jo<Xo?Yo(ea,Jo++):0,Go++,10===Zo&&(Go=1,$o++),Zo}function oa(){return Yo(ea,Jo)}function aa(){return Jo}function ia(e,t){return Wo(ea,e,t)}function sa(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function la(e){return $o=Go=1,Xo=qo(ea=e),Jo=0,[]}function ca(e){return ea="",e}function ua(e){return Bo(ia(Jo-1,pa(91===e?e+2:40===e?e+1:e)))}function da(e){for(;(Zo=oa())&&Zo<33;)ra();return sa(e)>2||sa(Zo)>3?"":" "}function fa(e,t){for(;--t&&ra()&&!(Zo<48||Zo>102||Zo>57&&Zo<65||Zo>70&&Zo<97););return ia(e,aa()+(t<6&&32==oa()&&32==ra()))}function pa(e){for(;ra();)switch(Zo){case e:return Jo;case 34:case 39:34!==e&&39!==e&&pa(Zo);break;case 40:41===e&&pa(e);break;case 92:ra()}return Jo}function ha(e,t){for(;ra()&&e+Zo!==57&&(e+Zo!==84||47!==oa()););return"/*"+ia(t,Jo-1)+"*"+zo(47===e?e:ra())}function ma(e){for(;!sa(oa());)ra();return ia(e,Jo)}function va(e){return ca(ga("",null,null,null,[""],e=la(e),0,[0],e))}function ga(e,t,n,r,o,a,i,s,l){for(var c=0,u=0,d=i,f=0,p=0,h=0,m=1,v=1,g=1,y=0,b="",w=o,x=a,k=r,S=b;v;)switch(h=y,y=ra()){case 40:if(108!=h&&58==Yo(S,d-1)){-1!=Uo(S+=Ho(ua(y),"&","&\f"),"&\f",Fo(c?s[c-1]:0))&&(g=-1);break}case 34:case 39:case 91:S+=ua(y);break;case 9:case 10:case 13:case 32:S+=da(h);break;case 92:S+=fa(aa()-1,7);continue;case 47:switch(oa()){case 42:case 47:Vo(ba(ha(ra(),aa()),t,n,l),l),5!=sa(h||1)&&5!=sa(oa()||1)||!qo(S)||" "===Wo(S,-1,void 0)||(S+=" ");break;default:S+="/"}break;case 123*m:s[c++]=qo(S)*g;case 125*m:case 59:case 0:switch(y){case 0:case 125:v=0;case 59+u:-1==g&&(S=Ho(S,/\f/g,"")),p>0&&(qo(S)-d||0===m&&47===h)&&Vo(p>32?wa(S+";",r,n,d-1,l):wa(Ho(S," ","")+";",r,n,d-2,l),l);break;case 59:S+=";";default:if(Vo(k=ya(S,t,n,c,u,o,s,b,w=[],x=[],d,a),a),123===y)if(0===u)ga(S,t,k,k,w,a,d,s,x);else{switch(f){case 99:if(110===Yo(S,3))break;case 108:if(97===Yo(S,2))break;default:u=0;case 100:case 109:case 115:}u?ga(e,k,k,r&&Vo(ya(e,k,k,0,0,o,s,b,o,w=[],d,x),x),o,x,d,s,r?w:x):ga(S,k,k,k,[""],x,0,s,x)}}c=u=p=0,m=g=1,b=S="",d=i;break;case 58:d=1+qo(S),p=h;default:if(m<1)if(123==y)--m;else if(125==y&&0==m++&&125==na())continue;switch(S+=zo(y),y*m){case 38:g=u>0?1:(S+="\f",-1);break;case 44:s[c++]=(qo(S)-1)*g,g=1;break;case 64:45===oa()&&(S+=ua(ra())),f=oa(),u=d=qo(b=S+=ma(aa())),y++;break;case 45:45===h&&2==qo(S)&&(m=0)}}return a}function ya(e,t,n,r,o,a,i,s,l,c,u,d){for(var f=o-1,p=0===o?a:[""],h=function(e){return e.length}(p),m=0,v=0,g=0;m<r;++m)for(var y=0,b=Wo(e,f+1,f=Fo(v=i[m])),w=e;y<h;++y)(w=Bo(v>0?p[y]+" "+b:Ho(b,/&\f/g,p[y])))&&(l[g++]=w);return ta(e,t,n,0===o?Lo:s,l,c,u,d)}function ba(e,t,n,r){return ta(e,t,n,Ao,zo(Zo),Wo(e,2,-2),0,r)}function wa(e,t,n,r,o){return ta(e,t,n,Io,Wo(e,0,r),Wo(e,r+1,-1),r,o)}var xa,ka="data-ant-cssinjs-cache-path",Sa="_FILE_STYLE__";var Ea=!0;function Ca(e){return function(){if(!xa&&(xa={},Er())){var e=document.createElement("div");e.className=ka,e.style.position="fixed",e.style.visibility="hidden",e.style.top="-9999px",document.body.appendChild(e);var t=getComputedStyle(e).content||"";(t=t.replace(/^"/,"").replace(/"$/,"")).split(";").forEach((function(e){var t=kr(e.split(":"),2),n=t[0],r=t[1];xa[n]=r}));var n,r=document.querySelector("style[".concat(ka,"]"));r&&(Ea=!1,null===(n=r.parentNode)||void 0===n||n.removeChild(r)),document.body.removeChild(e)}}(),!!xa[e]}var Na="_multi_value_";function ja(e){return Qo(va(e),Ko).replace(/\{%%%\:[^;];}/g,";")}function Da(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map((function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat(hr(n.slice(1))).join(" ")})).join(",")}var Pa=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,i=r.parentSelectors,s=n.hashId,l=n.layer,c=(n.path,n.hashPriority),u=n.transformers,d=void 0===u?[]:u,f=(n.linters,""),p={};function h(t){var r=t.getName(s);if(!p[r]){var o=kr(e(t.style,n,{root:!1,parentSelectors:i}),1)[0];p[r]="@keyframes ".concat(t.getName(s)).concat(o)}}var m=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach((function(t){Array.isArray(t)?e(t,n):t&&n.push(t)})),n}(Array.isArray(t)?t:[t]);return m.forEach((function(t){var r="string"!==typeof t||o?t:{};if("string"===typeof r)f+="".concat(r,"\n");else if(r._keyframe)h(r);else{var l=d.reduce((function(e,t){var n;return(null===t||void 0===t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e}),r);Object.keys(l).forEach((function(t){var r=l[t];if("object"!==je(r)||!r||"animationName"===t&&r._keyframe||function(e){return"object"===je(e)&&e&&("_skip_check_"in e||Na in e)}(r)){var u;function x(e,t){var n=e.replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())})),r=t;Ro[e]||"number"!==typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!==t&&void 0!==t&&t._keyframe&&(h(t),r=t.getName(s)),f+="".concat(n,":").concat(r,";")}var d=null!==(u=null===r||void 0===r?void 0:r.value)&&void 0!==u?u:r;"object"===je(r)&&null!==r&&void 0!==r&&r[Na]&&Array.isArray(d)?d.forEach((function(e){x(t,e)})):x(t,d)}else{var m=!1,v=t.trim(),g=!1;(o||a)&&s?v.startsWith("@")?m=!0:v=Da("&"===v?"":t,s,c):!o||s||"&"!==v&&""!==v||(v="",g=!0);var y=kr(e(r,n,{root:g,injectHash:m,parentSelectors:[].concat(hr(i),[v])}),2),b=y[0],w=y[1];p=_e(_e({},p),w),f+="".concat(v).concat(b)}}))}})),o?l&&(f&&(f="@layer ".concat(l.name," {").concat(f,"}")),l.dependencies&&(p["@layer ".concat(l.name)]=l.dependencies.map((function(e){return"@layer ".concat(e,", ").concat(l.name,";")})).join("\n"))):f="{".concat(f,"}"),[f,p]};function Ta(e,t){return Sr("".concat(e.join("%")).concat(t))}function _a(){return null}var Oa="style";function Ma(e,t){var n=e.token,o=e.path,a=e.hashId,i=e.layer,s=e.nonce,l=e.clientOnly,c=e.order,u=void 0===c?0:c,d=r.useContext(to),f=d.autoClear,p=(d.mock,d.defaultCache),h=d.hashPriority,m=d.container,v=d.ssrInline,g=d.transformers,y=d.linters,b=d.cache,w=d.layer,x=n._tokenKey,k=[x];w&&k.push("layer"),k.push.apply(k,hr(o));var S=ho;var E=jo(Oa,k,(function(){var e=k.join("|");if(Ca(e)){var n=function(e){var t=xa[e],n=null;if(t&&Er())if(Ea)n=Sa;else{var r=document.querySelector("style[".concat(Xr,'="').concat(xa[e],'"]'));r?n=r.innerHTML:delete xa[e]}return[n,t]}(e),r=kr(n,2),s=r[0],c=r[1];if(s)return[s,x,c,{},l,u]}var d=t(),f=kr(Pa(d,{hashId:a,hashPriority:h,layer:w?i:void 0,path:o.join("-"),transformers:g,linters:y}),2),p=f[0],m=f[1],v=ja(p),b=Ta(k,v);return[v,x,b,m,l,u]}),(function(e,t){var n=kr(e,3)[2];(t||f)&&ho&&Mr(n,{mark:Xr})}),(function(e){var t=kr(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(S&&n!==Sa){var a={mark:Xr,prepend:!w&&"queue",attachTo:m,priority:u},i="function"===typeof s?s():s;i&&(a.csp={nonce:i});var l=[],c=[];Object.keys(o).forEach((function(e){e.startsWith("@layer")?l.push(e):c.push(e)})),l.forEach((function(e){Rr(ja(o[e]),"_layer-".concat(e),_e(_e({},a),{},{prepend:!0}))}));var d=Rr(n,r,a);d[Jr]=b.instanceId,d.setAttribute(Gr,x),c.forEach((function(e){Rr(ja(o[e]),"_effect-".concat(e),a)}))}})),C=kr(E,3),N=C[0],j=C[1],D=C[2];return function(e){var t,n;v&&!S&&p?t=r.createElement("style",Mo({},(Pe(n={},Gr,j),Pe(n,Xr,D),n),{dangerouslySetInnerHTML:{__html:N}})):t=r.createElement(_a,null);return r.createElement(r.Fragment,null,t,e)}}var Ra="cssVar";const Aa=function(e,t){var n=e.key,o=e.prefix,a=e.unitless,i=e.ignore,s=e.token,l=e.scope,c=void 0===l?"":l,u=(0,r.useContext)(to),d=u.cache.instanceId,f=u.container,p=s._tokenKey,h=[].concat(hr(e.path),[n,c,p]),m=jo(Ra,h,(function(){var e=t(),r=kr(bo(e,n,{prefix:o,unitless:a,ignore:i,scope:c}),2),s=r[0],l=r[1];return[s,l,Ta(h,l),n]}),(function(e){var t=kr(e,3)[2];ho&&Mr(t,{mark:Xr})}),(function(e){var t=kr(e,3),r=t[1],o=t[2];if(r){var a=Rr(r,o,{mark:Xr,prepend:"queue",attachTo:f,priority:-999});a[Jr]=d,a.setAttribute(Gr,n)}}));return m};var La;Pe(La={},Oa,(function(e,t,n){var r=kr(e,6),o=r[0],a=r[1],i=r[2],s=r[3],l=r[4],c=r[5],u=(n||{}).plain;if(l)return null;var d=o,f={"data-rc-order":"prependQueue","data-rc-priority":"".concat(c)};return d=vo(o,a,i,f,u),s&&Object.keys(s).forEach((function(e){if(!t[e]){t[e]=!0;var n=vo(ja(s[e]),a,"_effect-".concat(e),f,u);e.startsWith("@layer")?d=n+d:d+=n}})),[c,i,d]})),Pe(La,_o,(function(e,t,n){var r=kr(e,5),o=r[2],a=r[3],i=r[4],s=(n||{}).plain;if(!a)return null;var l=o._tokenKey;return[-999,l,vo(a,i,l,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]})),Pe(La,Ra,(function(e,t,n){var r=kr(e,4),o=r[1],a=r[2],i=r[3],s=(n||{}).plain;if(!o)return null;return[-999,a,vo(o,i,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]}));var Ia=function(){function e(t,n){Wr(this,e),Pe(this,"name",void 0),Pe(this,"style",void 0),Pe(this,"_keyframe",!0),this.name=t,this.style=n}return Vr(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();const Fa=Ia;function za(e){return e.notSplit=!0,e}za(["borderTop","borderBottom"]),za(["borderTop"]),za(["borderBottom"]),za(["borderLeft","borderRight"]),za(["borderLeft"]),za(["borderRight"]);const Ba=(0,r.createContext)({});function Ha(e,t){for(var n=e,r=0;r<t.length;r+=1){if(null===n||void 0===n)return;n=n[t[r]]}return n}function Ua(e,t,n,r){if(!t.length)return n;var o,a=function(e){return wr(e)||fr(e)||pr(e)||xr()}(t),i=a[0],s=a.slice(1);return o=e||"number"!==typeof i?Array.isArray(e)?hr(e):_e({},e):[],r&&void 0===n&&1===s.length?delete o[i][s[0]]:o[i]=Ua(o[i],s,n,r),o}function Ya(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.length&&r&&void 0===n&&!Ha(e,t.slice(0,-1))?e:Ua(e,t,n,r)}function Wa(e){return Array.isArray(e)?[]:{}}var qa="undefined"===typeof Reflect?Object.keys:Reflect.ownKeys;function Va(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Wa(t[0]);return t.forEach((function(e){!function t(n,o){var a,i=new Set(o),s=Ha(e,n),l=Array.isArray(s);if(l||"object"===je(a=s)&&null!==a&&Object.getPrototypeOf(a)===Object.prototype){if(!i.has(s)){i.add(s);var c=Ha(r,n);l?r=Ya(r,n,[]):c&&"object"===je(c)||(r=Ya(r,n,Wa(s))),qa(s).forEach((function(e){t([].concat(hr(n),[e]),i)}))}}else r=Ya(r,n,s)}([])})),r}function Qa(){}const Ka=r.createContext({}),$a=()=>{const e=()=>{};return e.deprecated=Qa,e},Ga=(0,r.createContext)(void 0);const Xa={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"};const Ja=_e(_e({},{yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0}),{},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",week:"Week",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",dateFormat:"M/D/YYYY",dateTimeFormat:"M/D/YYYY HH:mm:ss",previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"}),Za={placeholder:"Select time",rangePlaceholder:["Start time","End time"]},ei={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},Ja),timePickerLocale:Object.assign({},Za)},ti="${label} is not a valid ${type}",ni={locale:"en",Pagination:Xa,DatePicker:ei,TimePicker:Za,Calendar:ei,global:{placeholder:"Please select",close:"Close"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckAll:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",deselectAll:"Deselect all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand",collapse:"Collapse"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:ti,method:ti,array:ti,object:ti,number:ti,date:ti,boolean:ti,integer:ti,float:ti,regexp:ti,email:ti,url:ti,hex:ti},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty",transparent:"Transparent",singleColor:"Single",gradientColor:"Gradient"}};let ri=Object.assign({},ni.Modal),oi=[];const ai=()=>oi.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),ni.Modal);const ii=(0,r.createContext)(void 0);const si=e=>{const{locale:t={},children:n,_ANT_MARK__:o}=e;r.useEffect((()=>{const e=function(e){if(e){const t=Object.assign({},e);return oi.push(t),ri=ai(),()=>{oi=oi.filter((e=>e!==t)),ri=ai()}}ri=Object.assign({},ni.Modal)}(null===t||void 0===t?void 0:t.Modal);return e}),[t]);const a=r.useMemo((()=>Object.assign(Object.assign({},t),{exist:!0})),[t]);return r.createElement(ii.Provider,{value:a},n)},li=Math.round;function ci(e,t){const n=e.replace(/^[^(]*\((.*)/,"$1").replace(/\).*/,"").match(/\d*\.?\d+%?/g)||[],r=n.map((e=>parseFloat(e)));for(let o=0;o<3;o+=1)r[o]=t(r[o]||0,n[o]||"",o);return n[3]?r[3]=n[3].includes("%")?r[3]/100:r[3]:r[3]=1,r}const ui=(e,t,n)=>0===n?e:e/100;function di(e,t){const n=t||255;return e>n?n:e<0?0:e}class fi{constructor(e){function t(t){return t[0]in e&&t[1]in e&&t[2]in e}if(Pe(this,"isValid",!0),Pe(this,"r",0),Pe(this,"g",0),Pe(this,"b",0),Pe(this,"a",1),Pe(this,"_h",void 0),Pe(this,"_s",void 0),Pe(this,"_l",void 0),Pe(this,"_v",void 0),Pe(this,"_max",void 0),Pe(this,"_min",void 0),Pe(this,"_brightness",void 0),e)if("string"===typeof e){const n=e.trim();function r(e){return n.startsWith(e)}/^#?[A-F\d]{3,8}$/i.test(n)?this.fromHexString(n):r("rgb")?this.fromRgbString(n):r("hsl")?this.fromHslString(n):(r("hsv")||r("hsb"))&&this.fromHsvString(n)}else if(e instanceof fi)this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this._h=e._h,this._s=e._s,this._l=e._l,this._v=e._v;else if(t("rgb"))this.r=di(e.r),this.g=di(e.g),this.b=di(e.b),this.a="number"===typeof e.a?di(e.a,1):1;else if(t("hsl"))this.fromHsl(e);else{if(!t("hsv"))throw new Error("@ant-design/fast-color: unsupported input "+JSON.stringify(e));this.fromHsv(e)}else;}setR(e){return this._sc("r",e)}setG(e){return this._sc("g",e)}setB(e){return this._sc("b",e)}setA(e){return this._sc("a",e,1)}setHue(e){const t=this.toHsv();return t.h=e,this._c(t)}getLuminance(){function e(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}return.2126*e(this.r)+.7152*e(this.g)+.0722*e(this.b)}getHue(){if("undefined"===typeof this._h){const e=this.getMax()-this.getMin();this._h=0===e?0:li(60*(this.r===this.getMax()?(this.g-this.b)/e+(this.g<this.b?6:0):this.g===this.getMax()?(this.b-this.r)/e+2:(this.r-this.g)/e+4))}return this._h}getSaturation(){if("undefined"===typeof this._s){const e=this.getMax()-this.getMin();this._s=0===e?0:e/this.getMax()}return this._s}getLightness(){return"undefined"===typeof this._l&&(this._l=(this.getMax()+this.getMin())/510),this._l}getValue(){return"undefined"===typeof this._v&&(this._v=this.getMax()/255),this._v}getBrightness(){return"undefined"===typeof this._brightness&&(this._brightness=(299*this.r+587*this.g+114*this.b)/1e3),this._brightness}darken(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()-e/100;return r<0&&(r=0),this._c({h:t,s:n,l:r,a:this.a})}lighten(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()+e/100;return r>1&&(r=1),this._c({h:t,s:n,l:r,a:this.a})}mix(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;const n=this._c(e),r=t/100,o=e=>(n[e]-this[e])*r+this[e],a={r:li(o("r")),g:li(o("g")),b:li(o("b")),a:li(100*o("a"))/100};return this._c(a)}tint(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:255,g:255,b:255,a:1},e)}shade(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:0,g:0,b:0,a:1},e)}onBackground(e){const t=this._c(e),n=this.a+t.a*(1-this.a),r=e=>li((this[e]*this.a+t[e]*t.a*(1-this.a))/n);return this._c({r:r("r"),g:r("g"),b:r("b"),a:n})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}clone(){return this._c(this)}toHexString(){let e="#";const t=(this.r||0).toString(16);e+=2===t.length?t:"0"+t;const n=(this.g||0).toString(16);e+=2===n.length?n:"0"+n;const r=(this.b||0).toString(16);if(e+=2===r.length?r:"0"+r,"number"===typeof this.a&&this.a>=0&&this.a<1){const t=li(255*this.a).toString(16);e+=2===t.length?t:"0"+t}return e}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const e=this.getHue(),t=li(100*this.getSaturation()),n=li(100*this.getLightness());return 1!==this.a?"hsla(".concat(e,",").concat(t,"%,").concat(n,"%,").concat(this.a,")"):"hsl(".concat(e,",").concat(t,"%,").concat(n,"%)")}toHsv(){return{h:this.getHue(),s:this.getSaturation(),v:this.getValue(),a:this.a}}toRgb(){return{r:this.r,g:this.g,b:this.b,a:this.a}}toRgbString(){return 1!==this.a?"rgba(".concat(this.r,",").concat(this.g,",").concat(this.b,",").concat(this.a,")"):"rgb(".concat(this.r,",").concat(this.g,",").concat(this.b,")")}toString(){return this.toRgbString()}_sc(e,t,n){const r=this.clone();return r[e]=di(t,n),r}_c(e){return new this.constructor(e)}getMax(){return"undefined"===typeof this._max&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return"undefined"===typeof this._min&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(e){const t=e.replace("#","");function n(e,n){return parseInt(t[e]+t[n||e],16)}t.length<6?(this.r=n(0),this.g=n(1),this.b=n(2),this.a=t[3]?n(3)/255:1):(this.r=n(0,1),this.g=n(2,3),this.b=n(4,5),this.a=t[6]?n(6,7)/255:1)}fromHsl(e){let{h:t,s:n,l:r,a:o}=e;if(this._h=t%360,this._s=n,this._l=r,this.a="number"===typeof o?o:1,n<=0){const e=li(255*r);this.r=e,this.g=e,this.b=e}let a=0,i=0,s=0;const l=t/60,c=(1-Math.abs(2*r-1))*n,u=c*(1-Math.abs(l%2-1));l>=0&&l<1?(a=c,i=u):l>=1&&l<2?(a=u,i=c):l>=2&&l<3?(i=c,s=u):l>=3&&l<4?(i=u,s=c):l>=4&&l<5?(a=u,s=c):l>=5&&l<6&&(a=c,s=u);const d=r-c/2;this.r=li(255*(a+d)),this.g=li(255*(i+d)),this.b=li(255*(s+d))}fromHsv(e){let{h:t,s:n,v:r,a:o}=e;this._h=t%360,this._s=n,this._v=r,this.a="number"===typeof o?o:1;const a=li(255*r);if(this.r=a,this.g=a,this.b=a,n<=0)return;const i=t/60,s=Math.floor(i),l=i-s,c=li(r*(1-n)*255),u=li(r*(1-n*l)*255),d=li(r*(1-n*(1-l))*255);switch(s){case 0:this.g=d,this.b=c;break;case 1:this.r=u,this.b=c;break;case 2:this.r=c,this.b=d;break;case 3:this.r=c,this.g=u;break;case 4:this.r=d,this.g=c;break;default:this.g=c,this.b=u}}fromHsvString(e){const t=ci(e,ui);this.fromHsv({h:t[0],s:t[1],v:t[2],a:t[3]})}fromHslString(e){const t=ci(e,ui);this.fromHsl({h:t[0],s:t[1],l:t[2],a:t[3]})}fromRgbString(e){const t=ci(e,((e,t)=>t.includes("%")?li(e/100*255):e));this.r=t[0],this.g=t[1],this.b=t[2],this.a=t[3]}}var pi=[{index:7,amount:15},{index:6,amount:25},{index:5,amount:30},{index:5,amount:45},{index:5,amount:65},{index:5,amount:85},{index:4,amount:90},{index:3,amount:95},{index:2,amount:97},{index:1,amount:98}];function hi(e,t,n){var r;return(r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function mi(e,t,n){return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Math.round(100*r)/100);var r}function vi(e,t,n){var r;return r=n?e.v+.05*t:e.v-.15*t,r=Math.max(0,Math.min(1,r)),Math.round(100*r)/100}function gi(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=new fi(e),o=r.toHsv(),a=5;a>0;a-=1){var i=new fi({h:hi(o,a,!0),s:mi(o,a,!0),v:vi(o,a,!0)});n.push(i)}n.push(r);for(var s=1;s<=4;s+=1){var l=new fi({h:hi(o,s),s:mi(o,s),v:vi(o,s)});n.push(l)}return"dark"===t.theme?pi.map((function(e){var r=e.index,o=e.amount;return new fi(t.backgroundColor||"#141414").mix(n[r],o).toHexString()})):n.map((function(e){return e.toHexString()}))}var yi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},bi=["#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011"];bi.primary=bi[5];var wi=["#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00"];wi.primary=wi[5];var xi=["#fff7e6","#ffe7ba","#ffd591","#ffc069","#ffa940","#fa8c16","#d46b08","#ad4e00","#873800","#612500"];xi.primary=xi[5];var ki=["#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400"];ki.primary=ki[5];var Si=["#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700"];Si.primary=Si[5];var Ei=["#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000"];Ei.primary=Ei[5];var Ci=["#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00"];Ci.primary=Ci[5];var Ni=["#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329"];Ni.primary=Ni[5];var ji=["#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66"];ji.primary=ji[5];var Di=["#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852"];Di.primary=Di[5];var Pi=["#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338"];Pi.primary=Pi[5];var Ti=["#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339"];Ti.primary=Ti[5];var _i=["#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000"];_i.primary=_i[5];var Oi={red:bi,volcano:wi,orange:xi,gold:ki,yellow:Si,lime:Ei,green:Ci,cyan:Ni,blue:ji,geekblue:Di,purple:Pi,magenta:Ti,grey:_i},Mi=["#2a1215","#431418","#58181c","#791a1f","#a61d24","#d32029","#e84749","#f37370","#f89f9a","#fac8c3"];Mi.primary=Mi[5];var Ri=["#2b1611","#441d12","#592716","#7c3118","#aa3e19","#d84a1b","#e87040","#f3956a","#f8b692","#fad4bc"];Ri.primary=Ri[5];var Ai=["#2b1d11","#442a11","#593815","#7c4a15","#aa6215","#d87a16","#e89a3c","#f3b765","#f8cf8d","#fae3b7"];Ai.primary=Ai[5];var Li=["#2b2111","#443111","#594214","#7c5914","#aa7714","#d89614","#e8b339","#f3cc62","#f8df8b","#faedb5"];Li.primary=Li[5];var Ii=["#2b2611","#443b11","#595014","#7c6e14","#aa9514","#d8bd14","#e8d639","#f3ea62","#f8f48b","#fafab5"];Ii.primary=Ii[5];var Fi=["#1f2611","#2e3c10","#3e4f13","#536d13","#6f9412","#8bbb11","#a9d134","#c9e75d","#e4f88b","#f0fab5"];Fi.primary=Fi[5];var zi=["#162312","#1d3712","#274916","#306317","#3c8618","#49aa19","#6abe39","#8fd460","#b2e58b","#d5f2bb"];zi.primary=zi[5];var Bi=["#112123","#113536","#144848","#146262","#138585","#13a8a8","#33bcb7","#58d1c9","#84e2d8","#b2f1e8"];Bi.primary=Bi[5];var Hi=["#111a2c","#112545","#15325b","#15417e","#1554ad","#1668dc","#3c89e8","#65a9f3","#8dc5f8","#b7dcfa"];Hi.primary=Hi[5];var Ui=["#131629","#161d40","#1c2755","#203175","#263ea0","#2b4acb","#5273e0","#7f9ef3","#a8c1f8","#d2e0fa"];Ui.primary=Ui[5];var Yi=["#1a1325","#24163a","#301c4d","#3e2069","#51258f","#642ab5","#854eca","#ab7ae0","#cda8f0","#ebd7fa"];Yi.primary=Yi[5];var Wi=["#291321","#40162f","#551c3b","#75204f","#a02669","#cb2b83","#e0529c","#f37fb7","#f8a8cc","#fad2e3"];Wi.primary=Wi[5];var qi=["#151515","#1f1f1f","#2d2d2d","#393939","#494949","#5a5a5a","#6a6a6a","#7b7b7b","#888888","#969696"];qi.primary=qi[5];const Vi={blue:"#1677FF",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#EB2F96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},Qi=Object.assign(Object.assign({},Vi),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});const Ki=e=>{let t=e,n=e,r=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?n=4:e<8&&e>=7?n=5:e<14&&e>=8?n=6:e<16&&e>=14?n=7:e>=16&&(n=8),e<6&&e>=2?r=1:e>=6&&(r=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:r,borderRadiusSM:n,borderRadiusLG:t,borderRadiusOuter:o}};const $i=e=>{const{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}};const Gi=e=>{const t=function(e){const t=Array.from({length:10}).map(((t,n)=>{const r=n-1,o=e*Math.pow(Math.E,r/5),a=n>1?Math.floor(o):Math.ceil(o);return 2*Math.floor(a/2)}));return t[1]=e,t.map((e=>{return{size:e,lineHeight:(t=e,(t+8)/t)};var t}))}(e),n=t.map((e=>e.size)),r=t.map((e=>e.lineHeight)),o=n[1],a=n[0],i=n[2],s=r[1],l=r[0],c=r[2];return{fontSizeSM:a,fontSize:o,fontSizeLG:i,fontSizeXL:n[3],fontSizeHeading1:n[6],fontSizeHeading2:n[5],fontSizeHeading3:n[4],fontSizeHeading4:n[3],fontSizeHeading5:n[2],lineHeight:s,lineHeightLG:c,lineHeightSM:l,fontHeight:Math.round(s*o),fontHeightLG:Math.round(c*i),fontHeightSM:Math.round(l*a),lineHeightHeading1:r[6],lineHeightHeading2:r[5],lineHeightHeading3:r[4],lineHeightHeading4:r[3],lineHeightHeading5:r[2]}};const Xi=(e,t)=>new fi(e).setA(t).toRgbString(),Ji=(e,t)=>new fi(e).darken(t).toHexString(),Zi=e=>{const t=gi(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},es=(e,t)=>{const n=e||"#fff",r=t||"#000";return{colorBgBase:n,colorTextBase:r,colorText:Xi(r,.88),colorTextSecondary:Xi(r,.65),colorTextTertiary:Xi(r,.45),colorTextQuaternary:Xi(r,.25),colorFill:Xi(r,.15),colorFillSecondary:Xi(r,.06),colorFillTertiary:Xi(r,.04),colorFillQuaternary:Xi(r,.02),colorBgSolid:Xi(r,1),colorBgSolidHover:Xi(r,.75),colorBgSolidActive:Xi(r,.95),colorBgLayout:Ji(n,4),colorBgContainer:Ji(n,0),colorBgElevated:Ji(n,0),colorBgSpotlight:Xi(r,.85),colorBgBlur:"transparent",colorBorder:Ji(n,15),colorBorderSecondary:Ji(n,6)}};const ts=so((function(e){yi.pink=yi.magenta,Oi.pink=Oi.magenta;const t=Object.keys(Vi).map((t=>{const n=e[t]===yi[t]?Oi[t]:gi(e[t]);return Array.from({length:10},(()=>1)).reduce(((e,r,o)=>(e["".concat(t,"-").concat(o+1)]=n[o],e["".concat(t).concat(o+1)]=n[o],e)),{})})).reduce(((e,t)=>e=Object.assign(Object.assign({},e),t)),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:n,generateNeutralColorPalettes:r}=t;const{colorSuccess:o,colorWarning:a,colorError:i,colorInfo:s,colorPrimary:l,colorBgBase:c,colorTextBase:u}=e,d=n(l),f=n(o),p=n(a),h=n(i),m=n(s),v=r(c,u),g=n(e.colorLink||e.colorInfo),y=new fi(h[1]).mix(new fi(h[3]),50).toHexString();return Object.assign(Object.assign({},v),{colorPrimaryBg:d[1],colorPrimaryBgHover:d[2],colorPrimaryBorder:d[3],colorPrimaryBorderHover:d[4],colorPrimaryHover:d[5],colorPrimary:d[6],colorPrimaryActive:d[7],colorPrimaryTextHover:d[8],colorPrimaryText:d[9],colorPrimaryTextActive:d[10],colorSuccessBg:f[1],colorSuccessBgHover:f[2],colorSuccessBorder:f[3],colorSuccessBorderHover:f[4],colorSuccessHover:f[4],colorSuccess:f[6],colorSuccessActive:f[7],colorSuccessTextHover:f[8],colorSuccessText:f[9],colorSuccessTextActive:f[10],colorErrorBg:h[1],colorErrorBgHover:h[2],colorErrorBgFilledHover:y,colorErrorBgActive:h[3],colorErrorBorder:h[3],colorErrorBorderHover:h[4],colorErrorHover:h[5],colorError:h[6],colorErrorActive:h[7],colorErrorTextHover:h[8],colorErrorText:h[9],colorErrorTextActive:h[10],colorWarningBg:p[1],colorWarningBgHover:p[2],colorWarningBorder:p[3],colorWarningBorderHover:p[4],colorWarningHover:p[4],colorWarning:p[6],colorWarningActive:p[7],colorWarningTextHover:p[8],colorWarningText:p[9],colorWarningTextActive:p[10],colorInfoBg:m[1],colorInfoBgHover:m[2],colorInfoBorder:m[3],colorInfoBorderHover:m[4],colorInfoHover:m[4],colorInfo:m[6],colorInfoActive:m[7],colorInfoTextHover:m[8],colorInfoText:m[9],colorInfoTextActive:m[10],colorLinkHover:g[4],colorLink:g[6],colorLinkActive:g[7],colorBgMask:new fi("#000").setA(.45).toRgbString(),colorWhite:"#fff"})}(e,{generateColorPalettes:Zi,generateNeutralColorPalettes:es})),Gi(e.fontSize)),function(e){const{sizeUnit:t,sizeStep:n}=e;return{sizeXXL:t*(n+8),sizeXL:t*(n+4),sizeLG:t*(n+2),sizeMD:t*(n+1),sizeMS:t*n,size:t*n,sizeSM:t*(n-1),sizeXS:t*(n-2),sizeXXS:t*(n-3)}}(e)),$i(e)),function(e){const{motionUnit:t,motionBase:n,borderRadius:r,lineWidth:o}=e;return Object.assign({motionDurationFast:"".concat((n+t).toFixed(1),"s"),motionDurationMid:"".concat((n+2*t).toFixed(1),"s"),motionDurationSlow:"".concat((n+3*t).toFixed(1),"s"),lineWidthBold:o+1},Ki(r))}(e))})),ns=ts,rs={token:Qi,override:{override:Qi},hashed:!0},os=r.createContext(rs),as="-ant-".concat(Date.now(),"-").concat(Math.random());function is(e,t){const n=function(e,t){const n={},r=(e,t)=>{let n=e.clone();return n=(null===t||void 0===t?void 0:t(n))||n,n.toRgbString()},o=(e,t)=>{const o=new fi(e),a=gi(o.toRgbString());n["".concat(t,"-color")]=r(o),n["".concat(t,"-color-disabled")]=a[1],n["".concat(t,"-color-hover")]=a[4],n["".concat(t,"-color-active")]=a[6],n["".concat(t,"-color-outline")]=o.clone().setA(.2).toRgbString(),n["".concat(t,"-color-deprecated-bg")]=a[0],n["".concat(t,"-color-deprecated-border")]=a[2]};if(t.primaryColor){o(t.primaryColor,"primary");const e=new fi(t.primaryColor),a=gi(e.toRgbString());a.forEach(((e,t)=>{n["primary-".concat(t+1)]=e})),n["primary-color-deprecated-l-35"]=r(e,(e=>e.lighten(35))),n["primary-color-deprecated-l-20"]=r(e,(e=>e.lighten(20))),n["primary-color-deprecated-t-20"]=r(e,(e=>e.tint(20))),n["primary-color-deprecated-t-50"]=r(e,(e=>e.tint(50))),n["primary-color-deprecated-f-12"]=r(e,(e=>e.setA(.12*e.a)));const i=new fi(a[0]);n["primary-color-active-deprecated-f-30"]=r(i,(e=>e.setA(.3*e.a))),n["primary-color-active-deprecated-d-02"]=r(i,(e=>e.darken(2)))}t.successColor&&o(t.successColor,"success"),t.warningColor&&o(t.warningColor,"warning"),t.errorColor&&o(t.errorColor,"error"),t.infoColor&&o(t.infoColor,"info");const a=Object.keys(n).map((t=>"--".concat(e,"-").concat(t,": ").concat(n[t],";")));return"\n  :root {\n    ".concat(a.join("\n"),"\n  }\n  ").trim()}(e,t);Er()&&Rr(n,"".concat(as,"-dynamic-theme"))}const ss=r.createContext(!1),ls=e=>{let{children:t,disabled:n}=e;const o=r.useContext(ss);return r.createElement(ss.Provider,{value:null!==n&&void 0!==n?n:o},t)},cs=ss,us=r.createContext(void 0),ds=e=>{let{children:t,size:n}=e;const o=r.useContext(us);return r.createElement(us.Provider,{value:n||o},t)},fs=us;const ps=function(){return{componentDisabled:(0,r.useContext)(cs),componentSize:(0,r.useContext)(fs)}},hs=Object.assign({},o),{useId:ms}=hs,vs="undefined"===typeof ms?()=>"":ms;var gs=n(97),ys=n.n(gs);function bs(e){return e instanceof HTMLElement||e instanceof SVGElement}function ws(e){var t,n=function(e){return e&&"object"===je(e)&&bs(e.nativeElement)?e.nativeElement:bs(e)?e:null}(e);return n||(e instanceof r.Component?null===(t=i.findDOMNode)||void 0===t?void 0:t.call(i,e):null)}var xs=n(808),ks=Symbol.for("react.element"),Ss=Symbol.for("react.transitional.element"),Es=Symbol.for("react.fragment");var Cs=Number(r.version.split(".")[0]),Ns=function(e,t){"function"===typeof e?e(t):"object"===je(e)&&e&&"current"in e&&(e.current=t)},js=function(e){var t,n;if(!e)return!1;if(Ds(e)&&Cs>=19)return!0;var r=(0,xs.isMemo)(e)?e.type.type:e.type;return!!("function"!==typeof r||null!==(t=r.prototype)&&void 0!==t&&t.render||r.$$typeof===xs.ForwardRef)&&!!("function"!==typeof e||null!==(n=e.prototype)&&void 0!==n&&n.render||e.$$typeof===xs.ForwardRef)};function Ds(e){return(0,r.isValidElement)(e)&&!((t=e)&&"object"===je(t)&&(t.$$typeof===ks||t.$$typeof===Ss)&&t.type===Es);var t}function Ps(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ts=["children"],_s=r.createContext({});function Os(e){var t=e.children,n=Ps(e,Ts);return r.createElement(_s.Provider,{value:n},t)}function Ms(e,t){return Ms=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ms(e,t)}function Rs(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ms(e,t)}function As(e){return As=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},As(e)}function Ls(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ls=function(){return!!e})()}function Is(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fs(e){var t=Ls();return function(){var n,r=As(e);if(t){var o=As(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return function(e,t){if(t&&("object"==je(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return Is(e)}(this,n)}}const zs=function(e){Rs(n,e);var t=Fs(n);function n(){return Wr(this,n),t.apply(this,arguments)}return Vr(n,[{key:"render",value:function(){return this.props.children}}]),n}(r.Component);function Bs(e){var t=r.useRef();t.current=e;var n=r.useCallback((function(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return null===(e=t.current)||void 0===e?void 0:e.call.apply(e,[t].concat(r))}),[]);return n}function Hs(e){var t=r.useRef(!1),n=kr(r.useState(e),2),o=n[0],a=n[1];return r.useEffect((function(){return t.current=!1,function(){t.current=!0}}),[]),[o,function(e,n){n&&t.current||a(e)}]}var Us="none",Ys="appear",Ws="enter",qs="leave",Vs="none",Qs="prepare",Ks="start",$s="active",Gs="end",Xs="prepared";function Js(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var Zs=function(e,t){var n={animationend:Js("Animation","AnimationEnd"),transitionend:Js("Transition","TransitionEnd")};return e&&("AnimationEvent"in t||delete n.animationend.animation,"TransitionEvent"in t||delete n.transitionend.transition),n}(Er(),"undefined"!==typeof window?window:{}),el={};if(Er()){var tl=document.createElement("div");el=tl.style}var nl={};function rl(e){if(nl[e])return nl[e];var t=Zs[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o<r;o+=1){var a=n[o];if(Object.prototype.hasOwnProperty.call(t,a)&&a in el)return nl[e]=t[a],nl[e]}return""}var ol=rl("animationend"),al=rl("transitionend"),il=!(!ol||!al),sl=ol||"animationend",ll=al||"transitionend";function cl(e,t){if(!e)return null;if("object"===je(e)){var n=t.replace(/-\w/g,(function(e){return e[1].toUpperCase()}));return e[n]}return"".concat(e,"-").concat(t)}const ul=Er()?r.useLayoutEffect:r.useEffect;var dl=function(e){return+setTimeout(e,16)},fl=function(e){return clearTimeout(e)};"undefined"!==typeof window&&"requestAnimationFrame"in window&&(dl=function(e){return window.requestAnimationFrame(e)},fl=function(e){return window.cancelAnimationFrame(e)});var pl=0,hl=new Map;function ml(e){hl.delete(e)}var vl=function(e){var t=pl+=1;return function n(r){if(0===r)ml(t),e();else{var o=dl((function(){n(r-1)}));hl.set(t,o)}}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:1),t};vl.cancel=function(e){var t=hl.get(e);return ml(e),fl(t)};const gl=vl;var yl=[Qs,Ks,$s,Gs],bl=[Qs,Xs],wl=!1;function xl(e){return e===$s||e===Gs}const kl=function(e,t,n){var o=kr(Hs(Vs),2),a=o[0],i=o[1],s=function(){var e=r.useRef(null);function t(){gl.cancel(e.current)}return r.useEffect((function(){return function(){t()}}),[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var a=gl((function(){o<=1?r({isCanceled:function(){return a!==e.current}}):n(r,o-1)}));e.current=a},t]}(),l=kr(s,2),c=l[0],u=l[1];var d=t?bl:yl;return ul((function(){if(a!==Vs&&a!==Gs){var e=d.indexOf(a),t=d[e+1],r=n(a);r===wl?i(t,!0):t&&c((function(e){function n(){e.isCanceled()||i(t,!0)}!0===r?n():Promise.resolve(r).then(n)}))}}),[e,a]),r.useEffect((function(){return function(){u()}}),[]),[function(){i(Qs,!0)},a]};function Sl(e,t,n,o){var a=o.motionEnter,i=void 0===a||a,s=o.motionAppear,l=void 0===s||s,c=o.motionLeave,u=void 0===c||c,d=o.motionDeadline,f=o.motionLeaveImmediately,p=o.onAppearPrepare,h=o.onEnterPrepare,m=o.onLeavePrepare,v=o.onAppearStart,g=o.onEnterStart,y=o.onLeaveStart,b=o.onAppearActive,w=o.onEnterActive,x=o.onLeaveActive,k=o.onAppearEnd,S=o.onEnterEnd,E=o.onLeaveEnd,C=o.onVisibleChanged,N=kr(Hs(),2),j=N[0],D=N[1],P=function(e){var t=kr(r.useReducer((function(e){return e+1}),0),2)[1],n=r.useRef(e);return[Bs((function(){return n.current})),Bs((function(e){n.current="function"===typeof e?e(n.current):e,t()}))]}(Us),T=kr(P,2),_=T[0],O=T[1],M=kr(Hs(null),2),R=M[0],A=M[1],L=_(),I=(0,r.useRef)(!1),F=(0,r.useRef)(null);function z(){return n()}var B=(0,r.useRef)(!1);function H(){O(Us),A(null,!0)}var U=Bs((function(e){var t=_();if(t!==Us){var n=z();if(!e||e.deadline||e.target===n){var r,o=B.current;t===Ys&&o?r=null===k||void 0===k?void 0:k(n,e):t===Ws&&o?r=null===S||void 0===S?void 0:S(n,e):t===qs&&o&&(r=null===E||void 0===E?void 0:E(n,e)),o&&!1!==r&&H()}}})),Y=function(e){var t=(0,r.useRef)();function n(t){t&&(t.removeEventListener(ll,e),t.removeEventListener(sl,e))}return r.useEffect((function(){return function(){n(t.current)}}),[]),[function(r){t.current&&t.current!==r&&n(t.current),r&&r!==t.current&&(r.addEventListener(ll,e),r.addEventListener(sl,e),t.current=r)},n]}(U),W=kr(Y,1)[0],q=function(e){switch(e){case Ys:return Pe(Pe(Pe({},Qs,p),Ks,v),$s,b);case Ws:return Pe(Pe(Pe({},Qs,h),Ks,g),$s,w);case qs:return Pe(Pe(Pe({},Qs,m),Ks,y),$s,x);default:return{}}},V=r.useMemo((function(){return q(L)}),[L]),Q=kr(kl(L,!e,(function(e){if(e===Qs){var t=V[Qs];return t?t(z()):wl}var n;$ in V&&A((null===(n=V[$])||void 0===n?void 0:n.call(V,z(),null))||null);return $===$s&&L!==Us&&(W(z()),d>0&&(clearTimeout(F.current),F.current=setTimeout((function(){U({deadline:!0})}),d))),$===Xs&&H(),true})),2),K=Q[0],$=Q[1],G=xl($);B.current=G;var X=(0,r.useRef)(null);ul((function(){if(!I.current||X.current!==t){D(t);var n,r=I.current;I.current=!0,!r&&t&&l&&(n=Ys),r&&t&&i&&(n=Ws),(r&&!t&&u||!r&&f&&!t&&u)&&(n=qs);var o=q(n);n&&(e||o[Qs])?(O(n),K()):O(Us),X.current=t}}),[t]),(0,r.useEffect)((function(){(L===Ys&&!l||L===Ws&&!i||L===qs&&!u)&&O(Us)}),[l,i,u]),(0,r.useEffect)((function(){return function(){I.current=!1,clearTimeout(F.current)}}),[]);var J=r.useRef(!1);(0,r.useEffect)((function(){j&&(J.current=!0),void 0!==j&&L===Us&&((J.current||j)&&(null===C||void 0===C||C(j)),J.current=!0)}),[j,L]);var Z=R;return V[Qs]&&$===Ks&&(Z=_e({transition:"none"},Z)),[L,$,Z,null!==j&&void 0!==j?j:t]}const El=function(e){var t=e;"object"===je(e)&&(t=e.transitionSupport);var n=r.forwardRef((function(e,n){var o=e.visible,a=void 0===o||o,i=e.removeOnLeave,s=void 0===i||i,l=e.forceRender,c=e.children,u=e.motionName,d=e.leavedClassName,f=e.eventProps,p=function(e,n){return!(!e.motionName||!t||!1===n)}(e,r.useContext(_s).motion),h=(0,r.useRef)(),m=(0,r.useRef)();var v=kr(Sl(p,a,(function(){try{return h.current instanceof HTMLElement?h.current:ws(m.current)}catch(Dy){return null}}),e),4),g=v[0],y=v[1],b=v[2],w=v[3],x=r.useRef(w);w&&(x.current=!0);var k,S=r.useCallback((function(e){h.current=e,Ns(n,e)}),[n]),E=_e(_e({},f),{},{visible:a});if(c)if(g===Us)k=w?c(_e({},E),S):!s&&x.current&&d?c(_e(_e({},E),{},{className:d}),S):l||!s&&!d?c(_e(_e({},E),{},{style:{display:"none"}}),S):null;else{var C;y===Qs?C="prepare":xl(y)?C="active":y===Ks&&(C="start");var N=cl(u,"".concat(g,"-").concat(C));k=c(_e(_e({},E),{},{className:ys()(cl(u,g),Pe(Pe({},N,N&&C),u,"string"===typeof u)),style:b}),S)}else k=null;if(r.isValidElement(k)&&js(k)){var j=function(e){if(e&&Ds(e)){var t=e;return t.props.propertyIsEnumerable("ref")?t.props.ref:t.ref}return null}(k);j||(k=r.cloneElement(k,{ref:S}))}return r.createElement(zs,{ref:m},k)}));return n.displayName="CSSMotion",n}(il);var Cl="add",Nl="keep",jl="remove",Dl="removed";function Pl(e){var t;return _e(_e({},t=e&&"object"===je(e)&&"key"in e?e:{key:e}),{},{key:String(t.key)})}function Tl(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(Pl)}var _l=["component","children","onVisibleChanged","onAllRemoved"],Ol=["status"],Ml=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];const Rl=function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:El,t=function(t){Rs(o,t);var n=Fs(o);function o(){var e;Wr(this,o);for(var t=arguments.length,r=new Array(t),a=0;a<t;a++)r[a]=arguments[a];return Pe(Is(e=n.call.apply(n,[this].concat(r))),"state",{keyEntities:[]}),Pe(Is(e),"removeKey",(function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:_e(_e({},e),{},{status:Dl})}))}}),(function(){0===e.state.keyEntities.filter((function(e){return e.status!==Dl})).length&&e.props.onAllRemoved&&e.props.onAllRemoved()}))})),e}return Vr(o,[{key:"render",value:function(){var t=this,n=this.state.keyEntities,o=this.props,a=o.component,i=o.children,s=o.onVisibleChanged,l=(o.onAllRemoved,Ps(o,_l)),c=a||r.Fragment,u={};return Ml.forEach((function(e){u[e]=l[e],delete l[e]})),delete l.keys,r.createElement(c,l,n.map((function(n,o){var a=n.status,l=Ps(n,Ol),c=a===Cl||a===Nl;return r.createElement(e,Mo({},u,{key:l.key,visible:c,eventProps:l,onVisibleChanged:function(e){null===s||void 0===s||s(e,{key:l.key}),e||t.removeKey(l.key)}}),(function(e,t){return i(_e(_e({},e),{},{index:o}),t)}))})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.keys,r=t.keyEntities,o=Tl(n),a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,a=Tl(e),i=Tl(t);a.forEach((function(e){for(var t=!1,a=r;a<o;a+=1){var s=i[a];if(s.key===e.key){r<a&&(n=n.concat(i.slice(r,a).map((function(e){return _e(_e({},e),{},{status:Cl})}))),r=a),n.push(_e(_e({},s),{},{status:Nl})),r+=1,t=!0;break}}t||n.push(_e(_e({},e),{},{status:jl}))})),r<o&&(n=n.concat(i.slice(r).map((function(e){return _e(_e({},e),{},{status:Cl})}))));var s={};return n.forEach((function(e){var t=e.key;s[t]=(s[t]||0)+1})),Object.keys(s).filter((function(e){return s[e]>1})).forEach((function(e){(n=n.filter((function(t){var n=t.key,r=t.status;return n!==e||r!==jl}))).forEach((function(t){t.key===e&&(t.status=Nl)}))})),n}(r,o);return{keyEntities:a.filter((function(e){var t=r.find((function(t){var n=t.key;return e.key===n}));return!t||t.status!==Dl||e.status!==jl}))}}}]),o}(r.Component);return Pe(t,"defaultProps",{component:"div"}),t}(il);function Al(e){return e>=0&&e<=255}const Ll=function(e,t){const{r:n,g:r,b:o,a:a}=new fi(e).toRgb();if(a<1)return e;const{r:i,g:s,b:l}=new fi(t).toRgb();for(let c=.01;c<=1;c+=.01){const e=Math.round((n-i*(1-c))/c),t=Math.round((r-s*(1-c))/c),a=Math.round((o-l*(1-c))/c);if(Al(e)&&Al(t)&&Al(a))return new fi({r:e,g:t,b:a,a:Math.round(100*c)/100}).toRgbString()}return new fi({r:n,g:r,b:o,a:1}).toRgbString()};var Il=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function Fl(e){const{override:t}=e,n=Il(e,["override"]),r=Object.assign({},t);Object.keys(Qi).forEach((e=>{delete r[e]}));const o=Object.assign(Object.assign({},n),r),a=1200,i=1600;if(!1===o.motion){const e="0s";o.motionDurationFast=e,o.motionDurationMid=e,o.motionDurationSlow=e}return Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:Ll(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:Ll(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:Ll(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:3*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:Ll(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowSecondary:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTertiary:"\n      0 1px 2px 0 rgba(0, 0, 0, 0.03),\n      0 1px 6px -1px rgba(0, 0, 0, 0.02),\n      0 2px 4px 0 rgba(0, 0, 0, 0.02)\n    ",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:a,screenXLMin:a,screenXLMax:1599,screenXXL:i,screenXXLMin:i,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:"\n      0 1px 2px -2px ".concat(new fi("rgba(0, 0, 0, 0.16)").toRgbString(),",\n      0 3px 6px 0 ").concat(new fi("rgba(0, 0, 0, 0.12)").toRgbString(),",\n      0 5px 12px 4px ").concat(new fi("rgba(0, 0, 0, 0.09)").toRgbString(),"\n    "),boxShadowDrawerRight:"\n      -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerLeft:"\n      6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerUp:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerDown:"\n      0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),r)}var zl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Bl={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0,opacityImage:!0},Hl={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},Ul={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},Yl=(e,t,n)=>{const r=n.getDerivativeToken(e),{override:o}=t,a=zl(t,["override"]);let i=Object.assign(Object.assign({},r),{override:o});return i=Fl(i),a&&Object.entries(a).forEach((e=>{let[t,n]=e;const{theme:r}=n,o=zl(n,["theme"]);let a=o;r&&(a=Yl(Object.assign(Object.assign({},i),o),{override:o},r)),i[t]=a})),i};function Wl(){const{token:e,hashed:t,theme:n,override:o,cssVar:a}=r.useContext(os),i="".concat("5.25.4","-").concat(t||""),s=n||ns,[l,c,u]=Oo(s,[Qi,e],{salt:i,override:o,getComputedToken:Yl,formatToken:Fl,cssVar:a&&{prefix:a.prefix,key:a.key,unitless:Bl,ignore:Hl,preserve:Ul}});return[s,u,t?c:"",l,a]}function ql(e){const{children:t}=e,[,n]=Wl(),{motion:o}=n,a=r.useRef(!1);return a.current=a.current||!1===o,a.current?r.createElement(Os,{motion:o},t):t}const Vl=()=>null,Ql=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}},Kl=e=>({[".".concat(e)]:Object.assign(Object.assign({},{display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),{[".".concat(e," .").concat(e,"-icon")]:{display:"block"}})}),$l=(e,t)=>{const[n,r]=Wl();return Ma({theme:n,token:r,hashId:"",path:["ant-design-icons",e],nonce:()=>null===t||void 0===t?void 0:t.nonce,layer:{name:"antd"}},(()=>[Kl(e)]))};var Gl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Xl=["getTargetContainer","getPopupContainer","renderEmpty","input","pagination","form","select","button"];let Jl,Zl,ec,tc;function nc(){return Jl||vr}function rc(){return Zl||gr}const oc=()=>({getPrefixCls:(e,t)=>t||(e?"".concat(nc(),"-").concat(e):nc()),getIconPrefixCls:rc,getRootPrefixCls:()=>Jl||nc(),getTheme:()=>ec,holderRender:tc}),ac=e=>{const{children:t,csp:n,autoInsertSpaceInButton:o,alert:a,anchor:i,form:s,locale:l,componentSize:c,direction:u,space:d,splitter:f,virtual:p,dropdownMatchSelectWidth:h,popupMatchSelectWidth:m,popupOverflow:v,legacyLocale:g,parentContext:y,iconPrefixCls:b,theme:w,componentDisabled:x,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,input:Q,textArea:K,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne}=e,je=r.useCallback(((t,n)=>{const{prefixCls:r}=e;if(n)return n;const o=r||y.getPrefixCls("");return t?"".concat(o,"-").concat(t):o}),[y.getPrefixCls,e.prefixCls]),De=b||y.iconPrefixCls||gr,Pe=n||y.csp;$l(De,Pe);const Te=function(e,t,n){var r;$a("ConfigProvider");const o=e||{},a=!1!==o.inherit&&t?t:Object.assign(Object.assign({},rs),{hashed:null!==(r=null===t||void 0===t?void 0:t.hashed)&&void 0!==r?r:rs.hashed,cssVar:null===t||void 0===t?void 0:t.cssVar}),i=vs();return Ar((()=>{var r,s;if(!e)return t;const l=Object.assign({},a.components);Object.keys(e.components||{}).forEach((t=>{l[t]=Object.assign(Object.assign({},l[t]),e.components[t])}));const c="css-var-".concat(i.replace(/:/g,"")),u=(null!==(r=o.cssVar)&&void 0!==r?r:a.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:null===n||void 0===n?void 0:n.prefixCls},"object"===typeof a.cssVar?a.cssVar:{}),"object"===typeof o.cssVar?o.cssVar:{}),{key:"object"===typeof o.cssVar&&(null===(s=o.cssVar)||void 0===s?void 0:s.key)||c});return Object.assign(Object.assign(Object.assign({},a),o),{token:Object.assign(Object.assign({},a.token),o.token),components:l,cssVar:u})}),[o,a],((e,t)=>e.some(((e,n)=>{const r=t[n];return!Yr(e,r,!0)}))))}(w,y.theme,{prefixCls:je("")});const _e={csp:Pe,autoInsertSpaceInButton:o,alert:a,anchor:i,locale:l||g,direction:u,space:d,splitter:f,virtual:p,popupMatchSelectWidth:null!==m&&void 0!==m?m:h,popupOverflow:v,getPrefixCls:je,iconPrefixCls:De,theme:Te,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,input:Q,textArea:K,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne};const Oe=Object.assign({},y);Object.keys(_e).forEach((e=>{void 0!==_e[e]&&(Oe[e]=_e[e])})),Xl.forEach((t=>{const n=e[t];n&&(Oe[t]=n)})),"undefined"!==typeof o&&(Oe.button=Object.assign({autoInsertSpace:o},Oe.button));const Me=Ar((()=>Oe),Oe,((e,t)=>{const n=Object.keys(e),r=Object.keys(t);return n.length!==r.length||n.some((n=>e[n]!==t[n]))})),{layer:Re}=r.useContext(to),Ae=r.useMemo((()=>({prefixCls:De,csp:Pe,layer:Re?"antd":void 0})),[De,Pe,Re]);let Le=r.createElement(r.Fragment,null,r.createElement(Vl,{dropdownMatchSelectWidth:h}),t);const Ie=r.useMemo((()=>{var e,t,n,r;return Va((null===(e=ni.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(n=null===(t=Me.locale)||void 0===t?void 0:t.Form)||void 0===n?void 0:n.defaultValidateMessages)||{},(null===(r=Me.form)||void 0===r?void 0:r.validateMessages)||{},(null===s||void 0===s?void 0:s.validateMessages)||{})}),[Me,null===s||void 0===s?void 0:s.validateMessages]);Object.keys(Ie).length>0&&(Le=r.createElement(Ga.Provider,{value:Ie},Le)),l&&(Le=r.createElement(si,{locale:l,_ANT_MARK__:"internalMark"},Le)),(De||Pe)&&(Le=r.createElement(Ba.Provider,{value:Ae},Le)),c&&(Le=r.createElement(ds,{size:c},Le)),Le=r.createElement(ql,null,Le);const Fe=r.useMemo((()=>{const e=Te||{},{algorithm:t,token:n,components:r,cssVar:o}=e,a=Gl(e,["algorithm","token","components","cssVar"]),i=t&&(!Array.isArray(t)||t.length>0)?so(t):ns,s={};Object.entries(r||{}).forEach((e=>{let[t,n]=e;const r=Object.assign({},n);"algorithm"in r&&(!0===r.algorithm?r.theme=i:(Array.isArray(r.algorithm)||"function"===typeof r.algorithm)&&(r.theme=so(r.algorithm)),delete r.algorithm),s[t]=r}));const l=Object.assign(Object.assign({},Qi),n);return Object.assign(Object.assign({},a),{theme:i,token:l,components:s,override:Object.assign({override:l},s),cssVar:o})}),[Te]);return w&&(Le=r.createElement(os.Provider,{value:Fe},Le)),Me.warning&&(Le=r.createElement(Ka.Provider,{value:Me.warning},Le)),void 0!==x&&(Le=r.createElement(ls,{disabled:x},Le)),r.createElement(yr.Provider,{value:Me},Le)},ic=e=>{const t=r.useContext(yr),n=r.useContext(ii);return r.createElement(ac,Object.assign({parentContext:t,legacyLocale:n},e))};ic.ConfigContext=yr,ic.SizeContext=fs,ic.config=e=>{const{prefixCls:t,iconPrefixCls:n,theme:r,holderRender:o}=e;void 0!==t&&(Jl=t),void 0!==n&&(Zl=n),"holderRender"in e&&(tc=o),r&&(!function(e){return Object.keys(e).some((e=>e.endsWith("Color")))}(r)?ec=r:is(nc(),r))},ic.useConfig=ps,Object.defineProperty(ic,"SizeContext",{get:()=>fs});const sc=ic;function lc(){lc=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,n,r){return Object.defineProperty(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r})}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function c(t,n,r,o){var a=n&&n.prototype instanceof f?n:f,i=Object.create(a.prototype);return l(i,"_invoke",function(t,n,r){var o=1;return function(a,i){if(3===o)throw Error("Generator is already running");if(4===o){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var s=r.delegate;if(s){var l=x(s,r);if(l){if(l===d)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(1===o)throw o=4,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=3;var c=u(t,n,r);if("normal"===c.type){if(o=r.done?4:2,c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o=4,r.method="throw",r.arg=c.arg)}}}(t,r,new E(o||[])),!0),i}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var d={};function f(){}function p(){}function h(){}var m={};l(m,a,(function(){return this}));var v=Object.getPrototypeOf,g=v&&v(v(C([])));g&&g!==n&&r.call(g,a)&&(m=g);var y=h.prototype=f.prototype=Object.create(m);function b(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(o,a,i,s){var l=u(e[o],e,a);if("throw"!==l.type){var c=l.arg,d=c.value;return d&&"object"==je(d)&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,i,s)}),(function(e){n("throw",e,i,s)})):t.resolve(d).then((function(e){c.value=e,i(c)}),(function(e){return n("throw",e,i,s)}))}s(l.arg)}var o;l(this,"_invoke",(function(e,r){function a(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(a,a):a()}),!0)}function x(t,n){var r=n.method,o=t.i[r];if(o===e)return n.delegate=null,"throw"===r&&t.i.return&&(n.method="return",n.arg=e,x(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=u(o,t.i,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,d;var i=a.arg;return i?i.done?(n[t.r]=i.value,n.next=t.n,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,d):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,d)}function k(e){this.tryEntries.push(e)}function S(t){var n=t[4]||{};n.type="normal",n.arg=e,t[4]=n}function E(e){this.tryEntries=[[-1]],e.forEach(k,this),this.reset(!0)}function C(t){if(null!=t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(je(t)+" is not iterable")}return p.prototype=h,l(y,"constructor",h),l(h,"constructor",p),p.displayName=l(h,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,l(e,s,"GeneratorFunction")),e.prototype=Object.create(y),e},t.awrap=function(e){return{__await:e}},b(w.prototype),l(w.prototype,i,(function(){return this})),t.AsyncIterator=w,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new w(c(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},b(y),l(y,s,"Generator"),l(y,a,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.unshift(r);return function e(){for(;n.length;)if((r=n.pop())in t)return e.value=r,e.done=!1,e;return e.done=!0,e}},t.values=C,E.prototype={constructor:E,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(S),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(e){i.type="throw",i.arg=t,n.next=e}for(var o=n.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a[4],s=this.prev,l=a[1],c=a[2];if(-1===a[0])return r("end"),!1;if(!l&&!c)throw Error("try statement without catch or finally");if(null!=a[0]&&a[0]<=s){if(s<l)return this.method="next",this.arg=e,r(l),!0;if(s<c)return r(c),!1}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r[0]>-1&&r[0]<=this.prev&&this.prev<r[2]){var o=r;break}}o&&("break"===e||"continue"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var a=o?o[4]:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o[2],d):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[2]===e)return this.complete(n[4],n[3]),S(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[0]===e){var r=n[4];if("throw"===r.type){var o=r.arg;S(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={i:C(t),r:n,n:r},"next"===this.method&&(this.arg=e),d}},t}function cc(e,t,n,r,o,a,i){try{var s=e[a](i),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,o)}function uc(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){cc(a,r,o,i,s,"next",e)}function s(e){cc(a,r,o,i,s,"throw",e)}i(void 0)}))}}var dc,fc=_e({},s),pc=fc.version,hc=fc.render,mc=fc.unmountComponentAtNode;try{Number((pc||"").split(".")[0])>=18&&(dc=fc.createRoot)}catch(Dy){}function vc(e){var t=fc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&"object"===je(t)&&(t.usingClientEntryPoint=e)}var gc="__rc_react_root__";function yc(e,t){dc?function(e,t){vc(!0);var n=t[gc]||dc(t);vc(!1),n.render(e),t[gc]=n}(e,t):function(e,t){null===hc||void 0===hc||hc(e,t)}(e,t)}function bc(e){return wc.apply(this,arguments)}function wc(){return(wc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.resolve().then((function(){var e;null===(e=t[gc])||void 0===e||e.unmount(),delete t[gc]})));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function xc(e){mc(e)}function kc(){return(kc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===dc){e.next=2;break}return e.abrupt("return",bc(t));case 2:xc(t);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}let Sc=(e,t)=>(yc(e,t),()=>function(e){return kc.apply(this,arguments)}(t));const Ec={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};function Cc(e){var t;return null===e||void 0===e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function Nc(e){return function(e){return Cc(e)instanceof ShadowRoot}(e)?Cc(e):null}function jc(e){return"object"===je(e)&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===je(e.icon)||"function"===typeof e.icon)}function Dc(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce((function(t,n){var r,o=e[n];if("class"===n)t.className=o,delete t.class;else delete t[n],t[(r=n,r.replace(/-(.)/g,(function(e,t){return t.toUpperCase()})))]=o;return t}),{})}function Pc(e,t,n){return n?r.createElement(e.tag,_e(_e({key:t},Dc(e.attrs)),n),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))}))):r.createElement(e.tag,_e({key:t},Dc(e.attrs)),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))})))}function Tc(e){return gi(e)[0]}function _c(e){return e?Array.isArray(e)?e:[e]:[]}var Oc=["icon","className","onClick","style","primaryColor","secondaryColor"],Mc={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};var Rc=function(e){var t=e.icon,n=e.className,o=e.onClick,a=e.style,i=e.primaryColor,s=e.secondaryColor,l=Ps(e,Oc),c=r.useRef(),u=Mc;if(i&&(u={primaryColor:i,secondaryColor:s||Tc(i)}),function(e){var t=(0,r.useContext)(Ba),n=t.csp,o=t.prefixCls,a=t.layer,i="\n.anticon {\n  display: inline-flex;\n  align-items: center;\n  color: inherit;\n  font-style: normal;\n  line-height: 0;\n  text-align: center;\n  text-transform: none;\n  vertical-align: -0.125em;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n  line-height: 1;\n}\n\n.anticon svg {\n  display: inline-block;\n}\n\n.anticon::before {\n  display: none;\n}\n\n.anticon .anticon-icon {\n  display: block;\n}\n\n.anticon[tabindex] {\n  cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n  display: inline-block;\n  -webkit-animation: loadingCircle 1s infinite linear;\n  animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n";o&&(i=i.replace(/anticon/g,o)),a&&(i="@layer ".concat(a," {\n").concat(i,"\n}")),(0,r.useEffect)((function(){var t=Nc(e.current);Rr(i,"@ant-design-icons",{prepend:!a,csp:n,attachTo:t})}),[])}(c),function(e,t){Ur(e,"[@ant-design/icons] ".concat(t))}(jc(t),"icon should be icon definiton, but got ".concat(t)),!jc(t))return null;var d=t;return d&&"function"===typeof d.icon&&(d=_e(_e({},d),{},{icon:d.icon(u.primaryColor,u.secondaryColor)})),Pc(d.icon,"svg-".concat(d.name),_e(_e({className:n,onClick:o,style:a,"data-icon":d.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},l),{},{ref:c}))};Rc.displayName="IconReact",Rc.getTwoToneColors=function(){return _e({},Mc)},Rc.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;Mc.primaryColor=t,Mc.secondaryColor=n||Tc(t),Mc.calculated=!!n};const Ac=Rc;function Lc(e){var t=kr(_c(e),2),n=t[0],r=t[1];return Ac.setTwoToneColors({primaryColor:n,secondaryColor:r})}var Ic=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];Lc(ji.primary);var Fc=r.forwardRef((function(e,t){var n=e.className,o=e.icon,a=e.spin,i=e.rotate,s=e.tabIndex,l=e.onClick,c=e.twoToneColor,u=Ps(e,Ic),d=r.useContext(Ba),f=d.prefixCls,p=void 0===f?"anticon":f,h=d.rootClassName,m=ys()(h,p,Pe(Pe({},"".concat(p,"-").concat(o.name),!!o.name),"".concat(p,"-spin"),!!a||"loading"===o.name),n),v=s;void 0===v&&l&&(v=-1);var g=i?{msTransform:"rotate(".concat(i,"deg)"),transform:"rotate(".concat(i,"deg)")}:void 0,y=kr(_c(c),2),b=y[0],w=y[1];return r.createElement("span",Mo({role:"img","aria-label":o.name},u,{ref:t,tabIndex:v,onClick:l,className:m}),r.createElement(Ac,{icon:o,primaryColor:b,secondaryColor:w,style:g}))}));Fc.displayName="AntdIcon",Fc.getTwoToneColor=function(){var e=Ac.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},Fc.setTwoToneColor=Lc;const zc=Fc;var Bc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Ec}))};const Hc=r.forwardRef(Bc);const Uc={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"};var Yc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Uc}))};const Wc=r.forwardRef(Yc);const qc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"};var Vc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:qc}))};const Qc=r.forwardRef(Vc);const Kc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"};var $c=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Kc}))};const Gc=r.forwardRef($c);const Xc={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};var Jc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Xc}))};const Zc=r.forwardRef(Jc);var eu={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=eu.F1&&t<=eu.F12)return!1;switch(t){case eu.ALT:case eu.CAPS_LOCK:case eu.CONTEXT_MENU:case eu.CTRL:case eu.DOWN:case eu.END:case eu.ESC:case eu.HOME:case eu.INSERT:case eu.LEFT:case eu.MAC_FF_META:case eu.META:case eu.NUMLOCK:case eu.NUM_CENTER:case eu.PAGE_DOWN:case eu.PAGE_UP:case eu.PAUSE:case eu.PRINT_SCREEN:case eu.RIGHT:case eu.SHIFT:case eu.UP:case eu.WIN_KEY:case eu.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=eu.ZERO&&e<=eu.NINE)return!0;if(e>=eu.NUM_ZERO&&e<=eu.NUM_MULTIPLY)return!0;if(e>=eu.A&&e<=eu.Z)return!0;if(-1!==window.navigator.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case eu.SPACE:case eu.QUESTION_MARK:case eu.NUM_PLUS:case eu.NUM_MINUS:case eu.NUM_PERIOD:case eu.NUM_DIVISION:case eu.SEMICOLON:case eu.DASH:case eu.EQUALS:case eu.COMMA:case eu.PERIOD:case eu.SLASH:case eu.APOSTROPHE:case eu.SINGLE_QUOTE:case eu.OPEN_SQUARE_BRACKET:case eu.BACKSLASH:case eu.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const tu=eu;var nu="".concat("accept acceptCharset accessKey action allowFullScreen allowTransparency\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\n    charSet checked classID className colSpan cols content contentEditable contextMenu\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\n    mediaGroup method min minLength multiple muted name noValidate nonce open\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\n    summary tabIndex target title type useMap value width wmode wrap"," ").concat("onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError").split(/[\s\n]+/);function ru(e,t){return 0===e.indexOf(t)}var ou=r.forwardRef((function(e,t){var n=e.prefixCls,o=e.style,a=e.className,i=e.duration,s=void 0===i?4.5:i,l=e.showProgress,c=e.pauseOnHover,u=void 0===c||c,d=e.eventKey,f=e.content,p=e.closable,h=e.closeIcon,m=void 0===h?"x":h,v=e.props,g=e.onClick,y=e.onNoticeClose,b=e.times,w=e.hovering,x=kr(r.useState(!1),2),k=x[0],S=x[1],E=kr(r.useState(0),2),C=E[0],N=E[1],j=kr(r.useState(0),2),D=j[0],P=j[1],T=w||k,_=s>0&&l,O=function(){y(d)};r.useEffect((function(){if(!T&&s>0){var e=Date.now()-D,t=setTimeout((function(){O()}),1e3*s-D);return function(){u&&clearTimeout(t),P(Date.now()-e)}}}),[s,T,b]),r.useEffect((function(){if(!T&&_&&(u||0===D)){var e,t=performance.now();return function n(){cancelAnimationFrame(e),e=requestAnimationFrame((function(e){var r=e+D-t,o=Math.min(r/(1e3*s),1);N(100*o),o<1&&n()}))}(),function(){u&&cancelAnimationFrame(e)}}}),[s,D,T,_,b]);var M=r.useMemo((function(){return"object"===je(p)&&null!==p?p:p?{closeIcon:m}:{}}),[p,m]),R=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=!1===n?{aria:!0,data:!0,attr:!0}:!0===n?{aria:!0}:_e({},n);var r={};return Object.keys(e).forEach((function(n){(t.aria&&("role"===n||ru(n,"aria-"))||t.data&&ru(n,"data-")||t.attr&&nu.includes(n))&&(r[n]=e[n])})),r}(M,!0),A=100-(!C||C<0?0:C>100?100:C),L="".concat(n,"-notice");return r.createElement("div",Mo({},v,{ref:t,className:ys()(L,a,Pe({},"".concat(L,"-closable"),p)),style:o,onMouseEnter:function(e){var t;S(!0),null===v||void 0===v||null===(t=v.onMouseEnter)||void 0===t||t.call(v,e)},onMouseLeave:function(e){var t;S(!1),null===v||void 0===v||null===(t=v.onMouseLeave)||void 0===t||t.call(v,e)},onClick:g}),r.createElement("div",{className:"".concat(L,"-content")},f),p&&r.createElement("a",Mo({tabIndex:0,className:"".concat(L,"-close"),onKeyDown:function(e){"Enter"!==e.key&&"Enter"!==e.code&&e.keyCode!==tu.ENTER||O()},"aria-label":"Close"},R,{onClick:function(e){e.preventDefault(),e.stopPropagation(),O()}}),M.closeIcon),_&&r.createElement("progress",{className:"".concat(L,"-progress"),max:"100",value:A},A+"%"))}));const au=ou;var iu=r.createContext({});const su=function(e){var t=e.children,n=e.classNames;return r.createElement(iu.Provider,{value:{classNames:n}},t)};const lu=function(e){var t,n,r,o={offset:8,threshold:3,gap:16};e&&"object"===je(e)&&(o.offset=null!==(t=e.offset)&&void 0!==t?t:8,o.threshold=null!==(n=e.threshold)&&void 0!==n?n:3,o.gap=null!==(r=e.gap)&&void 0!==r?r:16);return[!!e,o]};var cu=["className","style","classNames","styles"];const uu=function(e){var t=e.configList,n=e.placement,o=e.prefixCls,a=e.className,i=e.style,s=e.motion,l=e.onAllNoticeRemoved,c=e.onNoticeClose,u=e.stack,d=(0,r.useContext)(iu).classNames,f=(0,r.useRef)({}),p=kr((0,r.useState)(null),2),h=p[0],m=p[1],v=kr((0,r.useState)([]),2),g=v[0],y=v[1],b=t.map((function(e){return{config:e,key:String(e.key)}})),w=kr(lu(u),2),x=w[0],k=w[1],S=k.offset,E=k.threshold,C=k.gap,N=x&&(g.length>0||b.length<=E),j="function"===typeof s?s(n):s;return(0,r.useEffect)((function(){x&&g.length>1&&y((function(e){return e.filter((function(e){return b.some((function(t){var n=t.key;return e===n}))}))}))}),[g,b,x]),(0,r.useEffect)((function(){var e,t;x&&f.current[null===(e=b[b.length-1])||void 0===e?void 0:e.key]&&m(f.current[null===(t=b[b.length-1])||void 0===t?void 0:t.key])}),[b,x]),r.createElement(Rl,Mo({key:n,className:ys()(o,"".concat(o,"-").concat(n),null===d||void 0===d?void 0:d.list,a,Pe(Pe({},"".concat(o,"-stack"),!!x),"".concat(o,"-stack-expanded"),N)),style:i,keys:b,motionAppear:!0},j,{onAllRemoved:function(){l(n)}}),(function(e,t){var a=e.config,i=e.className,s=e.style,l=e.index,u=a,p=u.key,m=u.times,v=String(p),w=a,k=w.className,E=w.style,j=w.classNames,D=w.styles,P=Ps(w,cu),T=b.findIndex((function(e){return e.key===v})),_={};if(x){var O=b.length-1-(T>-1?T:l-1),M="top"===n||"bottom"===n?"-50%":"0";if(O>0){var R,A,L;_.height=N?null===(R=f.current[v])||void 0===R?void 0:R.offsetHeight:null===h||void 0===h?void 0:h.offsetHeight;for(var I=0,F=0;F<O;F++){var z;I+=(null===(z=f.current[b[b.length-1-F].key])||void 0===z?void 0:z.offsetHeight)+C}var B=(N?I:O*S)*(n.startsWith("top")?1:-1),H=!N&&null!==h&&void 0!==h&&h.offsetWidth&&null!==(A=f.current[v])&&void 0!==A&&A.offsetWidth?((null===h||void 0===h?void 0:h.offsetWidth)-2*S*(O<3?O:3))/(null===(L=f.current[v])||void 0===L?void 0:L.offsetWidth):1;_.transform="translate3d(".concat(M,", ").concat(B,"px, 0) scaleX(").concat(H,")")}else _.transform="translate3d(".concat(M,", 0, 0)")}return r.createElement("div",{ref:t,className:ys()("".concat(o,"-notice-wrapper"),i,null===j||void 0===j?void 0:j.wrapper),style:_e(_e(_e({},s),_),null===D||void 0===D?void 0:D.wrapper),onMouseEnter:function(){return y((function(e){return e.includes(v)?e:[].concat(hr(e),[v])}))},onMouseLeave:function(){return y((function(e){return e.filter((function(e){return e!==v}))}))}},r.createElement(au,Mo({},P,{ref:function(e){T>-1?f.current[v]=e:delete f.current[v]},prefixCls:o,classNames:j,styles:D,className:ys()(k,null===d||void 0===d?void 0:d.notice),style:E,times:m,key:p,eventKey:p,onNoticeClose:c,hovering:x&&g.length>0})))}))};var du=r.forwardRef((function(e,t){var n=e.prefixCls,o=void 0===n?"rc-notification":n,a=e.container,s=e.motion,l=e.maxCount,c=e.className,u=e.style,d=e.onAllRemoved,f=e.stack,p=e.renderNotifications,h=kr(r.useState([]),2),m=h[0],v=h[1],g=function(e){var t,n=m.find((function(t){return t.key===e}));null===n||void 0===n||null===(t=n.onClose)||void 0===t||t.call(n),v((function(t){return t.filter((function(t){return t.key!==e}))}))};r.useImperativeHandle(t,(function(){return{open:function(e){v((function(t){var n,r=hr(t),o=r.findIndex((function(t){return t.key===e.key})),a=_e({},e);o>=0?(a.times=((null===(n=t[o])||void 0===n?void 0:n.times)||0)+1,r[o]=a):(a.times=0,r.push(a));return l>0&&r.length>l&&(r=r.slice(-l)),r}))},close:function(e){g(e)},destroy:function(){v([])}}}));var y=kr(r.useState({}),2),b=y[0],w=y[1];r.useEffect((function(){var e={};m.forEach((function(t){var n=t.placement,r=void 0===n?"topRight":n;r&&(e[r]=e[r]||[],e[r].push(t))})),Object.keys(b).forEach((function(t){e[t]=e[t]||[]})),w(e)}),[m]);var x=function(e){w((function(t){var n=_e({},t);return(n[e]||[]).length||delete n[e],n}))},k=r.useRef(!1);if(r.useEffect((function(){Object.keys(b).length>0?k.current=!0:k.current&&(null===d||void 0===d||d(),k.current=!1)}),[b]),!a)return null;var S=Object.keys(b);return(0,i.createPortal)(r.createElement(r.Fragment,null,S.map((function(e){var t=b[e],n=r.createElement(uu,{key:e,configList:t,placement:e,prefixCls:o,className:null===c||void 0===c?void 0:c(e),style:null===u||void 0===u?void 0:u(e),motion:s,onNoticeClose:g,onAllNoticeRemoved:x,stack:f});return p?p(n,{prefixCls:o,key:e}):n}))),a)}));const fu=du;var pu=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],hu=function(){return document.body},mu=0;function vu(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,n=void 0===t?hu:t,o=e.motion,a=e.prefixCls,i=e.maxCount,s=e.className,l=e.style,c=e.onAllRemoved,u=e.stack,d=e.renderNotifications,f=Ps(e,pu),p=kr(r.useState(),2),h=p[0],m=p[1],v=r.useRef(),g=r.createElement(fu,{container:h,ref:v,prefixCls:a,motion:o,maxCount:i,className:s,style:l,onAllRemoved:c,stack:u,renderNotifications:d}),y=kr(r.useState([]),2),b=y[0],w=y[1],x=Bs((function(e){var t=function(){for(var e={},t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return n.forEach((function(t){t&&Object.keys(t).forEach((function(n){var r=t[n];void 0!==r&&(e[n]=r)}))})),e}(f,e);null!==t.key&&void 0!==t.key||(t.key="rc-notification-".concat(mu),mu+=1),w((function(e){return[].concat(hr(e),[{type:"open",config:t}])}))})),k=r.useMemo((function(){return{open:x,close:function(e){w((function(t){return[].concat(hr(t),[{type:"close",key:e}])}))},destroy:function(){w((function(e){return[].concat(hr(e),[{type:"destroy"}])}))}}}),[]);return r.useEffect((function(){m(n())})),r.useEffect((function(){var e,t;v.current&&b.length&&(b.forEach((function(e){switch(e.type){case"open":v.current.open(e.config);break;case"close":v.current.close(e.key);break;case"destroy":v.current.destroy()}})),w((function(n){return e===n&&t||(e=n,t=n.filter((function(e){return!b.includes(e)}))),t})))}),[b]),[k,g]}const gu=e=>{const[,,,,t]=Wl();return t?"".concat(e,"-css-var"):""};const yu=Vr((function e(){Wr(this,e)}));var bu="CALC_UNIT",wu=new RegExp(bu,"g");function xu(e){return"number"===typeof e?"".concat(e).concat(bu):e}var ku=function(e){Rs(n,e);var t=Fs(n);function n(e,r){var o;Wr(this,n),Pe(Is(o=t.call(this)),"result",""),Pe(Is(o),"unitlessCssVar",void 0),Pe(Is(o),"lowPriority",void 0);var a=je(e);return o.unitlessCssVar=r,e instanceof n?o.result="(".concat(e.result,")"):"number"===a?o.result=xu(e):"string"===a&&(o.result=e),o}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result="".concat(this.result," + ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," + ").concat(xu(e))),this.lowPriority=!0,this}},{key:"sub",value:function(e){return e instanceof n?this.result="".concat(this.result," - ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," - ").concat(xu(e))),this.lowPriority=!0,this}},{key:"mul",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," * ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," * ").concat(e)),this.lowPriority=!1,this}},{key:"div",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," / ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," / ").concat(e)),this.lowPriority=!1,this}},{key:"getResult",value:function(e){return this.lowPriority||e?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(e){var t=this,n=(e||{}).unit,r=!0;return"boolean"===typeof n?r=n:Array.from(this.unitlessCssVar).some((function(e){return t.result.includes(e)}))&&(r=!1),this.result=this.result.replace(wu,r?"px":""),"undefined"!==typeof this.lowPriority?"calc(".concat(this.result,")"):this.result}}]),n}(yu);const Su=function(e){Rs(n,e);var t=Fs(n);function n(e){var r;return Wr(this,n),Pe(Is(r=t.call(this)),"result",0),e instanceof n?r.result=e.result:"number"===typeof e&&(r.result=e),r}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result+=e.result:"number"===typeof e&&(this.result+=e),this}},{key:"sub",value:function(e){return e instanceof n?this.result-=e.result:"number"===typeof e&&(this.result-=e),this}},{key:"mul",value:function(e){return e instanceof n?this.result*=e.result:"number"===typeof e&&(this.result*=e),this}},{key:"div",value:function(e){return e instanceof n?this.result/=e.result:"number"===typeof e&&(this.result/=e),this}},{key:"equal",value:function(){return this.result}}]),n}(yu);const Eu=function(e,t){var n="css"===e?ku:Su;return function(e){return new n(e,t)}};const Cu=function(e,t){return"".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"))};const Nu=function(e,t,n,r){var o=_e({},t[e]);null!==r&&void 0!==r&&r.deprecatedTokens&&r.deprecatedTokens.forEach((function(e){var t,n=kr(e,2),r=n[0],a=n[1];(null!==o&&void 0!==o&&o[r]||null!==o&&void 0!==o&&o[a])&&(null!==(t=o[a])&&void 0!==t||(o[a]=null===o||void 0===o?void 0:o[r]))}));var a=_e(_e({},n),o);return Object.keys(a).forEach((function(e){a[e]===t[e]&&delete a[e]})),a};var ju="undefined"!==typeof CSSINJS_STATISTIC,Du=!0;function Pu(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!ju)return Object.assign.apply(Object,[{}].concat(t));Du=!1;var r={};return t.forEach((function(e){"object"===je(e)&&Object.keys(e).forEach((function(t){Object.defineProperty(r,t,{configurable:!0,enumerable:!0,get:function(){return e[t]}})}))})),Du=!0,r}var Tu={};function _u(){}const Ou=function(e){var t,n=e,r=_u;return ju&&"undefined"!==typeof Proxy&&(t=new Set,n=new Proxy(e,{get:function(e,n){var r;Du&&(null===(r=t)||void 0===r||r.add(n));return e[n]}}),r=function(e,n){var r;Tu[e]={global:Array.from(t),component:_e(_e({},null===(r=Tu[e])||void 0===r?void 0:r.component),n)}}),{token:n,keys:t,flush:r}};const Mu=function(e,t,n){var r;return"function"===typeof n?n(Pu(t,null!==(r=t[e])&&void 0!==r?r:{})):null!==n&&void 0!==n?n:{}};const Ru=function(e){return"js"===e?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"max(".concat(t.map((function(e){return mo(e)})).join(","),")")},min:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"min(".concat(t.map((function(e){return mo(e)})).join(","),")")}}};var Au=function(){function e(){Wr(this,e),Pe(this,"map",new Map),Pe(this,"objectIDMap",new WeakMap),Pe(this,"nextID",0),Pe(this,"lastAccessBeat",new Map),Pe(this,"accessBeat",0)}return Vr(e,[{key:"set",value:function(e,t){this.clear();var n=this.getCompositeKey(e);this.map.set(n,t),this.lastAccessBeat.set(n,Date.now())}},{key:"get",value:function(e){var t=this.getCompositeKey(e),n=this.map.get(t);return this.lastAccessBeat.set(t,Date.now()),this.accessBeat+=1,n}},{key:"getCompositeKey",value:function(e){var t=this;return e.map((function(e){return e&&"object"===je(e)?"obj_".concat(t.getObjectID(e)):"".concat(je(e),"_").concat(e)})).join("|")}},{key:"getObjectID",value:function(e){if(this.objectIDMap.has(e))return this.objectIDMap.get(e);var t=this.nextID;return this.objectIDMap.set(e,t),this.nextID+=1,t}},{key:"clear",value:function(){var e=this;if(this.accessBeat>1e4){var t=Date.now();this.lastAccessBeat.forEach((function(n,r){t-n>6e5&&(e.map.delete(r),e.lastAccessBeat.delete(r))})),this.accessBeat=0}}}]),e}(),Lu=new Au;const Iu=function(e,t){return r.useMemo((function(){var n=Lu.get(t);if(n)return n;var r=e();return Lu.set(t,r),r}),t)};const Fu=function(){return{}};const zu=function(e){var t=e.useCSP,n=void 0===t?Fu:t,o=e.useToken,a=e.usePrefix,i=e.getResetStyles,s=e.getCommonStyle,l=e.getCompUnitless;function c(t,r,l){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},u=Array.isArray(t)?t:[t,t],d=kr(u,1)[0],f=u.join("-"),p=e.layer||{name:"antd"};return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,u=o(),h=u.theme,m=u.realToken,v=u.hashId,g=u.token,y=u.cssVar,b=a(),w=b.rootPrefixCls,x=b.iconPrefixCls,k=n(),S=y?"css":"js",E=Iu((function(){var e=new Set;return y&&Object.keys(c.unitless||{}).forEach((function(t){e.add(go(t,y.prefix)),e.add(go(t,Cu(d,y.prefix)))})),Eu(S,e)}),[S,d,null===y||void 0===y?void 0:y.prefix]),C=Ru(S),N=C.max,j=C.min,D={theme:h,token:g,hashId:v,nonce:function(){return k.nonce},clientOnly:c.clientOnly,layer:p,order:c.order||-999};return"function"===typeof i&&Ma(_e(_e({},D),{},{clientOnly:!1,path:["Shared",w]}),(function(){return i(g,{prefix:{rootPrefixCls:w,iconPrefixCls:x},csp:k})})),[Ma(_e(_e({},D),{},{path:[f,e,x]}),(function(){if(!1===c.injectStyle)return[];var n=Ou(g),o=n.token,a=n.flush,i=Mu(d,m,l),u=".".concat(e),f=Nu(d,m,i,{deprecatedTokens:c.deprecatedTokens});y&&i&&"object"===je(i)&&Object.keys(i).forEach((function(e){i[e]="var(".concat(go(e,Cu(d,y.prefix)),")")}));var p=Pu(o,{componentCls:u,prefixCls:e,iconCls:".".concat(x),antCls:".".concat(w),calc:E,max:N,min:j},y?i:f),h=r(p,{hashId:v,prefixCls:e,rootPrefixCls:w,iconPrefixCls:x});a(d,f);var b="function"===typeof s?s(p,e,t,c.resetFont):null;return[!1===c.resetStyle?null:b,h]})),v]}}return{genStyleHooks:function(e,t,n,a){var i=Array.isArray(e)?e[0]:e;function s(e){return"".concat(String(i)).concat(e.slice(0,1).toUpperCase()).concat(e.slice(1))}var u=(null===a||void 0===a?void 0:a.unitless)||{},d=_e(_e({},"function"===typeof l?l(e):{}),{},Pe({},s("zIndexPopup"),!0));Object.keys(u).forEach((function(e){d[s(e)]=u[e]}));var f=_e(_e({},a),{},{unitless:d,prefixToken:s}),p=c(e,t,n,f),h=function(e,t,n){var a=n.unitless,i=n.injectStyle,s=void 0===i||i,l=n.prefixToken,c=n.ignore,u=function(r){var i=r.rootCls,s=r.cssVar,u=void 0===s?{}:s,d=o().realToken;return Aa({path:[e],prefix:u.prefix,key:u.key,unitless:a,ignore:c,token:d,scope:i},(function(){var r=Mu(e,d,t),o=Nu(e,d,r,{deprecatedTokens:null===n||void 0===n?void 0:n.deprecatedTokens});return Object.keys(r).forEach((function(e){o[l(e)]=o[e],delete o[e]})),o})),null},d=function(t){var n=o().cssVar;return[function(o){return s&&n?r.createElement(r.Fragment,null,r.createElement(u,{rootCls:t,cssVar:n,component:e}),o):o},null===n||void 0===n?void 0:n.key]};return d}(i,n,f);return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=kr(p(e,t),2)[1],r=kr(h(t),2);return[r[0],n,r[1]]}},genSubStyleComponent:function(e,t,n){var r=c(e,t,n,_e({resetStyle:!1,order:-998},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}));return function(e){var t=e.prefixCls,n=e.rootCls;return r(t,void 0===n?t:n),null}},genComponentStyleHook:c}},{genStyleHooks:Bu,genComponentStyleHook:Hu,genSubStyleComponent:Uu}=zu({usePrefix:()=>{const{getPrefixCls:e,iconPrefixCls:t}=(0,r.useContext)(yr);return{rootPrefixCls:e(),iconPrefixCls:t}},useToken:()=>{const[e,t,n,r,o]=Wl();return{theme:e,realToken:t,hashId:n,token:r,cssVar:o}},useCSP:()=>{const{csp:e}=(0,r.useContext)(yr);return null!==e&&void 0!==e?e:{}},getResetStyles:(e,t)=>{var n;const r=(e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active, &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}))(e);return[r,{"&":r},Kl(null!==(n=null===t||void 0===t?void 0:t.prefix.iconPrefixCls)&&void 0!==n?n:gr)]},getCommonStyle:(e,t,n,r)=>{const o='[class^="'.concat(t,'"], [class*=" ').concat(t,'"]'),a=n?".".concat(n):o,i={boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}};let s={};return!1!==r&&(s={fontFamily:e.fontFamily,fontSize:e.fontSize}),{[a]:Object.assign(Object.assign(Object.assign({},s),i),{[o]:i})}},getCompUnitless:()=>Bl}),Yu=e=>{const{componentCls:t,iconCls:n,boxShadow:r,colorText:o,colorSuccess:a,colorError:i,colorWarning:s,colorInfo:l,fontSizeLG:c,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:p,borderRadiusLG:h,zIndexPopup:m,contentPadding:v,contentBg:g}=e,y="".concat(t,"-notice"),b=new Fa("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:p,transform:"translateY(0)",opacity:1}}),w=new Fa("MessageMoveOut",{"0%":{maxHeight:e.height,padding:p,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),x={padding:p,textAlign:"center",["".concat(t,"-custom-content")]:{display:"flex",alignItems:"center"},["".concat(t,"-custom-content > ").concat(n)]:{marginInlineEnd:f,fontSize:c},["".concat(y,"-content")]:{display:"inline-block",padding:v,background:g,borderRadius:h,boxShadow:r,pointerEvents:"all"},["".concat(t,"-success > ").concat(n)]:{color:a},["".concat(t,"-error > ").concat(n)]:{color:i},["".concat(t,"-warning > ").concat(n)]:{color:s},["".concat(t,"-info > ").concat(n,",\n      ").concat(t,"-loading > ").concat(n)]:{color:l}};return[{[t]:Object.assign(Object.assign({},Ql(e)),{color:o,position:"fixed",top:f,width:"100%",pointerEvents:"none",zIndex:m,["".concat(t,"-move-up")]:{animationFillMode:"forwards"},["\n        ".concat(t,"-move-up-appear,\n        ").concat(t,"-move-up-enter\n      ")]:{animationName:b,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["\n        ".concat(t,"-move-up-appear").concat(t,"-move-up-appear-active,\n        ").concat(t,"-move-up-enter").concat(t,"-move-up-enter-active\n      ")]:{animationPlayState:"running"},["".concat(t,"-move-up-leave")]:{animationName:w,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["".concat(t,"-move-up-leave").concat(t,"-move-up-leave-active")]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{["".concat(y,"-wrapper")]:Object.assign({},x)}},{["".concat(t,"-notice-pure-panel")]:Object.assign(Object.assign({},x),{padding:0,textAlign:"start"})}]},Wu=Bu("Message",(e=>{const t=Pu(e,{height:150});return[Yu(t)]}),(e=>({zIndexPopup:e.zIndexPopupBase+1e3+10,contentBg:e.colorBgElevated,contentPadding:"".concat((e.controlHeightLG-e.fontSize*e.lineHeight)/2,"px ").concat(e.paddingSM,"px")})));var qu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Vu={info:r.createElement(Gc,null),success:r.createElement(Hc,null),error:r.createElement(Wc,null),warning:r.createElement(Qc,null),loading:r.createElement(Zc,null)},Qu=e=>{let{prefixCls:t,type:n,icon:o,children:a}=e;return r.createElement("div",{className:ys()("".concat(t,"-custom-content"),"".concat(t,"-").concat(n))},o||Vu[n],r.createElement("span",null,a))},Ku=e=>{const{prefixCls:t,className:n,type:o,icon:a,content:i}=e,s=qu(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:l}=r.useContext(yr),c=t||l("message"),u=gu(c),[d,f,p]=Wu(c,u);return d(r.createElement(au,Object.assign({},s,{prefixCls:c,className:ys()(n,f,"".concat(c,"-notice-pure-panel"),p,u),eventKey:"pure",duration:null,content:r.createElement(Qu,{prefixCls:c,type:o,icon:a},i)})))};const $u={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"};var Gu=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:$u}))};const Xu=r.forwardRef(Gu);function Ju(e){let t;const n=new Promise((n=>{t=e((()=>{n(!0)}))})),r=()=>{null===t||void 0===t||t()};return r.then=(e,t)=>n.then(e,t),r.promise=n,r}var Zu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const ed=3,td=e=>{let{children:t,prefixCls:n}=e;const o=gu(n),[a,i,s]=Wu(n,o);return a(r.createElement(su,{classNames:{list:ys()(i,s,o)}},t))},nd=(e,t)=>{let{prefixCls:n,key:o}=t;return r.createElement(td,{prefixCls:n,key:o},e)},rd=r.forwardRef(((e,t)=>{const{top:n,prefixCls:o,getContainer:a,maxCount:i,duration:s=ed,rtl:l,transitionName:c,onAllRemoved:u}=e,{getPrefixCls:d,getPopupContainer:f,message:p,direction:h}=r.useContext(yr),m=o||d("message"),v=r.createElement("span",{className:"".concat(m,"-close-x")},r.createElement(Xu,{className:"".concat(m,"-close-icon")})),[g,y]=vu({prefixCls:m,style:()=>({left:"50%",transform:"translateX(-50%)",top:null!==n&&void 0!==n?n:8}),className:()=>ys()({["".concat(m,"-rtl")]:null!==l&&void 0!==l?l:"rtl"===h}),motion:()=>function(e,t){return{motionName:null!==t&&void 0!==t?t:"".concat(e,"-move-up")}}(m,c),closable:!1,closeIcon:v,duration:s,getContainer:()=>(null===a||void 0===a?void 0:a())||(null===f||void 0===f?void 0:f())||document.body,maxCount:i,onAllRemoved:u,renderNotifications:nd});return r.useImperativeHandle(t,(()=>Object.assign(Object.assign({},g),{prefixCls:m,message:p}))),y}));let od=0;function ad(e){const t=r.useRef(null),n=($a("Message"),r.useMemo((()=>{const e=e=>{var n;null===(n=t.current)||void 0===n||n.close(e)},n=n=>{if(!t.current){const e=()=>{};return e.then=()=>{},e}const{open:o,prefixCls:a,message:i}=t.current,s="".concat(a,"-notice"),{content:l,icon:c,type:u,key:d,className:f,style:p,onClose:h}=n,m=Zu(n,["content","icon","type","key","className","style","onClose"]);let v=d;return void 0!==v&&null!==v||(od+=1,v="antd-message-".concat(od)),Ju((t=>(o(Object.assign(Object.assign({},m),{key:v,content:r.createElement(Qu,{prefixCls:a,type:u,icon:c},l),placement:"top",className:ys()(u&&"".concat(s,"-").concat(u),f,null===i||void 0===i?void 0:i.className),style:Object.assign(Object.assign({},null===i||void 0===i?void 0:i.style),p),onClose:()=>{null===h||void 0===h||h(),t()}})),()=>{e(v)})))},o={open:n,destroy:n=>{var r;void 0!==n?e(n):null===(r=t.current)||void 0===r||r.destroy()}};return["info","success","warning","error","loading"].forEach((e=>{o[e]=(t,r,o)=>{let a,i,s;a=t&&"object"===typeof t&&"content"in t?t:{content:t},"function"===typeof r?s=r:(i=r,s=o);const l=Object.assign(Object.assign({onClose:s,duration:i},a),{type:e});return n(l)}})),o}),[]));return[n,r.createElement(rd,Object.assign({key:"message-holder"},e,{ref:t}))]}let id=null,sd=e=>e(),ld=[],cd={};function ud(){const{getContainer:e,duration:t,rtl:n,maxCount:r,top:o}=cd,a=(null===e||void 0===e?void 0:e())||document.body;return{getContainer:()=>a,duration:t,rtl:n,maxCount:r,top:o}}const dd=r.forwardRef(((e,t)=>{const{messageConfig:n,sync:o}=e,{getPrefixCls:a}=(0,r.useContext)(yr),i=cd.prefixCls||a("message"),s=(0,r.useContext)(mr),[l,c]=ad(Object.assign(Object.assign(Object.assign({},n),{prefixCls:i}),s.message));return r.useImperativeHandle(t,(()=>{const e=Object.assign({},l);return Object.keys(e).forEach((t=>{e[t]=function(){o();for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return l[t].apply(l,n)}})),{instance:e,sync:o}})),c})),fd=r.forwardRef(((e,t)=>{const[n,o]=r.useState(ud),a=()=>{o(ud)};r.useEffect(a,[]);const i=oc(),s=i.getRootPrefixCls(),l=i.getIconPrefixCls(),c=i.getTheme(),u=r.createElement(dd,{ref:t,sync:a,messageConfig:n});return r.createElement(sc,{prefixCls:s,iconPrefixCls:l,theme:c},i.holderRender?i.holderRender(u):u)}));function pd(){if(!id){const e=document.createDocumentFragment(),t={fragment:e};return id=t,void sd((()=>{const n=function(e){return e&&(Sc=e),Sc}();n(r.createElement(fd,{ref:e=>{const{instance:n,sync:r}=e||{};Promise.resolve().then((()=>{!t.instance&&n&&(t.instance=n,t.sync=r,pd())}))}}),e)}))}id.instance&&(ld.forEach((e=>{const{type:t,skipped:n}=e;if(!n)switch(t){case"open":sd((()=>{const t=id.instance.open(Object.assign(Object.assign({},cd),e.config));null===t||void 0===t||t.then(e.resolve),e.setCloseFn(t)}));break;case"destroy":sd((()=>{null===id||void 0===id||id.instance.destroy(e.key)}));break;default:sd((()=>{var n;const r=(n=id.instance)[t].apply(n,hr(e.args));null===r||void 0===r||r.then(e.resolve),e.setCloseFn(r)}))}})),ld=[])}const hd={open:function(e){const t=Ju((t=>{let n;const r={type:"open",config:e,resolve:t,setCloseFn:e=>{n=e}};return ld.push(r),()=>{n?sd((()=>{n()})):r.skipped=!0}}));return pd(),t},destroy:e=>{ld.push({type:"destroy",key:e}),pd()},config:function(e){cd=Object.assign(Object.assign({},cd),e),sd((()=>{var e;null===(e=null===id||void 0===id?void 0:id.sync)||void 0===e||e.call(id)}))},useMessage:function(e){return ad(e)},_InternalPanelDoNotUseOrYouWillBeFired:Ku},md=hd;["success","info","warning","error","loading"].forEach((e=>{md[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return function(e,t){oc();const n=Ju((n=>{let r;const o={type:e,args:t,resolve:n,setCloseFn:e=>{r=e}};return ld.push(o),()=>{r?sd((()=>{r()})):o.skipped=!0}}));return pd(),n}(e,n)}}));const vd=md,gd="http://localhost:8088",yd=async()=>{try{const n=await ar.get("".concat(gd,"/discount/all"),{headers:{Authorization:localStorage.getItem("token")}});var e,t;if(n.data&&200===n.data.code)return(null===(e=n.data.data)||void 0===e?void 0:e.data)||n.data.data||[];throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u6298\u6263\u4fe1\u606f\u5931\u8d25")}catch(n){throw console.error("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25:",n),n}};var bd=n(723);const wd=e=>{var t;let{onLogout:n}=e;const o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(""),[d,f]=(0,r.useState)(0),p=te(),{tab:h}=re(),[m,v]=(0,r.useState)(!1),[g,y]=(0,r.useState)(!1),[b,w]=(0,r.useState)({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),[x,k]=(0,r.useState)(!1),[S,E]=(0,r.useState)(""),[C,N]=(0,r.useState)(""),[j,D]=(0,r.useState)(null),[P,T]=(0,r.useState)([]),[_,O]=(0,r.useState)(!1),[M,R]=(0,r.useState)(null),[A,L]=(0,r.useState)(1),[I,F]=(0,r.useState)(1),[z,B]=(0,r.useState)({}),[H,U]=(0,r.useState)([]),[Y,W]=(0,r.useState)([]),[q,V]=(0,r.useState)(!1),[Q,K]=(0,r.useState)(null),[$,G]=(0,r.useState)([]),[X,J]=(0,r.useState)([]),[ee,ne]=(0,r.useState)(!1),[oe,ae]=(0,r.useState)(null),[ie,se]=(0,r.useState)(X),[le,ce]=(0,r.useState)(!1),[ue,de]=(0,r.useState)(!1),[fe,pe]=(0,r.useState)(null),[he,me]=(0,r.useState)(0),[ve,ge]=(0,r.useState)(!1),[ye,be]=(0,r.useState)("D:/studies/ptPlatform/torrent"),[we,xe]=(0,r.useState)(""),[ke,Se]=(0,r.useState)(""),[Ee,Ce]=(0,r.useState)(""),[Ne,je]=(0,r.useState)(""),De=h||"announcement",Pe=e=>{p("/dashboard/".concat(e),{state:{savedFilters:Xe,activeTab:e}})},Te=async()=>{try{const e=await ir.get("/announcement/latest");U(e.data.data.announcements||[])}catch(c){console.error("\u83b7\u53d6\u516c\u544a\u5931\u8d25:",c)}};(0,r.useEffect)((()=>{"announcement"===De&&(Te(),Oe())}),[De]);const Oe=async()=>{try{const e=await yd();console.log("\u8fd4\u56de\u7684\u6298\u6263\u6570\u636e\uff1a",e);const t=new Date,n=e.filter((e=>Date.parse(e.startTime)<=t.getTime()&&Date.parse(e.endTime)>=t.getTime())),r=e.filter((e=>Date.parse(e.startTime)>t.getTime())).sort(((e,t)=>Date.parse(e.startTime)-Date.parse(t.startTime))),o=[...n.slice(0,3)];for(;o.length<3&&r.length>0;)o.push(r.shift());W(o)}catch(Dy){console.error("\u83b7\u53d6\u6298\u6263\u5931\u8d25:",Dy)}},Me=e=>{xe(e.target.value)},Re=async()=>{try{ne(!0);const e=await lr(ke,1);if(200===e.data.code){J(e.data.data.records);const t=e.data.data.total;F(Math.ceil(t/5)),L(1)}else ae(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){ae(e.message||"\u641c\u7d22\u5931\u8d25")}finally{ne(!1)}},Ae=async()=>{Se(""),Je(Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),await Ve(1,!0)},Le=async()=>{try{V(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/request/posts/search",{params:{keyword:e,page:t,size:n}})}(Ee,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(t),F(Math.ceil(e.data.data.total/5))}else K(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){K(e.message||"\u641c\u7d22\u5931\u8d25")}finally{V(!1)}},Ie=async()=>{Ce(""),await Qe(1)},Fe=async()=>{try{O(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/help/posts/search",{params:{keyword:e,page:t,size:n}})}(Ne,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(t),F(Math.ceil(e.data.data.total/5))}else R(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){R(e.message||"\u641c\u7d22\u5931\u8d25")}finally{O(!1)}},ze=async()=>{je(""),await $e(1)},Be=e=>{w(_e(_e({},b),{},{file:e.target.files[0]}))},He=async e=>{e.preventDefault();try{y(!0);const e={torrentName:b.name,description:b.description,category:b.type,region:b.region,resolution:b.resolution,subtitle:b.subtitle};await async function(e,t){const n=new FormData;n.append("file",e),n.append("body",new Blob([JSON.stringify(t)],{type:"application/json"}));try{return(await ir.post("/torrent",n,{headers:{}})).data}catch(c){throw console.error("\u4e0a\u4f20\u79cd\u5b50\u5931\u8d25:",c),c}}(b.file,e),v(!1),w({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),alert("\u79cd\u5b50\u521b\u5efa\u6210\u529f\uff01"),await Ve(A)}catch(c){var t,n;console.error("\u521b\u5efa\u5931\u8d25:",c),alert("\u521b\u5efa\u5931\u8d25: "+((null===(t=c.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||c.message))}finally{y(!1)}},Ue=async e=>{try{return!0}catch(Dy){return console.error("\u68c0\u67e5\u6587\u4ef6\u5b58\u5728\u6027\u5931\u8d25:",Dy),!1}},Ye=async(e,t)=>{t.stopPropagation();try{if(!window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))return;await(e=>ir.delete("/torrent/deleteTorrent/".concat(e)))(e),vd.success("\u79cd\u5b50\u5220\u9664\u6210\u529f"),await Ve(A)}catch(c){var n,r;console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),vd.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25: "+((null===(n=c.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||c.message))}},We=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/request/posts",o)})(S,C,e,j);200===t.data.code?(await Qe(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},qe=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/help/posts",o)})(S,C,e,j);200===t.data.code?(await $e(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},Ve=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ne(!0);try{const n={page:e,size:5};!t&&Object.values(Xe).some((e=>"all"!==e))&&("all"!==Xe.type&&(n.category=Xe.type),"all"!==Xe.subtitle&&(n.subtitle=Xe.subtitle),"all"!==Xe.region&&(n.region=Xe.region),"all"!==Xe.resolution&&(n.resolution=Xe.resolution));const r=ke&&!t?await lr(ke,e):await ir.get("http://localhost:8088/torrent",{params:n});if(200===r.data.code){J(r.data.data.records);const t=r.data.data.total;F(Math.ceil(t/5)),L(e)}else ae(r.data.message)}catch(n){ae(n.message)}finally{ne(!1)}};(0,r.useEffect)((()=>{"share"===De&&Ve()}),[De]);const Qe=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;V(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/request/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(n),F(Math.ceil(t.data.data.total/5)),L(e)}else K(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){K(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{V(!1)}},Ke=e=>{D(e.target.files[0])},$e=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;O(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/help/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(n),F(Math.ceil(t.data.data.total/5)),L(e)}else R(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{O(!1)}};(0,r.useEffect)((()=>{"request"===De&&Qe(A)}),[De,A]);const Ge={type:{label:"\u7c7b\u578b",options:{all:"\u5168\u90e8","\u7535\u5f71":"\u7535\u5f71","\u7535\u89c6\u5267":"\u7535\u89c6\u5267","\u52a8\u6f2b":"\u52a8\u6f2b","\u7efc\u827a":"\u7efc\u827a","\u97f3\u4e50":"\u97f3\u4e50","\u5176\u4ed6":"\u5176\u4ed6"}},subtitle:{label:"\u5b57\u5e55",options:{all:"\u5168\u90e8","\u65e0\u9700\u5b57\u5e55":"\u65e0\u9700\u5b57\u5e55","\u6682\u65e0\u5b57\u5e55":"\u6682\u65e0\u5b57\u5e55","\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55":"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55","\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)":"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)","\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55":"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55","\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55":"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"}},region:{label:"\u5730\u533a",options:{all:"\u5168\u90e8","\u4e2d\u56fd":"\u4e2d\u56fd","\u82f1\u56fd":"\u82f1\u56fd","\u7f8e\u56fd":"\u7f8e\u56fd","\u65e5\u672c":"\u65e5\u672c","\u97e9\u56fd":"\u97e9\u56fd","\u5176\u4ed6":"\u5176\u4ed6"}},resolution:{label:"\u5206\u8fa8\u7387",options:{all:"\u5168\u90e8","4K":"4K","2K":"2K","1080P":"1080P","720P":"720P",SD:"SD","\u65e0\u635f\u97f3\u6e90":"\u65e0\u635f\u97f3\u6e90","\u675c\u6bd4\u5168\u666f\u58f0":"\u675c\u6bd4\u5168\u666f\u58f0","\u5176\u4ed6":"\u5176\u4ed6"}}},[Xe,Je]=(0,r.useState)((null===(t=o.state)||void 0===t?void 0:t.savedFilters)||Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),Ze=async()=>{try{ne(!0);const e={page:1,size:5};"all"!==Xe.type&&(e.category=Xe.type),"all"!==Xe.subtitle&&(e.subtitle=Xe.subtitle),"all"!==Xe.region&&(e.region=Xe.region),"all"!==Xe.resolution&&(e.resolution=Xe.resolution);const t=await ir.get("http://localhost:8088/torrent",{params:e});200===t.data.code?(J(t.data.data.records),F(Math.ceil(t.data.data.total/5)),L(1)):ae(t.data.message||"\u7b5b\u9009\u5931\u8d25")}catch(e){ae(e.message||"\u7b5b\u9009\u5931\u8d25")}finally{ne(!1)}};(0,r.useEffect)((()=>{var e;null!==(e=o.state)&&void 0!==e&&e.scrollPosition&&window.scrollTo(0,o.state.scrollPosition)}),[o.state]),(0,r.useEffect)((()=>{if(!localStorage.getItem("token"))return void p("/login");(async()=>{try{l(!0);const e=await sr();console.log("\u540e\u7aef\u8fd4\u56de\u7684\u7528\u6237\u6570\u636e:",e),i({name:e.username||"\u6f14\u793a\u7528\u6237",avatar:"https://via.placeholder.com/40",isAdmin:"ADMIN"===e.authority})}catch(c){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",c),u("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}finally{l(!1)}})()}),[p]),(0,r.useEffect)((()=>{if("announcement"===De){const e=setInterval((()=>{f((e=>(e+1)%(Y.length||1)))}),3e3);return()=>clearInterval(e)}}),[De]),(0,r.useEffect)((()=>{"help"===De&&$e()}),[De,A]);return s?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsx)("div",{className:"error",children:c}):(0,bd.jsxs)("div",{className:"dashboard-container","data-testid":"dashboard-container",children:[(0,bd.jsxs)("div",{className:"top-bar","data-testid":"top-bar",children:[(0,bd.jsx)("div",{className:"platform-name",children:(0,bd.jsx)("h2",{children:"PT\u8d44\u6e90\u7ad9"})}),(0,bd.jsxs)("div",{className:"user-actions",children:[(null===a||void 0===a?void 0:a.isAdmin)&&(0,bd.jsx)("button",{className:"admin-center-button",onClick:()=>p("/administer"),children:"\u7ba1\u7406\u5458\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"user-info","data-testid":"user-info",children:[(0,bd.jsx)("img",{src:(null===a||void 0===a?void 0:a.avatar)||"https://via.placeholder.com/40",alt:"\u7528\u6237\u5934\u50cf",className:"user-avatar",onClick:()=>p("/personal"),style:{cursor:"pointer"}}),(0,bd.jsx)("span",{className:"username",children:(null===a||void 0===a?void 0:a.name)||"\u7528\u6237"}),(0,bd.jsx)("button",{onClick:n,className:"logout-button",children:"\u9000\u51fa"})]})]})]}),(0,bd.jsxs)("div",{className:"nav-tabs",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("announcement"===De?"active":""),onClick:()=>Pe("announcement"),children:"\u516c\u544a\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("share"===De?"active":""),onClick:()=>Pe("share"),children:"\u5206\u4eab\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("request"===De?"active":""),onClick:()=>Pe("request"),children:"\u6c42\u79cd\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("help"===De?"active":""),onClick:()=>Pe("help"),children:"\u6c42\u52a9\u533a"})]}),(()=>{switch(De){case"announcement":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"announcement-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u516c\u544a...",value:we,onChange:e=>xe(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Me()}),(0,bd.jsx)("button",{className:"search-button",onClick:Me,children:"\u641c\u7d22"})]}),(0,bd.jsxs)("div",{className:"carousel-container",children:[0===Y.length?(0,bd.jsx)("div",{className:"carousel-slide active",children:(0,bd.jsx)("div",{className:"carousel-image gray-bg",children:"\u6682\u65e0\u6298\u6263\u6d3b\u52a8"})}):Y.map(((e,t)=>(0,bd.jsx)("div",{className:"carousel-slide ".concat(d===t?"active":""),children:(0,bd.jsxs)("div",{className:"carousel-image gray-bg",children:[(0,bd.jsx)("h3",{children:e.type}),(0,bd.jsx)("p",{children:e.name}),(0,bd.jsxs)("p",{children:[new Date(e.startTime).toLocaleDateString()," ~ ",new Date(e.endTime).toLocaleDateString()]})]})},t))),(0,bd.jsx)("div",{className:"carousel-dots",children:Y.map(((e,t)=>(0,bd.jsx)("span",{className:"dot ".concat(d===t?"active":"")},t)))})]}),(0,bd.jsx)("div",{className:"announcement-grid",children:H.map((e=>(0,bd.jsxs)("div",{className:"announcement-card",onClick:t=>((e,t)=>{t.target.closest(".exclude-click")||p("/announcement/".concat(e.id),{state:{announcement:e,returnPath:"/dashboard/".concat(De),scrollPosition:window.scrollY,activeTab:De}})})(e,t),children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsxs)("p",{children:[e.content.substring(0,100),"..."]}),(0,bd.jsx)("div",{className:"announcement-footer exclude-click",children:(0,bd.jsx)("span",{children:e.date})})]},e.id)))})]});case"share":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"share-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u8d44\u6e90...",value:ke,onChange:e=>Se(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Re()}),(0,bd.jsx)("button",{className:"search-button",onClick:Re,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ae,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"upload-header",children:(0,bd.jsx)("button",{className:"upload-btn",onClick:()=>v(!0),children:"\uff0b \u4e0a\u4f20\u79cd\u5b50"})}),(0,bd.jsxs)("div",{className:"filter-section",children:[Object.entries(Ge).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"filter-group",children:[(0,bd.jsxs)("h4",{children:[n.label,"\uff1a"]}),(0,bd.jsx)("div",{className:"filter-options",children:Object.entries(n.options).map((e=>{let[n,r]=e;return(0,bd.jsx)("button",{className:"filter-btn ".concat(Xe[t]===n?"active":""),onClick:()=>((e,t)=>{Je((n=>_e(_e({},n),{},{[e]:n[e]===t?"all":t})))})(t,n),children:r},n)}))})]},t)})),(0,bd.jsx)("button",{className:"confirm-btn",onClick:Ze,children:"\u786e\u8ba4\u7b5b\u9009"})]}),m&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"upload-modal",children:[(0,bd.jsx)("h3",{children:"\u4e0a\u4f20\u65b0\u79cd\u5b50"}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>v(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:He,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u540d\u79f0"}),(0,bd.jsx)("input",{type:"text",value:b.name,onChange:e=>w(_e(_e({},b),{},{name:e.target.value})),required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u8d44\u6e90\u7c7b\u578b"}),(0,bd.jsxs)("select",{value:b.type,onChange:e=>w(_e(_e({},b),{},{type:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u7535\u5f71",children:"\u7535\u5f71"}),(0,bd.jsx)("option",{value:"\u7535\u89c6\u5267",children:"\u7535\u89c6\u5267"}),(0,bd.jsx)("option",{value:"\u52a8\u6f2b",children:"\u52a8\u6f2b"}),(0,bd.jsx)("option",{value:"\u7efc\u827a",children:"\u7efc\u827a"}),(0,bd.jsx)("option",{value:"\u97f3\u4e50",children:"\u97f3\u4e50"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5730\u533a"}),(0,bd.jsxs)("select",{value:b.region||"",onChange:e=>w(_e(_e({},b),{},{region:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u4e2d\u56fd",children:"\u4e2d\u56fd"}),(0,bd.jsx)("option",{value:"\u82f1\u56fd",children:"\u82f1\u56fd"}),(0,bd.jsx)("option",{value:"\u7f8e\u56fd",children:"\u7f8e\u56fd"}),(0,bd.jsx)("option",{value:"\u65e5\u672c",children:"\u65e5\u672c"}),(0,bd.jsx)("option",{value:"\u97e9\u56fd",children:"\u97e9\u56fd"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5206\u8fa8\u7387"}),(0,bd.jsxs)("select",{value:b.resolution||"",onChange:e=>w(_e(_e({},b),{},{resolution:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"4K",children:"4K"}),(0,bd.jsx)("option",{value:"2K",children:"2K"}),(0,bd.jsx)("option",{value:"1080P",children:"1080P"}),(0,bd.jsx)("option",{value:"720P",children:"720P"}),(0,bd.jsx)("option",{value:"SD",children:"SD"}),(0,bd.jsx)("option",{value:"\u65e0\u635f\u97f3\u6e90",children:"\u65e0\u635f\u97f3\u6e90"}),(0,bd.jsx)("option",{value:"\u675c\u6bd4\u5168\u666f\u58f0",children:"\u675c\u6bd4\u5168\u666f\u58f0"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5b57\u5e55\u8bed\u8a00"}),(0,bd.jsxs)("select",{value:b.subtitle||"",onChange:e=>w(_e(_e({},b),{},{subtitle:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u65e0\u9700\u5b57\u5e55",children:"\u65e0\u9700\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u6682\u65e0\u5b57\u5e55",children:"\u6682\u65e0\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55",children:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)",children:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55",children:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55",children:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u6587\u4ef6"}),(0,bd.jsx)("input",{type:"file",accept:".torrent",onChange:Be})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7b80\u4ecb"}),(0,bd.jsx)("textarea",{value:b.description,onChange:e=>w(_e(_e({},b),{},{description:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>v(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"confirm-btn",disabled:g,children:g?"\u4e0a\u4f20\u4e2d...":"\u786e\u8ba4\u4e0a\u4f20"})]})]})]})}),(0,bd.jsx)("div",{className:"resource-list",children:X.map((e=>(0,bd.jsxs)("div",{className:"resource-item",onClick:()=>p("/torrent/".concat(e.id)),children:[(0,bd.jsx)("div",{className:"resource-poster",children:(0,bd.jsx)("div",{className:"poster-image gray-bg",children:e.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"resource-info",children:[(0,bd.jsx)("h3",{className:"resource-title",children:e.torrentName}),(0,bd.jsxs)("p",{className:"resource-meta",children:[e.resolution," | ",e.region," | ",e.category]}),(0,bd.jsxs)("p",{className:"resource-subtitle",children:["\u5b57\u5e55: ",e.subtitle]})]}),(0,bd.jsxs)("div",{className:"resource-stats",children:[(0,bd.jsx)("span",{className:"stat",children:e.size}),(0,bd.jsxs)("span",{className:"stat",children:["\u53d1\u5e03\u8005: ",e.username]})]}),(0,bd.jsx)("button",{className:"download-btn",onClick:t=>((e,t)=>{t.stopPropagation(),pe(e),de(!0)})(e,t),children:"\u7acb\u5373\u4e0b\u8f7d"}),((null===a||void 0===a?void 0:a.isAdmin)||(null===a||void 0===a?void 0:a.name)===e.username)&&(0,bd.jsx)("button",{className:"delete-btn",onClick:t=>Ye(e.id,t),children:"\u5220\u9664"})]},e.id)))}),I>1&&(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Ve(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Ve(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Ve(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]})]});case"request":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"request-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ee,onChange:e=>Ce(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Le()}),(0,bd.jsx)("button",{className:"search-button",onClick:Le,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ie,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),q&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),Q&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"request-list",children:$.map((e=>(0,bd.jsxs)("div",{className:"request-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/request/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Qe(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Qe(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Qe(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u79cd\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:We,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});case"help":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"help-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ne,onChange:e=>je(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Fe()}),(0,bd.jsx)("button",{className:"search-button",onClick:Fe,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:ze,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),_&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),M&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"help-list",children:P.map((e=>(0,bd.jsxs)("div",{className:"help-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/help/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>$e(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>$e(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>$e(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u52a9\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:qe,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});default:return(0,bd.jsx)("div",{className:"content-area","data-testid":"default-section",children:"\u516c\u544a\u533a\u5185\u5bb9"})}})(),ue&&fe&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"download-modal",children:[(0,bd.jsxs)("h3",{children:["\u4e0b\u8f7d ",fe.torrentName]}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>!ve&&de(!1),disabled:ve,children:"\xd7"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0b\u8f7d\u8def\u5f84:"}),(0,bd.jsx)("input",{type:"text",value:ye,onChange:e=>{let t=e.target.value.replace(/\t/g,"").replace(/\\/g,"/").replace(/\s+/g," ");be(t)},disabled:ve,placeholder:"\u4f8b\u5982: D:/downloads/"})]}),ve&&(0,bd.jsx)("div",{className:"progress-container",children:(0,bd.jsxs)("div",{className:"progress-bar",style:{width:"".concat(he,"%")},children:[he,"%"]})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{onClick:()=>!ve&&de(!1),disabled:ve,children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{onClick:async()=>{if(fe&&ye){ge(!0),me(0);try{const e=ye.replace(/\\/g,"/").replace(/\/+/g,"/").trim(),t=e.endsWith("/")?e:e+"/";await async function(e,t){try{return(await ir.get("/torrent/downloadTorrent",{params:{id:e,downloadPath:t}})).data}catch(c){throw console.error("\u4e0b\u8f7d\u79cd\u5b50\u5931\u8d25:",c),c}}(fe.id,t);const n=setInterval((async()=>{try{const e=await async function(){try{return(await ir.get("/torrent/getProgress")).data}catch(c){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",c),c}}(),t=e.data.progresses;if(t){fe.filePath.replace(/\\/g,"/"),fe.hash;let e=null;for(const[n,r]of Object.entries(t)){const t=n.replace(/\\/g,"/");if(t.includes(fe.hash)||t.includes(fe.torrentName)){e=r;break}}if(null!==e){const t=Math.round(100*e);me(t),t>=100&&(clearInterval(n),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}else console.log("\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6:",t)}}catch(c){console.error("\u83b7\u53d6\u8fdb\u5ea6\u5931\u8d25:",c);const r="".concat(t).concat(fe.torrentName||"downloaded_file");try{await Ue(r)&&(clearInterval(n),me(100),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}catch(Dy){console.error("\u6587\u4ef6\u68c0\u67e5\u5931\u8d25:",Dy)}}}),2e3);return()=>clearInterval(n)}catch(c){ge(!1),c.response&&409===c.response.status?vd.error("\u5206\u4eab\u7387\u4e0d\u8db3\uff0c\u65e0\u6cd5\u4e0b\u8f7d\u6b64\u8d44\u6e90"):vd.error("\u4e0b\u8f7d\u5931\u8d25: "+(c.message||"\u672a\u77e5\u9519\u8bef"))}}},disabled:ve||!ye,children:ve?"\u4e0b\u8f7d\u4e2d...":"\u5f00\u59cb\u4e0b\u8f7d"})]})]})})]})},xd=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code){const t=e.data.data;return{username:t.username,level:t.level,registTime:Sd(t.registTime),magicPoints:t.magicPoints,upload:t.upload,download:t.download,shareRate:t.shareRate.toFixed(2)}}throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}},kd=async()=>{try{const e=await ir.get("/user/allowDownload");if(200===e.data.code){const t=e.data.data;return{total:t.total,used:t.used,remaining:t.remaining}}throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25:",e),e}},Sd=e=>{const t=new Date(e),n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return"".concat(n,"-").concat(r,"-").concat(o)},Ed=async()=>{try{const e=await ir.get("/invitecode/userInviteCode");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25:",e),e}},Cd=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(null),[c,u]=(0,r.useState)({});(0,r.useEffect)((()=>{(async()=>{try{const[e,t]=await Promise.all([xd(),kd()]);o({username:e.username,avatar:"https://via.placeholder.com/150",joinDate:e.registTime,level:e.level,points:e.magicPoints,upload:e.upload,download:e.download,ratio:e.shareRate,downloadQuota:{total:t.total,used:t.used,remaining:t.remaining}})}catch(e){l(e.message)}finally{i(!1)}})()}),[]);const d=async()=>{try{const e=await(async()=>{try{const e=await ir.get("/torrent/getProgress");if(200===e.data.code)return e.data.data.progresses;throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25")}catch(s){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",s),s}})();u(e)}catch(e){console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",e)}};if((0,r.useEffect)((()=>{d();const e=setInterval(d,1e4);return()=>clearInterval(e)}),[]),a)return(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."});if(s)return(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",s]});if(!n)return(0,bd.jsx)("div",{className:"error",children:"\u672a\u83b7\u53d6\u5230\u7528\u6237\u6570\u636e"});const f=e=>{if(e<1024)return"".concat(e," B");const t=e/1024;if(t<1024)return"".concat(t.toFixed(2)," KB");const n=t/1024;if(n<1024)return"".concat(n.toFixed(2)," MB");return"".concat((n/1024).toFixed(2)," GB")};return(0,bd.jsxs)("div",{className:"personal-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var n;null!==(n=t.state)&&void 0!==n&&n.fromSubpage?e("/dashboard/".concat(t.state.dashboardTab||""),{replace:!0}):e(-1)},children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"profile-card",children:[(0,bd.jsxs)("div",{className:"profile-header",children:[(0,bd.jsx)("img",{src:n.avatar,alt:n.username,className:"profile-avatar"}),(0,bd.jsxs)("div",{className:"profile-info",children:[(0,bd.jsx)("h2",{className:"username",children:n.username}),(0,bd.jsxs)("div",{className:"user-meta",children:[(0,bd.jsxs)("span",{children:["\u52a0\u5165\u65f6\u95f4: ",n.joinDate]}),(0,bd.jsxs)("span",{children:["\u4f1a\u5458\u7b49\u7ea7: Lv.",n.level]})]})]})]}),(0,bd.jsxs)("div",{className:"stats-grid",children:[(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4fdd\u79cd\u79ef\u5206"}),(0,bd.jsx)("div",{className:"stat-value",children:n.points})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.upload)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.download)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("div",{className:"stat-value",children:n.ratio})]})]})]}),(0,bd.jsxs)("div",{className:"quota-card",children:[(0,bd.jsx)("h3",{children:"\u4e0b\u8f7d\u989d\u5ea6"}),(0,bd.jsxs)("div",{className:"quota-info",children:[(0,bd.jsxs)("span",{className:"quota-used",children:[f(n.downloadQuota.used)," \u5df2\u4f7f\u7528"]}),(0,bd.jsxs)("span",{className:"quota-remaining",children:[f(n.downloadQuota.remaining)," \u5269\u4f59"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(n.downloadQuota.used/n.downloadQuota.total*100,"%"),backgroundColor:(p=n.downloadQuota.used/n.downloadQuota.total,p<.3?"#4CAF50":p<.7?"#FFC107":"#F44336")}})}),(0,bd.jsxs)("div",{className:"quota-total",children:["\u603b\u989d\u5ea6: ",f(n.downloadQuota.total)]})]}),Object.keys(c).length>0&&(0,bd.jsxs)("div",{className:"progress-card",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6"}),Object.entries(c).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"download-task",children:[(0,bd.jsxs)("div",{className:"task-info",children:[(0,bd.jsxs)("span",{className:"task-id",children:["\u4efb\u52a1: ",t.substring(0,8),"..."]}),(0,bd.jsxs)("span",{className:"task-progress",children:[Math.round(100*n),"%"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(100*n,"%")}})})]},t)}))]}),(0,bd.jsx)("div",{className:"action-cards",children:[{title:"\u5151\u6362\u533a",description:"\u4e0b\u8f7d\u91cf/\u9080\u8bf7\u7801",path:"/personal/Exchange"},{title:"\u4e0a\u4f20\u8bb0\u5f55",description:"\u7ba1\u7406\u4e0a\u4f20\u7684\u8d44\u6e90",path:"/personal/Upload"},{title:"\u6d88\u606f\u901a\u77e5",description:"\u67e5\u770b\u7cfb\u7edf\u6d88\u606f",path:"/personal/Notice"},{title:"\u8bbe\u7f6e",description:"\u4fee\u6539\u4e2a\u4eba\u8d44\u6599",path:"/personal/Setting"}].map((t=>(0,bd.jsxs)("div",{className:"action-card",onClick:()=>{return n=t.path,void e(n);var n},children:[(0,bd.jsx)("h3",{children:t.title}),(0,bd.jsx)("p",{children:t.description})]},t.path)))}),(0,bd.jsx)("div",{className:"subpage-container",children:(0,bd.jsx)(ye,{})})]});var p},Nd=e=>{let{onLoginSuccess:t}=e;const[n,o]=(0,r.useState)(!0),[a,i]=(0,r.useState)({username:"",password:"",code:""}),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),d=te(),f=e=>{const{name:t,value:n}=e.target;i((e=>_e(_e({},e),{},{[t]:n})))},p=async e=>{e.preventDefault();try{if(n){const e=await(async(e,t)=>{const n=await ir.post("/user/login",null,{params:{username:e,password:t}});return 200===n.data.code&&n.data.data.token&&localStorage.setItem("token",n.data.data.token),n})(a.username,a.password);200===e.data.code?(localStorage.setItem("token",e.data.data.token),localStorage.setItem("username",a.username),null===t||void 0===t||t(),d("/dashboard")):l(e.data.message||"\u767b\u5f55\u5931\u8d25")}else{const e=await(r=a.username,s=a.password,c=a.code,ir.post("/user/regist",null,{params:{username:r,password:s,code:c}}));200===e.data.code?(l(""),o(!0),i({username:"",password:"",code:""})):l(e.data.message||"\u6ce8\u518c\u5931\u8d25")}}catch(f){l(f.message||(n?"\u767b\u5f55\u5931\u8d25":"\u6ce8\u518c\u5931\u8d25"))}finally{u(!1)}var r,s,c};return(0,bd.jsxs)("div",{className:"auth-container",children:[(0,bd.jsx)("h1",{className:"auth-title",children:"PT\u5f71\u89c6\u8d44\u6e90\u7ad9"}),(0,bd.jsx)("div",{className:"auth-form-wrapper",children:n?(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u767b\u5f55"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u767b\u5f55\u4e2d...":"\u767b\u5f55"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u672a\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!1),className:"switch-button",children:"\u53bb\u6ce8\u518c"})]})]}):(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u6ce8\u518c"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"code",placeholder:"\u9080\u8bf7\u7801",value:a.code,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u6ce8\u518c\u4e2d...":"\u6ce8\u518c"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u5df2\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!0),className:"switch-button",children:"\u53bb\u767b\u5f55"})]})]})})]})},jd=()=>{const e=te(),{id:t}=re(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(""),c=Z(),{state:u}=Z(),d=()=>{var t;const n=null===(t=c.state)||void 0===t?void 0:t.fromTab;e(n?"/dashboard/".concat(n):-1)};return(0,r.useEffect)((()=>{(async()=>{try{i(!0);const e=await(e=>ir.get("/announcement/".concat(e)))(t);200===e.data.code?o(e.data.data.announcement):l(e.data.message||"\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}catch(e){l("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25"),vd.error("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}finally{i(!1)}})()}),[t]),s||!n?(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsx)("div",{className:"error-message",children:s||"\u516c\u544a\u4e0d\u5b58\u5728"})]}):(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"announcement-detail",children:[(0,bd.jsxs)("div",{className:"announcement-header",children:[(0,bd.jsx)("h1",{children:n.title}),(0,bd.jsx)("div",{className:"announcement-meta",children:(0,bd.jsxs)("span",{children:["\u53d1\u5e03\u65e5\u671f\uff1a",n.createTime]})})]}),(0,bd.jsx)("div",{className:"announcement-content",children:n.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t)))})]})]})},Dd=e=>{let{onLogout:t}=e;const{id:n}=re(),o=te(),a=Z(),[i,s]=(0,r.useState)(null),[l,c]=(0,r.useState)([]),[u,d]=(0,r.useState)(""),[f]=(0,r.useState)(null),[p,h]=(0,r.useState)(""),[m,v]=(0,r.useState)(!0),[g,y]=(0,r.useState)(""),[b,w]=(0,r.useState)(null),[x,k]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),S=(e,t)=>{k({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},E=()=>{k({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),h("")},C=e=>{let{comment:t,onLike:n,onReply:r,isReply:o=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(o?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"})]})]})]})})},N=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(C,{comment:e,onLike:D,onReply:S,isReply:t>0}),e.replies&&e.replies.map((e=>N(e,t+1)))]},e.id)},j=async()=>{try{v(!0);const e=await(r=n,ir.get("/torrent/".concat(r)).then((e=>e.data&&e.data.data?_e(_e({},e),{},{data:_e(_e({},e.data),{},{data:{torrent:e.data.data.torrent,comments:e.data.data.comments||[]}})}):e)));console.log("API Response:",JSON.parse(JSON.stringify(e.data.data.comments))),s(e.data.data.torrent),c(e.data.data.comments)}catch(o){var e,t;y((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u79cd\u5b50\u8be6\u60c5\u5931\u8d25")}finally{v(!1)}var r};(0,r.useEffect)((()=>{j()}),[n]);const D=async e=>{try{await(e=>ir.post("/torrent/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));c((e=>t(e)))}catch(r){var t,n;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return m?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):g?(0,bd.jsx)("div",{className:"error",children:g}):i?(0,bd.jsxs)("div",{className:"torrent-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;const t=(null===(e=a.state)||void 0===e?void 0:e.fromTab)||"share";o("/dashboard/".concat(t))},children:"\u2190 \u8fd4\u56de\u8d44\u6e90\u533a"}),(0,bd.jsxs)("div",{className:"torrent-main",children:[(0,bd.jsx)("div",{className:"torrent-cover",children:(0,bd.jsx)("div",{className:"cover-placeholder",children:i.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"torrent-info",children:[(0,bd.jsx)("h1",{className:"torrent-title",children:i.torrentName}),(0,bd.jsxs)("div",{className:"uploader-info",children:[(0,bd.jsx)("div",{className:"uploader-avatar",children:i.username.charAt(0)}),(0,bd.jsxs)("div",{className:"uploader-details",children:[(0,bd.jsx)("span",{className:"uploader-name",children:i.username}),(0,bd.jsx)("span",{className:"upload-time",children:new Date(i.createTime).toLocaleString()})]})]}),(0,bd.jsxs)("div",{className:"torrent-meta",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",i.category]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5730\u533a:"})," ",i.region]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5206\u8fa8\u7387:"})," ",i.resolution]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5b57\u5e55:"})," ",i.subtitle]}),i.size&&(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5927\u5c0f:"})," ",i.size]})]}),(0,bd.jsxs)("div",{className:"torrent-description",children:[(0,bd.jsx)("h3",{children:"\u8d44\u6e90\u63cf\u8ff0"}),(0,bd.jsx)("p",{children:i.description})]}),(0,bd.jsxs)("div",{className:"interaction-buttons",children:[(0,bd.jsx)("button",{className:"like-button",onClick:async()=>{try{await(r=n,ir.post("/torrent/".concat(r,"/like"))),s((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(o){var e,t;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||o.message))}var r},children:(0,bd.jsxs)("span",{children:["\ud83d\udc4d \u70b9\u8d5e (",i.likeCount,")"]})}),(0,bd.jsx)("button",{className:"download-button",children:(0,bd.jsx)("span",{children:"\u2b07\ufe0f \u7acb\u5373\u4e0b\u8f7d"})})]})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",i.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,r;if(e.preventDefault(),u.trim())try{const e=localStorage.getItem("username"),o=await(t=n,r={content:u,authorId:e},ir.post("/torrent/".concat(t,"/comments"),r));o.data&&200===o.data.code?(await j(),d("")):y(o.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;y("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:u,onChange:e=>d(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"})]}),(0,bd.jsx)("div",{className:"comment-list",children:l.map((e=>N(e)))}),x.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",x.replyingToUsername]}),(0,bd.jsx)("button",{onClick:E,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,n;if(e.preventDefault(),p.trim())try{const e=localStorage.getItem("username"),r=await(t=x.replyingTo,n={content:p,authorId:e},ir.post("/torrent/comments/".concat(t,"/replies"),n));console.log("\u56de\u590d\u54cd\u5e94:",r.data),r.data&&200===r.data.code&&(await j(),E())}catch(a){var r,o;console.error("\u56de\u590d\u9519\u8bef:",a),y("\u56de\u590d\u5931\u8d25: "+((null===(r=a.response)||void 0===r||null===(o=r.data)||void 0===o?void 0:o.message)||a.message))}},children:[(0,bd.jsx)("textarea",{value:p,onChange:e=>h(e.target.value),placeholder:"\u56de\u590d @".concat(x.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:E,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u79cd\u5b50\u4e0d\u5b58\u5728"})},Pd=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await ur(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/request/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/request")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/request/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/request/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"request-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/request")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"request-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/request/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/request/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/request/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},Td=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await cr(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/help/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/help")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/help/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/help/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"help-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/help")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"help-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/help/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/help/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/help/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},_d=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)("0"),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null);(0,r.useEffect)((()=>{(async()=>{try{u(!0);const[e,t]=await Promise.all([xd(),Ed()]);i(e),o(t)}catch(e){f(e.message)}finally{u(!1)}})()}),[]);const p=()=>{var n;e("/personal",{state:{fromSubpage:!0,dashboardTab:null===(n=t.state)||void 0===n?void 0:n.dashboardTab},replace:!0})};return c?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):d?(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",d]})]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u5151\u6362\u533a"}),(0,bd.jsxs)("div",{className:"exchange-section",children:[(0,bd.jsxs)("h3",{children:["\u5f53\u524d\u9b54\u529b\u503c: ",(null===a||void 0===a?void 0:a.magicPoints)||0]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u9080\u8bf7\u7801"}),(0,bd.jsx)("p",{children:"\u6d88\u801710\u9b54\u529b\u503c\u5151\u6362\u4e00\u4e2a\u9080\u8bf7\u7801"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{try{u(!0);const e=await(async()=>{try{const e=await ir.post("/invitecode/generate");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25")}catch(d){throw console.error("\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25:",d),d}})();o([...n,e]);const t=await xd();i(t)}catch(e){f(e.message)}finally{u(!1)}},disabled:!a||a.magicPoints<10,children:"\u5151\u6362\u9080\u8bf7\u7801"})]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("p",{children:"1\u9b54\u529b\u503c = 1GB\u4e0a\u4f20\u91cf"}),(0,bd.jsxs)("div",{className:"exchange-input-group",children:[(0,bd.jsx)("input",{type:"number",value:s,onChange:e=>{const t=e.target.value;""!==t&&isNaN(t)||l(t)},min:"1",max:(null===a||void 0===a?void 0:a.magicPoints)||0,placeholder:"\u8f93\u5165\u8981\u5151\u6362\u7684\u9b54\u529b\u503c"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{const e=Number(s);if(!e||e<=0)f("\u8bf7\u8f93\u5165\u6709\u6548\u7684\u9b54\u529b\u503c");else try{u(!0),await(async e=>{try{const t=await ir.post("/user/exchangeUpload",{magicPoint:e});if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25")}catch(d){throw console.error("\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25:",d),d}})(e);const t=await xd();i(t),l("0"),f(null)}catch(t){f(t.message)}finally{u(!1)}},disabled:!s||Number(s)<=0||!a||Number(s)>a.magicPoints,children:"\u5151\u6362\u4e0a\u4f20\u91cf"})]})]}),n.length>0&&(0,bd.jsxs)("div",{className:"invite-code-list",children:[(0,bd.jsx)("h4",{children:"\u6211\u7684\u9080\u8bf7\u7801"}),(0,bd.jsx)("ul",{children:n.map(((e,t)=>(0,bd.jsxs)("li",{children:[(0,bd.jsx)("span",{className:"code",children:e.code}),(0,bd.jsx)("span",{className:"status ".concat(e.isUsed?"used":"available"),children:e.isUsed?"\u5df2\u4f7f\u7528":"\u53ef\u7528"})]},t)))})]})]})]})},Od=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)([]),[s,l]=(0,r.useState)(!0),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)({page:1,size:5,total:0}),p=async()=>{try{l(!0);const{records:e,total:t}=await async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;try{const n=await ir.get("/torrent/get/torrentMyself",{params:{page:e,size:t}});if(200===n.data.code)return{records:n.data.data.records.map((e=>_e(_e({},e.torrent),{},{downloadCount:e.downloadCount,formattedSize:e.formattedSize}))),total:n.data.data.total};throw new Error(n.data.message||"\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25")}catch(c){throw console.error("\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25:",c),c}}(d.page,d.size);i(e),f((e=>_e(_e({},e),{},{total:t})))}catch(e){u(e.message)}finally{l(!1)}},h=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))try{await(async e=>{try{const t=await ir.delete("/torrent/deleteTorrent/".concat(e));if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5220\u9664\u79cd\u5b50\u5931\u8d25")}catch(c){throw console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),c}})(e),p()}catch(t){alert("\u5220\u9664\u5931\u8d25: "+t.message)}},m=Math.ceil(d.total/d.size),v=()=>{const e=[];let t=Math.max(1,d.page-Math.floor(2.5)),n=Math.min(m,t+5-1);n-t+1<5&&(t=Math.max(1,n-5+1));for(let r=t;r<=n;r++)e.push(r);return e},g=e=>{e>=1&&e<=m&&e!==d.page&&f((t=>_e(_e({},t),{},{page:e})))};(0,r.useEffect)((()=>{p()}),[d.page]);return s?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsxs)("div",{className:"subpage-container",children:["\u9519\u8bef: ",c]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e0a\u4f20\u8bb0\u5f55"}),(0,bd.jsxs)("table",{className:"uploads-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u8d44\u6e90\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5927\u5c0f"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u6b21\u6570"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:a.map((e=>{return(0,bd.jsxs)("tr",{className:"list-item",children:[(0,bd.jsx)("td",{children:e.torrentName}),(0,bd.jsx)("td",{children:e.formattedSize}),(0,bd.jsx)("td",{children:(t=e.createTime,new Date(t).toLocaleString())}),(0,bd.jsx)("td",{children:e.downloadCount||0}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{className:"action-btn delete-btn",onClick:()=>h(e.id),children:"\u5220\u9664"})})]},e.id);var t}))})]}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(1),className:"page-nav",children:"\u9996\u9875"}),(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(d.page-1),className:"page-nav",children:"\u4e0a\u4e00\u9875"}),v().map((e=>(0,bd.jsx)("button",{onClick:()=>g(e),className:"page-number ".concat(d.page===e?"active":""),children:e},e))),m>v()[v().length-1]&&(0,bd.jsx)("span",{className:"ellipsis",children:"..."}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(d.page+1),className:"page-nav",children:"\u4e0b\u4e00\u9875"}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(m),className:"page-nav",children:"\u672b\u9875"}),(0,bd.jsxs)("div",{className:"page-info",children:[(0,bd.jsxs)("span",{children:["\u5171 ",m," \u9875"]}),(0,bd.jsx)("span",{children:"\u8df3\u81f3"}),(0,bd.jsx)("input",{type:"number",min:"1",max:m,onKeyDown:e=>{if("Enter"===e.key){const t=parseInt(e.target.value);isNaN(t)||(g(Math.max(1,Math.min(t,m))),e.target.value="")}}}),(0,bd.jsx)("span",{children:"\u9875"})]})]})]})},Md=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a]=r.useState([{id:1,title:"\u79ef\u5206\u5956\u52b1\u5230\u8d26",content:"\u60a8\u4e0a\u4f20\u7684\u8d44\u6e90\u300a\u76d7\u68a6\u7a7a\u95f4\u300b\u83b7\u5f97100\u79ef\u5206\u5956\u52b1",date:"2023-10-20",read:!1},{id:2,title:"\u7cfb\u7edf\u901a\u77e5",content:"\u670d\u52a1\u5668\u5c06\u4e8e\u4eca\u665a2:00-4:00\u8fdb\u884c\u7ef4\u62a4",date:"2023-10-18",read:!0}]);return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u6d88\u606f\u901a\u77e5"}),(0,bd.jsx)("div",{className:"notice-list",children:a.map((e=>(0,bd.jsxs)("div",{className:"list-item ".concat(e.read?"":"unread"),children:[(0,bd.jsxs)("div",{className:"notice-header",children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsx)("span",{className:"notice-date",children:e.date})]}),(0,bd.jsx)("p",{className:"notice-content",children:e.content})]},e.id)))})]})},Rd=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)({oldPassword:"",newPassword:"",confirmPassword:""});(0,r.useEffect)((()=>{(async()=>{try{const e=await xd();i(e)}catch(e){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e)}})()}),[]);const m=e=>{const{name:t,value:n}=e.target;h((e=>_e(_e({},e),{},{[t]:n})))};return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e2a\u4eba\u8bbe\u7f6e"}),(0,bd.jsxs)("div",{className:"setting-section",children:[(0,bd.jsxs)("div",{className:"user-info-card",children:[(0,bd.jsx)("h3",{children:"\u8d26\u6237\u4fe1\u606f"}),(0,bd.jsxs)("div",{className:"info-item",children:[(0,bd.jsx)("label",{children:"\u7528\u6237\u540d:"}),(0,bd.jsx)("span",{children:(null===a||void 0===a?void 0:a.username)||"\u52a0\u8f7d\u4e2d..."})]}),(0,bd.jsx)("p",{className:"info-note",children:"\u7528\u6237\u540d\u4e0d\u53ef\u66f4\u6539"})]}),(0,bd.jsxs)("div",{className:"password-form-card",children:[(0,bd.jsx)("h3",{children:"\u4fee\u6539\u5bc6\u7801"}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),u(null),f(null),p.oldPassword&&p.newPassword&&p.confirmPassword)if(p.newPassword===p.confirmPassword)if(p.newPassword.length<6)u("\u65b0\u5bc6\u7801\u957f\u5ea6\u81f3\u5c11\u4e3a6\u4f4d");else try{l(!0),await(async(e,t)=>{try{const n=await ir.put("/user/password",{oldPassword:e,newPassword:t});if(200===n.data.code)return n.data;throw new Error(n.data.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}catch(c){throw console.error("\u4fee\u6539\u5bc6\u7801\u5931\u8d25:",c),c}})(p.oldPassword,p.newPassword),f("\u5bc6\u7801\u4fee\u6539\u6210\u529f"),h({oldPassword:"",newPassword:"",confirmPassword:""})}catch(t){u(t.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}finally{l(!1)}else u("\u65b0\u5bc6\u7801\u4e0e\u786e\u8ba4\u5bc6\u7801\u4e0d\u4e00\u81f4");else u("\u8bf7\u586b\u5199\u6240\u6709\u5bc6\u7801\u5b57\u6bb5")},children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"oldPassword",children:"\u539f\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"oldPassword",name:"oldPassword",value:p.oldPassword,onChange:m,required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"newPassword",children:"\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"newPassword",name:"newPassword",value:p.newPassword,onChange:m,required:!0,minLength:"6"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"confirmPassword",children:"\u786e\u8ba4\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"confirmPassword",name:"confirmPassword",value:p.confirmPassword,onChange:m,required:!0,minLength:"6"})]}),c&&(0,bd.jsx)("div",{className:"error-message",children:c}),d&&(0,bd.jsx)("div",{className:"success-message",children:d}),(0,bd.jsx)("button",{type:"submit",className:"submit-button",disabled:s,children:s?"\u5904\u7406\u4e2d...":"\u4fee\u6539\u5bc6\u7801"})]})]})]})]})};function Ad(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=Ad(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function Ld(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=Ad(e))&&(r&&(r+=" "),r+=t);return r}Math.pow(10,8);const Id=6048e5,Fd=6e4,zd=36e5,Bd=Symbol.for("constructDateFrom");function Hd(e,t){return"function"===typeof e?e(t):e&&"object"===typeof e&&Bd in e?e[Bd](t):e instanceof Date?new e.constructor(t):new Date(t)}function Ud(e,t){return Hd(t||e,e)}function Yd(e,t){var n;const r=()=>Hd(null===t||void 0===t?void 0:t.in,NaN),o=null!==(n=null===t||void 0===t?void 0:t.additionalDigits)&&void 0!==n?n:2,a=function(e){const t={},n=e.split(Wd.dateTimeDelimiter);let r;if(n.length>2)return t;/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],Wd.timeZoneDelimiter.test(t.date)&&(t.date=e.split(Wd.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length)));if(r){const e=Wd.timezone.exec(r);e?(t.time=r.replace(e[1],""),t.timezone=e[1]):t.time=r}return t}(e);let i;if(a.date){const e=function(e,t){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),r=e.match(n);if(!r)return{year:NaN,restDateString:""};const o=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:null===a?o:100*a,restDateString:e.slice((r[1]||r[2]).length)}}(a.date,o);i=function(e,t){if(null===t)return new Date(NaN);const n=e.match(qd);if(!n)return new Date(NaN);const r=!!n[4],o=Kd(n[1]),a=Kd(n[2])-1,i=Kd(n[3]),s=Kd(n[4]),l=Kd(n[5])-1;if(r)return function(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}(0,s,l)?function(e,t,n){const r=new Date(0);r.setUTCFullYear(e,0,4);const o=r.getUTCDay()||7,a=7*(t-1)+n+1-o;return r.setUTCDate(r.getUTCDate()+a),r}(t,s,l):new Date(NaN);{const e=new Date(0);return function(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(Gd[t]||(Xd(e)?29:28))}(t,a,i)&&function(e,t){return t>=1&&t<=(Xd(e)?366:365)}(t,o)?(e.setUTCFullYear(t,a,Math.max(o,i)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!i||isNaN(+i))return r();const s=+i;let l,c=0;if(a.time&&(c=function(e){const t=e.match(Vd);if(!t)return NaN;const n=$d(t[1]),r=$d(t[2]),o=$d(t[3]);if(!function(e,t,n){if(24===e)return 0===t&&0===n;return n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}(n,r,o))return NaN;return n*zd+r*Fd+1e3*o}(a.time),isNaN(c)))return r();if(!a.timezone){const e=new Date(s+c),n=Ud(0,null===t||void 0===t?void 0:t.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return l=function(e){if("Z"===e)return 0;const t=e.match(Qd);if(!t)return 0;const n="+"===t[1]?-1:1,r=parseInt(t[2]),o=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,o))return NaN;return n*(r*zd+o*Fd)}(a.timezone),isNaN(l)?r():Ud(s+c+l,null===t||void 0===t?void 0:t.in)}const Wd={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},qd=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Vd=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Qd=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Kd(e){return e?parseInt(e):1}function $d(e){return e&&parseFloat(e.replace(",","."))||0}const Gd=[31,null,31,30,31,30,31,31,30,31,30,31];function Xd(e){return e%400===0||e%4===0&&e%100!==0}const Jd={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function Zd(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const ef={date:Zd({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:Zd({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:Zd({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},tf={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function nf(e){return(t,n)=>{let r;if("formatting"===(null!==n&&void 0!==n&&n.context?String(n.context):"standalone")&&e.formattingValues){const t=e.defaultFormattingWidth||e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):t;r=e.formattingValues[o]||e.formattingValues[t]}else{const t=e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):e.defaultWidth;r=e.values[o]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}const rf={ordinalNumber:(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:nf({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:nf({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:nf({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:nf({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:nf({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})};function of(e){return function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],a=t.match(o);if(!a)return null;const i=a[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?function(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n;return}(s,(e=>e.test(i))):function(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n;return}(s,(e=>e.test(i)));let c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;return{value:c,rest:t.slice(i.length)}}}const af={ordinalNumber:(sf={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.match(sf.matchPattern);if(!n)return null;const r=n[0],o=e.match(sf.parsePattern);if(!o)return null;let a=sf.valueCallback?sf.valueCallback(o[0]):o[0];return a=t.valueCallback?t.valueCallback(a):a,{value:a,rest:e.slice(r.length)}}),era:of({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:of({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:of({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:of({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:of({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})};var sf;const lf={code:"en-US",formatDistance:(e,t,n)=>{let r;const o=Jd[e];return r="string"===typeof o?o:1===t?o.one:o.other.replace("{{count}}",t.toString()),null!==n&&void 0!==n&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r},formatLong:ef,formatRelative:(e,t,n,r)=>tf[e],localize:rf,match:af,options:{weekStartsOn:0,firstWeekContainsDate:1}},cf=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},uf=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},df={p:uf,P:(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return cf(e,t);let a;switch(r){case"P":a=t.dateTime({width:"short"});break;case"PP":a=t.dateTime({width:"medium"});break;case"PPP":a=t.dateTime({width:"long"});break;default:a=t.dateTime({width:"full"})}return a.replace("{{date}}",cf(r,t)).replace("{{time}}",uf(o,t))}},ff=/^D+$/,pf=/^Y+$/,hf=["D","DD","YY","YYYY"];function mf(e){return ff.test(e)}function vf(e){return pf.test(e)}function gf(e,t,n){const r=function(e,t,n){const r="Y"===e[0]?"years":"days of the month";return"Use `".concat(e.toLowerCase(),"` instead of `").concat(e,"` (in `").concat(t,"`) for formatting ").concat(r," to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")}(e,t,n);if(console.warn(r),hf.includes(e))throw new RangeError(r)}let yf={};function bf(){return yf}function wf(){return Object.assign({},bf())}function xf(e,t){const n=function(e){var t;return"function"===typeof e&&(null===(t=e.prototype)||void 0===t?void 0:t.constructor)===e}(t)?new t(0):Hd(t,0);return n.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),n.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),n}class kf{constructor(){Pe(this,"subPriority",0)}validate(e,t){return!0}}class Sf extends kf{constructor(e,t,n,r,o){super(),this.value=e,this.validateValue=t,this.setValue=n,this.priority=r,o&&(this.subPriority=o)}validate(e,t){return this.validateValue(e,this.value,t)}set(e,t,n){return this.setValue(e,t,this.value,n)}}class Ef extends kf{constructor(e,t){super(),Pe(this,"priority",10),Pe(this,"subPriority",-1),this.context=e||(e=>Hd(t,e))}set(e,t){return t.timestampIsSet?e:Hd(e,xf(e,this.context))}}class Cf{run(e,t,n,r){const o=this.parse(e,t,n,r);return o?{setter:new Sf(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(e,t,n){return!0}}const Nf=/^(1[0-2]|0?\d)/,jf=/^(3[0-1]|[0-2]?\d)/,Df=/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,Pf=/^(5[0-3]|[0-4]?\d)/,Tf=/^(2[0-3]|[0-1]?\d)/,_f=/^(2[0-4]|[0-1]?\d)/,Of=/^(1[0-1]|0?\d)/,Mf=/^(1[0-2]|0?\d)/,Rf=/^[0-5]?\d/,Af=/^[0-5]?\d/,Lf=/^\d/,If=/^\d{1,2}/,Ff=/^\d{1,3}/,zf=/^\d{1,4}/,Bf=/^-?\d+/,Hf=/^-?\d/,Uf=/^-?\d{1,2}/,Yf=/^-?\d{1,3}/,Wf=/^-?\d{1,4}/,qf=/^([+-])(\d{2})(\d{2})?|Z/,Vf=/^([+-])(\d{2})(\d{2})|Z/,Qf=/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,Kf=/^([+-])(\d{2}):(\d{2})|Z/,$f=/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/;function Gf(e,t){return e?{value:t(e.value),rest:e.rest}:e}function Xf(e,t){const n=t.match(e);return n?{value:parseInt(n[0],10),rest:t.slice(n[0].length)}:null}function Jf(e,t){const n=t.match(e);if(!n)return null;if("Z"===n[0])return{value:0,rest:t.slice(1)};const r="+"===n[1]?1:-1,o=n[2]?parseInt(n[2],10):0,a=n[3]?parseInt(n[3],10):0,i=n[5]?parseInt(n[5],10):0;return{value:r*(o*zd+a*Fd+1e3*i),rest:t.slice(n[0].length)}}function Zf(e){return Xf(Bf,e)}function ep(e,t){switch(e){case 1:return Xf(Lf,t);case 2:return Xf(If,t);case 3:return Xf(Ff,t);case 4:return Xf(zf,t);default:return Xf(new RegExp("^\\d{1,"+e+"}"),t)}}function tp(e,t){switch(e){case 1:return Xf(Hf,t);case 2:return Xf(Uf,t);case 3:return Xf(Yf,t);case 4:return Xf(Wf,t);default:return Xf(new RegExp("^-?\\d{1,"+e+"}"),t)}}function np(e){switch(e){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;default:return 0}}function rp(e,t){const n=t>0,r=n?t:1-t;let o;if(r<=50)o=e||100;else{const t=r+50;o=e+100*Math.trunc(t/100)-(e>=t%100?100:0)}return n?o:1-o}function op(e){return e%400===0||e%4===0&&e%100!==0}function ap(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=(d<c?7:0)+d-c;return u.setDate(u.getDate()-f),u.setHours(0,0,0,0),u}function ip(e,t){var n,r,o,a,i,s;const l=Ud(e,null===t||void 0===t?void 0:t.in),c=l.getFullYear(),u=bf(),d=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:u.firstWeekContainsDate)&&void 0!==r?r:null===(s=u.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,f=Hd((null===t||void 0===t?void 0:t.in)||e,0);f.setFullYear(c+1,0,d),f.setHours(0,0,0,0);const p=ap(f,t),h=Hd((null===t||void 0===t?void 0:t.in)||e,0);h.setFullYear(c,0,d),h.setHours(0,0,0,0);const m=ap(h,t);return+l>=+p?c+1:+l>=+m?c:c-1}function sp(e,t){return ap(e,_e(_e({},t),{},{weekStartsOn:1}))}function lp(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:l.firstWeekContainsDate)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,u=ip(e,t),d=Hd((null===t||void 0===t?void 0:t.in)||e,0);d.setFullYear(u,0,c),d.setHours(0,0,0,0);return ap(d,t)}function cp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+ap(n,t)-+lp(n,t);return Math.round(r/Id)+1}function up(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=cp(r,n)-t;return r.setDate(r.getDate()-7*o),Ud(r,null===n||void 0===n?void 0:n.in)}function dp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=Hd(n,0);o.setFullYear(r+1,0,4),o.setHours(0,0,0,0);const a=sp(o),i=Hd(n,0);i.setFullYear(r,0,4),i.setHours(0,0,0,0);const s=sp(i);return n.getTime()>=a.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function fp(e,t){const n=dp(e,t),r=Hd((null===t||void 0===t?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}function pp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+sp(n)-+fp(n);return Math.round(r/Id)+1}function hp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=pp(r,n)-t;return r.setDate(r.getDate()-7*o),r}const mp=[31,28,31,30,31,30,31,31,30,31,30,31],vp=[31,29,31,30,31,30,31,31,30,31,30,31];function gp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(t)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):t?(r.setDate(r.getDate()+t),r):r}function yp(e,t,n){var r,o,a,i,s,l;const c=bf(),u=null!==(r=null!==(o=null!==(a=null!==(i=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==i?i:null===n||void 0===n||null===(s=n.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==a?a:c.weekStartsOn)&&void 0!==o?o:null===(l=c.locale)||void 0===l||null===(l=l.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==r?r:0,d=Ud(e,null===n||void 0===n?void 0:n.in),f=d.getDay(),p=7-u;return gp(d,t<0||t>6?t-(f+p)%7:((t%7+7)%7+p)%7-(f+p)%7,n)}function bp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in).getDay();return 0===n?7:n}function wp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return gp(r,t-bp(r,n),n)}function xp(e){const t=Ud(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}const kp={G:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",140),Pe(this,"incompatibleTokens",["R","u","t","T"])}parse(e,t,n){switch(t){case"G":case"GG":case"GGG":return n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"});case"GGGGG":return n.era(e,{width:"narrow"});default:return n.era(e,{width:"wide"})||n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"})}}set(e,t,n){return t.era=n,e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"yy"===t});switch(t){case"y":return Gf(ep(4,e),r);case"yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n){const r=e.getFullYear();if(n.isTwoDigitYear){const t=rp(n.year,r);return e.setFullYear(t,0,1),e.setHours(0,0,0,0),e}const o="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(o,0,1),e.setHours(0,0,0,0),e}},Y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"YY"===t});switch(t){case"Y":return Gf(ep(4,e),r);case"Yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n,r){const o=ip(e,r);if(n.isTwoDigitYear){const t=rp(n.year,o);return e.setFullYear(t,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}const a="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(a,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}},R:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(e,t){return tp("R"===t?4:t.length,e)}set(e,t,n){const r=Hd(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}},u:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(e,t){return tp("u"===t?4:t.length,e)}set(e,t,n){return e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},Q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"Q":case"QQ":return ep(t.length,e);case"Qo":return n.ordinalNumber(e,{unit:"quarter"});case"QQQ":return n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"});case"QQQQQ":return n.quarter(e,{width:"narrow",context:"formatting"});default:return n.quarter(e,{width:"wide",context:"formatting"})||n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"q":case"qq":return ep(t.length,e);case"qo":return n.ordinalNumber(e,{unit:"quarter"});case"qqq":return n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"});case"qqqqq":return n.quarter(e,{width:"narrow",context:"standalone"});default:return n.quarter(e,{width:"wide",context:"standalone"})||n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},M:new class extends Cf{constructor(){super(...arguments),Pe(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]),Pe(this,"priority",110)}parse(e,t,n){const r=e=>e-1;switch(t){case"M":return Gf(Xf(Nf,e),r);case"MM":return Gf(ep(2,e),r);case"Mo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"MMM":return n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"});case"MMMMM":return n.month(e,{width:"narrow",context:"formatting"});default:return n.month(e,{width:"wide",context:"formatting"})||n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},L:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",110),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(e,t,n){const r=e=>e-1;switch(t){case"L":return Gf(Xf(Nf,e),r);case"LL":return Gf(ep(2,e),r);case"Lo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"LLL":return n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"});case"LLLLL":return n.month(e,{width:"narrow",context:"standalone"});default:return n.month(e,{width:"wide",context:"standalone"})||n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},w:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(e,t,n){switch(t){case"w":return Xf(Pf,e);case"wo":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n,r){return ap(up(e,n,r),r)}},I:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(e,t,n){switch(t){case"I":return Xf(Pf,e);case"Io":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n){return sp(hp(e,n))}},d:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subPriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"d":return Xf(jf,e);case"do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){const n=op(e.getFullYear()),r=e.getMonth();return n?t>=1&&t<=vp[r]:t>=1&&t<=mp[r]}set(e,t,n){return e.setDate(n),e.setHours(0,0,0,0),e}},D:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subpriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(e,t,n){switch(t){case"D":case"DD":return Xf(Df,e);case"Do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){return op(e.getFullYear())?t>=1&&t<=366:t>=1&&t<=365}set(e,t,n){return e.setMonth(0,n),e.setHours(0,0,0,0),e}},E:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"E":case"EE":case"EEE":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"EEEEE":return n.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},e:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"e":case"ee":return Gf(ep(t.length,e),o);case"eo":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"eee":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"eeeee":return n.day(e,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},c:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"c":case"cc":return Gf(ep(t.length,e),o);case"co":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"ccc":return n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});case"ccccc":return n.day(e,{width:"narrow",context:"standalone"});case"cccccc":return n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});default:return n.day(e,{width:"wide",context:"standalone"})||n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},i:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(e,t,n){const r=e=>0===e?7:e;switch(t){case"i":case"ii":return ep(t.length,e);case"io":return n.ordinalNumber(e,{unit:"day"});case"iii":return Gf(n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiii":return Gf(n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiiii":return Gf(n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);default:return Gf(n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r)}}validate(e,t){return t>=1&&t<=7}set(e,t,n){return(e=wp(e,n)).setHours(0,0,0,0),e}},a:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(e,t,n){switch(t){case"a":case"aa":case"aaa":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"aaaaa":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},b:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(e,t,n){switch(t){case"b":case"bb":case"bbb":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"bbbbb":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},B:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","b","t","T"])}parse(e,t,n){switch(t){case"B":case"BB":case"BBB":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"BBBBB":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},h:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["H","K","k","t","T"])}parse(e,t,n){switch(t){case"h":return Xf(Mf,e);case"ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=12}set(e,t,n){const r=e.getHours()>=12;return r&&n<12?e.setHours(n+12,0,0,0):r||12!==n?e.setHours(n,0,0,0):e.setHours(0,0,0,0),e}},H:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(e,t,n){switch(t){case"H":return Xf(Tf,e);case"Ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=23}set(e,t,n){return e.setHours(n,0,0,0),e}},K:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["h","H","k","t","T"])}parse(e,t,n){switch(t){case"K":return Xf(Of,e);case"Ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.getHours()>=12&&n<12?e.setHours(n+12,0,0,0):e.setHours(n,0,0,0),e}},k:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(e,t,n){switch(t){case"k":return Xf(_f,e);case"ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=24}set(e,t,n){const r=n<=24?n%24:n;return e.setHours(r,0,0,0),e}},m:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",60),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"m":return Xf(Rf,e);case"mo":return n.ordinalNumber(e,{unit:"minute"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setMinutes(n,0,0),e}},s:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",50),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"s":return Xf(Af,e);case"so":return n.ordinalNumber(e,{unit:"second"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setSeconds(n,0),e}},S:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",30),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t){return Gf(ep(t.length,e),(e=>Math.trunc(e*Math.pow(10,3-t.length))))}set(e,t,n){return e.setMilliseconds(n),e}},X:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","x"])}parse(e,t){switch(t){case"X":return Jf(qf,e);case"XX":return Jf(Vf,e);case"XXXX":return Jf(Qf,e);case"XXXXX":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},x:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","X"])}parse(e,t){switch(t){case"x":return Jf(qf,e);case"xx":return Jf(Vf,e);case"xxxx":return Jf(Qf,e);case"xxxxx":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},t:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",40),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,1e3*n),{timestampIsSet:!0}]}},T:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",20),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,n),{timestampIsSet:!0}]}}},Sp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ep=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Cp=/^'([^]*?)'?$/,Np=/''/g,jp=/\S/,Dp=/[a-zA-Z]/;function Pp(e,t,n,r){var o,a,i,s,l,c,u,d,f,p,h,m,v,g;const y=()=>Hd((null===r||void 0===r?void 0:r.in)||n,NaN),b=wf(),w=null!==(o=null!==(a=null===r||void 0===r?void 0:r.locale)&&void 0!==a?a:b.locale)&&void 0!==o?o:lf,x=null!==(i=null!==(s=null!==(l=null!==(c=null===r||void 0===r?void 0:r.firstWeekContainsDate)&&void 0!==c?c:null===r||void 0===r||null===(u=r.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==l?l:b.firstWeekContainsDate)&&void 0!==s?s:null===(d=b.locale)||void 0===d||null===(d=d.options)||void 0===d?void 0:d.firstWeekContainsDate)&&void 0!==i?i:1,k=null!==(f=null!==(p=null!==(h=null!==(m=null===r||void 0===r?void 0:r.weekStartsOn)&&void 0!==m?m:null===r||void 0===r||null===(v=r.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==h?h:b.weekStartsOn)&&void 0!==p?p:null===(g=b.locale)||void 0===g||null===(g=g.options)||void 0===g?void 0:g.weekStartsOn)&&void 0!==f?f:0;if(!t)return e?y():Ud(n,null===r||void 0===r?void 0:r.in);const S={firstWeekContainsDate:x,weekStartsOn:k,locale:w},E=[new Ef(null===r||void 0===r?void 0:r.in,n)],C=t.match(Ep).map((e=>{const t=e[0];if(t in df){return(0,df[t])(e,w.formatLong)}return e})).join("").match(Sp),N=[];for(let T of C){null!==r&&void 0!==r&&r.useAdditionalWeekYearTokens||!vf(T)||gf(T,t,e),null!==r&&void 0!==r&&r.useAdditionalDayOfYearTokens||!mf(T)||gf(T,t,e);const n=T[0],o=kp[n];if(o){const{incompatibleTokens:t}=o;if(Array.isArray(t)){const e=N.find((e=>t.includes(e.token)||e.token===n));if(e)throw new RangeError("The format string mustn't contain `".concat(e.fullToken,"` and `").concat(T,"` at the same time"))}else if("*"===o.incompatibleTokens&&N.length>0)throw new RangeError("The format string mustn't contain `".concat(T,"` and any other token at the same time"));N.push({token:n,fullToken:T});const r=o.run(e,T,w.match,S);if(!r)return y();E.push(r.setter),e=r.rest}else{if(n.match(Dp))throw new RangeError("Format string contains an unescaped latin alphabet character `"+n+"`");if("''"===T?T="'":"'"===n&&(T=T.match(Cp)[1].replace(Np,"'")),0!==e.indexOf(T))return y();e=e.slice(T.length)}}if(e.length>0&&jp.test(e))return y();const j=E.map((e=>e.priority)).sort(((e,t)=>t-e)).filter(((e,t,n)=>n.indexOf(e)===t)).map((e=>E.filter((t=>t.priority===e)).sort(((e,t)=>t.subPriority-e.subPriority)))).map((e=>e[0]));let D=Ud(n,null===r||void 0===r?void 0:r.in);if(isNaN(+D))return y();const P={};for(const T of j){if(!T.validate(D,S))return y();const e=T.set(D,P,S);Array.isArray(e)?(D=e[0],Object.assign(P,e[1])):D=e}return D}function Tp(e){return e instanceof Date||"object"===typeof e&&"[object Date]"===Object.prototype.toString.call(e)}function _p(e){return!(!Tp(e)&&"number"!==typeof e||isNaN(+Ud(e)))}function Op(e,t){return+Ud(e)<+Ud(t)}function Mp(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=Hd.bind(null,e||n.find((e=>"object"===typeof e)));return n.map(o)}function Rp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(0,0,0,0),n}function Ap(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=Rp(r),i=Rp(o),s=+a-xp(a),l=+i-xp(i);return Math.round((s-l)/864e5)}function Lp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Ip(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Ap(n,Lp(n))+1}function Fp(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const zp={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return Fp("yy"===t?r%100:r,t.length)},M(e,t){const n=e.getMonth();return"M"===t?String(n+1):Fp(n+1,2)},d:(e,t)=>Fp(e.getDate(),t.length),a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>Fp(e.getHours()%12||12,t.length),H:(e,t)=>Fp(e.getHours(),t.length),m:(e,t)=>Fp(e.getMinutes(),t.length),s:(e,t)=>Fp(e.getSeconds(),t.length),S(e,t){const n=t.length,r=e.getMilliseconds();return Fp(Math.trunc(r*Math.pow(10,n-3)),t.length)}},Bp="midnight",Hp="noon",Up="morning",Yp="afternoon",Wp="evening",qp="night",Vp={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){const t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return zp.y(e,t)},Y:function(e,t,n,r){const o=ip(e,r),a=o>0?o:1-o;if("YY"===t){return Fp(a%100,2)}return"Yo"===t?n.ordinalNumber(a,{unit:"year"}):Fp(a,t.length)},R:function(e,t){return Fp(dp(e),t.length)},u:function(e,t){return Fp(e.getFullYear(),t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return Fp(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return Fp(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return zp.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return Fp(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const o=cp(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):Fp(o,t.length)},I:function(e,t,n){const r=pp(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):Fp(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):zp.d(e,t)},D:function(e,t,n){const r=Ip(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):Fp(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return Fp(a,2);case"eo":return n.ordinalNumber(a,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return Fp(a,t.length);case"co":return n.ordinalNumber(a,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return Fp(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let o;switch(o=12===r?Hp:0===r?Bp:r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let o;switch(o=r>=17?Wp:r>=12?Yp:r>=4?Up:qp,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return zp.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):zp.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},k:function(e,t,n){let r=e.getHours();return 0===r&&(r=24),"ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):zp.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):zp.s(e,t)},S:function(e,t){return zp.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return Kp(r);case"XXXX":case"XX":return $p(r);default:return $p(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return Kp(r);case"xxxx":case"xx":return $p(r);default:return $p(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},t:function(e,t,n){return Fp(Math.trunc(+e/1e3),t.length)},T:function(e,t,n){return Fp(+e,t.length)}};function Qp(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),a=r%60;return 0===a?n+String(o):n+String(o)+t+Fp(a,2)}function Kp(e,t){if(e%60===0){return(e>0?"-":"+")+Fp(Math.abs(e)/60,2)}return $p(e,t)}function $p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e);return n+Fp(Math.trunc(r/60),2)+t+Fp(r%60,2)}const Gp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Xp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Jp=/^'([^]*?)'?$/,Zp=/''/g,eh=/[a-zA-Z]/;function th(e,t,n){var r,o,a,i,s,l,c,u,d,f,p,h,m,v;const g=bf(),y=null!==(r=null!==(o=null===n||void 0===n?void 0:n.locale)&&void 0!==o?o:g.locale)&&void 0!==r?r:lf,b=null!==(a=null!==(i=null!==(s=null!==(l=null===n||void 0===n?void 0:n.firstWeekContainsDate)&&void 0!==l?l:null===n||void 0===n||null===(c=n.locale)||void 0===c||null===(c=c.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==s?s:g.firstWeekContainsDate)&&void 0!==i?i:null===(u=g.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==a?a:1,w=null!==(d=null!==(f=null!==(p=null!==(h=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==h?h:null===n||void 0===n||null===(m=n.locale)||void 0===m||null===(m=m.options)||void 0===m?void 0:m.weekStartsOn)&&void 0!==p?p:g.weekStartsOn)&&void 0!==f?f:null===(v=g.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==d?d:0,x=Ud(e,null===n||void 0===n?void 0:n.in);if(!_p(x))throw new RangeError("Invalid time value");let k=t.match(Xp).map((e=>{const t=e[0];if("p"===t||"P"===t){return(0,df[t])(e,y.formatLong)}return e})).join("").match(Gp).map((e=>{if("''"===e)return{isToken:!1,value:"'"};const t=e[0];if("'"===t)return{isToken:!1,value:nh(e)};if(Vp[t])return{isToken:!0,value:e};if(t.match(eh))throw new RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}}));y.localize.preprocessor&&(k=y.localize.preprocessor(x,k));const S={firstWeekContainsDate:b,weekStartsOn:w,locale:y};return k.map((r=>{if(!r.isToken)return r.value;const o=r.value;(null!==n&&void 0!==n&&n.useAdditionalWeekYearTokens||!vf(o))&&(null!==n&&void 0!==n&&n.useAdditionalDayOfYearTokens||!mf(o))||gf(o,t,String(e));return(0,Vp[o[0]])(x,o,y.localize,S)})).join("")}function nh(e){const t=e.match(Jp);return t?t[1].replace(Zp,"'"):e}function rh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setHours(t),r}function oh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setMinutes(t),r}function ah(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setSeconds(t),r}function ih(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setDate(1),n.setHours(0,0,0,0),n}function sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth(),o=r-r%3;return n.setMonth(o,1),n.setHours(0,0,0,0),n}function lh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(23,59,59,999),n}function ch(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=6+(d<c?-7:0)-(d-c);return u.setDate(u.getDate()+f),u.setHours(23,59,59,999),u}function uh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function dh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()}function fh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()&&r.getMonth()===o.getMonth()}function ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+sh(r)===+sh(o)}function hh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+Rp(r)===+Rp(o)}function mh(e,t){return+Ud(e)===+Ud(t)}function vh(e,t,n){const r=+Ud(e,null===n||void 0===n?void 0:n.in),[o,a]=[+Ud(t.start,null===n||void 0===n?void 0:n.in),+Ud(t.end,null===n||void 0===n?void 0:n.in)].sort(((e,t)=>e-t));return r>=o&&r<=a}function gh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=n.getMonth(),a=Hd(n,0);return a.setFullYear(r,o+1,0),a.setHours(0,0,0,0),a.getDate()}function yh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=r.getFullYear(),a=r.getDate(),i=Hd((null===n||void 0===n?void 0:n.in)||e,0);i.setFullYear(o,t,15),i.setHours(0,0,0,0);const s=gh(i);return r.setMonth(t,Math.min(a,s)),r}function bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=t-(Math.trunc(r.getMonth()/3)+1);return yh(r,r.getMonth()+3*o)}function wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getFullYear()}function xh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMonth()}function kh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Math.trunc(n.getMonth()/3)+1}function Eh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getHours()}function Ch(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMinutes()}function Nh(e){return Ud(e).getSeconds()}function jh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);if(isNaN(t))return Hd((null===n||void 0===n?void 0:n.in)||e,NaN);if(!t)return r;const o=r.getDate(),a=Hd((null===n||void 0===n?void 0:n.in)||e,r.getTime());a.setMonth(r.getMonth()+t+1,0);return o>=a.getDate()?a:(r.setFullYear(a.getFullYear(),a.getMonth(),o),r)}function Dh(e,t,n){return jh(e,-t,n)}function Ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 12*(r.getFullYear()-o.getFullYear())+(r.getMonth()-o.getMonth())}function Th(e,t,n){return jh(e,3*t,n)}function _h(e,t,n){return Th(e,-t,n)}function Oh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 4*(r.getFullYear()-o.getFullYear())+(Sh(r)-Sh(o))}function Mh(e,t,n){return jh(e,12*t,n)}function Rh(e,t,n){return Mh(e,-t,n)}function Ah(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()-o.getFullYear()}function Lh(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n>t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Ih(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n<t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Fh(e,t,n){return Hd((null===n||void 0===n?void 0:n.in)||e,+Ud(e)+t)}function zh(e,t,n){return Fh(e,t*zd,n)}function Bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setTime(r.getTime()+t*Fd),r}function Hh(e,t,n){return Fh(e,1e3*t,n)}function Uh(e,t){return+Ud(e)>+Ud(t)}function Yh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDay()}function Wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDate()}function qh(e,t,n){return gp(e,7*t,n)}function Vh(e){return+Ud(e)}function Qh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(+r)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):(r.setFullYear(t),r)}function Kh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=$h(r,o),i=Math.abs(Ap(r,o));r.setDate(r.getDate()-a*i);const s=a*(i-Number($h(r,o)===-a));return 0===s?0:s}function $h(e,t){const n=e.getFullYear()-t.getFullYear()||e.getMonth()-t.getMonth()||e.getDate()-t.getDate()||e.getHours()-t.getHours()||e.getMinutes()-t.getMinutes()||e.getSeconds()-t.getSeconds()||e.getMilliseconds()-t.getMilliseconds();return n<0?-1:n>0?1:n}function Gh(e,t,n){return qh(e,-t,n)}function Xh(e,t,n){return gp(e,-t,n)}var Jh="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;const Zh=_e({},o).useInsertionEffect||(e=>e());function em(){return"undefined"!==typeof window}function tm(e){return om(e)?(e.nodeName||"").toLowerCase():"#document"}function nm(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function rm(e){var t;return null==(t=(om(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function om(e){return!!em()&&(e instanceof Node||e instanceof nm(e).Node)}function am(e){return!!em()&&(e instanceof Element||e instanceof nm(e).Element)}function im(e){return!!em()&&(e instanceof HTMLElement||e instanceof nm(e).HTMLElement)}function sm(e){return!(!em()||"undefined"===typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof nm(e).ShadowRoot)}function lm(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=hm(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function cm(e){return["table","td","th"].includes(tm(e))}function um(e){return[":popover-open",":modal"].some((t=>{try{return e.matches(t)}catch(Dy){return!1}}))}function dm(e){const t=fm(),n=am(e)?hm(e):e;return["transform","translate","scale","rotate","perspective"].some((e=>!!n[e]&&"none"!==n[e]))||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","translate","scale","rotate","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function fm(){return!("undefined"===typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function pm(e){return["html","body","#document"].includes(tm(e))}function hm(e){return nm(e).getComputedStyle(e)}function mm(e){return am(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function vm(e){if("html"===tm(e))return e;const t=e.assignedSlot||e.parentNode||sm(e)&&e.host||rm(e);return sm(t)?t.host:t}function gm(e){const t=vm(e);return pm(t)?e.ownerDocument?e.ownerDocument.body:e.body:im(t)&&lm(t)?t:gm(t)}function ym(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=gm(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=nm(o);if(a){const e=bm(i);return t.concat(i,i.visualViewport||[],lm(o)?o:[],e&&n?ym(e):[])}return t.concat(o,ym(o,[],n))}function bm(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const wm=Math.min,xm=Math.max,km=Math.round,Sm=Math.floor,Em=e=>({x:e,y:e}),Cm={left:"right",right:"left",bottom:"top",top:"bottom"},Nm={start:"end",end:"start"};function jm(e,t){return"function"===typeof e?e(t):e}function Dm(e){return e.split("-")[0]}function Pm(e){return e.split("-")[1]}function Tm(e){return"y"===e?"height":"width"}function _m(e){return["top","bottom"].includes(Dm(e))?"y":"x"}function Om(e){return"x"===_m(e)?"y":"x"}function Mm(e){return e.replace(/start|end/g,(e=>Nm[e]))}function Rm(e){return e.replace(/left|right|bottom|top/g,(e=>Cm[e]))}function Am(e){return"number"!==typeof e?function(e){return _e({top:0,right:0,bottom:0,left:0},e)}(e):{top:e,right:e,bottom:e,left:e}}function Lm(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}const Im=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"];function Fm(e,t,n){let{reference:r,floating:o}=e;const a=_m(t),i=Om(t),s=Tm(i),l=Dm(t),c="y"===a,u=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,f=r[s]/2-o[s]/2;let p;switch(l){case"top":p={x:u,y:r.y-o.height};break;case"bottom":p={x:u,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-o.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Pm(t)){case"start":p[i]-=f*(n&&c?-1:1);break;case"end":p[i]+=f*(n&&c?-1:1)}return p}async function zm(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:a,rects:i,elements:s,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:f=!1,padding:p=0}=jm(t,e),h=Am(p),m=s[f?"floating"===d?"reference":"floating":d],v=Lm(await a.getClippingRect({element:null==(n=await(null==a.isElement?void 0:a.isElement(m)))||n?m:m.contextElement||await(null==a.getDocumentElement?void 0:a.getDocumentElement(s.floating)),boundary:c,rootBoundary:u,strategy:l})),g="floating"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,y=await(null==a.getOffsetParent?void 0:a.getOffsetParent(s.floating)),b=await(null==a.isElement?void 0:a.isElement(y))&&await(null==a.getScale?void 0:a.getScale(y))||{x:1,y:1},w=Lm(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:g,offsetParent:y,strategy:l}):g);return{top:(v.top-w.top+h.top)/b.y,bottom:(w.bottom-v.bottom+h.bottom)/b.y,left:(v.left-w.left+h.left)/b.x,right:(w.right-v.right+h.right)/b.x}}function Bm(e){const t=hm(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=im(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,s=km(n)!==a||km(r)!==i;return s&&(n=a,r=i),{width:n,height:r,$:s}}function Hm(e){return am(e)?e:e.contextElement}function Um(e){const t=Hm(e);if(!im(t))return Em(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:a}=Bm(t);let i=(a?km(n.width):n.width)/r,s=(a?km(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),s&&Number.isFinite(s)||(s=1),{x:i,y:s}}const Ym=Em(0);function Wm(e){const t=nm(e);return fm()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Ym}function qm(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),a=Hm(e);let i=Em(1);t&&(r?am(r)&&(i=Um(r)):i=Um(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==nm(e))&&t}(a,n,r)?Wm(a):Em(0);let l=(o.left+s.x)/i.x,c=(o.top+s.y)/i.y,u=o.width/i.x,d=o.height/i.y;if(a){const e=nm(a),t=r&&am(r)?nm(r):r;let n=e,o=bm(n);for(;o&&r&&t!==n;){const e=Um(o),t=o.getBoundingClientRect(),r=hm(o),a=t.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,c*=e.y,u*=e.x,d*=e.y,l+=a,c+=i,n=nm(o),o=bm(n)}}return Lm({width:u,height:d,x:l,y:c})}function Vm(e,t){const n=mm(e).scrollLeft;return t?t.left+n:qm(rm(e)).left+n}function Qm(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:Vm(e,r)),y:r.top+t.scrollTop}}function Km(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=nm(e),r=rm(e),o=n.visualViewport;let a=r.clientWidth,i=r.clientHeight,s=0,l=0;if(o){a=o.width,i=o.height;const e=fm();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:a,height:i,x:s,y:l}}(e,n);else if("document"===t)r=function(e){const t=rm(e),n=mm(e),r=e.ownerDocument.body,o=xm(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=xm(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+Vm(e);const s=-n.scrollTop;return"rtl"===hm(r).direction&&(i+=xm(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:s}}(rm(e));else if(am(t))r=function(e,t){const n=qm(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=im(e)?Um(e):Em(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{const n=Wm(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Lm(r)}function $m(e,t){const n=vm(e);return!(n===t||!am(n)||pm(n))&&("fixed"===hm(n).position||$m(n,t))}function Gm(e,t,n){const r=im(t),o=rm(t),a="fixed"===n,i=qm(e,!0,a,t);let s={scrollLeft:0,scrollTop:0};const l=Em(0);function c(){l.x=Vm(o)}if(r||!r&&!a)if(("body"!==tm(t)||lm(o))&&(s=mm(t)),r){const e=qm(t,!0,a,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else o&&c();a&&!r&&o&&c();const u=!o||r||a?Em(0):Qm(o,s);return{x:i.left+s.scrollLeft-l.x-u.x,y:i.top+s.scrollTop-l.y-u.y,width:i.width,height:i.height}}function Xm(e){return"static"===hm(e).position}function Jm(e,t){if(!im(e)||"fixed"===hm(e).position)return null;if(t)return t(e);let n=e.offsetParent;return rm(e)===n&&(n=n.ownerDocument.body),n}function Zm(e,t){const n=nm(e);if(um(e))return n;if(!im(e)){let t=vm(e);for(;t&&!pm(t);){if(am(t)&&!Xm(t))return t;t=vm(t)}return n}let r=Jm(e,t);for(;r&&cm(r)&&Xm(r);)r=Jm(r,t);return r&&pm(r)&&Xm(r)&&!dm(r)?n:r||function(e){let t=vm(e);for(;im(t)&&!pm(t);){if(dm(t))return t;if(um(t))return null;t=vm(t)}return null}(e)||n}const ev={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const a="fixed"===o,i=rm(r),s=!!t&&um(t.floating);if(r===i||s&&a)return n;let l={scrollLeft:0,scrollTop:0},c=Em(1);const u=Em(0),d=im(r);if((d||!d&&!a)&&(("body"!==tm(r)||lm(i))&&(l=mm(r)),im(r))){const e=qm(r);c=Um(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const f=!i||d||a?Em(0):Qm(i,l,!0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+u.x+f.x,y:n.y*c.y-l.scrollTop*c.y+u.y+f.y}},getDocumentElement:rm,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const a="clippingAncestors"===n?um(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=ym(e,[],!1).filter((e=>am(e)&&"body"!==tm(e))),o=null;const a="fixed"===hm(e).position;let i=a?vm(e):e;for(;am(i)&&!pm(i);){const t=hm(i),n=dm(i);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||lm(i)&&!n&&$m(e,i))?r=r.filter((e=>e!==i)):o=t,i=vm(i)}return t.set(e,r),r}(t,this._c):[].concat(n),i=[...a,r],s=i[0],l=i.reduce(((e,n)=>{const r=Km(t,n,o);return e.top=xm(r.top,e.top),e.right=wm(r.right,e.right),e.bottom=wm(r.bottom,e.bottom),e.left=xm(r.left,e.left),e}),Km(t,s,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:Zm,getElementRects:async function(e){const t=this.getOffsetParent||Zm,n=this.getDimensions,r=await n(e.floating);return{reference:Gm(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=Bm(e);return{width:t,height:n}},getScale:Um,isElement:am,isRTL:function(e){return"rtl"===hm(e).direction}};function tv(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function nv(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i="function"===typeof ResizeObserver,layoutShift:s="function"===typeof IntersectionObserver,animationFrame:l=!1}=r,c=Hm(e),u=o||a?[...c?ym(c):[],...ym(t)]:[];u.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)}));const d=c&&s?function(e,t){let n,r=null;const o=rm(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function i(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),a();const c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(s||t(),!f||!p)return;const h={rootMargin:-Sm(d)+"px "+-Sm(o.clientWidth-(u+f))+"px "+-Sm(o.clientHeight-(d+p))+"px "+-Sm(u)+"px",threshold:xm(0,wm(1,l))||1};let m=!0;function v(t){const r=t[0].intersectionRatio;if(r!==l){if(!m)return i();r?i(!1,r):n=setTimeout((()=>{i(!1,1e-7)}),1e3)}1!==r||tv(c,e.getBoundingClientRect())||i(),m=!1}try{r=new IntersectionObserver(v,_e(_e({},h),{},{root:o.ownerDocument}))}catch(g){r=new IntersectionObserver(v,h)}r.observe(e)}(!0),a}(c,n):null;let f,p=-1,h=null;i&&(h=new ResizeObserver((e=>{let[r]=e;r&&r.target===c&&h&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{var e;null==(e=h)||e.observe(t)}))),n()})),c&&!l&&h.observe(c),h.observe(t));let m=l?qm(e):null;return l&&function t(){const r=qm(e);m&&!tv(m,r)&&n();m=r,f=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach((e=>{o&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)})),null==d||d(),null==(e=h)||e.disconnect(),h=null,l&&cancelAnimationFrame(f)}}const rv=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:a,placement:i,middlewareData:s}=t,l=await async function(e,t){const{placement:n,platform:r,elements:o}=e,a=await(null==r.isRTL?void 0:r.isRTL(o.floating)),i=Dm(n),s=Pm(n),l="y"===_m(n),c=["left","top"].includes(i)?-1:1,u=a&&l?-1:1,d=jm(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:h}="number"===typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&"number"===typeof h&&(p="end"===s?-1*h:h),l?{x:p*u,y:f*c}:{x:f*c,y:p*u}}(t,e);return i===(null==(n=s.offset)?void 0:n.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:o+l.x,y:a+l.y,data:_e(_e({},l),{},{placement:i})}}}},ov=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:o,middlewareData:a,rects:i,initialPlacement:s,platform:l,elements:c}=t,u=jm(e,t),{mainAxis:d=!0,crossAxis:f=!0,fallbackPlacements:p,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:v=!0}=u,g=Ps(u,Im);if(null!=(n=a.arrow)&&n.alignmentOffset)return{};const y=Dm(o),b=_m(s),w=Dm(s)===s,x=await(null==l.isRTL?void 0:l.isRTL(c.floating)),k=p||(w||!v?[Rm(s)]:function(e){const t=Rm(e);return[Mm(e),t,Mm(t)]}(s)),S="none"!==m;!p&&S&&k.push(...function(e,t,n,r){const o=Pm(e);let a=function(e,t,n){const r=["left","right"],o=["right","left"],a=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?a:i;default:return[]}}(Dm(e),"start"===n,r);return o&&(a=a.map((e=>e+"-"+o)),t&&(a=a.concat(a.map(Mm)))),a}(s,v,m,x));const E=[s,...k],C=await zm(t,g),N=[];let j=(null==(r=a.flip)?void 0:r.overflows)||[];if(d&&N.push(C[y]),f){const e=function(e,t,n){void 0===n&&(n=!1);const r=Pm(e),o=Om(e),a=Tm(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Rm(i)),[i,Rm(i)]}(o,i,x);N.push(C[e[0]],C[e[1]])}if(j=[...j,{placement:o,overflows:N}],!N.every((e=>e<=0))){var D,P;const e=((null==(D=a.flip)?void 0:D.index)||0)+1,t=E[e];if(t){var T;const n="alignment"===f&&b!==_m(t),r=(null==(T=j[0])?void 0:T.overflows[0])>0;if(!n||r)return{data:{index:e,overflows:j},reset:{placement:t}}}let n=null==(P=j.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:P.placement;if(!n)switch(h){case"bestFit":{var _;const e=null==(_=j.filter((e=>{if(S){const t=_m(e.placement);return t===b||"y"===t}return!0})).map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:_[0];e&&(n=e);break}case"initialPlacement":n=s}if(o!==n)return{reset:{placement:n}}}return{}}}},av=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:a,platform:i,elements:s,middlewareData:l}=t,{element:c,padding:u=0}=jm(e,t)||{};if(null==c)return{};const d=Am(u),f={x:n,y:r},p=Om(o),h=Tm(p),m=await i.getDimensions(c),v="y"===p,g=v?"top":"left",y=v?"bottom":"right",b=v?"clientHeight":"clientWidth",w=a.reference[h]+a.reference[p]-f[p]-a.floating[h],x=f[p]-a.reference[p],k=await(null==i.getOffsetParent?void 0:i.getOffsetParent(c));let S=k?k[b]:0;S&&await(null==i.isElement?void 0:i.isElement(k))||(S=s.floating[b]||a.floating[h]);const E=w/2-x/2,C=S/2-m[h]/2-1,N=wm(d[g],C),j=wm(d[y],C),D=N,P=S-m[h]-j,T=S/2-m[h]/2+E,_=xm(D,wm(T,P));const O=!l.arrow&&null!=Pm(o)&&T!==_&&a.reference[h]/2-(T<D?N:j)-m[h]/2<0,M=O?T<D?T-D:T-P:0;return{[p]:f[p]+M,data:_e({[p]:_,centerOffset:T-_-M},O&&{alignmentOffset:M}),reset:O}}}),iv=(e,t,n)=>{const r=new Map,o=_e({platform:ev},n),a=_e(_e({},o.platform),{},{_c:r});return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,s=a.filter(Boolean),l=await(null==i.isRTL?void 0:i.isRTL(t));let c=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=Fm(c,r,l),f=r,p={},h=0;for(let m=0;m<s.length;m++){const{name:n,fn:a}=s[m],{x:v,y:g,data:y,reset:b}=await a({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:t}});u=null!=v?v:u,d=null!=g?g:d,p=_e(_e({},p),{},{[n]:_e(_e({},p[n]),y)}),b&&h<=50&&(h++,"object"===typeof b&&(b.placement&&(f=b.placement),b.rects&&(c=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:u,y:d}=Fm(c,f,l))),m=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}})(e,t,_e(_e({},o),{},{platform:a}))};var sv="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;function lv(e,t){if(e===t)return!0;if(typeof e!==typeof t)return!1;if("function"===typeof e&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&"object"===typeof e){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;0!==r--;)if(!lv(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;0!==r--;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!==r--;){const n=o[r];if(("_owner"!==n||!e.$$typeof)&&!lv(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function cv(e){if("undefined"===typeof window)return 1;return(e.ownerDocument.defaultView||window).devicePixelRatio||1}function uv(e,t){const n=cv(e);return Math.round(t*n)/n}function dv(e){const t=r.useRef(e);return sv((()=>{t.current=e})),t}const fv=(e,t)=>_e(_e({},rv(e)),{},{options:[e,t]}),pv=(e,t)=>_e(_e({},(e=>({name:"arrow",options:e,fn(t){const{element:n,padding:r}="function"===typeof e?e(t):e;return n&&(o=n,{}.hasOwnProperty.call(o,"current"))?null!=n.current?av({element:n.current,padding:r}).fn(t):{}:n?av({element:n,padding:r}).fn(t):{};var o}}))(e)),{},{options:[e,t]}),hv=["transform"],mv=["context","width","height","tipRadius","strokeWidth","staticOffset","stroke","d","style"];const vv="ArrowLeft",gv="ArrowRight",yv="ArrowUp",bv="ArrowDown";const wv=[vv,gv],xv=[yv,bv],kv=_e({},o);let Sv=!1,Ev=0;const Cv=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Ev++;const Nv=kv.useId||function(){const[e,t]=r.useState((()=>Sv?Cv():void 0));return Jh((()=>{null==e&&t(Cv())}),[]),r.useEffect((()=>{Sv=!0}),[]),e};const jv=r.forwardRef((function(e,t){const{context:{placement:n,elements:{floating:o},middlewareData:{arrow:a,shift:i}},width:s=14,height:l=7,tipRadius:c=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h}={}}=e,m=Ps(e.style,hv),v=Ps(e,mv);const g=Nv(),[y,b]=r.useState(!1);if(Jh((()=>{if(!o)return;"rtl"===hm(o).direction&&b(!0)}),[o]),!o)return null;const[w,x]=n.split("-"),k="top"===w||"bottom"===w;let S=d;(k&&null!=i&&i.x||!k&&null!=i&&i.y)&&(S=null);const E=2*u,C=E/2,N=s/2*(c/-8+1),j=l/2*c/4,D=!!p,P=S&&"end"===x?"bottom":"top";let T=S&&"end"===x?"right":"left";S&&y&&(T="end"===x?"left":"right");const _=null!=(null==a?void 0:a.x)?S||a.x:"",O=null!=(null==a?void 0:a.y)?S||a.y:"",M=p||"M0,0 H"+s+" L"+(s-N)+","+(l-j)+" Q"+s/2+","+l+" "+N+","+(l-j)+" Z",R={top:D?"rotate(180deg)":"",left:D?"rotate(90deg)":"rotate(-90deg)",bottom:D?"":"rotate(180deg)",right:D?"rotate(-90deg)":"rotate(90deg)"}[w];return(0,bd.jsxs)("svg",_e(_e({},v),{},{"aria-hidden":!0,ref:t,width:D?s:s+E,height:s,viewBox:"0 0 "+s+" "+(l>s?l:s),style:_e({position:"absolute",pointerEvents:"none",[T]:_,[P]:O,[w]:k||D?"100%":"calc(100% - "+E/2+"px)",transform:[R,h].filter((e=>!!e)).join(" ")},m),children:[E>0&&(0,bd.jsx)("path",{clipPath:"url(#"+g+")",fill:"none",stroke:f,strokeWidth:E+(p?0:1),d:M}),(0,bd.jsx)("path",{stroke:E&&!p?v.fill:"none",d:M}),(0,bd.jsx)("clipPath",{id:g,children:(0,bd.jsx)("rect",{x:-C,y:C*(D?-1:1),width:s+E,height:s})})]}))}));function Dv(){const e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach((e=>e(n)))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){var r;null==(r=e.get(t))||r.delete(n)}}}const Pv=r.createContext(null),Tv=r.createContext(null),_v=()=>{var e;return(null==(e=r.useContext(Pv))?void 0:e.id)||null},Ov=()=>r.useContext(Tv);function Mv(e){const{open:t=!1,onOpenChange:n,elements:o}=e,a=Nv(),i=r.useRef({}),[s]=r.useState((()=>Dv())),l=null!=_v();const[c,u]=r.useState(o.reference),d=function(e){const t=r.useRef((()=>{}));return Zh((()=>{t.current=e})),r.useCallback((function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)}),[])}(((e,t,r)=>{i.current.openEvent=e?t:void 0,s.emit("openchange",{open:e,event:t,reason:r,nested:l}),null==n||n(e,t,r)})),f=r.useMemo((()=>({setPositionReference:u})),[]),p=r.useMemo((()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference})),[c,o.reference,o.floating]);return r.useMemo((()=>({dataRef:i,open:t,onOpenChange:d,elements:p,events:s,floatingId:a,refs:f})),[t,d,p,s,a,f])}function Rv(e){void 0===e&&(e={});const{nodeId:t}=e,n=Mv(_e(_e({},e),{},{elements:_e({reference:null,floating:null},e.elements)})),o=e.rootContext||n,a=o.elements,[s,l]=r.useState(null),[c,u]=r.useState(null),d=(null==a?void 0:a.domReference)||s,f=r.useRef(null),p=Ov();Jh((()=>{d&&(f.current=d)}),[d]);const h=function(e){void 0===e&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:a,elements:{reference:s,floating:l}={},transform:c=!0,whileElementsMounted:u,open:d}=e,[f,p]=r.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[h,m]=r.useState(o);lv(h,o)||m(o);const[v,g]=r.useState(null),[y,b]=r.useState(null),w=r.useCallback((e=>{e!==E.current&&(E.current=e,g(e))}),[]),x=r.useCallback((e=>{e!==C.current&&(C.current=e,b(e))}),[]),k=s||v,S=l||y,E=r.useRef(null),C=r.useRef(null),N=r.useRef(f),j=null!=u,D=dv(u),P=dv(a),T=dv(d),_=r.useCallback((()=>{if(!E.current||!C.current)return;const e={placement:t,strategy:n,middleware:h};P.current&&(e.platform=P.current),iv(E.current,C.current,e).then((e=>{const t=_e(_e({},e),{},{isPositioned:!1!==T.current});O.current&&!lv(N.current,t)&&(N.current=t,i.flushSync((()=>{p(t)})))}))}),[h,t,n,P,T]);sv((()=>{!1===d&&N.current.isPositioned&&(N.current.isPositioned=!1,p((e=>_e(_e({},e),{},{isPositioned:!1}))))}),[d]);const O=r.useRef(!1);sv((()=>(O.current=!0,()=>{O.current=!1})),[]),sv((()=>{if(k&&(E.current=k),S&&(C.current=S),k&&S){if(D.current)return D.current(k,S,_);_()}}),[k,S,_,D,j]);const M=r.useMemo((()=>({reference:E,floating:C,setReference:w,setFloating:x})),[w,x]),R=r.useMemo((()=>({reference:k,floating:S})),[k,S]),A=r.useMemo((()=>{const e={position:n,left:0,top:0};if(!R.floating)return e;const t=uv(R.floating,f.x),r=uv(R.floating,f.y);return c?_e(_e({},e),{},{transform:"translate("+t+"px, "+r+"px)"},cv(R.floating)>=1.5&&{willChange:"transform"}):{position:n,left:t,top:r}}),[n,c,R.floating,f.x,f.y]);return r.useMemo((()=>_e(_e({},f),{},{update:_,refs:M,elements:R,floatingStyles:A})),[f,_,M,R,A])}(_e(_e({},e),{},{elements:_e(_e({},a),c&&{reference:c})})),m=r.useCallback((e=>{const t=am(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),h.refs.setReference(t)}),[h.refs]),v=r.useCallback((e=>{(am(e)||null===e)&&(f.current=e,l(e)),(am(h.refs.reference.current)||null===h.refs.reference.current||null!==e&&!am(e))&&h.refs.setReference(e)}),[h.refs]),g=r.useMemo((()=>_e(_e({},h.refs),{},{setReference:v,setPositionReference:m,domReference:f})),[h.refs,v,m]),y=r.useMemo((()=>_e(_e({},h.elements),{},{domReference:d})),[h.elements,d]),b=r.useMemo((()=>_e(_e(_e({},h),o),{},{refs:g,elements:y,nodeId:t})),[h,g,y,t,o]);return Jh((()=>{o.dataRef.current.floatingContext=b;const e=null==p?void 0:p.nodesRef.current.find((e=>e.id===t));e&&(e.context=b)})),r.useMemo((()=>_e(_e({},h),{},{context:b,refs:g,elements:y})),[h,g,y,b])}var Av=function(e,t){return Av=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Av(e,t)};function Lv(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Av(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var Iv=function(){return Iv=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Iv.apply(this,arguments)};function Fv(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}"function"===typeof SuppressedError&&SuppressedError;var zv,Bv=function(e){var t=e.showTimeSelectOnly,n=void 0!==t&&t,o=e.showTime,a=void 0!==o&&o,i=e.className,s=e.children,l=n?"Choose Time":"Choose Date".concat(a?" and Time":"");return r.createElement("div",{className:i,role:"dialog","aria-label":l,"aria-modal":"true"},s)},Hv=function(e){var t=e.children,n=e.onClickOutside,o=e.className,a=e.containerRef,i=e.style,s=function(e,t){var n=(0,r.useRef)(null),o=(0,r.useRef)(e);o.current=e;var a=(0,r.useCallback)((function(e){var r,a=e.composed&&e.composedPath&&e.composedPath().find((function(e){return e instanceof Node}))||e.target;n.current&&!n.current.contains(a)&&(t&&a instanceof HTMLElement&&a.classList.contains(t)||null===(r=o.current)||void 0===r||r.call(o,e))}),[t]);return(0,r.useEffect)((function(){return document.addEventListener("mousedown",a),function(){document.removeEventListener("mousedown",a)}}),[a]),n}(n,e.ignoreClass);return r.createElement("div",{className:o,style:i,ref:function(e){s.current=e,a&&(a.current=e)}},t)};function Uv(){return"undefined"!==typeof window?window:globalThis}!function(e){e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.PageUp="PageUp",e.PageDown="PageDown",e.Home="Home",e.End="End",e.Enter="Enter",e.Space=" ",e.Tab="Tab",e.Escape="Escape",e.Backspace="Backspace",e.X="x"}(zv||(zv={}));function Yv(e){if(null==e)return new Date;var t="string"===typeof e?Yd(e):Ud(e);return qv(t)?t:new Date}function Wv(e,t,n,r,o){void 0===o&&(o=Yv());for(var a=ug(n)||ug(cg()),i=0,s=Array.isArray(t)?t:[t];i<s.length;i++){var l=s[i],c=Pp(e,l,o,{locale:a,useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});if(qv(c)&&(!r||e===Vv(c,l,n)))return c}return null}function qv(e,t){return _p(e)&&!Op(e,new Date("1/1/1800"))}function Vv(e,t,n){if("en"===n)return th(e,t,{useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});var r=n?ug(n):void 0;return n&&!r&&console.warn('A locale object was not found for the provided string ["'.concat(n,'"].')),th(e,t,{locale:r=r||ug(cg()),useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0})}function Qv(e,t){var n=t.dateFormat,r=t.locale,o=Array.isArray(n)&&n.length>0?n[0]:n;return e&&Vv(e,o,r)||""}function Kv(e,t){var n=t.hour,r=void 0===n?0:n,o=t.minute,a=void 0===o?0:o,i=t.second;return rh(oh(ah(e,void 0===i?0:i),a),r)}function $v(e){return Rp(e)}function Gv(e,t,n){return ap(e,{locale:ug(t||cg()),weekStartsOn:n})}function Xv(e){return ih(e)}function Jv(e){return Lp(e)}function Zv(e){return sh(e)}function eg(){return Rp(Yv())}function tg(e){return lh(e)}function ng(e){return uh(e)}function rg(e,t){return e&&t?dh(e,t):!e&&!t}function og(e,t){return e&&t?fh(e,t):!e&&!t}function ag(e,t){return e&&t?ph(e,t):!e&&!t}function ig(e,t){return e&&t?hh(e,t):!e&&!t}function sg(e,t){return e&&t?mh(e,t):!e&&!t}function lg(e,t,n){var r,o=Rp(t),a=lh(n);try{r=vh(e,{start:o,end:a})}catch(i){r=!1}return r}function cg(){return Uv().__localeId__}function ug(e){if("string"===typeof e){var t=Uv();return t.__localeData__?t.__localeData__[e]:void 0}return e}function dg(e,t){return Vv(yh(Yv(),e),"LLLL",t)}function fg(e,t){return Vv(yh(Yv(),e),"LLL",t)}function pg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.excludeDateIntervals,s=n.includeDates,l=n.includeDateIntervals,c=n.filterDate;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return t instanceof Date?ig(e,t):ig(e,t.date)}))||i&&i.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||s&&!s.some((function(t){return ig(e,t)}))||l&&!l.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||c&&!c(Yv(e))||!1}function hg(e,t){var n=void 0===t?{}:t,r=n.excludeDates,o=n.excludeDateIntervals;return o&&o.length>0?o.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})})):r&&r.some((function(t){var n;return t instanceof Date?ig(e,t):ig(e,null!==(n=t.date)&&void 0!==n?n:new Date)}))||!1}function mg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r?ih(r):void 0,maxDate:o?uh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(t){return og(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return og(e,t)}))||s&&!s(Yv(e))||!1}function vg(e,t,n,r){var o=wh(e),a=xh(e),i=wh(t),s=xh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function gg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return og(t instanceof Date?t:t.date,e)}))||i&&!i.some((function(t){return og(t,e)}))||!1}function yg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r,maxDate:o})||(null===a||void 0===a?void 0:a.some((function(t){return ag(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return ag(e,t)}))||s&&!s(Yv(e))||!1}function bg(e,t,n){if(!t||!n)return!1;if(!_p(t)||!_p(n))return!1;var r=wh(t),o=wh(n);return r<=e&&o>=e}function wg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate,l=new Date(e,0,1);return kg(l,{minDate:r?Lp(r):void 0,maxDate:o?kh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(e){return rg(l,e instanceof Date?e:e.date)})))||i&&!i.some((function(e){return rg(l,e)}))||s&&!s(Yv(l))||!1}function xg(e,t,n,r){var o=wh(e),a=Sh(e),i=wh(t),s=Sh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function kg(e,t){var n,r=void 0===t?{}:t,o=r.minDate,a=r.maxDate;return null!==(n=o&&Ap(e,o)<0||a&&Ap(e,a)>0)&&void 0!==n&&n}function Sg(e,t){return t.some((function(t){return Eh(t)===Eh(e)&&Ch(t)===Ch(e)&&Nh(t)===Nh(e)}))}function Eg(e,t){var n=void 0===t?{}:t,r=n.excludeTimes,o=n.includeTimes,a=n.filterTime;return r&&Sg(e,r)||o&&!Sg(e,o)||a&&!a(e)||!1}function Cg(e,t){var n=t.minTime,r=t.maxTime;if(!n||!r)throw new Error("Both minTime and maxTime props required");var o=Yv();o=ah(o=oh(o=rh(o,Eh(e)),Ch(e)),Nh(e));var a=Yv();a=ah(a=oh(a=rh(a,Eh(n)),Ch(n)),Nh(n));var i,s=Yv();s=ah(s=oh(s=rh(s,Eh(r)),Ch(r)),Nh(r));try{i=!vh(o,{start:a,end:s})}catch(l){i=!1}return i}function Ng(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Dh(e,1);return r&&Ph(r,a)>0||o&&o.every((function(e){return Ph(e,a)>0}))||!1}function jg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=jh(e,1);return r&&Ph(a,r)>0||o&&o.every((function(e){return Ph(a,e)>0}))||!1}function Dg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Rh(e,1);return r&&Ah(r,a)>0||o&&o.every((function(e){return Ah(e,a)>0}))||!1}function Pg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Mh(e,1);return r&&Ah(a,r)>0||o&&o.every((function(e){return Ah(a,e)>0}))||!1}function Tg(e){var t=e.minDate,n=e.includeDates;return n&&t?Lh(n.filter((function(e){return Ap(e,t)>=0}))):n?Lh(n):t}function _g(e){var t=e.maxDate,n=e.includeDates;return n&&t?Ih(n.filter((function(e){return Ap(e,t)<=0}))):n?Ih(n):t}function Og(e,t){var n;void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--highlighted");for(var r=new Map,o=0,a=e.length;o<a;o++){var i=e[o];if(Tp(i)){var s=Vv(i,"MM.dd.yyyy");(p=r.get(s)||[]).includes(t)||(p.push(t),r.set(s,p))}else if("object"===typeof i){var l=null!==(n=Object.keys(i)[0])&&void 0!==n?n:"",c=i[l];if("string"===typeof l&&Array.isArray(c))for(var u=0,d=c.length;u<d;u++){var f=c[u];if(f){var p;s=Vv(f,"MM.dd.yyyy");(p=r.get(s)||[]).includes(l)||(p.push(l),r.set(s,p))}}}}return r}function Mg(e,t){void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--holidays");var n=new Map;return e.forEach((function(e){var r=e.date,o=e.holidayName;if(Tp(r)){var a=Vv(r,"MM.dd.yyyy"),i=n.get(a)||{className:"",holidayNames:[]};if(!("className"in i)||i.className!==t||(s=i.holidayNames,l=[o],s.length!==l.length||!s.every((function(e,t){return e===l[t]})))){var s,l;i.className=t;var c=i.holidayNames;i.holidayNames=c?Fv(Fv([],c,!0),[o],!1):[o],n.set(a,i)}}})),n}function Rg(e,t,n,r,o){for(var a=o.length,i=[],s=0;s<a;s++){var l=e,c=o[s];c&&(l=Hh(l=Bh(l=zh(l,Eh(c)),Ch(c)),Nh(c)));var u=Bh(e,(n+1)*r);Uh(l,t)&&Op(l,u)&&void 0!=c&&i.push(c)}return i}function Ag(e){return e<10?"0".concat(e):"".concat(e)}function Lg(e,t){void 0===t&&(t=12);var n=Math.ceil(wh(e)/t)*t;return{startPeriod:n-(t-1),endPeriod:n}}function Ig(e){var t=e.getSeconds(),n=e.getMilliseconds();return Ud(e.getTime()-1e3*t-n)}function Fg(e){if(!Tp(e))throw new Error("Invalid date");var t=new Date(e);return t.setHours(0,0,0,0),t}function zg(e,t){if(!Tp(e)||!Tp(t))throw new Error("Invalid date received");return Op(Fg(e),Fg(t))}function Bg(e){return e.key===zv.Space}var Hg,Ug=function(e){function t(t){var n=e.call(this,t)||this;return n.inputRef=r.createRef(),n.onTimeChange=function(e){var t,r;n.setState({time:e});var o=n.props.date,a=o instanceof Date&&!isNaN(+o)?o:new Date;if(null===e||void 0===e?void 0:e.includes(":")){var i=e.split(":"),s=i[0],l=i[1];a.setHours(Number(s)),a.setMinutes(Number(l))}null===(r=(t=n.props).onChange)||void 0===r||r.call(t,a)},n.renderTimeInput=function(){var e=n.state.time,t=n.props,o=t.date,a=t.timeString,i=t.customTimeInput;return i?(0,r.cloneElement)(i,{date:o,value:e,onChange:n.onTimeChange}):r.createElement("input",{type:"time",className:"react-datepicker-time__input",placeholder:"Time",name:"time-input",ref:n.inputRef,onClick:function(){var e;null===(e=n.inputRef.current)||void 0===e||e.focus()},required:!0,value:e,onChange:function(e){n.onTimeChange(e.target.value||a)}})},n.state={time:n.props.timeString},n}return Lv(t,e),t.getDerivedStateFromProps=function(e,t){return e.timeString!==t.time?{time:e.timeString}:null},t.prototype.render=function(){return r.createElement("div",{className:"react-datepicker__input-time-container"},r.createElement("div",{className:"react-datepicker-time__caption"},this.props.timeInputLabel),r.createElement("div",{className:"react-datepicker-time__input-container"},r.createElement("div",{className:"react-datepicker-time__input"},this.renderTimeInput())))},t}(r.Component),Yg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.dayEl=(0,r.createRef)(),t.handleClick=function(e){!t.isDisabled()&&t.props.onClick&&t.props.onClick(e)},t.handleMouseEnter=function(e){!t.isDisabled()&&t.props.onMouseEnter&&t.props.onMouseEnter(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isSameDay=function(e){return ig(t.props.day,e)},t.isKeyboardSelected=function(){var e;if(t.props.disabledKeyboardNavigation)return!1;var n=t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected),r=t.props.preSelection&&t.isDisabled(t.props.preSelection);return!n&&t.isSameDayOrWeek(t.props.preSelection)&&!r},t.isDisabled=function(e){return void 0===e&&(e=t.props.day),pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(){return hg(t.props.day,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.isStartOfWeek=function(){return ig(t.props.day,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameWeek=function(e){return t.props.showWeekPicker&&ig(e,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameDayOrWeek=function(e){return t.isSameDay(e)||t.isSameWeek(e)},t.getHighLightedClass=function(){var e=t.props,n=e.day,r=e.highlightDates;if(!r)return!1;var o=Vv(n,"MM.dd.yyyy");return r.get(o)},t.getHolidaysClass=function(){var e,n=t.props,r=n.day,o=n.holidays;if(!o)return[void 0];var a=Vv(r,"MM.dd.yyyy");return o.has(a)?[null===(e=o.get(a))||void 0===e?void 0:e.className]:[void 0]},t.isInRange=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&lg(n,r,o)},t.isInSelectingRange=function(){var e,n=t.props,r=n.day,o=n.selectsStart,a=n.selectsEnd,i=n.selectsRange,s=n.selectsDisabledDaysInRange,l=n.startDate,c=n.endDate,u=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return!(!(o||a||i)||!u||!s&&t.isDisabled())&&(o&&c&&(Op(u,c)||sg(u,c))?lg(r,u,c):(a&&l&&!c&&(Uh(u,l)||sg(u,l))||!(!i||!l||c||!Uh(u,l)&&!sg(u,l)))&&lg(r,l,u))},t.isSelectingRangeStart=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.startDate,a=n.selectsStart,i=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a?i:o)},t.isSelectingRangeEnd=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.endDate,a=n.selectsEnd,i=n.selectsRange,s=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a||i?s:o)},t.isRangeStart=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(r,n)},t.isRangeEnd=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(o,n)},t.isWeekend=function(){var e=Yh(t.props.day);return 0===e||6===e},t.isAfterMonth=function(){return void 0!==t.props.month&&(t.props.month+1)%12===xh(t.props.day)},t.isBeforeMonth=function(){return void 0!==t.props.month&&(xh(t.props.day)+1)%12===t.props.month},t.isCurrentDay=function(){return t.isSameDay(Yv())},t.isSelected=function(){var e;return t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected)},t.getClassNames=function(e){return Ld("react-datepicker__day",t.props.dayClassName?t.props.dayClassName(e):void 0,"react-datepicker__day--"+function(e,t){return Vv(e,"ddd",t)}(t.props.day),{"react-datepicker__day--disabled":t.isDisabled(),"react-datepicker__day--excluded":t.isExcluded(),"react-datepicker__day--selected":t.isSelected(),"react-datepicker__day--keyboard-selected":t.isKeyboardSelected(),"react-datepicker__day--range-start":t.isRangeStart(),"react-datepicker__day--range-end":t.isRangeEnd(),"react-datepicker__day--in-range":t.isInRange(),"react-datepicker__day--in-selecting-range":t.isInSelectingRange(),"react-datepicker__day--selecting-range-start":t.isSelectingRangeStart(),"react-datepicker__day--selecting-range-end":t.isSelectingRangeEnd(),"react-datepicker__day--today":t.isCurrentDay(),"react-datepicker__day--weekend":t.isWeekend(),"react-datepicker__day--outside-month":t.isAfterMonth()||t.isBeforeMonth()},t.getHighLightedClass(),t.getHolidaysClass())},t.getAriaLabel=function(){var e=t.props,n=e.day,r=e.ariaLabelPrefixWhenEnabled,o=void 0===r?"Choose":r,a=e.ariaLabelPrefixWhenDisabled,i=void 0===a?"Not available":a,s=t.isDisabled()||t.isExcluded()?i:o;return"".concat(s," ").concat(Vv(n,"PPPP",t.props.locale))},t.getTitle=function(){var e=t.props,n=e.day,r=e.holidays,o=void 0===r?new Map:r,a=e.excludeDates,i=Vv(n,"MM.dd.yyyy"),s=[];return o.has(i)&&s.push.apply(s,o.get(i).holidayNames),t.isExcluded()&&s.push(null===a||void 0===a?void 0:a.filter((function(e){return e instanceof Date?ig(e,n):ig(null===e||void 0===e?void 0:e.date,n)})).map((function(e){if(!(e instanceof Date))return null===e||void 0===e?void 0:e.message}))),s.join(", ")},t.getTabIndex=function(){var e=t.props.selected,n=t.props.preSelection;return(!t.props.showWeekPicker||!t.props.showWeekNumber&&t.isStartOfWeek())&&(t.isKeyboardSelected()||t.isSameDay(e)&&ig(n,e))?0:-1},t.handleFocusDay=function(){var e;t.shouldFocusDay()&&(null===(e=t.dayEl.current)||void 0===e||e.focus({preventScroll:!0}))},t.renderDayContents=function(){return t.props.monthShowsDuplicateDaysEnd&&t.isAfterMonth()||t.props.monthShowsDuplicateDaysStart&&t.isBeforeMonth()?null:t.props.renderDayContents?t.props.renderDayContents(Wh(t.props.day),t.props.day):Wh(t.props.day)},t.render=function(){return r.createElement("div",{ref:t.dayEl,className:t.getClassNames(t.props.day),onKeyDown:t.handleOnKeyDown,onClick:t.handleClick,onMouseEnter:t.props.usePointerEvent?void 0:t.handleMouseEnter,onPointerEnter:t.props.usePointerEvent?t.handleMouseEnter:void 0,tabIndex:t.getTabIndex(),"aria-label":t.getAriaLabel(),role:"option",title:t.getTitle(),"aria-disabled":t.isDisabled(),"aria-current":t.isCurrentDay()?"date":void 0,"aria-selected":t.isSelected()||t.isInRange()},t.renderDayContents(),""!==t.getTitle()&&r.createElement("span",{className:"overlay"},t.getTitle()))},t}return Lv(t,e),t.prototype.componentDidMount=function(){this.handleFocusDay()},t.prototype.componentDidUpdate=function(){this.handleFocusDay()},t.prototype.shouldFocusDay=function(){var e=!1;return 0===this.getTabIndex()&&this.isSameDay(this.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(e=!0),this.props.inline&&!this.props.shouldFocusDayInline&&(e=!1),this.isDayActiveElement()&&(e=!0),this.isDuplicateDay()&&(e=!1)),e},t.prototype.isDayActiveElement=function(){var e,t,n;return(null===(t=null===(e=this.props.containerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.contains(document.activeElement))&&(null===(n=document.activeElement)||void 0===n?void 0:n.classList.contains("react-datepicker__day"))},t.prototype.isDuplicateDay=function(){return this.props.monthShowsDuplicateDaysEnd&&this.isAfterMonth()||this.props.monthShowsDuplicateDaysStart&&this.isBeforeMonth()},t}(r.Component),Wg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.weekNumberEl=(0,r.createRef)(),t.handleClick=function(e){t.props.onClick&&t.props.onClick(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isKeyboardSelected=function(){return!t.props.disabledKeyboardNavigation&&!ig(t.props.date,t.props.selected)&&ig(t.props.date,t.props.preSelection)},t.getTabIndex=function(){return t.props.showWeekPicker&&t.props.showWeekNumber&&(t.isKeyboardSelected()||ig(t.props.date,t.props.selected)&&ig(t.props.preSelection,t.props.selected))?0:-1},t.handleFocusWeekNumber=function(e){var n=!1;0===t.getTabIndex()&&!(null===e||void 0===e?void 0:e.isInputFocused)&&ig(t.props.date,t.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(n=!0),t.props.inline&&!t.props.shouldFocusDayInline&&(n=!1),t.props.containerRef&&t.props.containerRef.current&&t.props.containerRef.current.contains(document.activeElement)&&document.activeElement&&document.activeElement.classList.contains("react-datepicker__week-number")&&(n=!0)),n&&t.weekNumberEl.current&&t.weekNumberEl.current.focus({preventScroll:!0})},t}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{ariaLabelPrefix:"week "}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.handleFocusWeekNumber()},t.prototype.componentDidUpdate=function(e){this.handleFocusWeekNumber(e)},t.prototype.render=function(){var e=this.props,n=e.weekNumber,o=e.isWeekDisabled,a=e.ariaLabelPrefix,i=void 0===a?t.defaultProps.ariaLabelPrefix:a,s=e.onClick,l={"react-datepicker__week-number":!0,"react-datepicker__week-number--clickable":!!s&&!o,"react-datepicker__week-number--selected":!!s&&ig(this.props.date,this.props.selected)};return r.createElement("div",{ref:this.weekNumberEl,className:Ld(l),"aria-label":"".concat(i," ").concat(this.props.weekNumber),onClick:this.handleClick,onKeyDown:this.handleOnKeyDown,tabIndex:this.getTabIndex()},n)},t}(r.Component),qg=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,excludeDateIntervals:n.props.excludeDateIntervals,includeDateIntervals:n.props.includeDateIntervals,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.handleDayClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleDayMouseEnter=function(e){n.props.onDayMouseEnter&&n.props.onDayMouseEnter(e)},n.handleWeekClick=function(e,r,o){for(var a,i,s,l=new Date(e),c=0;c<7;c++){var u=new Date(e);if(u.setDate(u.getDate()+c),!n.isDisabled(u)){l=u;break}}"function"===typeof n.props.onWeekSelect&&n.props.onWeekSelect(l,r,o),n.props.showWeekPicker&&n.handleDayClick(l,o),(null!==(a=n.props.shouldCloseOnSelect)&&void 0!==a?a:t.defaultProps.shouldCloseOnSelect)&&(null===(s=(i=n.props).setOpen)||void 0===s||s.call(i,!1))},n.formatWeekNumber=function(e){return n.props.formatWeekNumber?n.props.formatWeekNumber(e):function(e){return pp(e)}(e)},n.isWeekDisabled=function(){for(var e=n.startOfWeek(),t=gp(e,6),r=new Date(e);r<=t;){if(!n.isDisabled(r))return!1;r=gp(r,1)}return!0},n.renderDays=function(){var e=n.startOfWeek(),o=[],a=n.formatWeekNumber(e);if(n.props.showWeekNumber){var i=n.props.onWeekSelect||n.props.showWeekPicker?n.handleWeekClick.bind(n,e,a):void 0;o.push(r.createElement(Wg,Iv({key:"W"},t.defaultProps,n.props,{weekNumber:a,isWeekDisabled:n.isWeekDisabled(),date:e,onClick:i})))}return o.concat([0,1,2,3,4,5,6].map((function(o){var a=gp(e,o);return r.createElement(Yg,Iv({},t.defaultProps,n.props,{ariaLabelPrefixWhenEnabled:n.props.chooseDayAriaLabelPrefix,ariaLabelPrefixWhenDisabled:n.props.disabledDayAriaLabelPrefix,key:a.valueOf(),day:a,onClick:n.handleDayClick.bind(n,a),onMouseEnter:n.handleDayMouseEnter.bind(n,a)}))})))},n.startOfWeek=function(){return Gv(n.props.day,n.props.locale,n.props.calendarStartDay)},n.isKeyboardSelected=function(){return!n.props.disabledKeyboardNavigation&&!ig(n.startOfWeek(),n.props.selected)&&ig(n.startOfWeek(),n.props.preSelection)},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{shouldCloseOnSelect:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e={"react-datepicker__week":!0,"react-datepicker__week--selected":ig(this.startOfWeek(),this.props.selected),"react-datepicker__week--keyboard-selected":this.isKeyboardSelected()};return r.createElement("div",{className:Ld(e)},this.renderDays())},t}(r.Component),Vg="two_columns",Qg="three_columns",Kg="four_columns",$g=((Hg={})[Vg]={grid:[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]],verticalNavigationOffset:2},Hg[Qg]={grid:[[0,1,2],[3,4,5],[6,7,8],[9,10,11]],verticalNavigationOffset:3},Hg[Kg]={grid:[[0,1,2,3],[4,5,6,7],[8,9,10,11]],verticalNavigationOffset:4},Hg);function Gg(e,t){return e?Kg:t?Vg:Qg}var Xg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.MONTH_REFS=Fv([],Array(12),!0).map((function(){return(0,r.createRef)()})),t.QUARTER_REFS=Fv([],Array(4),!0).map((function(){return(0,r.createRef)()})),t.isDisabled=function(e){return pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(e){return hg(e,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.handleDayClick=function(e,n){var r,o;null===(o=(r=t.props).onDayClick)||void 0===o||o.call(r,e,n,t.props.orderInDisplay)},t.handleDayMouseEnter=function(e){var n,r;null===(r=(n=t.props).onDayMouseEnter)||void 0===r||r.call(n,e)},t.handleMouseLeave=function(){var e,n;null===(n=(e=t.props).onMouseLeave)||void 0===n||n.call(e)},t.isRangeStartMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),o)},t.isRangeStartQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),o)},t.isRangeEndMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),a)},t.isRangeEndQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),a)},t.isInSelectingRangeMonth=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?vg(u,c,e,o):(i&&l||!(!s||!l||c))&&vg(l,u,e,o))},t.isSelectingMonthRangeStart=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.startDate,i=r.selectsStart,s=yh(o,e),l=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(s,i?l:a)},t.isSelectingMonthRangeEnd=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.endDate,i=r.selectsEnd,s=r.selectsRange,l=yh(o,e),c=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(l,i||s?c:a)},t.isInSelectingRangeQuarter=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?xg(u,c,e,o):(i&&l||!(!s||!l||c))&&xg(l,u,e,o))},t.isWeekInMonth=function(e){var n=t.props.day,r=gp(e,6);return og(e,n)||og(r,n)},t.isCurrentMonth=function(e,t){return wh(e)===wh(Yv())&&t===xh(Yv())},t.isCurrentQuarter=function(e,t){return wh(e)===wh(Yv())&&t===Sh(Yv())},t.isSelectedMonth=function(e,t,n){return xh(n)===t&&wh(e)===wh(n)},t.isSelectMonthInList=function(e,n,r){return r.some((function(r){return t.isSelectedMonth(e,n,r)}))},t.isSelectedQuarter=function(e,t,n){return Sh(e)===t&&wh(e)===wh(n)},t.renderWeeks=function(){for(var e=[],n=t.props.fixedHeight,o=0,a=!1,i=Gv(Xv(t.props.day),t.props.locale,t.props.calendarStartDay),s=t.props.selected?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.selected}(t.props.selected):void 0,l=t.props.preSelection?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.preSelection}(t.props.preSelection):void 0;e.push(r.createElement(qg,Iv({},t.props,{ariaLabelPrefix:t.props.weekAriaLabelPrefix,key:o,day:i,month:xh(t.props.day),onDayClick:t.handleDayClick,onDayMouseEnter:t.handleDayMouseEnter,selected:s,preSelection:l,showWeekNumber:t.props.showWeekNumbers}))),!a;){o++,i=qh(i,1);var c=n&&o>=6,u=!n&&!t.isWeekInMonth(i);if(c||u){if(!t.props.peekNextMonth)break;a=!0}}return e},t.onMonthClick=function(e,n){var r=t.isMonthDisabledForLabelDate(n),o=r.isDisabled,a=r.labelDate;o||t.handleDayClick(Xv(a),e)},t.onMonthMouseEnter=function(e){var n=t.isMonthDisabledForLabelDate(e),r=n.isDisabled,o=n.labelDate;r||t.handleDayMouseEnter(Xv(o))},t.handleMonthNavigation=function(e,n){var r,o,a,i;null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.MONTH_REFS[e])||void 0===a?void 0:a.current)||void 0===i||i.focus()},t.handleKeyboardNavigation=function(e,n,r){var o,a=t.props,i=a.selected,s=a.preSelection,l=a.setPreSelection,c=a.minDate,u=a.maxDate,d=a.showFourColumnMonthYearPicker,f=a.showTwoColumnMonthYearPicker;if(s){var p=Gg(d,f),h=t.getVerticalOffset(p),m=null===(o=$g[p])||void 0===o?void 0:o.grid,v=function(e,t,n){var r,o,a=t,i=n;switch(e){case zv.ArrowRight:a=jh(t,1),i=11===n?0:n+1;break;case zv.ArrowLeft:a=Dh(t,1),i=0===n?11:n-1;break;case zv.ArrowUp:a=Dh(t,h),i=(null===(r=null===m||void 0===m?void 0:m[0])||void 0===r?void 0:r.includes(n))?n+12-h:n-h;break;case zv.ArrowDown:a=jh(t,h),i=(null===(o=null===m||void 0===m?void 0:m[m.length-1])||void 0===o?void 0:o.includes(n))?n-12+h:n+h}return{newCalculatedDate:a,newCalculatedMonth:i}};if(n!==zv.Enter){var g=function(e,n,r){for(var o=e,a=!1,i=0,s=v(o,n,r),l=s.newCalculatedDate,d=s.newCalculatedMonth;!a;){if(i>=40){l=n,d=r;break}var f;if(c&&l<c)o=zv.ArrowRight,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(u&&l>u)o=zv.ArrowLeft,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(gg(l,t.props))l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;else a=!0;i++}return{newCalculatedDate:l,newCalculatedMonth:d}}(n,s,r),y=g.newCalculatedDate,b=g.newCalculatedMonth;switch(n){case zv.ArrowRight:case zv.ArrowLeft:case zv.ArrowUp:case zv.ArrowDown:t.handleMonthNavigation(b,y)}}else t.isMonthDisabled(r)||(t.onMonthClick(e,r),null===l||void 0===l||l(i))}},t.getVerticalOffset=function(e){var t,n;return null!==(n=null===(t=$g[e])||void 0===t?void 0:t.verticalNavigationOffset)&&void 0!==n?n:0},t.onMonthKeyDown=function(e,n){var r=t.props,o=r.disabledKeyboardNavigation,a=r.handleOnMonthKeyDown,i=e.key;i!==zv.Tab&&e.preventDefault(),o||t.handleKeyboardNavigation(e,i,n),a&&a(e)},t.onQuarterClick=function(e,n){var r=bh(t.props.day,n);yg(r,t.props)||t.handleDayClick(Zv(r),e)},t.onQuarterMouseEnter=function(e){var n=bh(t.props.day,e);yg(n,t.props)||t.handleDayMouseEnter(Zv(n))},t.handleQuarterNavigation=function(e,n){var r,o,a,i;t.isDisabled(n)||t.isExcluded(n)||(null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.QUARTER_REFS[e-1])||void 0===a?void 0:a.current)||void 0===i||i.focus())},t.onQuarterKeyDown=function(e,n){var r,o,a=e.key;if(!t.props.disabledKeyboardNavigation)switch(a){case zv.Enter:t.onQuarterClick(e,n),null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,t.props.selected);break;case zv.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(4===n?1:n+1,Th(t.props.preSelection,1));break;case zv.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(1===n?4:n-1,_h(t.props.preSelection,1))}},t.isMonthDisabledForLabelDate=function(e){var n,r=t.props,o=r.day,a=r.minDate,i=r.maxDate,s=r.excludeDates,l=r.includeDates,c=yh(o,e);return{isDisabled:null!==(n=(a||i||s||l)&&mg(c,t.props))&&void 0!==n&&n,labelDate:c}},t.isMonthDisabled=function(e){return t.isMonthDisabledForLabelDate(e).isDisabled},t.getMonthClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.preSelection,s=n.monthClassName,l=s?s(yh(r,e)):void 0,c=t.getSelection();return Ld("react-datepicker__month-text","react-datepicker__month-".concat(e),l,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":c?t.isSelectMonthInList(r,e,c):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&i&&t.isSelectedMonth(r,e,i)&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":o&&a?vg(o,a,e,r):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(r,e)})},t.getTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=xh(t.props.preSelection),r=t.isMonthDisabledForLabelDate(n).isDisabled;return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getQuarterTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=Sh(t.props.preSelection),r=yg(t.props.day,t.props);return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getAriaLabel=function(e){var n=t.props,r=n.chooseDayAriaLabelPrefix,o=void 0===r?"Choose":r,a=n.disabledDayAriaLabelPrefix,i=void 0===a?"Not available":a,s=n.day,l=n.locale,c=yh(s,e),u=t.isDisabled(c)||t.isExcluded(c)?i:o;return"".concat(u," ").concat(Vv(c,"MMMM yyyy",l))},t.getQuarterClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.selected,s=n.minDate,l=n.maxDate,c=n.excludeDates,u=n.includeDates,d=n.filterDate,f=n.preSelection,p=n.disabledKeyboardNavigation,h=(s||l||c||u||d)&&yg(bh(r,e),t.props);return Ld("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":h,"react-datepicker__quarter-text--selected":i?t.isSelectedQuarter(r,e,i):void 0,"react-datepicker__quarter-text--keyboard-selected":!p&&f&&t.isSelectedQuarter(r,e,f)&&!h,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":o&&a?xg(o,a,e,r):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(r,e)})},t.getMonthContent=function(e){var n=t.props,r=n.showFullMonthYearPicker,o=n.renderMonthContent,a=n.locale,i=n.day,s=fg(e,a),l=dg(e,a);return o?o(e,s,l,i):r?l:s},t.getQuarterContent=function(e){var n,r=t.props,o=r.renderQuarterContent,a=function(e,t){return Vv(bh(Yv(),e),"QQQ",t)}(e,r.locale);return null!==(n=null===o||void 0===o?void 0:o(e,a))&&void 0!==n?n:a},t.renderMonths=function(){var e,n=t.props,o=n.showTwoColumnMonthYearPicker,a=n.showFourColumnMonthYearPicker,i=n.day,s=n.selected,l=null===(e=$g[Gg(a,o)])||void 0===e?void 0:e.grid;return null===l||void 0===l?void 0:l.map((function(e,n){return r.createElement("div",{className:"react-datepicker__month-wrapper",key:n},e.map((function(e,n){return r.createElement("div",{ref:t.MONTH_REFS[e],key:n,onClick:function(n){t.onMonthClick(n,e)},onKeyDown:function(n){Bg(n)&&(n.preventDefault(),n.key=zv.Enter),t.onMonthKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(e)}:void 0,tabIndex:Number(t.getTabIndex(e)),className:t.getMonthClassNames(e),"aria-disabled":t.isMonthDisabled(e),role:"option","aria-label":t.getAriaLabel(e),"aria-current":t.isCurrentMonth(i,e)?"date":void 0,"aria-selected":s?t.isSelectedMonth(i,e,s):void 0},t.getMonthContent(e))})))}))},t.renderQuarters=function(){var e=t.props,n=e.day,o=e.selected;return r.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(e,a){return r.createElement("div",{key:a,ref:t.QUARTER_REFS[a],role:"option",onClick:function(n){t.onQuarterClick(n,e)},onKeyDown:function(n){t.onQuarterKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(e)}:void 0,className:t.getQuarterClassNames(e),"aria-selected":o?t.isSelectedQuarter(n,e,o):void 0,tabIndex:Number(t.getQuarterTabIndex(e)),"aria-current":t.isCurrentQuarter(n,e)?"date":void 0},t.getQuarterContent(e))})))},t.getClassNames=function(){var e=t.props,n=e.selectingDate,r=e.selectsStart,o=e.selectsEnd;return Ld("react-datepicker__month",{"react-datepicker__month--selecting-range":n&&(r||o)},{"react-datepicker__monthPicker":e.showMonthYearPicker},{"react-datepicker__quarterPicker":e.showQuarterYearPicker},{"react-datepicker__weekPicker":e.showWeekPicker})},t}return Lv(t,e),t.prototype.getSelection=function(){var e=this.props,t=e.selected,n=e.selectedDates;return e.selectsMultiple?n:t?[t]:void 0},t.prototype.render=function(){var e=this.props,t=e.showMonthYearPicker,n=e.showQuarterYearPicker,o=e.day,a=e.ariaLabelPrefix,i=void 0===a?"Month ":a,s=i?i.trim()+" ":"";return r.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(s).concat(Vv(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},t?this.renderMonths():n?this.renderQuarters():this.renderWeeks())},t}(r.Component),Jg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map((function(e,n){return r.createElement("div",{className:t.isSelectedMonth(n)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,n),"aria-selected":t.isSelectedMonth(n)?"true":void 0},t.isSelectedMonth(n)?r.createElement("span",{className:"react-datepicker__month-option--selected"},"\u2713"):"",e)}))},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return Lv(t,e),t.prototype.render=function(){return r.createElement(Hv,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),Zg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map((function(e,t){return r.createElement("option",{key:e,value:t},e)}))},t.renderSelectMode=function(e){return r.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(e){return t.onChange(parseInt(e.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,n){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},n[t.props.month]))},t.renderDropdown=function(e){return r.createElement(Jg,Iv({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var n=t.state.dropdownVisible,r=[t.renderReadView(!n,e)];return n&&r.unshift(t.renderDropdown(e)),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e,t=this,n=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(e){return fg(e,t.props.locale)}:function(e){return dg(e,t.props.locale)});switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode(n);break;case"select":e=this.renderSelectMode(n)}return r.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component);function ey(e,t){for(var n=[],r=Xv(e),o=Xv(t);!Uh(r,o);)n.push(Yv(r)),r=jh(r,1);return n}var ty=function(e){function t(t){var n=e.call(this,t)||this;return n.renderOptions=function(){return n.state.monthYearsList.map((function(e){var t=Vh(e),o=rg(n.props.date,e)&&og(n.props.date,e);return r.createElement("div",{className:o?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":o?"true":void 0},o?r.createElement("span",{className:"react-datepicker__month-year-option--selected"},"\u2713"):"",Vv(e,n.props.dateFormat,n.props.locale))}))},n.onChange=function(e){return n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.state={monthYearsList:ey(n.props.minDate,n.props.maxDate)},n}return Lv(t,e),t.prototype.render=function(){var e=Ld({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return r.createElement(Hv,{className:e,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),ny=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Xv(t.props.minDate),n=Xv(t.props.maxDate),o=[];!Uh(e,n);){var a=Vh(e);o.push(r.createElement("option",{key:a,value:a},Vv(e,t.props.dateFormat,t.props.locale))),e=jh(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:Vh(Xv(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var n=Vv(t.props.date,t.props.dateFormat,t.props.locale);return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},n))},t.renderDropdown=function(){return r.createElement(ty,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown();var n=Yv(e);rg(t.props.date,n)&&og(t.props.date,n)||t.props.onChange(n)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ry=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.state={height:null},n.scrollToTheSelectedTime=function(){requestAnimationFrame((function(){var e,r,o;n.list&&(n.list.scrollTop=null!==(o=n.centerLi&&t.calcCenterPosition(n.props.monthRef?n.props.monthRef.clientHeight-(null!==(r=null===(e=n.header)||void 0===e?void 0:e.clientHeight)&&void 0!==r?r:0):n.list.clientHeight,n.centerLi))&&void 0!==o?o:0)}))},n.handleClick=function(e){var t,r;(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)||null===(r=(t=n.props).onChange)||void 0===r||r.call(t,e)},n.isSelectedTime=function(e){return n.props.selected&&(t=n.props.selected,r=e,Ig(t).getTime()===Ig(r).getTime());var t,r},n.isDisabledTime=function(e){return(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)},n.liClasses=function(e){var r,o=["react-datepicker__time-list-item",n.props.timeClassName?n.props.timeClassName(e):void 0];return n.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),n.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),n.props.injectTimes&&(3600*Eh(e)+60*Ch(e)+Nh(e))%(60*(null!==(r=n.props.intervals)&&void 0!==r?r:t.defaultProps.intervals))!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},n.handleOnKeyDown=function(e,t){var r,o;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),(e.key===zv.ArrowUp||e.key===zv.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===zv.ArrowDown||e.key===zv.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===zv.Enter&&n.handleClick(t),null===(o=(r=n.props).handleOnKeyDown)||void 0===o||o.call(r,e)},n.renderTimes=function(){for(var e,o=[],a="string"===typeof n.props.format?n.props.format:"p",i=null!==(e=n.props.intervals)&&void 0!==e?e:t.defaultProps.intervals,s=n.props.selected||n.props.openToDate||Yv(),l=$v(s),c=n.props.injectTimes&&n.props.injectTimes.sort((function(e,t){return e.getTime()-t.getTime()})),u=60*function(e){var t=new Date(e.getFullYear(),e.getMonth(),e.getDate()),n=new Date(e.getFullYear(),e.getMonth(),e.getDate(),24);return Math.round((+n-+t)/36e5)}(s),d=u/i,f=0;f<d;f++){var p=Bh(l,f*i);if(o.push(p),c){var h=Rg(l,p,f,i,c);o=o.concat(h)}}var m=o.reduce((function(e,t){return t.getTime()<=s.getTime()?t:e}),o[0]);return o.map((function(e){return r.createElement("li",{key:e.valueOf(),onClick:n.handleClick.bind(n,e),className:n.liClasses(e),ref:function(t){e===m&&(n.centerLi=t)},onKeyDown:function(t){n.handleOnKeyDown(t,e)},tabIndex:e===m?0:-1,role:"option","aria-selected":n.isSelectedTime(e)?"true":void 0,"aria-disabled":n.isDisabledTime(e)?"true":void 0},Vv(e,a,n.props.locale))}))},n.renderTimeCaption=function(){return!1===n.props.showTimeCaption?r.createElement(r.Fragment,null):r.createElement("div",{className:"react-datepicker__header react-datepicker__header--time ".concat(n.props.showTimeSelectOnly?"react-datepicker__header--time--only":""),ref:function(e){n.header=e}},r.createElement("div",{className:"react-datepicker-time__header"},n.props.timeCaption))},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{intervals:30,todayButton:null,timeCaption:"Time",showTimeCaption:!0}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.scrollToTheSelectedTime(),this.observeDatePickerHeightChanges()},t.prototype.componentWillUnmount=function(){var e;null===(e=this.resizeObserver)||void 0===e||e.disconnect()},t.prototype.observeDatePickerHeightChanges=function(){var e=this,t=this.props.monthRef;this.updateContainerHeight(),t&&(this.resizeObserver=new ResizeObserver((function(){e.updateContainerHeight()})),this.resizeObserver.observe(t))},t.prototype.updateContainerHeight=function(){this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight})},t.prototype.render=function(){var e,n=this,o=this.state.height;return r.createElement("div",{className:"react-datepicker__time-container ".concat((null!==(e=this.props.todayButton)&&void 0!==e?e:t.defaultProps.todayButton)?"react-datepicker__time-container--with-today-button":"")},this.renderTimeCaption(),r.createElement("div",{className:"react-datepicker__time"},r.createElement("div",{className:"react-datepicker__time-box"},r.createElement("ul",{className:"react-datepicker__time-list",ref:function(e){n.list=e},style:o?{height:o}:{},role:"listbox","aria-label":this.props.timeCaption},this.renderTimes()))))},t.calcCenterPosition=function(e,t){return t.offsetTop-(e/2-t.clientHeight/2)},t}(r.Component),oy=function(e){function t(t){var n=e.call(this,t)||this;return n.YEAR_REFS=Fv([],Array(n.props.yearItemNumber),!0).map((function(){return(0,r.createRef)()})),n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.isExcluded=function(e){return hg(e,{excludeDates:n.props.excludeDates})},n.selectingDate=function(){var e;return null!==(e=n.props.selectingDate)&&void 0!==e?e:n.props.preSelection},n.updateFocusOnPaginate=function(e){window.requestAnimationFrame((function(){var t,r;null===(r=null===(t=n.YEAR_REFS[e])||void 0===t?void 0:t.current)||void 0===r||r.focus()}))},n.handleYearClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleYearNavigation=function(e,t){var r,o,a,i,s=n.props,l=s.date,c=s.yearItemNumber;if(void 0!==l&&void 0!==c){var u=Lg(l,c).startPeriod;n.isDisabled(t)||n.isExcluded(t)||(null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,t),e-u<0?n.updateFocusOnPaginate(c-(u-e)):e-u>=c?n.updateFocusOnPaginate(Math.abs(c-(e-u))):null===(i=null===(a=n.YEAR_REFS[e-u])||void 0===a?void 0:a.current)||void 0===i||i.focus())}},n.isSameDay=function(e,t){return ig(e,t)},n.isCurrentYear=function(e){return e===wh(Yv())},n.isRangeStart=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.startDate)},n.isRangeEnd=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.endDate)},n.isInRange=function(e){return bg(e,n.props.startDate,n.props.endDate)},n.isInSelectingRange=function(e){var t=n.props,r=t.selectsStart,o=t.selectsEnd,a=t.selectsRange,i=t.startDate,s=t.endDate;return!(!(r||o||a)||!n.selectingDate())&&(r&&s?bg(e,n.selectingDate(),s):(o&&i||!(!a||!i||s))&&bg(e,i,n.selectingDate()))},n.isSelectingRangeStart=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.startDate,a=r.selectsStart,i=Qh(Yv(),e);return rg(i,a?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isSelectingRangeEnd=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.endDate,a=r.selectsEnd,i=r.selectsRange,s=Qh(Yv(),e);return rg(s,a||i?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isKeyboardSelected=function(e){if(void 0!==n.props.date&&null!=n.props.selected&&null!=n.props.preSelection){var t=n.props,r=t.minDate,o=t.maxDate,a=t.excludeDates,i=t.includeDates,s=t.filterDate,l=Jv(Qh(n.props.date,e)),c=(r||o||a||i||s)&&wg(e,n.props);return!n.props.disabledKeyboardNavigation&&!n.props.inline&&!ig(l,Jv(n.props.selected))&&ig(l,Jv(n.props.preSelection))&&!c}},n.isSelectedYear=function(e){var t=n.props,r=t.selectsMultiple,o=t.selected,a=t.selectedDates;return r?null===a||void 0===a?void 0:a.some((function(t){return e===wh(t)})):!o||e===wh(o)},n.onYearClick=function(e,t){var r=n.props.date;void 0!==r&&n.handleYearClick(Jv(Qh(r,t)),e)},n.onYearKeyDown=function(e,t){var r,o,a=e.key,i=n.props,s=i.date,l=i.yearItemNumber,c=i.handleOnKeyDown;if(a!==zv.Tab&&e.preventDefault(),!n.props.disabledKeyboardNavigation)switch(a){case zv.Enter:if(null==n.props.selected)break;n.onYearClick(e,t),null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,n.props.selected);break;case zv.ArrowRight:if(null==n.props.preSelection)break;n.handleYearNavigation(t+1,Mh(n.props.preSelection,1));break;case zv.ArrowLeft:if(null==n.props.preSelection)break;n.handleYearNavigation(t-1,Rh(n.props.preSelection,1));break;case zv.ArrowUp:if(void 0===s||void 0===l||null==n.props.preSelection)break;var u=Lg(s,l).startPeriod;if((p=t-(f=3))<u){var d=l%f;t>=u&&t<u+d?f=d:f+=d,p=t-f}n.handleYearNavigation(p,Rh(n.props.preSelection,f));break;case zv.ArrowDown:if(void 0===s||void 0===l||null==n.props.preSelection)break;var f,p,h=Lg(s,l).endPeriod;if((p=t+(f=3))>h){d=l%f;t<=h&&t>h-d?f=d:f+=d,p=t+f}n.handleYearNavigation(p,Mh(n.props.preSelection,f))}c&&c(e)},n.getYearClassNames=function(e){var t=n.props,r=t.date,o=t.minDate,a=t.maxDate,i=t.excludeDates,s=t.includeDates,l=t.filterDate,c=t.yearClassName;return Ld("react-datepicker__year-text","react-datepicker__year-".concat(e),r?null===c||void 0===c?void 0:c(Qh(r,e)):void 0,{"react-datepicker__year-text--selected":n.isSelectedYear(e),"react-datepicker__year-text--disabled":(o||a||i||s||l)&&wg(e,n.props),"react-datepicker__year-text--keyboard-selected":n.isKeyboardSelected(e),"react-datepicker__year-text--range-start":n.isRangeStart(e),"react-datepicker__year-text--range-end":n.isRangeEnd(e),"react-datepicker__year-text--in-range":n.isInRange(e),"react-datepicker__year-text--in-selecting-range":n.isInSelectingRange(e),"react-datepicker__year-text--selecting-range-start":n.isSelectingRangeStart(e),"react-datepicker__year-text--selecting-range-end":n.isSelectingRangeEnd(e),"react-datepicker__year-text--today":n.isCurrentYear(e)})},n.getYearTabIndex=function(e){if(n.props.disabledKeyboardNavigation||null==n.props.preSelection)return"-1";var t=wh(n.props.preSelection),r=wg(e,n.props);return e!==t||r?"-1":"0"},n.getYearContent=function(e){return n.props.renderYearContent?n.props.renderYearContent(e):e},n}return Lv(t,e),t.prototype.render=function(){var e=this,t=[],n=this.props,o=n.date,a=n.yearItemNumber,i=n.onYearMouseEnter,s=n.onYearMouseLeave;if(void 0===o)return null;for(var l=Lg(o,a),c=l.startPeriod,u=l.endPeriod,d=function(n){t.push(r.createElement("div",{ref:f.YEAR_REFS[n-c],onClick:function(t){e.onYearClick(t,n)},onKeyDown:function(t){Bg(t)&&(t.preventDefault(),t.key=zv.Enter),e.onYearKeyDown(t,n)},tabIndex:Number(f.getYearTabIndex(n)),className:f.getYearClassNames(n),onMouseEnter:f.props.usePointerEvent?void 0:function(e){return i(e,n)},onPointerEnter:f.props.usePointerEvent?function(e){return i(e,n)}:void 0,onMouseLeave:f.props.usePointerEvent?void 0:function(e){return s(e,n)},onPointerLeave:f.props.usePointerEvent?function(e){return s(e,n)}:void 0,key:n,"aria-current":f.isCurrentYear(n)?"date":void 0},f.getYearContent(n)))},f=this,p=c;p<=u;p++)d(p);return r.createElement("div",{className:"react-datepicker__year"},r.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},t))},t}(r.Component);function ay(e,t,n,r){for(var o=[],a=0;a<2*t+1;a++){var i=e+t-a,s=!0;n&&(s=wh(n)<=i),r&&s&&(s=wh(r)>=i),s&&o.push(i)}return o}var iy=function(e){function t(t){var n=e.call(this,t)||this;n.renderOptions=function(){var e=n.props.year,t=n.state.yearsList.map((function(t){return r.createElement("div",{className:e===t?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":e===t?"true":void 0},e===t?r.createElement("span",{className:"react-datepicker__year-option--selected"},"\u2713"):"",t)})),o=n.props.minDate?wh(n.props.minDate):null,a=n.props.maxDate?wh(n.props.maxDate):null;return a&&n.state.yearsList.find((function(e){return e===a}))||t.unshift(r.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:n.incrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),o&&n.state.yearsList.find((function(e){return e===o}))||t.push(r.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:n.decrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),t},n.onChange=function(e){n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.shiftYears=function(e){var t=n.state.yearsList.map((function(t){return t+e}));n.setState({yearsList:t})},n.incrementYears=function(){return n.shiftYears(1)},n.decrementYears=function(){return n.shiftYears(-1)};var o=t.yearDropdownItemNumber,a=t.scrollableYearDropdown,i=o||(a?10:5);return n.state={yearsList:ay(n.props.year,i,n.props.minDate,n.props.maxDate)},n.dropdownRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.componentDidMount=function(){var e=this.dropdownRef.current;if(e){var t=e.children?Array.from(e.children):null,n=t?t.find((function(e){return e.ariaSelected})):null;e.scrollTop=n&&n instanceof HTMLElement?n.offsetTop+(n.clientHeight-e.clientHeight)/2:(e.scrollHeight-e.clientHeight)/2}},t.prototype.render=function(){var e=Ld({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return r.createElement(Hv,{className:e,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),sy=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?wh(t.props.minDate):1900,n=t.props.maxDate?wh(t.props.maxDate):2100,o=[],a=e;a<=n;a++)o.push(r.createElement("option",{key:a,value:a},a));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(e){return t.toggleDropdown(e)}},r.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return r.createElement(iy,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},(function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)}))},t.handleYearChange=function(e,n){var r;null===(r=t.onSelect)||void 0===r||r.call(t,e,n),t.setOpen()},t.onSelect=function(e,n){var r,o;null===(o=(r=t.props).onSelect)||void 0===o||o.call(r,e,n)},t.setOpen=function(){var e,n;null===(n=(e=t.props).setOpen)||void 0===n||n.call(e,!0)},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ly=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],cy=function(e){function t(n){var o=e.call(this,n)||this;return o.monthContainer=void 0,o.handleClickOutside=function(e){o.props.onClickOutside(e)},o.setClickOutsideRef=function(){return o.containerRef.current},o.handleDropdownFocus=function(e){var t,n;(function(e){var t=(e.className||"").split(/\s+/);return ly.some((function(e){return t.indexOf(e)>=0}))})(e.target)&&(null===(n=(t=o.props).onDropdownFocus)||void 0===n||n.call(t,e))},o.getDateInView=function(){var e=o.props,t=e.preSelection,n=e.selected,r=e.openToDate,a=Tg(o.props),i=_g(o.props),s=Yv(),l=r||n||t;return l||(a&&Op(s,a)?a:i&&Uh(s,i)?i:s)},o.increaseMonth=function(){o.setState((function(e){return{date:jh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.decreaseMonth=function(){o.setState((function(e){return{date:Dh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.handleDayClick=function(e,t,n){o.props.onSelect(e,t,n),o.props.setPreSelection&&o.props.setPreSelection(e)},o.handleDayMouseEnter=function(e){o.setState({selectingDate:e}),o.props.onDayMouseEnter&&o.props.onDayMouseEnter(e)},o.handleMonthMouseLeave=function(){o.setState({selectingDate:void 0}),o.props.onMonthMouseLeave&&o.props.onMonthMouseLeave()},o.handleYearMouseEnter=function(e,t){o.setState({selectingDate:Qh(Yv(),t)}),o.props.onYearMouseEnter&&o.props.onYearMouseEnter(e,t)},o.handleYearMouseLeave=function(e,t){o.props.onYearMouseLeave&&o.props.onYearMouseLeave(e,t)},o.handleYearChange=function(e){var t,n,r,a;null===(n=(t=o.props).onYearChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0}),o.props.adjustDateOnChange&&(o.props.onSelect(e),null===(a=(r=o.props).setOpen)||void 0===a||a.call(r,!0)),o.props.setPreSelection&&o.props.setPreSelection(e)},o.getEnabledPreSelectionDateForMonth=function(e){if(!pg(e,o.props))return e;for(var t=Xv(e),n=Kh(ng(e),t),r=null,a=0;a<=n;a++){var i=gp(t,a);if(!pg(i,o.props)){r=i;break}}return r},o.handleMonthChange=function(e){var t,n,r,a=null!==(t=o.getEnabledPreSelectionDateForMonth(e))&&void 0!==t?t:e;o.handleCustomMonthChange(a),o.props.adjustDateOnChange&&(o.props.onSelect(a),null===(r=(n=o.props).setOpen)||void 0===r||r.call(n,!0)),o.props.setPreSelection&&o.props.setPreSelection(a)},o.handleCustomMonthChange=function(e){var t,n;null===(n=(t=o.props).onMonthChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0})},o.handleMonthYearChange=function(e){o.handleYearChange(e),o.handleMonthChange(e)},o.changeYear=function(e){o.setState((function(t){return{date:Qh(t.date,Number(e))}}),(function(){return o.handleYearChange(o.state.date)}))},o.changeMonth=function(e){o.setState((function(t){return{date:yh(t.date,Number(e))}}),(function(){return o.handleMonthChange(o.state.date)}))},o.changeMonthYear=function(e){o.setState((function(t){return{date:Qh(yh(t.date,xh(e)),wh(e))}}),(function(){return o.handleMonthYearChange(o.state.date)}))},o.header=function(e){void 0===e&&(e=o.state.date);var t=Gv(e,o.props.locale,o.props.calendarStartDay),n=[];return o.props.showWeekNumbers&&n.push(r.createElement("div",{key:"W",className:"react-datepicker__day-name"},o.props.weekLabel||"#")),n.concat([0,1,2,3,4,5,6].map((function(e){var n=gp(t,e),a=o.formatWeekday(n,o.props.locale),i=o.props.weekDayClassName?o.props.weekDayClassName(n):void 0;return r.createElement("div",{key:e,"aria-label":Vv(n,"EEEE",o.props.locale),className:Ld("react-datepicker__day-name",i)},a)})))},o.formatWeekday=function(e,t){return o.props.formatWeekDay?function(e,t,n){return t(Vv(e,"EEEE",n))}(e,o.props.formatWeekDay,t):o.props.useWeekdaysShort?function(e,t){return Vv(e,"EEE",t)}(e,t):function(e,t){return Vv(e,"EEEEEE",t)}(e,t)},o.decreaseYear=function(){o.setState((function(e){var n;return{date:Rh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.clearSelectingDate=function(){o.setState({selectingDate:void 0})},o.renderPreviousButton=function(){var e,n,a;if(!o.props.renderCustomHeader){var i,s=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,l=o.props.showPreviousMonths?s-1:0,c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:l,u=Dh(o.state.date,c);switch(!0){case o.props.showMonthYearPicker:i=Dg(o.state.date,o.props);break;case o.props.showYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Jv(Rh(e,a)),a).endPeriod,s=r&&wh(r);return s&&s>i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=_h(Lp(e),1);return r&&Oh(r,a)>0||o&&o.every((function(e){return Oh(e,a)>0}))||!1}(o.state.date,o.props);break;default:i=Ng(u,o.props)}if(((null!==(a=o.props.forceShowMonthNavigation)&&void 0!==a?a:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!i)&&!o.props.showTimeSelectOnly){var d=["react-datepicker__navigation","react-datepicker__navigation--previous"],f=o.decreaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(f=o.decreaseYear),i&&o.props.showDisabledMonthNavigation&&(d.push("react-datepicker__navigation--previous--disabled"),f=void 0);var p=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,h=o.props,m=h.previousMonthButtonLabel,v=void 0===m?t.defaultProps.previousMonthButtonLabel:m,g=h.previousYearButtonLabel,y=void 0===g?t.defaultProps.previousYearButtonLabel:g,b=o.props,w=b.previousMonthAriaLabel,x=void 0===w?"string"===typeof v?v:"Previous Month":w,k=b.previousYearAriaLabel,S=void 0===k?"string"===typeof y?y:"Previous Year":k;return r.createElement("button",{type:"button",className:d.join(" "),onClick:f,onKeyDown:o.props.handleOnKeyDown,"aria-label":p?S:x},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"].join(" ")},p?y:v))}}},o.increaseYear=function(){o.setState((function(e){var n;return{date:Mh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.renderNextButton=function(){var e;if(!o.props.renderCustomHeader){var n;switch(!0){case o.props.showMonthYearPicker:n=Pg(o.state.date,o.props);break;case o.props.showYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Mh(e,a),a).startPeriod,s=r&&wh(r);return s&&s<i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Th(kh(e),1);return r&&Oh(a,r)>0||o&&o.every((function(e){return Oh(a,e)>0}))||!1}(o.state.date,o.props);break;default:n=jg(o.state.date,o.props)}if(((null!==(e=o.props.forceShowMonthNavigation)&&void 0!==e?e:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!n)&&!o.props.showTimeSelectOnly){var a=["react-datepicker__navigation","react-datepicker__navigation--next"];o.props.showTimeSelect&&a.push("react-datepicker__navigation--next--with-time"),o.props.todayButton&&a.push("react-datepicker__navigation--next--with-today-button");var i=o.increaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(i=o.increaseYear),n&&o.props.showDisabledMonthNavigation&&(a.push("react-datepicker__navigation--next--disabled"),i=void 0);var s=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,l=o.props,c=l.nextMonthButtonLabel,u=void 0===c?t.defaultProps.nextMonthButtonLabel:c,d=l.nextYearButtonLabel,f=void 0===d?t.defaultProps.nextYearButtonLabel:d,p=o.props,h=p.nextMonthAriaLabel,m=void 0===h?"string"===typeof u?u:"Next Month":h,v=p.nextYearAriaLabel,g=void 0===v?"string"===typeof f?f:"Next Year":v;return r.createElement("button",{type:"button",className:a.join(" "),onClick:i,onKeyDown:o.props.handleOnKeyDown,"aria-label":s?g:m},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"].join(" ")},s?f:u))}}},o.renderCurrentMonth=function(e){void 0===e&&(e=o.state.date);var t=["react-datepicker__current-month"];return o.props.showYearDropdown&&t.push("react-datepicker__current-month--hasYearDropdown"),o.props.showMonthDropdown&&t.push("react-datepicker__current-month--hasMonthDropdown"),o.props.showMonthYearDropdown&&t.push("react-datepicker__current-month--hasMonthYearDropdown"),r.createElement("h2",{className:t.join(" ")},Vv(e,o.props.dateFormat,o.props.locale))},o.renderYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showYearDropdown&&!e)return r.createElement(sy,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeYear,year:wh(o.state.date)}))},o.renderMonthDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthDropdown&&!e)return r.createElement(Zg,Iv({},t.defaultProps,o.props,{month:xh(o.state.date),onChange:o.changeMonth}))},o.renderMonthYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthYearDropdown&&!e)return r.createElement(ny,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeMonthYear}))},o.handleTodayButtonClick=function(e){o.props.onSelect(eg(),e),o.props.setPreSelection&&o.props.setPreSelection(eg())},o.renderTodayButton=function(){if(o.props.todayButton&&!o.props.showTimeSelectOnly)return r.createElement("div",{className:"react-datepicker__today-button",onClick:o.handleTodayButtonClick},o.props.todayButton)},o.renderDefaultHeader=function(e){var t=e.monthDate,n=e.i;return r.createElement("div",{className:"react-datepicker__header ".concat(o.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},o.renderCurrentMonth(t),r.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(o.props.dropdownMode),onFocus:o.handleDropdownFocus},o.renderMonthDropdown(0!==n),o.renderMonthYearDropdown(0!==n),o.renderYearDropdown(0!==n)),r.createElement("div",{className:"react-datepicker__day-names"},o.header(t)))},o.renderCustomHeader=function(e){var t,n,a=e.monthDate,i=e.i;if(o.props.showTimeSelect&&!o.state.monthContainer||o.props.showTimeSelectOnly)return null;var s=Ng(o.state.date,o.props),l=jg(o.state.date,o.props),c=Dg(o.state.date,o.props),u=Pg(o.state.date,o.props),d=!o.props.showMonthYearPicker&&!o.props.showQuarterYearPicker&&!o.props.showYearPicker;return r.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:o.props.onDropdownFocus},null===(n=(t=o.props).renderCustomHeader)||void 0===n?void 0:n.call(t,Iv(Iv({},o.state),{customHeaderCount:i,monthDate:a,changeMonth:o.changeMonth,changeYear:o.changeYear,decreaseMonth:o.decreaseMonth,increaseMonth:o.increaseMonth,decreaseYear:o.decreaseYear,increaseYear:o.increaseYear,prevMonthButtonDisabled:s,nextMonthButtonDisabled:l,prevYearButtonDisabled:c,nextYearButtonDisabled:u})),d&&r.createElement("div",{className:"react-datepicker__day-names"},o.header(a)))},o.renderYearHeader=function(e){var n=e.monthDate,a=o.props,i=a.showYearPicker,s=a.yearItemNumber,l=Lg(n,void 0===s?t.defaultProps.yearItemNumber:s),c=l.startPeriod,u=l.endPeriod;return r.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(c," - ").concat(u):wh(n))},o.renderHeader=function(e){var t=e.monthDate,n=e.i,r={monthDate:t,i:void 0===n?0:n};switch(!0){case void 0!==o.props.renderCustomHeader:return o.renderCustomHeader(r);case o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker:return o.renderYearHeader(r);default:return o.renderDefaultHeader(r)}},o.renderMonths=function(){var e,n;if(!o.props.showTimeSelectOnly&&!o.props.showYearPicker){for(var a=[],i=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,s=o.props.showPreviousMonths?i-1:0,l=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(o.state.date,s):Dh(o.state.date,s),c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:s,u=0;u<i;++u){var d=u-c+s,f=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(l,d):jh(l,d),p="month-".concat(u),h=u<i-1,m=u>0;a.push(r.createElement("div",{key:p,ref:function(e){o.monthContainer=null!==e&&void 0!==e?e:void 0},className:"react-datepicker__month-container"},o.renderHeader({monthDate:f,i:u}),r.createElement(Xg,Iv({},t.defaultProps,o.props,{containerRef:o.containerRef,ariaLabelPrefix:o.props.monthAriaLabelPrefix,day:f,onDayClick:o.handleDayClick,handleOnKeyDown:o.props.handleOnDayKeyDown,handleOnMonthKeyDown:o.props.handleOnKeyDown,onDayMouseEnter:o.handleDayMouseEnter,onMouseLeave:o.handleMonthMouseLeave,orderInDisplay:u,selectingDate:o.state.selectingDate,monthShowsDuplicateDaysEnd:h,monthShowsDuplicateDaysStart:m}))))}return a}},o.renderYears=function(){if(!o.props.showTimeSelectOnly)return o.props.showYearPicker?r.createElement("div",{className:"react-datepicker__year--container"},o.renderHeader({monthDate:o.state.date}),r.createElement(oy,Iv({},t.defaultProps,o.props,{selectingDate:o.state.selectingDate,date:o.state.date,onDayClick:o.handleDayClick,clearSelectingDate:o.clearSelectingDate,onYearMouseEnter:o.handleYearMouseEnter,onYearMouseLeave:o.handleYearMouseLeave}))):void 0},o.renderTimeSection=function(){if(o.props.showTimeSelect&&(o.state.monthContainer||o.props.showTimeSelectOnly))return r.createElement(ry,Iv({},t.defaultProps,o.props,{onChange:o.props.onTimeChange,format:o.props.timeFormat,intervals:o.props.timeIntervals,monthRef:o.state.monthContainer}))},o.renderInputTimeSection=function(){var e=o.props.selected?new Date(o.props.selected):void 0,n=e&&qv(e)&&Boolean(o.props.selected)?"".concat(Ag(e.getHours()),":").concat(Ag(e.getMinutes())):"";if(o.props.showTimeInput)return r.createElement(Ug,Iv({},t.defaultProps,o.props,{date:e,timeString:n,onChange:o.props.onTimeChange}))},o.renderAriaLiveRegion=function(){var e,n,a=Lg(o.state.date,null!==(e=o.props.yearItemNumber)&&void 0!==e?e:t.defaultProps.yearItemNumber),i=a.startPeriod,s=a.endPeriod;return n=o.props.showYearPicker?"".concat(i," - ").concat(s):o.props.showMonthYearPicker||o.props.showQuarterYearPicker?wh(o.state.date):"".concat(dg(xh(o.state.date),o.props.locale)," ").concat(wh(o.state.date)),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},o.state.isRenderAriaLiveMessage&&n)},o.renderChildren=function(){if(o.props.children)return r.createElement("div",{className:"react-datepicker__children-container"},o.props.children)},o.containerRef=(0,r.createRef)(),o.state={date:o.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:12}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){var e=this;this.props.showTimeSelect&&(this.assignMonthContainer=void e.setState({monthContainer:e.monthContainer}))},t.prototype.componentDidUpdate=function(e){var t=this;if(!this.props.preSelection||ig(this.props.preSelection,e.preSelection)&&this.props.monthSelectedIn===e.monthSelectedIn)this.props.openToDate&&!ig(this.props.openToDate,e.openToDate)&&this.setState({date:this.props.openToDate});else{var n=!og(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},(function(){return n&&t.handleCustomMonthChange(t.state.date)}))}},t.prototype.render=function(){var e=this.props.container||Bv;return r.createElement(Hv,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},r.createElement("div",{style:{display:"contents"},ref:this.containerRef},r.createElement(e,{className:Ld("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},t}(r.Component),uy=function(e){var t=e.icon,n=e.className,o=void 0===n?"":n,a=e.onClick,i="react-datepicker__calendar-icon";if("string"===typeof t)return r.createElement("i",{className:"".concat(i," ").concat(t," ").concat(o),"aria-hidden":"true",onClick:a});if(r.isValidElement(t)){var s=t;return r.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(i," ").concat(o),onClick:function(e){"function"===typeof s.props.onClick&&s.props.onClick(e),"function"===typeof a&&a(e)}})}return r.createElement("svg",{className:"".concat(i," ").concat(o),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:a},r.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},dy=function(e){function t(t){var n=e.call(this,t)||this;return n.portalRoot=null,n.el=document.createElement("div"),n}return Lv(t,e),t.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},t.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},t.prototype.render=function(){return i.createPortal(this.props.children,this.el)},t}(r.Component),fy=function(e){return(e instanceof HTMLAnchorElement||!e.disabled)&&-1!==e.tabIndex},py=function(e){function t(t){var n=e.call(this,t)||this;return n.getTabChildren=function(){var e;return Array.prototype.slice.call(null===(e=n.tabLoopRef.current)||void 0===e?void 0:e.querySelectorAll("[tabindex], a, button, input, select, textarea"),1,-1).filter(fy)},n.handleFocusStart=function(){var e=n.getTabChildren();e&&e.length>1&&e[e.length-1].focus()},n.handleFocusEnd=function(){var e=n.getTabChildren();e&&e.length>1&&e[0].focus()},n.tabLoopRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.render=function(){var e;return(null!==(e=this.props.enableTabLoop)&&void 0!==e?e:t.defaultProps.enableTabLoop)?r.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},r.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,r.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},t.defaultProps={enableTabLoop:!0},t}(r.Component);var hy,my=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e=this.props,n=e.className,o=e.wrapperClassName,a=e.hidePopper,i=void 0===a?t.defaultProps.hidePopper:a,s=e.popperComponent,l=e.targetComponent,c=e.enableTabLoop,u=e.popperOnKeyDown,d=e.portalId,f=e.portalHost,p=e.popperProps,h=e.showArrow,m=void 0;if(!i){var v=Ld("react-datepicker-popper",n);m=r.createElement(py,{enableTabLoop:c},r.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:v,"data-placement":p.placement,onKeyDown:u},s,h&&r.createElement(jv,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(m=(0,r.createElement)(this.props.popperContainer,{},m)),d&&!i&&(m=r.createElement(dy,{portalId:d,portalHost:f},m));var g=Ld("react-datepicker-wrapper",o);return r.createElement(r.Fragment,null,r.createElement("div",{ref:p.refs.setReference,className:g},l),m)},t}(r.Component),vy=(hy=my,function(e){var t,n,o,a="boolean"!==typeof e.hidePopper||e.hidePopper,i=(0,r.useRef)(null),s=Rv(Iv({open:!a,whileElementsMounted:nv,placement:e.popperPlacement,middleware:Fv([(n={padding:15},_e(_e({},ov(n)),{},{options:[n,o]})),fv(10),pv({element:i})],null!==(t=e.popperModifiers)&&void 0!==t?t:[],!0)},e.popperProps)),l=Iv(Iv({},e),{hidePopper:a,popperProps:Iv(Iv({},s),{arrowRef:i})});return r.createElement(hy,Iv({},l))}),gy="react-datepicker-ignore-onclickoutside";var yy="Date input not valid.",by=function(e){function t(n){var o=e.call(this,n)||this;return o.calendar=null,o.input=null,o.getPreSelection=function(){return o.props.openToDate?o.props.openToDate:o.props.selectsEnd&&o.props.startDate?o.props.startDate:o.props.selectsStart&&o.props.endDate?o.props.endDate:Yv()},o.modifyHolidays=function(){var e;return null===(e=o.props.holidays)||void 0===e?void 0:e.reduce((function(e,t){var n=new Date(t.date);return qv(n)?Fv(Fv([],e,!0),[Iv(Iv({},t),{date:n})],!1):e}),[])},o.calcInitialState=function(){var e,t=o.getPreSelection(),n=Tg(o.props),r=_g(o.props),a=n&&Op(t,$v(n))?n:r&&Uh(t,tg(r))?r:t;return{open:o.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:null!==(e=o.props.selectsRange?o.props.startDate:o.props.selected)&&void 0!==e?e:a,highlightDates:Og(o.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},o.resetHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!1}))},o.setHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!0}))},o.setHiddenStateOnVisibilityHidden=function(){"hidden"===document.visibilityState&&o.setHiddenStatus()},o.clearPreventFocusTimeout=function(){o.preventFocusTimeout&&clearTimeout(o.preventFocusTimeout)},o.setFocus=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.focus)||void 0===t||t.call(e,{preventScroll:!0})},o.setBlur=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.blur)||void 0===t||t.call(e),o.cancelFocusInput()},o.deferBlur=function(){requestAnimationFrame((function(){o.setBlur()}))},o.setOpen=function(e,t){void 0===t&&(t=!1),o.setState({open:e,preSelection:e&&o.state.open?o.state.preSelection:o.calcInitialState().preSelection,lastPreSelectChange:xy},(function(){e||o.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&o.deferBlur(),o.setState({inputValue:null})}))}))},o.inputOk=function(){return Tp(o.state.preSelection)},o.isCalendarOpen=function(){return void 0===o.props.open?o.state.open&&!o.props.disabled&&!o.props.readOnly:o.props.open},o.handleFocus=function(e){var t,n,r=o.state.wasHidden,a=!r||o.state.open;r&&o.resetHiddenStatus(),o.state.preventFocus||(null===(n=(t=o.props).onFocus)||void 0===n||n.call(t,e),!a||o.props.preventOpenOnFocus||o.props.readOnly||o.setOpen(!0)),o.setState({focused:!0})},o.sendFocusBackToInput=function(){o.preventFocusTimeout&&o.clearPreventFocusTimeout(),o.setState({preventFocus:!0},(function(){o.preventFocusTimeout=setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))}))},o.cancelFocusInput=function(){clearTimeout(o.inputFocusTimeout),o.inputFocusTimeout=void 0},o.deferFocusInput=function(){o.cancelFocusInput(),o.inputFocusTimeout=setTimeout((function(){return o.setFocus()}),1)},o.handleDropdownFocus=function(){o.cancelFocusInput()},o.handleBlur=function(e){var t,n;(!o.state.open||o.props.withPortal||o.props.showTimeInput)&&(null===(n=(t=o.props).onBlur)||void 0===n||n.call(t,e)),o.state.open&&!1===o.props.open&&o.setOpen(!1),o.setState({focused:!1})},o.handleCalendarClickOutside=function(e){var t,n;o.props.inline||o.setOpen(!1),null===(n=(t=o.props).onClickOutside)||void 0===n||n.call(t,e),o.props.withPortal&&e.preventDefault()},o.handleChange=function(){for(var e,n,r,a,i,s=[],l=0;l<arguments.length;l++)s[l]=arguments[l];var c=s[0];if(!o.props.onChangeRaw||(o.props.onChangeRaw.apply(o,s),c&&"function"===typeof c.isDefaultPrevented&&!c.isDefaultPrevented())){o.setState({inputValue:(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:null,lastPreSelectChange:wy});var u=o.props,d=u.selectsRange,f=u.startDate,p=u.endDate,h=null!==(e=o.props.dateFormat)&&void 0!==e?e:t.defaultProps.dateFormat,m=null!==(n=o.props.strictParsing)&&void 0!==n?n:t.defaultProps.strictParsing,v=(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:"";if(d){var g=v.split("-",2).map((function(e){return e.trim()})),y=g[0],b=g[1],w=Wv(null!==y&&void 0!==y?y:"",h,o.props.locale,m),x=Wv(null!==b&&void 0!==b?b:"",h,o.props.locale,m),k=(null===f||void 0===f?void 0:f.getTime())!==(null===w||void 0===w?void 0:w.getTime()),S=(null===p||void 0===p?void 0:p.getTime())!==(null===x||void 0===x?void 0:x.getTime());if(!k&&!S)return;if(w&&pg(w,o.props))return;if(x&&pg(x,o.props))return;null===(a=(r=o.props).onChange)||void 0===a||a.call(r,[w,x],c)}else{var E=Wv(v,h,o.props.locale,m,null!==(i=o.props.selected)&&void 0!==i?i:void 0);!E&&v||o.setSelected(E,c,!0)}}},o.handleSelect=function(e,t,n){if(o.props.shouldCloseOnSelect&&!o.props.showTimeSelect&&o.sendFocusBackToInput(),o.props.onChangeRaw&&o.props.onChangeRaw(t),o.setSelected(e,t,!1,n),o.props.showDateSelect&&o.setState({isRenderAriaLiveMessage:!0}),!o.props.shouldCloseOnSelect||o.props.showTimeSelect)o.setPreSelection(e);else if(!o.props.inline){o.props.selectsRange||o.setOpen(!1);var r=o.props,a=r.startDate,i=r.endDate;!a||i||!o.props.swapRange&&zg(e,a)||o.setOpen(!1)}},o.setSelected=function(e,t,n,r){var a,i,s=e;if(o.props.showYearPicker){if(null!==s&&wg(wh(s),o.props))return}else if(o.props.showMonthYearPicker){if(null!==s&&mg(s,o.props))return}else if(null!==s&&pg(s,o.props))return;var l=o.props,c=l.onChange,u=l.selectsRange,d=l.startDate,f=l.endDate,p=l.selectsMultiple,h=l.selectedDates,m=l.minTime,v=l.swapRange;if(!sg(o.props.selected,s)||o.props.allowSameDay||u||p)if(null!==s&&(!o.props.selected||n&&(o.props.showTimeSelect||o.props.showTimeSelectOnly||o.props.showTimeInput)||(s=Kv(s,{hour:Eh(o.props.selected),minute:Ch(o.props.selected),second:Nh(o.props.selected)})),n||!o.props.showTimeSelect&&!o.props.showTimeSelectOnly||m&&(s=Kv(s,{hour:m.getHours(),minute:m.getMinutes(),second:m.getSeconds()})),o.props.inline||o.setState({preSelection:s}),o.props.focusSelectedMonth||o.setState({monthSelectedIn:r})),u){var g=d&&!f,y=d&&f;!d&&!f?null===c||void 0===c||c([s,null],t):g&&(null===s?null===c||void 0===c||c([null,null],t):zg(s,d)?v?null===c||void 0===c||c([s,d],t):null===c||void 0===c||c([s,null],t):null===c||void 0===c||c([d,s],t)),y&&(null===c||void 0===c||c([s,null],t))}else if(p){if(null!==s)if(null===h||void 0===h?void 0:h.length)if(h.some((function(e){return ig(e,s)}))){var b=h.filter((function(e){return!ig(e,s)}));null===c||void 0===c||c(b,t)}else null===c||void 0===c||c(Fv(Fv([],h,!0),[s],!1),t);else null===c||void 0===c||c([s],t)}else null===c||void 0===c||c(s,t);n||(null===(i=(a=o.props).onSelect)||void 0===i||i.call(a,s,t),o.setState({inputValue:null}))},o.setPreSelection=function(e){var t=Tp(o.props.minDate),n=Tp(o.props.maxDate),r=!0;if(e){var a=$v(e);if(t&&n)r=lg(e,o.props.minDate,o.props.maxDate);else if(t){var i=$v(o.props.minDate);r=Uh(e,i)||sg(a,i)}else if(n){var s=tg(o.props.maxDate);r=Op(e,s)||sg(a,s)}}r&&o.setState({preSelection:e})},o.toggleCalendar=function(){o.setOpen(!o.state.open)},o.handleTimeChange=function(e){var t,n;if(!o.props.selectsRange&&!o.props.selectsMultiple){var r=o.props.selected?o.props.selected:o.getPreSelection(),a=o.props.selected?e:Kv(r,{hour:Eh(e),minute:Ch(e)});o.setState({preSelection:a}),null===(n=(t=o.props).onChange)||void 0===n||n.call(t,a),o.props.shouldCloseOnSelect&&!o.props.showTimeInput&&(o.sendFocusBackToInput(),o.setOpen(!1)),o.props.showTimeInput&&o.setOpen(!0),(o.props.showTimeSelectOnly||o.props.showTimeSelect)&&o.setState({isRenderAriaLiveMessage:!0}),o.setState({inputValue:null})}},o.onInputClick=function(){var e,t;o.props.disabled||o.props.readOnly||o.setOpen(!0),null===(t=(e=o.props).onInputClick)||void 0===t||t.call(e)},o.onInputKeyDown=function(e){var t,n,r,a,i,s;null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e);var l=e.key;if(o.state.open||o.props.inline||o.props.preventOpenOnFocus){if(o.state.open){if(l===zv.ArrowDown||l===zv.ArrowUp){e.preventDefault();var c=o.props.showTimeSelectOnly?".react-datepicker__time-list-item[tabindex='0']":o.props.showWeekPicker&&o.props.showWeekNumbers?'.react-datepicker__week-number[tabindex="0"]':o.props.showFullMonthYearPicker||o.props.showMonthYearPicker?'.react-datepicker__month-text[tabindex="0"]':'.react-datepicker__day[tabindex="0"]',u=(null===(a=o.calendar)||void 0===a?void 0:a.containerRef.current)instanceof Element&&o.calendar.containerRef.current.querySelector(c);return void(u instanceof HTMLElement&&u.focus({preventScroll:!0}))}var d=Yv(o.state.preSelection);l===zv.Enter?(e.preventDefault(),e.target.blur(),o.inputOk()&&o.state.lastPreSelectChange===xy?(o.handleSelect(d,e),!o.props.shouldCloseOnSelect&&o.setPreSelection(d)):o.setOpen(!1)):l===zv.Escape?(e.preventDefault(),e.target.blur(),o.sendFocusBackToInput(),o.setOpen(!1)):l===zv.Tab&&o.setOpen(!1),o.inputOk()||null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}}else l!==zv.ArrowDown&&l!==zv.ArrowUp&&l!==zv.Enter||null===(r=o.onInputClick)||void 0===r||r.call(o)},o.onPortalKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.setState({preventFocus:!0},(function(){o.setOpen(!1),setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))})))},o.onDayKeyDown=function(e){var t,n,r,a,i,s,l=o.props,c=l.minDate,u=l.maxDate,d=l.disabledKeyboardNavigation,f=l.showWeekPicker,p=l.shouldCloseOnSelect,h=l.locale,m=l.calendarStartDay,v=l.adjustDateOnChange,g=l.inline;if(null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e),!d){var y=e.key,b=e.shiftKey,w=Yv(o.state.preSelection),x=function(e,t){var n=t;switch(e){case zv.ArrowRight:n=f?qh(t,1):gp(t,1);break;case zv.ArrowLeft:n=f?Gh(t,1):Xh(t,1);break;case zv.ArrowUp:n=Gh(t,1);break;case zv.ArrowDown:n=qh(t,1);break;case zv.PageUp:n=b?Rh(t,1):Dh(t,1);break;case zv.PageDown:n=b?Mh(t,1):jh(t,1);break;case zv.Home:n=Gv(t,h,m);break;case zv.End:n=function(e){return ch(e)}(t)}return n};if(y===zv.Enter)return e.preventDefault(),o.handleSelect(w,e),void(!p&&o.setPreSelection(w));if(y===zv.Escape)return e.preventDefault(),o.setOpen(!1),void(o.inputOk()||null===(a=(r=o.props).onInputError)||void 0===a||a.call(r,{code:1,msg:yy}));var k=null;switch(y){case zv.ArrowLeft:case zv.ArrowRight:case zv.ArrowUp:case zv.ArrowDown:case zv.PageUp:case zv.PageDown:case zv.Home:case zv.End:k=function(e,t){for(var n=e,r=!1,a=0,i=x(e,t);!r;){if(a>=40){i=t;break}c&&i<c&&(n=zv.ArrowRight,i=pg(c,o.props)?x(n,i):c),u&&i>u&&(n=zv.ArrowLeft,i=pg(u,o.props)?x(n,i):u),pg(i,o.props)?(n!==zv.PageUp&&n!==zv.Home||(n=zv.ArrowRight),n!==zv.PageDown&&n!==zv.End||(n=zv.ArrowLeft),i=x(n,i)):r=!0,a++}return i}(y,w)}if(k){if(e.preventDefault(),o.setState({lastPreSelectChange:xy}),v&&o.setSelected(k),o.setPreSelection(k),g){var S=xh(w),E=xh(k),C=wh(w),N=wh(k);S!==E||C!==N?o.setState({shouldFocusDayInline:!0}):o.setState({shouldFocusDayInline:!1})}}else null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}},o.onPopperKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.sendFocusBackToInput())},o.onClearClick=function(e){e&&e.preventDefault&&e.preventDefault(),o.sendFocusBackToInput();var t=o.props,n=t.selectsRange,r=t.onChange;n?null===r||void 0===r||r([null,null],e):null===r||void 0===r||r(null,e),o.setState({inputValue:null})},o.clear=function(){o.onClearClick()},o.onScroll=function(e){"boolean"===typeof o.props.closeOnScroll&&o.props.closeOnScroll?e.target!==document&&e.target!==document.documentElement&&e.target!==document.body||o.setOpen(!1):"function"===typeof o.props.closeOnScroll&&o.props.closeOnScroll(e)&&o.setOpen(!1)},o.renderCalendar=function(){var e,n;return o.props.inline||o.isCalendarOpen()?r.createElement(cy,Iv({showMonthYearDropdown:void 0,ref:function(e){o.calendar=e}},o.props,o.state,{setOpen:o.setOpen,dateFormat:null!==(e=o.props.dateFormatCalendar)&&void 0!==e?e:t.defaultProps.dateFormatCalendar,onSelect:o.handleSelect,onClickOutside:o.handleCalendarClickOutside,holidays:Mg(o.modifyHolidays()),outsideClickIgnoreClass:gy,onDropdownFocus:o.handleDropdownFocus,onTimeChange:o.handleTimeChange,className:o.props.calendarClassName,container:o.props.calendarContainer,handleOnKeyDown:o.props.onKeyDown,handleOnDayKeyDown:o.onDayKeyDown,setPreSelection:o.setPreSelection,dropdownMode:null!==(n=o.props.dropdownMode)&&void 0!==n?n:t.defaultProps.dropdownMode}),o.props.children):null},o.renderAriaLiveRegion=function(){var e,n=o.props,a=n.dateFormat,i=void 0===a?t.defaultProps.dateFormat:a,s=n.locale,l=o.props.showTimeInput||o.props.showTimeSelect?"PPPPp":"PPPP";return e=o.props.selectsRange?"Selected start date: ".concat(Qv(o.props.startDate,{dateFormat:l,locale:s}),". ").concat(o.props.endDate?"End date: "+Qv(o.props.endDate,{dateFormat:l,locale:s}):""):o.props.showTimeSelectOnly?"Selected time: ".concat(Qv(o.props.selected,{dateFormat:i,locale:s})):o.props.showYearPicker?"Selected year: ".concat(Qv(o.props.selected,{dateFormat:"yyyy",locale:s})):o.props.showMonthYearPicker?"Selected month: ".concat(Qv(o.props.selected,{dateFormat:"MMMM yyyy",locale:s})):o.props.showQuarterYearPicker?"Selected quarter: ".concat(Qv(o.props.selected,{dateFormat:"yyyy, QQQ",locale:s})):"Selected date: ".concat(Qv(o.props.selected,{dateFormat:l,locale:s})),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e)},o.renderDateInput=function(){var e,n,a,i=Ld(o.props.className,((e={})[gy]=o.state.open,e)),s=o.props.customInput||r.createElement("input",{type:"text"}),l=o.props.customInputRef||"ref",c=o.props,u=c.dateFormat,d=void 0===u?t.defaultProps.dateFormat:u,f=c.locale,p="string"===typeof o.props.value?o.props.value:"string"===typeof o.state.inputValue?o.state.inputValue:o.props.selectsRange?function(e,t,n){if(!e)return"";var r=Qv(e,n),o=t?Qv(t,n):"";return"".concat(r," - ").concat(o)}(o.props.startDate,o.props.endDate,{dateFormat:d,locale:f}):o.props.selectsMultiple?function(e,t){if(!(null===e||void 0===e?void 0:e.length))return"";var n=e[0]?Qv(e[0],t):"";if(1===e.length)return n;if(2===e.length&&e[1]){var r=Qv(e[1],t);return"".concat(n,", ").concat(r)}var o=e.length-1;return"".concat(n," (+").concat(o,")")}(null!==(a=o.props.selectedDates)&&void 0!==a?a:[],{dateFormat:d,locale:f}):Qv(o.props.selected,{dateFormat:d,locale:f});return(0,r.cloneElement)(s,((n={})[l]=function(e){o.input=e},n.value=p,n.onBlur=o.handleBlur,n.onChange=o.handleChange,n.onClick=o.onInputClick,n.onFocus=o.handleFocus,n.onKeyDown=o.onInputKeyDown,n.id=o.props.id,n.name=o.props.name,n.form=o.props.form,n.autoFocus=o.props.autoFocus,n.placeholder=o.props.placeholderText,n.disabled=o.props.disabled,n.autoComplete=o.props.autoComplete,n.className=Ld(s.props.className,i),n.title=o.props.title,n.readOnly=o.props.readOnly,n.required=o.props.required,n.tabIndex=o.props.tabIndex,n["aria-describedby"]=o.props.ariaDescribedBy,n["aria-invalid"]=o.props.ariaInvalid,n["aria-labelledby"]=o.props.ariaLabelledBy,n["aria-required"]=o.props.ariaRequired,n))},o.renderClearButton=function(){var e=o.props,t=e.isClearable,n=e.disabled,a=e.selected,i=e.startDate,s=e.endDate,l=e.clearButtonTitle,c=e.clearButtonClassName,u=void 0===c?"":c,d=e.ariaLabelClose,f=void 0===d?"Close":d,p=e.selectedDates;return t&&(null!=a||null!=i||null!=s||(null===p||void 0===p?void 0:p.length))?r.createElement("button",{type:"button",className:Ld("react-datepicker__close-icon",u,{"react-datepicker__close-icon--disabled":n}),disabled:n,"aria-label":f,onClick:o.onClearClick,title:l,tabIndex:-1}):null},o.state=o.calcInitialState(),o.preventFocusTimeout=void 0,o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:12,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.componentDidUpdate=function(e,t){var n,r,o,a,i,s;e.inline&&(i=e.selected,s=this.props.selected,i&&s?xh(i)!==xh(s)||wh(i)!==wh(s):i!==s)&&this.setPreSelection(this.props.selected),void 0!==this.state.monthSelectedIn&&e.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),e.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:Og(this.props.highlightDates)}),t.focused||sg(e.selected,this.props.selected)||this.setState({inputValue:null}),t.open!==this.state.open&&(!1===t.open&&!0===this.state.open&&(null===(r=(n=this.props).onCalendarOpen)||void 0===r||r.call(n)),!0===t.open&&!1===this.state.open&&(null===(a=(o=this.props).onCalendarClose)||void 0===a||a.call(o)))},t.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.renderInputContainer=function(){var e=this.props,t=e.showIcon,n=e.icon,o=e.calendarIconClassname,a=e.calendarIconClassName,i=e.toggleCalendarOnIconClick,s=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),r.createElement("div",{className:"react-datepicker__input-container".concat(t?" react-datepicker__view-calendar-icon":"")},t&&r.createElement(uy,Iv({icon:n,className:Ld(a,!a&&o,s&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},t.prototype.render=function(){var e=this.renderCalendar();if(this.props.inline)return e;if(this.props.withPortal){var t=this.state.open?r.createElement(py,{enableTabLoop:this.props.enableTabLoop},r.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},e)):null;return this.state.open&&this.props.portalId&&(t=r.createElement(dy,Iv({portalId:this.props.portalId},this.props),t)),r.createElement("div",null,this.renderInputContainer(),t)}return r.createElement(vy,Iv({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:e,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},t}(r.Component),wy="input",xy="navigate";const ky=()=>{te();const[e,t]=(0,r.useState)([]),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)([]),[m,v]=(0,r.useState)({title:"",content:""}),[g,y]=(0,r.useState)({name:"",discountType:"FREE"}),[b,w]=(0,r.useState)(new Date),[x,k]=(0,r.useState)(new Date),[S,E]=(0,r.useState)("users"),C=async()=>{u(!0),f(null);try{const e=await(async()=>{try{const t=await ar.get("".concat(gd,"/user/allUser"),{headers:{Authorization:localStorage.getItem("token")}});if(console.log("API Response:",t.data),t.data&&200===t.data.code){const e=t.data.data.data;return Array.isArray(e)?e:[e]}var e;throw new Error((null===(e=t.data)||void 0===e?void 0:e.message)||"\u672a\u77e5\u9519\u8bef")}catch(d){throw console.error("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25:",d),d}})();console.log("API Data:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));console.log("Formatted Users:",n),t(n)}catch(e){console.error("Error details:",e),f("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25: ".concat(e.message))}finally{u(!1)}},N=async(n,r)=>{try{await(async(e,t)=>{try{return(await ar.put("".concat(gd,"/user/changeAuthority"),{changeUsername:e,authority:t},{headers:{Authorization:localStorage.getItem("token")}})).data}catch(d){throw console.error("\u4fee\u6539\u7528\u6237\u6743\u9650\u5931\u8d25:",d),d}})(n,r),t(e.map((e=>e.username===n?_e(_e({},e),{},{authority:r}):e)))}catch(o){f("\u4fee\u6539\u6743\u9650\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(o)}},j=async()=>{u(!0),f(null);try{const e=await yd();o(e)}catch(e){f("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}},D=async()=>{try{const e=await(async()=>{try{var e;const r=await ar.get("".concat(gd,"/discount/current"),{headers:{Authorization:localStorage.getItem("token")}});var t,n;if(r.data&&200===r.data.code)return(null===(t=r.data.data)||void 0===t?void 0:t.data)||r.data.data||null;if("\u76ee\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"===(null===(e=r.data)||void 0===e?void 0:e.message))return null;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",d),d}})();i(e)}catch(e){console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",e)}},P=async()=>{if(g.name&&b&&x)try{if(b>=x)return void f("\u7ed3\u675f\u65f6\u95f4\u5fc5\u987b\u665a\u4e8e\u5f00\u59cb\u65f6\u95f4");const e={name:g.name,startTime:T(b),endTime:T(x,!0),discountType:g.discountType};console.log("\u63d0\u4ea4\u6570\u636e:",e),await(async e=>{try{const n=await ar.post("".concat(gd,"/discount/add"),e,{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return n.data.data.data||n.data.data;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u6dfb\u52a0\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u6dfb\u52a0\u6298\u6263\u5931\u8d25:",d),d}})(e),y({name:"",discountType:"FREE"}),w(new Date),k(new Date),j(),f(null)}catch(e){f("\u6dfb\u52a0\u6298\u6263\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u6240\u6709\u5fc5\u586b\u5b57\u6bb5")},T=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return"";const n=e=>e.toString().padStart(2,"0"),r=e.getFullYear(),o=n(e.getMonth()+1),a=n(e.getDate()),i=n(e.getHours()),s=n(e.getMinutes());return t?"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":59"):"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":00")},_=async e=>{try{await(async e=>{try{const n=await ar.delete("".concat(gd,"/discount/delete/").concat(e),{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return!0;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u5220\u9664\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u5220\u9664\u6298\u6263\u5931\u8d25:",d),d}})(e),j()}catch(t){f("\u5220\u9664\u6298\u6263\u5931\u8d25: "+t.message),console.error(t)}},O=e=>e?new Date(e).toLocaleDateString():"-",M=e=>e?new Date(e).toLocaleString():"-",R=e=>{switch(e){case"FREE":return"\u5168\u90e8\u514d\u8d39";case"HALF":return"\u534a\u4ef7\u4e0b\u8f7d";case"DOUBLE":return"\u53cc\u500d\u4e0a\u4f20";default:return e}},A=async()=>{u(!0),f(null);try{const e=await ir.get("/announcement/list");h(Array.isArray(e)?e:[])}catch(e){f("\u83b7\u53d6\u516c\u544a\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}};return(0,r.useEffect)((()=>{"users"===S?C():"discounts"===S?(j(),D()):"announcements"===S&&A()}),[S]),(0,bd.jsxs)("div",{className:"administer-container",children:[(0,bd.jsx)("h1",{children:"\u7cfb\u7edf\u7ba1\u7406"}),(0,bd.jsxs)("div",{className:"tab-container",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("users"===S?"active":""),onClick:()=>E("users"),children:"\u7528\u6237\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("discounts"===S?"active":""),onClick:()=>E("discounts"),children:"\u6298\u6263\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("announcements"===S?"active":""),onClick:()=>E("announcements"),children:"\u516c\u544a\u7ba1\u7406"})]}),"users"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"search-container",children:[(0,bd.jsx)("input",{type:"text",value:s,onChange:e=>l(e.target.value),placeholder:"\u8f93\u5165\u7528\u6237\u540d\u641c\u7d22",className:"search-input"}),(0,bd.jsx)("button",{onClick:async()=>{if(s.trim()){u(!0),f(null);try{const e=await(async e=>{try{var t;const r=await ar.get("".concat(gd,"/user/searchUser"),{params:{key:e},headers:{Authorization:localStorage.getItem("token")}});if(200===(null===(t=r.data)||void 0===t?void 0:t.code)){const e=r.data.data.data;return Array.isArray(e)?e:[e]}var n;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u641c\u7d22\u5931\u8d25")}catch(d){throw console.error("\u641c\u7d22\u7528\u6237\u5931\u8d25:",d),d}})(s);console.log("Search Results:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));t(n)}catch(e){f("\u641c\u7d22\u7528\u6237\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(e)}finally{u(!1)}}else C()},className:"search-button",children:"\u641c\u7d22"}),(0,bd.jsx)("button",{onClick:()=>{l(""),C()},className:"reset-button",children:"\u91cd\u7f6e"})]}),d&&(0,bd.jsx)("div",{className:"error-message",children:d}),c&&(0,bd.jsx)("div",{className:"loading-message",children:"\u52a0\u8f7d\u4e2d..."}),(0,bd.jsx)("div",{className:"user-list-container",children:(0,bd.jsxs)("table",{className:"user-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u7528\u6237\u540d"}),(0,bd.jsx)("th",{children:"\u6ce8\u518c\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u6700\u540e\u767b\u5f55"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("th",{children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("th",{children:"\u9b54\u529b\u503c"}),(0,bd.jsx)("th",{children:"\u6743\u9650"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:Array.isArray(e)&&e.map((e=>{return(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.username}),(0,bd.jsx)("td",{children:O(e.registTime)}),(0,bd.jsx)("td",{children:O(e.lastLogin)}),(0,bd.jsx)("td",{children:e.upload}),(0,bd.jsx)("td",{children:e.download}),(0,bd.jsx)("td",{children:(t=e.shareRate,(100*t).toFixed(2)+"%")}),(0,bd.jsx)("td",{children:e.magicPoints}),(0,bd.jsx)("td",{children:e.authority}),(0,bd.jsx)("td",{children:(0,bd.jsxs)("select",{value:e.authority,onChange:t=>N(e.username,t.target.value),className:"authority-select",children:[(0,bd.jsx)("option",{value:"USER",children:"\u666e\u901a\u7528\u6237"}),(0,bd.jsx)("option",{value:"ADMIN",children:"\u7ba1\u7406\u5458"}),(0,bd.jsx)("option",{value:"LIMIT",children:"\u53d7\u9650\u7528\u6237"}),(0,bd.jsx)("option",{value:"BAN",children:"\u5c01\u7981\u7528\u6237"})]})})]},e.username);var t}))})]})})]}):"discounts"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"current-discount-section",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u6d3b\u52a8\u6298\u6263"}),a?(0,bd.jsxs)("div",{className:"current-discount-card",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u540d\u79f0:"})," ",a.name]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",R(a.discountType)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u65f6\u95f4:"})," ",M(a.startTime)," \u81f3 ",M(a.endTime)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u72b6\u6001:"})," ",a.status]})]}):(0,bd.jsx)("p",{children:"\u5f53\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"add-discount-form",children:[(0,bd.jsx)("h3",{children:"\u6dfb\u52a0\u65b0\u6298\u6263"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u540d\u79f0:"}),(0,bd.jsx)("input",{type:"text",value:g.name,onChange:e=>y(_e(_e({},g),{},{name:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5f00\u59cb\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:b,onChange:e=>w(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:new Date,placeholderText:"\u9009\u62e9\u5f00\u59cb\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7ed3\u675f\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:x,onChange:e=>k(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:b,placeholderText:"\u9009\u62e9\u7ed3\u675f\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u7c7b\u578b:"}),(0,bd.jsxs)("select",{value:g.discountType,onChange:e=>y(_e(_e({},g),{},{discountType:e.target.value})),children:[(0,bd.jsx)("option",{value:"FREE",children:"\u5168\u90e8\u514d\u8d39"}),(0,bd.jsx)("option",{value:"HALF",children:"\u534a\u4ef7\u4e0b\u8f7d"}),(0,bd.jsx)("option",{value:"DOUBLE",children:"\u53cc\u500d\u4e0a\u4f20"})]})]}),(0,bd.jsx)("button",{onClick:e=>{e.preventDefault(),P()},children:"\u6dfb\u52a0\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"discount-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u6298\u6263\u8ba1\u5212"}),(0,bd.jsxs)("table",{className:"discount-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"ID"}),(0,bd.jsx)("th",{children:"\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5f00\u59cb\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7ed3\u675f\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7c7b\u578b"}),(0,bd.jsx)("th",{children:"\u521b\u5efa\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u72b6\u6001"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:n.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.id}),(0,bd.jsx)("td",{children:e.name}),(0,bd.jsx)("td",{children:M(e.startTime)}),(0,bd.jsx)("td",{children:M(e.endTime)}),(0,bd.jsx)("td",{children:R(e.discountType)}),(0,bd.jsx)("td",{children:M(e.createTime)}),(0,bd.jsx)("td",{children:e.status||"\u672a\u77e5"}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{onClick:()=>_(e.id),className:"delete-button",children:"\u5220\u9664"})})]},e.id)))})]})]})]}):(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"announcement-form",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u65b0\u516c\u544a"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u6807\u9898:"}),(0,bd.jsx)("input",{type:"text",value:m.title,onChange:e=>v(_e(_e({},m),{},{title:e.target.value})),placeholder:"\u8f93\u5165\u516c\u544a\u6807\u9898"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u5185\u5bb9:"}),(0,bd.jsx)("textarea",{value:m.content,onChange:e=>v(_e(_e({},m),{},{content:e.target.value})),rows:"5",placeholder:"\u8f93\u5165\u516c\u544a\u5185\u5bb9"})]}),(0,bd.jsx)("button",{onClick:async()=>{if(m.title&&m.content)try{await(e=>{const t=new FormData;return t.append("title",e.title),t.append("content",e.content),ir.post("/announcement/create",t)})(m),v({title:"",content:""}),A(),f(null)}catch(e){f("\u53d1\u5e03\u516c\u544a\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u516c\u544a\u6807\u9898\u548c\u5185\u5bb9")},children:"\u53d1\u5e03\u516c\u544a"})]}),(0,bd.jsxs)("div",{className:"announcement-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u516c\u544a"}),(0,bd.jsxs)("table",{className:"announcement-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u6807\u9898"}),(0,bd.jsx)("th",{children:"\u5185\u5bb9"}),(0,bd.jsx)("th",{children:"\u53d1\u5e03\u65f6\u95f4"})]})}),(0,bd.jsx)("tbody",{children:p.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.title}),(0,bd.jsx)("td",{children:e.content}),(0,bd.jsx)("td",{children:M(e.createTime)})]},e.id)))})]})]})]})]})};const Sy=function(){r.useEffect((()=>{localStorage.removeItem("token"),console.log("Token cleared on app startup"),localStorage.removeItem("username")}),[]);const[e,t]=r.useState(!1),n=()=>{localStorage.removeItem("token"),t(!1)};return(0,bd.jsx)(Ee,{children:(0,bd.jsxs)(xe,{children:[(0,bd.jsx)(be,{path:"/",element:(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/login",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(Nd,{onLoginSuccess:e=>{t(!0)}})}),(0,bd.jsx)(be,{path:"/dashboard/:tab?",element:e?(0,bd.jsx)(wd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/announcement/:id",element:e?(0,bd.jsx)(jd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal",element:e?(0,bd.jsx)(Cd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/exchange",element:e?(0,bd.jsx)(_d,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/upload",element:e?(0,bd.jsx)(Od,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/notice",element:e?(0,bd.jsx)(Md,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/setting",element:e?(0,bd.jsx)(Rd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"*",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/administer",element:e?(0,bd.jsx)(ky,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/request/:id",element:e?(0,bd.jsx)(Pd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/help/:id",element:e?(0,bd.jsx)(Td,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/torrent/:id",element:e?(0,bd.jsx)(Dd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})})]})})},Ey=e=>{e&&e instanceof Function&&n.e(845).then(n.bind(n,845)).then((t=>{let{getCLS:n,getFID:r,getFCP:o,getLCP:a,getTTFB:i}=t;n(e),r(e),o(e),a(e),i(e)}))};var Cy=n(365),Ny=n.n(Cy),jy=n(478);"undefined"===typeof window.process&&(window.process=Ny()),"undefined"===typeof window.Buffer&&(window.Buffer=jy.hp);a.createRoot(document.getElementById("root")).render((0,bd.jsx)(r.StrictMode,{children:(0,bd.jsx)(Sy,{})})),Ey()})()})();
+//# sourceMappingURL=main.dd76cdc0.js.map
\ No newline at end of file
diff --git a/build/static/js/main.dd76cdc0.js.LICENSE.txt b/build/static/js/main.dd76cdc0.js.LICENSE.txt
new file mode 100644
index 0000000..a13d5de
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js.LICENSE.txt
@@ -0,0 +1,116 @@
+/*!
+	Copyright (c) 2018 Jed Watson.
+	Licensed under the MIT License (MIT), see
+	http://jedwatson.github.io/classnames
+*/
+
+/*!
+  react-datepicker v8.3.0
+  https://github.com/Hacker0x01/react-datepicker
+  Released under the MIT License.
+*/
+
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <https://feross.org>
+ * @license  MIT
+ */
+
+/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
+
+/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
+
+/**
+ * @license React
+ * react-dom-client.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-dom.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-jsx-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * scheduler.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @remix-run/router v1.23.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/**
+ * React Router v6.30.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/**![check-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0xOTMuNSAzMDEuN2wtMjEwLjYgMjkyYTMxLjggMzEuOCAwIDAxLTUxLjcgMEwzMTguNSA0ODQuOWMtMy44LTUuMyAwLTEyLjcgNi41LTEyLjdoNDYuOWMxMC4yIDAgMTkuOSA0LjkgMjUuOSAxMy4zbDcxLjIgOTguOCAxNTcuMi0yMThjNi04LjMgMTUuNi0xMy4zIDI1LjktMTMuM0g2OTljNi41IDAgMTAuMyA3LjQgNi41IDEyLjd6IiAvPjwvc3ZnPg==) */
+
+/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMTI3Ljk4IDI3NC44MmgtLjA0bC0uMDguMDZMNTEyIDQ2Ni43NSAzODQuMTQgMzM4Ljg4Yy0uMDQtLjA1LS4wNi0uMDYtLjA4LS4wNmEuMTIuMTIgMCAwMC0uMDcgMGMtLjAzIDAtLjA1LjAxLS4wOS4wNWwtNDUuMDIgNDUuMDJhLjIuMiAwIDAwLS4wNS4wOS4xMi4xMiAwIDAwMCAuMDd2LjAyYS4yNy4yNyAwIDAwLjA2LjA2TDQ2Ni43NSA1MTIgMzM4Ljg4IDYzOS44NmMtLjA1LjA0LS4wNi4wNi0uMDYuMDhhLjEyLjEyIDAgMDAwIC4wN2MwIC4wMy4wMS4wNS4wNS4wOWw0NS4wMiA0NS4wMmEuMi4yIDAgMDAuMDkuMDUuMTIuMTIgMCAwMC4wNyAwYy4wMiAwIC4wNC0uMDEuMDgtLjA1TDUxMiA1NTcuMjVsMTI3Ljg2IDEyNy44N2MuMDQuMDQuMDYuMDUuMDguMDVhLjEyLjEyIDAgMDAuMDcgMGMuMDMgMCAuMDUtLjAxLjA5LS4wNWw0NS4wMi00NS4wMmEuMi4yIDAgMDAuMDUtLjA5LjEyLjEyIDAgMDAwLS4wN3YtLjAyYS4yNy4yNyAwIDAwLS4wNS0uMDZMNTU3LjI1IDUxMmwxMjcuODctMTI3Ljg2Yy4wNC0uMDQuMDUtLjA2LjA1LS4wOGEuMTIuMTIgMCAwMDAtLjA3YzAtLjAzLS4wMS0uMDUtLjA1LS4wOWwtNDUuMDItNDUuMDJhLjIuMiAwIDAwLS4wOS0uMDUuMTIuMTIgMCAwMC0uMDcgMHoiIC8+PC9zdmc+) */
+
+/**![close](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNzk5Ljg2IDE2Ni4zMWMuMDIgMCAuMDQuMDIuMDguMDZsNTcuNjkgNTcuN2MuMDQuMDMuMDUuMDUuMDYuMDhhLjEyLjEyIDAgMDEwIC4wNmMwIC4wMy0uMDIuMDUtLjA2LjA5TDU2OS45MyA1MTJsMjg3LjcgMjg3LjdjLjA0LjA0LjA1LjA2LjA2LjA5YS4xMi4xMiAwIDAxMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMyAwLS4wNS0uMDItLjA5LS4wNkw1MTIgNTY5LjkzbC0yODcuNyAyODcuN2MtLjA0LjA0LS4wNi4wNS0uMDkuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDItLjA4LS4wNmwtNTcuNjktNTcuN2MtLjA0LS4wMy0uMDUtLjA1LS4wNi0uMDdhLjEyLjEyIDAgMDEwLS4wN2MwLS4wMy4wMi0uMDUuMDYtLjA5TDQ1NC4wNyA1MTJsLTI4Ny43LTI4Ny43Yy0uMDQtLjA0LS4wNS0uMDYtLjA2LS4wOWEuMTIuMTIgMCAwMTAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMDEuMDcgMGMuMDMgMCAuMDUuMDIuMDkuMDZMNTEyIDQ1NC4wN2wyODcuNy0yODcuN2MuMDQtLjA0LjA2LS4wNS4wOS0uMDZhLjEyLjEyIDAgMDEuMDcgMHoiIC8+PC9zdmc+) */
+
+/**![exclamation-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0tMzIgMjMyYzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2MjcyYzAgNC40LTMuNiA4LTggOGgtNDhjLTQuNCAwLTgtMy42LTgtOFYyOTZ6bTMyIDQ0MGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */
+
+/**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0zMiA2NjRjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQ1NmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI3MnptLTMyLTM0NGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */
+
+/**![loading](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4OCA1NDhjLTE5LjkgMC0zNi0xNi4xLTM2LTM2IDAtNTkuNC0xMS42LTExNy0zNC42LTE3MS4zYTQ0MC40NSA0NDAuNDUgMCAwMC05NC4zLTEzOS45IDQzNy43MSA0MzcuNzEgMCAwMC0xMzkuOS05NC4zQzYyOSA4My42IDU3MS40IDcyIDUxMiA3MmMtMTkuOSAwLTM2LTE2LjEtMzYtMzZzMTYuMS0zNiAzNi0zNmM2OS4xIDAgMTM2LjIgMTMuNSAxOTkuMyA0MC4zQzc3Mi4zIDY2IDgyNyAxMDMgODc0IDE1MGM0NyA0NyA4My45IDEwMS44IDEwOS43IDE2Mi43IDI2LjcgNjMuMSA0MC4yIDEzMC4yIDQwLjIgMTk5LjMuMSAxOS45LTE2IDM2LTM1LjkgMzZ6IiAvPjwvc3ZnPg==) */
diff --git a/build/static/js/main.dd76cdc0.js.map b/build/static/js/main.dd76cdc0.js.map
new file mode 100644
index 0000000..165778f
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/main.dd76cdc0.js","mappings":"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","sources":["../node_modules/classnames/index.js","../node_modules/rc-util/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/base64-js/index.js","../node_modules/process/browser.js","../node_modules/buffer/index.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom-client.production.js","../node_modules/scheduler/index.js","../node_modules/react/cjs/react.production.js","../node_modules/scheduler/cjs/scheduler.production.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/react-dom/client.js","../node_modules/rc-util/node_modules/react-is/index.js","../node_modules/react-dom/cjs/react-dom.production.js","../node_modules/ieee754/index.js","../node_modules/react-dom/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/deprecations.ts","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/@babel/runtime/helpers/esm/OverloadYield.js","../node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js","../node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js","../node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js","../node_modules/@babel/runtime/helpers/esm/asyncIterator.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","api/auth.js","api/torrent.js","api/helpPost.js","api/requestPost.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/antd/es/app/context.js","../node_modules/antd/es/config-provider/context.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/rc-util/es/Dom/canUseDom.js","../node_modules/rc-util/es/Dom/dynamicCSS.js","../node_modules/rc-util/es/Dom/contains.js","../node_modules/rc-util/es/hooks/useMemo.js","../node_modules/rc-util/es/warning.js","../node_modules/rc-util/es/isEqual.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@ant-design/cssinjs/es/Cache.js","../node_modules/@ant-design/cssinjs/es/StyleContext.js","../node_modules/@ant-design/cssinjs/es/theme/calc/CSSCalculator.js","../node_modules/@ant-design/cssinjs/es/theme/ThemeCache.js","../node_modules/@ant-design/cssinjs/es/theme/Theme.js","../node_modules/@ant-design/cssinjs/es/theme/createTheme.js","../node_modules/@ant-design/cssinjs/es/util/index.js","../node_modules/@ant-design/cssinjs/es/util/css-variables.js","../node_modules/rc-util/es/hooks/useLayoutEffect.js","../node_modules/@ant-design/cssinjs/es/hooks/useCompatibleInsertionEffect.js","../node_modules/@ant-design/cssinjs/es/hooks/useEffectCleanupRegister.js","../node_modules/@ant-design/cssinjs/es/hooks/useHMR.js","../node_modules/@ant-design/cssinjs/es/hooks/useGlobalCache.js","../node_modules/@ant-design/cssinjs/es/hooks/useCacheToken.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/@ant-design/cssinjs/es/util/cacheMapUtil.js","../node_modules/@ant-design/cssinjs/es/hooks/useStyleRegister.js","../node_modules/@ant-design/cssinjs/es/hooks/useCSSVarRegister.js","../node_modules/@ant-design/cssinjs/es/extractStyle.js","../node_modules/@ant-design/cssinjs/es/Keyframes.js","../node_modules/@ant-design/cssinjs/es/transformers/legacyLogicalProperties.js","../node_modules/@ant-design/icons/es/components/Context.js","../node_modules/rc-util/es/utils/get.js","../node_modules/rc-util/es/utils/set.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/antd/es/_util/warning.js","../node_modules/antd/es/form/validateMessagesContext.js","../node_modules/rc-pagination/es/locale/en_US.js","../node_modules/rc-picker/es/locale/en_US.js","../node_modules/rc-picker/es/locale/common.js","../node_modules/antd/es/time-picker/locale/en_US.js","../node_modules/antd/es/date-picker/locale/en_US.js","../node_modules/antd/es/locale/en_US.js","../node_modules/antd/es/modal/locale.js","../node_modules/antd/es/locale/context.js","../node_modules/antd/es/locale/index.js","../node_modules/@ant-design/fast-color/es/FastColor.js","../node_modules/@ant-design/colors/es/generate.js","../node_modules/@ant-design/colors/es/presets.js","../node_modules/antd/es/theme/themes/seed.js","../node_modules/antd/es/theme/themes/shared/genRadius.js","../node_modules/antd/es/theme/themes/shared/genControlHeight.js","../node_modules/antd/es/theme/themes/shared/genFontMapToken.js","../node_modules/antd/es/theme/themes/shared/genFontSizes.js","../node_modules/antd/es/theme/themes/default/colorAlgorithm.js","../node_modules/antd/es/theme/themes/default/colors.js","../node_modules/antd/es/theme/themes/default/theme.js","../node_modules/antd/es/theme/themes/default/index.js","../node_modules/antd/es/theme/themes/shared/genColorMapToken.js","../node_modules/antd/es/theme/themes/shared/genSizeMapToken.js","../node_modules/antd/es/theme/themes/shared/genCommonMapToken.js","../node_modules/antd/es/theme/context.js","../node_modules/antd/es/config-provider/cssVariables.js","../node_modules/antd/es/config-provider/DisabledContext.js","../node_modules/antd/es/config-provider/SizeContext.js","../node_modules/antd/es/config-provider/hooks/useConfig.js","../node_modules/antd/es/config-provider/hooks/useThemeKey.js","../node_modules/rc-util/es/Dom/findDOMNode.js","../node_modules/rc-util/es/React/isFragment.js","../node_modules/rc-util/es/ref.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/rc-motion/es/context.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/rc-motion/es/DomWrapper.js","../node_modules/rc-util/es/hooks/useEvent.js","../node_modules/rc-util/es/hooks/useState.js","../node_modules/rc-motion/es/interface.js","../node_modules/rc-motion/es/util/motion.js","../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js","../node_modules/rc-util/es/raf.js","../node_modules/rc-motion/es/hooks/useStepQueue.js","../node_modules/rc-motion/es/hooks/useNextFrame.js","../node_modules/rc-motion/es/hooks/useStatus.js","../node_modules/rc-util/es/hooks/useSyncState.js","../node_modules/rc-motion/es/hooks/useDomMotionEvents.js","../node_modules/rc-motion/es/CSSMotion.js","../node_modules/rc-motion/es/util/diff.js","../node_modules/rc-motion/es/CSSMotionList.js","../node_modules/antd/es/theme/util/getAlphaColor.js","../node_modules/antd/es/theme/util/alias.js","../node_modules/antd/es/theme/useToken.js","../node_modules/antd/es/version/version.js","../node_modules/antd/es/config-provider/MotionWrapper.js","../node_modules/antd/es/config-provider/PropWarning.js","../node_modules/antd/es/style/index.js","../node_modules/antd/es/theme/util/useResetIconStyle.js","../node_modules/antd/es/config-provider/index.js","../node_modules/antd/es/config-provider/hooks/useTheme.js","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/rc-util/es/React/render.js","../node_modules/antd/es/config-provider/UnstableContext.js","../node_modules/@ant-design/icons-svg/es/asn/CheckCircleFilled.js","../node_modules/rc-util/es/Dom/shadow.js","../node_modules/@ant-design/icons/es/utils.js","../node_modules/@ant-design/icons/es/components/IconBase.js","../node_modules/@ant-design/icons/es/components/twoTonePrimaryColor.js","../node_modules/@ant-design/icons/es/components/AntdIcon.js","../node_modules/@ant-design/icons/es/icons/CheckCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/CloseCircleFilled.js","../node_modules/@ant-design/icons/es/icons/CloseCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/ExclamationCircleFilled.js","../node_modules/@ant-design/icons/es/icons/ExclamationCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/InfoCircleFilled.js","../node_modules/@ant-design/icons/es/icons/InfoCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/LoadingOutlined.js","../node_modules/@ant-design/icons/es/icons/LoadingOutlined.js","../node_modules/rc-util/es/KeyCode.js","../node_modules/rc-util/es/pickAttrs.js","../node_modules/rc-notification/es/Notice.js","../node_modules/rc-notification/es/NotificationProvider.js","../node_modules/rc-notification/es/hooks/useStack.js","../node_modules/rc-notification/es/NoticeList.js","../node_modules/rc-notification/es/Notifications.js","../node_modules/rc-notification/es/hooks/useNotification.js","../node_modules/antd/es/config-provider/hooks/useCSSVarCls.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/calculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/CSSCalculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/NumCalculator.js","../node_modules/@ant-design/cssinjs-utils/es/util/calc/index.js","../node_modules/@ant-design/cssinjs-utils/es/util/getCompVarPrefix.js","../node_modules/@ant-design/cssinjs-utils/es/util/getComponentToken.js","../node_modules/@ant-design/cssinjs-utils/es/util/statistic.js","../node_modules/@ant-design/cssinjs-utils/es/util/getDefaultComponentToken.js","../node_modules/@ant-design/cssinjs-utils/es/util/maxmin.js","../node_modules/@ant-design/cssinjs-utils/es/_util/hooks/useUniqueMemo.js","../node_modules/@ant-design/cssinjs-utils/es/hooks/useCSP.js","../node_modules/@ant-design/cssinjs-utils/es/util/genStyleUtils.js","../node_modules/antd/es/theme/util/genStyleUtils.js","../node_modules/antd/es/message/style/index.js","../node_modules/antd/es/_util/hooks/useZIndex.js","../node_modules/antd/es/message/PurePanel.js","../node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/@ant-design/icons/es/icons/CloseOutlined.js","../node_modules/antd/es/message/util.js","../node_modules/antd/es/message/useMessage.js","../node_modules/antd/es/message/index.js","api/administer.js","components/Dashboard.jsx","api/announcement.js","api/personal.js","components/Personal/Personal.jsx","components/AuthForm.jsx","components/AnnouncementDetail.jsx","components/TorrentDetail.jsx","api/torrentComment.js","components/RequestDetail.jsx","api/requestComment.js","components/HelpDetail.jsx","api/helpComment.js","components/Personal/Exchange.jsx","components/Personal/Upload.jsx","components/Personal/Notice.jsx","components/Personal/Setting.jsx","../node_modules/clsx/dist/clsx.mjs","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/parseISO.js","../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/en-US/_lib/localize.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/en-US/_lib/match.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/en-US.js","../node_modules/date-fns/_lib/format/longFormatters.js","../node_modules/date-fns/_lib/protectedTokens.js","../node_modules/date-fns/_lib/defaultOptions.js","../node_modules/date-fns/getDefaultOptions.js","../node_modules/date-fns/transpose.js","../node_modules/date-fns/parse/_lib/Setter.js","../node_modules/date-fns/parse/_lib/Parser.js","../node_modules/date-fns/parse/_lib/constants.js","../node_modules/date-fns/parse/_lib/utils.js","../node_modules/date-fns/startOfWeek.js","../node_modules/date-fns/getWeekYear.js","../node_modules/date-fns/startOfISOWeek.js","../node_modules/date-fns/startOfWeekYear.js","../node_modules/date-fns/getWeek.js","../node_modules/date-fns/setWeek.js","../node_modules/date-fns/getISOWeekYear.js","../node_modules/date-fns/startOfISOWeekYear.js","../node_modules/date-fns/getISOWeek.js","../node_modules/date-fns/setISOWeek.js","../node_modules/date-fns/parse/_lib/parsers/DateParser.js","../node_modules/date-fns/addDays.js","../node_modules/date-fns/setDay.js","../node_modules/date-fns/getISODay.js","../node_modules/date-fns/setISODay.js","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../node_modules/date-fns/parse/_lib/parsers.js","../node_modules/date-fns/parse/_lib/parsers/EraParser.js","../node_modules/date-fns/parse/_lib/parsers/YearParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","../node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","../node_modules/date-fns/parse/_lib/parsers/MonthParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","../node_modules/date-fns/parse/_lib/parsers/DayParser.js","../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","../node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","../node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","../node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","../node_modules/date-fns/parse/_lib/parsers/SecondParser.js","../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","../node_modules/date-fns/parse.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/isBefore.js","../node_modules/date-fns/_lib/normalizeDates.js","../node_modules/date-fns/startOfDay.js","../node_modules/date-fns/differenceInCalendarDays.js","../node_modules/date-fns/startOfYear.js","../node_modules/date-fns/getDayOfYear.js","../node_modules/date-fns/_lib/addLeadingZeros.js","../node_modules/date-fns/_lib/format/lightFormatters.js","../node_modules/date-fns/_lib/format/formatters.js","../node_modules/date-fns/format.js","../node_modules/date-fns/setHours.js","../node_modules/date-fns/setMinutes.js","../node_modules/date-fns/setSeconds.js","../node_modules/date-fns/startOfMonth.js","../node_modules/date-fns/startOfQuarter.js","../node_modules/date-fns/endOfDay.js","../node_modules/date-fns/endOfWeek.js","../node_modules/date-fns/endOfMonth.js","../node_modules/date-fns/isSameYear.js","../node_modules/date-fns/isSameMonth.js","../node_modules/date-fns/isSameQuarter.js","../node_modules/date-fns/isSameDay.js","../node_modules/date-fns/isEqual.js","../node_modules/date-fns/isWithinInterval.js","../node_modules/date-fns/getDaysInMonth.js","../node_modules/date-fns/setMonth.js","../node_modules/date-fns/setQuarter.js","../node_modules/date-fns/getYear.js","../node_modules/date-fns/getMonth.js","../node_modules/date-fns/endOfYear.js","../node_modules/date-fns/getQuarter.js","../node_modules/date-fns/getHours.js","../node_modules/date-fns/getMinutes.js","../node_modules/date-fns/getSeconds.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/subMonths.js","../node_modules/date-fns/differenceInCalendarMonths.js","../node_modules/date-fns/addQuarters.js","../node_modules/date-fns/subQuarters.js","../node_modules/date-fns/differenceInCalendarQuarters.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/subYears.js","../node_modules/date-fns/differenceInCalendarYears.js","../node_modules/date-fns/min.js","../node_modules/date-fns/max.js","../node_modules/date-fns/addMilliseconds.js","../node_modules/date-fns/addHours.js","../node_modules/date-fns/addMinutes.js","../node_modules/date-fns/addSeconds.js","../node_modules/date-fns/isAfter.js","../node_modules/date-fns/getDay.js","../node_modules/date-fns/getDate.js","../node_modules/date-fns/addWeeks.js","../node_modules/date-fns/getTime.js","../node_modules/date-fns/setYear.js","../node_modules/date-fns/differenceInDays.js","../node_modules/date-fns/subWeeks.js","../node_modules/date-fns/subDays.js","../node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../node_modules/react-datepicker/node_modules/tslib/tslib.es6.js","../../src/calendar_container.tsx","../../src/date_utils.ts","../../src/click_outside_wrapper.tsx","../../src/input_time.tsx","../../src/day.tsx","../../src/week_number.tsx","../../src/week.tsx","../../src/month.tsx","../../src/month_dropdown_options.tsx","../../src/month_dropdown.tsx","../../src/month_year_dropdown_options.tsx","../../src/month_year_dropdown.tsx","../../src/time.tsx","../../src/year.tsx","../../src/year_dropdown_options.tsx","../../src/year_dropdown.tsx","../../src/calendar.tsx","../../src/calendar_icon.tsx","../../src/portal.tsx","../../src/tab_loop.tsx","../../src/popper_component.tsx","../../src/with_floating.tsx","../../src/index.tsx","components/Administer.jsx","App.jsx","reportWebVitals.js","index.js"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 256,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194048;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$5 = 31 - clz32(remainingLanes),\n      lane = 1 << index$5;\n    entanglements[index$5] = 0;\n    expirationTimes[index$5] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$5];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$5] = null, index$5 = 0;\n        index$5 < hiddenUpdatesForLane.length;\n        index$5++\n      ) {\n        var update = hiddenUpdatesForLane[index$5];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194090);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$6 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$6;\n    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&\n      (root[index$6] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[: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]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$8 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$8 && \"aria-\" !== prefix$8) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$9) {\n                control = x$9;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$10) {\n              control = x$10;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$282;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_417 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_417) {\n      var element$jscomp$inline_418 = document.createElement(\"div\");\n      element$jscomp$inline_418.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_417 =\n        \"function\" === typeof element$jscomp$inline_418.oninput;\n    }\n    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;\n  } else JSCompiler_inline_result$jscomp$282 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$282 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (tag = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === tag) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            tag--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              tag++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter$1 = 0,\n  thenableState$1 = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter$1 = 0;\n  thenableState$1 = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n    thenableIndexCounter$1 = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter$1 = localIdCounter = 0;\n  thenableState$1 = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  thenable = trackUsedThenable(thenableState$1, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$32 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$32 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$32 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$32 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n  updateEffectImpl(2048, 8, create, [subscribe]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 124) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$38) {\n      onActionError(actionQueue, node, error$38);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, createDeps) {\n  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((createDeps = create.next),\n      (create.next = tag),\n      (tag.next = createDeps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction createEffectInstance() {\n  return { destroy: void 0, resource: void 0 };\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n  var hook = mountWorkInProgressHook();\n  createDeps = void 0 === createDeps ? null : createDeps;\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    createEffectInstance(),\n    create,\n    createDeps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, createDeps) {\n  mountEffectImpl(8390656, 8, create, createDeps);\n}\nfunction updateEffect(create, createDeps) {\n  updateEffectImpl(2048, 8, create, createDeps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$41 = enqueueUpdate(provider, fiber, lane);\n        null !== root$41 &&\n          (scheduleUpdateOnFiber(root$41, provider, lane),\n          entangleTransitions(root$41, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        createEffectInstance(),\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"\\u00ab\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"\\u00bb\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"\\u00ab\" +\n            identifierPrefix +\n            \"r\" +\n            JSCompiler_inline_result.toString(32) +\n            \"\\u00bb\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  thenableState = null,\n  thenableIndexCounter = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  return trackUsedThenable(thenableState, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          \"$?\" === state.data ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (prevState = 0; null !== nextChildren; )\n          (prevState =\n            prevState | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = prevState & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912,\n                hydrationErrors: null\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          isSuspenseInstanceFallback(nextInstance)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextInstance))\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = renderLanes & -renderLanes),\n        (nextProps =\n          0 !== (nextProps & 42)\n            ? 1\n            : getBumpedLaneForHydrationByLane(nextProps)),\n        (nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps),\n        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n      )\n        throw (\n          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  offscreenProps.stateNode = {\n    _visibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null\n  };\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        lazyComponent = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        init = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        lazyComponent = nextState.cache;\n        pushProvider(workInProgress, CacheContext, lazyComponent);\n        lazyComponent !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        lazyComponent = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: lazyComponent,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else if (lazyComponent !== init) {\n            init = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(init);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (lazyComponent === init) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(\n            current,\n            workInProgress,\n            lazyComponent,\n            renderLanes\n          );\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (init = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = init),\n              (nextHydratableInstance = getNextHydratable(\n                lazyComponent.firstChild\n              )))\n            : (nextHydratableInstance = init)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = prevState.children;\n      shouldSetTextContent(init, prevState)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        (renderLanes = workInProgress.mode),\n        (lazyComponent = {\n          mode: lazyComponent.mode,\n          children: lazyComponent.children\n        }),\n        null === current\n          ? ((renderLanes = mountWorkInProgressOffscreenFiber(\n              lazyComponent,\n              renderLanes\n            )),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes))\n          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes)),\n        workInProgress\n      );\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (prevState = createCache()),\n              (init.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && (init.pooledCacheLanes |= renderLanes),\n              (init = prevState)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = prevState.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194048) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$113 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$113\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$113.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags & 65011712),\n        (subtreeFlags |= child$114.flags & 65011712),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  else\n    for (child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags),\n        (subtreeFlags |= child$114.flags),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 31:\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$127 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$127 = newProps.memoizedState.cachePool.pool);\n        cache$127 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$127 = type.rendering;\n      if (null === cache$127)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$127 = findFirstSuspended(current);\n              if (null !== cache$127) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$127.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$127)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$127.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$127.sibling = workInProgress.child),\n            (workInProgress.child = cache$127))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$127)\n              : (workInProgress.child = cache$127),\n            (type.last = cache$127));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$143) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$143);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$142) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$142\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearSuspenseBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$144 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$144, \"\"), (hostParentFiber.flags &= -33));\n          var before$145 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);\n          break;\n        case 3:\n        case 4:\n          var parent$146 = hostParentFiber.stateNode.containerInfo,\n            before$147 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$147,\n            parent$146\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 124) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              2,\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  )\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (suspendedCommitReason = waitForCommitToBeReady()),\n      null !== suspendedCommitReason)\n    ) {\n      root.cancelPendingCommit = suspendedCommitReason(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$4 = 31 - clz32(lanes),\n      lane = 1 << index$4;\n    didAttemptEntireTree[index$4] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState = null),\n        (thenableIndexCounter = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$2 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$2;\n      lanes |= root[index$2];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$169) {\n      handleThrow(root, thrownValue$169);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState = null;\n  thenableIndexCounter = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects(!0);\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects(wasDelayedCommit) {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects(wasDelayedCommit);\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$174 = firstScheduledRoot; null !== root$174; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$174.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$174.suspendedLanes,\n                pingedLanes = root$174.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$174,\n                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$174.cancelPendingCommit ||\n                  -1 !== root$174.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n        root$174 = root$174.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$3 = 31 - clz32(lanes),\n      lane = 1 << index$3,\n      expirationTime = expirationTimes[index$3];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1528 = 0;\n  i$jscomp$inline_1528 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1528++\n) {\n  var eventName$jscomp$inline_1529 =\n      simpleEventPluginEvents[i$jscomp$inline_1528],\n    domEventName$jscomp$inline_1530 =\n      eventName$jscomp$inline_1529.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1531 =\n      eventName$jscomp$inline_1529[0].toUpperCase() +\n      eventName$jscomp$inline_1529.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1530,\n    \"on\" + capitalizedEvent$jscomp$inline_1531\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$188 = props[hasSrc];\n          if (null != propValue$188)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$188;\n                break;\n              case \"type\":\n                propValue = propValue$188;\n                break;\n              case \"checked\":\n                checked = propValue$188;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$188;\n                break;\n              case \"value\":\n                propKey = propValue$188;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$188;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$188)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$188, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$188 in props)\n          props.hasOwnProperty(propValue$188) &&\n            ((hasSrc = props[propValue$188]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$188,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$205 in nextProps) {\n        var propKey = nextProps[propKey$205];\n        lastProp = lastProps[propKey$205];\n        if (\n          nextProps.hasOwnProperty(propKey$205) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$205) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$205,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$205 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$205 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$205\n        ? updateOptions(domElement, !!lastProps, propKey$205, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$205 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$205 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$205, propKey);\n      return;\n    case \"option\":\n      for (var propKey$221 in lastProps)\n        if (\n          ((propKey$205 = lastProps[propKey$221]),\n          lastProps.hasOwnProperty(propKey$221) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$221))\n        )\n          switch (propKey$221) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$221,\n                null,\n                nextProps,\n                propKey$205\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$205 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$205 &&\n                \"function\" !== typeof propKey$205 &&\n                \"symbol\" !== typeof propKey$205;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$226 in lastProps)\n        (propKey$205 = lastProps[propKey$226]),\n          lastProps.hasOwnProperty(propKey$226) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$226) &&\n            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);\n      for (checked in nextProps)\n        if (\n          ((propKey$205 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$205)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$231 in lastProps)\n          (propKey$205 = lastProps[propKey$231]),\n            lastProps.hasOwnProperty(propKey$231) &&\n              void 0 !== propKey$205 &&\n              !nextProps.hasOwnProperty(propKey$231) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$231,\n                void 0,\n                nextProps,\n                propKey$205\n              );\n        for (defaultChecked in nextProps)\n          (propKey$205 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$205 === propKey ||\n              (void 0 === propKey$205 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$236 in lastProps)\n    (propKey$205 = lastProps[propKey$236]),\n      lastProps.hasOwnProperty(propKey$236) &&\n        null != propKey$205 &&\n        !nextProps.hasOwnProperty(propKey$236) &&\n        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);\n  for (lastProp in nextProps)\n    (propKey$205 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$205 === propKey ||\n        (null == propKey$205 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    possiblePreambleContribution = 0,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (\n          0 < possiblePreambleContribution &&\n          8 > possiblePreambleContribution\n        ) {\n          node = possiblePreambleContribution;\n          var ownerDocument = parentInstance.ownerDocument;\n          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);\n          node & 2 && releaseSingletonInstance(ownerDocument.body);\n          if (node & 4)\n            for (\n              node = ownerDocument.head,\n                releaseSingletonInstance(node),\n                ownerDocument = node.firstChild;\n              ownerDocument;\n\n            ) {\n              var nextNode$jscomp$0 = ownerDocument.nextSibling,\n                nodeName = ownerDocument.nodeName;\n              ownerDocument[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n                node.removeChild(ownerDocument);\n              ownerDocument = nextNode$jscomp$0;\n            }\n        }\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else\n        \"$\" === node || \"$?\" === node || \"$!\" === node\n          ? depth++\n          : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n    else possiblePreambleContribution = 0;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"complete\" === instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$?\" !== instance.data || \"complete\" === ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$244 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$245 = styles$244.get(type);\n        resource$245 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$245 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$244.set(type, resource$245),\n          (styles$244 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$244._p &&\n            ((resource$245.instance = styles$244),\n            (resource$245.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$244 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$245.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$245;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$250 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$250)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$250),\n            markNodeAsHoistable(instance$250),\n            instance$250\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$250 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$250);\n        var linkInstance = instance$250;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$250, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$250, props.precedence, hoistableRoot);\n        return (resource.instance = instance$250);\n      case \"script\":\n        instance$250 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$250)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$250)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane();\n              lane = getBumpedLaneForHydrationByLane(lane);\n              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;\nif (\n  \"19.1.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1785\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1785,\n      \"19.1.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2256 = {\n  bundleType: 0,\n  version: \"19.1.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.1.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2257.isDisabled &&\n    hook$jscomp$inline_2257.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2257.inject(\n        internals$jscomp$inline_2256\n      )),\n        (injectedHook = hook$jscomp$inline_2257);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n  var dispatcher = ReactSharedInternals.H;\n  if (\"function\" === typeof update)\n    throw Error(\n      \"useEffect CRUD overload is not enabled in this build of React.\"\n    );\n  return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.0\";\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.1.0\";\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"116b9008\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Pop = \"POP\",\n\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Push = \"PUSH\",\n\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n  /**\n   * A URL pathname, beginning with a /.\n   */\n  pathname: string;\n\n  /**\n   * A URL search string, beginning with a ?.\n   */\n  search: string;\n\n  /**\n   * A URL fragment identifier, beginning with a #.\n   */\n  hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n  /**\n   * A value of arbitrary data associated with this location.\n   */\n  state: State;\n\n  /**\n   * A unique string associated with this location. May be used to safely store\n   * and retrieve data in some other storage API, like `localStorage`.\n   *\n   * Note: This value is always \"default\" on the initial location.\n   */\n  key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n  /**\n   * The action that triggered the change.\n   */\n  action: Action;\n\n  /**\n   * The new location.\n   */\n  location: Location;\n\n  /**\n   * The delta between this location and the former location in the history stack\n   */\n  delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n  (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n  /**\n   * The last action that modified the current location. This will always be\n   * Action.Pop when a history instance is first created. This value is mutable.\n   */\n  readonly action: Action;\n\n  /**\n   * The current location. This value is mutable.\n   */\n  readonly location: Location;\n\n  /**\n   * Returns a valid href for the given `to` value that may be used as\n   * the value of an <a href> attribute.\n   *\n   * @param to - The destination URL\n   */\n  createHref(to: To): string;\n\n  /**\n   * Returns a URL for the given `to` value\n   *\n   * @param to - The destination URL\n   */\n  createURL(to: To): URL;\n\n  /**\n   * Encode a location the same way window.history would do (no-op for memory\n   * history) so we ensure our PUSH/REPLACE navigations for data routers\n   * behave the same as POP\n   *\n   * @param to Unencoded path\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * Pushes a new location onto the history stack, increasing its length by one.\n   * If there were any entries in the stack after the current one, they are\n   * lost.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  push(to: To, state?: any): void;\n\n  /**\n   * Replaces the current location in the history stack with a new one.  The\n   * location that was replaced will no longer be available.\n   *\n   * @param to - The new URL\n   * @param state - Data to associate with the new location\n   */\n  replace(to: To, state?: any): void;\n\n  /**\n   * Navigates `n` entries backward/forward in the history stack relative to the\n   * current index. For example, a \"back\" navigation would use go(-1).\n   *\n   * @param delta - The delta in the stack index\n   */\n  go(delta: number): void;\n\n  /**\n   * Sets up a listener that will be called whenever the current location\n   * changes.\n   *\n   * @param listener - A function that will be called when the location changes\n   * @returns unlisten - A function that may be used to stop listening\n   */\n  listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n  usr: any;\n  key?: string;\n  idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n  /**\n   * The current index in the history stack.\n   */\n  readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n  options: MemoryHistoryOptions = {}\n): MemoryHistory {\n  let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n  let entries: Location[]; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) =>\n    createMemoryLocation(\n      entry,\n      typeof entry === \"string\" ? null : entry.state,\n      index === 0 ? \"default\" : undefined\n    )\n  );\n  let index = clampIndex(\n    initialIndex == null ? entries.length - 1 : initialIndex\n  );\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  function clampIndex(n: number): number {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation(): Location {\n    return entries[index];\n  }\n  function createMemoryLocation(\n    to: To,\n    state: any = null,\n    key?: string\n  ): Location {\n    let location = createLocation(\n      entries ? getCurrentLocation().pathname : \"/\",\n      to,\n      state,\n      key\n    );\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in memory history: ${JSON.stringify(\n        to\n      )}`\n    );\n    return location;\n  }\n\n  function createHref(to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  let history: MemoryHistory = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to: To) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\",\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 1 });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 0 });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({ action, location: nextLocation, delta });\n      }\n    },\n    listen(fn: Listener) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    },\n  };\n\n  return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n  options: BrowserHistoryOptions = {}\n): BrowserHistory {\n  function createBrowserLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let { pathname, search, hash } = window.location;\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createBrowserHref(window: Window, to: To) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n\n  return getUrlBasedHistory(\n    createBrowserLocation,\n    createBrowserHref,\n    null,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n  options: HashHistoryOptions = {}\n): HashHistory {\n  function createHashLocation(\n    window: Window,\n    globalHistory: Window[\"history\"]\n  ) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\",\n    } = parsePath(window.location.hash.substr(1));\n\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      (globalHistory.state && globalHistory.state.usr) || null,\n      (globalHistory.state && globalHistory.state.key) || \"default\"\n    );\n  }\n\n  function createHashHref(window: Window, to: To) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n\n  function validateHashLocation(location: Location, to: To) {\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in hash history.push(${JSON.stringify(\n        to\n      )})`\n    );\n  }\n\n  return getUrlBasedHistory(\n    createHashLocation,\n    createHashHref,\n    validateHashLocation,\n    options\n  );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n  value: T | null | undefined,\n  message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\n\nexport function warning(cond: any, message: string) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\n\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index,\n  };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n  current: string | Location,\n  to: To,\n  state: any = null,\n  key?: string\n): Readonly<Location> {\n  let location: Readonly<Location> = {\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\",\n    ...(typeof to === \"string\" ? parsePath(to) : to),\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: (to && (to as Location).key) || key || createKey(),\n  };\n  return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n  pathname = \"/\",\n  search = \"\",\n  hash = \"\",\n}: Partial<Path>) {\n  if (search && search !== \"?\")\n    pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\")\n    pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n  let parsedPath: Partial<Path> = {};\n\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n\n  return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n  window?: Window;\n  v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n  getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n  createHref: (window: Window, to: To) => string,\n  validateLocation: ((location: Location, to: To) => void) | null,\n  options: UrlHistoryOptions = {}\n): UrlHistory {\n  let { window = document.defaultView!, v5Compat = false } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener: Listener | null = null;\n\n  let index = getIndex()!;\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n  }\n\n  function getIndex(): number {\n    let state = globalHistory.state || { idx: null };\n    return state.idx;\n  }\n\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({ action, location: history.location, delta });\n    }\n  }\n\n  function push(to: To, state?: any) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 1 });\n    }\n  }\n\n  function replace(to: To, state?: any) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 0 });\n    }\n  }\n\n  function createURL(to: To): URL {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base =\n      window.location.origin !== \"null\"\n        ? window.location.origin\n        : window.location.href;\n\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(\n      base,\n      `No window.location.(origin|href) available to create URL for href: ${href}`\n    );\n    return new URL(href, base);\n  }\n\n  let history: History = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn: Listener) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash,\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    },\n  };\n\n  return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n  [routeId: string]: any;\n}\n\nexport enum ResultType {\n  data = \"data\",\n  deferred = \"deferred\",\n  redirect = \"redirect\",\n  error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n  type: ResultType.data;\n  data: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n  type: ResultType.deferred;\n  deferredData: DeferredData;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n  type: ResultType.redirect;\n  // We keep the raw Response for redirects so we can return it verbatim\n  response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n  type: ResultType.error;\n  error: unknown;\n  statusCode?: number;\n  headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n  | SuccessResult\n  | DeferredResult\n  | RedirectResult\n  | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState.  This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n  | \"application/x-www-form-urlencoded\"\n  | \"multipart/form-data\"\n  | \"application/json\"\n  | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: FormData;\n      json: undefined;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: JsonValue;\n      text: undefined;\n    }\n  | {\n      formMethod: FormMethod | V7_FormMethod;\n      formAction: string;\n      formEncType: FormEncType;\n      formData: undefined;\n      json: undefined;\n      text: string;\n    };\n\n/**\n * @private\n * Arguments passed to route loader/action functions.  Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n  request: Request;\n  params: Params;\n  context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n//   ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n//   Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return).  Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\ntype DataFunctionReturnValue = Promise<DataFunctionValue> | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction<Context = any> = {\n  (\n    args: LoaderFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n  (\n    args: ActionFunctionArgs<Context>,\n    handlerCtx?: unknown\n  ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n  currentUrl: URL;\n  currentParams: AgnosticDataRouteMatch[\"params\"];\n  nextUrl: URL;\n  nextParams: AgnosticDataRouteMatch[\"params\"];\n  formMethod?: Submission[\"formMethod\"];\n  formAction?: Submission[\"formAction\"];\n  formEncType?: Submission[\"formEncType\"];\n  text?: Submission[\"text\"];\n  formData?: Submission[\"formData\"];\n  json?: Submission[\"json\"];\n  actionStatus?: number;\n  actionResult?: any;\n  defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature.  This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments.  It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n  (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n  (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {\n  shouldLoad: boolean;\n  resolve: (\n    handlerOverride?: (\n      handler: (ctx?: unknown) => DataFunctionReturnValue\n    ) => DataFunctionReturnValue\n  ) => Promise<DataStrategyResult>;\n}\n\nexport interface DataStrategyFunctionArgs<Context = any>\n  extends DataFunctionArgs<Context> {\n  matches: DataStrategyMatch[];\n  fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n  type: \"data\" | \"error\";\n  result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n  (args: DataStrategyFunctionArgs): Promise<Record<string, DataStrategyResult>>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n  O extends AgnosticRouteObject = AgnosticRouteObject,\n  M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n  signal: AbortSignal;\n  path: string;\n  matches: M[];\n  fetcherKey: string | undefined;\n  patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n  O extends AgnosticRouteObject = AgnosticRouteObject,\n  M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n  opts: AgnosticPatchRoutesOnNavigationFunctionArgs<O, M>\n) => void | Promise<void>;\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n  (route: AgnosticRouteObject): {\n    hasErrorBoundary: boolean;\n  } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n  | \"lazy\"\n  | \"caseSensitive\"\n  | \"path\"\n  | \"id\"\n  | \"index\"\n  | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n  \"lazy\",\n  \"caseSensitive\",\n  \"path\",\n  \"id\",\n  \"index\",\n  \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n  {\n    [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n  }[keyof T],\n  undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n  (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n  caseSensitive?: boolean;\n  path?: string;\n  id?: string;\n  loader?: LoaderFunction | boolean;\n  action?: ActionFunction | boolean;\n  hasErrorBoundary?: boolean;\n  shouldRevalidate?: ShouldRevalidateFunction;\n  handle?: any;\n  lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: undefined;\n  index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n  children?: AgnosticRouteObject[];\n  index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n  | AgnosticIndexRouteObject\n  | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n  id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n  children?: AgnosticDataRouteObject[];\n  id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n  | AgnosticDataIndexRouteObject\n  | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n  // split path into individual path segments\n  Path extends `${infer L}/${infer R}`\n    ? _PathParam<L> | _PathParam<R>\n    : // find params after `:`\n    Path extends `:${infer Param}`\n    ? Param extends `${infer Optional}?`\n      ? Optional\n      : Param\n    : // otherwise, there aren't any params present\n      never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n  // check if path is just a wildcard\n  Path extends \"*\" | \"/*\"\n    ? \"*\"\n    : // look for wildcard at the end of the path\n    Path extends `${infer Rest}/*`\n    ? \"*\" | _PathParam<Rest>\n    : // look for params in the absence of wildcards\n      _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n  // if you could not find path params, fallback to `string`\n  [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n  readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The route object that was used to match.\n   */\n  route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n  extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n  route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n  return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n  routes: AgnosticRouteObject[],\n  mapRouteProperties: MapRoutePropertiesFunction,\n  parentPath: string[] = [],\n  manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(\n      route.index !== true || !route.children,\n      `Cannot specify children on an index route`\n    );\n    invariant(\n      !manifest[id],\n      `Found a route id collision on id \"${id}\".  Route ` +\n        \"id's must be globally unique within Data Router usages\"\n    );\n\n    if (isIndexRoute(route)) {\n      let indexRoute: AgnosticDataIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n      };\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n        ...route,\n        ...mapRouteProperties(route),\n        id,\n        children: undefined,\n      };\n      manifest[id] = pathOrLayoutRoute;\n\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n          route.children,\n          mapRouteProperties,\n          treePath,\n          manifest\n        );\n      }\n\n      return pathOrLayoutRoute;\n    }\n  });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nexport function matchRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  locationArg: Partial<Location> | string,\n  basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  locationArg: Partial<Location> | string,\n  basename: string,\n  allowPartial: boolean\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n  let location =\n    typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n\n  if (pathname == null) {\n    return null;\n  }\n\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch<string, RouteObjectType>(\n      branches[i],\n      decoded,\n      allowPartial\n    );\n  }\n\n  return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n  id: string;\n  pathname: string;\n  params: AgnosticRouteMatch[\"params\"];\n  data: Data;\n  handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n  match: AgnosticDataRouteMatch,\n  loaderData: RouteData\n): UIMatch {\n  let { route, pathname, params } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle,\n  };\n}\n\ninterface RouteMeta<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  relativePath: string;\n  caseSensitive: boolean;\n  childrenIndex: number;\n  route: RouteObjectType;\n}\n\ninterface RouteBranch<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n  path: string;\n  score: number;\n  routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  routes: RouteObjectType[],\n  branches: RouteBranch<RouteObjectType>[] = [],\n  parentsMeta: RouteMeta<RouteObjectType>[] = [],\n  parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n  let flattenRoute = (\n    route: RouteObjectType,\n    index: number,\n    relativePath?: string\n  ) => {\n    let meta: RouteMeta<RouteObjectType> = {\n      relativePath:\n        relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route,\n    };\n\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(\n        meta.relativePath.startsWith(parentPath),\n        `Absolute route path \"${meta.relativePath}\" nested under path ` +\n          `\"${parentPath}\" is not valid. An absolute child route path ` +\n          `must start with the combined path of all its parent routes.`\n      );\n\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n        // Our types know better, but runtime JS may not!\n        // @ts-expect-error\n        route.index !== true,\n        `Index routes must not have child routes. Please remove ` +\n          `all child routes from route path \"${path}\".`\n      );\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta,\n    });\n  };\n  routes.forEach((route, index) => {\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !route.path?.includes(\"?\")) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n\n  return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n\n  let [first, ...rest] = segments;\n\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n  let result: string[] = [];\n\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(\n    ...restExploded.map((subpath) =>\n      subpath === \"\" ? required : [required, subpath].join(\"/\")\n    )\n  );\n\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map((exploded) =>\n    path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n  );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n  branches.sort((a, b) =>\n    a.score !== b.score\n      ? b.score - a.score // Higher score first\n      : compareIndexes(\n          a.routesMeta.map((meta) => meta.childrenIndex),\n          b.routesMeta.map((meta) => meta.childrenIndex)\n        )\n  );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n\n  return segments\n    .filter((s) => !isSplat(s))\n    .reduce(\n      (score, segment) =>\n        score +\n        (paramRe.test(segment)\n          ? dynamicSegmentValue\n          : segment === \"\"\n          ? emptySegmentValue\n          : staticSegmentValue),\n      initialScore\n    );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n  let siblings =\n    a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n  return siblings\n    ? // If two routes are siblings, we should try to match the earlier sibling\n      // first. This allows people to have fine-grained control over the matching\n      // behavior by simply putting routes with identical paths in the order they\n      // want them tried.\n      a[a.length - 1] - b[b.length - 1]\n    : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n      // so they sort equally.\n      0;\n}\n\nfunction matchRouteBranch<\n  ParamKey extends string = string,\n  RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n  branch: RouteBranch<RouteObjectType>,\n  pathname: string,\n  allowPartial = false\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n  let { routesMeta } = branch;\n\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname =\n      matchedPathname === \"/\"\n        ? pathname\n        : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath(\n      { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n      remainingPathname\n    );\n\n    let route = meta.route;\n\n    if (\n      !match &&\n      end &&\n      allowPartial &&\n      !routesMeta[routesMeta.length - 1].route.index\n    ) {\n      match = matchPath(\n        {\n          path: meta.relativePath,\n          caseSensitive: meta.caseSensitive,\n          end: false,\n        },\n        remainingPathname\n      );\n    }\n\n    if (!match) {\n      return null;\n    }\n\n    Object.assign(matchedParams, match.params);\n\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams as Params<ParamKey>,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(\n        joinPaths([matchedPathname, match.pathnameBase])\n      ),\n      route,\n    });\n\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n\n  return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n  originalPath: Path,\n  params: {\n    [key in PathParam<Path>]: string | null;\n  } = {} as any\n): string {\n  let path: string = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(\n      false,\n      `Route path \"${path}\" will be treated as if it were ` +\n        `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n        `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n        `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n    );\n    path = path.replace(/\\*$/, \"/*\") as Path;\n  }\n\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n  const stringify = (p: any) =>\n    p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n  const segments = path\n    .split(/\\/+/)\n    .map((segment, index, array) => {\n      const isLastSegment = index === array.length - 1;\n\n      // only apply the splat if it's the last segment\n      if (isLastSegment && segment === \"*\") {\n        const star = \"*\" as PathParam<Path>;\n        // Apply the splat\n        return stringify(params[star]);\n      }\n\n      const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n      if (keyMatch) {\n        const [, key, optional] = keyMatch;\n        let param = params[key as PathParam<Path>];\n        invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n        return stringify(param);\n      }\n\n      // Remove any optional markers from optional static segments\n      return segment.replace(/\\?$/g, \"\");\n    })\n    // Remove empty segments\n    .filter((segment) => !!segment);\n\n  return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n  /**\n   * A string to match against a URL pathname. May contain `:id`-style segments\n   * to indicate placeholders for dynamic parameters. May also end with `/*` to\n   * indicate matching the rest of the URL pathname.\n   */\n  path: Path;\n  /**\n   * Should be `true` if the static portions of the `path` should be matched in\n   * the same case.\n   */\n  caseSensitive?: boolean;\n  /**\n   * Should be `true` if this pattern should match the entire URL pathname.\n   */\n  end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n  /**\n   * The names and values of dynamic parameters in the URL.\n   */\n  params: Params<ParamKey>;\n  /**\n   * The portion of the URL pathname that was matched.\n   */\n  pathname: string;\n  /**\n   * The portion of the URL pathname that was matched before child routes.\n   */\n  pathnameBase: string;\n  /**\n   * The pattern that was used to match.\n   */\n  pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n  -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nexport function matchPath<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(\n  pattern: PathPattern<Path> | Path,\n  pathname: string\n): PathMatch<ParamKey> | null {\n  if (typeof pattern === \"string\") {\n    pattern = { path: pattern, caseSensitive: false, end: true };\n  }\n\n  let [matcher, compiledParams] = compilePath(\n    pattern.path,\n    pattern.caseSensitive,\n    pattern.end\n  );\n\n  let match = pathname.match(matcher);\n  if (!match) return null;\n\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params: Params = compiledParams.reduce<Mutable<Params>>(\n    (memo, { paramName, isOptional }, index) => {\n      // We need to compute the pathnameBase here using the raw splat value\n      // instead of using params[\"*\"] later because it will be decoded then\n      if (paramName === \"*\") {\n        let splatValue = captureGroups[index] || \"\";\n        pathnameBase = matchedPathname\n          .slice(0, matchedPathname.length - splatValue.length)\n          .replace(/(.)\\/+$/, \"$1\");\n      }\n\n      const value = captureGroups[index];\n      if (isOptional && !value) {\n        memo[paramName] = undefined;\n      } else {\n        memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n      }\n      return memo;\n    },\n    {}\n  );\n\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern,\n  };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n  path: string,\n  caseSensitive = false,\n  end = true\n): [RegExp, CompiledPathParam[]] {\n  warning(\n    path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n    `Route path \"${path}\" will be treated as if it were ` +\n      `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n      `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n      `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n  );\n\n  let params: CompiledPathParam[] = [];\n  let regexpSource =\n    \"^\" +\n    path\n      .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n      .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n      .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n      .replace(\n        /\\/:([\\w-]+)(\\?)?/g,\n        (_: string, paramName: string, isOptional) => {\n          params.push({ paramName, isOptional: isOptional != null });\n          return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n        }\n      );\n\n  if (path.endsWith(\"*\")) {\n    params.push({ paramName: \"*\" });\n    regexpSource +=\n      path === \"*\" || path === \"/*\"\n        ? \"(.*)$\" // Already matched the initial /, just match the rest\n        : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else {\n    // Nothing to match for \"\" or \"/\"\n  }\n\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n  return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n  try {\n    return value\n      .split(\"/\")\n      .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n      .join(\"/\");\n  } catch (error) {\n    warning(\n      false,\n      `The URL path \"${value}\" could not be decoded because it is is a ` +\n        `malformed URL segment. This is probably due to a bad percent ` +\n        `encoding (${error}).`\n    );\n\n    return value;\n  }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n  pathname: string,\n  basename: string\n): string | null {\n  if (basename === \"/\") return pathname;\n\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\")\n    ? basename.length - 1\n    : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n\n  return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\",\n  } = typeof to === \"string\" ? parsePath(to) : to;\n\n  let pathname = toPathname\n    ? toPathname.startsWith(\"/\")\n      ? toPathname\n      : resolvePathname(toPathname, fromPathname)\n    : fromPathname;\n\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash),\n  };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n\n  relativeSegments.forEach((segment) => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n  char: string,\n  field: string,\n  dest: string,\n  path: Partial<Path>\n) {\n  return (\n    `Cannot include a '${char}' character in a manually specified ` +\n    `\\`to.${field}\\` field [${JSON.stringify(\n      path\n    )}].  Please separate it out to the ` +\n    `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n    `a string in <Link to=\"...\"> and the router will parse it for you.`\n  );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nexport function getPathContributingMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n  return matches.filter(\n    (match, index) =>\n      index === 0 || (match.route.path && match.route.path.length > 0)\n  );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n  T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n  let pathMatches = getPathContributingMatches(matches);\n\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) =>\n      idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n    );\n  }\n\n  return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n  toArg: To,\n  routePathnames: string[],\n  locationPathname: string,\n  isPathRelative = false\n): Path {\n  let to: Partial<Path>;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = { ...toArg };\n\n    invariant(\n      !to.pathname || !to.pathname.includes(\"?\"),\n      getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n    );\n    invariant(\n      !to.pathname || !to.pathname.includes(\"#\"),\n      getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n    );\n    invariant(\n      !to.search || !to.search.includes(\"#\"),\n      getInvalidPathError(\"#\", \"search\", \"hash\", to)\n    );\n  }\n\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n  let from: string;\n\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n\n      to.pathname = toSegments.join(\"/\");\n    }\n\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n\n  let path = resolvePath(to, from);\n\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash =\n    toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash =\n    (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (\n    !path.pathname.endsWith(\"/\") &&\n    (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n  ) {\n    path.pathname += \"/\";\n  }\n\n  return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || (to as Path).pathname === \"\"\n    ? \"/\"\n    : typeof to === \"string\"\n    ? parsePath(to).pathname\n    : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n  paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n  pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n  !search || search === \"?\"\n    ? \"\"\n    : search.startsWith(\"?\")\n    ? search\n    : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n  !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n  data: Data,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n\n  return new Response(JSON.stringify(data), {\n    ...responseInit,\n    headers,\n  });\n};\n\nexport class DataWithResponseInit<D> {\n  type: string = \"DataWithResponseInit\";\n  data: D;\n  init: ResponseInit | null;\n\n  constructor(data: D, init?: ResponseInit) {\n    this.data = data;\n    this.init = init || null;\n  }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data<D>(data: D, init?: number | ResponseInit) {\n  return new DataWithResponseInit(\n    data,\n    typeof init === \"number\" ? { status: init } : init\n  );\n}\n\nexport interface TrackedPromise extends Promise<any> {\n  _tracked?: boolean;\n  _data?: any;\n  _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n  private pendingKeysSet: Set<string> = new Set<string>();\n  private controller: AbortController;\n  private abortPromise: Promise<void>;\n  private unlistenAbortSignal: () => void;\n  private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n    new Set();\n  data: Record<string, unknown>;\n  init?: ResponseInit;\n  deferredKeys: string[] = [];\n\n  constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n    invariant(\n      data && typeof data === \"object\" && !Array.isArray(data),\n      \"defer() only accepts plain objects\"\n    );\n\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject: (e: AbortedDeferredError) => void;\n    this.abortPromise = new Promise((_, r) => (reject = r));\n    this.controller = new AbortController();\n    let onAbort = () =>\n      reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () =>\n      this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n\n    this.data = Object.entries(data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: this.trackPromise(key, value),\n        }),\n      {}\n    );\n\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n\n    this.init = responseInit;\n  }\n\n  private trackPromise(\n    key: string,\n    value: Promise<unknown> | unknown\n  ): TrackedPromise | unknown {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n      (data) => this.onSettle(promise, key, undefined, data as unknown),\n      (error) => this.onSettle(promise, key, error as unknown)\n    );\n\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n\n    Object.defineProperty(promise, \"_tracked\", { get: () => true });\n    return promise;\n  }\n\n  private onSettle(\n    promise: TrackedPromise,\n    key: string,\n    error: unknown,\n    data?: unknown\n  ): unknown {\n    if (\n      this.controller.signal.aborted &&\n      error instanceof AbortedDeferredError\n    ) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      return Promise.reject(error);\n    }\n\n    this.pendingKeysSet.delete(key);\n\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\n        `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n          `you must resolve/reject with a value or \\`null\\`.`\n      );\n      Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", { get: () => error });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n\n    Object.defineProperty(promise, \"_data\", { get: () => data });\n    this.emit(false, key);\n    return data;\n  }\n\n  private emit(aborted: boolean, settledKey?: string) {\n    this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n  }\n\n  subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n\n  async resolveData(signal: AbortSignal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise((resolve) => {\n        this.subscribe((aborted) => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n\n  get unwrappedData() {\n    invariant(\n      this.data !== null && this.done,\n      \"Can only unwrap data on initialized and settled deferreds\"\n    );\n\n    return Object.entries(this.data).reduce(\n      (acc, [key, value]) =>\n        Object.assign(acc, {\n          [key]: unwrapTrackedPromise(value),\n        }),\n      {}\n    );\n  }\n\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n  return (\n    value instanceof Promise && (value as TrackedPromise)._tracked === true\n  );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n\nexport type DeferFunction = (\n  data: Record<string, unknown>,\n  init?: number | ResponseInit\n) => DeferredData;\n\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nexport const defer: DeferFunction = (data, init = {}) => {\n  let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n  return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n  url: string,\n  init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = { status: responseInit };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n\n  return new Response(null, {\n    ...responseInit,\n    headers,\n  });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n\nexport type ErrorResponse = {\n  status: number;\n  statusText: string;\n  data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n  status: number;\n  statusText: string;\n  data: any;\n  private error?: Error;\n  private internal: boolean;\n\n  constructor(\n    status: number,\n    statusText: string | undefined,\n    data: any,\n    internal = false\n  ) {\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n  return (\n    error != null &&\n    typeof error.status === \"number\" &&\n    typeof error.statusText === \"string\" &&\n    typeof error.internal === \"boolean\" &&\n    \"data\" in error\n  );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n  Action as HistoryAction,\n  createLocation,\n  createPath,\n  invariant,\n  parsePath,\n  warning,\n} from \"./history\";\nimport type {\n  AgnosticDataRouteMatch,\n  AgnosticDataRouteObject,\n  DataStrategyMatch,\n  AgnosticRouteObject,\n  DataResult,\n  DataStrategyFunction,\n  DataStrategyFunctionArgs,\n  DeferredData,\n  DeferredResult,\n  DetectErrorBoundaryFunction,\n  ErrorResult,\n  FormEncType,\n  FormMethod,\n  HTMLFormMethod,\n  DataStrategyResult,\n  ImmutableRouteKey,\n  MapRoutePropertiesFunction,\n  MutationFormMethod,\n  RedirectResult,\n  RouteData,\n  RouteManifest,\n  ShouldRevalidateFunctionArgs,\n  Submission,\n  SuccessResult,\n  UIMatch,\n  V7_FormMethod,\n  V7_MutationFormMethod,\n  AgnosticPatchRoutesOnNavigationFunction,\n  DataWithResponseInit,\n} from \"./utils\";\nimport {\n  ErrorResponseImpl,\n  ResultType,\n  convertRouteMatchToUiMatch,\n  convertRoutesToDataRoutes,\n  getPathContributingMatches,\n  getResolveToMatches,\n  immutableRouteKeys,\n  isRouteErrorResponse,\n  joinPaths,\n  matchRoutes,\n  matchRoutesImpl,\n  resolveTo,\n  stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the basename for the router\n   */\n  get basename(): RouterInit[\"basename\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the future config for the router\n   */\n  get future(): FutureConfig;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the current state of the router\n   */\n  get state(): RouterState;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the routes for this router instance\n   */\n  get routes(): AgnosticDataRouteObject[];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Return the window associated with the router\n   */\n  get window(): RouterInit[\"window\"];\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Initialize the router, including adding history listeners and kicking off\n   * initial data fetches.  Returns a function to cleanup listeners and abort\n   * any in-progress loads\n   */\n  initialize(): Router;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Subscribe to router.state updates\n   *\n   * @param fn function to call with the new state\n   */\n  subscribe(fn: RouterSubscriber): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Enable scroll restoration behavior in the router\n   *\n   * @param savedScrollPositions Object that will manage positions, in case\n   *                             it's being restored from sessionStorage\n   * @param getScrollPosition    Function to get the active Y scroll position\n   * @param getKey               Function to get the key to use for restoration\n   */\n  enableScrollRestoration(\n    savedScrollPositions: Record<string, number>,\n    getScrollPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ): () => void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Navigate forward/backward in the history stack\n   * @param to Delta to move in the history stack\n   */\n  navigate(to: number): Promise<void>;\n\n  /**\n   * Navigate to the given path\n   * @param to Path to navigate to\n   * @param opts Navigation options (method, submission, etc.)\n   */\n  navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a fetcher load/submission\n   *\n   * @param key     Fetcher key\n   * @param routeId Route that owns the fetcher\n   * @param href    href to fetch\n   * @param opts    Fetcher options, (method, submission, etc.)\n   */\n  fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Trigger a revalidation of all current route loaders and fetcher loads\n   */\n  revalidate(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to create an href for the given location\n   * @param location\n   */\n  createHref(location: Location | URL): string;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Utility function to URL encode a destination path according to the internal\n   * history implementation\n   * @param to\n   */\n  encodeLocation(to: To): Path;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get/create a fetcher for the given key\n   * @param key\n   */\n  getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete the fetcher for a given key\n   * @param key\n   */\n  deleteFetcher(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Cleanup listeners and abort any in-progress loads\n   */\n  dispose(): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Get a navigation blocker\n   * @param key The identifier for the blocker\n   * @param fn The blocker function implementation\n   */\n  getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Delete a navigation blocker\n   * @param key The identifier for the blocker\n   */\n  deleteBlocker(key: string): void;\n\n  /**\n   * @internal\n   * PRIVATE DO NOT USE\n   *\n   * Patch additional children routes into an existing parent route\n   * @param routeId The parent route id or a callback function accepting `patch`\n   *                to perform batch patching\n   * @param children The additional children routes\n   */\n  patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * HMR needs to pass in-flight route updates to React Router\n   * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n   */\n  _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal fetch AbortControllers accessed by unit tests\n   */\n  _internalFetchControllers: Map<string, AbortController>;\n\n  /**\n   * @internal\n   * PRIVATE - DO NOT USE\n   *\n   * Internal pending DeferredData instances accessed by unit tests\n   */\n  _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router.  During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n  /**\n   * The action of the most recent navigation\n   */\n  historyAction: HistoryAction;\n\n  /**\n   * The current location reflected by the router\n   */\n  location: Location;\n\n  /**\n   * The current set of route matches\n   */\n  matches: AgnosticDataRouteMatch[];\n\n  /**\n   * Tracks whether we've completed our initial data load\n   */\n  initialized: boolean;\n\n  /**\n   * Current scroll position we should start at for a new view\n   *  - number -> scroll position to restore to\n   *  - false -> do not restore scroll at all (used during submissions)\n   *  - null -> don't have a saved position, scroll to hash or top of page\n   */\n  restoreScrollPosition: number | false | null;\n\n  /**\n   * Indicate whether this navigation should skip resetting the scroll position\n   * if we are unable to restore the scroll position\n   */\n  preventScrollReset: boolean;\n\n  /**\n   * Tracks the state of the current navigation\n   */\n  navigation: Navigation;\n\n  /**\n   * Tracks any in-progress revalidations\n   */\n  revalidation: RevalidationState;\n\n  /**\n   * Data from the loaders for the current matches\n   */\n  loaderData: RouteData;\n\n  /**\n   * Data from the action for the current matches\n   */\n  actionData: RouteData | null;\n\n  /**\n   * Errors caught from loaders for the current matches\n   */\n  errors: RouteData | null;\n\n  /**\n   * Map of current fetchers\n   */\n  fetchers: Map<string, Fetcher>;\n\n  /**\n   * Map of current blockers\n   */\n  blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n  Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n  v7_fetcherPersist: boolean;\n  v7_normalizeFormMethod: boolean;\n  v7_partialHydration: boolean;\n  v7_prependBasename: boolean;\n  v7_relativeSplatPath: boolean;\n  v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n  routes: AgnosticRouteObject[];\n  history: History;\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<FutureConfig>;\n  hydrationData?: HydrationState;\n  window?: Window;\n  dataStrategy?: DataStrategyFunction;\n  patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n  basename: Router[\"basename\"];\n  location: RouterState[\"location\"];\n  matches: RouterState[\"matches\"];\n  loaderData: RouterState[\"loaderData\"];\n  actionData: RouterState[\"actionData\"];\n  errors: RouterState[\"errors\"];\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n  actionHeaders: Record<string, Headers>;\n  activeDeferreds: Record<string, DeferredData> | null;\n  _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n  dataRoutes: AgnosticDataRouteObject[];\n  query(\n    request: Request,\n    opts?: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<StaticHandlerContext | Response>;\n  queryRoute(\n    request: Request,\n    opts?: {\n      routeId?: string;\n      requestContext?: unknown;\n      dataStrategy?: DataStrategyFunction;\n    }\n  ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n  currentLocation: Location;\n  nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n  (\n    state: RouterState,\n    opts: {\n      deletedFetchers: string[];\n      viewTransitionOpts?: ViewTransitionOpts;\n      flushSync: boolean;\n    }\n  ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n  (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n  (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n  replace?: boolean;\n  state?: any;\n  fromRouteId?: string;\n  viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n  formMethod?: HTMLFormMethod;\n  formEncType?: FormEncType;\n} & (\n  | { formData: FormData; body?: undefined }\n  | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n  | LinkNavigateOptions\n  | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n  Idle: {\n    state: \"idle\";\n    location: undefined;\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    formData: undefined;\n    json: undefined;\n    text: undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    location: Location;\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    text: Submission[\"text\"];\n  };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n  Idle: {\n    state: \"idle\";\n    formMethod: undefined;\n    formAction: undefined;\n    formEncType: undefined;\n    text: undefined;\n    formData: undefined;\n    json: undefined;\n    data: TData | undefined;\n  };\n  Loading: {\n    state: \"loading\";\n    formMethod: Submission[\"formMethod\"] | undefined;\n    formAction: Submission[\"formAction\"] | undefined;\n    formEncType: Submission[\"formEncType\"] | undefined;\n    text: Submission[\"text\"] | undefined;\n    formData: Submission[\"formData\"] | undefined;\n    json: Submission[\"json\"] | undefined;\n    data: TData | undefined;\n  };\n  Submitting: {\n    state: \"submitting\";\n    formMethod: Submission[\"formMethod\"];\n    formAction: Submission[\"formAction\"];\n    formEncType: Submission[\"formEncType\"];\n    text: Submission[\"text\"];\n    formData: Submission[\"formData\"];\n    json: Submission[\"json\"];\n    data: TData | undefined;\n  };\n};\n\nexport type Fetcher<TData = any> =\n  FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n  state: \"blocked\";\n  reset(): void;\n  proceed(): void;\n  location: Location;\n}\n\ninterface BlockerUnblocked {\n  state: \"unblocked\";\n  reset: undefined;\n  proceed: undefined;\n  location: undefined;\n}\n\ninterface BlockerProceeding {\n  state: \"proceeding\";\n  reset: undefined;\n  proceed: undefined;\n  location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n  currentLocation: Location;\n  nextLocation: Location;\n  historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n  /**\n   * startNavigation does not need to complete the navigation because we\n   * redirected or got interrupted\n   */\n  shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n  /**\n   * Route matches which may have been updated from fog of war discovery\n   */\n  matches?: RouterState[\"matches\"];\n  /**\n   * Tuple for the returned or thrown value from the current action.  The routeId\n   * is the action route for success and the bubbled boundary route for errors.\n   */\n  pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n  /**\n   * Route matches which may have been updated from fog of war discovery\n   */\n  matches?: RouterState[\"matches\"];\n  /**\n   * loaderData returned from the current set of loaders\n   */\n  loaderData?: RouterState[\"loaderData\"];\n  /**\n   * errors thrown from the current set of loaders\n   */\n  errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n  routeId: string;\n  path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n  key: string;\n  match: AgnosticDataRouteMatch | null;\n  matches: AgnosticDataRouteMatch[] | null;\n  controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n  \"post\",\n  \"put\",\n  \"patch\",\n  \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n  validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n  \"get\",\n  ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n  const routerWindow = init.window\n    ? init.window\n    : typeof window !== \"undefined\"\n    ? window\n    : undefined;\n  const isBrowser =\n    typeof routerWindow !== \"undefined\" &&\n    typeof routerWindow.document !== \"undefined\" &&\n    typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n\n  invariant(\n    init.routes.length > 0,\n    \"You must provide a non-empty routes array to createRouter\"\n  );\n\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n\n  // Routes keyed by ID\n  let manifest: RouteManifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(\n    init.routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n  let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\n  // Config driven behavior flags\n  let future: FutureConfig = {\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false,\n    ...init.future,\n  };\n  // Cleanup function for history\n  let unlistenHistory: (() => void) | null = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set<RouterSubscriber>();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions: Record<string, number> | null = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition: GetScrollPositionFunction | null = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialMatchesIsFOW = false;\n  let initialErrors: RouteData | null = null;\n\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname,\n    });\n    let { matches, route } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = { [route.id]: error };\n  }\n\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(\n      initialMatches,\n      dataRoutes,\n      init.history.location.pathname\n    );\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n\n  let initialized: boolean;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(\n        null,\n        dataRoutes,\n        init.history.location.pathname\n      );\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatchesIsFOW = true;\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some((m) => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some((m) => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(\n        (m) => errors![m.route.id] !== undefined\n      );\n      initialized = initialMatches\n        .slice(0, idx + 1)\n        .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    } else {\n      initialized = initialMatches.every(\n        (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n      );\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n\n  let router: Router;\n  let state: RouterState = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n    actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n    errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map(),\n  };\n\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction: HistoryAction = HistoryAction.Pop;\n\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n\n  // AbortController for the active navigation\n  let pendingNavigationController: AbortController | null;\n\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions: Map<string, Set<string>> = new Map<\n    string,\n    Set<string>\n  >();\n\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener: (() => void) | null = null;\n\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes: string[] = [];\n\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads: Set<string> = new Set();\n\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map<string, AbortController>();\n\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map<string, number>();\n\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set<string>();\n\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map<string, number>();\n\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set<string>();\n\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map<string, DeferredData>();\n\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map<string, BlockerFunction>();\n\n  // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n  // that we only kick them off once for a given combo\n  let pendingPatchRoutes = new Map<\n    string,\n    ReturnType<AgnosticPatchRoutesOnNavigationFunction>\n  >();\n\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(\n      ({ action: historyAction, location, delta }) => {\n        // Ignore this event if it was just us resetting the URL from a\n        // blocked POP navigation\n        if (unblockBlockerHistoryUpdate) {\n          unblockBlockerHistoryUpdate();\n          unblockBlockerHistoryUpdate = undefined;\n          return;\n        }\n\n        warning(\n          blockerFunctions.size === 0 || delta != null,\n          \"You are trying to use a blocker on a POP navigation to a location \" +\n            \"that was not created by @remix-run/router. This will fail silently in \" +\n            \"production. This can happen if you are navigating outside the router \" +\n            \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n            \"router navigation APIs.  This can also happen if you are using \" +\n            \"createHashRouter and the user manually changes the URL.\"\n        );\n\n        let blockerKey = shouldBlockNavigation({\n          currentLocation: state.location,\n          nextLocation: location,\n          historyAction,\n        });\n\n        if (blockerKey && delta != null) {\n          // Restore the URL to match the current UI, but don't update router state\n          let nextHistoryUpdatePromise = new Promise<void>((resolve) => {\n            unblockBlockerHistoryUpdate = resolve;\n          });\n          init.history.go(delta * -1);\n\n          // Put the blocker into a blocked state\n          updateBlocker(blockerKey, {\n            state: \"blocked\",\n            location,\n            proceed() {\n              updateBlocker(blockerKey!, {\n                state: \"proceeding\",\n                proceed: undefined,\n                reset: undefined,\n                location,\n              });\n              // Re-do the same POP navigation we just blocked, after the url\n              // restoration is also complete.  See:\n              // https://github.com/remix-run/react-router/issues/11613\n              nextHistoryUpdatePromise.then(() => init.history.go(delta));\n            },\n            reset() {\n              let blockers = new Map(state.blockers);\n              blockers.set(blockerKey!, IDLE_BLOCKER);\n              updateState({ blockers });\n            },\n          });\n          return;\n        }\n\n        return startNavigation(historyAction, location);\n      }\n    );\n\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () =>\n        persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () =>\n        routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(HistoryAction.Pop, state.location, {\n        initialHydration: true,\n      });\n    }\n\n    return router;\n  }\n\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n\n  // Subscribe to state updates for the router\n  function subscribe(fn: RouterSubscriber) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n\n  // Update our state and notify the calling context of the change\n  function updateState(\n    newState: Partial<RouterState>,\n    opts: {\n      flushSync?: boolean;\n      viewTransitionOpts?: ViewTransitionOpts;\n    } = {}\n  ): void {\n    state = {\n      ...state,\n      ...newState,\n    };\n\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers: string[] = [];\n    let deletedFetchersKeys: string[] = [];\n\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n\n    // Remove any lingering deleted fetchers that have already been removed\n    // from state.fetchers\n    deletedFetchers.forEach((key) => {\n      if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n        deletedFetchersKeys.push(key);\n      }\n    });\n\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach((subscriber) =>\n      subscriber(state, {\n        deletedFetchers: deletedFetchersKeys,\n        viewTransitionOpts: opts.viewTransitionOpts,\n        flushSync: opts.flushSync === true,\n      })\n    );\n\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach((key) => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n    } else {\n      // We already called deleteFetcher() on these, can remove them from this\n      // Set now that we've handed the keys off to the data layer\n      deletedFetchersKeys.forEach((key) => deletedFetchers.delete(key));\n    }\n  }\n\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(\n    location: Location,\n    newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n    { flushSync }: { flushSync?: boolean } = {}\n  ): void {\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload =\n      state.actionData != null &&\n      state.navigation.formMethod != null &&\n      isMutationMethod(state.navigation.formMethod) &&\n      state.navigation.state === \"loading\" &&\n      location.state?._isRedirect !== true;\n\n    let actionData: RouteData | null;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData\n      ? mergeLoaderData(\n          state.loaderData,\n          newState.loaderData,\n          newState.matches || [],\n          newState.errors\n        )\n      : state.loaderData;\n\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset =\n      pendingPreventScrollReset === true ||\n      (state.navigation.formMethod != null &&\n        isMutationMethod(state.navigation.formMethod) &&\n        location.state?._isRedirect !== true);\n\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n\n    if (isUninterruptedRevalidation) {\n      // If this was an uninterrupted revalidation then do not touch history\n    } else if (pendingAction === HistoryAction.Pop) {\n      // Do nothing for POP - URL has already been updated\n    } else if (pendingAction === HistoryAction.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === HistoryAction.Replace) {\n      init.history.replace(location, location.state);\n    }\n\n    let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === HistoryAction.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location,\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location,\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set<string>([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location,\n      };\n    }\n\n    updateState(\n      {\n        ...newState, // matches, errors, fetchers go through as-is\n        actionData,\n        loaderData,\n        historyAction: pendingAction,\n        location,\n        initialized: true,\n        navigation: IDLE_NAVIGATION,\n        revalidation: \"idle\",\n        restoreScrollPosition: getSavedScrollPosition(\n          location,\n          newState.matches || state.matches\n        ),\n        preventScrollReset,\n        blockers,\n      },\n      {\n        viewTransitionOpts,\n        flushSync: flushSync === true,\n      }\n    );\n\n    // Reset stateful navigation vars\n    pendingAction = HistoryAction.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(\n    to: number | To | null,\n    opts?: RouterNavigateOptions\n  ): Promise<void> {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      to,\n      future.v7_relativeSplatPath,\n      opts?.fromRouteId,\n      opts?.relative\n    );\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      false,\n      normalizedPath,\n      opts\n    );\n\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = {\n      ...nextLocation,\n      ...init.history.encodeLocation(nextLocation),\n    };\n\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n    let historyAction = HistoryAction.Push;\n\n    if (userReplace === true) {\n      historyAction = HistoryAction.Replace;\n    } else if (userReplace === false) {\n      // no-op\n    } else if (\n      submission != null &&\n      isMutationMethod(submission.formMethod) &&\n      submission.formAction === state.location.pathname + state.location.search\n    ) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = HistoryAction.Replace;\n    }\n\n    let preventScrollReset =\n      opts && \"preventScrollReset\" in opts\n        ? opts.preventScrollReset === true\n        : undefined;\n\n    let flushSync = (opts && opts.flushSync) === true;\n\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction,\n    });\n\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey!, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation,\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey!, IDLE_BLOCKER);\n          updateState({ blockers });\n        },\n      });\n      return;\n    }\n\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.viewTransition,\n      flushSync,\n    });\n  }\n\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({ revalidation: \"loading\" });\n\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true,\n      });\n      return;\n    }\n\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(\n      pendingAction || state.historyAction,\n      state.navigation.location,\n      {\n        overrideNavigation: state.navigation,\n        // Proxy through any rending view transition\n        enableViewTransition: pendingViewTransitionEnabled === true,\n      }\n    );\n  }\n\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(\n    historyAction: HistoryAction,\n    location: Location,\n    opts?: {\n      initialHydration?: boolean;\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      overrideNavigation?: Navigation;\n      pendingError?: ErrorResponseImpl;\n      startUninterruptedRevalidation?: boolean;\n      preventScrollReset?: boolean;\n      replace?: boolean;\n      enableViewTransition?: boolean;\n      flushSync?: boolean;\n    }\n  ): Promise<void> {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation =\n      (opts && opts.startUninterruptedRevalidation) === true;\n\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches =\n      opts?.initialHydration &&\n      state.matches &&\n      state.matches.length > 0 &&\n      !initialMatchesIsFOW\n        ? // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n          state.matches\n        : matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial hydration will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (\n      matches &&\n      state.initialized &&\n      !isRevalidationRequired &&\n      isHashChangeOnly(state.location, location) &&\n      !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n    ) {\n      completeNavigation(location, { matches }, { flushSync });\n      return;\n    }\n\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let { error, notFoundMatches, route } = handleNavigational404(\n        location.pathname\n      );\n      completeNavigation(\n        location,\n        {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error,\n          },\n        },\n        { flushSync }\n      );\n      return;\n    }\n\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(\n      init.history,\n      location,\n      pendingNavigationController.signal,\n      opts && opts.submission\n    );\n    let pendingActionResult: PendingActionResult | undefined;\n\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [\n        findNearestBoundary(matches).route.id,\n        { type: ResultType.error, error: opts.pendingError },\n      ];\n    } else if (\n      opts &&\n      opts.submission &&\n      isMutationMethod(opts.submission.formMethod)\n    ) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(\n        request,\n        location,\n        opts.submission,\n        matches,\n        fogOfWar.active,\n        { replace: opts.replace, flushSync }\n      );\n\n      if (actionResult.shortCircuited) {\n        return;\n      }\n\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (\n          isErrorResult(result) &&\n          isRouteErrorResponse(result.error) &&\n          result.error.status === 404\n        ) {\n          pendingNavigationController = null;\n\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error,\n            },\n          });\n          return;\n        }\n      }\n\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n\n      // Create a GET request for the loaders\n      request = createClientSideRequest(\n        init.history,\n        request.url,\n        request.signal\n      );\n    }\n\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors,\n    } = await handleLoaders(\n      request,\n      location,\n      matches,\n      fogOfWar.active,\n      loadingNavigation,\n      opts && opts.submission,\n      opts && opts.fetcherSubmission,\n      opts && opts.replace,\n      opts && opts.initialHydration === true,\n      flushSync,\n      pendingActionResult\n    );\n\n    if (shortCircuited) {\n      return;\n    }\n\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n\n    completeNavigation(location, {\n      matches: updatedMatches || matches,\n      ...getActionDataForCommit(pendingActionResult),\n      loaderData,\n      errors,\n    });\n  }\n\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(\n    request: Request,\n    location: Location,\n    submission: Submission,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    opts: { replace?: boolean; flushSync?: boolean } = {}\n  ): Promise<HandleActionResult> {\n    interruptActiveLoads();\n\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n          .route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [\n            boundaryId,\n            {\n              type: ResultType.error,\n              error: discoverResult.error,\n            },\n          ],\n        };\n      } else if (!discoverResult.matches) {\n        let { notFoundMatches, error, route } = handleNavigational404(\n          location.pathname\n        );\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [\n            route.id,\n            {\n              type: ResultType.error,\n              error,\n            },\n          ],\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n\n    // Call our action and get the result\n    let result: DataResult;\n    let actionMatch = getTargetMatch(matches, location);\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id,\n        }),\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        state,\n        request,\n        [actionMatch],\n        matches,\n        null\n      );\n      result = results[actionMatch.route.id];\n\n      if (request.signal.aborted) {\n        return { shortCircuited: true };\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      let replace: boolean;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(\n          result.response.headers.get(\"Location\")!,\n          new URL(request.url),\n          basename\n        );\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = HistoryAction.Push;\n      }\n\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result],\n      };\n    }\n\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result],\n    };\n  }\n\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    overrideNavigation?: Navigation,\n    submission?: Submission,\n    fetcherSubmission?: Submission,\n    replace?: boolean,\n    initialHydration?: boolean,\n    flushSync?: boolean,\n    pendingActionResult?: PendingActionResult\n  ): Promise<HandleLoadersResult> {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation =\n      overrideNavigation || getLoadingNavigation(location, submission);\n\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission =\n      submission ||\n      fetcherSubmission ||\n      getSubmissionFromNavigation(loadingNavigation);\n\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState =\n      !isUninterruptedRevalidation &&\n      (!future.v7_partialHydration || !initialHydration);\n\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(\n          {\n            navigation: loadingNavigation,\n            ...(actionData !== undefined ? { actionData } : {}),\n          },\n          {\n            flushSync,\n          }\n        );\n      }\n\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n          .route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: discoverResult.error,\n          },\n        };\n      } else if (!discoverResult.matches) {\n        let { error, notFoundMatches, route } = handleNavigational404(\n          location.pathname\n        );\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error,\n          },\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      activeSubmission,\n      location,\n      future.v7_partialHydration && initialHydration === true,\n      future.v7_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      pendingActionResult\n    );\n\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(\n      (routeId) =>\n        !(matches && matches.some((m) => m.route.id === routeId)) ||\n        (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n    );\n\n    pendingNavigationLoadId = ++incrementingLoadId;\n\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(\n        location,\n        {\n          matches,\n          loaderData: {},\n          // Commit pending error if we're short circuiting\n          errors:\n            pendingActionResult && isErrorResult(pendingActionResult[1])\n              ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n              : null,\n          ...getActionDataForCommit(pendingActionResult),\n          ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n        },\n        { flushSync }\n      );\n      return { shortCircuited: true };\n    }\n\n    if (shouldUpdateNavigationState) {\n      let updates: Partial<RouterState> = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, { flushSync });\n    }\n\n    revalidatingFetchers.forEach((rf) => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        request\n      );\n\n    if (request.signal.aborted) {\n      return { shortCircuited: true };\n    }\n\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n\n    revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace,\n      });\n      return { shortCircuited: true };\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      pendingActionResult,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe((aborted) => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n\n    // Preserve SSR errors during partial hydration\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      errors = { ...state.errors, ...errors };\n    }\n\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers =\n      updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n    return {\n      matches,\n      loaderData,\n      errors,\n      ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n    };\n  }\n\n  function getUpdatedActionData(\n    pendingActionResult: PendingActionResult | undefined\n  ): Record<string, RouteData> | null | undefined {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data as any,\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n\n  function getUpdatedRevalidatingFetchers(\n    revalidatingFetchers: RevalidatingFetcher[]\n  ) {\n    revalidatingFetchers.forEach((rf) => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(\n        undefined,\n        fetcher ? fetcher.data : undefined\n      );\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(\n    key: string,\n    routeId: string,\n    href: string | null,\n    opts?: RouterFetchOptions\n  ) {\n    if (isServer) {\n      throw new Error(\n        \"router.fetch() was called during the server render, but it shouldn't be. \" +\n          \"You are likely calling a useFetcher() method in the body of your component. \" +\n          \"Try moving it to a useEffect or a callback.\"\n      );\n    }\n\n    abortFetcher(key);\n\n    let flushSync = (opts && opts.flushSync) === true;\n\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      future.v7_prependBasename,\n      href,\n      future.v7_relativeSplatPath,\n      routeId,\n      opts?.relative\n    );\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n\n    if (!matches) {\n      setFetcherError(\n        key,\n        routeId,\n        getInternalRouterError(404, { pathname: normalizedPath }),\n        { flushSync }\n      );\n      return;\n    }\n\n    let { path, submission, error } = normalizeNavigateOptions(\n      future.v7_normalizeFormMethod,\n      true,\n      normalizedPath,\n      opts\n    );\n\n    if (error) {\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n\n    let match = getTargetMatch(matches, path);\n\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(\n        key,\n        routeId,\n        path,\n        match,\n        matches,\n        fogOfWar.active,\n        flushSync,\n        preventScrollReset,\n        submission\n      );\n      return;\n    }\n\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, { routeId, path });\n    handleFetcherLoader(\n      key,\n      routeId,\n      path,\n      match,\n      matches,\n      fogOfWar.active,\n      flushSync,\n      preventScrollReset,\n      submission\n    );\n  }\n\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    requestMatches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    flushSync: boolean,\n    preventScrollReset: boolean,\n    submission: Submission\n  ) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n\n    function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId,\n        });\n        setFetcherError(key, routeId, error, { flushSync });\n        return true;\n      }\n      return false;\n    }\n\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync,\n    });\n\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal,\n      submission\n    );\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        requestMatches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\n      \"action\",\n      state,\n      fetchRequest,\n      [match],\n      requestMatches,\n      key\n    );\n    let actionResult = actionResults[match.route.id];\n\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission,\n            preventScrollReset,\n          });\n        }\n      }\n\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, { type: \"defer-action\" });\n    }\n\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(\n      init.history,\n      nextLocation,\n      abortController.signal\n    );\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches =\n      state.navigation.state !== \"idle\"\n        ? matchRoutes(routesToUse, state.navigation.location, basename)\n        : state.matches;\n\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n      init.history,\n      state,\n      matches,\n      submission,\n      nextLocation,\n      false,\n      future.v7_skipActionErrorRevalidation,\n      isRevalidationRequired,\n      cancelledDeferredRoutes,\n      cancelledFetcherLoads,\n      deletedFetchers,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      [match.route.id, actionResult]\n    );\n\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers\n      .filter((rf) => rf.key !== key)\n      .forEach((rf) => {\n        let staleKey = rf.key;\n        let existingFetcher = state.fetchers.get(staleKey);\n        let revalidatingFetcher = getLoadingFetcher(\n          undefined,\n          existingFetcher ? existingFetcher.data : undefined\n        );\n        state.fetchers.set(staleKey, revalidatingFetcher);\n        abortFetcher(staleKey);\n        if (rf.controller) {\n          fetchControllers.set(staleKey, rf.controller);\n        }\n      });\n\n    updateState({ fetchers: new Map(state.fetchers) });\n\n    let abortPendingFetchRevalidations = () =>\n      revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n    abortController.signal.addEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    let { loaderResults, fetcherResults } =\n      await callLoadersAndMaybeResolveData(\n        state,\n        matches,\n        matchesToLoad,\n        revalidatingFetchers,\n        revalidationRequest\n      );\n\n    if (abortController.signal.aborted) {\n      return;\n    }\n\n    abortController.signal.removeEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n\n    // Process and commit output from loaders\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      undefined,\n      revalidatingFetchers,\n      fetcherResults,\n      activeDeferreds\n    );\n\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n\n    abortStaleFetchLoads(loadId);\n\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (\n      state.navigation.state === \"loading\" &&\n      loadId > pendingNavigationLoadId\n    ) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers),\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(\n          state.loaderData,\n          loaderData,\n          matches,\n          errors\n        ),\n        fetchers: new Map(state.fetchers),\n      });\n      isRevalidationRequired = false;\n    }\n  }\n\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(\n    key: string,\n    routeId: string,\n    path: string,\n    match: AgnosticDataRouteMatch,\n    matches: AgnosticDataRouteMatch[],\n    isFogOfWar: boolean,\n    flushSync: boolean,\n    preventScrollReset: boolean,\n    submission?: Submission\n  ) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(\n      key,\n      getLoadingFetcher(\n        submission,\n        existingFetcher ? existingFetcher.data : undefined\n      ),\n      { flushSync }\n    );\n\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal\n    );\n\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\n      \"loader\",\n      state,\n      fetchRequest,\n      [match],\n      matches,\n      key\n    );\n    let result = results[match.route.id];\n\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result =\n        (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n        result;\n    }\n\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset,\n        });\n        return;\n      }\n    }\n\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(\n    request: Request,\n    redirect: RedirectResult,\n    isNavigation: boolean,\n    {\n      submission,\n      fetcherSubmission,\n      preventScrollReset,\n      replace,\n    }: {\n      submission?: Submission;\n      fetcherSubmission?: Submission;\n      preventScrollReset?: boolean;\n      replace?: boolean;\n    } = {}\n  ) {\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(\n      location,\n      new URL(request.url),\n      basename\n    );\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true,\n    });\n\n    if (isBrowser) {\n      let isDocumentReload = false;\n\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n          // Hard reload if it's an absolute URL to a new origin\n          url.origin !== routerWindow.location.origin ||\n          // Hard reload if it's an absolute URL that does not match our basename\n          stripBasename(url.pathname, basename) == null;\n      }\n\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n\n    let redirectHistoryAction =\n      replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n        ? HistoryAction.Replace\n        : HistoryAction.Push;\n\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let { formMethod, formAction, formEncType } = state.navigation;\n    if (\n      !submission &&\n      !fetcherSubmission &&\n      formMethod &&\n      formAction &&\n      formEncType\n    ) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (\n      redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n      activeSubmission &&\n      isMutationMethod(activeSubmission.formMethod)\n    ) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: {\n          ...activeSubmission,\n          formAction: location,\n        },\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation\n          ? pendingViewTransitionEnabled\n          : undefined,\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(\n        redirectLocation,\n        submission\n      );\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation\n          ? pendingViewTransitionEnabled\n          : undefined,\n      });\n    }\n  }\n\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    state: RouterState,\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    fetcherKey: string | null\n  ): Promise<Record<string, DataResult>> {\n    let results: Record<string, DataStrategyResult>;\n    let dataResults: Record<string, DataResult> = {};\n    try {\n      results = await callDataStrategyImpl(\n        dataStrategyImpl,\n        type,\n        state,\n        request,\n        matchesToLoad,\n        matches,\n        fetcherKey,\n        manifest,\n        mapRouteProperties\n      );\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach((m) => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e,\n        };\n      });\n      return dataResults;\n    }\n\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result as Response;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            routeId,\n            matches,\n            basename,\n            future.v7_relativeSplatPath\n          ),\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(\n          result\n        );\n      }\n    }\n\n    return dataResults;\n  }\n\n  async function callLoadersAndMaybeResolveData(\n    state: RouterState,\n    matches: AgnosticDataRouteMatch[],\n    matchesToLoad: AgnosticDataRouteMatch[],\n    fetchersToLoad: RevalidatingFetcher[],\n    request: Request\n  ) {\n    let currentMatches = state.matches;\n\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\n      \"loader\",\n      state,\n      request,\n      matchesToLoad,\n      matches,\n      null\n    );\n\n    let fetcherResultsPromise = Promise.all(\n      fetchersToLoad.map(async (f) => {\n        if (f.matches && f.match && f.controller) {\n          let results = await callDataStrategy(\n            \"loader\",\n            state,\n            createClientSideRequest(init.history, f.path, f.controller.signal),\n            [f.match],\n            f.matches,\n            f.key\n          );\n          let result = results[f.match.route.id];\n          // Fetcher results are keyed by fetcher key from here on out, not routeId\n          return { [f.key]: result };\n        } else {\n          return Promise.resolve({\n            [f.key]: {\n              type: ResultType.error,\n              error: getInternalRouterError(404, {\n                pathname: f.path,\n              }),\n            } as ErrorResult,\n          });\n        }\n      })\n    );\n\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce(\n      (acc, r) => Object.assign(acc, r),\n      {}\n    );\n\n    await Promise.all([\n      resolveNavigationDeferredResults(\n        matches,\n        loaderResults,\n        request.signal,\n        currentMatches,\n        state.loaderData\n      ),\n      resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n    ]);\n\n    return {\n      loaderResults,\n      fetcherResults,\n    };\n  }\n\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n      }\n      abortFetcher(key);\n    });\n  }\n\n  function updateFetcherState(\n    key: string,\n    fetcher: Fetcher,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    state.fetchers.set(key, fetcher);\n    updateState(\n      { fetchers: new Map(state.fetchers) },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function setFetcherError(\n    key: string,\n    routeId: string,\n    error: any,\n    opts: { flushSync?: boolean } = {}\n  ) {\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState(\n      {\n        errors: {\n          [boundaryMatch.route.id]: error,\n        },\n        fetchers: new Map(state.fetchers),\n      },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n\n  function getFetcher<TData = any>(key: string): Fetcher<TData> {\n    activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n    // If this fetcher was previously marked for deletion, unmark it since we\n    // have a new instance\n    if (deletedFetchers.has(key)) {\n      deletedFetchers.delete(key);\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n\n  function deleteFetcher(key: string): void {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (\n      fetchControllers.has(key) &&\n      !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n    ) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n\n    // If we opted into the flag we can clear this now since we're calling\n    // deleteFetcher() at the end of updateState() and we've already handed the\n    // deleted fetcher keys off to the data layer.\n    // If not, we're eagerly calling deleteFetcher() and we need to keep this\n    // Set populated until the next updateState call, and we'll clear\n    // `deletedFetchers` then\n    if (future.v7_fetcherPersist) {\n      deletedFetchers.delete(key);\n    }\n\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n\n  function deleteFetcherAndUpdateState(key: string): void {\n    let count = (activeFetchers.get(key) || 0) - 1;\n    if (count <= 0) {\n      activeFetchers.delete(key);\n      deletedFetchers.add(key);\n      if (!future.v7_fetcherPersist) {\n        deleteFetcher(key);\n      }\n    } else {\n      activeFetchers.set(key, count);\n    }\n\n    updateState({ fetchers: new Map(state.fetchers) });\n  }\n\n  function abortFetcher(key: string) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort();\n      fetchControllers.delete(key);\n    }\n  }\n\n  function markFetchersDone(keys: string[]) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n\n  function markFetchRedirectsDone(): boolean {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, `Expected fetcher: ${key}`);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n\n  function abortStaleFetchLoads(landedId: number): boolean {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, `Expected fetcher: ${key}`);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n\n  function getBlocker(key: string, fn: BlockerFunction) {\n    let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n\n    return blocker;\n  }\n\n  function deleteBlocker(key: string) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key: string, newBlocker: Blocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(\n      (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n        (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n        (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n      `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n    );\n\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({ blockers });\n  }\n\n  function shouldBlockNavigation({\n    currentLocation,\n    nextLocation,\n    historyAction,\n  }: {\n    currentLocation: Location;\n    nextLocation: Location;\n    historyAction: HistoryAction;\n  }): string | undefined {\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n      return blockerKey;\n    }\n  }\n\n  function handleNavigational404(pathname: string) {\n    let error = getInternalRouterError(404, { pathname });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let { matches, route } = getShortCircuitMatches(routesToUse);\n\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n\n    return { notFoundMatches: matches, route, error };\n  }\n\n  function cancelActiveDeferreds(\n    predicate?: (routeId: string) => boolean\n  ): string[] {\n    let cancelledRouteIds: string[] = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(\n    positions: Record<string, number>,\n    getPosition: GetScrollPositionFunction,\n    getKey?: GetScrollRestorationKeyFunction\n  ) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({ restoreScrollPosition: y });\n      }\n    }\n\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n\n  function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(\n        location,\n        matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n      );\n      return key || location.key;\n    }\n    return location.key;\n  }\n\n  function saveScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): void {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n\n  function getSavedScrollPosition(\n    location: Location,\n    matches: AgnosticDataRouteMatch[]\n  ): number | null {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n\n  function checkFogOfWar(\n    matches: AgnosticDataRouteMatch[] | null,\n    routesToUse: AgnosticDataRouteObject[],\n    pathname: string\n  ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n    if (patchRoutesOnNavigationImpl) {\n      if (!matches) {\n        let fogMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n          routesToUse,\n          pathname,\n          basename,\n          true\n        );\n\n        return { active: true, matches: fogMatches || [] };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n            routesToUse,\n            pathname,\n            basename,\n            true\n          );\n          return { active: true, matches: partialMatches };\n        }\n      }\n    }\n\n    return { active: false, matches: null };\n  }\n\n  type DiscoverRoutesSuccessResult = {\n    type: \"success\";\n    matches: AgnosticDataRouteMatch[] | null;\n  };\n  type DiscoverRoutesErrorResult = {\n    type: \"error\";\n    error: any;\n    partialMatches: AgnosticDataRouteMatch[];\n  };\n  type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n  type DiscoverRoutesResult =\n    | DiscoverRoutesSuccessResult\n    | DiscoverRoutesErrorResult\n    | DiscoverRoutesAbortedResult;\n\n  async function discoverRoutes(\n    matches: AgnosticDataRouteMatch[],\n    pathname: string,\n    signal: AbortSignal,\n    fetcherKey?: string\n  ): Promise<DiscoverRoutesResult> {\n    if (!patchRoutesOnNavigationImpl) {\n      return { type: \"success\", matches };\n    }\n\n    let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      let localManifest = manifest;\n      try {\n        await patchRoutesOnNavigationImpl({\n          signal,\n          path: pathname,\n          matches: partialMatches,\n          fetcherKey,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(\n              routeId,\n              children,\n              routesToUse,\n              localManifest,\n              mapRouteProperties\n            );\n          },\n        });\n      } catch (e) {\n        return { type: \"error\", error: e, partialMatches };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR && !signal.aborted) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n\n      if (signal.aborted) {\n        return { type: \"aborted\" };\n      }\n\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        return { type: \"success\", matches: newMatches };\n      }\n\n      let newPartialMatches = matchRoutesImpl<AgnosticDataRouteObject>(\n        routesToUse,\n        pathname,\n        basename,\n        true\n      );\n\n      // Avoid loops if the second pass results in the same partial matches\n      if (\n        !newPartialMatches ||\n        (partialMatches.length === newPartialMatches.length &&\n          partialMatches.every(\n            (m, i) => m.route.id === newPartialMatches![i].route.id\n          ))\n      ) {\n        return { type: \"success\", matches: null };\n      }\n\n      partialMatches = newPartialMatches;\n    }\n  }\n\n  function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(\n      newRoutes,\n      mapRouteProperties,\n      undefined,\n      manifest\n    );\n  }\n\n  function patchRoutes(\n    routeId: string | null,\n    children: AgnosticRouteObject[]\n  ): void {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(\n      routeId,\n      children,\n      routesToUse,\n      manifest,\n      mapRouteProperties\n    );\n\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: (to: To) => init.history.createHref(to),\n    encodeLocation: (to: To) => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes,\n  };\n\n  return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n  basename?: string;\n  /**\n   * @deprecated Use `mapRouteProperties` instead\n   */\n  detectErrorBoundary?: DetectErrorBoundaryFunction;\n  mapRouteProperties?: MapRoutePropertiesFunction;\n  future?: Partial<StaticHandlerFutureConfig>;\n}\n\nexport function createStaticHandler(\n  routes: AgnosticRouteObject[],\n  opts?: CreateStaticHandlerOptions\n): StaticHandler {\n  invariant(\n    routes.length > 0,\n    \"You must provide a non-empty routes array to createStaticHandler\"\n  );\n\n  let manifest: RouteManifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties: MapRoutePropertiesFunction;\n  if (opts?.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts?.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = (route) => ({\n      hasErrorBoundary: detectErrorBoundary(route),\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future: StaticHandlerFutureConfig = {\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false,\n    ...(opts ? opts.future : null),\n  };\n\n  let dataRoutes = convertRoutesToDataRoutes(\n    routes,\n    mapRouteProperties,\n    undefined,\n    manifest\n  );\n\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(\n    request: Request,\n    {\n      requestContext,\n      skipLoaderErrorBubbling,\n      dataStrategy,\n    }: {\n      requestContext?: unknown;\n      skipLoaderErrorBubbling?: boolean;\n      dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<StaticHandlerContext | Response> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, { method });\n      let { matches: methodNotAllowedMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, { pathname: location.pathname });\n      let { matches: notFoundMatches, route } =\n        getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error,\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      skipLoaderErrorBubbling === true,\n      null\n    );\n    if (isResponse(result)) {\n      return result;\n    }\n\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return { location, basename, ...result };\n  }\n\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(\n    request: Request,\n    {\n      routeId,\n      requestContext,\n      dataStrategy,\n    }: {\n      requestContext?: unknown;\n      routeId?: string;\n      dataStrategy?: DataStrategyFunction;\n    } = {}\n  ): Promise<any> {\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, { method });\n    } else if (!matches) {\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let match = routeId\n      ? matches.find((m) => m.route.id === routeId)\n      : getTargetMatch(matches, location);\n\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId,\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      false,\n      match\n    );\n\n    if (isResponse(result)) {\n      return result;\n    }\n\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n\n    if (result.loaderData) {\n      let data = Object.values(result.loaderData)[0];\n      if (result.activeDeferreds?.[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n\n    return undefined;\n  }\n\n  async function queryImpl(\n    request: Request,\n    location: Location,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    invariant(\n      request.signal,\n      \"query()/queryRoute() requests must contain an AbortController signal\"\n    );\n\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(\n          request,\n          matches,\n          routeMatch || getTargetMatch(matches, location),\n          requestContext,\n          dataStrategy,\n          skipLoaderErrorBubbling,\n          routeMatch != null\n        );\n        return result;\n      }\n\n      let result = await loadRouteData(\n        request,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        routeMatch\n      );\n      return isResponse(result)\n        ? result\n        : {\n            ...result,\n            actionData: null,\n            actionHeaders: {},\n          };\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n\n  async function submit(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    actionMatch: AgnosticDataRouteMatch,\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    isRouteRequest: boolean\n  ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n    let result: DataResult;\n\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id,\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    } else {\n      let results = await callDataStrategy(\n        \"action\",\n        request,\n        [actionMatch],\n        matches,\n        isRouteRequest,\n        requestContext,\n        dataStrategy\n      );\n      result = results[actionMatch.route.id];\n\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")!,\n        },\n      });\n    }\n\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, { type: \"defer-action\" });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error,\n      };\n    }\n\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: { [actionMatch.route.id]: result.data },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal,\n    });\n\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling\n        ? actionMatch\n        : findNearestBoundary(matches, actionMatch.route.id);\n\n      let context = await loadRouteData(\n        loaderRequest,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        null,\n        [boundaryMatch.route.id, result]\n      );\n\n      // action status codes take precedence over loader status codes\n      return {\n        ...context,\n        statusCode: isRouteErrorResponse(result.error)\n          ? result.error.status\n          : result.statusCode != null\n          ? result.statusCode\n          : 500,\n        actionData: null,\n        actionHeaders: {\n          ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n        },\n      };\n    }\n\n    let context = await loadRouteData(\n      loaderRequest,\n      matches,\n      requestContext,\n      dataStrategy,\n      skipLoaderErrorBubbling,\n      null\n    );\n\n    return {\n      ...context,\n      actionData: {\n        [actionMatch.route.id]: result.data,\n      },\n      // action status codes take precedence over loader status codes\n      ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n      actionHeaders: result.headers\n        ? { [actionMatch.route.id]: result.headers }\n        : {},\n    };\n  }\n\n  async function loadRouteData(\n    request: Request,\n    matches: AgnosticDataRouteMatch[],\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null,\n    skipLoaderErrorBubbling: boolean,\n    routeMatch: AgnosticDataRouteMatch | null,\n    pendingActionResult?: PendingActionResult\n  ): Promise<\n    | Omit<\n        StaticHandlerContext,\n        \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n      >\n    | Response\n  > {\n    let isRouteRequest = routeMatch != null;\n\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (\n      isRouteRequest &&\n      !routeMatch?.route.loader &&\n      !routeMatch?.route.lazy\n    ) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch?.route.id,\n      });\n    }\n\n    let requestMatches = routeMatch\n      ? [routeMatch]\n      : pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n      : matches;\n    let matchesToLoad = requestMatches.filter(\n      (m) => m.route.loader || m.route.lazy\n    );\n\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce(\n          (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n          {}\n        ),\n        errors:\n          pendingActionResult && isErrorResult(pendingActionResult[1])\n            ? {\n                [pendingActionResult[0]]: pendingActionResult[1].error,\n              }\n            : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null,\n      };\n    }\n\n    let results = await callDataStrategy(\n      \"loader\",\n      request,\n      matchesToLoad,\n      matches,\n      isRouteRequest,\n      requestContext,\n      dataStrategy\n    );\n\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n\n    // Process and commit output from loaders\n    let activeDeferreds = new Map<string, DeferredData>();\n    let context = processRouteLoaderData(\n      matches,\n      results,\n      pendingActionResult,\n      activeDeferreds,\n      skipLoaderErrorBubbling\n    );\n\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set<string>(\n      matchesToLoad.map((match) => match.route.id)\n    );\n    matches.forEach((match) => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n\n    return {\n      ...context,\n      matches,\n      activeDeferreds:\n        activeDeferreds.size > 0\n          ? Object.fromEntries(activeDeferreds.entries())\n          : null,\n    };\n  }\n\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(\n    type: \"loader\" | \"action\",\n    request: Request,\n    matchesToLoad: AgnosticDataRouteMatch[],\n    matches: AgnosticDataRouteMatch[],\n    isRouteRequest: boolean,\n    requestContext: unknown,\n    dataStrategy: DataStrategyFunction | null\n  ): Promise<Record<string, DataResult>> {\n    let results = await callDataStrategyImpl(\n      dataStrategy || defaultDataStrategy,\n      type,\n      null,\n      request,\n      matchesToLoad,\n      matches,\n      null,\n      manifest,\n      mapRouteProperties,\n      requestContext\n    );\n\n    let dataResults: Record<string, DataResult> = {};\n    await Promise.all(\n      matches.map(async (match) => {\n        if (!(match.route.id in results)) {\n          return;\n        }\n        let result = results[match.route.id];\n        if (isRedirectDataStrategyResultResult(result)) {\n          let response = result.result as Response;\n          // Throw redirects and let the server handle them with an HTTP redirect\n          throw normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            match.route.id,\n            matches,\n            basename,\n            future.v7_relativeSplatPath\n          );\n        }\n        if (isResponse(result.result) && isRouteRequest) {\n          // For SSR single-route requests, we want to hand Responses back\n          // directly without unwrapping\n          throw result;\n        }\n\n        dataResults[match.route.id] =\n          await convertDataStrategyResultToDataResult(result);\n      })\n    );\n    return dataResults;\n  }\n\n  return {\n    dataRoutes,\n    query,\n    queryRoute,\n  };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n  routes: AgnosticDataRouteObject[],\n  context: StaticHandlerContext,\n  error: any\n) {\n  let newContext: StaticHandlerContext = {\n    ...context,\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error,\n    },\n  };\n  return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n  request: Request,\n  isRouteRequest: boolean,\n  future: StaticHandlerFutureConfig\n) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n  opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n  return (\n    opts != null &&\n    ((\"formData\" in opts && opts.formData != null) ||\n      (\"body\" in opts && opts.body !== undefined))\n  );\n}\n\nfunction normalizeTo(\n  location: Path,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  prependBasename: boolean,\n  to: To | null,\n  v7_relativeSplatPath: boolean,\n  fromRouteId?: string,\n  relative?: RelativeRoutingType\n) {\n  let contextualMatches: AgnosticDataRouteMatch[];\n  let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n\n  // Resolve the relative path\n  let path = resolveTo(\n    to ? to : \".\",\n    getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n    stripBasename(location.pathname, basename) || location.pathname,\n    relative === \"path\"\n  );\n\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n\n  // Account for `?index` params when routing to the current location\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      // Add one when we're targeting an index route\n      path.search = path.search\n        ? path.search.replace(/^\\?/, \"?index&\")\n        : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\n      // Remove existing ones when we're not\n      let params = new URLSearchParams(path.search);\n      let indexValues = params.getAll(\"index\");\n      params.delete(\"index\");\n      indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? `?${qs}` : \"\";\n    }\n  }\n\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n  normalizeFormMethod: boolean,\n  isFetcher: boolean,\n  path: string,\n  opts?: BaseNavigateOrFetchOptions\n): {\n  path: string;\n  submission?: Submission;\n  error?: ErrorResponseImpl;\n} {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return { path };\n  }\n\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, { method: opts.formMethod }),\n    };\n  }\n\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, { type: \"invalid-body\" }),\n  });\n\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod\n    ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n    : (rawFormMethod.toLowerCase() as FormMethod);\n  let formAction = stripHashFromPath(path);\n\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      let text =\n        typeof opts.body === \"string\"\n          ? opts.body\n          : opts.body instanceof FormData ||\n            opts.body instanceof URLSearchParams\n          ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n            Array.from(opts.body.entries()).reduce(\n              (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n              \"\"\n            )\n          : String(opts.body);\n\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text,\n        },\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n\n      try {\n        let json =\n          typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined,\n          },\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n\n  invariant(\n    typeof FormData === \"function\",\n    \"FormData is not available in this environment\"\n  );\n\n  let searchParams: URLSearchParams;\n  let formData: FormData;\n\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n\n  let submission: Submission = {\n    formMethod,\n    formAction,\n    formEncType:\n      (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined,\n  };\n\n  if (isMutationMethod(submission.formMethod)) {\n    return { path, submission };\n  }\n\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = `?${searchParams}`;\n\n  return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n  matches: AgnosticDataRouteMatch[],\n  boundaryId: string,\n  includeBoundary = false\n) {\n  let index = matches.findIndex((m) => m.route.id === boundaryId);\n  if (index >= 0) {\n    return matches.slice(0, includeBoundary ? index + 1 : index);\n  }\n  return matches;\n}\n\nfunction getMatchesToLoad(\n  history: History,\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  submission: Submission | undefined,\n  location: Location,\n  initialHydration: boolean,\n  skipActionErrorRevalidation: boolean,\n  isRevalidationRequired: boolean,\n  cancelledDeferredRoutes: string[],\n  cancelledFetcherLoads: Set<string>,\n  deletedFetchers: Set<string>,\n  fetchLoadMatches: Map<string, FetchLoadMatch>,\n  fetchRedirectIds: Set<string>,\n  routesToUse: AgnosticDataRouteObject[],\n  basename: string | undefined,\n  pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n  let actionResult = pendingActionResult\n    ? isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : pendingActionResult[1].data\n    : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryMatches = matches;\n  if (initialHydration && state.errors) {\n    // On initial hydration, only consider matches up to _and including_ the boundary.\n    // This is inclusive to handle cases where a server loader ran successfully,\n    // a child server loader bubbled up to this route, but this route has\n    // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n    // we have a complete version of `loaderData`\n    boundaryMatches = getLoaderMatchesUntilBoundary(\n      matches,\n      Object.keys(state.errors)[0],\n      true\n    );\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    // If an action threw an error, we call loaders up to, but not including the\n    // boundary\n    boundaryMatches = getLoaderMatchesUntilBoundary(\n      matches,\n      pendingActionResult[0]\n    );\n  }\n\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult\n    ? pendingActionResult[1].statusCode\n    : undefined;\n  let shouldSkipRevalidation =\n    skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let { route } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n\n    if (route.loader == null) {\n      return false;\n    }\n\n    if (initialHydration) {\n      return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n    }\n\n    // Always call the loader on new route instances and pending defer cancellations\n    if (\n      isNewLoader(state.loaderData, state.matches[index], match) ||\n      cancelledDeferredRoutes.some((id) => id === match.route.id)\n    ) {\n      return true;\n    }\n\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n\n    return shouldRevalidateLoader(match, {\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params,\n      ...submission,\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation\n        ? false\n        : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n          isRevalidationRequired ||\n          currentUrl.pathname + currentUrl.search ===\n            nextUrl.pathname + nextUrl.search ||\n          // Search params affect all loaders\n          currentUrl.search !== nextUrl.search ||\n          isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n    });\n  });\n\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers: RevalidatingFetcher[] = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial hydration (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (\n      initialHydration ||\n      !matches.some((m) => m.route.id === f.routeId) ||\n      deletedFetchers.has(key)\n    ) {\n      return;\n    }\n\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null,\n      });\n      return;\n    }\n\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (\n      fetcher &&\n      fetcher.state !== \"idle\" &&\n      fetcher.data === undefined\n    ) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params,\n        ...submission,\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation\n          ? false\n          : isRevalidationRequired,\n      });\n    }\n\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController(),\n      });\n    }\n  });\n\n  return [navigationMatches, revalidatingFetchers];\n}\n\nfunction shouldLoadRouteOnHydration(\n  route: AgnosticDataRouteObject,\n  loaderData: RouteData | null | undefined,\n  errors: RouteData | null | undefined\n) {\n  // We dunno if we have a loader - gotta find out!\n  if (route.lazy) {\n    return true;\n  }\n\n  // No loader, nothing to initialize\n  if (!route.loader) {\n    return false;\n  }\n\n  let hasData = loaderData != null && loaderData[route.id] !== undefined;\n  let hasError = errors != null && errors[route.id] !== undefined;\n\n  // Don't run if we error'd during SSR\n  if (!hasData && hasError) {\n    return false;\n  }\n\n  // Explicitly opting-in to running on hydration\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return true;\n  }\n\n  // Otherwise, run if we're not yet initialized with anything\n  return !hasData && !hasError;\n}\n\nfunction isNewLoader(\n  currentLoaderData: RouteData,\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let isNew =\n    // [a] -> [a, b]\n    !currentMatch ||\n    // [a, b] -> [a, c]\n    match.route.id !== currentMatch.route.id;\n\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n  currentMatch: AgnosticDataRouteMatch,\n  match: AgnosticDataRouteMatch\n) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    (currentPath != null &&\n      currentPath.endsWith(\"*\") &&\n      currentMatch.params[\"*\"] !== match.params[\"*\"])\n  );\n}\n\nfunction shouldRevalidateLoader(\n  loaderMatch: AgnosticDataRouteMatch,\n  arg: ShouldRevalidateFunctionArgs\n) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n\n  return arg.defaultShouldRevalidate;\n}\n\nfunction patchRoutesImpl(\n  routeId: string | null,\n  children: AgnosticRouteObject[],\n  routesToUse: AgnosticDataRouteObject[],\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction\n) {\n  let childrenToPatch: AgnosticDataRouteObject[];\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(\n      route,\n      `No route found to patch children into: routeId = ${routeId}`\n    );\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = routesToUse;\n  }\n\n  // Don't patch in routes we already know about so that `patch` is idempotent\n  // to simplify user-land code. This is useful because we re-call the\n  // `patchRoutesOnNavigation` function for matched routes with params.\n  let uniqueChildren = children.filter(\n    (newRoute) =>\n      !childrenToPatch.some((existingRoute) =>\n        isSameRoute(newRoute, existingRoute)\n      )\n  );\n\n  let newRoutes = convertRoutesToDataRoutes(\n    uniqueChildren,\n    mapRouteProperties,\n    [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n    manifest\n  );\n\n  childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n  newRoute: AgnosticRouteObject,\n  existingRoute: AgnosticRouteObject\n): boolean {\n  // Most optimal check is by id\n  if (\n    \"id\" in newRoute &&\n    \"id\" in existingRoute &&\n    newRoute.id === existingRoute.id\n  ) {\n    return true;\n  }\n\n  // Second is by pathing differences\n  if (\n    !(\n      newRoute.index === existingRoute.index &&\n      newRoute.path === existingRoute.path &&\n      newRoute.caseSensitive === existingRoute.caseSensitive\n    )\n  ) {\n    return false;\n  }\n\n  // Pathless layout routes are trickier since we need to check children.\n  // If they have no children then they're the same as far as we can tell\n  if (\n    (!newRoute.children || newRoute.children.length === 0) &&\n    (!existingRoute.children || existingRoute.children.length === 0)\n  ) {\n    return true;\n  }\n\n  // Otherwise, we look to see if every child in the new route is already\n  // represented in the existing route's children\n  return newRoute.children!.every((aChild, i) =>\n    existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n  );\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n  route: AgnosticDataRouteObject,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  manifest: RouteManifest\n) {\n  if (!route.lazy) {\n    return;\n  }\n\n  let lazyRoute = await route.lazy();\n\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates: Record<string, any> = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue =\n      routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n    let isPropertyStaticallyDefined =\n      staticRouteValue !== undefined &&\n      // This property isn't static since it should always be updated based\n      // on the route updates\n      lazyRouteProperty !== \"hasErrorBoundary\";\n\n    warning(\n      !isPropertyStaticallyDefined,\n      `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n        `defined but its lazy function is also returning a value for this property. ` +\n        `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n    );\n\n    if (\n      !isPropertyStaticallyDefined &&\n      !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n    ) {\n      routeUpdates[lazyRouteProperty] =\n        lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n    }\n  }\n\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, {\n    // To keep things framework agnostic, we use the provided\n    // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n    // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n    // the logic will differ between frameworks.\n    ...mapRouteProperties(routeToUpdate),\n    lazy: undefined,\n  });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n  matches,\n}: DataStrategyFunctionArgs): ReturnType<DataStrategyFunction> {\n  let matchesToLoad = matches.filter((m) => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n  return results.reduce(\n    (acc, result, i) =>\n      Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n    {}\n  );\n}\n\nasync function callDataStrategyImpl(\n  dataStrategyImpl: DataStrategyFunction,\n  type: \"loader\" | \"action\",\n  state: RouterState | null,\n  request: Request,\n  matchesToLoad: AgnosticDataRouteMatch[],\n  matches: AgnosticDataRouteMatch[],\n  fetcherKey: string | null,\n  manifest: RouteManifest,\n  mapRouteProperties: MapRoutePropertiesFunction,\n  requestContext?: unknown\n): Promise<Record<string, DataStrategyResult>> {\n  let loadRouteDefinitionsPromises = matches.map((m) =>\n    m.route.lazy\n      ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n      : undefined\n  );\n\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n      if (\n        handlerOverride &&\n        request.method === \"GET\" &&\n        (match.route.lazy || match.route.loader)\n      ) {\n        shouldLoad = true;\n      }\n      return shouldLoad\n        ? callLoaderOrAction(\n            type,\n            request,\n            match,\n            loadRoutePromise,\n            handlerOverride,\n            requestContext\n          )\n        : Promise.resolve({ type: ResultType.data, result: undefined });\n    };\n\n    return {\n      ...match,\n      shouldLoad,\n      resolve,\n    };\n  });\n\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext,\n  });\n\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n\n  return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n  type: \"loader\" | \"action\",\n  request: Request,\n  match: AgnosticDataRouteMatch,\n  loadRoutePromise: Promise<void> | undefined,\n  handlerOverride: Parameters<DataStrategyMatch[\"resolve\"]>[0],\n  staticContext?: unknown\n): Promise<DataStrategyResult> {\n  let result: DataStrategyResult;\n  let onReject: (() => void) | undefined;\n\n  let runHandler = (\n    handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n  ): Promise<DataStrategyResult> => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject: () => void;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise<DataStrategyResult>((_, r) => (reject = r));\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n\n    let actualHandler = (ctx?: unknown) => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(\n          new Error(\n            `You cannot call the handler for a route which defines a boolean ` +\n              `\"${type}\" [routeId: ${match.route.id}]`\n          )\n        );\n      }\n      return handler(\n        {\n          request,\n          params: match.params,\n          context: staticContext,\n        },\n        ...(ctx !== undefined ? [ctx] : [])\n      );\n    };\n\n    let handlerPromise: Promise<DataStrategyResult> = (async () => {\n      try {\n        let val = await (handlerOverride\n          ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n          : actualHandler());\n        return { type: \"data\", result: val };\n      } catch (e) {\n        return { type: \"error\", result: e };\n      }\n    })();\n\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n\n  try {\n    let handler = match.route[type];\n\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n          // If the handler throws, don't let it immediately bubble out,\n          // since we need to let the lazy() execution finish so we know if this\n          // route has a boundary that can handle the error\n          runHandler(handler).catch((e) => {\n            handlerError = e;\n          }),\n          loadRoutePromise,\n        ]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value!;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id,\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return { type: ResultType.data, result: undefined };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname,\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n\n    invariant(\n      result.result !== undefined,\n      `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n        `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n        `function. Please return a value or \\`null\\`.`\n    );\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return { type: ResultType.error, result: e };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n\n  return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n  dataStrategyResult: DataStrategyResult\n): Promise<DataResult> {\n  let { result, type } = dataStrategyResult;\n\n  if (isResponse(result)) {\n    let data: any;\n\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return { type: ResultType.error, error: e };\n    }\n\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers,\n      };\n    }\n\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers,\n    };\n  }\n\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      if (result.data instanceof Error) {\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: result.init?.status,\n          headers: result.init?.headers\n            ? new Headers(result.init.headers)\n            : undefined,\n        };\n      }\n\n      // Convert thrown data() to ErrorResponse instances\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(\n          result.init?.status || 500,\n          undefined,\n          result.data\n        ),\n        statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n        headers: result.init?.headers\n          ? new Headers(result.init.headers)\n          : undefined,\n      };\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n    };\n  }\n\n  if (isDeferredData(result)) {\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: result.init?.status,\n      headers: result.init?.headers && new Headers(result.init.headers),\n    };\n  }\n\n  if (isDataWithResponseInit(result)) {\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: result.init?.status,\n      headers: result.init?.headers\n        ? new Headers(result.init.headers)\n        : undefined,\n    };\n  }\n\n  return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n  response: Response,\n  request: Request,\n  routeId: string,\n  matches: AgnosticDataRouteMatch[],\n  basename: string,\n  v7_relativeSplatPath: boolean\n) {\n  let location = response.headers.get(\"Location\");\n  invariant(\n    location,\n    \"Redirects returned/thrown from loaders/actions must have a Location header\"\n  );\n\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(\n      0,\n      matches.findIndex((m) => m.route.id === routeId) + 1\n    );\n    location = normalizeTo(\n      new URL(request.url),\n      trimmedMatches,\n      basename,\n      true,\n      location,\n      v7_relativeSplatPath\n    );\n    response.headers.set(\"Location\", location);\n  }\n\n  return response;\n}\n\nfunction normalizeRedirectLocation(\n  location: string,\n  currentUrl: URL,\n  basename: string\n): string {\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\")\n      ? new URL(currentUrl.protocol + normalizedLocation)\n      : new URL(normalizedLocation);\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n  history: History,\n  location: string | Location,\n  signal: AbortSignal,\n  submission?: Submission\n): Request {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init: RequestInit = { signal };\n\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let { formMethod, formEncType } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({ \"Content-Type\": formEncType });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (\n      formEncType === \"application/x-www-form-urlencoded\" &&\n      submission.formData\n    ) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n\n  return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n  let searchParams = new URLSearchParams();\n\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n\n  return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n  searchParams: URLSearchParams\n): FormData {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\n\nfunction processRouteLoaderData(\n  matches: AgnosticDataRouteMatch[],\n  results: Record<string, DataResult>,\n  pendingActionResult: PendingActionResult | undefined,\n  activeDeferreds: Map<string, DeferredData>,\n  skipLoaderErrorBubbling: boolean\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors: RouterState[\"errors\"] | null;\n  statusCode: number;\n  loaderHeaders: Record<string, Headers>;\n} {\n  // Fill in loaderData/errors from our loaders\n  let loaderData: RouterState[\"loaderData\"] = {};\n  let errors: RouterState[\"errors\"] | null = null;\n  let statusCode: number | undefined;\n  let foundError = false;\n  let loaderHeaders: Record<string, Headers> = {};\n  let pendingError =\n    pendingActionResult && isErrorResult(pendingActionResult[1])\n      ? pendingActionResult[1].error\n      : undefined;\n\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach((match) => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(\n      !isRedirectResult(result),\n      \"Cannot handle redirect results in processLoaderData\"\n    );\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n\n      errors = errors || {};\n\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error)\n          ? result.error.status\n          : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (\n          result.statusCode != null &&\n          result.statusCode !== 200 &&\n          !foundError\n        ) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = { [pendingActionResult[0]]: pendingError };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders,\n  };\n}\n\nfunction processLoaderData(\n  state: RouterState,\n  matches: AgnosticDataRouteMatch[],\n  results: Record<string, DataResult>,\n  pendingActionResult: PendingActionResult | undefined,\n  revalidatingFetchers: RevalidatingFetcher[],\n  fetcherResults: Record<string, DataResult>,\n  activeDeferreds: Map<string, DeferredData>\n): {\n  loaderData: RouterState[\"loaderData\"];\n  errors?: RouterState[\"errors\"];\n} {\n  let { loaderData, errors } = processRouteLoaderData(\n    matches,\n    results,\n    pendingActionResult,\n    activeDeferreds,\n    false // This method is only called client side so we always want to bubble\n  );\n\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach((rf) => {\n    let { key, match, controller } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = {\n          ...errors,\n          [boundaryMatch.route.id]: result.error,\n        };\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n\n  return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n  loaderData: RouteData,\n  newLoaderData: RouteData,\n  matches: AgnosticDataRouteMatch[],\n  errors: RouteData | null | undefined\n): RouteData {\n  let mergedLoaderData = { ...newLoaderData };\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      } else {\n        // No-op - this is so we ignore existing data if we have a key in the\n        // incoming object with an undefined value, which is how we unset a prior\n        // loaderData if we encounter a loader error\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n  pendingActionResult: PendingActionResult | undefined\n) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1])\n    ? {\n        // Clear out prior actionData on errors\n        actionData: {},\n      }\n    : {\n        actionData: {\n          [pendingActionResult[0]]: pendingActionResult[1].data,\n        },\n      };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n  matches: AgnosticDataRouteMatch[],\n  routeId?: string\n): AgnosticDataRouteMatch {\n  let eligibleMatches = routeId\n    ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n    : [...matches];\n  return (\n    eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n    matches[0]\n  );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n  matches: AgnosticDataRouteMatch[];\n  route: AgnosticDataRouteObject;\n} {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route =\n    routes.length === 1\n      ? routes[0]\n      : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n          id: `__shim-error-route__`,\n        };\n\n  return {\n    matches: [\n      {\n        params: {},\n        pathname: \"\",\n        pathnameBase: \"\",\n        route,\n      },\n    ],\n    route,\n  };\n}\n\nfunction getInternalRouterError(\n  status: number,\n  {\n    pathname,\n    routeId,\n    method,\n    type,\n    message,\n  }: {\n    pathname?: string;\n    routeId?: string;\n    method?: string;\n    type?: \"defer-action\" | \"invalid-body\";\n    message?: string;\n  } = {}\n) {\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method} request to \"${pathname}\" but ` +\n        `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = `No route matches URL \"${pathname}\"`;\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage =\n        `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n        `did not provide an \\`action\\` for route \"${routeId}\", ` +\n        `so there is no way to handle the request.`;\n    } else if (method) {\n      errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n    }\n  }\n\n  return new ErrorResponseImpl(\n    status || 500,\n    statusText,\n    new Error(errorMessage),\n    true\n  );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n  results: Record<string, DataResult>\n): { key: string; result: RedirectResult } | undefined {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return { key, result };\n    }\n  }\n}\n\nfunction stripHashFromPath(path: To) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\n\nfunction isPromise<T = unknown>(val: unknown): val is Promise<T> {\n  return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n  return (\n    result != null &&\n    typeof result === \"object\" &&\n    \"type\" in result &&\n    \"result\" in result &&\n    (result.type === ResultType.data || result.type === ResultType.error)\n  );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n  return (\n    isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n  );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n  return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n  return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n  return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n  value: any\n): value is DataWithResponseInit<unknown> {\n  return (\n    typeof value === \"object\" &&\n    value != null &&\n    \"type\" in value &&\n    \"data\" in value &&\n    \"init\" in value &&\n    value.type === \"DataWithResponseInit\"\n  );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n  let deferred: DeferredData = value;\n  return (\n    deferred &&\n    typeof deferred === \"object\" &&\n    typeof deferred.data === \"object\" &&\n    typeof deferred.subscribe === \"function\" &&\n    typeof deferred.cancel === \"function\" &&\n    typeof deferred.resolveData === \"function\"\n  );\n}\n\nfunction isResponse(value: any): value is Response {\n  return (\n    value != null &&\n    typeof value.status === \"number\" &&\n    typeof value.statusText === \"string\" &&\n    typeof value.headers === \"object\" &&\n    typeof value.body !== \"undefined\"\n  );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n  if (!isResponse(result)) {\n    return false;\n  }\n\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n  return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n  method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n  return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n  matches: (AgnosticDataRouteMatch | null)[],\n  results: Record<string, DataResult>,\n  signal: AbortSignal,\n  currentMatches: AgnosticDataRouteMatch[],\n  currentLoaderData: RouteData\n) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find((m) => m?.route.id === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n\n    let currentMatch = currentMatches.find(\n      (m) => m.route.id === match!.route.id\n    );\n    let isRevalidatingLoader =\n      currentMatch != null &&\n      !isNewRouteInstance(currentMatch, match) &&\n      (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then((result) => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\n\nasync function resolveFetcherDeferredResults(\n  matches: (AgnosticDataRouteMatch | null)[],\n  results: Record<string, DataResult>,\n  revalidatingFetchers: RevalidatingFetcher[]\n) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let { key, routeId, controller } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find((m) => m?.route.id === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(\n        controller,\n        \"Expected an AbortController for revalidating fetcher deferred result\"\n      );\n      await resolveDeferredData(result, controller.signal, true).then(\n        (result) => {\n          if (result) {\n            results[key] = result;\n          }\n        }\n      );\n    }\n  }\n}\n\nasync function resolveDeferredData(\n  result: DeferredResult,\n  signal: AbortSignal,\n  unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData,\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e,\n      };\n    }\n  }\n\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data,\n  };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n  return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n  matches: AgnosticDataRouteMatch[],\n  location: Location | string\n) {\n  let search =\n    typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (\n    matches[matches.length - 1].route.index &&\n    hasNakedIndexQuery(search || \"\")\n  ) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n  navigation: Navigation\n): Submission | undefined {\n  let { formMethod, formAction, formEncType, text, formData, json } =\n    navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text,\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined,\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined,\n    };\n  }\n}\n\nfunction getLoadingNavigation(\n  location: Location,\n  submission?: Submission\n): NavigationStates[\"Loading\"] {\n  if (submission) {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n    };\n    return navigation;\n  } else {\n    let navigation: NavigationStates[\"Loading\"] = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n    };\n    return navigation;\n  }\n}\n\nfunction getSubmittingNavigation(\n  location: Location,\n  submission: Submission\n): NavigationStates[\"Submitting\"] {\n  let navigation: NavigationStates[\"Submitting\"] = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n  };\n  return navigation;\n}\n\nfunction getLoadingFetcher(\n  submission?: Submission,\n  data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n  if (submission) {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data,\n    };\n    return fetcher;\n  } else {\n    let fetcher: FetcherStates[\"Loading\"] = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data,\n    };\n    return fetcher;\n  }\n}\n\nfunction getSubmittingFetcher(\n  submission: Submission,\n  existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n  let fetcher: FetcherStates[\"Submitting\"] = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined,\n  };\n  return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n  let fetcher: FetcherStates[\"Idle\"] = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data,\n  };\n  return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(\n      TRANSITIONS_STORAGE_KEY\n    );\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\n\nfunction persistAppliedTransitions(\n  _window: Window,\n  transitions: Map<string, Set<string>>\n) {\n  if (transitions.size > 0) {\n    let json: Record<string, string[]> = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(\n        TRANSITIONS_STORAGE_KEY,\n        JSON.stringify(json)\n      );\n    } catch (error) {\n      warning(\n        false,\n        `Failed to save applied view transitions in sessionStorage (${error}).`\n      );\n    }\n  }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n  AgnosticIndexRouteObject,\n  AgnosticNonIndexRouteObject,\n  AgnosticRouteMatch,\n  History,\n  LazyRouteFunction,\n  Location,\n  Action as NavigationType,\n  RelativeRoutingType,\n  Router,\n  StaticHandlerContext,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n  caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticIndexRouteObject[\"path\"];\n  id?: AgnosticIndexRouteObject[\"id\"];\n  loader?: AgnosticIndexRouteObject[\"loader\"];\n  action?: AgnosticIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticIndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n  caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n  path?: AgnosticNonIndexRouteObject[\"path\"];\n  id?: AgnosticNonIndexRouteObject[\"id\"];\n  loader?: AgnosticNonIndexRouteObject[\"loader\"];\n  action?: AgnosticNonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: AgnosticNonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: RouteObject[];\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n  lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n  children?: DataRouteObject[];\n  id: string;\n};\n\nexport interface RouteMatch<\n  ParamKey extends string = string,\n  RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject\n  // Omit `future` since those can be pulled from the `router`\n  // `NavigationContext` needs future since it doesn't have a `router` in all cases\n  extends Omit<NavigationContextObject, \"future\"> {\n  router: Router;\n  staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n  React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n  DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n  Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n  AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  flushSync?: boolean;\n  viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n  createHref: History[\"createHref\"];\n  // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n  encodeLocation?: History[\"encodeLocation\"];\n  go: History[\"go\"];\n  push(to: To, state?: any, opts?: NavigateOptions): void;\n  replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n  basename: string;\n  navigator: Navigator;\n  static: boolean;\n  future: {\n    v7_relativeSplatPath: boolean;\n  };\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n  location: Location;\n  navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n  null!\n);\n\nif (__DEV__) {\n  LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n  outlet: React.ReactElement | null;\n  matches: RouteMatch[];\n  isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n  outlet: null,\n  matches: [],\n  isDataRoute: false,\n});\n\nif (__DEV__) {\n  RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n  AgnosticRouteMatch,\n  Blocker,\n  BlockerFunction,\n  Location,\n  ParamParseKey,\n  Params,\n  Path,\n  PathMatch,\n  PathPattern,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RevalidationState,\n  To,\n  UIMatch,\n} from \"@remix-run/router\";\nimport {\n  IDLE_BLOCKER,\n  Action as NavigationType,\n  UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n  UNSAFE_decodePath as decodePath,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  isRouteErrorResponse,\n  joinPaths,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n  DataRouteMatch,\n  NavigateOptions,\n  RouteContextObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n  RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nexport function useHref(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useHref() may be used only in the context of a <Router> component.`\n  );\n\n  let { basename, navigator } = React.useContext(NavigationContext);\n  let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname =\n      pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n\n  return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nexport function useLocation(): Location {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useLocation() may be used only in the context of a <Router> component.`\n  );\n\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nexport function useMatch<\n  ParamKey extends ParamParseKey<Path>,\n  Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useMatch() may be used only in the context of a <Router> component.`\n  );\n\n  let { pathname } = useLocation();\n  return React.useMemo(\n    () => matchPath<ParamKey, Path>(pattern, decodePath(pathname)),\n    [pathname, pattern]\n  );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n  (to: To, options?: NavigateOptions): void;\n  (delta: number): void;\n}\n\nconst navigateEffectWarning =\n  `You should call navigate() in a React.useEffect(), not when ` +\n  `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n  cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n  let { isDataRoute } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useNavigate() may be used only in the context of a <Router> component.`\n  );\n\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let { basename, future, navigator } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our history listener yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        navigator.go(to);\n        return;\n      }\n\n      let path = resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        options.relative === \"path\"\n      );\n\n      // If we're operating within a basename, prepend it to the pathname prior\n      // to handing off to history (but only if we're not in a data router,\n      // otherwise it'll prepend the basename inside of the router).\n      // If this is a root navigation, then we navigate to the raw basename\n      // which allows the basename to have full control over the presence of a\n      // trailing slash on root links\n      if (dataRouterContext == null && basename !== \"/\") {\n        path.pathname =\n          path.pathname === \"/\"\n            ? basename\n            : joinPaths([basename, path.pathname]);\n      }\n\n      (!!options.replace ? navigator.replace : navigator.push)(\n        path,\n        options.state,\n        options\n      );\n    },\n    [\n      basename,\n      navigator,\n      routePathnamesJson,\n      locationPathname,\n      dataRouterContext,\n    ]\n  );\n\n  return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n  return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return (\n      <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n    );\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nexport function useParams<\n  ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n  [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n  let { matches } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n  to: To,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n  let { future } = React.useContext(NavigationContext);\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let routePathnamesJson = JSON.stringify(\n    getResolveToMatches(matches, future.v7_relativeSplatPath)\n  );\n\n  return React.useMemo(\n    () =>\n      resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        relative === \"path\"\n      ),\n    [to, routePathnamesJson, locationPathname, relative]\n  );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nexport function useRoutes(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n  routes: RouteObject[],\n  locationArg?: Partial<Location> | string,\n  dataRouterState?: RemixRouter[\"state\"],\n  future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useRoutes() may be used only in the context of a <Router> component.`\n  );\n\n  let { navigator, static: isStatic } = React.useContext(NavigationContext);\n  let { matches: parentMatches } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n\n  if (__DEV__) {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = (parentRoute && parentRoute.path) || \"\";\n    warningOnce(\n      parentPathname,\n      !parentRoute || parentPath.endsWith(\"*\"),\n      `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n        `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n        `parent route path has no trailing \"*\". This means if you navigate ` +\n        `deeper, the parent won't match anymore and therefore the child ` +\n        `routes will never render.\\n\\n` +\n        `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n        `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n    );\n  }\n\n  let locationFromContext = useLocation();\n\n  let location;\n  if (locationArg) {\n    let parsedLocationArg =\n      typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n    invariant(\n      parentPathnameBase === \"/\" ||\n        parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n      `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n        `the location pathname must begin with the portion of the URL pathname that was ` +\n        `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n        `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n    );\n\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n\n  let pathname = location.pathname || \"/\";\n\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n\n  let matches =\n    !isStatic &&\n    dataRouterState &&\n    dataRouterState.matches &&\n    dataRouterState.matches.length > 0\n      ? (dataRouterState.matches as AgnosticRouteMatch<string, RouteObject>[])\n      : matchRoutes(routes, { pathname: remainingPathname });\n\n  if (__DEV__) {\n    warning(\n      parentRoute || matches != null,\n      `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n    );\n\n    warning(\n      matches == null ||\n        matches[matches.length - 1].route.element !== undefined ||\n        matches[matches.length - 1].route.Component !== undefined ||\n        matches[matches.length - 1].route.lazy !== undefined,\n      `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n        `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n        `null value by default resulting in an \"empty\" page.`\n    );\n  }\n\n  let renderedMatches = _renderMatches(\n    matches &&\n      matches.map((match) =>\n        Object.assign({}, match, {\n          params: Object.assign({}, parentParams, match.params),\n          pathname: joinPaths([\n            parentPathnameBase,\n            // Re-encode pathnames that were decoded inside matchRoutes\n            navigator.encodeLocation\n              ? navigator.encodeLocation(match.pathname).pathname\n              : match.pathname,\n          ]),\n          pathnameBase:\n            match.pathnameBase === \"/\"\n              ? parentPathnameBase\n              : joinPaths([\n                  parentPathnameBase,\n                  // Re-encode pathnames that were decoded inside matchRoutes\n                  navigator.encodeLocation\n                    ? navigator.encodeLocation(match.pathnameBase).pathname\n                    : match.pathnameBase,\n                ]),\n        })\n      ),\n    parentMatches,\n    dataRouterState,\n    future\n  );\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return (\n      <LocationContext.Provider\n        value={{\n          location: {\n            pathname: \"/\",\n            search: \"\",\n            hash: \"\",\n            state: null,\n            key: \"default\",\n            ...location,\n          },\n          navigationType: NavigationType.Pop,\n        }}\n      >\n        {renderedMatches}\n      </LocationContext.Provider>\n    );\n  }\n\n  return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error)\n    ? `${error.status} ${error.statusText}`\n    : error instanceof Error\n    ? error.message\n    : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n  let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n  let devInfo = null;\n  if (__DEV__) {\n    console.error(\n      \"Error handled by React Router default ErrorBoundary:\",\n      error\n    );\n\n    devInfo = (\n      <>\n        <p>💿 Hey developer 👋</p>\n        <p>\n          You can provide a way better UX than this when your app throws errors\n          by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n          <code style={codeStyles}>errorElement</code> prop on your route.\n        </p>\n      </>\n    );\n  }\n\n  return (\n    <>\n      <h2>Unexpected Application Error!</h2>\n      <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n      {stack ? <pre style={preStyles}>{stack}</pre> : null}\n      {devInfo}\n    </>\n  );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n  component: React.ReactNode;\n  routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n  location: Location;\n  revalidation: RevalidationState;\n  error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n  RenderErrorBoundaryProps,\n  RenderErrorBoundaryState\n> {\n  constructor(props: RenderErrorBoundaryProps) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error,\n    };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error: error };\n  }\n\n  static getDerivedStateFromProps(\n    props: RenderErrorBoundaryProps,\n    state: RenderErrorBoundaryState\n  ) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (\n      state.location !== props.location ||\n      (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n    ) {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation,\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation,\n    };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"React Router caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    return this.state.error !== undefined ? (\n      <RouteContext.Provider value={this.props.routeContext}>\n        <RouteErrorContext.Provider\n          value={this.state.error}\n          children={this.props.component}\n        />\n      </RouteContext.Provider>\n    ) : (\n      this.props.children\n    );\n  }\n}\n\ninterface RenderedRouteProps {\n  routeContext: RouteContextObject;\n  match: RouteMatch<string, RouteObject>;\n  children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (\n    dataRouterContext &&\n    dataRouterContext.static &&\n    dataRouterContext.staticContext &&\n    (match.route.errorElement || match.route.ErrorBoundary)\n  ) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n\n  return (\n    <RouteContext.Provider value={routeContext}>\n      {children}\n    </RouteContext.Provider>\n  );\n}\n\nexport function _renderMatches(\n  matches: RouteMatch[] | null,\n  parentMatches: RouteMatch[] = [],\n  dataRouterState: RemixRouter[\"state\"] | null = null,\n  future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n  if (matches == null) {\n    if (!dataRouterState) {\n      return null;\n    }\n\n    if (dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches as DataRouteMatch[];\n    } else if (\n      future?.v7_partialHydration &&\n      parentMatches.length === 0 &&\n      !dataRouterState.initialized &&\n      dataRouterState.matches.length > 0\n    ) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches as DataRouteMatch[];\n    } else {\n      return null;\n    }\n  }\n\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = dataRouterState?.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(\n      (m) => m.route.id && errors?.[m.route.id] !== undefined\n    );\n    invariant(\n      errorIndex >= 0,\n      `Could not find a matching route for errors on route IDs: ${Object.keys(\n        errors\n      ).join(\",\")}`\n    );\n    renderedMatches = renderedMatches.slice(\n      0,\n      Math.min(renderedMatches.length, errorIndex + 1)\n    );\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n\n      if (match.route.id) {\n        let { loaderData, errors } = dataRouterState;\n        let needsToRunLoader =\n          match.route.loader &&\n          loaderData[match.route.id] === undefined &&\n          (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error: any;\n    let shouldRenderHydrateFallback = false;\n    let errorElement: React.ReactNode | null = null;\n    let hydrateFallbackElement: React.ReactNode | null = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\n            \"route-fallback\",\n            false,\n            \"No `HydrateFallback` element provided to render during initial hydration\"\n          );\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children: React.ReactNode;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = <match.route.Component />;\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return (\n        <RenderedRoute\n          match={match}\n          routeContext={{\n            outlet,\n            matches,\n            isDataRoute: dataRouterState != null,\n          }}\n          children={children}\n        />\n      );\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState &&\n      (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n      <RenderErrorBoundary\n        location={dataRouterState.location}\n        revalidation={dataRouterState.revalidation}\n        component={errorElement}\n        error={error}\n        children={getChildren()}\n        routeContext={{ outlet: null, matches, isDataRoute: true }}\n      />\n    ) : (\n      getChildren()\n    );\n  }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n  UseBlocker = \"useBlocker\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n  UseBlocker = \"useBlocker\",\n  UseLoaderData = \"useLoaderData\",\n  UseActionData = \"useActionData\",\n  UseRouteError = \"useRouteError\",\n  UseNavigation = \"useNavigation\",\n  UseRouteLoaderData = \"useRouteLoaderData\",\n  UseMatches = \"useMatches\",\n  UseRevalidator = \"useRevalidator\",\n  UseNavigateStable = \"useNavigate\",\n  UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n  let route = React.useContext(RouteContext);\n  invariant(route, getDataRouterConsoleError(hookName));\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  invariant(\n    thisRoute.route.id,\n    `${hookName} can only be used on routes that contain a unique \"id\"`\n  );\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(\n    () => ({\n      revalidate: dataRouterContext.router.revalidate,\n      state: state.revalidation,\n    }),\n    [dataRouterContext.router.revalidate, state.revalidation]\n  );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n  let { matches, loaderData } = useDataRouterState(\n    DataRouterStateHook.UseMatches\n  );\n  return React.useMemo(\n    () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n    [matches, loaderData]\n  );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\n      `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n    );\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n  let value = React.useContext(AwaitContext);\n  return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n  let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback<BlockerFunction>(\n    (arg) => {\n      if (typeof shouldBlock !== \"function\") {\n        return !!shouldBlock;\n      }\n      if (basename === \"/\") {\n        return shouldBlock(arg);\n      }\n\n      // If they provided us a function and we've got an active basename, strip\n      // it from the locations we expose to the user to match the behavior of\n      // useLocation\n      let { currentLocation, nextLocation, historyAction } = arg;\n      return shouldBlock({\n        currentLocation: {\n          ...currentLocation,\n          pathname:\n            stripBasename(currentLocation.pathname, basename) ||\n            currentLocation.pathname,\n        },\n        nextLocation: {\n          ...nextLocation,\n          pathname:\n            stripBasename(nextLocation.pathname, basename) ||\n            nextLocation.pathname,\n        },\n        historyAction,\n      });\n    },\n    [basename, shouldBlock]\n  );\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey)\n    ? state.blockers.get(blockerKey)!\n    : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n\n  let navigate: NavigateFunction = React.useCallback(\n    (to: To | number, options: NavigateOptions = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n\n      // Short circuit here since if this happens on first render the navigate\n      // is useless because we haven't wired up our router subscriber yet\n      if (!activeRef.current) return;\n\n      if (typeof to === \"number\") {\n        router.navigate(to);\n      } else {\n        router.navigate(to, { fromRouteId: id, ...options });\n      }\n    },\n    [router, id]\n  );\n\n  return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    warning(false, message);\n  }\n}\n","import type { FutureConfig as RouterFutureConfig } from \"@remix-run/router\";\nimport type { FutureConfig as RenderFutureConfig } from \"./components\";\n\nconst alreadyWarned: { [key: string]: boolean } = {};\n\nexport function warnOnce(key: string, message: string): void {\n  if (__DEV__ && !alreadyWarned[message]) {\n    alreadyWarned[message] = true;\n    console.warn(message);\n  }\n}\n\nconst logDeprecation = (flag: string, msg: string, link: string) =>\n  warnOnce(\n    flag,\n    `⚠️ React Router Future Flag Warning: ${msg}. ` +\n      `You can use the \\`${flag}\\` future flag to opt-in early. ` +\n      `For more information, see ${link}.`\n  );\n\nexport function logV6DeprecationWarnings(\n  renderFuture: Partial<RenderFutureConfig> | undefined,\n  routerFuture?: Omit<RouterFutureConfig, \"v7_prependBasename\">\n) {\n  if (renderFuture?.v7_startTransition === undefined) {\n    logDeprecation(\n      \"v7_startTransition\",\n      \"React Router will begin wrapping state updates in `React.startTransition` in v7\",\n      \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\"\n    );\n  }\n\n  if (\n    renderFuture?.v7_relativeSplatPath === undefined &&\n    (!routerFuture || !routerFuture.v7_relativeSplatPath)\n  ) {\n    logDeprecation(\n      \"v7_relativeSplatPath\",\n      \"Relative route resolution within Splat routes is changing in v7\",\n      \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\"\n    );\n  }\n\n  if (routerFuture) {\n    if (routerFuture.v7_fetcherPersist === undefined) {\n      logDeprecation(\n        \"v7_fetcherPersist\",\n        \"The persistence behavior of fetchers is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\"\n      );\n    }\n\n    if (routerFuture.v7_normalizeFormMethod === undefined) {\n      logDeprecation(\n        \"v7_normalizeFormMethod\",\n        \"Casing of `formMethod` fields is being normalized to uppercase in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\"\n      );\n    }\n\n    if (routerFuture.v7_partialHydration === undefined) {\n      logDeprecation(\n        \"v7_partialHydration\",\n        \"`RouterProvider` hydration behavior is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\"\n      );\n    }\n\n    if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n      logDeprecation(\n        \"v7_skipActionErrorRevalidation\",\n        \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\",\n        \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\"\n      );\n    }\n  }\n}\n","import type {\n  InitialEntry,\n  LazyRouteFunction,\n  Location,\n  MemoryHistory,\n  RelativeRoutingType,\n  Router as RemixRouter,\n  RouterState,\n  RouterSubscriber,\n  To,\n  TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n  AbortedDeferredError,\n  Action as NavigationType,\n  createMemoryHistory,\n  UNSAFE_getResolveToMatches as getResolveToMatches,\n  UNSAFE_invariant as invariant,\n  parsePath,\n  resolveTo,\n  stripBasename,\n  UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n  DataRouteObject,\n  IndexRouteObject,\n  Navigator,\n  NonIndexRouteObject,\n  RouteMatch,\n  RouteObject,\n} from \"./context\";\nimport {\n  AwaitContext,\n  DataRouterContext,\n  DataRouterStateContext,\n  LocationContext,\n  NavigationContext,\n  RouteContext,\n} from \"./context\";\nimport {\n  _renderMatches,\n  useAsyncValue,\n  useInRouterContext,\n  useLocation,\n  useNavigate,\n  useOutlet,\n  useRoutes,\n  useRoutesImpl,\n} from \"./hooks\";\nimport { logV6DeprecationWarnings } from \"./deprecations\";\n\nexport interface FutureConfig {\n  v7_relativeSplatPath: boolean;\n  v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n  fallbackElement?: React.ReactNode;\n  router: RemixRouter;\n  // Only accept future flags relevant to rendering behavior\n  // routing flags should be accessed via router.future\n  future?: Partial<Pick<FutureConfig, \"v7_startTransition\">>;\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let { v7_startTransition } = future || {};\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (newState: RouterState) => {\n      if (v7_startTransition && startTransitionImpl) {\n        startTransitionImpl(() => setStateImpl(newState));\n      } else {\n        setStateImpl(newState);\n      }\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  React.useEffect(\n    () => logV6DeprecationWarnings(future, router.future),\n    [router, future]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <Router\n            basename={basename}\n            location={state.location}\n            navigationType={state.historyAction}\n            navigator={navigator}\n            future={{\n              v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n            }}\n          >\n            {state.initialized || router.future.v7_partialHydration ? (\n              <DataRoutes\n                routes={router.routes}\n                future={router.future}\n                state={state}\n              />\n            ) : (\n              fallbackElement\n            )}\n          </Router>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface MemoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  initialEntries?: InitialEntry[];\n  initialIndex?: number;\n  future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nexport function MemoryRouter({\n  basename,\n  children,\n  initialEntries,\n  initialIndex,\n  future,\n}: MemoryRouterProps): React.ReactElement {\n  let historyRef = React.useRef<MemoryHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true,\n    });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface NavigateProps {\n  to: To;\n  replace?: boolean;\n  state?: any;\n  relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/v6/components/navigate\n */\nexport function Navigate({\n  to,\n  replace,\n  state,\n  relative,\n}: NavigateProps): null {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of\n    // the router loaded. We can help them understand how to avoid that.\n    `<Navigate> may be used only in the context of a <Router> component.`\n  );\n\n  let { future, static: isStatic } = React.useContext(NavigationContext);\n\n  warning(\n    !isStatic,\n    `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n      `This is a no-op, but you should modify your code so the <Navigate> is ` +\n      `only ever rendered in response to some user interaction or state change.`\n  );\n\n  let { matches } = React.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(\n    to,\n    getResolveToMatches(matches, future.v7_relativeSplatPath),\n    locationPathname,\n    relative === \"path\"\n  );\n  let jsonPath = JSON.stringify(path);\n\n  React.useEffect(\n    () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n    [navigate, jsonPath, relative, replace, state]\n  );\n\n  return null;\n}\n\nexport interface OutletProps {\n  context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n  return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n  caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n  path?: NonIndexRouteObject[\"path\"];\n  id?: NonIndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<NonIndexRouteObject>;\n  loader?: NonIndexRouteObject[\"loader\"];\n  action?: NonIndexRouteObject[\"action\"];\n  hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n  handle?: NonIndexRouteObject[\"handle\"];\n  index?: false;\n  children?: React.ReactNode;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n  caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n  path?: IndexRouteObject[\"path\"];\n  id?: IndexRouteObject[\"id\"];\n  lazy?: LazyRouteFunction<IndexRouteObject>;\n  loader?: IndexRouteObject[\"loader\"];\n  action?: IndexRouteObject[\"action\"];\n  hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n  shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n  handle?: IndexRouteObject[\"handle\"];\n  index: true;\n  children?: undefined;\n  element?: React.ReactNode | null;\n  hydrateFallbackElement?: React.ReactNode | null;\n  errorElement?: React.ReactNode | null;\n  Component?: React.ComponentType | null;\n  HydrateFallback?: React.ComponentType | null;\n  ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n  invariant(\n    false,\n    `A <Route> is only ever to be used as the child of <Routes> element, ` +\n      `never rendered directly. Please wrap your <Route> in a <Routes>.`\n  );\n}\n\nexport interface RouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  location: Partial<Location> | string;\n  navigationType?: NavigationType;\n  navigator: Navigator;\n  static?: boolean;\n  future?: Partial<Pick<FutureConfig, \"v7_relativeSplatPath\">>;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/v6/router-components/router\n */\nexport function Router({\n  basename: basenameProp = \"/\",\n  children = null,\n  location: locationProp,\n  navigationType = NavigationType.Pop,\n  navigator,\n  static: staticProp = false,\n  future,\n}: RouterProps): React.ReactElement | null {\n  invariant(\n    !useInRouterContext(),\n    `You cannot render a <Router> inside another <Router>.` +\n      ` You should never have more than one in your app.`\n  );\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(\n    () => ({\n      basename,\n      navigator,\n      static: staticProp,\n      future: {\n        v7_relativeSplatPath: false,\n        ...future,\n      },\n    }),\n    [basename, future, navigator, staticProp]\n  );\n\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\",\n  } = locationProp;\n\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n\n    if (trailingPathname == null) {\n      return null;\n    }\n\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key,\n      },\n      navigationType,\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n\n  warning(\n    locationContext != null,\n    `<Router basename=\"${basename}\"> is not able to match the URL ` +\n      `\"${pathname}${search}${hash}\" because it does not start with the ` +\n      `basename, so the <Router> won't render anything.`\n  );\n\n  if (locationContext == null) {\n    return null;\n  }\n\n  return (\n    <NavigationContext.Provider value={navigationContext}>\n      <LocationContext.Provider children={children} value={locationContext} />\n    </NavigationContext.Provider>\n  );\n}\n\nexport interface RoutesProps {\n  children?: React.ReactNode;\n  location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/v6/components/routes\n */\nexport function Routes({\n  children,\n  location,\n}: RoutesProps): React.ReactElement | null {\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n  (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n  return (\n    <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n      <ResolveAwait>{children}</ResolveAwait>\n    </AwaitErrorBoundary>\n  );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n  errorElement?: React.ReactNode;\n  resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n  error: any;\n};\n\nenum AwaitRenderStatus {\n  pending,\n  success,\n  error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n  AwaitErrorBoundaryProps,\n  AwaitErrorBoundaryState\n> {\n  constructor(props: AwaitErrorBoundaryProps) {\n    super(props);\n    this.state = { error: null };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { error };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {\n    console.error(\n      \"<Await> caught the following error during render\",\n      error,\n      errorInfo\n    );\n  }\n\n  render() {\n    let { children, errorElement, resolve } = this.props;\n\n    let promise: TrackedPromise | null = null;\n    let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_data\", { get: () => resolve });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_error\", { get: () => renderError });\n    } else if ((resolve as TrackedPromise)._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status =\n        \"_error\" in promise\n          ? AwaitRenderStatus.error\n          : \"_data\" in promise\n          ? AwaitRenderStatus.success\n          : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n      promise = resolve.then(\n        (data: any) =>\n          Object.defineProperty(resolve, \"_data\", { get: () => data }),\n        (error: any) =>\n          Object.defineProperty(resolve, \"_error\", { get: () => error })\n      );\n    }\n\n    if (\n      status === AwaitRenderStatus.error &&\n      promise._error instanceof AbortedDeferredError\n    ) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return <AwaitContext.Provider value={promise} children={errorElement} />;\n    }\n\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return <AwaitContext.Provider value={promise} children={children} />;\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n  children,\n}: {\n  children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/v6/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n  children: React.ReactNode,\n  parentPath: number[] = []\n): RouteObject[] {\n  let routes: RouteObject[] = [];\n\n  React.Children.forEach(children, (element, index) => {\n    if (!React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n\n    let treePath = [...parentPath, index];\n\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(\n        routes,\n        createRoutesFromChildren(element.props.children, treePath)\n      );\n      return;\n    }\n\n    invariant(\n      element.type === Route,\n      `[${\n        typeof element.type === \"string\" ? element.type : element.type.name\n      }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n    );\n\n    invariant(\n      !element.props.index || !element.props.children,\n      \"An index route cannot have child routes.\"\n    );\n\n    let route: RouteObject = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary:\n        element.props.ErrorBoundary != null ||\n        element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy,\n    };\n\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(\n        element.props.children,\n        treePath\n      );\n    }\n\n    routes.push(route);\n  });\n\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n  matches: RouteMatch[] | null\n): React.ReactElement | null {\n  return _renderMatches(matches);\n}\n","import type {\n  FormEncType,\n  HTMLFormMethod,\n  RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n  return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n  MouseEvent,\n  \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n  event: LimitedMouseEvent,\n  target?: string\n) {\n  return (\n    event.button === 0 && // Ignore everything but left clicks\n    (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // Ignore clicks with modifier keys\n  );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n  | string\n  | ParamKeyValuePair[]\n  | Record<string, string | string[]>\n  | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nexport function createSearchParams(\n  init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n  return new URLSearchParams(\n    typeof init === \"string\" ||\n    Array.isArray(init) ||\n    init instanceof URLSearchParams\n      ? init\n      : Object.keys(init).reduce((memo, key) => {\n          let value = init[key];\n          return memo.concat(\n            Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n          );\n        }, [] as ParamKeyValuePair[])\n  );\n}\n\nexport function getSearchParamsForLocation(\n  locationSearch: string,\n  defaultSearchParams: URLSearchParams | null\n) {\n  let searchParams = createSearchParams(locationSearch);\n\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach((value) => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n\n  return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n  [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n  | HTMLFormElement\n  | HTMLButtonElement\n  | HTMLInputElement\n  | FormData\n  | URLSearchParams\n  | JsonValue\n  | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(\n        document.createElement(\"form\"),\n        // @ts-expect-error if FormData supports the submitter parameter, this will throw\n        0\n      );\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\n\n/**\n * Submit options shared by both navigations and fetchers\n */\ninterface SharedSubmitOptions {\n  /**\n   * The HTTP method used to submit the form. Overrides `<form method>`.\n   * Defaults to \"GET\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * The action URL path used to submit the form. Overrides `<form action>`.\n   * Defaults to the path of the current route.\n   */\n  action?: string;\n\n  /**\n   * The encoding used to submit the form. Overrides `<form encType>`.\n   * Defaults to \"application/x-www-form-urlencoded\".\n   */\n  encType?: FormEncType;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * In browser-based environments, prevent resetting scroll after this\n   * navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * Enable flushSync for this submission's state updates\n   */\n  flushSync?: boolean;\n}\n\n/**\n * Submit options available to fetchers\n */\nexport interface FetcherSubmitOptions extends SharedSubmitOptions {}\n\n/**\n * Submit options available to navigations\n */\nexport interface SubmitOptions extends FetcherSubmitOptions {\n  /**\n   * Set `true` to replace the current entry in the browser's history stack\n   * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n   * to `false`.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Enable view transitions on this submission navigation\n   */\n  viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n  \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n  if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n    warning(\n      false,\n      `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n        `and will default to \"${defaultEncType}\"`\n    );\n\n    return null;\n  }\n  return encType;\n}\n\nexport function getFormSubmissionInfo(\n  target: SubmitTarget,\n  basename: string\n): {\n  action: string | null;\n  method: string;\n  encType: string;\n  formData: FormData | undefined;\n  body: any;\n} {\n  let method: string;\n  let action: string | null;\n  let encType: string;\n  let formData: FormData | undefined;\n  let body: any;\n\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n    formData = new FormData(target);\n  } else if (\n    isButtonElement(target) ||\n    (isInputElement(target) &&\n      (target.type === \"submit\" || target.type === \"image\"))\n  ) {\n    let form = target.form;\n\n    if (form == null) {\n      throw new Error(\n        `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n      );\n    }\n\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n\n    method =\n      target.getAttribute(\"formmethod\") ||\n      form.getAttribute(\"method\") ||\n      defaultMethod;\n    encType =\n      getFormEncType(target.getAttribute(\"formenctype\")) ||\n      getFormEncType(form.getAttribute(\"enctype\")) ||\n      defaultEncType;\n\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let { name, type, value } = target;\n      if (type === \"image\") {\n        let prefix = name ? `${name}.` : \"\";\n        formData.append(`${prefix}x`, \"0\");\n        formData.append(`${prefix}y`, \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\n      `Cannot submit element that is not <form>, <button>, or ` +\n        `<input type=\"submit|image\">`\n    );\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n\n  return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n  DataRouteObject,\n  FutureConfig,\n  Location,\n  NavigateOptions,\n  NavigationType,\n  Navigator,\n  RelativeRoutingType,\n  RouteObject,\n  RouterProps,\n  RouterProviderProps,\n  To,\n  DataStrategyFunction,\n  PatchRoutesOnNavigationFunction,\n} from \"react-router\";\nimport {\n  Router,\n  createPath,\n  useHref,\n  useLocation,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useResolvedPath,\n  useBlocker,\n  UNSAFE_DataRouterContext as DataRouterContext,\n  UNSAFE_DataRouterStateContext as DataRouterStateContext,\n  UNSAFE_NavigationContext as NavigationContext,\n  UNSAFE_RouteContext as RouteContext,\n  UNSAFE_logV6DeprecationWarnings as logV6DeprecationWarnings,\n  UNSAFE_mapRouteProperties as mapRouteProperties,\n  UNSAFE_useRouteId as useRouteId,\n  UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n  BrowserHistory,\n  Fetcher,\n  FormEncType,\n  FormMethod,\n  FutureConfig as RouterFutureConfig,\n  GetScrollRestorationKeyFunction,\n  HashHistory,\n  History,\n  HTMLFormMethod,\n  HydrationState,\n  Router as RemixRouter,\n  V7_FormMethod,\n  RouterState,\n  RouterSubscriber,\n  BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n  createRouter,\n  createBrowserHistory,\n  createHashHistory,\n  joinPaths,\n  stripBasename,\n  UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n  UNSAFE_invariant as invariant,\n  UNSAFE_warning as warning,\n  matchPath,\n  IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n  SubmitOptions,\n  ParamKeyValuePair,\n  URLSearchParamsInit,\n  SubmitTarget,\n  FetcherSubmitOptions,\n} from \"./dom\";\nimport {\n  createSearchParams,\n  defaultMethod,\n  getFormSubmissionInfo,\n  getSearchParamsForLocation,\n  shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n  FormEncType,\n  FormMethod,\n  GetScrollRestorationKeyFunction,\n  ParamKeyValuePair,\n  SubmitOptions,\n  URLSearchParamsInit,\n  V7_FormMethod,\n};\nexport { createSearchParams, ErrorResponseImpl as UNSAFE_ErrorResponseImpl };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n  ActionFunction,\n  ActionFunctionArgs,\n  AwaitProps,\n  Blocker,\n  BlockerFunction,\n  DataRouteMatch,\n  DataRouteObject,\n  DataStrategyFunction,\n  DataStrategyFunctionArgs,\n  DataStrategyMatch,\n  DataStrategyResult,\n  ErrorResponse,\n  Fetcher,\n  FutureConfig,\n  Hash,\n  IndexRouteObject,\n  IndexRouteProps,\n  JsonFunction,\n  LazyRouteFunction,\n  LayoutRouteProps,\n  LoaderFunction,\n  LoaderFunctionArgs,\n  Location,\n  MemoryRouterProps,\n  NavigateFunction,\n  NavigateOptions,\n  NavigateProps,\n  Navigation,\n  Navigator,\n  NonIndexRouteObject,\n  OutletProps,\n  Params,\n  ParamParseKey,\n  PatchRoutesOnNavigationFunction,\n  PatchRoutesOnNavigationFunctionArgs,\n  Path,\n  PathMatch,\n  Pathname,\n  PathParam,\n  PathPattern,\n  PathRouteProps,\n  RedirectFunction,\n  RelativeRoutingType,\n  RouteMatch,\n  RouteObject,\n  RouteProps,\n  RouterProps,\n  RouterProviderProps,\n  RoutesProps,\n  Search,\n  ShouldRevalidateFunction,\n  ShouldRevalidateFunctionArgs,\n  To,\n  UIMatch,\n} from \"react-router\";\nexport {\n  AbortedDeferredError,\n  Await,\n  MemoryRouter,\n  Navigate,\n  NavigationType,\n  Outlet,\n  Route,\n  Router,\n  Routes,\n  createMemoryRouter,\n  createPath,\n  createRoutesFromChildren,\n  createRoutesFromElements,\n  defer,\n  isRouteErrorResponse,\n  generatePath,\n  json,\n  matchPath,\n  matchRoutes,\n  parsePath,\n  redirect,\n  redirectDocument,\n  replace,\n  renderMatches,\n  resolvePath,\n  useActionData,\n  useAsyncError,\n  useAsyncValue,\n  useBlocker,\n  useHref,\n  useInRouterContext,\n  useLoaderData,\n  useLocation,\n  useMatch,\n  useMatches,\n  useNavigate,\n  useNavigation,\n  useNavigationType,\n  useOutlet,\n  useOutletContext,\n  useParams,\n  useResolvedPath,\n  useRevalidator,\n  useRouteError,\n  useRouteLoaderData,\n  useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n  UNSAFE_DataRouterContext,\n  UNSAFE_DataRouterStateContext,\n  UNSAFE_NavigationContext,\n  UNSAFE_LocationContext,\n  UNSAFE_RouteContext,\n  UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n  var __staticRouterHydrationData: HydrationState | undefined;\n  var __reactRouterVersion: string;\n  interface Document {\n    startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n  }\n}\n\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"0\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n  basename?: string;\n  future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n  hydrationData?: HydrationState;\n  dataStrategy?: DataStrategyFunction;\n  patchRoutesOnNavigation?: PatchRoutesOnNavigationFunction;\n  window?: Window;\n}\n\nexport function createBrowserRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createBrowserHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n  }).initialize();\n}\n\nexport function createHashRouter(\n  routes: RouteObject[],\n  opts?: DOMRouterOpts\n): RemixRouter {\n  return createRouter({\n    basename: opts?.basename,\n    future: {\n      ...opts?.future,\n      v7_prependBasename: true,\n    },\n    history: createHashHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n  }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n  let state = window?.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = {\n      ...state,\n      errors: deserializeErrors(state.errors),\n    };\n  }\n  return state;\n}\n\nfunction deserializeErrors(\n  errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new ErrorResponseImpl(\n        val.status,\n        val.statusText,\n        val.data,\n        val.internal === true\n      );\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n  | {\n      isTransitioning: false;\n    }\n  | {\n      isTransitioning: true;\n      flushSync: boolean;\n      currentLocation: Location;\n      nextLocation: Location;\n    };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n  isTransitioning: false,\n});\nif (__DEV__) {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n  FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\n\nfunction startTransitionSafe(cb: () => void) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\n\ninterface ViewTransition {\n  finished: Promise<void>;\n  ready: Promise<void>;\n  updateCallbackDone: Promise<void>;\n  skipTransition(): void;\n}\n\nclass Deferred<T> {\n  status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n  promise: Promise<T>;\n  // @ts-expect-error - no initializer\n  resolve: (value: T) => void;\n  // @ts-expect-error - no initializer\n  reject: (reason?: unknown) => void;\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = (value) => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = (reason) => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n  fallbackElement,\n  router,\n  future,\n}: RouterProviderProps): React.ReactElement {\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState<RouterState>();\n  let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n    isTransitioning: false,\n  });\n  let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n  let [transition, setTransition] = React.useState<ViewTransition>();\n  let [interruption, setInterruption] = React.useState<{\n    state: RouterState;\n    currentLocation: Location;\n    nextLocation: Location;\n  }>();\n  let fetcherData = React.useRef<Map<string, any>>(new Map());\n  let { v7_startTransition } = future || {};\n\n  let optInStartTransition = React.useCallback(\n    (cb: () => void) => {\n      if (v7_startTransition) {\n        startTransitionSafe(cb);\n      } else {\n        cb();\n      }\n    },\n    [v7_startTransition]\n  );\n\n  let setState = React.useCallback<RouterSubscriber>(\n    (\n      newState: RouterState,\n      {\n        deletedFetchers,\n        flushSync: flushSync,\n        viewTransitionOpts: viewTransitionOpts,\n      }\n    ) => {\n      newState.fetchers.forEach((fetcher, key) => {\n        if (fetcher.data !== undefined) {\n          fetcherData.current.set(key, fetcher.data);\n        }\n      });\n      deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n\n      let isViewTransitionUnavailable =\n        router.window == null ||\n        router.window.document == null ||\n        typeof router.window.document.startViewTransition !== \"function\";\n\n      // If this isn't a view transition or it's not available in this browser,\n      // just update and be done with it\n      if (!viewTransitionOpts || isViewTransitionUnavailable) {\n        if (flushSync) {\n          flushSyncSafe(() => setStateImpl(newState));\n        } else {\n          optInStartTransition(() => setStateImpl(newState));\n        }\n        return;\n      }\n\n      // flushSync + startViewTransition\n      if (flushSync) {\n        // Flush through the context to mark DOM elements as transition=ing\n        flushSyncSafe(() => {\n          // Cancel any pending transitions\n          if (transition) {\n            renderDfd && renderDfd.resolve();\n            transition.skipTransition();\n          }\n          setVtContext({\n            isTransitioning: true,\n            flushSync: true,\n            currentLocation: viewTransitionOpts.currentLocation,\n            nextLocation: viewTransitionOpts.nextLocation,\n          });\n        });\n\n        // Update the DOM\n        let t = router.window!.document.startViewTransition(() => {\n          flushSyncSafe(() => setStateImpl(newState));\n        });\n\n        // Clean up after the animation completes\n        t.finished.finally(() => {\n          flushSyncSafe(() => {\n            setRenderDfd(undefined);\n            setTransition(undefined);\n            setPendingState(undefined);\n            setVtContext({ isTransitioning: false });\n          });\n        });\n\n        flushSyncSafe(() => setTransition(t));\n        return;\n      }\n\n      // startTransition + startViewTransition\n      if (transition) {\n        // Interrupting an in-progress transition, cancel and let everything flush\n        // out, and then kick off a new transition from the interruption state\n        renderDfd && renderDfd.resolve();\n        transition.skipTransition();\n        setInterruption({\n          state: newState,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      } else {\n        // Completed navigation update with opted-in view transitions, let 'er rip\n        setPendingState(newState);\n        setVtContext({\n          isTransitioning: true,\n          flushSync: false,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation,\n        });\n      }\n    },\n    [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n  );\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred<void>());\n    }\n  }, [vtContext]);\n\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({ isTransitioning: false });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (\n      renderDfd &&\n      pendingState &&\n      state.location.key === pendingState.location.key\n    ) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation,\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n\n  React.useEffect(() => {\n    warning(\n      fallbackElement == null || !router.future.v7_partialHydration,\n      \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n        \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n    );\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  let navigator = React.useMemo((): Navigator => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state, opts) =>\n        router.navigate(to, {\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n      replace: (to, state, opts) =>\n        router.navigate(to, {\n          replace: true,\n          state,\n          preventScrollReset: opts?.preventScrollReset,\n        }),\n    };\n  }, [router]);\n\n  let basename = router.basename || \"/\";\n\n  let dataRouterContext = React.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n    }),\n    [router, navigator, basename]\n  );\n\n  let routerFuture = React.useMemo<RouterProps[\"future\"]>(\n    () => ({\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n    }),\n    [router.future.v7_relativeSplatPath]\n  );\n\n  React.useEffect(\n    () => logV6DeprecationWarnings(future, router.future),\n    [future, router.future]\n  );\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return (\n    <>\n      <DataRouterContext.Provider value={dataRouterContext}>\n        <DataRouterStateContext.Provider value={state}>\n          <FetchersContext.Provider value={fetcherData.current}>\n            <ViewTransitionContext.Provider value={vtContext}>\n              <Router\n                basename={basename}\n                location={state.location}\n                navigationType={state.historyAction}\n                navigator={navigator}\n                future={routerFuture}\n              >\n                {state.initialized || router.future.v7_partialHydration ? (\n                  <MemoizedDataRoutes\n                    routes={router.routes}\n                    future={router.future}\n                    state={state}\n                  />\n                ) : (\n                  fallbackElement\n                )}\n              </Router>\n            </ViewTransitionContext.Provider>\n          </FetchersContext.Provider>\n        </DataRouterStateContext.Provider>\n      </DataRouterContext.Provider>\n      {null}\n    </>\n  );\n}\n\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = React.memo(DataRoutes);\n\nfunction DataRoutes({\n  routes,\n  future,\n  state,\n}: {\n  routes: DataRouteObject[];\n  future: RemixRouter[\"future\"];\n  state: RouterState;\n}): React.ReactElement | null {\n  return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface BrowserRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n  basename,\n  children,\n  future,\n  window,\n}: BrowserRouterProps) {\n  let historyRef = React.useRef<BrowserHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HashRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: Partial<FutureConfig>;\n  window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n  basename,\n  children,\n  future,\n  window,\n}: HashRouterProps) {\n  let historyRef = React.useRef<HashHistory>();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({ window, v5Compat: true });\n  }\n\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nexport interface HistoryRouterProps {\n  basename?: string;\n  children?: React.ReactNode;\n  future?: FutureConfig;\n  history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n  basename,\n  children,\n  future,\n  history,\n}: HistoryRouterProps) {\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location,\n  });\n  let { v7_startTransition } = future || {};\n  let setState = React.useCallback(\n    (newState: { action: NavigationType; location: Location }) => {\n      v7_startTransition && startTransitionImpl\n        ? startTransitionImpl(() => setStateImpl(newState))\n        : setStateImpl(newState);\n    },\n    [setStateImpl, v7_startTransition]\n  );\n\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n\n  return (\n    <Router\n      basename={basename}\n      children={children}\n      location={state.location}\n      navigationType={state.action}\n      navigator={history}\n      future={future}\n    />\n  );\n}\n\nif (__DEV__) {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n  extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n  reloadDocument?: boolean;\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: RelativeRoutingType;\n  to: To;\n  viewTransition?: boolean;\n}\n\nconst isBrowser =\n  typeof window !== \"undefined\" &&\n  typeof window.document !== \"undefined\" &&\n  typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n  function LinkWithRef(\n    {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      viewTransition,\n      ...rest\n    },\n    ref\n  ) {\n    let { basename } = React.useContext(NavigationContext);\n\n    // Rendered into <a href> for absolute URLs\n    let absoluteHref;\n    let isExternal = false;\n\n    if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n      // Render the absolute href server- and client-side\n      absoluteHref = to;\n\n      // Only check for external origins client-side\n      if (isBrowser) {\n        try {\n          let currentUrl = new URL(window.location.href);\n          let targetUrl = to.startsWith(\"//\")\n            ? new URL(currentUrl.protocol + to)\n            : new URL(to);\n          let path = stripBasename(targetUrl.pathname, basename);\n\n          if (targetUrl.origin === currentUrl.origin && path != null) {\n            // Strip the protocol/origin/basename for same-origin absolute URLs\n            to = path + targetUrl.search + targetUrl.hash;\n          } else {\n            isExternal = true;\n          }\n        } catch (e) {\n          // We can't do external URL detection without a valid URL\n          warning(\n            false,\n            `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n              `when clicked - please update to a valid URL path.`\n          );\n        }\n      }\n    }\n\n    // Rendered into <a href> for relative URLs\n    let href = useHref(to, { relative });\n\n    let internalOnClick = useLinkClickHandler(to, {\n      replace,\n      state,\n      target,\n      preventScrollReset,\n      relative,\n      viewTransition,\n    });\n    function handleClick(\n      event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n    ) {\n      if (onClick) onClick(event);\n      if (!event.defaultPrevented) {\n        internalOnClick(event);\n      }\n    }\n\n    return (\n      // eslint-disable-next-line jsx-a11y/anchor-has-content\n      <a\n        {...rest}\n        href={absoluteHref || href}\n        onClick={isExternal || reloadDocument ? onClick : handleClick}\n        ref={ref}\n        target={target}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Link.displayName = \"Link\";\n}\n\nexport type NavLinkRenderProps = {\n  isActive: boolean;\n  isPending: boolean;\n  isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n  extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n  children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n  caseSensitive?: boolean;\n  className?: string | ((props: NavLinkRenderProps) => string | undefined);\n  end?: boolean;\n  style?:\n    | React.CSSProperties\n    | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n  function NavLinkWithRef(\n    {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      viewTransition,\n      children,\n      ...rest\n    },\n    ref\n  ) {\n    let path = useResolvedPath(to, { relative: rest.relative });\n    let location = useLocation();\n    let routerState = React.useContext(DataRouterStateContext);\n    let { navigator, basename } = React.useContext(NavigationContext);\n    let isTransitioning =\n      routerState != null &&\n      // Conditional usage is OK here because the usage of a data router is static\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      useViewTransitionState(path) &&\n      viewTransition === true;\n\n    let toPathname = navigator.encodeLocation\n      ? navigator.encodeLocation(path).pathname\n      : path.pathname;\n    let locationPathname = location.pathname;\n    let nextLocationPathname =\n      routerState && routerState.navigation && routerState.navigation.location\n        ? routerState.navigation.location.pathname\n        : null;\n\n    if (!caseSensitive) {\n      locationPathname = locationPathname.toLowerCase();\n      nextLocationPathname = nextLocationPathname\n        ? nextLocationPathname.toLowerCase()\n        : null;\n      toPathname = toPathname.toLowerCase();\n    }\n\n    if (nextLocationPathname && basename) {\n      nextLocationPathname =\n        stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n    }\n\n    // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n    // we're looking for a slash _after_ what's in `to`.  For example:\n    //\n    // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n    // both want to look for a / at index 6 to match URL `/users/matt`\n    const endSlashPosition =\n      toPathname !== \"/\" && toPathname.endsWith(\"/\")\n        ? toPathname.length - 1\n        : toPathname.length;\n    let isActive =\n      locationPathname === toPathname ||\n      (!end &&\n        locationPathname.startsWith(toPathname) &&\n        locationPathname.charAt(endSlashPosition) === \"/\");\n\n    let isPending =\n      nextLocationPathname != null &&\n      (nextLocationPathname === toPathname ||\n        (!end &&\n          nextLocationPathname.startsWith(toPathname) &&\n          nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n    let renderProps = {\n      isActive,\n      isPending,\n      isTransitioning,\n    };\n\n    let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n    let className: string | undefined;\n    if (typeof classNameProp === \"function\") {\n      className = classNameProp(renderProps);\n    } else {\n      // If the className prop is not a function, we use a default `active`\n      // class for <NavLink />s that are active. In v5 `active` was the default\n      // value for `activeClassName`, but we are removing that API and can still\n      // use the old default behavior for a cleaner upgrade path and keep the\n      // simple styling rules working as they currently do.\n      className = [\n        classNameProp,\n        isActive ? \"active\" : null,\n        isPending ? \"pending\" : null,\n        isTransitioning ? \"transitioning\" : null,\n      ]\n        .filter(Boolean)\n        .join(\" \");\n    }\n\n    let style =\n      typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n    return (\n      <Link\n        {...rest}\n        aria-current={ariaCurrent}\n        className={className}\n        ref={ref}\n        style={style}\n        to={to}\n        viewTransition={viewTransition}\n      >\n        {typeof children === \"function\" ? children(renderProps) : children}\n      </Link>\n    );\n  }\n);\n\nif (__DEV__) {\n  NavLink.displayName = \"NavLink\";\n}\n\n/**\n * Form props shared by navigations and fetchers\n */\ninterface SharedFormProps extends React.FormHTMLAttributes<HTMLFormElement> {\n  /**\n   * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n   * \"put\", \"delete\", \"patch\".\n   */\n  method?: HTMLFormMethod;\n\n  /**\n   * `<form encType>` - enhancing beyond the normal string type and limiting\n   * to the built-in browser supported values\n   */\n  encType?:\n    | \"application/x-www-form-urlencoded\"\n    | \"multipart/form-data\"\n    | \"text/plain\";\n\n  /**\n   * Normal `<form action>` but supports React Router's relative paths.\n   */\n  action?: string;\n\n  /**\n   * Determines whether the form action is relative to the route hierarchy or\n   * the pathname.  Use this if you want to opt out of navigating the route\n   * hierarchy and want to instead route based on /-delimited URL segments\n   */\n  relative?: RelativeRoutingType;\n\n  /**\n   * Prevent the scroll position from resetting to the top of the viewport on\n   * completion of the navigation when using the <ScrollRestoration> component\n   */\n  preventScrollReset?: boolean;\n\n  /**\n   * A function to call when the form is submitted. If you call\n   * `event.preventDefault()` then this form will not do anything.\n   */\n  onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\n/**\n * Form props available to fetchers\n */\nexport interface FetcherFormProps extends SharedFormProps {}\n\n/**\n * Form props available to navigations\n */\nexport interface FormProps extends SharedFormProps {\n  /**\n   * Indicate a specific fetcherKey to use when using navigate=false\n   */\n  fetcherKey?: string;\n\n  /**\n   * navigate=false will use a fetcher instead of a navigation\n   */\n  navigate?: boolean;\n\n  /**\n   * Forces a full document navigation instead of a fetch.\n   */\n  reloadDocument?: boolean;\n\n  /**\n   * Replaces the current entry in the browser history stack when the form\n   * navigates. Use this if you don't want the user to be able to click \"back\"\n   * to the page with the form on it.\n   */\n  replace?: boolean;\n\n  /**\n   * State object to add to the history stack entry for this navigation\n   */\n  state?: any;\n\n  /**\n   * Enable view transitions on this Form navigation\n   */\n  viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n  SubmitEvent,\n  Event,\n  HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n  (\n    {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      viewTransition,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    let submit = useSubmit();\n    let formAction = useFormAction(action, { relative });\n    let formMethod: HTMLFormMethod =\n      method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n    let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n      onSubmit && onSubmit(event);\n      if (event.defaultPrevented) return;\n      event.preventDefault();\n\n      let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n        .submitter as HTMLFormSubmitter | null;\n\n      let submitMethod =\n        (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n        method;\n\n      submit(submitter || event.currentTarget, {\n        fetcherKey,\n        method: submitMethod,\n        navigate,\n        replace,\n        state,\n        relative,\n        preventScrollReset,\n        viewTransition,\n      });\n    };\n\n    return (\n      <form\n        ref={forwardedRef}\n        method={formMethod}\n        action={formAction}\n        onSubmit={reloadDocument ? onSubmit : submitHandler}\n        {...props}\n      />\n    );\n  }\n);\n\nif (__DEV__) {\n  Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n  getKey,\n  storageKey,\n}: ScrollRestorationProps) {\n  useScrollRestoration({ getKey, storageKey });\n  return null;\n}\n\nif (__DEV__) {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n  UseScrollRestoration = \"useScrollRestoration\",\n  UseSubmit = \"useSubmit\",\n  UseSubmitFetcher = \"useSubmitFetcher\",\n  UseFetcher = \"useFetcher\",\n  useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n  UseFetcher = \"useFetcher\",\n  UseFetchers = \"useFetchers\",\n  UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n  hookName: DataRouterHook | DataRouterStateHook\n) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n  let ctx = React.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n  let state = React.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n  to: To,\n  {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    viewTransition,\n  }: {\n    target?: React.HTMLAttributeAnchorTarget;\n    replace?: boolean;\n    state?: any;\n    preventScrollReset?: boolean;\n    relative?: RelativeRoutingType;\n    viewTransition?: boolean;\n  } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, { relative });\n\n  return React.useCallback(\n    (event: React.MouseEvent<E, MouseEvent>) => {\n      if (shouldProcessLinkClick(event, target)) {\n        event.preventDefault();\n\n        // If the URL hasn't changed, a regular <a> will do a replace instead of\n        // a push, so do the same here unless the replace prop is explicitly set\n        let replace =\n          replaceProp !== undefined\n            ? replaceProp\n            : createPath(location) === createPath(path);\n\n        navigate(to, {\n          replace,\n          state,\n          preventScrollReset,\n          relative,\n          viewTransition,\n        });\n      }\n    },\n    [\n      location,\n      navigate,\n      path,\n      replaceProp,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      relative,\n      viewTransition,\n    ]\n  );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n  defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n  warning(\n    typeof URLSearchParams !== \"undefined\",\n    `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n      `support the URLSearchParams API. If you need to support Internet ` +\n      `Explorer 11, we recommend you load a polyfill such as ` +\n      `https://github.com/ungap/url-search-params.`\n  );\n\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n\n  let location = useLocation();\n  let searchParams = React.useMemo(\n    () =>\n      // Only merge in the defaults if we haven't yet called setSearchParams.\n      // Once we call that we want those to take precedence, otherwise you can't\n      // remove a param with setSearchParams({}) if it has an initial value\n      getSearchParamsForLocation(\n        location.search,\n        hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n      ),\n    [location.search]\n  );\n\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback<SetURLSearchParams>(\n    (nextInit, navigateOptions) => {\n      const newSearchParams = createSearchParams(\n        typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n      );\n      hasSetSearchParamsRef.current = true;\n      navigate(\"?\" + newSearchParams, navigateOptions);\n    },\n    [navigate, searchParams]\n  );\n\n  return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n  nextInit?:\n    | URLSearchParamsInit\n    | ((prev: URLSearchParams) => URLSearchParamsInit),\n  navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n  (\n    /**\n     * Specifies the `<form>` to be submitted to the server, a specific\n     * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n     * arbitrary data to submit.\n     *\n     * Note: When using a `<button>` its `name` and `value` will also be\n     * included in the form data that is submitted.\n     */\n    target: SubmitTarget,\n\n    /**\n     * Options that override the `<form>`'s own attributes. Required when\n     * submitting arbitrary data without a backing `<form>`.\n     */\n    options?: SubmitOptions\n  ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n  (\n    target: SubmitTarget,\n    // Fetchers cannot replace or set state because they are not navigation events\n    options?: FetcherSubmitOptions\n  ): void;\n}\n\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\n      \"You are calling submit during the server render. \" +\n        \"Try calling submit within a `useEffect` or callback instead.\"\n    );\n  }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n  let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let { basename } = React.useContext(NavigationContext);\n  let currentRouteId = useRouteId();\n\n  return React.useCallback<SubmitFunction>(\n    (target, options = {}) => {\n      validateClientSideSubmission();\n\n      let { action, method, encType, formData, body } = getFormSubmissionInfo(\n        target,\n        basename\n      );\n\n      if (options.navigate === false) {\n        let key = options.fetcherKey || getUniqueFetcherId();\n        router.fetch(key, currentRouteId, options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          flushSync: options.flushSync,\n        });\n      } else {\n        router.navigate(options.action || action, {\n          preventScrollReset: options.preventScrollReset,\n          formData,\n          body,\n          formMethod: options.method || (method as HTMLFormMethod),\n          formEncType: options.encType || (encType as FormEncType),\n          replace: options.replace,\n          state: options.state,\n          fromRouteId: currentRouteId,\n          flushSync: options.flushSync,\n          viewTransition: options.viewTransition,\n        });\n      }\n    },\n    [router, basename, currentRouteId]\n  );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n  action?: string,\n  { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n  let { basename } = React.useContext(NavigationContext);\n  let routeContext = React.useContext(RouteContext);\n  invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    let indexValues = params.getAll(\"index\");\n    let hasNakedIndexParam = indexValues.some((v) => v === \"\");\n    if (hasNakedIndexParam) {\n      params.delete(\"index\");\n      indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? `?${qs}` : \"\";\n    }\n  }\n\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search\n      ? path.search.replace(/^\\?/, \"?index&\")\n      : \"?index\";\n  }\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname =\n      path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n\n  return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n  Form: React.ForwardRefExoticComponent<\n    FetcherFormProps & React.RefAttributes<HTMLFormElement>\n  >;\n  submit: FetcherSubmitFunction;\n  load: (href: string, opts?: { flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n  key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n  let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(RouteContext);\n  let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n  invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n  invariant(route, `useFetcher must be used inside a RouteContext`);\n  invariant(\n    routeId != null,\n    `useFetcher can only be used on routes that contain a unique \"id\"`\n  );\n\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState<string>(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n\n  // Fetcher additions\n  let load = React.useCallback(\n    (href: string, opts?: { flushSync?: boolean }) => {\n      invariant(routeId, \"No routeId available for fetcher.load()\");\n      router.fetch(fetcherKey, routeId, href, opts);\n    },\n    [fetcherKey, routeId, router]\n  );\n\n  let submitImpl = useSubmit();\n  let submit = React.useCallback<FetcherSubmitFunction>(\n    (target, opts) => {\n      submitImpl(target, {\n        ...opts,\n        navigate: false,\n        fetcherKey,\n      });\n    },\n    [fetcherKey, submitImpl]\n  );\n\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n      (props, ref) => {\n        return (\n          <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n        );\n      }\n    );\n    if (__DEV__) {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(\n    () => ({\n      Form: FetcherForm,\n      submit,\n      load,\n      ...fetcher,\n      data,\n    }),\n    [FetcherForm, submit, load, fetcher, data]\n  );\n\n  return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n    ...fetcher,\n    key,\n  }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n  getKey,\n  storageKey,\n}: {\n  getKey?: GetScrollRestorationKeyFunction;\n  storageKey?: string;\n} = {}) {\n  let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n    DataRouterStateHook.UseScrollRestoration\n  );\n  let { basename } = React.useContext(NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n\n  // Save positions on pagehide\n  usePageHide(\n    React.useCallback(() => {\n      if (navigation.state === \"idle\") {\n        let key = (getKey ? getKey(location, matches) : null) || location.key;\n        savedScrollPositions[key] = window.scrollY;\n      }\n      try {\n        sessionStorage.setItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n          JSON.stringify(savedScrollPositions)\n        );\n      } catch (error) {\n        warning(\n          false,\n          `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n        );\n      }\n      window.history.scrollRestoration = \"auto\";\n    }, [storageKey, getKey, navigation.state, location, matches])\n  );\n\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY\n        );\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n        getKey && basename !== \"/\"\n          ? (location, matches) =>\n              getKey(\n                // Strip the basename to match useLocation()\n                {\n                  ...location,\n                  pathname:\n                    stripBasename(location.pathname, basename) ||\n                    location.pathname,\n                },\n                matches\n              )\n          : getKey;\n      let disableScrollRestoration = router?.enableScrollRestoration(\n        savedScrollPositions,\n        () => window.scrollY,\n        getKeyWithoutBasename\n      );\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(\n          decodeURIComponent(location.hash.slice(1))\n        );\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n  callback: (event: BeforeUnloadEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n  callback: (event: PageTransitionEvent) => any,\n  options?: { capture?: boolean }\n): void {\n  let { capture } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? { capture } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt({\n  when,\n  message,\n}: {\n  when: boolean | BlockerFunction;\n  message: string;\n}) {\n  let blocker = useBlocker(when);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n  to: To,\n  opts: { relative?: RelativeRoutingType } = {}\n) {\n  let vtContext = React.useContext(ViewTransitionContext);\n\n  invariant(\n    vtContext != null,\n    \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" +\n      \"Did you accidentally import `RouterProvider` from `react-router`?\"\n  );\n\n  let { basename } = useDataRouterContext(\n    DataRouterHook.useViewTransitionState\n  );\n  let path = useResolvedPath(to, { relative: opts.relative });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n\n  let currentPath =\n    stripBasename(vtContext.currentLocation.pathname, basename) ||\n    vtContext.currentLocation.pathname;\n  let nextPath =\n    stripBasename(vtContext.nextLocation.pathname, basename) ||\n    vtContext.nextLocation.pathname;\n\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return (\n    matchPath(path.pathname, nextPath) != null ||\n    matchPath(path.pathname, currentPath) != null\n  );\n}\n\nexport { useViewTransitionState as useViewTransitionState };\n\n//#endregion\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nexport { _objectSpread2 as default };","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\"message\", ({source, data}) => {\n      if (source === _global && data === token) {\n        callbacks.length && callbacks.shift()();\n      }\n    }, false);\n\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    }\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n  typeof setImmediate === 'function',\n  isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n  queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  if (response) {\n    this.response = response;\n    this.status = response.status ? response.status : null;\n  }\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.cause = error;\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  if (utils.isFunction(options)) {\n    options = {\n      serialize: options\n    };\n  } \n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    }\n  }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {}, dest, key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[key = entry[0]] = (dest = obj[key]) ?\n          (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite)\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get(\"set-cookie\") || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn.apply(null, args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n  url = new URL(url, platform.origin);\n\n  return (\n    origin.protocol === url.protocol &&\n    origin.host === url.host &&\n    (isMSIE || origin.port === url.port)\n  );\n})(\n  new URL(platform.origin),\n  platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, prop , caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop , caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop , caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n  };\n\n  utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  let contentType;\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // Let the browser set it\n    } else if ((contentType = headers.getContentType()) !== false) {\n      // fix semicolon duplication issue for ReactNative FormData implementation\n      const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n      headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n","function _OverloadYield(e, d) {\n  this.v = e, this.k = d;\n}\nexport { _OverloadYield as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _wrapAsyncGenerator(e) {\n  return function () {\n    return new AsyncGenerator(e.apply(this, arguments));\n  };\n}\nfunction AsyncGenerator(e) {\n  var r, t;\n  function resume(r, t) {\n    try {\n      var n = e[r](t),\n        o = n.value,\n        u = o instanceof OverloadYield;\n      Promise.resolve(u ? o.v : o).then(function (t) {\n        if (u) {\n          var i = \"return\" === r ? \"return\" : \"next\";\n          if (!o.k || t.done) return resume(i, t);\n          t = e[i](t).value;\n        }\n        settle(n.done ? \"return\" : \"normal\", t);\n      }, function (e) {\n        resume(\"throw\", e);\n      });\n    } catch (e) {\n      settle(\"throw\", e);\n    }\n  }\n  function settle(e, n) {\n    switch (e) {\n      case \"return\":\n        r.resolve({\n          value: n,\n          done: !0\n        });\n        break;\n      case \"throw\":\n        r.reject(n);\n        break;\n      default:\n        r.resolve({\n          value: n,\n          done: !1\n        });\n    }\n    (r = r.next) ? resume(r.key, r.arg) : t = null;\n  }\n  this._invoke = function (e, n) {\n    return new Promise(function (o, u) {\n      var i = {\n        key: e,\n        arg: n,\n        resolve: o,\n        reject: u,\n        next: null\n      };\n      t ? t = t.next = i : (r = t = i, resume(e, n));\n    });\n  }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n  return this;\n}, AsyncGenerator.prototype.next = function (e) {\n  return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n  return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n  return this._invoke(\"return\", e);\n};\nexport { _wrapAsyncGenerator as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _awaitAsyncGenerator(e) {\n  return new OverloadYield(e, 0);\n}\nexport { _awaitAsyncGenerator as default };","import OverloadYield from \"./OverloadYield.js\";\nfunction _asyncGeneratorDelegate(t) {\n  var e = {},\n    n = !1;\n  function pump(e, r) {\n    return n = !0, r = new Promise(function (n) {\n      n(t[e](r));\n    }), {\n      done: !1,\n      value: new OverloadYield(r, 1)\n    };\n  }\n  return e[\"undefined\" != typeof Symbol && Symbol.iterator || \"@@iterator\"] = function () {\n    return this;\n  }, e.next = function (t) {\n    return n ? (n = !1, t) : pump(\"next\", t);\n  }, \"function\" == typeof t[\"throw\"] && (e[\"throw\"] = function (t) {\n    if (n) throw n = !1, t;\n    return pump(\"throw\", t);\n  }), \"function\" == typeof t[\"return\"] && (e[\"return\"] = function (t) {\n    return n ? (n = !1, t) : pump(\"return\", t);\n  }), e;\n}\nexport { _asyncGeneratorDelegate as default };","function _asyncIterator(r) {\n  var n,\n    t,\n    o,\n    e = 2;\n  for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n    if (t && null != (n = r[t])) return n.call(r);\n    if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n    t = \"@@asyncIterator\", o = \"@@iterator\";\n  }\n  throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(r) {\n  function AsyncFromSyncIteratorContinuation(r) {\n    if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n    var n = r.done;\n    return Promise.resolve(r.value).then(function (r) {\n      return {\n        value: r,\n        done: n\n      };\n    });\n  }\n  return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {\n    this.s = r, this.n = r.next;\n  }, AsyncFromSyncIterator.prototype = {\n    s: null,\n    n: null,\n    next: function next() {\n      return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n    },\n    \"return\": function _return(r) {\n      var n = this.s[\"return\"];\n      return void 0 === n ? Promise.resolve({\n        value: r,\n        done: !0\n      }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n    },\n    \"throw\": function _throw(r) {\n      var n = this.s[\"return\"];\n      return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n    }\n  }, new AsyncFromSyncIterator(r);\n}\nexport { _asyncIterator as default };","\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n    ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n    async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n  let duplexAccessed = false;\n\n  const hasContentType = new Request(platform.origin, {\n    body: new ReadableStream(),\n    method: 'POST',\n    get duplex() {\n      duplexAccessed = true;\n      return 'half';\n    },\n  }).headers.has('Content-Type');\n\n  return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n  test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n  stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n  ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n    !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n      (_, config) => {\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n  });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n  if (body == null) {\n    return 0;\n  }\n\n  if(utils.isBlob(body)) {\n    return body.size;\n  }\n\n  if(utils.isSpecCompliantForm(body)) {\n    const _request = new Request(platform.origin, {\n      method: 'POST',\n      body,\n    });\n    return (await _request.arrayBuffer()).byteLength;\n  }\n\n  if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n    return body.byteLength;\n  }\n\n  if(utils.isURLSearchParams(body)) {\n    body = body + '';\n  }\n\n  if(utils.isString(body)) {\n    return (await encodeText(body)).byteLength;\n  }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n  const length = utils.toFiniteNumber(headers.getContentLength());\n\n  return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n  let {\n    url,\n    method,\n    data,\n    signal,\n    cancelToken,\n    timeout,\n    onDownloadProgress,\n    onUploadProgress,\n    responseType,\n    headers,\n    withCredentials = 'same-origin',\n    fetchOptions\n  } = resolveConfig(config);\n\n  responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n  let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n  let request;\n\n  const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n  });\n\n  let requestContentLength;\n\n  try {\n    if (\n      onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n      (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n    ) {\n      let _request = new Request(url, {\n        method: 'POST',\n        body: data,\n        duplex: \"half\"\n      });\n\n      let contentTypeHeader;\n\n      if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n        headers.setContentType(contentTypeHeader)\n      }\n\n      if (_request.body) {\n        const [onProgress, flush] = progressEventDecorator(\n          requestContentLength,\n          progressEventReducer(asyncDecorator(onUploadProgress))\n        );\n\n        data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n      }\n    }\n\n    if (!utils.isString(withCredentials)) {\n      withCredentials = withCredentials ? 'include' : 'omit';\n    }\n\n    // Cloudflare Workers throws when credentials are defined\n    // see https://github.com/cloudflare/workerd/issues/902\n    const isCredentialsSupported = \"credentials\" in Request.prototype;\n    request = new Request(url, {\n      ...fetchOptions,\n      signal: composedSignal,\n      method: method.toUpperCase(),\n      headers: headers.normalize().toJSON(),\n      body: data,\n      duplex: \"half\",\n      credentials: isCredentialsSupported ? withCredentials : undefined\n    });\n\n    let response = await fetch(request);\n\n    const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n    if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n      const options = {};\n\n      ['status', 'statusText', 'headers'].forEach(prop => {\n        options[prop] = response[prop];\n      });\n\n      const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n      const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n        responseContentLength,\n        progressEventReducer(asyncDecorator(onDownloadProgress), true)\n      ) || [];\n\n      response = new Response(\n        trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n          flush && flush();\n          unsubscribe && unsubscribe();\n        }),\n        options\n      );\n    }\n\n    responseType = responseType || 'text';\n\n    let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n    !isStreamResponse && unsubscribe && unsubscribe();\n\n    return await new Promise((resolve, reject) => {\n      settle(resolve, reject, {\n        data: responseData,\n        headers: AxiosHeaders.from(response.headers),\n        status: response.status,\n        statusText: response.statusText,\n        config,\n        request\n      })\n    })\n  } catch (err) {\n    unsubscribe && unsubscribe();\n\n    if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n      throw Object.assign(\n        new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n        {\n          cause: err.cause || err\n        }\n      )\n    }\n\n    throw AxiosError.from(err, err && err.code, config, request);\n  }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(config, {\n      baseUrl: validators.spelling('baseURL'),\n      withXsrfToken: validators.spelling('withXSRFToken')\n    }, true);\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift.apply(chain, requestInterceptorChain);\n      chain.push.apply(chain, responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    i = 0;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","// src/api/auth.js\r\nimport axios from 'axios';\r\n\r\n// 创建并导出 axios 实例\r\nexport const api = axios.create({\r\n  baseURL: 'http://localhost:8088',\r\n  timeout: 5000,\r\n});\r\n\r\n// 请求拦截器\r\napi.interceptors.request.use(config => {\r\n  const token = localStorage.getItem('token');\r\n  if (token) {\r\n    config.headers.Authorization = `Bearer ${token}`;\r\n  }\r\n  return config;\r\n});\r\n\r\nexport const login = async (username, password) => {\r\n  const response = await api.post('/user/login', null, {\r\n    params: { username, password }\r\n  });\r\n  if (response.data.code === 200 && response.data.data.token) {\r\n    localStorage.setItem('token', response.data.data.token);\r\n  }\r\n  return response;\r\n};\r\n\r\nexport const register = (username, password, code) => {\r\n  return api.post('/user/regist', null, {\r\n    params: { username, password, code }\r\n  });\r\n};\r\n\r\nexport const getUserInfo = async () => {\r\n  try {\r\n    const response = await api.get('/user/userInfo');\r\n    if (response.data.code === 200) {\r\n      return response.data.data; \r\n    }\r\n    throw new Error(response.data.message || '获取用户信息失败');\r\n  } catch (error) {\r\n    console.error('获取用户信息失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const isAdmin = async () => {\r\n  try {\r\n    const userInfo = await getUserInfo();\r\n    return userInfo.authority === 'ADMIN';\r\n  } catch (error) {\r\n    console.error('检查管理员权限失败:', error);\r\n    return false;\r\n  }\r\n};\r\n","// src/api/torrent.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\n/**\r\n * 创建并上传一个种子\r\n * @param {File} file 种子文件 (.torrent)\r\n * @param {Object} bodyObj 包含种子信息的对象，格式如下：\r\n * {\r\n *   torrentName: \"测试下载\",\r\n *   description: \"A high-quality 1080p version of Example Movie.\",\r\n *   category: \"电影\",\r\n *   region: \"USA\",\r\n *   resolution: \"1080p\",\r\n *   subtitle: \"English\",\r\n *   filePath: \"D:/大学/大三_下/torrentFrom/[电影天堂www.dytt89.com]两杆大烟枪BD中英双字.mp4.torrent\"\r\n * }\r\n */\r\nexport async function createTorrent(file, bodyObj) {\r\n  const formData = new FormData();\r\n  formData.append('file', file);\r\n\r\n  // 关键修改：将JSON字符串转换为Blob对象，并设置正确的Content-Type\r\n  formData.append('body', new Blob([JSON.stringify(bodyObj)], {\r\n    type: 'application/json'\r\n  }));\r\n\r\n  try {\r\n    const response = await api.post('/torrent', formData, {\r\n      headers: {\r\n      }\r\n    });\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('上传种子失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n/**\r\n * 下载种子文件\r\n * @param {number} torrentId 种子ID\r\n * @param {string} downloadPath 下载路径\r\n */\r\nexport async function downloadTorrent(torrentId, downloadPath) {\r\n  try {\r\n    const response = await api.get(`/torrent/downloadTorrent`, {\r\n      params: {\r\n        id: torrentId,\r\n        downloadPath: downloadPath\r\n      }\r\n    });\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('下载种子失败:', error);\r\n    throw error;\r\n  }\r\n}\r\n\r\n/**\r\n * 获取下载进度\r\n */\r\nexport async function getDownloadProgress() {\r\n  try {\r\n    const response = await api.get('/torrent/getProgress');\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('获取下载进度失败:', error);\r\n    throw error;\r\n  }\r\n}\r\n\r\nexport const getTorrents = (page = 1, size = 5) => {\r\n  return api.get('/torrent', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getTorrentDetail = (torrentId) => {\r\n  return api.get(`/torrent/${torrentId}`).then(response => {\r\n    // 确保数据结构一致\r\n    if (response.data && response.data.data) {\r\n      return {\r\n        ...response,\r\n        data: {\r\n          ...response.data,\r\n          data: {\r\n            torrent: response.data.data.torrent, // 直接使用后端返回的格式化数据\r\n            comments: response.data.data.comments || []\r\n          }\r\n        }\r\n      };\r\n    }\r\n    return response;\r\n  });\r\n};\r\n\r\nexport const likeTorrent = (torrentId) => {\r\n  return api.post(`/torrent/${torrentId}/like`);\r\n};\r\n\r\nexport const addTorrentComment = (torrentId, commentData) => {\r\n  return api.post(`/torrent/${torrentId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteTorrent = (torrentId) => {\r\n  return api.delete(`/torrent/deleteTorrent/${torrentId}`);\r\n};\r\n\r\n// // 上传种子接口\r\n// export const uploadTorrent = async (torrentFile, torrentData, onProgress) => {\r\n//   // 1. 基础验证\r\n//   if (!torrentFile || !torrentFile.name.endsWith('.torrent')) {\r\n//     throw new Error('请选择有效的.torrent文件');\r\n//   }\r\n\r\n//   // 2. 构建FormData\r\n//   const formData = new FormData();\r\n//   formData.append('file', torrentFile);\r\n  \r\n//   // 确保JSON内容使用正确的Content-Type\r\n//   const metadataBlob = new Blob(\r\n//     [JSON.stringify(torrentData)], \r\n//     { type: 'application/json' }\r\n//   );\r\n//   formData.append('body', metadataBlob);\r\n\r\n//   // 3. 获取认证token（根据你的实际存储方式调整）\r\n//   const token = localStorage.getItem('token') || '';\r\n\r\n//   try {\r\n//     const response = await api.post('/api/torrents', formData, {\r\n//       headers: {\r\n//         'Authorization': `Bearer ${token}`,\r\n//       },\r\n//       onUploadProgress: (progressEvent) => {\r\n//         if (onProgress && progressEvent.total) {\r\n//           const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);\r\n//           onProgress(percent);\r\n//         }\r\n//       }\r\n//     });\r\n\r\n//     return response.data;\r\n//   } catch (error) {\r\n//     console.error('上传失败:', error);\r\n    \r\n//     // 增强错误处理\r\n//     let errorMessage = '上传失败';\r\n//     if (error.response) {\r\n//       errorMessage = error.response.data?.message || \r\n//                      `服务器错误: ${error.response.status}`;\r\n//     } else if (error.request) {\r\n//       errorMessage = '网络错误，请检查连接';\r\n//     }\r\n\r\n//     throw new Error(errorMessage);\r\n//   }\r\n// };\r\n\r\nexport const searchTorrents = (keyword, page = 1, size = 5) => {\r\n  return api.get('/torrent/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","// src/api/helpPost.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\nexport const createHelpPost = (title, content, authorId, selectedImage) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', title);\r\n  formData.append('content', content);\r\n  formData.append('authorId', authorId);\r\n  \r\n  // 如果有图片，添加到 FormData\r\n  if (selectedImage) {\r\n    formData.append('image', selectedImage);\r\n  }\r\n\r\n  return api.post('/help/posts', formData);\r\n};\r\n\r\nexport const getHelpPosts = (page = 1, size = 5) => {\r\n  return api.get('/help/posts', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getHelpPostDetail = (postId) => {\r\n  return api.get(`/help/posts/${postId}`);\r\n};\r\n\r\nexport const likeHelpPost = (postId, data) => {\r\n  return api.post(`/help/posts/${postId}/like`, null, {\r\n    params: data\r\n  });\r\n};\r\n\r\nexport const addHelpPostComment = (postId, commentData) => {\r\n  \r\n\r\n  return api.post(`/help/posts/${postId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteHelpPost = (postId, authorId) => {\r\n  return api.delete(`/help/posts/${postId}`, {\r\n    params: { authorId }\r\n  });\r\n};\r\n\r\n\r\nexport const searchHelpPosts = (keyword, page = 1, size = 5) => {\r\n  return api.get('/help/posts/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","// src/api/requestPost.js\r\nimport { api } from './auth'; // 复用已有的axios实例\r\n\r\nexport const createRequestPost = (title, content, authorId, selectedImage) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', title);\r\n  formData.append('content', content);\r\n  formData.append('authorId', authorId);\r\n  \r\n  // 如果有图片，添加到 FormData\r\n  if (selectedImage) {\r\n    formData.append('image', selectedImage);\r\n  }\r\n\r\n  return api.post('/request/posts', formData);\r\n};\r\n\r\nexport const getRequestPosts = (page = 1, size = 5) => {\r\n  return api.get('/request/posts', {\r\n    params: { page, size }\r\n  });\r\n};\r\n\r\nexport const getRequestPostDetail = (postId) => {\r\n  return api.get(`/request/posts/${postId}`);\r\n};\r\n\r\nexport const likeRequestPost = (postId, data) => {\r\n  return api.post(`/request/posts/${postId}/like`, null, {\r\n    params: data\r\n  });\r\n};\r\n\r\nexport const addRequestPostComment = (postId, commentData) => {\r\n  \r\n\r\n  return api.post(`/request/posts/${postId}/comments`, commentData);\r\n};\r\n\r\nexport const deleteRequestPost = (postId, authorId) => {\r\n  return api.delete(`/request/posts/${postId}`, {\r\n    params: { authorId }\r\n  });\r\n};\r\n\r\n\r\nexport const searchRequestPosts = (keyword, page = 1, size = 5) => {\r\n  return api.get('/request/posts/search', {\r\n    params: { keyword, page, size }\r\n  });\r\n};","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import React from 'react';\nexport const AppConfigContext = /*#__PURE__*/React.createContext({});\nconst AppContext = /*#__PURE__*/React.createContext({\n  message: {},\n  notification: {},\n  modal: {}\n});\nexport default AppContext;","import * as React from 'react';\nexport const defaultPrefixCls = 'ant';\nexport const defaultIconPrefixCls = 'anticon';\nexport const Variants = ['outlined', 'borderless', 'filled', 'underlined'];\nconst defaultGetPrefixCls = (suffixCls, customizePrefixCls) => {\n  if (customizePrefixCls) {\n    return customizePrefixCls;\n  }\n  return suffixCls ? `${defaultPrefixCls}-${suffixCls}` : defaultPrefixCls;\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will cause circular dependency.\nexport const ConfigContext = /*#__PURE__*/React.createContext({\n  // We provide a default function for Context without provider\n  getPrefixCls: defaultGetPrefixCls,\n  iconPrefixCls: defaultIconPrefixCls\n});\nexport const {\n  Consumer: ConfigConsumer\n} = ConfigContext;\nconst EMPTY_OBJECT = {};\n/**\n * Get ConfigProvider configured component props.\n * This help to reduce bundle size for saving `?.` operator.\n * Do not use as `useMemo` deps since we do not cache the object here.\n *\n * NOTE: not refactor this with `useMemo` since memo will cost another memory space,\n * which will waste both compare calculation & memory.\n */\nexport function useComponentConfig(propName) {\n  const context = React.useContext(ConfigContext);\n  const {\n    getPrefixCls,\n    direction,\n    getPopupContainer\n  } = context;\n  const propValue = context[propName];\n  return Object.assign(Object.assign({\n    classNames: EMPTY_OBJECT,\n    styles: EMPTY_OBJECT\n  }, propValue), {\n    getPrefixCls,\n    direction,\n    getPopupContainer\n  });\n}","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nexport { _iterableToArrayLimit as default };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","export default function canUseDom() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport canUseDom from \"./canUseDom\";\nimport contains from \"./contains\";\nvar APPEND_ORDER = 'data-rc-order';\nvar APPEND_PRIORITY = 'data-rc-priority';\nvar MARK_KEY = \"rc-util-key\";\nvar containerCache = new Map();\nfunction getMark() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n    mark = _ref.mark;\n  if (mark) {\n    return mark.startsWith('data-') ? mark : \"data-\".concat(mark);\n  }\n  return MARK_KEY;\n}\nfunction getContainer(option) {\n  if (option.attachTo) {\n    return option.attachTo;\n  }\n  var head = document.querySelector('head');\n  return head || document.body;\n}\nfunction getOrder(prepend) {\n  if (prepend === 'queue') {\n    return 'prependQueue';\n  }\n  return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n  return Array.from((containerCache.get(container) || container).children).filter(function (node) {\n    return node.tagName === 'STYLE';\n  });\n}\nexport function injectCSS(css) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (!canUseDom()) {\n    return null;\n  }\n  var csp = option.csp,\n    prepend = option.prepend,\n    _option$priority = option.priority,\n    priority = _option$priority === void 0 ? 0 : _option$priority;\n  var mergedOrder = getOrder(prepend);\n  var isPrependQueue = mergedOrder === 'prependQueue';\n  var styleNode = document.createElement('style');\n  styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n  if (isPrependQueue && priority) {\n    styleNode.setAttribute(APPEND_PRIORITY, \"\".concat(priority));\n  }\n  if (csp !== null && csp !== void 0 && csp.nonce) {\n    styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;\n  }\n  styleNode.innerHTML = css;\n  var container = getContainer(option);\n  var firstChild = container.firstChild;\n  if (prepend) {\n    // If is queue `prepend`, it will prepend first style and then append rest style\n    if (isPrependQueue) {\n      var existStyle = (option.styles || findStyles(container)).filter(function (node) {\n        // Ignore style which not injected by rc-util with prepend\n        if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n          return false;\n        }\n\n        // Ignore style which priority less then new style\n        var nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n        return priority >= nodePriority;\n      });\n      if (existStyle.length) {\n        container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n        return styleNode;\n      }\n    }\n\n    // Use `insertBefore` as `prepend`\n    container.insertBefore(styleNode, firstChild);\n  } else {\n    container.appendChild(styleNode);\n  }\n  return styleNode;\n}\nfunction findExistNode(key) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var container = getContainer(option);\n  return (option.styles || findStyles(container)).find(function (node) {\n    return node.getAttribute(getMark(option)) === key;\n  });\n}\nexport function removeCSS(key) {\n  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var existNode = findExistNode(key, option);\n  if (existNode) {\n    var container = getContainer(option);\n    container.removeChild(existNode);\n  }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n  var cachedRealContainer = containerCache.get(container);\n\n  // Find real container when not cached or cached container removed\n  if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n    var placeholderStyle = injectCSS('', option);\n    var parentNode = placeholderStyle.parentNode;\n    containerCache.set(container, parentNode);\n    container.removeChild(placeholderStyle);\n  }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nexport function clearContainerCache() {\n  containerCache.clear();\n}\nexport function updateCSS(css, key) {\n  var originOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var container = getContainer(originOption);\n  var styles = findStyles(container);\n  var option = _objectSpread(_objectSpread({}, originOption), {}, {\n    styles: styles\n  });\n\n  // Sync real parent\n  syncRealContainer(container, option);\n  var existNode = findExistNode(key, option);\n  if (existNode) {\n    var _option$csp, _option$csp2;\n    if ((_option$csp = option.csp) !== null && _option$csp !== void 0 && _option$csp.nonce && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {\n      var _option$csp3;\n      existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;\n    }\n    if (existNode.innerHTML !== css) {\n      existNode.innerHTML = css;\n    }\n    return existNode;\n  }\n  var newNode = injectCSS(css, option);\n  newNode.setAttribute(getMark(option), key);\n  return newNode;\n}","export default function contains(root, n) {\n  if (!root) {\n    return false;\n  }\n\n  // Use native if support\n  if (root.contains) {\n    return root.contains(n);\n  }\n\n  // `document.contains` not support with IE11\n  var node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}","import * as React from 'react';\nexport default function useMemo(getValue, condition, shouldUpdate) {\n  var cacheRef = React.useRef({});\n  if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {\n    cacheRef.current.value = getValue();\n    cacheRef.current.condition = condition;\n  }\n  return cacheRef.current.value;\n}","/* eslint-disable no-console */\nvar warned = {};\nvar preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nexport var preMessage = function preMessage(fn) {\n  preWarningFns.push(fn);\n};\n\n/**\n * Warning if condition not match.\n * @param valid Condition\n * @param message Warning message\n * @example\n * ```js\n * warning(false, 'some error'); // print some error\n * warning(true, 'some error'); // print nothing\n * warning(1 === 2, 'some error'); // print some error\n * ```\n */\nexport function warning(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'warning');\n    }, message);\n    if (finalMessage) {\n      console.error(\"Warning: \".concat(finalMessage));\n    }\n  }\n}\n\n/** @see Similar to {@link warning} */\nexport function note(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'note');\n    }, message);\n    if (finalMessage) {\n      console.warn(\"Note: \".concat(finalMessage));\n    }\n  }\n}\nexport function resetWarned() {\n  warned = {};\n}\nexport function call(method, valid, message) {\n  if (!valid && !warned[message]) {\n    method(false, message);\n    warned[message] = true;\n  }\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function warningOnce(valid, message) {\n  call(warning, valid, message);\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function noteOnce(valid, message) {\n  call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\nexport default warningOnce;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2) {\n  var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n  var refSet = new Set();\n  function deepEqual(a, b) {\n    var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var circular = refSet.has(a);\n    warning(!circular, 'Warning: There may be circular references');\n    if (circular) {\n      return false;\n    }\n    if (a === b) {\n      return true;\n    }\n    if (shallow && level > 1) {\n      return false;\n    }\n    refSet.add(a);\n    var newLevel = level + 1;\n    if (Array.isArray(a)) {\n      if (!Array.isArray(b) || a.length !== b.length) {\n        return false;\n      }\n      for (var i = 0; i < a.length; i++) {\n        if (!deepEqual(a[i], b[i], newLevel)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n      var keys = Object.keys(a);\n      if (keys.length !== Object.keys(b).length) {\n        return false;\n      }\n      return keys.every(function (key) {\n        return deepEqual(a[key], b[key], newLevel);\n      });\n    }\n    // other\n    return false;\n  }\n  return deepEqual(obj1, obj2);\n}\nexport default isEqual;","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// [times, realValue]\n\nvar SPLIT = '%';\n\n/** Connect key with `SPLIT` */\nexport function pathKey(keys) {\n  return keys.join(SPLIT);\n}\nvar Entity = /*#__PURE__*/function () {\n  function Entity(instanceId) {\n    _classCallCheck(this, Entity);\n    _defineProperty(this, \"instanceId\", void 0);\n    /** @private Internal cache map. Do not access this directly */\n    _defineProperty(this, \"cache\", new Map());\n    this.instanceId = instanceId;\n  }\n  _createClass(Entity, [{\n    key: \"get\",\n    value: function get(keys) {\n      return this.opGet(pathKey(keys));\n    }\n\n    /** A fast get cache with `get` concat. */\n  }, {\n    key: \"opGet\",\n    value: function opGet(keyPathStr) {\n      return this.cache.get(keyPathStr) || null;\n    }\n  }, {\n    key: \"update\",\n    value: function update(keys, valueFn) {\n      return this.opUpdate(pathKey(keys), valueFn);\n    }\n\n    /** A fast get cache with `get` concat. */\n  }, {\n    key: \"opUpdate\",\n    value: function opUpdate(keyPathStr, valueFn) {\n      var prevValue = this.cache.get(keyPathStr);\n      var nextValue = valueFn(prevValue);\n      if (nextValue === null) {\n        this.cache.delete(keyPathStr);\n      } else {\n        this.cache.set(keyPathStr, nextValue);\n      }\n    }\n  }]);\n  return Entity;\n}();\nexport default Entity;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport * as React from 'react';\nimport CacheEntity from \"./Cache\";\nexport var ATTR_TOKEN = 'data-token-hash';\nexport var ATTR_MARK = 'data-css-hash';\nexport var ATTR_CACHE_PATH = 'data-cache-path';\n\n// Mark css-in-js instance in style element\nexport var CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\nexport function createCache() {\n  var cssinjsInstanceId = Math.random().toString(12).slice(2);\n\n  // Tricky SSR: Move all inline style to the head.\n  // PS: We do not recommend tricky mode.\n  if (typeof document !== 'undefined' && document.head && document.body) {\n    var styles = document.body.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\")) || [];\n    var firstChild = document.head.firstChild;\n    Array.from(styles).forEach(function (style) {\n      style[CSS_IN_JS_INSTANCE] = style[CSS_IN_JS_INSTANCE] || cssinjsInstanceId;\n\n      // Not force move if no head\n      if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n        document.head.insertBefore(style, firstChild);\n      }\n    });\n\n    // Deduplicate of moved styles\n    var styleHash = {};\n    Array.from(document.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\"))).forEach(function (style) {\n      var hash = style.getAttribute(ATTR_MARK);\n      if (styleHash[hash]) {\n        if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n          var _style$parentNode;\n          (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n        }\n      } else {\n        styleHash[hash] = true;\n      }\n    });\n  }\n  return new CacheEntity(cssinjsInstanceId);\n}\nvar StyleContext = /*#__PURE__*/React.createContext({\n  hashPriority: 'low',\n  cache: createCache(),\n  defaultCache: true\n});\nexport var StyleProvider = function StyleProvider(props) {\n  var children = props.children,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var parentContext = React.useContext(StyleContext);\n  var context = useMemo(function () {\n    var mergedContext = _objectSpread({}, parentContext);\n    Object.keys(restProps).forEach(function (key) {\n      var value = restProps[key];\n      if (restProps[key] !== undefined) {\n        mergedContext[key] = value;\n      }\n    });\n    var cache = restProps.cache;\n    mergedContext.cache = mergedContext.cache || createCache();\n    mergedContext.defaultCache = !cache && parentContext.defaultCache;\n    return mergedContext;\n  }, [parentContext, restProps], function (prev, next) {\n    return !isEqual(prev[0], next[0], true) || !isEqual(prev[1], next[1], true);\n  });\n  return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n    value: context\n  }, children);\n};\nexport default StyleContext;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return \"\".concat(value).concat(CALC_UNIT);\n  }\n  return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(CSSCalculator, _AbstractCalculator);\n  var _super = _createSuper(CSSCalculator);\n  function CSSCalculator(num, unitlessCssVar) {\n    var _this;\n    _classCallCheck(this, CSSCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", '');\n    _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n    var numType = _typeof(num);\n    _this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      _this.result = \"(\".concat(num.result, \")\");\n    } else if (numType === 'number') {\n      _this.result = unit(num);\n    } else if (numType === 'string') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(CSSCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" * \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" / \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"getResult\",\n    value: function getResult(force) {\n      return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal(options) {\n      var _this2 = this;\n      var _ref = options || {},\n        cssUnit = _ref.unit;\n      var mergedUnit = true;\n      if (typeof cssUnit === 'boolean') {\n        mergedUnit = cssUnit;\n      } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n        return _this2.result.includes(cssVar);\n      })) {\n        mergedUnit = false;\n      }\n      this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n      if (typeof this.lowPriority !== 'undefined') {\n        return \"calc(\".concat(this.result, \")\");\n      }\n      return this.result;\n    }\n  }]);\n  return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// ================================== Cache ==================================\n\nexport function sameDerivativeOption(left, right) {\n  if (left.length !== right.length) {\n    return false;\n  }\n  for (var i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nvar ThemeCache = /*#__PURE__*/function () {\n  function ThemeCache() {\n    _classCallCheck(this, ThemeCache);\n    _defineProperty(this, \"cache\", void 0);\n    _defineProperty(this, \"keys\", void 0);\n    _defineProperty(this, \"cacheCallTimes\", void 0);\n    this.cache = new Map();\n    this.keys = [];\n    this.cacheCallTimes = 0;\n  }\n  _createClass(ThemeCache, [{\n    key: \"size\",\n    value: function size() {\n      return this.keys.length;\n    }\n  }, {\n    key: \"internalGet\",\n    value: function internalGet(derivativeOption) {\n      var _cache2, _cache3;\n      var updateCallTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var cache = {\n        map: this.cache\n      };\n      derivativeOption.forEach(function (derivative) {\n        if (!cache) {\n          cache = undefined;\n        } else {\n          var _cache;\n          cache = (_cache = cache) === null || _cache === void 0 || (_cache = _cache.map) === null || _cache === void 0 ? void 0 : _cache.get(derivative);\n        }\n      });\n      if ((_cache2 = cache) !== null && _cache2 !== void 0 && _cache2.value && updateCallTimes) {\n        cache.value[1] = this.cacheCallTimes++;\n      }\n      return (_cache3 = cache) === null || _cache3 === void 0 ? void 0 : _cache3.value;\n    }\n  }, {\n    key: \"get\",\n    value: function get(derivativeOption) {\n      var _this$internalGet;\n      return (_this$internalGet = this.internalGet(derivativeOption, true)) === null || _this$internalGet === void 0 ? void 0 : _this$internalGet[0];\n    }\n  }, {\n    key: \"has\",\n    value: function has(derivativeOption) {\n      return !!this.internalGet(derivativeOption);\n    }\n  }, {\n    key: \"set\",\n    value: function set(derivativeOption, value) {\n      var _this = this;\n      // New cache\n      if (!this.has(derivativeOption)) {\n        if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) {\n          var _this$keys$reduce = this.keys.reduce(function (result, key) {\n              var _result = _slicedToArray(result, 2),\n                callTimes = _result[1];\n              if (_this.internalGet(key)[1] < callTimes) {\n                return [key, _this.internalGet(key)[1]];\n              }\n              return result;\n            }, [this.keys[0], this.cacheCallTimes]),\n            _this$keys$reduce2 = _slicedToArray(_this$keys$reduce, 1),\n            targetKey = _this$keys$reduce2[0];\n          this.delete(targetKey);\n        }\n        this.keys.push(derivativeOption);\n      }\n      var cache = this.cache;\n      derivativeOption.forEach(function (derivative, index) {\n        if (index === derivativeOption.length - 1) {\n          cache.set(derivative, {\n            value: [value, _this.cacheCallTimes++]\n          });\n        } else {\n          var cacheValue = cache.get(derivative);\n          if (!cacheValue) {\n            cache.set(derivative, {\n              map: new Map()\n            });\n          } else if (!cacheValue.map) {\n            cacheValue.map = new Map();\n          }\n          cache = cache.get(derivative).map;\n        }\n      });\n    }\n  }, {\n    key: \"deleteByPath\",\n    value: function deleteByPath(currentCache, derivatives) {\n      var cache = currentCache.get(derivatives[0]);\n      if (derivatives.length === 1) {\n        var _cache$value;\n        if (!cache.map) {\n          currentCache.delete(derivatives[0]);\n        } else {\n          currentCache.set(derivatives[0], {\n            map: cache.map\n          });\n        }\n        return (_cache$value = cache.value) === null || _cache$value === void 0 ? void 0 : _cache$value[0];\n      }\n      var result = this.deleteByPath(cache.map, derivatives.slice(1));\n      if ((!cache.map || cache.map.size === 0) && !cache.value) {\n        currentCache.delete(derivatives[0]);\n      }\n      return result;\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(derivativeOption) {\n      // If cache exists\n      if (this.has(derivativeOption)) {\n        this.keys = this.keys.filter(function (item) {\n          return !sameDerivativeOption(item, derivativeOption);\n        });\n        return this.deleteByPath(this.cache, derivativeOption);\n      }\n      return undefined;\n    }\n  }]);\n  return ThemeCache;\n}();\n_defineProperty(ThemeCache, \"MAX_CACHE_SIZE\", 20);\n_defineProperty(ThemeCache, \"MAX_CACHE_OFFSET\", 5);\nexport { ThemeCache as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { warning } from \"rc-util/es/warning\";\nvar uuid = 0;\n\n/**\n * Theme with algorithms to derive tokens from design tokens.\n * Use `createTheme` first which will help to manage the theme instance cache.\n */\nvar Theme = /*#__PURE__*/function () {\n  function Theme(derivatives) {\n    _classCallCheck(this, Theme);\n    _defineProperty(this, \"derivatives\", void 0);\n    _defineProperty(this, \"id\", void 0);\n    this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];\n    this.id = uuid;\n    if (derivatives.length === 0) {\n      warning(derivatives.length > 0, '[Ant Design CSS-in-JS] Theme should have at least one derivative function.');\n    }\n    uuid += 1;\n  }\n  _createClass(Theme, [{\n    key: \"getDerivativeToken\",\n    value: function getDerivativeToken(token) {\n      return this.derivatives.reduce(function (result, derivative) {\n        return derivative(token, result);\n      }, undefined);\n    }\n  }]);\n  return Theme;\n}();\nexport { Theme as default };","import ThemeCache from \"./ThemeCache\";\nimport Theme from \"./Theme\";\nvar cacheThemes = new ThemeCache();\n\n/**\n * Same as new Theme, but will always return same one if `derivative` not changed.\n */\nexport default function createTheme(derivatives) {\n  var derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives];\n  // Create new theme if not exist\n  if (!cacheThemes.has(derivativeArr)) {\n    cacheThemes.set(derivativeArr, new Theme(derivativeArr));\n  }\n\n  // Get theme from cache and return\n  return cacheThemes.get(derivativeArr);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { ATTR_MARK, ATTR_TOKEN } from \"../StyleContext\";\nimport { Theme } from \"../theme\";\n\n// Create a cache for memo concat\n\nvar resultCache = new WeakMap();\nvar RESULT_VALUE = {};\nexport function memoResult(callback, deps) {\n  var current = resultCache;\n  for (var i = 0; i < deps.length; i += 1) {\n    var dep = deps[i];\n    if (!current.has(dep)) {\n      current.set(dep, new WeakMap());\n    }\n    current = current.get(dep);\n  }\n  if (!current.has(RESULT_VALUE)) {\n    current.set(RESULT_VALUE, callback());\n  }\n  return current.get(RESULT_VALUE);\n}\n\n// Create a cache here to avoid always loop generate\nvar flattenTokenCache = new WeakMap();\n\n/**\n * Flatten token to string, this will auto cache the result when token not change\n */\nexport function flattenToken(token) {\n  var str = flattenTokenCache.get(token) || '';\n  if (!str) {\n    Object.keys(token).forEach(function (key) {\n      var value = token[key];\n      str += key;\n      if (value instanceof Theme) {\n        str += value.id;\n      } else if (value && _typeof(value) === 'object') {\n        str += flattenToken(value);\n      } else {\n        str += value;\n      }\n    });\n\n    // https://github.com/ant-design/ant-design/issues/48386\n    // Should hash the string to avoid style tag name too long\n    str = hash(str);\n\n    // Put in cache\n    flattenTokenCache.set(token, str);\n  }\n  return str;\n}\n\n/**\n * Convert derivative token to key string\n */\nexport function token2key(token, salt) {\n  return hash(\"\".concat(salt, \"_\").concat(flattenToken(token)));\n}\nvar randomSelectorKey = \"random-\".concat(Date.now(), \"-\").concat(Math.random()).replace(/\\./g, '');\n\n// Magic `content` for detect selector support\nvar checkContent = '_bAmBoO_';\nfunction supportSelector(styleStr, handleElement, supportCheck) {\n  if (canUseDom()) {\n    var _getComputedStyle$con, _ele$parentNode;\n    updateCSS(styleStr, randomSelectorKey);\n    var _ele = document.createElement('div');\n    _ele.style.position = 'fixed';\n    _ele.style.left = '0';\n    _ele.style.top = '0';\n    handleElement === null || handleElement === void 0 || handleElement(_ele);\n    document.body.appendChild(_ele);\n    if (process.env.NODE_ENV !== 'production') {\n      _ele.innerHTML = 'Test';\n      _ele.style.zIndex = '9999999';\n    }\n    var support = supportCheck ? supportCheck(_ele) : (_getComputedStyle$con = getComputedStyle(_ele).content) === null || _getComputedStyle$con === void 0 ? void 0 : _getComputedStyle$con.includes(checkContent);\n    (_ele$parentNode = _ele.parentNode) === null || _ele$parentNode === void 0 || _ele$parentNode.removeChild(_ele);\n    removeCSS(randomSelectorKey);\n    return support;\n  }\n  return false;\n}\nvar canLayer = undefined;\nexport function supportLayer() {\n  if (canLayer === undefined) {\n    canLayer = supportSelector(\"@layer \".concat(randomSelectorKey, \" { .\").concat(randomSelectorKey, \" { content: \\\"\").concat(checkContent, \"\\\"!important; } }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canLayer;\n}\nvar canWhere = undefined;\nexport function supportWhere() {\n  if (canWhere === undefined) {\n    canWhere = supportSelector(\":where(.\".concat(randomSelectorKey, \") { content: \\\"\").concat(checkContent, \"\\\"!important; }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canWhere;\n}\nvar canLogic = undefined;\nexport function supportLogicProps() {\n  if (canLogic === undefined) {\n    canLogic = supportSelector(\".\".concat(randomSelectorKey, \" { inset-block: 93px !important; }\"), function (ele) {\n      ele.className = randomSelectorKey;\n    }, function (ele) {\n      return getComputedStyle(ele).bottom === '93px';\n    });\n  }\n  return canLogic;\n}\nexport var isClientSide = canUseDom();\nexport function unit(num) {\n  if (typeof num === 'number') {\n    return \"\".concat(num, \"px\");\n  }\n  return num;\n}\nexport function toStyleStr(style, tokenKey, styleId) {\n  var _objectSpread2;\n  var customizeAttrs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var plain = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n  if (plain) {\n    return style;\n  }\n  var attrs = _objectSpread(_objectSpread({}, customizeAttrs), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, ATTR_TOKEN, tokenKey), _defineProperty(_objectSpread2, ATTR_MARK, styleId), _objectSpread2));\n  var attrStr = Object.keys(attrs).map(function (attr) {\n    var val = attrs[attr];\n    return val ? \"\".concat(attr, \"=\\\"\").concat(val, \"\\\"\") : null;\n  }).filter(function (v) {\n    return v;\n  }).join(' ');\n  return \"<style \".concat(attrStr, \">\").concat(style, \"</style>\");\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nexport var token2CSSVar = function token2CSSVar(token) {\n  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return \"--\".concat(prefix ? \"\".concat(prefix, \"-\") : '').concat(token).replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1-$2').replace(/([a-z])([A-Z0-9])/g, '$1-$2').toLowerCase();\n};\nexport var serializeCSSVar = function serializeCSSVar(cssVars, hashId, options) {\n  if (!Object.keys(cssVars).length) {\n    return '';\n  }\n  return \".\".concat(hashId).concat(options !== null && options !== void 0 && options.scope ? \".\".concat(options.scope) : '', \"{\").concat(Object.entries(cssVars).map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      key = _ref2[0],\n      value = _ref2[1];\n    return \"\".concat(key, \":\").concat(value, \";\");\n  }).join(''), \"}\");\n};\nexport var transformToken = function transformToken(token, themeKey, config) {\n  var cssVars = {};\n  var result = {};\n  Object.entries(token).forEach(function (_ref3) {\n    var _config$preserve, _config$ignore;\n    var _ref4 = _slicedToArray(_ref3, 2),\n      key = _ref4[0],\n      value = _ref4[1];\n    if (config !== null && config !== void 0 && (_config$preserve = config.preserve) !== null && _config$preserve !== void 0 && _config$preserve[key]) {\n      result[key] = value;\n    } else if ((typeof value === 'string' || typeof value === 'number') && !(config !== null && config !== void 0 && (_config$ignore = config.ignore) !== null && _config$ignore !== void 0 && _config$ignore[key])) {\n      var _config$unitless;\n      var cssVar = token2CSSVar(key, config === null || config === void 0 ? void 0 : config.prefix);\n      cssVars[cssVar] = typeof value === 'number' && !(config !== null && config !== void 0 && (_config$unitless = config.unitless) !== null && _config$unitless !== void 0 && _config$unitless[key]) ? \"\".concat(value, \"px\") : String(value);\n      result[key] = \"var(\".concat(cssVar, \")\");\n    }\n  });\n  return [result, serializeCSSVar(cssVars, themeKey, {\n    scope: config === null || config === void 0 ? void 0 : config.scope\n  })];\n};","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nvar useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nvar useLayoutEffect = function useLayoutEffect(callback, deps) {\n  var firstMountRef = React.useRef(true);\n  useInternalLayoutEffect(function () {\n    return callback(firstMountRef.current);\n  }, deps);\n\n  // We tell react that first mount has passed\n  useInternalLayoutEffect(function () {\n    firstMountRef.current = false;\n    return function () {\n      firstMountRef.current = true;\n    };\n  }, []);\n};\nexport var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {\n  useLayoutEffect(function (firstMount) {\n    if (!firstMount) {\n      return callback();\n    }\n  }, deps);\n};\nexport default useLayoutEffect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// import canUseDom from 'rc-util/lib/Dom/canUseDom';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\n\n// We need fully clone React function here\n// to avoid webpack warning React 17 do not export `useId`\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n/**\n * Polyfill `useInsertionEffect` for React < 18\n * @param renderEffect will be executed in `useMemo`, and do not have callback\n * @param effect will be executed in `useLayoutEffect`\n * @param deps\n */\nvar useInsertionEffectPolyfill = function useInsertionEffectPolyfill(renderEffect, effect, deps) {\n  React.useMemo(renderEffect, deps);\n  useLayoutEffect(function () {\n    return effect(true);\n  }, deps);\n};\n\n/**\n * Compatible `useInsertionEffect`\n * will use `useInsertionEffect` if React version >= 18,\n * otherwise use `useInsertionEffectPolyfill`.\n */\nvar useCompatibleInsertionEffect = useInsertionEffect ? function (renderEffect, effect, deps) {\n  return useInsertionEffect(function () {\n    renderEffect();\n    return effect();\n  }, deps);\n} : useInsertionEffectPolyfill;\nexport default useCompatibleInsertionEffect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from \"rc-util/es/warning\";\nimport * as React from 'react';\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n\n// DO NOT register functions in useEffect cleanup function, or functions that registered will never be called.\nvar useCleanupRegister = function useCleanupRegister(deps) {\n  var effectCleanups = [];\n  var cleanupFlag = false;\n  function register(fn) {\n    if (cleanupFlag) {\n      if (process.env.NODE_ENV !== 'production') {\n        warning(false, '[Ant Design CSS-in-JS] You are registering a cleanup function after unmount, which will not have any effect.');\n      }\n      return;\n    }\n    effectCleanups.push(fn);\n  }\n  React.useEffect(function () {\n    // Compatible with strict mode\n    cleanupFlag = false;\n    return function () {\n      cleanupFlag = true;\n      if (effectCleanups.length) {\n        effectCleanups.forEach(function (fn) {\n          return fn();\n        });\n      }\n    };\n  }, deps);\n  return register;\n};\nvar useRun = function useRun() {\n  return function (fn) {\n    fn();\n  };\n};\n\n// Only enable register in React 18\nvar useEffectCleanupRegister = typeof useInsertionEffect !== 'undefined' ? useCleanupRegister : useRun;\nexport default useEffectCleanupRegister;","function useProdHMR() {\n  return false;\n}\nvar webpackHMR = false;\nfunction useDevHMR() {\n  return webpackHMR;\n}\nexport default process.env.NODE_ENV === 'production' ? useProdHMR : useDevHMR;\n\n// Webpack `module.hot.accept` do not support any deps update trigger\n// We have to hack handler to force mark as HRM\nif (process.env.NODE_ENV !== 'production' && typeof module !== 'undefined' && module && module.hot && typeof window !== 'undefined') {\n  // Use `globalThis` first, and `window` for older browsers\n  // const win = globalThis as any;\n  var win = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : null;\n  if (win && typeof win.webpackHotUpdate === 'function') {\n    var originWebpackHotUpdate = win.webpackHotUpdate;\n    win.webpackHotUpdate = function () {\n      webpackHMR = true;\n      setTimeout(function () {\n        webpackHMR = false;\n      }, 0);\n      return originWebpackHotUpdate.apply(void 0, arguments);\n    };\n  }\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { pathKey } from \"../Cache\";\nimport StyleContext from \"../StyleContext\";\nimport useCompatibleInsertionEffect from \"./useCompatibleInsertionEffect\";\nimport useEffectCleanupRegister from \"./useEffectCleanupRegister\";\nimport useHMR from \"./useHMR\";\nexport default function useGlobalCache(prefix, keyPath, cacheFn, onCacheRemove,\n// Add additional effect trigger by `useInsertionEffect`\nonCacheEffect) {\n  var _React$useContext = React.useContext(StyleContext),\n    globalCache = _React$useContext.cache;\n  var fullPath = [prefix].concat(_toConsumableArray(keyPath));\n  var fullPathStr = pathKey(fullPath);\n  var register = useEffectCleanupRegister([fullPathStr]);\n  var HMRUpdate = useHMR();\n  var buildCache = function buildCache(updater) {\n    globalCache.opUpdate(fullPathStr, function (prevCache) {\n      var _ref = prevCache || [undefined, undefined],\n        _ref2 = _slicedToArray(_ref, 2),\n        _ref2$ = _ref2[0],\n        times = _ref2$ === void 0 ? 0 : _ref2$,\n        cache = _ref2[1];\n\n      // HMR should always ignore cache since developer may change it\n      var tmpCache = cache;\n      if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n        onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(tmpCache, HMRUpdate);\n        tmpCache = null;\n      }\n      var mergedCache = tmpCache || cacheFn();\n      var data = [times, mergedCache];\n\n      // Call updater if need additional logic\n      return updater ? updater(data) : data;\n    });\n  };\n\n  // Create cache\n  React.useMemo(function () {\n    buildCache();\n  }, /* eslint-disable react-hooks/exhaustive-deps */\n  [fullPathStr]\n  /* eslint-enable */);\n\n  var cacheEntity = globalCache.opGet(fullPathStr);\n\n  // HMR clean the cache but not trigger `useMemo` again\n  // Let's fallback of this\n  // ref https://github.com/ant-design/cssinjs/issues/127\n  if (process.env.NODE_ENV !== 'production' && !cacheEntity) {\n    buildCache();\n    cacheEntity = globalCache.opGet(fullPathStr);\n  }\n  var cacheContent = cacheEntity[1];\n\n  // Remove if no need anymore\n  useCompatibleInsertionEffect(function () {\n    onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n  }, function (polyfill) {\n    // It's bad to call build again in effect.\n    // But we have to do this since StrictMode will call effect twice\n    // which will clear cache on the first time.\n    buildCache(function (_ref3) {\n      var _ref4 = _slicedToArray(_ref3, 2),\n        times = _ref4[0],\n        cache = _ref4[1];\n      if (polyfill && times === 0) {\n        onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n      }\n      return [times + 1, cache];\n    });\n    return function () {\n      globalCache.opUpdate(fullPathStr, function (prevCache) {\n        var _ref5 = prevCache || [],\n          _ref6 = _slicedToArray(_ref5, 2),\n          _ref6$ = _ref6[0],\n          times = _ref6$ === void 0 ? 0 : _ref6$,\n          cache = _ref6[1];\n        var nextCount = times - 1;\n        if (nextCount === 0) {\n          // Always remove styles in useEffect callback\n          register(function () {\n            // With polyfill, registered callback will always be called synchronously\n            // But without polyfill, it will be called in effect clean up,\n            // And by that time this cache is cleaned up.\n            if (polyfill || !globalCache.opGet(fullPathStr)) {\n              onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(cache, false);\n            }\n          });\n          return null;\n        }\n        return [times - 1, cache];\n      });\n    };\n  }, [fullPathStr]);\n  return cacheContent;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport hash from '@emotion/hash';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { flattenToken, memoResult, token2key, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar EMPTY_OVERRIDE = {};\n\n// Generate different prefix to make user selector break in production env.\n// This helps developer not to do style override directly on the hash id.\nvar hashPrefix = process.env.NODE_ENV !== 'production' ? 'css-dev-only-do-not-override' : 'css';\nvar tokenKeys = new Map();\nfunction recordCleanToken(tokenKey) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) + 1);\n}\nfunction removeStyleTags(key, instanceId) {\n  if (typeof document !== 'undefined') {\n    var styles = document.querySelectorAll(\"style[\".concat(ATTR_TOKEN, \"=\\\"\").concat(key, \"\\\"]\"));\n    styles.forEach(function (style) {\n      if (style[CSS_IN_JS_INSTANCE] === instanceId) {\n        var _style$parentNode;\n        (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n      }\n    });\n  }\n}\nvar TOKEN_THRESHOLD = 0;\n\n// Remove will check current keys first\nfunction cleanTokenStyle(tokenKey, instanceId) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) - 1);\n  var tokenKeyList = Array.from(tokenKeys.keys());\n  var cleanableKeyList = tokenKeyList.filter(function (key) {\n    var count = tokenKeys.get(key) || 0;\n    return count <= 0;\n  });\n\n  // Should keep tokens under threshold for not to insert style too often\n  if (tokenKeyList.length - cleanableKeyList.length > TOKEN_THRESHOLD) {\n    cleanableKeyList.forEach(function (key) {\n      removeStyleTags(key, instanceId);\n      tokenKeys.delete(key);\n    });\n  }\n}\nexport var getComputedToken = function getComputedToken(originToken, overrideToken, theme, format) {\n  var derivativeToken = theme.getDerivativeToken(originToken);\n\n  // Merge with override\n  var mergedDerivativeToken = _objectSpread(_objectSpread({}, derivativeToken), overrideToken);\n\n  // Format if needed\n  if (format) {\n    mergedDerivativeToken = format(mergedDerivativeToken);\n  }\n  return mergedDerivativeToken;\n};\nexport var TOKEN_PREFIX = 'token';\n/**\n * Cache theme derivative token as global shared one\n * @param theme Theme entity\n * @param tokens List of tokens, used for cache. Please do not dynamic generate object directly\n * @param option Additional config\n * @returns Call Theme.getDerivativeToken(tokenObject) to get token\n */\nexport default function useCacheToken(theme, tokens) {\n  var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _useContext = useContext(StyleContext),\n    instanceId = _useContext.cache.instanceId,\n    container = _useContext.container;\n  var _option$salt = option.salt,\n    salt = _option$salt === void 0 ? '' : _option$salt,\n    _option$override = option.override,\n    override = _option$override === void 0 ? EMPTY_OVERRIDE : _option$override,\n    formatToken = option.formatToken,\n    compute = option.getComputedToken,\n    cssVar = option.cssVar;\n\n  // Basic - We do basic cache here\n  var mergedToken = memoResult(function () {\n    return Object.assign.apply(Object, [{}].concat(_toConsumableArray(tokens)));\n  }, tokens);\n  var tokenStr = flattenToken(mergedToken);\n  var overrideTokenStr = flattenToken(override);\n  var cssVarStr = cssVar ? flattenToken(cssVar) : '';\n  var cachedToken = useGlobalCache(TOKEN_PREFIX, [salt, theme.id, tokenStr, overrideTokenStr, cssVarStr], function () {\n    var _cssVar$key;\n    var mergedDerivativeToken = compute ? compute(mergedToken, override, theme) : getComputedToken(mergedToken, override, theme, formatToken);\n\n    // Replace token value with css variables\n    var actualToken = _objectSpread({}, mergedDerivativeToken);\n    var cssVarsStr = '';\n    if (!!cssVar) {\n      var _transformToken = transformToken(mergedDerivativeToken, cssVar.key, {\n        prefix: cssVar.prefix,\n        ignore: cssVar.ignore,\n        unitless: cssVar.unitless,\n        preserve: cssVar.preserve\n      });\n      var _transformToken2 = _slicedToArray(_transformToken, 2);\n      mergedDerivativeToken = _transformToken2[0];\n      cssVarsStr = _transformToken2[1];\n    }\n\n    // Optimize for `useStyleRegister` performance\n    var tokenKey = token2key(mergedDerivativeToken, salt);\n    mergedDerivativeToken._tokenKey = tokenKey;\n    actualToken._tokenKey = token2key(actualToken, salt);\n    var themeKey = (_cssVar$key = cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) !== null && _cssVar$key !== void 0 ? _cssVar$key : tokenKey;\n    mergedDerivativeToken._themeKey = themeKey;\n    recordCleanToken(themeKey);\n    var hashId = \"\".concat(hashPrefix, \"-\").concat(hash(tokenKey));\n    mergedDerivativeToken._hashId = hashId; // Not used\n\n    return [mergedDerivativeToken, hashId, actualToken, cssVarsStr, (cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) || ''];\n  }, function (cache) {\n    // Remove token will remove all related style\n    cleanTokenStyle(cache[0]._themeKey, instanceId);\n  }, function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 4),\n      token = _ref2[0],\n      cssVarsStr = _ref2[3];\n    if (cssVar && cssVarsStr) {\n      var style = updateCSS(cssVarsStr, hash(\"css-variables-\".concat(token._themeKey)), {\n        mark: ATTR_MARK,\n        prepend: 'queue',\n        attachTo: container,\n        priority: -999\n      });\n      style[CSS_IN_JS_INSTANCE] = instanceId;\n\n      // Used for `useCacheToken` to remove on batch when token removed\n      style.setAttribute(ATTR_TOKEN, token._themeKey);\n    }\n  });\n  return cachedToken;\n}\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 5),\n    realToken = _cache[2],\n    styleStr = _cache[3],\n    cssVarKey = _cache[4];\n  var _ref3 = options || {},\n    plain = _ref3.plain;\n  if (!styleStr) {\n    return null;\n  }\n  var styleId = realToken._tokenKey;\n  var order = -999;\n\n  // ====================== Style ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n  var styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { ATTR_MARK } from \"../StyleContext\";\nexport var ATTR_CACHE_MAP = 'data-ant-cssinjs-cache-path';\n\n/**\n * This marks style from the css file.\n * Which means not exist in `<style />` tag.\n */\nexport var CSS_FILE_STYLE = '_FILE_STYLE__';\nexport function serialize(cachePathMap) {\n  return Object.keys(cachePathMap).map(function (path) {\n    var hash = cachePathMap[path];\n    return \"\".concat(path, \":\").concat(hash);\n  }).join(';');\n}\nvar cachePathMap;\nvar fromCSSFile = true;\n\n/**\n * @private Test usage only. Can save remove if no need.\n */\nexport function reset(mockCache) {\n  var fromFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  cachePathMap = mockCache;\n  fromCSSFile = fromFile;\n}\nexport function prepare() {\n  if (!cachePathMap) {\n    cachePathMap = {};\n    if (canUseDom()) {\n      var div = document.createElement('div');\n      div.className = ATTR_CACHE_MAP;\n      div.style.position = 'fixed';\n      div.style.visibility = 'hidden';\n      div.style.top = '-9999px';\n      document.body.appendChild(div);\n      var content = getComputedStyle(div).content || '';\n      content = content.replace(/^\"/, '').replace(/\"$/, '');\n\n      // Fill data\n      content.split(';').forEach(function (item) {\n        var _item$split = item.split(':'),\n          _item$split2 = _slicedToArray(_item$split, 2),\n          path = _item$split2[0],\n          hash = _item$split2[1];\n        cachePathMap[path] = hash;\n      });\n\n      // Remove inline record style\n      var inlineMapStyle = document.querySelector(\"style[\".concat(ATTR_CACHE_MAP, \"]\"));\n      if (inlineMapStyle) {\n        var _inlineMapStyle$paren;\n        fromCSSFile = false;\n        (_inlineMapStyle$paren = inlineMapStyle.parentNode) === null || _inlineMapStyle$paren === void 0 || _inlineMapStyle$paren.removeChild(inlineMapStyle);\n      }\n      document.body.removeChild(div);\n    }\n  }\n}\nexport function existPath(path) {\n  prepare();\n  return !!cachePathMap[path];\n}\nexport function getStyleAndHash(path) {\n  var hash = cachePathMap[path];\n  var styleStr = null;\n  if (hash && canUseDom()) {\n    if (fromCSSFile) {\n      styleStr = CSS_FILE_STYLE;\n    } else {\n      var _style = document.querySelector(\"style[\".concat(ATTR_MARK, \"=\\\"\").concat(cachePathMap[path], \"\\\"]\"));\n      if (_style) {\n        styleStr = _style.innerHTML;\n      } else {\n        // Clean up since not exist anymore\n        delete cachePathMap[path];\n      }\n    }\n  }\n  return [styleStr, hash];\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport * as React from 'react';\n// @ts-ignore\nimport unitless from '@emotion/unitless';\nimport { compile, serialize, stringify } from 'stylis';\nimport { contentQuotesLinter, hashedAnimationLinter } from \"../linters\";\nimport StyleContext, { ATTR_CACHE_PATH, ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { isClientSide, toStyleStr } from \"../util\";\nimport { CSS_FILE_STYLE, existPath, getStyleAndHash } from \"../util/cacheMapUtil\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar SKIP_CHECK = '_skip_check_';\nvar MULTI_VALUE = '_multi_value_';\n// ============================================================================\n// ==                                 Parser                                 ==\n// ============================================================================\n// Preprocessor style content to browser support one\nexport function normalizeStyle(styleStr) {\n  var serialized = serialize(compile(styleStr), stringify);\n  return serialized.replace(/\\{%%%\\:[^;];}/g, ';');\n}\nfunction isCompoundCSSProperty(value) {\n  return _typeof(value) === 'object' && value && (SKIP_CHECK in value || MULTI_VALUE in value);\n}\n\n// 注入 hash 值\nfunction injectSelectorHash(key, hashId, hashPriority) {\n  if (!hashId) {\n    return key;\n  }\n  var hashClassName = \".\".concat(hashId);\n  var hashSelector = hashPriority === 'low' ? \":where(\".concat(hashClassName, \")\") : hashClassName;\n\n  // 注入 hashId\n  var keys = key.split(',').map(function (k) {\n    var _firstPath$match;\n    var fullPath = k.trim().split(/\\s+/);\n\n    // 如果 Selector 第一个是 HTML Element，那我们就插到它的后面。反之，就插到最前面。\n    var firstPath = fullPath[0] || '';\n    var htmlElement = ((_firstPath$match = firstPath.match(/^\\w+/)) === null || _firstPath$match === void 0 ? void 0 : _firstPath$match[0]) || '';\n    firstPath = \"\".concat(htmlElement).concat(hashSelector).concat(firstPath.slice(htmlElement.length));\n    return [firstPath].concat(_toConsumableArray(fullPath.slice(1))).join(' ');\n  });\n  return keys.join(',');\n}\n// Parse CSSObject to style content\nexport var parseStyle = function parseStyle(interpolation) {\n  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n      root: true,\n      parentSelectors: []\n    },\n    root = _ref.root,\n    injectHash = _ref.injectHash,\n    parentSelectors = _ref.parentSelectors;\n  var hashId = config.hashId,\n    layer = config.layer,\n    path = config.path,\n    hashPriority = config.hashPriority,\n    _config$transformers = config.transformers,\n    transformers = _config$transformers === void 0 ? [] : _config$transformers,\n    _config$linters = config.linters,\n    linters = _config$linters === void 0 ? [] : _config$linters;\n  var styleStr = '';\n  var effectStyle = {};\n  function parseKeyframes(keyframes) {\n    var animationName = keyframes.getName(hashId);\n    if (!effectStyle[animationName]) {\n      var _parseStyle = parseStyle(keyframes.style, config, {\n          root: false,\n          parentSelectors: parentSelectors\n        }),\n        _parseStyle2 = _slicedToArray(_parseStyle, 1),\n        _parsedStr = _parseStyle2[0];\n      effectStyle[animationName] = \"@keyframes \".concat(keyframes.getName(hashId)).concat(_parsedStr);\n    }\n  }\n  function flattenList(list) {\n    var fullList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    list.forEach(function (item) {\n      if (Array.isArray(item)) {\n        flattenList(item, fullList);\n      } else if (item) {\n        fullList.push(item);\n      }\n    });\n    return fullList;\n  }\n  var flattenStyleList = flattenList(Array.isArray(interpolation) ? interpolation : [interpolation]);\n  flattenStyleList.forEach(function (originStyle) {\n    // Only root level can use raw string\n    var style = typeof originStyle === 'string' && !root ? {} : originStyle;\n    if (typeof style === 'string') {\n      styleStr += \"\".concat(style, \"\\n\");\n    } else if (style._keyframe) {\n      // Keyframe\n      parseKeyframes(style);\n    } else {\n      var mergedStyle = transformers.reduce(function (prev, trans) {\n        var _trans$visit;\n        return (trans === null || trans === void 0 || (_trans$visit = trans.visit) === null || _trans$visit === void 0 ? void 0 : _trans$visit.call(trans, prev)) || prev;\n      }, style);\n\n      // Normal CSSObject\n      Object.keys(mergedStyle).forEach(function (key) {\n        var value = mergedStyle[key];\n        if (_typeof(value) === 'object' && value && (key !== 'animationName' || !value._keyframe) && !isCompoundCSSProperty(value)) {\n          var subInjectHash = false;\n\n          // 当成嵌套对象来处理\n          var mergedKey = key.trim();\n          // Whether treat child as root. In most case it is false.\n          var nextRoot = false;\n\n          // 拆分多个选择器\n          if ((root || injectHash) && hashId) {\n            if (mergedKey.startsWith('@')) {\n              // 略过媒体查询，交给子节点继续插入 hashId\n              subInjectHash = true;\n            } else if (mergedKey === '&') {\n              // 抹掉 root selector 上的单个 &\n              mergedKey = injectSelectorHash('', hashId, hashPriority);\n            } else {\n              // 注入 hashId\n              mergedKey = injectSelectorHash(key, hashId, hashPriority);\n            }\n          } else if (root && !hashId && (mergedKey === '&' || mergedKey === '')) {\n            // In case of `{ '&': { a: { color: 'red' } } }` or `{ '': { a: { color: 'red' } } }` without hashId,\n            // we will get `&{a:{color:red;}}` or `{a:{color:red;}}` string for stylis to compile.\n            // But it does not conform to stylis syntax,\n            // and finally we will get `{color:red;}` as css, which is wrong.\n            // So we need to remove key in root, and treat child `{ a: { color: 'red' } }` as root.\n            mergedKey = '';\n            nextRoot = true;\n          }\n          var _parseStyle3 = parseStyle(value, config, {\n              root: nextRoot,\n              injectHash: subInjectHash,\n              parentSelectors: [].concat(_toConsumableArray(parentSelectors), [mergedKey])\n            }),\n            _parseStyle4 = _slicedToArray(_parseStyle3, 2),\n            _parsedStr2 = _parseStyle4[0],\n            childEffectStyle = _parseStyle4[1];\n          effectStyle = _objectSpread(_objectSpread({}, effectStyle), childEffectStyle);\n          styleStr += \"\".concat(mergedKey).concat(_parsedStr2);\n        } else {\n          var _value;\n          function appendStyle(cssKey, cssValue) {\n            if (process.env.NODE_ENV !== 'production' && (_typeof(value) !== 'object' || !(value !== null && value !== void 0 && value[SKIP_CHECK]))) {\n              [contentQuotesLinter, hashedAnimationLinter].concat(_toConsumableArray(linters)).forEach(function (linter) {\n                return linter(cssKey, cssValue, {\n                  path: path,\n                  hashId: hashId,\n                  parentSelectors: parentSelectors\n                });\n              });\n            }\n\n            // 如果是样式则直接插入\n            var styleName = cssKey.replace(/[A-Z]/g, function (match) {\n              return \"-\".concat(match.toLowerCase());\n            });\n\n            // Auto suffix with px\n            var formatValue = cssValue;\n            if (!unitless[cssKey] && typeof formatValue === 'number' && formatValue !== 0) {\n              formatValue = \"\".concat(formatValue, \"px\");\n            }\n\n            // handle animationName & Keyframe value\n            if (cssKey === 'animationName' && cssValue !== null && cssValue !== void 0 && cssValue._keyframe) {\n              parseKeyframes(cssValue);\n              formatValue = cssValue.getName(hashId);\n            }\n            styleStr += \"\".concat(styleName, \":\").concat(formatValue, \";\");\n          }\n          var actualValue = (_value = value === null || value === void 0 ? void 0 : value.value) !== null && _value !== void 0 ? _value : value;\n          if (_typeof(value) === 'object' && value !== null && value !== void 0 && value[MULTI_VALUE] && Array.isArray(actualValue)) {\n            actualValue.forEach(function (item) {\n              appendStyle(key, item);\n            });\n          } else {\n            appendStyle(key, actualValue);\n          }\n        }\n      });\n    }\n  });\n  if (!root) {\n    styleStr = \"{\".concat(styleStr, \"}\");\n  } else if (layer) {\n    // fixme: https://github.com/thysultan/stylis/pull/339\n    if (styleStr) {\n      styleStr = \"@layer \".concat(layer.name, \" {\").concat(styleStr, \"}\");\n    }\n    if (layer.dependencies) {\n      effectStyle[\"@layer \".concat(layer.name)] = layer.dependencies.map(function (deps) {\n        return \"@layer \".concat(deps, \", \").concat(layer.name, \";\");\n      }).join('\\n');\n    }\n  }\n  return [styleStr, effectStyle];\n};\n\n// ============================================================================\n// ==                                Register                                ==\n// ============================================================================\nexport function uniqueHash(path, styleStr) {\n  return hash(\"\".concat(path.join('%')).concat(styleStr));\n}\nfunction Empty() {\n  return null;\n}\nexport var STYLE_PREFIX = 'style';\n/**\n * Register a style to the global style sheet.\n */\nexport default function useStyleRegister(info, styleFn) {\n  var token = info.token,\n    path = info.path,\n    hashId = info.hashId,\n    layer = info.layer,\n    nonce = info.nonce,\n    clientOnly = info.clientOnly,\n    _info$order = info.order,\n    order = _info$order === void 0 ? 0 : _info$order;\n  var _React$useContext = React.useContext(StyleContext),\n    autoClear = _React$useContext.autoClear,\n    mock = _React$useContext.mock,\n    defaultCache = _React$useContext.defaultCache,\n    hashPriority = _React$useContext.hashPriority,\n    container = _React$useContext.container,\n    ssrInline = _React$useContext.ssrInline,\n    transformers = _React$useContext.transformers,\n    linters = _React$useContext.linters,\n    cache = _React$useContext.cache,\n    enableLayer = _React$useContext.layer;\n  var tokenKey = token._tokenKey;\n  var fullPath = [tokenKey];\n  if (enableLayer) {\n    fullPath.push('layer');\n  }\n  fullPath.push.apply(fullPath, _toConsumableArray(path));\n\n  // Check if need insert style\n  var isMergedClientSide = isClientSide;\n  if (process.env.NODE_ENV !== 'production' && mock !== undefined) {\n    isMergedClientSide = mock === 'client';\n  }\n  var _useGlobalCache = useGlobalCache(STYLE_PREFIX, fullPath,\n    // Create cache if needed\n    function () {\n      var cachePath = fullPath.join('|');\n\n      // Get style from SSR inline style directly\n      if (existPath(cachePath)) {\n        var _getStyleAndHash = getStyleAndHash(cachePath),\n          _getStyleAndHash2 = _slicedToArray(_getStyleAndHash, 2),\n          inlineCacheStyleStr = _getStyleAndHash2[0],\n          styleHash = _getStyleAndHash2[1];\n        if (inlineCacheStyleStr) {\n          return [inlineCacheStyleStr, tokenKey, styleHash, {}, clientOnly, order];\n        }\n      }\n\n      // Generate style\n      var styleObj = styleFn();\n      var _parseStyle5 = parseStyle(styleObj, {\n          hashId: hashId,\n          hashPriority: hashPriority,\n          layer: enableLayer ? layer : undefined,\n          path: path.join('-'),\n          transformers: transformers,\n          linters: linters\n        }),\n        _parseStyle6 = _slicedToArray(_parseStyle5, 2),\n        parsedStyle = _parseStyle6[0],\n        effectStyle = _parseStyle6[1];\n      var styleStr = normalizeStyle(parsedStyle);\n      var styleId = uniqueHash(fullPath, styleStr);\n      return [styleStr, tokenKey, styleId, effectStyle, clientOnly, order];\n    },\n    // Remove cache if no need\n    function (_ref2, fromHMR) {\n      var _ref3 = _slicedToArray(_ref2, 3),\n        styleId = _ref3[2];\n      if ((fromHMR || autoClear) && isClientSide) {\n        removeCSS(styleId, {\n          mark: ATTR_MARK\n        });\n      }\n    },\n    // Effect: Inject style here\n    function (_ref4) {\n      var _ref5 = _slicedToArray(_ref4, 4),\n        styleStr = _ref5[0],\n        _ = _ref5[1],\n        styleId = _ref5[2],\n        effectStyle = _ref5[3];\n      if (isMergedClientSide && styleStr !== CSS_FILE_STYLE) {\n        var mergedCSSConfig = {\n          mark: ATTR_MARK,\n          prepend: enableLayer ? false : 'queue',\n          attachTo: container,\n          priority: order\n        };\n        var nonceStr = typeof nonce === 'function' ? nonce() : nonce;\n        if (nonceStr) {\n          mergedCSSConfig.csp = {\n            nonce: nonceStr\n          };\n        }\n\n        // ================= Split Effect Style =================\n        // We will split effectStyle here since @layer should be at the top level\n        var effectLayerKeys = [];\n        var effectRestKeys = [];\n        Object.keys(effectStyle).forEach(function (key) {\n          if (key.startsWith('@layer')) {\n            effectLayerKeys.push(key);\n          } else {\n            effectRestKeys.push(key);\n          }\n        });\n\n        // ================= Inject Layer Style =================\n        // Inject layer style\n        effectLayerKeys.forEach(function (effectKey) {\n          updateCSS(normalizeStyle(effectStyle[effectKey]), \"_layer-\".concat(effectKey), _objectSpread(_objectSpread({}, mergedCSSConfig), {}, {\n            prepend: true\n          }));\n        });\n\n        // ==================== Inject Style ====================\n        // Inject style\n        var style = updateCSS(styleStr, styleId, mergedCSSConfig);\n        style[CSS_IN_JS_INSTANCE] = cache.instanceId;\n\n        // Used for `useCacheToken` to remove on batch when token removed\n        style.setAttribute(ATTR_TOKEN, tokenKey);\n\n        // Debug usage. Dev only\n        if (process.env.NODE_ENV !== 'production') {\n          style.setAttribute(ATTR_CACHE_PATH, fullPath.join('|'));\n        }\n\n        // ================ Inject Effect Style =================\n        // Inject client side effect style\n        effectRestKeys.forEach(function (effectKey) {\n          updateCSS(normalizeStyle(effectStyle[effectKey]), \"_effect-\".concat(effectKey), mergedCSSConfig);\n        });\n      }\n    }),\n    _useGlobalCache2 = _slicedToArray(_useGlobalCache, 3),\n    cachedStyleStr = _useGlobalCache2[0],\n    cachedTokenKey = _useGlobalCache2[1],\n    cachedStyleId = _useGlobalCache2[2];\n  return function (node) {\n    var styleNode;\n    if (!ssrInline || isMergedClientSide || !defaultCache) {\n      styleNode = /*#__PURE__*/React.createElement(Empty, null);\n    } else {\n      var _ref6;\n      styleNode = /*#__PURE__*/React.createElement(\"style\", _extends({}, (_ref6 = {}, _defineProperty(_ref6, ATTR_TOKEN, cachedTokenKey), _defineProperty(_ref6, ATTR_MARK, cachedStyleId), _ref6), {\n        dangerouslySetInnerHTML: {\n          __html: cachedStyleStr\n        }\n      }));\n    }\n    return /*#__PURE__*/React.createElement(React.Fragment, null, styleNode, node);\n  };\n}\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 6),\n    styleStr = _cache[0],\n    tokenKey = _cache[1],\n    styleId = _cache[2],\n    effectStyle = _cache[3],\n    clientOnly = _cache[4],\n    order = _cache[5];\n  var _ref7 = options || {},\n    plain = _ref7.plain;\n\n  // Skip client only style\n  if (clientOnly) {\n    return null;\n  }\n  var keyStyleText = styleStr;\n\n  // ====================== Share ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n\n  // ====================== Style ======================\n  keyStyleText = toStyleStr(styleStr, tokenKey, styleId, sharedAttrs, plain);\n\n  // =============== Create effect style ===============\n  if (effectStyle) {\n    Object.keys(effectStyle).forEach(function (effectKey) {\n      // Effect style can be reused\n      if (!effectStyles[effectKey]) {\n        effectStyles[effectKey] = true;\n        var effectStyleStr = normalizeStyle(effectStyle[effectKey]);\n        var effectStyleHTML = toStyleStr(effectStyleStr, tokenKey, \"_effect-\".concat(effectKey), sharedAttrs, plain);\n        if (effectKey.startsWith('@layer')) {\n          keyStyleText = effectStyleHTML + keyStyleText;\n        } else {\n          keyStyleText += effectStyleHTML;\n        }\n      }\n    });\n  }\n  return [order, styleId, keyStyleText];\n};","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { isClientSide, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nimport { uniqueHash } from \"./useStyleRegister\";\nexport var CSS_VAR_PREFIX = 'cssVar';\nvar useCSSVarRegister = function useCSSVarRegister(config, fn) {\n  var key = config.key,\n    prefix = config.prefix,\n    unitless = config.unitless,\n    ignore = config.ignore,\n    token = config.token,\n    _config$scope = config.scope,\n    scope = _config$scope === void 0 ? '' : _config$scope;\n  var _useContext = useContext(StyleContext),\n    instanceId = _useContext.cache.instanceId,\n    container = _useContext.container;\n  var tokenKey = token._tokenKey;\n  var stylePath = [].concat(_toConsumableArray(config.path), [key, scope, tokenKey]);\n  var cache = useGlobalCache(CSS_VAR_PREFIX, stylePath, function () {\n    var originToken = fn();\n    var _transformToken = transformToken(originToken, key, {\n        prefix: prefix,\n        unitless: unitless,\n        ignore: ignore,\n        scope: scope\n      }),\n      _transformToken2 = _slicedToArray(_transformToken, 2),\n      mergedToken = _transformToken2[0],\n      cssVarsStr = _transformToken2[1];\n    var styleId = uniqueHash(stylePath, cssVarsStr);\n    return [mergedToken, cssVarsStr, styleId, key];\n  }, function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 3),\n      styleId = _ref2[2];\n    if (isClientSide) {\n      removeCSS(styleId, {\n        mark: ATTR_MARK\n      });\n    }\n  }, function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 3),\n      cssVarsStr = _ref4[1],\n      styleId = _ref4[2];\n    if (!cssVarsStr) {\n      return;\n    }\n    var style = updateCSS(cssVarsStr, styleId, {\n      mark: ATTR_MARK,\n      prepend: 'queue',\n      attachTo: container,\n      priority: -999\n    });\n    style[CSS_IN_JS_INSTANCE] = instanceId;\n\n    // Used for `useCacheToken` to remove on batch when token removed\n    style.setAttribute(ATTR_TOKEN, key);\n  });\n  return cache;\n};\nexport var extract = function extract(cache, effectStyles, options) {\n  var _cache = _slicedToArray(cache, 4),\n    styleStr = _cache[1],\n    styleId = _cache[2],\n    cssVarKey = _cache[3];\n  var _ref5 = options || {},\n    plain = _ref5.plain;\n  if (!styleStr) {\n    return null;\n  }\n  var order = -999;\n\n  // ====================== Style ======================\n  // Used for rc-util\n  var sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': \"\".concat(order)\n  };\n  var styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};\nexport default useCSSVarRegister;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _ExtractStyleFns;\nimport { extract as tokenExtractStyle, TOKEN_PREFIX } from \"./hooks/useCacheToken\";\nimport { CSS_VAR_PREFIX, extract as cssVarExtractStyle } from \"./hooks/useCSSVarRegister\";\nimport { extract as styleExtractStyle, STYLE_PREFIX } from \"./hooks/useStyleRegister\";\nimport { toStyleStr } from \"./util\";\nimport { ATTR_CACHE_MAP, serialize as serializeCacheMap } from \"./util/cacheMapUtil\";\nvar ExtractStyleFns = (_ExtractStyleFns = {}, _defineProperty(_ExtractStyleFns, STYLE_PREFIX, styleExtractStyle), _defineProperty(_ExtractStyleFns, TOKEN_PREFIX, tokenExtractStyle), _defineProperty(_ExtractStyleFns, CSS_VAR_PREFIX, cssVarExtractStyle), _ExtractStyleFns);\nfunction isNotNull(value) {\n  return value !== null;\n}\nexport default function extractStyle(cache, options) {\n  var _ref = typeof options === 'boolean' ? {\n      plain: options\n    } : options || {},\n    _ref$plain = _ref.plain,\n    plain = _ref$plain === void 0 ? false : _ref$plain,\n    _ref$types = _ref.types,\n    types = _ref$types === void 0 ? ['style', 'token', 'cssVar'] : _ref$types;\n  var matchPrefixRegexp = new RegExp(\"^(\".concat((typeof types === 'string' ? [types] : types).join('|'), \")%\"));\n\n  // prefix with `style` is used for `useStyleRegister` to cache style context\n  var styleKeys = Array.from(cache.cache.keys()).filter(function (key) {\n    return matchPrefixRegexp.test(key);\n  });\n\n  // Common effect styles like animation\n  var effectStyles = {};\n\n  // Mapping of cachePath to style hash\n  var cachePathMap = {};\n  var styleText = '';\n  styleKeys.map(function (key) {\n    var cachePath = key.replace(matchPrefixRegexp, '').replace(/%/g, '|');\n    var _key$split = key.split('%'),\n      _key$split2 = _slicedToArray(_key$split, 1),\n      prefix = _key$split2[0];\n    var extractFn = ExtractStyleFns[prefix];\n    var extractedStyle = extractFn(cache.cache.get(key)[1], effectStyles, {\n      plain: plain\n    });\n    if (!extractedStyle) {\n      return null;\n    }\n    var _extractedStyle = _slicedToArray(extractedStyle, 3),\n      order = _extractedStyle[0],\n      styleId = _extractedStyle[1],\n      styleStr = _extractedStyle[2];\n    if (key.startsWith('style')) {\n      cachePathMap[cachePath] = styleId;\n    }\n    return [order, styleStr];\n  }).filter(isNotNull).sort(function (_ref2, _ref3) {\n    var _ref4 = _slicedToArray(_ref2, 1),\n      o1 = _ref4[0];\n    var _ref5 = _slicedToArray(_ref3, 1),\n      o2 = _ref5[0];\n    return o1 - o2;\n  }).forEach(function (_ref6) {\n    var _ref7 = _slicedToArray(_ref6, 2),\n      style = _ref7[1];\n    styleText += style;\n  });\n\n  // ==================== Fill Cache Path ====================\n  styleText += toStyleStr(\".\".concat(ATTR_CACHE_MAP, \"{content:\\\"\").concat(serializeCacheMap(cachePathMap), \"\\\";}\"), undefined, undefined, _defineProperty({}, ATTR_CACHE_MAP, ATTR_CACHE_MAP), plain);\n  return styleText;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar Keyframe = /*#__PURE__*/function () {\n  function Keyframe(name, style) {\n    _classCallCheck(this, Keyframe);\n    _defineProperty(this, \"name\", void 0);\n    _defineProperty(this, \"style\", void 0);\n    _defineProperty(this, \"_keyframe\", true);\n    this.name = name;\n    this.style = style;\n  }\n  _createClass(Keyframe, [{\n    key: \"getName\",\n    value: function getName() {\n      var hashId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return hashId ? \"\".concat(hashId, \"-\").concat(this.name) : this.name;\n    }\n  }]);\n  return Keyframe;\n}();\nexport default Keyframe;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nfunction splitValues(value) {\n  if (typeof value === 'number') {\n    return [[value], false];\n  }\n  var rawStyle = String(value).trim();\n  var importantCells = rawStyle.match(/(.*)(!important)/);\n  var splitStyle = (importantCells ? importantCells[1] : rawStyle).trim().split(/\\s+/);\n\n  // Combine styles split in brackets, like `calc(1px + 2px)`\n  var temp = [];\n  var brackets = 0;\n  return [splitStyle.reduce(function (list, item) {\n    if (item.includes('(') || item.includes(')')) {\n      var left = item.split('(').length - 1;\n      var right = item.split(')').length - 1;\n      brackets += left - right;\n    }\n    if (brackets >= 0) temp.push(item);\n    if (brackets === 0) {\n      list.push(temp.join(' '));\n      temp = [];\n    }\n    return list;\n  }, []), !!importantCells];\n}\nfunction noSplit(list) {\n  list.notSplit = true;\n  return list;\n}\nvar keyMap = {\n  // Inset\n  inset: ['top', 'right', 'bottom', 'left'],\n  insetBlock: ['top', 'bottom'],\n  insetBlockStart: ['top'],\n  insetBlockEnd: ['bottom'],\n  insetInline: ['left', 'right'],\n  insetInlineStart: ['left'],\n  insetInlineEnd: ['right'],\n  // Margin\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  marginInline: ['marginLeft', 'marginRight'],\n  marginInlineStart: ['marginLeft'],\n  marginInlineEnd: ['marginRight'],\n  // Padding\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom'],\n  paddingInline: ['paddingLeft', 'paddingRight'],\n  paddingInlineStart: ['paddingLeft'],\n  paddingInlineEnd: ['paddingRight'],\n  // Border\n  borderBlock: noSplit(['borderTop', 'borderBottom']),\n  borderBlockStart: noSplit(['borderTop']),\n  borderBlockEnd: noSplit(['borderBottom']),\n  borderInline: noSplit(['borderLeft', 'borderRight']),\n  borderInlineStart: noSplit(['borderLeft']),\n  borderInlineEnd: noSplit(['borderRight']),\n  // Border width\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'],\n  borderInlineStartWidth: ['borderLeftWidth'],\n  borderInlineEndWidth: ['borderRightWidth'],\n  // Border style\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'],\n  borderInlineStartStyle: ['borderLeftStyle'],\n  borderInlineEndStyle: ['borderRightStyle'],\n  // Border color\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderInlineColor: ['borderLeftColor', 'borderRightColor'],\n  borderInlineStartColor: ['borderLeftColor'],\n  borderInlineEndColor: ['borderRightColor'],\n  // Border radius\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius']\n};\nfunction wrapImportantAndSkipCheck(value, important) {\n  var parsedValue = value;\n  if (important) {\n    parsedValue = \"\".concat(parsedValue, \" !important\");\n  }\n  return {\n    _skip_check_: true,\n    value: parsedValue\n  };\n}\n\n/**\n * Convert css logical properties to legacy properties.\n * Such as: `margin-block-start` to `margin-top`.\n * Transform list:\n * - inset\n * - margin\n * - padding\n * - border\n */\nvar transform = {\n  visit: function visit(cssObj) {\n    var clone = {};\n    Object.keys(cssObj).forEach(function (key) {\n      var value = cssObj[key];\n      var matchValue = keyMap[key];\n      if (matchValue && (typeof value === 'number' || typeof value === 'string')) {\n        var _splitValues = splitValues(value),\n          _splitValues2 = _slicedToArray(_splitValues, 2),\n          _values = _splitValues2[0],\n          _important = _splitValues2[1];\n        if (matchValue.length && matchValue.notSplit) {\n          // not split means always give same value like border\n          matchValue.forEach(function (matchKey) {\n            clone[matchKey] = wrapImportantAndSkipCheck(value, _important);\n          });\n        } else if (matchValue.length === 1) {\n          // Handle like `marginBlockStart` => `marginTop`\n          clone[matchValue[0]] = wrapImportantAndSkipCheck(_values[0], _important);\n        } else if (matchValue.length === 2) {\n          // Handle like `marginBlock` => `marginTop` & `marginBottom`\n          matchValue.forEach(function (matchKey, index) {\n            var _values$index;\n            clone[matchKey] = wrapImportantAndSkipCheck((_values$index = _values[index]) !== null && _values$index !== void 0 ? _values$index : _values[0], _important);\n          });\n        } else if (matchValue.length === 4) {\n          // Handle like `inset` => `top` & `right` & `bottom` & `left`\n          matchValue.forEach(function (matchKey, index) {\n            var _ref, _values$index2;\n            clone[matchKey] = wrapImportantAndSkipCheck((_ref = (_values$index2 = _values[index]) !== null && _values$index2 !== void 0 ? _values$index2 : _values[index - 2]) !== null && _ref !== void 0 ? _ref : _values[0], _important);\n          });\n        } else {\n          clone[key] = value;\n        }\n      } else {\n        clone[key] = value;\n      }\n    });\n    return clone;\n  }\n};\nexport default transform;","import { createContext } from 'react';\nvar IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","export default function get(entity, path) {\n  var current = entity;\n  for (var i = 0; i < path.length; i += 1) {\n    if (current === null || current === undefined) {\n      return undefined;\n    }\n    current = current[path[i]];\n  }\n  return current;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport get from \"./get\";\nfunction internalSet(entity, paths, value, removeIfUndefined) {\n  if (!paths.length) {\n    return value;\n  }\n  var _paths = _toArray(paths),\n    path = _paths[0],\n    restPath = _paths.slice(1);\n  var clone;\n  if (!entity && typeof path === 'number') {\n    clone = [];\n  } else if (Array.isArray(entity)) {\n    clone = _toConsumableArray(entity);\n  } else {\n    clone = _objectSpread({}, entity);\n  }\n\n  // Delete prop if `removeIfUndefined` and value is undefined\n  if (removeIfUndefined && value === undefined && restPath.length === 1) {\n    delete clone[path][restPath[0]];\n  } else {\n    clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);\n  }\n  return clone;\n}\nexport default function set(entity, paths, value) {\n  var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // Do nothing if `removeIfUndefined` and parent object not exist\n  if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {\n    return entity;\n  }\n  return internalSet(entity, paths, value, removeIfUndefined);\n}\nfunction isObject(obj) {\n  return _typeof(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\nfunction createEmpty(source) {\n  return Array.isArray(source) ? [] : {};\n}\nvar keys = typeof Reflect === 'undefined' ? Object.keys : Reflect.ownKeys;\n\n/**\n * Merge objects which will create\n */\nexport function merge() {\n  for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n    sources[_key] = arguments[_key];\n  }\n  var clone = createEmpty(sources[0]);\n  sources.forEach(function (src) {\n    function internalMerge(path, parentLoopSet) {\n      var loopSet = new Set(parentLoopSet);\n      var value = get(src, path);\n      var isArr = Array.isArray(value);\n      if (isArr || isObject(value)) {\n        // Only add not loop obj\n        if (!loopSet.has(value)) {\n          loopSet.add(value);\n          var originValue = get(clone, path);\n          if (isArr) {\n            // Array will always be override\n            clone = set(clone, path, []);\n          } else if (!originValue || _typeof(originValue) !== 'object') {\n            // Init container if not exist\n            clone = set(clone, path, createEmpty(value));\n          }\n          keys(value).forEach(function (key) {\n            internalMerge([].concat(_toConsumableArray(path), [key]), loopSet);\n          });\n        }\n      } else {\n        clone = set(clone, path, value);\n      }\n    }\n    internalMerge([]);\n  });\n  return clone;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","import * as React from 'react';\nimport rcWarning, { resetWarned as rcResetWarned } from \"rc-util/es/warning\";\nexport function noop() {}\nlet deprecatedWarnList = null;\nexport function resetWarned() {\n  deprecatedWarnList = null;\n  rcResetWarned();\n}\n// eslint-disable-next-line import/no-mutable-exports\nlet warning = noop;\nif (process.env.NODE_ENV !== 'production') {\n  warning = (valid, component, message) => {\n    rcWarning(valid, `[antd: ${component}] ${message}`);\n    // StrictMode will inject console which will not throw warning in React 17.\n    if (process.env.NODE_ENV === 'test') {\n      resetWarned();\n    }\n  };\n}\nexport const WarningContext = /*#__PURE__*/React.createContext({});\n/**\n * This is a hook but we not named as `useWarning`\n * since this is only used in development.\n * We should always wrap this in `if (process.env.NODE_ENV !== 'production')` condition\n */\nexport const devUseWarning = process.env.NODE_ENV !== 'production' ? component => {\n  const {\n    strict\n  } = React.useContext(WarningContext);\n  const typeWarning = (valid, type, message) => {\n    if (!valid) {\n      if (strict === false && type === 'deprecated') {\n        const existWarning = deprecatedWarnList;\n        if (!deprecatedWarnList) {\n          deprecatedWarnList = {};\n        }\n        deprecatedWarnList[component] = deprecatedWarnList[component] || [];\n        if (!deprecatedWarnList[component].includes(message || '')) {\n          deprecatedWarnList[component].push(message || '');\n        }\n        // Warning for the first time\n        if (!existWarning) {\n          console.warn('[antd] There exists deprecated usage in your code:', deprecatedWarnList);\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(valid, component, message) : void 0;\n      }\n    }\n  };\n  typeWarning.deprecated = (valid, oldProp, newProp, message) => {\n    typeWarning(valid, 'deprecated', `\\`${oldProp}\\` is deprecated. Please use \\`${newProp}\\` instead.${message ? ` ${message}` : ''}`);\n  };\n  return typeWarning;\n} : () => {\n  const noopWarning = () => {};\n  noopWarning.deprecated = noop;\n  return noopWarning;\n};\nexport default warning;","\"use client\";\n\nimport { createContext } from 'react';\n// ZombieJ: We export single file here since\n// ConfigProvider use this which will make loop deps\n// to import whole `rc-field-form`\nexport default /*#__PURE__*/createContext(undefined);","var locale = {\n  // Options\n  items_per_page: '/ page',\n  jump_to: 'Go to',\n  jump_to_confirm: 'confirm',\n  page: 'Page',\n  // Pagination\n  prev_page: 'Previous Page',\n  next_page: 'Next Page',\n  prev_5: 'Previous 5 Pages',\n  next_5: 'Next 5 Pages',\n  prev_3: 'Previous 3 Pages',\n  next_3: 'Next 3 Pages',\n  page_size: 'Page Size'\n};\nexport default locale;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { commonLocale } from \"./common\";\nvar locale = _objectSpread(_objectSpread({}, commonLocale), {}, {\n  locale: 'en_US',\n  today: 'Today',\n  now: 'Now',\n  backToToday: 'Back to today',\n  ok: 'OK',\n  clear: 'Clear',\n  week: 'Week',\n  month: 'Month',\n  year: 'Year',\n  timeSelect: 'select time',\n  dateSelect: 'select date',\n  weekSelect: 'Choose a week',\n  monthSelect: 'Choose a month',\n  yearSelect: 'Choose a year',\n  decadeSelect: 'Choose a decade',\n  dateFormat: 'M/D/YYYY',\n  dateTimeFormat: 'M/D/YYYY HH:mm:ss',\n  previousMonth: 'Previous month (PageUp)',\n  nextMonth: 'Next month (PageDown)',\n  previousYear: 'Last year (Control + left)',\n  nextYear: 'Next year (Control + right)',\n  previousDecade: 'Last decade',\n  nextDecade: 'Next decade',\n  previousCentury: 'Last century',\n  nextCentury: 'Next century'\n});\nexport default locale;","export var commonLocale = {\n  yearFormat: 'YYYY',\n  dayFormat: 'D',\n  cellMeridiemFormat: 'A',\n  monthBeforeYear: true\n};","const locale = {\n  placeholder: 'Select time',\n  rangePlaceholder: ['Start time', 'End time']\n};\nexport default locale;","import CalendarLocale from \"rc-picker/es/locale/en_US\";\nimport TimePickerLocale from '../../time-picker/locale/en_US';\n// Merge into a locale object\nconst locale = {\n  lang: Object.assign({\n    placeholder: 'Select date',\n    yearPlaceholder: 'Select year',\n    quarterPlaceholder: 'Select quarter',\n    monthPlaceholder: 'Select month',\n    weekPlaceholder: 'Select week',\n    rangePlaceholder: ['Start date', 'End date'],\n    rangeYearPlaceholder: ['Start year', 'End year'],\n    rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],\n    rangeMonthPlaceholder: ['Start month', 'End month'],\n    rangeWeekPlaceholder: ['Start week', 'End week']\n  }, CalendarLocale),\n  timePickerLocale: Object.assign({}, TimePickerLocale)\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nexport default locale;","import Pagination from \"rc-pagination/es/locale/en_US\";\nimport Calendar from '../calendar/locale/en_US';\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n  locale: 'en',\n  Pagination,\n  DatePicker,\n  TimePicker,\n  Calendar,\n  global: {\n    placeholder: 'Please select',\n    close: 'Close'\n  },\n  Table: {\n    filterTitle: 'Filter menu',\n    filterConfirm: 'OK',\n    filterReset: 'Reset',\n    filterEmptyText: 'No filters',\n    filterCheckAll: 'Select all items',\n    filterSearchPlaceholder: 'Search in filters',\n    emptyText: 'No data',\n    selectAll: 'Select current page',\n    selectInvert: 'Invert current page',\n    selectNone: 'Clear all data',\n    selectionAll: 'Select all data',\n    sortTitle: 'Sort',\n    expand: 'Expand row',\n    collapse: 'Collapse row',\n    triggerDesc: 'Click to sort descending',\n    triggerAsc: 'Click to sort ascending',\n    cancelSort: 'Click to cancel sorting'\n  },\n  Tour: {\n    Next: 'Next',\n    Previous: 'Previous',\n    Finish: 'Finish'\n  },\n  Modal: {\n    okText: 'OK',\n    cancelText: 'Cancel',\n    justOkText: 'OK'\n  },\n  Popconfirm: {\n    okText: 'OK',\n    cancelText: 'Cancel'\n  },\n  Transfer: {\n    titles: ['', ''],\n    searchPlaceholder: 'Search here',\n    itemUnit: 'item',\n    itemsUnit: 'items',\n    remove: 'Remove',\n    selectCurrent: 'Select current page',\n    removeCurrent: 'Remove current page',\n    selectAll: 'Select all data',\n    deselectAll: 'Deselect all data',\n    removeAll: 'Remove all data',\n    selectInvert: 'Invert current page'\n  },\n  Upload: {\n    uploading: 'Uploading...',\n    removeFile: 'Remove file',\n    uploadError: 'Upload error',\n    previewFile: 'Preview file',\n    downloadFile: 'Download file'\n  },\n  Empty: {\n    description: 'No data'\n  },\n  Icon: {\n    icon: 'icon'\n  },\n  Text: {\n    edit: 'Edit',\n    copy: 'Copy',\n    copied: 'Copied',\n    expand: 'Expand',\n    collapse: 'Collapse'\n  },\n  Form: {\n    optional: '(optional)',\n    defaultValidateMessages: {\n      default: 'Field validation error for ${label}',\n      required: 'Please enter ${label}',\n      enum: '${label} must be one of [${enum}]',\n      whitespace: '${label} cannot be a blank character',\n      date: {\n        format: '${label} date format is invalid',\n        parse: '${label} cannot be converted to a date',\n        invalid: '${label} is an invalid date'\n      },\n      types: {\n        string: typeTemplate,\n        method: typeTemplate,\n        array: typeTemplate,\n        object: typeTemplate,\n        number: typeTemplate,\n        date: typeTemplate,\n        boolean: typeTemplate,\n        integer: typeTemplate,\n        float: typeTemplate,\n        regexp: typeTemplate,\n        email: typeTemplate,\n        url: typeTemplate,\n        hex: typeTemplate\n      },\n      string: {\n        len: '${label} must be ${len} characters',\n        min: '${label} must be at least ${min} characters',\n        max: '${label} must be up to ${max} characters',\n        range: '${label} must be between ${min}-${max} characters'\n      },\n      number: {\n        len: '${label} must be equal to ${len}',\n        min: '${label} must be minimum ${min}',\n        max: '${label} must be maximum ${max}',\n        range: '${label} must be between ${min}-${max}'\n      },\n      array: {\n        len: 'Must be ${len} ${label}',\n        min: 'At least ${min} ${label}',\n        max: 'At most ${max} ${label}',\n        range: 'The amount of ${label} must be between ${min}-${max}'\n      },\n      pattern: {\n        mismatch: '${label} does not match the pattern ${pattern}'\n      }\n    }\n  },\n  Image: {\n    preview: 'Preview'\n  },\n  QRCode: {\n    expired: 'QR code expired',\n    refresh: 'Refresh',\n    scanned: 'Scanned'\n  },\n  ColorPicker: {\n    presetEmpty: 'Empty',\n    transparent: 'Transparent',\n    singleColor: 'Single',\n    gradientColor: 'Gradient'\n  }\n};\nexport default localeValues;","import defaultLocale from '../locale/en_US';\nlet runtimeLocale = Object.assign({}, defaultLocale.Modal);\nlet localeList = [];\nconst generateLocale = () => localeList.reduce((merged, locale) => Object.assign(Object.assign({}, merged), locale), defaultLocale.Modal);\nexport function changeConfirmLocale(newLocale) {\n  if (newLocale) {\n    const cloneLocale = Object.assign({}, newLocale);\n    localeList.push(cloneLocale);\n    runtimeLocale = generateLocale();\n    return () => {\n      localeList = localeList.filter(locale => locale !== cloneLocale);\n      runtimeLocale = generateLocale();\n    };\n  }\n  runtimeLocale = Object.assign({}, defaultLocale.Modal);\n}\nexport function getConfirmLocale() {\n  return runtimeLocale;\n}","import { createContext } from 'react';\nconst LocaleContext = /*#__PURE__*/createContext(undefined);\nexport default LocaleContext;","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\nimport { changeConfirmLocale } from '../modal/locale';\nimport LocaleContext from './context';\nexport { default as useLocale } from './useLocale';\nexport const ANT_MARK = 'internalMark';\nconst LocaleProvider = props => {\n  const {\n    locale = {},\n    children,\n    _ANT_MARK__\n  } = props;\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('LocaleProvider');\n    process.env.NODE_ENV !== \"production\" ? warning(_ANT_MARK__ === ANT_MARK, 'deprecated', '`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead: http://u.ant.design/locale') : void 0;\n  }\n  React.useEffect(() => {\n    const clearLocale = changeConfirmLocale(locale === null || locale === void 0 ? void 0 : locale.Modal);\n    return clearLocale;\n  }, [locale]);\n  const getMemoizedContextValue = React.useMemo(() => Object.assign(Object.assign({}, locale), {\n    exist: true\n  }), [locale]);\n  return /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n    value: getMemoizedContextValue\n  }, children);\n};\nif (process.env.NODE_ENV !== 'production') {\n  LocaleProvider.displayName = 'LocaleProvider';\n}\nexport default LocaleProvider;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst round = Math.round;\n\n/**\n * Support format, alpha unit will check the % mark:\n * - rgba(102, 204, 255, .5)      -> [102, 204, 255, 0.5]\n * - rgb(102 204 255 / .5)        -> [102, 204, 255, 0.5]\n * - rgb(100%, 50%, 0% / 50%)     -> [255, 128, 0, 0.5]\n * - hsl(270, 60, 40, .5)         -> [270, 60, 40, 0.5]\n * - hsl(270deg 60% 40% / 50%)   -> [270, 60, 40, 0.5]\n *\n * When `base` is provided, the percentage value will be divided by `base`.\n */\nfunction splitColorStr(str, parseNum) {\n  const match = str\n  // Remove str before `(`\n  .replace(/^[^(]*\\((.*)/, '$1')\n  // Remove str after `)`\n  .replace(/\\).*/, '').match(/\\d*\\.?\\d+%?/g) || [];\n  const numList = match.map(item => parseFloat(item));\n  for (let i = 0; i < 3; i += 1) {\n    numList[i] = parseNum(numList[i] || 0, match[i] || '', i);\n  }\n\n  // For alpha. 50% should be 0.5\n  if (match[3]) {\n    numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];\n  } else {\n    // By default, alpha is 1\n    numList[3] = 1;\n  }\n  return numList;\n}\nconst parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;\n\n/** round and limit number to integer between 0-255 */\nfunction limitRange(value, max) {\n  const mergedMax = max || 255;\n  if (value > mergedMax) {\n    return mergedMax;\n  }\n  if (value < 0) {\n    return 0;\n  }\n  return value;\n}\nexport class FastColor {\n  constructor(input) {\n    /**\n     * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.\n     */\n    _defineProperty(this, \"isValid\", true);\n    /**\n     * Red, R in RGB\n     */\n    _defineProperty(this, \"r\", 0);\n    /**\n     * Green, G in RGB\n     */\n    _defineProperty(this, \"g\", 0);\n    /**\n     * Blue, B in RGB\n     */\n    _defineProperty(this, \"b\", 0);\n    /**\n     * Alpha/Opacity, A in RGBA/HSLA\n     */\n    _defineProperty(this, \"a\", 1);\n    // HSV privates\n    _defineProperty(this, \"_h\", void 0);\n    _defineProperty(this, \"_s\", void 0);\n    _defineProperty(this, \"_l\", void 0);\n    _defineProperty(this, \"_v\", void 0);\n    // intermediate variables to calculate HSL/HSV\n    _defineProperty(this, \"_max\", void 0);\n    _defineProperty(this, \"_min\", void 0);\n    _defineProperty(this, \"_brightness\", void 0);\n    /**\n     * Always check 3 char in the object to determine the format.\n     * We not use function in check to save bundle size.\n     * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.\n     */\n    function matchFormat(str) {\n      return str[0] in input && str[1] in input && str[2] in input;\n    }\n    if (!input) {\n      // Do nothing since already initialized\n    } else if (typeof input === 'string') {\n      const trimStr = input.trim();\n      function matchPrefix(prefix) {\n        return trimStr.startsWith(prefix);\n      }\n      if (/^#?[A-F\\d]{3,8}$/i.test(trimStr)) {\n        this.fromHexString(trimStr);\n      } else if (matchPrefix('rgb')) {\n        this.fromRgbString(trimStr);\n      } else if (matchPrefix('hsl')) {\n        this.fromHslString(trimStr);\n      } else if (matchPrefix('hsv') || matchPrefix('hsb')) {\n        this.fromHsvString(trimStr);\n      }\n    } else if (input instanceof FastColor) {\n      this.r = input.r;\n      this.g = input.g;\n      this.b = input.b;\n      this.a = input.a;\n      this._h = input._h;\n      this._s = input._s;\n      this._l = input._l;\n      this._v = input._v;\n    } else if (matchFormat('rgb')) {\n      this.r = limitRange(input.r);\n      this.g = limitRange(input.g);\n      this.b = limitRange(input.b);\n      this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;\n    } else if (matchFormat('hsl')) {\n      this.fromHsl(input);\n    } else if (matchFormat('hsv')) {\n      this.fromHsv(input);\n    } else {\n      throw new Error('@ant-design/fast-color: unsupported input ' + JSON.stringify(input));\n    }\n  }\n\n  // ======================= Setter =======================\n\n  setR(value) {\n    return this._sc('r', value);\n  }\n  setG(value) {\n    return this._sc('g', value);\n  }\n  setB(value) {\n    return this._sc('b', value);\n  }\n  setA(value) {\n    return this._sc('a', value, 1);\n  }\n  setHue(value) {\n    const hsv = this.toHsv();\n    hsv.h = value;\n    return this._c(hsv);\n  }\n\n  // ======================= Getter =======================\n  /**\n   * Returns the perceived luminance of a color, from 0-1.\n   * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n   */\n  getLuminance() {\n    function adjustGamma(raw) {\n      const val = raw / 255;\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n    }\n    const R = adjustGamma(this.r);\n    const G = adjustGamma(this.g);\n    const B = adjustGamma(this.b);\n    return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n  }\n  getHue() {\n    if (typeof this._h === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._h = 0;\n      } else {\n        this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));\n      }\n    }\n    return this._h;\n  }\n  getSaturation() {\n    if (typeof this._s === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._s = 0;\n      } else {\n        this._s = delta / this.getMax();\n      }\n    }\n    return this._s;\n  }\n  getLightness() {\n    if (typeof this._l === 'undefined') {\n      this._l = (this.getMax() + this.getMin()) / 510;\n    }\n    return this._l;\n  }\n  getValue() {\n    if (typeof this._v === 'undefined') {\n      this._v = this.getMax() / 255;\n    }\n    return this._v;\n  }\n\n  /**\n   * Returns the perceived brightness of the color, from 0-255.\n   * Note: this is not the b of HSB\n   * @see http://www.w3.org/TR/AERT#color-contrast\n   */\n  getBrightness() {\n    if (typeof this._brightness === 'undefined') {\n      this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n    }\n    return this._brightness;\n  }\n\n  // ======================== Func ========================\n\n  darken(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() - amount / 100;\n    if (l < 0) {\n      l = 0;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n  lighten(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() + amount / 100;\n    if (l > 1) {\n      l = 1;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n\n  /**\n   * Mix the current color a given amount with another color, from 0 to 100.\n   * 0 means no mixing (return current color).\n   */\n  mix(input, amount = 50) {\n    const color = this._c(input);\n    const p = amount / 100;\n    const calc = key => (color[key] - this[key]) * p + this[key];\n    const rgba = {\n      r: round(calc('r')),\n      g: round(calc('g')),\n      b: round(calc('b')),\n      a: round(calc('a') * 100) / 100\n    };\n    return this._c(rgba);\n  }\n\n  /**\n   * Mix the color with pure white, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return white.\n   */\n  tint(amount = 10) {\n    return this.mix({\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1\n    }, amount);\n  }\n\n  /**\n   * Mix the color with pure black, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return black.\n   */\n  shade(amount = 10) {\n    return this.mix({\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1\n    }, amount);\n  }\n  onBackground(background) {\n    const bg = this._c(background);\n    const alpha = this.a + bg.a * (1 - this.a);\n    const calc = key => {\n      return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);\n    };\n    return this._c({\n      r: calc('r'),\n      g: calc('g'),\n      b: calc('b'),\n      a: alpha\n    });\n  }\n\n  // ======================= Status =======================\n  isDark() {\n    return this.getBrightness() < 128;\n  }\n  isLight() {\n    return this.getBrightness() >= 128;\n  }\n\n  // ======================== MISC ========================\n  equals(other) {\n    return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;\n  }\n  clone() {\n    return this._c(this);\n  }\n\n  // ======================= Format =======================\n  toHexString() {\n    let hex = '#';\n    const rHex = (this.r || 0).toString(16);\n    hex += rHex.length === 2 ? rHex : '0' + rHex;\n    const gHex = (this.g || 0).toString(16);\n    hex += gHex.length === 2 ? gHex : '0' + gHex;\n    const bHex = (this.b || 0).toString(16);\n    hex += bHex.length === 2 ? bHex : '0' + bHex;\n    if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {\n      const aHex = round(this.a * 255).toString(16);\n      hex += aHex.length === 2 ? aHex : '0' + aHex;\n    }\n    return hex;\n  }\n\n  /** CSS support color pattern */\n  toHsl() {\n    return {\n      h: this.getHue(),\n      s: this.getSaturation(),\n      l: this.getLightness(),\n      a: this.a\n    };\n  }\n\n  /** CSS support color pattern */\n  toHslString() {\n    const h = this.getHue();\n    const s = round(this.getSaturation() * 100);\n    const l = round(this.getLightness() * 100);\n    return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;\n  }\n\n  /** Same as toHsb */\n  toHsv() {\n    return {\n      h: this.getHue(),\n      s: this.getSaturation(),\n      v: this.getValue(),\n      a: this.a\n    };\n  }\n  toRgb() {\n    return {\n      r: this.r,\n      g: this.g,\n      b: this.b,\n      a: this.a\n    };\n  }\n  toRgbString() {\n    return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;\n  }\n  toString() {\n    return this.toRgbString();\n  }\n\n  // ====================== Privates ======================\n  /** Return a new FastColor object with one channel changed */\n  _sc(rgb, value, max) {\n    const clone = this.clone();\n    clone[rgb] = limitRange(value, max);\n    return clone;\n  }\n  _c(input) {\n    return new this.constructor(input);\n  }\n  getMax() {\n    if (typeof this._max === 'undefined') {\n      this._max = Math.max(this.r, this.g, this.b);\n    }\n    return this._max;\n  }\n  getMin() {\n    if (typeof this._min === 'undefined') {\n      this._min = Math.min(this.r, this.g, this.b);\n    }\n    return this._min;\n  }\n  fromHexString(trimStr) {\n    const withoutPrefix = trimStr.replace('#', '');\n    function connectNum(index1, index2) {\n      return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);\n    }\n    if (withoutPrefix.length < 6) {\n      // #rgb or #rgba\n      this.r = connectNum(0);\n      this.g = connectNum(1);\n      this.b = connectNum(2);\n      this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;\n    } else {\n      // #rrggbb or #rrggbbaa\n      this.r = connectNum(0, 1);\n      this.g = connectNum(2, 3);\n      this.b = connectNum(4, 5);\n      this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;\n    }\n  }\n  fromHsl({\n    h,\n    s,\n    l,\n    a\n  }) {\n    this._h = h % 360;\n    this._s = s;\n    this._l = l;\n    this.a = typeof a === 'number' ? a : 1;\n    if (s <= 0) {\n      const rgb = round(l * 255);\n      this.r = rgb;\n      this.g = rgb;\n      this.b = rgb;\n    }\n    let r = 0,\n      g = 0,\n      b = 0;\n    const huePrime = h / 60;\n    const chroma = (1 - Math.abs(2 * l - 1)) * s;\n    const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n    if (huePrime >= 0 && huePrime < 1) {\n      r = chroma;\n      g = secondComponent;\n    } else if (huePrime >= 1 && huePrime < 2) {\n      r = secondComponent;\n      g = chroma;\n    } else if (huePrime >= 2 && huePrime < 3) {\n      g = chroma;\n      b = secondComponent;\n    } else if (huePrime >= 3 && huePrime < 4) {\n      g = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 4 && huePrime < 5) {\n      r = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 5 && huePrime < 6) {\n      r = chroma;\n      b = secondComponent;\n    }\n    const lightnessModification = l - chroma / 2;\n    this.r = round((r + lightnessModification) * 255);\n    this.g = round((g + lightnessModification) * 255);\n    this.b = round((b + lightnessModification) * 255);\n  }\n  fromHsv({\n    h,\n    s,\n    v,\n    a\n  }) {\n    this._h = h % 360;\n    this._s = s;\n    this._v = v;\n    this.a = typeof a === 'number' ? a : 1;\n    const vv = round(v * 255);\n    this.r = vv;\n    this.g = vv;\n    this.b = vv;\n    if (s <= 0) {\n      return;\n    }\n    const hh = h / 60;\n    const i = Math.floor(hh);\n    const ff = hh - i;\n    const p = round(v * (1.0 - s) * 255);\n    const q = round(v * (1.0 - s * ff) * 255);\n    const t = round(v * (1.0 - s * (1.0 - ff)) * 255);\n    switch (i) {\n      case 0:\n        this.g = t;\n        this.b = p;\n        break;\n      case 1:\n        this.r = q;\n        this.b = p;\n        break;\n      case 2:\n        this.r = p;\n        this.b = t;\n        break;\n      case 3:\n        this.r = p;\n        this.g = q;\n        break;\n      case 4:\n        this.r = t;\n        this.g = p;\n        break;\n      case 5:\n      default:\n        this.g = p;\n        this.b = q;\n        break;\n    }\n  }\n  fromHsvString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsv({\n      h: cells[0],\n      s: cells[1],\n      v: cells[2],\n      a: cells[3]\n    });\n  }\n  fromHslString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsl({\n      h: cells[0],\n      s: cells[1],\n      l: cells[2],\n      a: cells[3]\n    });\n  }\n  fromRgbString(trimStr) {\n    const cells = splitColorStr(trimStr, (num, txt) =>\n    // Convert percentage to number. e.g. 50% -> 128\n    txt.includes('%') ? round(num / 100 * 255) : num);\n    this.r = cells[0];\n    this.g = cells[1];\n    this.b = cells[2];\n    this.a = cells[3];\n  }\n}","import { FastColor } from '@ant-design/fast-color';\nvar hueStep = 2; // 色相阶梯\nvar saturationStep = 0.16; // 饱和度阶梯，浅色部分\nvar saturationStep2 = 0.05; // 饱和度阶梯，深色部分\nvar brightnessStep1 = 0.05; // 亮度阶梯，浅色部分\nvar brightnessStep2 = 0.15; // 亮度阶梯，深色部分\nvar lightColorCount = 5; // 浅色数量，主色上\nvar darkColorCount = 4; // 深色数量，主色下\n\n// 暗色主题颜色映射关系表\nvar darkColorMap = [{\n  index: 7,\n  amount: 15\n}, {\n  index: 6,\n  amount: 25\n}, {\n  index: 5,\n  amount: 30\n}, {\n  index: 5,\n  amount: 45\n}, {\n  index: 5,\n  amount: 65\n}, {\n  index: 5,\n  amount: 85\n}, {\n  index: 4,\n  amount: 90\n}, {\n  index: 3,\n  amount: 95\n}, {\n  index: 2,\n  amount: 97\n}, {\n  index: 1,\n  amount: 98\n}];\nfunction getHue(hsv, i, light) {\n  var hue;\n  // 根据色相不同，色相转向不同\n  if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n    hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n  } else {\n    hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n  }\n  if (hue < 0) {\n    hue += 360;\n  } else if (hue >= 360) {\n    hue -= 360;\n  }\n  return hue;\n}\nfunction getSaturation(hsv, i, light) {\n  // grey color don't change saturation\n  if (hsv.h === 0 && hsv.s === 0) {\n    return hsv.s;\n  }\n  var saturation;\n  if (light) {\n    saturation = hsv.s - saturationStep * i;\n  } else if (i === darkColorCount) {\n    saturation = hsv.s + saturationStep;\n  } else {\n    saturation = hsv.s + saturationStep2 * i;\n  }\n  // 边界值修正\n  if (saturation > 1) {\n    saturation = 1;\n  }\n  // 第一格的 s 限制在 0.06-0.1 之间\n  if (light && i === lightColorCount && saturation > 0.1) {\n    saturation = 0.1;\n  }\n  if (saturation < 0.06) {\n    saturation = 0.06;\n  }\n  return Math.round(saturation * 100) / 100;\n}\nfunction getValue(hsv, i, light) {\n  var value;\n  if (light) {\n    value = hsv.v + brightnessStep1 * i;\n  } else {\n    value = hsv.v - brightnessStep2 * i;\n  }\n  // Clamp value between 0 and 1\n  value = Math.max(0, Math.min(1, value));\n  return Math.round(value * 100) / 100;\n}\nexport default function generate(color) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var patterns = [];\n  var pColor = new FastColor(color);\n  var hsv = pColor.toHsv();\n  for (var i = lightColorCount; i > 0; i -= 1) {\n    var c = new FastColor({\n      h: getHue(hsv, i, true),\n      s: getSaturation(hsv, i, true),\n      v: getValue(hsv, i, true)\n    });\n    patterns.push(c);\n  }\n  patterns.push(pColor);\n  for (var _i = 1; _i <= darkColorCount; _i += 1) {\n    var _c = new FastColor({\n      h: getHue(hsv, _i),\n      s: getSaturation(hsv, _i),\n      v: getValue(hsv, _i)\n    });\n    patterns.push(_c);\n  }\n\n  // dark theme patterns\n  if (opts.theme === 'dark') {\n    return darkColorMap.map(function (_ref) {\n      var index = _ref.index,\n        amount = _ref.amount;\n      return new FastColor(opts.backgroundColor || '#141414').mix(patterns[index], amount).toHexString();\n    });\n  }\n  return patterns.map(function (c) {\n    return c.toHexString();\n  });\n}","// Generated by script. Do NOT modify!\n\nexport var presetPrimaryColors = {\n  \"red\": \"#F5222D\",\n  \"volcano\": \"#FA541C\",\n  \"orange\": \"#FA8C16\",\n  \"gold\": \"#FAAD14\",\n  \"yellow\": \"#FADB14\",\n  \"lime\": \"#A0D911\",\n  \"green\": \"#52C41A\",\n  \"cyan\": \"#13C2C2\",\n  \"blue\": \"#1677FF\",\n  \"geekblue\": \"#2F54EB\",\n  \"purple\": \"#722ED1\",\n  \"magenta\": \"#EB2F96\",\n  \"grey\": \"#666666\"\n};\nexport var red = [\"#fff1f0\", \"#ffccc7\", \"#ffa39e\", \"#ff7875\", \"#ff4d4f\", \"#f5222d\", \"#cf1322\", \"#a8071a\", \"#820014\", \"#5c0011\"];\nred.primary = red[5];\nexport var volcano = [\"#fff2e8\", \"#ffd8bf\", \"#ffbb96\", \"#ff9c6e\", \"#ff7a45\", \"#fa541c\", \"#d4380d\", \"#ad2102\", \"#871400\", \"#610b00\"];\nvolcano.primary = volcano[5];\nexport var orange = [\"#fff7e6\", \"#ffe7ba\", \"#ffd591\", \"#ffc069\", \"#ffa940\", \"#fa8c16\", \"#d46b08\", \"#ad4e00\", \"#873800\", \"#612500\"];\norange.primary = orange[5];\nexport var gold = [\"#fffbe6\", \"#fff1b8\", \"#ffe58f\", \"#ffd666\", \"#ffc53d\", \"#faad14\", \"#d48806\", \"#ad6800\", \"#874d00\", \"#613400\"];\ngold.primary = gold[5];\nexport var yellow = [\"#feffe6\", \"#ffffb8\", \"#fffb8f\", \"#fff566\", \"#ffec3d\", \"#fadb14\", \"#d4b106\", \"#ad8b00\", \"#876800\", \"#614700\"];\nyellow.primary = yellow[5];\nexport var lime = [\"#fcffe6\", \"#f4ffb8\", \"#eaff8f\", \"#d3f261\", \"#bae637\", \"#a0d911\", \"#7cb305\", \"#5b8c00\", \"#3f6600\", \"#254000\"];\nlime.primary = lime[5];\nexport var green = [\"#f6ffed\", \"#d9f7be\", \"#b7eb8f\", \"#95de64\", \"#73d13d\", \"#52c41a\", \"#389e0d\", \"#237804\", \"#135200\", \"#092b00\"];\ngreen.primary = green[5];\nexport var cyan = [\"#e6fffb\", \"#b5f5ec\", \"#87e8de\", \"#5cdbd3\", \"#36cfc9\", \"#13c2c2\", \"#08979c\", \"#006d75\", \"#00474f\", \"#002329\"];\ncyan.primary = cyan[5];\nexport var blue = [\"#e6f4ff\", \"#bae0ff\", \"#91caff\", \"#69b1ff\", \"#4096ff\", \"#1677ff\", \"#0958d9\", \"#003eb3\", \"#002c8c\", \"#001d66\"];\nblue.primary = blue[5];\nexport var geekblue = [\"#f0f5ff\", \"#d6e4ff\", \"#adc6ff\", \"#85a5ff\", \"#597ef7\", \"#2f54eb\", \"#1d39c4\", \"#10239e\", \"#061178\", \"#030852\"];\ngeekblue.primary = geekblue[5];\nexport var purple = [\"#f9f0ff\", \"#efdbff\", \"#d3adf7\", \"#b37feb\", \"#9254de\", \"#722ed1\", \"#531dab\", \"#391085\", \"#22075e\", \"#120338\"];\npurple.primary = purple[5];\nexport var magenta = [\"#fff0f6\", \"#ffd6e7\", \"#ffadd2\", \"#ff85c0\", \"#f759ab\", \"#eb2f96\", \"#c41d7f\", \"#9e1068\", \"#780650\", \"#520339\"];\nmagenta.primary = magenta[5];\nexport var grey = [\"#a6a6a6\", \"#999999\", \"#8c8c8c\", \"#808080\", \"#737373\", \"#666666\", \"#404040\", \"#1a1a1a\", \"#000000\", \"#000000\"];\ngrey.primary = grey[5];\nexport var gray = grey;\nexport var presetPalettes = {\n  red: red,\n  volcano: volcano,\n  orange: orange,\n  gold: gold,\n  yellow: yellow,\n  lime: lime,\n  green: green,\n  cyan: cyan,\n  blue: blue,\n  geekblue: geekblue,\n  purple: purple,\n  magenta: magenta,\n  grey: grey\n};\nexport var redDark = [\"#2a1215\", \"#431418\", \"#58181c\", \"#791a1f\", \"#a61d24\", \"#d32029\", \"#e84749\", \"#f37370\", \"#f89f9a\", \"#fac8c3\"];\nredDark.primary = redDark[5];\nexport var volcanoDark = [\"#2b1611\", \"#441d12\", \"#592716\", \"#7c3118\", \"#aa3e19\", \"#d84a1b\", \"#e87040\", \"#f3956a\", \"#f8b692\", \"#fad4bc\"];\nvolcanoDark.primary = volcanoDark[5];\nexport var orangeDark = [\"#2b1d11\", \"#442a11\", \"#593815\", \"#7c4a15\", \"#aa6215\", \"#d87a16\", \"#e89a3c\", \"#f3b765\", \"#f8cf8d\", \"#fae3b7\"];\norangeDark.primary = orangeDark[5];\nexport var goldDark = [\"#2b2111\", \"#443111\", \"#594214\", \"#7c5914\", \"#aa7714\", \"#d89614\", \"#e8b339\", \"#f3cc62\", \"#f8df8b\", \"#faedb5\"];\ngoldDark.primary = goldDark[5];\nexport var yellowDark = [\"#2b2611\", \"#443b11\", \"#595014\", \"#7c6e14\", \"#aa9514\", \"#d8bd14\", \"#e8d639\", \"#f3ea62\", \"#f8f48b\", \"#fafab5\"];\nyellowDark.primary = yellowDark[5];\nexport var limeDark = [\"#1f2611\", \"#2e3c10\", \"#3e4f13\", \"#536d13\", \"#6f9412\", \"#8bbb11\", \"#a9d134\", \"#c9e75d\", \"#e4f88b\", \"#f0fab5\"];\nlimeDark.primary = limeDark[5];\nexport var greenDark = [\"#162312\", \"#1d3712\", \"#274916\", \"#306317\", \"#3c8618\", \"#49aa19\", \"#6abe39\", \"#8fd460\", \"#b2e58b\", \"#d5f2bb\"];\ngreenDark.primary = greenDark[5];\nexport var cyanDark = [\"#112123\", \"#113536\", \"#144848\", \"#146262\", \"#138585\", \"#13a8a8\", \"#33bcb7\", \"#58d1c9\", \"#84e2d8\", \"#b2f1e8\"];\ncyanDark.primary = cyanDark[5];\nexport var blueDark = [\"#111a2c\", \"#112545\", \"#15325b\", \"#15417e\", \"#1554ad\", \"#1668dc\", \"#3c89e8\", \"#65a9f3\", \"#8dc5f8\", \"#b7dcfa\"];\nblueDark.primary = blueDark[5];\nexport var geekblueDark = [\"#131629\", \"#161d40\", \"#1c2755\", \"#203175\", \"#263ea0\", \"#2b4acb\", \"#5273e0\", \"#7f9ef3\", \"#a8c1f8\", \"#d2e0fa\"];\ngeekblueDark.primary = geekblueDark[5];\nexport var purpleDark = [\"#1a1325\", \"#24163a\", \"#301c4d\", \"#3e2069\", \"#51258f\", \"#642ab5\", \"#854eca\", \"#ab7ae0\", \"#cda8f0\", \"#ebd7fa\"];\npurpleDark.primary = purpleDark[5];\nexport var magentaDark = [\"#291321\", \"#40162f\", \"#551c3b\", \"#75204f\", \"#a02669\", \"#cb2b83\", \"#e0529c\", \"#f37fb7\", \"#f8a8cc\", \"#fad2e3\"];\nmagentaDark.primary = magentaDark[5];\nexport var greyDark = [\"#151515\", \"#1f1f1f\", \"#2d2d2d\", \"#393939\", \"#494949\", \"#5a5a5a\", \"#6a6a6a\", \"#7b7b7b\", \"#888888\", \"#969696\"];\ngreyDark.primary = greyDark[5];\nexport var presetDarkPalettes = {\n  red: redDark,\n  volcano: volcanoDark,\n  orange: orangeDark,\n  gold: goldDark,\n  yellow: yellowDark,\n  lime: limeDark,\n  green: greenDark,\n  cyan: cyanDark,\n  blue: blueDark,\n  geekblue: geekblueDark,\n  purple: purpleDark,\n  magenta: magentaDark,\n  grey: greyDark\n};","export const defaultPresetColors = {\n  blue: '#1677FF',\n  purple: '#722ED1',\n  cyan: '#13C2C2',\n  green: '#52C41A',\n  magenta: '#EB2F96',\n  /**\n   * @deprecated Use magenta instead\n   */\n  pink: '#EB2F96',\n  red: '#F5222D',\n  orange: '#FA8C16',\n  yellow: '#FADB14',\n  volcano: '#FA541C',\n  geekblue: '#2F54EB',\n  gold: '#FAAD14',\n  lime: '#A0D911'\n};\nconst seedToken = Object.assign(Object.assign({}, defaultPresetColors), {\n  // Color\n  colorPrimary: '#1677ff',\n  colorSuccess: '#52c41a',\n  colorWarning: '#faad14',\n  colorError: '#ff4d4f',\n  colorInfo: '#1677ff',\n  colorLink: '',\n  colorTextBase: '',\n  colorBgBase: '',\n  // Font\n  fontFamily: `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'`,\n  fontFamilyCode: `'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace`,\n  fontSize: 14,\n  // Line\n  lineWidth: 1,\n  lineType: 'solid',\n  // Motion\n  motionUnit: 0.1,\n  motionBase: 0,\n  motionEaseOutCirc: 'cubic-bezier(0.08, 0.82, 0.17, 1)',\n  motionEaseInOutCirc: 'cubic-bezier(0.78, 0.14, 0.15, 0.86)',\n  motionEaseOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n  motionEaseInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n  motionEaseOutBack: 'cubic-bezier(0.12, 0.4, 0.29, 1.46)',\n  motionEaseInBack: 'cubic-bezier(0.71, -0.46, 0.88, 0.6)',\n  motionEaseInQuint: 'cubic-bezier(0.755, 0.05, 0.855, 0.06)',\n  motionEaseOutQuint: 'cubic-bezier(0.23, 1, 0.32, 1)',\n  // Radius\n  borderRadius: 6,\n  // Size\n  sizeUnit: 4,\n  sizeStep: 4,\n  sizePopupArrow: 16,\n  // Control Base\n  controlHeight: 32,\n  // zIndex\n  zIndexBase: 0,\n  zIndexPopupBase: 1000,\n  // Image\n  opacityImage: 1,\n  // Wireframe\n  wireframe: false,\n  // Motion\n  motion: true\n});\nexport default seedToken;","const genRadius = radiusBase => {\n  let radiusLG = radiusBase;\n  let radiusSM = radiusBase;\n  let radiusXS = radiusBase;\n  let radiusOuter = radiusBase;\n  // radiusLG\n  if (radiusBase < 6 && radiusBase >= 5) {\n    radiusLG = radiusBase + 1;\n  } else if (radiusBase < 16 && radiusBase >= 6) {\n    radiusLG = radiusBase + 2;\n  } else if (radiusBase >= 16) {\n    radiusLG = 16;\n  }\n  // radiusSM\n  if (radiusBase < 7 && radiusBase >= 5) {\n    radiusSM = 4;\n  } else if (radiusBase < 8 && radiusBase >= 7) {\n    radiusSM = 5;\n  } else if (radiusBase < 14 && radiusBase >= 8) {\n    radiusSM = 6;\n  } else if (radiusBase < 16 && radiusBase >= 14) {\n    radiusSM = 7;\n  } else if (radiusBase >= 16) {\n    radiusSM = 8;\n  }\n  // radiusXS\n  if (radiusBase < 6 && radiusBase >= 2) {\n    radiusXS = 1;\n  } else if (radiusBase >= 6) {\n    radiusXS = 2;\n  }\n  // radiusOuter\n  if (radiusBase > 4 && radiusBase < 8) {\n    radiusOuter = 4;\n  } else if (radiusBase >= 8) {\n    radiusOuter = 6;\n  }\n  return {\n    borderRadius: radiusBase,\n    borderRadiusXS: radiusXS,\n    borderRadiusSM: radiusSM,\n    borderRadiusLG: radiusLG,\n    borderRadiusOuter: radiusOuter\n  };\n};\nexport default genRadius;","const genControlHeight = token => {\n  const {\n    controlHeight\n  } = token;\n  return {\n    controlHeightSM: controlHeight * 0.75,\n    controlHeightXS: controlHeight * 0.5,\n    controlHeightLG: controlHeight * 1.25\n  };\n};\nexport default genControlHeight;","import genFontSizes from './genFontSizes';\nconst genFontMapToken = fontSize => {\n  const fontSizePairs = genFontSizes(fontSize);\n  const fontSizes = fontSizePairs.map(pair => pair.size);\n  const lineHeights = fontSizePairs.map(pair => pair.lineHeight);\n  const fontSizeMD = fontSizes[1];\n  const fontSizeSM = fontSizes[0];\n  const fontSizeLG = fontSizes[2];\n  const lineHeight = lineHeights[1];\n  const lineHeightSM = lineHeights[0];\n  const lineHeightLG = lineHeights[2];\n  return {\n    fontSizeSM,\n    fontSize: fontSizeMD,\n    fontSizeLG,\n    fontSizeXL: fontSizes[3],\n    fontSizeHeading1: fontSizes[6],\n    fontSizeHeading2: fontSizes[5],\n    fontSizeHeading3: fontSizes[4],\n    fontSizeHeading4: fontSizes[3],\n    fontSizeHeading5: fontSizes[2],\n    lineHeight,\n    lineHeightLG,\n    lineHeightSM,\n    fontHeight: Math.round(lineHeight * fontSizeMD),\n    fontHeightLG: Math.round(lineHeightLG * fontSizeLG),\n    fontHeightSM: Math.round(lineHeightSM * fontSizeSM),\n    lineHeightHeading1: lineHeights[6],\n    lineHeightHeading2: lineHeights[5],\n    lineHeightHeading3: lineHeights[4],\n    lineHeightHeading4: lineHeights[3],\n    lineHeightHeading5: lineHeights[2]\n  };\n};\nexport default genFontMapToken;","export function getLineHeight(fontSize) {\n  return (fontSize + 8) / fontSize;\n}\n// https://zhuanlan.zhihu.com/p/32746810\nexport default function getFontSizes(base) {\n  const fontSizes = Array.from({\n    length: 10\n  }).map((_, index) => {\n    const i = index - 1;\n    const baseSize = base * Math.pow(Math.E, i / 5);\n    const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize);\n    // Convert to even\n    return Math.floor(intSize / 2) * 2;\n  });\n  fontSizes[1] = base;\n  return fontSizes.map(size => ({\n    size,\n    lineHeight: getLineHeight(size)\n  }));\n}","import { FastColor } from '@ant-design/fast-color';\nexport const getAlphaColor = (baseColor, alpha) => new FastColor(baseColor).setA(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n  const instance = new FastColor(baseColor);\n  return instance.darken(brightness).toHexString();\n};","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = baseColor => {\n  const colors = generate(baseColor);\n  return {\n    1: colors[0],\n    2: colors[1],\n    3: colors[2],\n    4: colors[3],\n    5: colors[4],\n    6: colors[5],\n    7: colors[6],\n    8: colors[4],\n    9: colors[5],\n    10: colors[6]\n    // 8: colors[7],\n    // 9: colors[8],\n    // 10: colors[9],\n  };\n};\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => {\n  const colorBgBase = bgBaseColor || '#fff';\n  const colorTextBase = textBaseColor || '#000';\n  return {\n    colorBgBase,\n    colorTextBase,\n    colorText: getAlphaColor(colorTextBase, 0.88),\n    colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n    colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n    colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n    colorFill: getAlphaColor(colorTextBase, 0.15),\n    colorFillSecondary: getAlphaColor(colorTextBase, 0.06),\n    colorFillTertiary: getAlphaColor(colorTextBase, 0.04),\n    colorFillQuaternary: getAlphaColor(colorTextBase, 0.02),\n    colorBgSolid: getAlphaColor(colorTextBase, 1),\n    colorBgSolidHover: getAlphaColor(colorTextBase, 0.75),\n    colorBgSolidActive: getAlphaColor(colorTextBase, 0.95),\n    colorBgLayout: getSolidColor(colorBgBase, 4),\n    colorBgContainer: getSolidColor(colorBgBase, 0),\n    colorBgElevated: getSolidColor(colorBgBase, 0),\n    colorBgSpotlight: getAlphaColor(colorTextBase, 0.85),\n    colorBgBlur: 'transparent',\n    colorBorder: getSolidColor(colorBgBase, 15),\n    colorBorderSecondary: getSolidColor(colorBgBase, 6)\n  };\n};","import { createTheme } from '@ant-design/cssinjs';\nimport defaultDerivative from './index';\nconst defaultTheme = createTheme(defaultDerivative);\nexport default defaultTheme;","import { generate, presetPalettes, presetPrimaryColors } from '@ant-design/colors';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport genCommonMapToken from '../shared/genCommonMapToken';\nimport genControlHeight from '../shared/genControlHeight';\nimport genFontMapToken from '../shared/genFontMapToken';\nimport genSizeMapToken from '../shared/genSizeMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nexport default function derivative(token) {\n  // pink is deprecated name of magenta, keep this for backwards compatibility\n  presetPrimaryColors.pink = presetPrimaryColors.magenta;\n  presetPalettes.pink = presetPalettes.magenta;\n  const colorPalettes = Object.keys(defaultPresetColors).map(colorKey => {\n    const colors = token[colorKey] === presetPrimaryColors[colorKey] ? presetPalettes[colorKey] : generate(token[colorKey]);\n    return Array.from({\n      length: 10\n    }, () => 1).reduce((prev, _, i) => {\n      prev[`${colorKey}-${i + 1}`] = colors[i];\n      prev[`${colorKey}${i + 1}`] = colors[i];\n      return prev;\n    }, {});\n  }).reduce((prev, cur) => {\n    // biome-ignore lint/style/noParameterAssign: it is a reduce\n    prev = Object.assign(Object.assign({}, prev), cur);\n    return prev;\n  }, {});\n  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, token), colorPalettes), genColorMapToken(token, {\n    generateColorPalettes,\n    generateNeutralColorPalettes\n  })), genFontMapToken(token.fontSize)), genSizeMapToken(token)), genControlHeight(token)), genCommonMapToken(token));\n}","import { FastColor } from '@ant-design/fast-color';\nexport default function genColorMapToken(seed, {\n  generateColorPalettes,\n  generateNeutralColorPalettes\n}) {\n  const {\n    colorSuccess: colorSuccessBase,\n    colorWarning: colorWarningBase,\n    colorError: colorErrorBase,\n    colorInfo: colorInfoBase,\n    colorPrimary: colorPrimaryBase,\n    colorBgBase,\n    colorTextBase\n  } = seed;\n  const primaryColors = generateColorPalettes(colorPrimaryBase);\n  const successColors = generateColorPalettes(colorSuccessBase);\n  const warningColors = generateColorPalettes(colorWarningBase);\n  const errorColors = generateColorPalettes(colorErrorBase);\n  const infoColors = generateColorPalettes(colorInfoBase);\n  const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase);\n  // Color Link\n  const colorLink = seed.colorLink || seed.colorInfo;\n  const linkColors = generateColorPalettes(colorLink);\n  const colorErrorBgFilledHover = new FastColor(errorColors[1]).mix(new FastColor(errorColors[3]), 50).toHexString();\n  return Object.assign(Object.assign({}, neutralColors), {\n    colorPrimaryBg: primaryColors[1],\n    colorPrimaryBgHover: primaryColors[2],\n    colorPrimaryBorder: primaryColors[3],\n    colorPrimaryBorderHover: primaryColors[4],\n    colorPrimaryHover: primaryColors[5],\n    colorPrimary: primaryColors[6],\n    colorPrimaryActive: primaryColors[7],\n    colorPrimaryTextHover: primaryColors[8],\n    colorPrimaryText: primaryColors[9],\n    colorPrimaryTextActive: primaryColors[10],\n    colorSuccessBg: successColors[1],\n    colorSuccessBgHover: successColors[2],\n    colorSuccessBorder: successColors[3],\n    colorSuccessBorderHover: successColors[4],\n    colorSuccessHover: successColors[4],\n    colorSuccess: successColors[6],\n    colorSuccessActive: successColors[7],\n    colorSuccessTextHover: successColors[8],\n    colorSuccessText: successColors[9],\n    colorSuccessTextActive: successColors[10],\n    colorErrorBg: errorColors[1],\n    colorErrorBgHover: errorColors[2],\n    colorErrorBgFilledHover,\n    colorErrorBgActive: errorColors[3],\n    colorErrorBorder: errorColors[3],\n    colorErrorBorderHover: errorColors[4],\n    colorErrorHover: errorColors[5],\n    colorError: errorColors[6],\n    colorErrorActive: errorColors[7],\n    colorErrorTextHover: errorColors[8],\n    colorErrorText: errorColors[9],\n    colorErrorTextActive: errorColors[10],\n    colorWarningBg: warningColors[1],\n    colorWarningBgHover: warningColors[2],\n    colorWarningBorder: warningColors[3],\n    colorWarningBorderHover: warningColors[4],\n    colorWarningHover: warningColors[4],\n    colorWarning: warningColors[6],\n    colorWarningActive: warningColors[7],\n    colorWarningTextHover: warningColors[8],\n    colorWarningText: warningColors[9],\n    colorWarningTextActive: warningColors[10],\n    colorInfoBg: infoColors[1],\n    colorInfoBgHover: infoColors[2],\n    colorInfoBorder: infoColors[3],\n    colorInfoBorderHover: infoColors[4],\n    colorInfoHover: infoColors[4],\n    colorInfo: infoColors[6],\n    colorInfoActive: infoColors[7],\n    colorInfoTextHover: infoColors[8],\n    colorInfoText: infoColors[9],\n    colorInfoTextActive: infoColors[10],\n    colorLinkHover: linkColors[4],\n    colorLink: linkColors[6],\n    colorLinkActive: linkColors[7],\n    colorBgMask: new FastColor('#000').setA(0.45).toRgbString(),\n    colorWhite: '#fff'\n  });\n}","export default function genSizeMapToken(token) {\n  const {\n    sizeUnit,\n    sizeStep\n  } = token;\n  return {\n    sizeXXL: sizeUnit * (sizeStep + 8),\n    // 48\n    sizeXL: sizeUnit * (sizeStep + 4),\n    // 32\n    sizeLG: sizeUnit * (sizeStep + 2),\n    // 24\n    sizeMD: sizeUnit * (sizeStep + 1),\n    // 20\n    sizeMS: sizeUnit * sizeStep,\n    // 16\n    size: sizeUnit * sizeStep,\n    // 16\n    sizeSM: sizeUnit * (sizeStep - 1),\n    // 12\n    sizeXS: sizeUnit * (sizeStep - 2),\n    // 8\n    sizeXXS: sizeUnit * (sizeStep - 3) // 4\n  };\n}","import genRadius from './genRadius';\nexport default function genCommonMapToken(token) {\n  const {\n    motionUnit,\n    motionBase,\n    borderRadius,\n    lineWidth\n  } = token;\n  return Object.assign({\n    // motion\n    motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`,\n    motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`,\n    motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`,\n    // line\n    lineWidthBold: lineWidth + 1\n  }, genRadius(borderRadius));\n}","import React from 'react';\nimport defaultSeedToken from './themes/seed';\nexport { default as defaultTheme } from './themes/default/theme';\n// ================================ Context =================================\n// To ensure snapshot stable. We disable hashed in test env.\nexport const defaultConfig = {\n  token: defaultSeedToken,\n  override: {\n    override: defaultSeedToken\n  },\n  hashed: true\n};\nexport const DesignTokenContext = /*#__PURE__*/React.createContext(defaultConfig);","import { generate } from '@ant-design/colors';\nimport { FastColor } from '@ant-design/fast-color';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport warning from '../_util/warning';\nconst dynamicStyleMark = `-ant-${Date.now()}-${Math.random()}`;\nexport function getStyle(globalPrefixCls, theme) {\n  const variables = {};\n  const formatColor = (color, updater) => {\n    let clone = color.clone();\n    clone = (updater === null || updater === void 0 ? void 0 : updater(clone)) || clone;\n    return clone.toRgbString();\n  };\n  const fillColor = (colorVal, type) => {\n    const baseColor = new FastColor(colorVal);\n    const colorPalettes = generate(baseColor.toRgbString());\n    variables[`${type}-color`] = formatColor(baseColor);\n    variables[`${type}-color-disabled`] = colorPalettes[1];\n    variables[`${type}-color-hover`] = colorPalettes[4];\n    variables[`${type}-color-active`] = colorPalettes[6];\n    variables[`${type}-color-outline`] = baseColor.clone().setA(0.2).toRgbString();\n    variables[`${type}-color-deprecated-bg`] = colorPalettes[0];\n    variables[`${type}-color-deprecated-border`] = colorPalettes[2];\n  };\n  // ================ Primary Color ================\n  if (theme.primaryColor) {\n    fillColor(theme.primaryColor, 'primary');\n    const primaryColor = new FastColor(theme.primaryColor);\n    const primaryColors = generate(primaryColor.toRgbString());\n    // Legacy - We should use semantic naming standard\n    primaryColors.forEach((color, index) => {\n      variables[`primary-${index + 1}`] = color;\n    });\n    // Deprecated\n    variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, c => c.lighten(35));\n    variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, c => c.lighten(20));\n    variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, c => c.tint(20));\n    variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, c => c.tint(50));\n    variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, c => c.setA(c.a * 0.12));\n    const primaryActiveColor = new FastColor(primaryColors[0]);\n    variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, c => c.setA(c.a * 0.3));\n    variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, c => c.darken(2));\n  }\n  // ================ Success Color ================\n  if (theme.successColor) {\n    fillColor(theme.successColor, 'success');\n  }\n  // ================ Warning Color ================\n  if (theme.warningColor) {\n    fillColor(theme.warningColor, 'warning');\n  }\n  // ================= Error Color =================\n  if (theme.errorColor) {\n    fillColor(theme.errorColor, 'error');\n  }\n  // ================= Info Color ==================\n  if (theme.infoColor) {\n    fillColor(theme.infoColor, 'info');\n  }\n  // Convert to css variables\n  const cssList = Object.keys(variables).map(key => `--${globalPrefixCls}-${key}: ${variables[key]};`);\n  return `\n  :root {\n    ${cssList.join('\\n')}\n  }\n  `.trim();\n}\nexport function registerTheme(globalPrefixCls, theme) {\n  const style = getStyle(globalPrefixCls, theme);\n  if (canUseDom()) {\n    updateCSS(style, `${dynamicStyleMark}-dynamic-theme`);\n  } else {\n    process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'SSR do not support dynamic theme with css variables.') : void 0;\n  }\n}","\"use client\";\n\nimport * as React from 'react';\nconst DisabledContext = /*#__PURE__*/React.createContext(false);\nexport const DisabledContextProvider = ({\n  children,\n  disabled\n}) => {\n  const originDisabled = React.useContext(DisabledContext);\n  return /*#__PURE__*/React.createElement(DisabledContext.Provider, {\n    value: disabled !== null && disabled !== void 0 ? disabled : originDisabled\n  }, children);\n};\nexport default DisabledContext;","\"use client\";\n\nimport * as React from 'react';\nconst SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport const SizeContextProvider = ({\n  children,\n  size\n}) => {\n  const originSize = React.useContext(SizeContext);\n  return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n    value: size || originSize\n  }, children);\n};\nexport default SizeContext;","import { useContext } from 'react';\nimport DisabledContext from '../DisabledContext';\nimport SizeContext from '../SizeContext';\nfunction useConfig() {\n  const componentDisabled = useContext(DisabledContext);\n  const componentSize = useContext(SizeContext);\n  return {\n    componentDisabled,\n    componentSize\n  };\n}\nexport default useConfig;","import * as React from 'react';\nconst fullClone = Object.assign({}, React);\nconst {\n  useId\n} = fullClone;\nconst useEmptyId = () => '';\nconst useThemeKey = typeof useId === 'undefined' ? useEmptyId : useId;\nexport default useThemeKey;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nexport function isDOM(node) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Element\n  // Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement\n  return node instanceof HTMLElement || node instanceof SVGElement;\n}\n\n/**\n * Retrieves a DOM node via a ref, and does not invoke `findDOMNode`.\n */\nexport function getDOM(node) {\n  if (node && _typeof(node) === 'object' && isDOM(node.nativeElement)) {\n    return node.nativeElement;\n  }\n  if (isDOM(node)) {\n    return node;\n  }\n  return null;\n}\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n  var domNode = getDOM(node);\n  if (domNode) {\n    return domNode;\n  }\n  if (node instanceof React.Component) {\n    var _ReactDOM$findDOMNode;\n    return (_ReactDOM$findDOMNode = ReactDOM.findDOMNode) === null || _ReactDOM$findDOMNode === void 0 ? void 0 : _ReactDOM$findDOMNode.call(ReactDOM, node);\n  }\n  return null;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar REACT_ELEMENT_TYPE_18 = Symbol.for('react.element');\nvar REACT_ELEMENT_TYPE_19 = Symbol.for('react.transitional.element');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\n\n/**\n * Compatible with React 18 or 19 to check if node is a Fragment.\n */\nexport default function isFragment(object) {\n  return (\n    // Base object type\n    object && _typeof(object) === 'object' && (\n    // React Element type\n    object.$$typeof === REACT_ELEMENT_TYPE_18 || object.$$typeof === REACT_ELEMENT_TYPE_19) &&\n    // React Fragment type\n    object.type === REACT_FRAGMENT_TYPE\n  );\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { isValidElement, version } from 'react';\nimport { ForwardRef, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nimport isFragment from \"./React/isFragment\";\nvar ReactMajorVersion = Number(version.split('.')[0]);\nexport var fillRef = function fillRef(ref, node) {\n  if (typeof ref === 'function') {\n    ref(node);\n  } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n    ref.current = node;\n  }\n};\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport var composeRef = function composeRef() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n  var refList = refs.filter(Boolean);\n  if (refList.length <= 1) {\n    return refList[0];\n  }\n  return function (node) {\n    refs.forEach(function (ref) {\n      fillRef(ref, node);\n    });\n  };\n};\nexport var useComposeRef = function useComposeRef() {\n  for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    refs[_key2] = arguments[_key2];\n  }\n  return useMemo(function () {\n    return composeRef.apply(void 0, refs);\n  }, refs, function (prev, next) {\n    return prev.length !== next.length || prev.every(function (ref, i) {\n      return ref !== next[i];\n    });\n  });\n};\nexport var supportRef = function supportRef(nodeOrComponent) {\n  var _type$prototype, _nodeOrComponent$prot;\n  if (!nodeOrComponent) {\n    return false;\n  }\n\n  // React 19 no need `forwardRef` anymore. So just pass if is a React element.\n  if (isReactElement(nodeOrComponent) && ReactMajorVersion >= 19) {\n    return true;\n  }\n  var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n  // Function component node\n  if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render) && type.$$typeof !== ForwardRef) {\n    return false;\n  }\n\n  // Class component\n  if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render) && nodeOrComponent.$$typeof !== ForwardRef) {\n    return false;\n  }\n  return true;\n};\nfunction isReactElement(node) {\n  return /*#__PURE__*/isValidElement(node) && !isFragment(node);\n}\nexport var supportNodeRef = function supportNodeRef(node) {\n  return isReactElement(node) && supportRef(node);\n};\n\n/**\n * In React 19. `ref` is not a property from node.\n * But a property from `props.ref`.\n * To check if `props.ref` exist or fallback to `ref`.\n */\nexport var getNodeRef = function getNodeRef(node) {\n  if (node && isReactElement(node)) {\n    var ele = node;\n\n    // Source from:\n    // https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/getReactNodeRef/getReactNodeRef.ts\n    return ele.props.propertyIsEnumerable('ref') ? ele.props.ref : ele.ref;\n  }\n  return null;\n};","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport * as React from 'react';\nexport var Context = /*#__PURE__*/React.createContext({});\nexport default function MotionProvider(_ref) {\n  var children = _ref.children,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: props\n  }, children);\n}","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n  var r = isNativeReflectConstruct();\n  return function () {\n    var e,\n      o = getPrototypeOf(t);\n    if (r) {\n      var s = getPrototypeOf(this).constructor;\n      e = Reflect.construct(o, arguments, s);\n    } else e = o.apply(this, arguments);\n    return possibleConstructorReturn(this, e);\n  };\n}\nexport { _createSuper as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n  _inherits(DomWrapper, _React$Component);\n  var _super = _createSuper(DomWrapper);\n  function DomWrapper() {\n    _classCallCheck(this, DomWrapper);\n    return _super.apply(this, arguments);\n  }\n  _createClass(DomWrapper, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n  return DomWrapper;\n}(React.Component);\nexport default DomWrapper;","import * as React from 'react';\nexport default function useEvent(callback) {\n  var fnRef = React.useRef();\n  fnRef.current = callback;\n  var memoFn = React.useCallback(function () {\n    var _fnRef$current;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return (_fnRef$current = fnRef.current) === null || _fnRef$current === void 0 ? void 0 : _fnRef$current.call.apply(_fnRef$current, [fnRef].concat(args));\n  }, []);\n  return memoFn;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nexport default function useSafeState(defaultValue) {\n  var destroyRef = React.useRef(false);\n  var _React$useState = React.useState(defaultValue),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    value = _React$useState2[0],\n    setValue = _React$useState2[1];\n  React.useEffect(function () {\n    destroyRef.current = false;\n    return function () {\n      destroyRef.current = true;\n    };\n  }, []);\n  function safeSetState(updater, ignoreDestroy) {\n    if (ignoreDestroy && destroyRef.current) {\n      return;\n    }\n    setValue(updater);\n  }\n  return [value, safeSetState];\n}","export var STATUS_NONE = 'none';\nexport var STATUS_APPEAR = 'appear';\nexport var STATUS_ENTER = 'enter';\nexport var STATUS_LEAVE = 'leave';\nexport var STEP_NONE = 'none';\nexport var STEP_PREPARE = 'prepare';\nexport var STEP_START = 'start';\nexport var STEP_ACTIVE = 'active';\nexport var STEP_ACTIVATED = 'end';\n/**\n * Used for disabled motion case.\n * Prepare stage will still work but start & active will be skipped.\n */\nexport var STEP_PREPARED = 'prepared';","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport canUseDOM from \"rc-util/es/Dom/canUseDom\";\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\".concat(styleProp)] = \"webkit\".concat(eventName);\n  prefixes[\"Moz\".concat(styleProp)] = \"moz\".concat(eventName);\n  prefixes[\"ms\".concat(styleProp)] = \"MS\".concat(eventName);\n  prefixes[\"O\".concat(styleProp)] = \"o\".concat(eventName.toLowerCase());\n  return prefixes;\n}\nexport function getVendorPrefixes(domSupport, win) {\n  var prefixes = {\n    animationend: makePrefixMap('Animation', 'AnimationEnd'),\n    transitionend: makePrefixMap('Transition', 'TransitionEnd')\n  };\n  if (domSupport) {\n    if (!('AnimationEvent' in win)) {\n      delete prefixes.animationend.animation;\n    }\n    if (!('TransitionEvent' in win)) {\n      delete prefixes.transitionend.transition;\n    }\n  }\n  return prefixes;\n}\nvar vendorPrefixes = getVendorPrefixes(canUseDOM(), typeof window !== 'undefined' ? window : {});\nvar style = {};\nif (canUseDOM()) {\n  var _document$createEleme = document.createElement('div');\n  style = _document$createEleme.style;\n}\nvar prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  }\n  var prefixMap = vendorPrefixes[eventName];\n  if (prefixMap) {\n    var stylePropList = Object.keys(prefixMap);\n    var len = stylePropList.length;\n    for (var i = 0; i < len; i += 1) {\n      var styleProp = stylePropList[i];\n      if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n        prefixedEventNames[eventName] = prefixMap[styleProp];\n        return prefixedEventNames[eventName];\n      }\n    }\n  }\n  return '';\n}\nvar internalAnimationEndName = getVendorPrefixedEventName('animationend');\nvar internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport var animationEndName = internalAnimationEndName || 'animationend';\nexport var transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n  if (!transitionName) return null;\n  if (_typeof(transitionName) === 'object') {\n    var type = transitionType.replace(/-\\w/g, function (match) {\n      return match[1].toUpperCase();\n    });\n    return transitionName[type];\n  }\n  return \"\".concat(transitionName, \"-\").concat(transitionType);\n}","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { useEffect, useLayoutEffect } from 'react';\n\n// It's safe to use `useLayoutEffect` but the warning is annoying\nvar useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","var raf = function raf(callback) {\n  return +setTimeout(callback, 16);\n};\nvar caf = function caf(num) {\n  return clearTimeout(num);\n};\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n  raf = function raf(callback) {\n    return window.requestAnimationFrame(callback);\n  };\n  caf = function caf(handle) {\n    return window.cancelAnimationFrame(handle);\n  };\n}\nvar rafUUID = 0;\nvar rafIds = new Map();\nfunction cleanup(id) {\n  rafIds.delete(id);\n}\nvar wrapperRaf = function wrapperRaf(callback) {\n  var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  rafUUID += 1;\n  var id = rafUUID;\n  function callRef(leftTimes) {\n    if (leftTimes === 0) {\n      // Clean up\n      cleanup(id);\n\n      // Trigger\n      callback();\n    } else {\n      // Next raf\n      var realId = raf(function () {\n        callRef(leftTimes - 1);\n      });\n\n      // Bind real raf id\n      rafIds.set(id, realId);\n    }\n  }\n  callRef(times);\n  return id;\n};\nwrapperRaf.cancel = function (id) {\n  var realId = rafIds.get(id);\n  cleanup(id);\n  return caf(realId);\n};\nif (process.env.NODE_ENV !== 'production') {\n  wrapperRaf.ids = function () {\n    return rafIds;\n  };\n}\nexport default wrapperRaf;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useState from \"rc-util/es/hooks/useState\";\nimport * as React from 'react';\nimport { STEP_ACTIVATED, STEP_ACTIVE, STEP_NONE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useNextFrame from \"./useNextFrame\";\nvar FULL_STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\nvar SIMPLE_STEP_QUEUE = [STEP_PREPARE, STEP_PREPARED];\n\n/** Skip current step */\nexport var SkipStep = false;\n/** Current step should be update in */\nexport var DoStep = true;\nexport function isActive(step) {\n  return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default (function (status, prepareOnly, callback) {\n  var _useState = useState(STEP_NONE),\n    _useState2 = _slicedToArray(_useState, 2),\n    step = _useState2[0],\n    setStep = _useState2[1];\n  var _useNextFrame = useNextFrame(),\n    _useNextFrame2 = _slicedToArray(_useNextFrame, 2),\n    nextFrame = _useNextFrame2[0],\n    cancelNextFrame = _useNextFrame2[1];\n  function startQueue() {\n    setStep(STEP_PREPARE, true);\n  }\n  var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;\n  useIsomorphicLayoutEffect(function () {\n    if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n      var index = STEP_QUEUE.indexOf(step);\n      var nextStep = STEP_QUEUE[index + 1];\n      var result = callback(step);\n      if (result === SkipStep) {\n        // Skip when no needed\n        setStep(nextStep, true);\n      } else if (nextStep) {\n        // Do as frame for step update\n        nextFrame(function (info) {\n          function doNext() {\n            // Skip since current queue is ood\n            if (info.isCanceled()) return;\n            setStep(nextStep, true);\n          }\n          if (result === true) {\n            doNext();\n          } else {\n            // Only promise should be async\n            Promise.resolve(result).then(doNext);\n          }\n        });\n      }\n    }\n  }, [status, step]);\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [startQueue, step];\n});","import raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nexport default (function () {\n  var nextFrameRef = React.useRef(null);\n  function cancelNextFrame() {\n    raf.cancel(nextFrameRef.current);\n  }\n  function nextFrame(callback) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n    cancelNextFrame();\n    var nextFrameId = raf(function () {\n      if (delay <= 1) {\n        callback({\n          isCanceled: function isCanceled() {\n            return nextFrameId !== nextFrameRef.current;\n          }\n        });\n      } else {\n        nextFrame(callback, delay - 1);\n      }\n    });\n    nextFrameRef.current = nextFrameId;\n  }\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [nextFrame, cancelNextFrame];\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEvent } from 'rc-util';\nimport useState from \"rc-util/es/hooks/useState\";\nimport useSyncState from \"rc-util/es/hooks/useSyncState\";\nimport * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { STATUS_APPEAR, STATUS_ENTER, STATUS_LEAVE, STATUS_NONE, STEP_ACTIVE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useStepQueue, { DoStep, isActive, SkipStep } from \"./useStepQueue\";\nexport default function useStatus(supportMotion, visible, getElement, _ref) {\n  var _ref$motionEnter = _ref.motionEnter,\n    motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,\n    _ref$motionAppear = _ref.motionAppear,\n    motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,\n    _ref$motionLeave = _ref.motionLeave,\n    motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,\n    motionDeadline = _ref.motionDeadline,\n    motionLeaveImmediately = _ref.motionLeaveImmediately,\n    onAppearPrepare = _ref.onAppearPrepare,\n    onEnterPrepare = _ref.onEnterPrepare,\n    onLeavePrepare = _ref.onLeavePrepare,\n    onAppearStart = _ref.onAppearStart,\n    onEnterStart = _ref.onEnterStart,\n    onLeaveStart = _ref.onLeaveStart,\n    onAppearActive = _ref.onAppearActive,\n    onEnterActive = _ref.onEnterActive,\n    onLeaveActive = _ref.onLeaveActive,\n    onAppearEnd = _ref.onAppearEnd,\n    onEnterEnd = _ref.onEnterEnd,\n    onLeaveEnd = _ref.onLeaveEnd,\n    onVisibleChanged = _ref.onVisibleChanged;\n  // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n  var _useState = useState(),\n    _useState2 = _slicedToArray(_useState, 2),\n    asyncVisible = _useState2[0],\n    setAsyncVisible = _useState2[1];\n  var _useSyncState = useSyncState(STATUS_NONE),\n    _useSyncState2 = _slicedToArray(_useSyncState, 2),\n    getStatus = _useSyncState2[0],\n    setStatus = _useSyncState2[1];\n  var _useState3 = useState(null),\n    _useState4 = _slicedToArray(_useState3, 2),\n    style = _useState4[0],\n    setStyle = _useState4[1];\n  var currentStatus = getStatus();\n  var mountedRef = useRef(false);\n  var deadlineRef = useRef(null);\n\n  // =========================== Dom Node ===========================\n  function getDomElement() {\n    return getElement();\n  }\n\n  // ========================== Motion End ==========================\n  var activeRef = useRef(false);\n\n  /**\n   * Clean up status & style\n   */\n  function updateMotionEndStatus() {\n    setStatus(STATUS_NONE);\n    setStyle(null, true);\n  }\n  var onInternalMotionEnd = useEvent(function (event) {\n    var status = getStatus();\n    // Do nothing since not in any transition status.\n    // This may happen when `motionDeadline` trigger.\n    if (status === STATUS_NONE) {\n      return;\n    }\n    var element = getDomElement();\n    if (event && !event.deadline && event.target !== element) {\n      // event exists\n      // not initiated by deadline\n      // transitionEnd not fired by inner elements\n      return;\n    }\n    var currentActive = activeRef.current;\n    var canEnd;\n    if (status === STATUS_APPEAR && currentActive) {\n      canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);\n    } else if (status === STATUS_ENTER && currentActive) {\n      canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);\n    } else if (status === STATUS_LEAVE && currentActive) {\n      canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);\n    }\n\n    // Only update status when `canEnd` and not destroyed\n    if (currentActive && canEnd !== false) {\n      updateMotionEndStatus();\n    }\n  });\n  var _useDomMotionEvents = useDomMotionEvents(onInternalMotionEnd),\n    _useDomMotionEvents2 = _slicedToArray(_useDomMotionEvents, 1),\n    patchMotionEvents = _useDomMotionEvents2[0];\n\n  // ============================= Step =============================\n  var getEventHandlers = function getEventHandlers(targetStatus) {\n    switch (targetStatus) {\n      case STATUS_APPEAR:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onAppearPrepare), STEP_START, onAppearStart), STEP_ACTIVE, onAppearActive);\n      case STATUS_ENTER:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onEnterPrepare), STEP_START, onEnterStart), STEP_ACTIVE, onEnterActive);\n      case STATUS_LEAVE:\n        return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onLeavePrepare), STEP_START, onLeaveStart), STEP_ACTIVE, onLeaveActive);\n      default:\n        return {};\n    }\n  };\n  var eventHandlers = React.useMemo(function () {\n    return getEventHandlers(currentStatus);\n  }, [currentStatus]);\n  var _useStepQueue = useStepQueue(currentStatus, !supportMotion, function (newStep) {\n      // Only prepare step can be skip\n      if (newStep === STEP_PREPARE) {\n        var onPrepare = eventHandlers[STEP_PREPARE];\n        if (!onPrepare) {\n          return SkipStep;\n        }\n        return onPrepare(getDomElement());\n      }\n\n      // Rest step is sync update\n      if (step in eventHandlers) {\n        var _eventHandlers$step;\n        setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);\n      }\n      if (step === STEP_ACTIVE && currentStatus !== STATUS_NONE) {\n        // Patch events when motion needed\n        patchMotionEvents(getDomElement());\n        if (motionDeadline > 0) {\n          clearTimeout(deadlineRef.current);\n          deadlineRef.current = setTimeout(function () {\n            onInternalMotionEnd({\n              deadline: true\n            });\n          }, motionDeadline);\n        }\n      }\n      if (step === STEP_PREPARED) {\n        updateMotionEndStatus();\n      }\n      return DoStep;\n    }),\n    _useStepQueue2 = _slicedToArray(_useStepQueue, 2),\n    startStep = _useStepQueue2[0],\n    step = _useStepQueue2[1];\n  var active = isActive(step);\n  activeRef.current = active;\n\n  // ============================ Status ============================\n  var visibleRef = useRef(null);\n\n  // Update with new status\n  useIsomorphicLayoutEffect(function () {\n    // When use Suspense, the `visible` will repeat trigger,\n    // But not real change of the `visible`, we need to skip it.\n    // https://github.com/ant-design/ant-design/issues/44379\n    if (mountedRef.current && visibleRef.current === visible) {\n      return;\n    }\n    setAsyncVisible(visible);\n    var isMounted = mountedRef.current;\n    mountedRef.current = true;\n\n    // if (!supportMotion) {\n    //   return;\n    // }\n\n    var nextStatus;\n\n    // Appear\n    if (!isMounted && visible && motionAppear) {\n      nextStatus = STATUS_APPEAR;\n    }\n\n    // Enter\n    if (isMounted && visible && motionEnter) {\n      nextStatus = STATUS_ENTER;\n    }\n\n    // Leave\n    if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n      nextStatus = STATUS_LEAVE;\n    }\n    var nextEventHandlers = getEventHandlers(nextStatus);\n\n    // Update to next status\n    if (nextStatus && (supportMotion || nextEventHandlers[STEP_PREPARE])) {\n      setStatus(nextStatus);\n      startStep();\n    } else {\n      // Set back in case no motion but prev status has prepare step\n      setStatus(STATUS_NONE);\n    }\n    visibleRef.current = visible;\n  }, [visible]);\n\n  // ============================ Effect ============================\n  // Reset when motion changed\n  useEffect(function () {\n    if (\n    // Cancel appear\n    currentStatus === STATUS_APPEAR && !motionAppear ||\n    // Cancel enter\n    currentStatus === STATUS_ENTER && !motionEnter ||\n    // Cancel leave\n    currentStatus === STATUS_LEAVE && !motionLeave) {\n      setStatus(STATUS_NONE);\n    }\n  }, [motionAppear, motionEnter, motionLeave]);\n  useEffect(function () {\n    return function () {\n      mountedRef.current = false;\n      clearTimeout(deadlineRef.current);\n    };\n  }, []);\n\n  // Trigger `onVisibleChanged`\n  var firstMountChangeRef = React.useRef(false);\n  useEffect(function () {\n    // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n    if (asyncVisible) {\n      firstMountChangeRef.current = true;\n    }\n    if (asyncVisible !== undefined && currentStatus === STATUS_NONE) {\n      // Skip first render is invisible since it's nothing changed\n      if (firstMountChangeRef.current || asyncVisible) {\n        onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible);\n      }\n      firstMountChangeRef.current = true;\n    }\n  }, [asyncVisible, currentStatus]);\n\n  // ============================ Styles ============================\n  var mergedStyle = style;\n  if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n    mergedStyle = _objectSpread({\n      transition: 'none'\n    }, mergedStyle);\n  }\n  return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useEvent from \"./useEvent\";\n/**\n * Same as React.useState but will always get latest state.\n * This is useful when React merge multiple state updates into one.\n * e.g. onTransitionEnd trigger multiple event at once will be merged state update in React.\n */\nexport default function useSyncState(defaultValue) {\n  var _React$useReducer = React.useReducer(function (x) {\n      return x + 1;\n    }, 0),\n    _React$useReducer2 = _slicedToArray(_React$useReducer, 2),\n    forceUpdate = _React$useReducer2[1];\n  var currentValueRef = React.useRef(defaultValue);\n  var getValue = useEvent(function () {\n    return currentValueRef.current;\n  });\n  var setValue = useEvent(function (updater) {\n    currentValueRef.current = typeof updater === 'function' ? updater(currentValueRef.current) : updater;\n    forceUpdate();\n  });\n  return [getValue, setValue];\n}","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (function (onInternalMotionEnd) {\n  var cacheElementRef = useRef();\n\n  // Remove events\n  function removeMotionEvents(element) {\n    if (element) {\n      element.removeEventListener(transitionEndName, onInternalMotionEnd);\n      element.removeEventListener(animationEndName, onInternalMotionEnd);\n    }\n  }\n\n  // Patch events\n  function patchMotionEvents(element) {\n    if (cacheElementRef.current && cacheElementRef.current !== element) {\n      removeMotionEvents(cacheElementRef.current);\n    }\n    if (element && element !== cacheElementRef.current) {\n      element.addEventListener(transitionEndName, onInternalMotionEnd);\n      element.addEventListener(animationEndName, onInternalMotionEnd);\n\n      // Save as cache in case dom removed trigger by `motionDeadline`\n      cacheElementRef.current = element;\n    }\n  }\n\n  // Clean up when removed\n  React.useEffect(function () {\n    return function () {\n      removeMotionEvents(cacheElementRef.current);\n    };\n  }, []);\n  return [patchMotionEvents, removeMotionEvents];\n});","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport classNames from 'classnames';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { fillRef, getNodeRef, supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport { Context } from \"./context\";\nimport DomWrapper from \"./DomWrapper\";\nimport useStatus from \"./hooks/useStatus\";\nimport { isActive } from \"./hooks/useStepQueue\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport { getTransitionName, supportTransition } from \"./util/motion\";\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n  var transitionSupport = config;\n  if (_typeof(config) === 'object') {\n    transitionSupport = config.transitionSupport;\n  }\n  function isSupportTransition(props, contextMotion) {\n    return !!(props.motionName && transitionSupport && contextMotion !== false);\n  }\n  var CSSMotion = /*#__PURE__*/React.forwardRef(function (props, ref) {\n    var _props$visible = props.visible,\n      visible = _props$visible === void 0 ? true : _props$visible,\n      _props$removeOnLeave = props.removeOnLeave,\n      removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,\n      forceRender = props.forceRender,\n      children = props.children,\n      motionName = props.motionName,\n      leavedClassName = props.leavedClassName,\n      eventProps = props.eventProps;\n    var _React$useContext = React.useContext(Context),\n      contextMotion = _React$useContext.motion;\n    var supportMotion = isSupportTransition(props, contextMotion);\n\n    // Ref to the react node, it may be a HTMLElement\n    var nodeRef = useRef();\n    // Ref to the dom wrapper in case ref can not pass to HTMLElement\n    var wrapperNodeRef = useRef();\n    function getDomElement() {\n      try {\n        // Here we're avoiding call for findDOMNode since it's deprecated\n        // in strict mode. We're calling it only when node ref is not\n        // an instance of DOM HTMLElement. Otherwise use\n        // findDOMNode as a final resort\n        return nodeRef.current instanceof HTMLElement ? nodeRef.current : findDOMNode(wrapperNodeRef.current);\n      } catch (e) {\n        // Only happen when `motionDeadline` trigger but element removed.\n        return null;\n      }\n    }\n    var _useStatus = useStatus(supportMotion, visible, getDomElement, props),\n      _useStatus2 = _slicedToArray(_useStatus, 4),\n      status = _useStatus2[0],\n      statusStep = _useStatus2[1],\n      statusStyle = _useStatus2[2],\n      mergedVisible = _useStatus2[3];\n\n    // Record whether content has rendered\n    // Will return null for un-rendered even when `removeOnLeave={false}`\n    var renderedRef = React.useRef(mergedVisible);\n    if (mergedVisible) {\n      renderedRef.current = true;\n    }\n\n    // ====================== Refs ======================\n    var setNodeRef = React.useCallback(function (node) {\n      nodeRef.current = node;\n      fillRef(ref, node);\n    }, [ref]);\n\n    // ===================== Render =====================\n    var motionChildren;\n    var mergedProps = _objectSpread(_objectSpread({}, eventProps), {}, {\n      visible: visible\n    });\n    if (!children) {\n      // No children\n      motionChildren = null;\n    } else if (status === STATUS_NONE) {\n      // Stable children\n      if (mergedVisible) {\n        motionChildren = children(_objectSpread({}, mergedProps), setNodeRef);\n      } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          className: leavedClassName\n        }), setNodeRef);\n      } else if (forceRender || !removeOnLeave && !leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          style: {\n            display: 'none'\n          }\n        }), setNodeRef);\n      } else {\n        motionChildren = null;\n      }\n    } else {\n      // In motion\n      var statusSuffix;\n      if (statusStep === STEP_PREPARE) {\n        statusSuffix = 'prepare';\n      } else if (isActive(statusStep)) {\n        statusSuffix = 'active';\n      } else if (statusStep === STEP_START) {\n        statusSuffix = 'start';\n      }\n      var motionCls = getTransitionName(motionName, \"\".concat(status, \"-\").concat(statusSuffix));\n      motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n        className: classNames(getTransitionName(motionName, status), _defineProperty(_defineProperty({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')),\n        style: statusStyle\n      }), setNodeRef);\n    }\n\n    // Auto inject ref if child node not have `ref` props\n    if ( /*#__PURE__*/React.isValidElement(motionChildren) && supportRef(motionChildren)) {\n      var originNodeRef = getNodeRef(motionChildren);\n      if (!originNodeRef) {\n        motionChildren = /*#__PURE__*/React.cloneElement(motionChildren, {\n          ref: setNodeRef\n        });\n      }\n    }\n    return /*#__PURE__*/React.createElement(DomWrapper, {\n      ref: wrapperNodeRef\n    }, motionChildren);\n  });\n  CSSMotion.displayName = 'CSSMotion';\n  return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  var keyObj;\n  if (key && _typeof(key) === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n  return _objectSpread(_objectSpread({}, keyObj), {}, {\n    key: String(keyObj.key)\n  });\n}\nexport function parseKeys() {\n  var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n  var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var list = [];\n  var currentIndex = 0;\n  var currentLen = currentKeys.length;\n  var prevKeyObjects = parseKeys(prevKeys);\n  var currentKeyObjects = parseKeys(currentKeys);\n\n  // Check prev keys to insert or keep\n  prevKeyObjects.forEach(function (keyObj) {\n    var hit = false;\n    for (var i = currentIndex; i < currentLen; i += 1) {\n      var currentKeyObj = currentKeyObjects[i];\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n            return _objectSpread(_objectSpread({}, obj), {}, {\n              status: STATUS_ADD\n            });\n          }));\n          currentIndex = i;\n        }\n        list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n          status: STATUS_KEEP\n        }));\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    }\n\n    // If not hit, it means key is removed\n    if (!hit) {\n      list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n        status: STATUS_REMOVE\n      }));\n    }\n  });\n\n  // Add rest to the list\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n      return _objectSpread(_objectSpread({}, obj), {}, {\n        status: STATUS_ADD\n      });\n    }));\n  }\n\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n  var keys = {};\n  list.forEach(function (_ref) {\n    var key = _ref.key;\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  var duplicatedKeys = Object.keys(keys).filter(function (key) {\n    return keys[key] > 1;\n  });\n  duplicatedKeys.forEach(function (matchKey) {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(function (_ref2) {\n      var key = _ref2.key,\n        status = _ref2.status;\n      return key !== matchKey || status !== STATUS_REMOVE;\n    });\n\n    // Update `STATUS_ADD` to `STATUS_KEEP`\n    list.forEach(function (node) {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"component\", \"children\", \"onVisibleChanged\", \"onAllRemoved\"],\n  _excluded2 = [\"status\"];\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion from \"./CSSMotion\";\nimport { diffKeys, parseKeys, STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED } from \"./util/diff\";\nimport { supportTransition } from \"./util/motion\";\nvar MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport) {\n  var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OriginCSSMotion;\n  var CSSMotionList = /*#__PURE__*/function (_React$Component) {\n    _inherits(CSSMotionList, _React$Component);\n    var _super = _createSuper(CSSMotionList);\n    function CSSMotionList() {\n      var _this;\n      _classCallCheck(this, CSSMotionList);\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      _this = _super.call.apply(_super, [this].concat(args));\n      _defineProperty(_assertThisInitialized(_this), \"state\", {\n        keyEntities: []\n      });\n      // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n      _defineProperty(_assertThisInitialized(_this), \"removeKey\", function (removeKey) {\n        _this.setState(function (prevState) {\n          var nextKeyEntities = prevState.keyEntities.map(function (entity) {\n            if (entity.key !== removeKey) return entity;\n            return _objectSpread(_objectSpread({}, entity), {}, {\n              status: STATUS_REMOVED\n            });\n          });\n          return {\n            keyEntities: nextKeyEntities\n          };\n        }, function () {\n          var keyEntities = _this.state.keyEntities;\n          var restKeysCount = keyEntities.filter(function (_ref) {\n            var status = _ref.status;\n            return status !== STATUS_REMOVED;\n          }).length;\n          if (restKeysCount === 0 && _this.props.onAllRemoved) {\n            _this.props.onAllRemoved();\n          }\n        });\n      });\n      return _this;\n    }\n    _createClass(CSSMotionList, [{\n      key: \"render\",\n      value: function render() {\n        var _this2 = this;\n        var keyEntities = this.state.keyEntities;\n        var _this$props = this.props,\n          component = _this$props.component,\n          children = _this$props.children,\n          _onVisibleChanged = _this$props.onVisibleChanged,\n          onAllRemoved = _this$props.onAllRemoved,\n          restProps = _objectWithoutProperties(_this$props, _excluded);\n        var Component = component || React.Fragment;\n        var motionProps = {};\n        MOTION_PROP_NAMES.forEach(function (prop) {\n          motionProps[prop] = restProps[prop];\n          delete restProps[prop];\n        });\n        delete restProps.keys;\n        return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {\n          var status = _ref2.status,\n            eventProps = _objectWithoutProperties(_ref2, _excluded2);\n          var visible = status === STATUS_ADD || status === STATUS_KEEP;\n          return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n            key: eventProps.key,\n            visible: visible,\n            eventProps: eventProps,\n            onVisibleChanged: function onVisibleChanged(changedVisible) {\n              _onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, {\n                key: eventProps.key\n              });\n              if (!changedVisible) {\n                _this2.removeKey(eventProps.key);\n              }\n            }\n          }), function (props, ref) {\n            return children(_objectSpread(_objectSpread({}, props), {}, {\n              index: index\n            }), ref);\n          });\n        }));\n      }\n    }], [{\n      key: \"getDerivedStateFromProps\",\n      value: function getDerivedStateFromProps(_ref3, _ref4) {\n        var keys = _ref3.keys;\n        var keyEntities = _ref4.keyEntities;\n        var parsedKeyObjects = parseKeys(keys);\n        var mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n        return {\n          keyEntities: mixedKeyEntities.filter(function (entity) {\n            var prevEntity = keyEntities.find(function (_ref5) {\n              var key = _ref5.key;\n              return entity.key === key;\n            });\n\n            // Remove if already mark as removed\n            if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n              return false;\n            }\n            return true;\n          })\n        };\n      }\n    }]);\n    return CSSMotionList;\n  }(React.Component);\n  _defineProperty(CSSMotionList, \"defaultProps\", {\n    component: 'div'\n  });\n  return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import { FastColor } from '@ant-design/fast-color';\nfunction isStableColor(color) {\n  return color >= 0 && color <= 255;\n}\nfunction getAlphaColor(frontColor, backgroundColor) {\n  const {\n    r: fR,\n    g: fG,\n    b: fB,\n    a: originAlpha\n  } = new FastColor(frontColor).toRgb();\n  if (originAlpha < 1) {\n    return frontColor;\n  }\n  const {\n    r: bR,\n    g: bG,\n    b: bB\n  } = new FastColor(backgroundColor).toRgb();\n  for (let fA = 0.01; fA <= 1; fA += 0.01) {\n    const r = Math.round((fR - bR * (1 - fA)) / fA);\n    const g = Math.round((fG - bG * (1 - fA)) / fA);\n    const b = Math.round((fB - bB * (1 - fA)) / fA);\n    if (isStableColor(r) && isStableColor(g) && isStableColor(b)) {\n      return new FastColor({\n        r,\n        g,\n        b,\n        a: Math.round(fA * 100) / 100\n      }).toRgbString();\n    }\n  }\n  // fallback\n  /* istanbul ignore next */\n  return new FastColor({\n    r: fR,\n    g: fG,\n    b: fB,\n    a: 1\n  }).toRgbString();\n}\nexport default getAlphaColor;","var __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport { FastColor } from '@ant-design/fast-color';\nimport seedToken from '../themes/seed';\nimport getAlphaColor from './getAlphaColor';\n/**\n * Seed (designer) > Derivative (designer) > Alias (developer).\n *\n * Merge seed & derivative & override token and generate alias token for developer.\n */\nexport default function formatToken(derivativeToken) {\n  const {\n      override\n    } = derivativeToken,\n    restToken = __rest(derivativeToken, [\"override\"]);\n  const overrideTokens = Object.assign({}, override);\n  Object.keys(seedToken).forEach(token => {\n    delete overrideTokens[token];\n  });\n  const mergedToken = Object.assign(Object.assign({}, restToken), overrideTokens);\n  const screenXS = 480;\n  const screenSM = 576;\n  const screenMD = 768;\n  const screenLG = 992;\n  const screenXL = 1200;\n  const screenXXL = 1600;\n  // Motion\n  if (mergedToken.motion === false) {\n    const fastDuration = '0s';\n    mergedToken.motionDurationFast = fastDuration;\n    mergedToken.motionDurationMid = fastDuration;\n    mergedToken.motionDurationSlow = fastDuration;\n  }\n  // Generate alias token\n  const aliasToken = Object.assign(Object.assign(Object.assign({}, mergedToken), {\n    // ============== Background ============== //\n    colorFillContent: mergedToken.colorFillSecondary,\n    colorFillContentHover: mergedToken.colorFill,\n    colorFillAlter: mergedToken.colorFillQuaternary,\n    colorBgContainerDisabled: mergedToken.colorFillTertiary,\n    // ============== Split ============== //\n    colorBorderBg: mergedToken.colorBgContainer,\n    colorSplit: getAlphaColor(mergedToken.colorBorderSecondary, mergedToken.colorBgContainer),\n    // ============== Text ============== //\n    colorTextPlaceholder: mergedToken.colorTextQuaternary,\n    colorTextDisabled: mergedToken.colorTextQuaternary,\n    colorTextHeading: mergedToken.colorText,\n    colorTextLabel: mergedToken.colorTextSecondary,\n    colorTextDescription: mergedToken.colorTextTertiary,\n    colorTextLightSolid: mergedToken.colorWhite,\n    colorHighlight: mergedToken.colorError,\n    colorBgTextHover: mergedToken.colorFillSecondary,\n    colorBgTextActive: mergedToken.colorFill,\n    colorIcon: mergedToken.colorTextTertiary,\n    colorIconHover: mergedToken.colorText,\n    colorErrorOutline: getAlphaColor(mergedToken.colorErrorBg, mergedToken.colorBgContainer),\n    colorWarningOutline: getAlphaColor(mergedToken.colorWarningBg, mergedToken.colorBgContainer),\n    // Font\n    fontSizeIcon: mergedToken.fontSizeSM,\n    // Line\n    lineWidthFocus: mergedToken.lineWidth * 3,\n    // Control\n    lineWidth: mergedToken.lineWidth,\n    controlOutlineWidth: mergedToken.lineWidth * 2,\n    // Checkbox size and expand icon size\n    controlInteractiveSize: mergedToken.controlHeight / 2,\n    controlItemBgHover: mergedToken.colorFillTertiary,\n    controlItemBgActive: mergedToken.colorPrimaryBg,\n    controlItemBgActiveHover: mergedToken.colorPrimaryBgHover,\n    controlItemBgActiveDisabled: mergedToken.colorFill,\n    controlTmpOutline: mergedToken.colorFillQuaternary,\n    controlOutline: getAlphaColor(mergedToken.colorPrimaryBg, mergedToken.colorBgContainer),\n    lineType: mergedToken.lineType,\n    borderRadius: mergedToken.borderRadius,\n    borderRadiusXS: mergedToken.borderRadiusXS,\n    borderRadiusSM: mergedToken.borderRadiusSM,\n    borderRadiusLG: mergedToken.borderRadiusLG,\n    fontWeightStrong: 600,\n    opacityLoading: 0.65,\n    linkDecoration: 'none',\n    linkHoverDecoration: 'none',\n    linkFocusDecoration: 'none',\n    controlPaddingHorizontal: 12,\n    controlPaddingHorizontalSM: 8,\n    paddingXXS: mergedToken.sizeXXS,\n    paddingXS: mergedToken.sizeXS,\n    paddingSM: mergedToken.sizeSM,\n    padding: mergedToken.size,\n    paddingMD: mergedToken.sizeMD,\n    paddingLG: mergedToken.sizeLG,\n    paddingXL: mergedToken.sizeXL,\n    paddingContentHorizontalLG: mergedToken.sizeLG,\n    paddingContentVerticalLG: mergedToken.sizeMS,\n    paddingContentHorizontal: mergedToken.sizeMS,\n    paddingContentVertical: mergedToken.sizeSM,\n    paddingContentHorizontalSM: mergedToken.size,\n    paddingContentVerticalSM: mergedToken.sizeXS,\n    marginXXS: mergedToken.sizeXXS,\n    marginXS: mergedToken.sizeXS,\n    marginSM: mergedToken.sizeSM,\n    margin: mergedToken.size,\n    marginMD: mergedToken.sizeMD,\n    marginLG: mergedToken.sizeLG,\n    marginXL: mergedToken.sizeXL,\n    marginXXL: mergedToken.sizeXXL,\n    boxShadow: `\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowSecondary: `\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowTertiary: `\n      0 1px 2px 0 rgba(0, 0, 0, 0.03),\n      0 1px 6px -1px rgba(0, 0, 0, 0.02),\n      0 2px 4px 0 rgba(0, 0, 0, 0.02)\n    `,\n    screenXS,\n    screenXSMin: screenXS,\n    screenXSMax: screenSM - 1,\n    screenSM,\n    screenSMMin: screenSM,\n    screenSMMax: screenMD - 1,\n    screenMD,\n    screenMDMin: screenMD,\n    screenMDMax: screenLG - 1,\n    screenLG,\n    screenLGMin: screenLG,\n    screenLGMax: screenXL - 1,\n    screenXL,\n    screenXLMin: screenXL,\n    screenXLMax: screenXXL - 1,\n    screenXXL,\n    screenXXLMin: screenXXL,\n    boxShadowPopoverArrow: '2px 2px 5px rgba(0, 0, 0, 0.05)',\n    boxShadowCard: `\n      0 1px 2px -2px ${new FastColor('rgba(0, 0, 0, 0.16)').toRgbString()},\n      0 3px 6px 0 ${new FastColor('rgba(0, 0, 0, 0.12)').toRgbString()},\n      0 5px 12px 4px ${new FastColor('rgba(0, 0, 0, 0.09)').toRgbString()}\n    `,\n    boxShadowDrawerRight: `\n      -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowDrawerLeft: `\n      6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowDrawerUp: `\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowDrawerDown: `\n      0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n    `,\n    boxShadowTabsOverflowLeft: 'inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowRight: 'inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowTop: 'inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)',\n    boxShadowTabsOverflowBottom: 'inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)'\n  }), overrideTokens);\n  return aliasToken;\n}","var __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport React from 'react';\nimport { useCacheToken } from '@ant-design/cssinjs';\nimport version from '../version';\nimport { defaultTheme, DesignTokenContext } from './context';\nimport defaultSeedToken from './themes/seed';\nimport formatToken from './util/alias';\nexport const unitless = {\n  lineHeight: true,\n  lineHeightSM: true,\n  lineHeightLG: true,\n  lineHeightHeading1: true,\n  lineHeightHeading2: true,\n  lineHeightHeading3: true,\n  lineHeightHeading4: true,\n  lineHeightHeading5: true,\n  opacityLoading: true,\n  fontWeightStrong: true,\n  zIndexPopupBase: true,\n  zIndexBase: true,\n  opacityImage: true\n};\nexport const ignore = {\n  size: true,\n  sizeSM: true,\n  sizeLG: true,\n  sizeMD: true,\n  sizeXS: true,\n  sizeXXS: true,\n  sizeMS: true,\n  sizeXL: true,\n  sizeXXL: true,\n  sizeUnit: true,\n  sizeStep: true,\n  motionBase: true,\n  motionUnit: true\n};\nconst preserve = {\n  screenXS: true,\n  screenXSMin: true,\n  screenXSMax: true,\n  screenSM: true,\n  screenSMMin: true,\n  screenSMMax: true,\n  screenMD: true,\n  screenMDMin: true,\n  screenMDMax: true,\n  screenLG: true,\n  screenLGMin: true,\n  screenLGMax: true,\n  screenXL: true,\n  screenXLMin: true,\n  screenXLMax: true,\n  screenXXL: true,\n  screenXXLMin: true\n};\nexport const getComputedToken = (originToken, overrideToken, theme) => {\n  const derivativeToken = theme.getDerivativeToken(originToken);\n  const {\n      override\n    } = overrideToken,\n    components = __rest(overrideToken, [\"override\"]);\n  // Merge with override\n  let mergedDerivativeToken = Object.assign(Object.assign({}, derivativeToken), {\n    override\n  });\n  // Format if needed\n  mergedDerivativeToken = formatToken(mergedDerivativeToken);\n  if (components) {\n    Object.entries(components).forEach(([key, value]) => {\n      const {\n          theme: componentTheme\n        } = value,\n        componentTokens = __rest(value, [\"theme\"]);\n      let mergedComponentToken = componentTokens;\n      if (componentTheme) {\n        mergedComponentToken = getComputedToken(Object.assign(Object.assign({}, mergedDerivativeToken), componentTokens), {\n          override: componentTokens\n        }, componentTheme);\n      }\n      mergedDerivativeToken[key] = mergedComponentToken;\n    });\n  }\n  return mergedDerivativeToken;\n};\n// ================================== Hook ==================================\nexport default function useToken() {\n  const {\n    token: rootDesignToken,\n    hashed,\n    theme,\n    override,\n    cssVar\n  } = React.useContext(DesignTokenContext);\n  const salt = `${version}-${hashed || ''}`;\n  const mergedTheme = theme || defaultTheme;\n  const [token, hashId, realToken] = useCacheToken(mergedTheme, [defaultSeedToken, rootDesignToken], {\n    salt,\n    override,\n    getComputedToken,\n    // formatToken will not be consumed after 1.15.0 with getComputedToken.\n    // But token will break if @ant-design/cssinjs is under 1.15.0 without it\n    formatToken,\n    cssVar: cssVar && {\n      prefix: cssVar.prefix,\n      key: cssVar.key,\n      unitless,\n      ignore,\n      preserve\n    }\n  });\n  return [mergedTheme, realToken, hashed ? hashId : '', token, cssVar];\n}","export default '5.25.4';","\"use client\";\n\nimport * as React from 'react';\nimport { Provider as MotionProvider } from 'rc-motion';\nimport { useToken } from '../theme/internal';\nexport default function MotionWrapper(props) {\n  const {\n    children\n  } = props;\n  const [, token] = useToken();\n  const {\n    motion\n  } = token;\n  const needWrapMotionProviderRef = React.useRef(false);\n  needWrapMotionProviderRef.current = needWrapMotionProviderRef.current || motion === false;\n  if (needWrapMotionProviderRef.current) {\n    return /*#__PURE__*/React.createElement(MotionProvider, {\n      motion: motion\n    }, children);\n  }\n  return children;\n}","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\n/**\n * Warning for ConfigProviderProps.\n * This will be empty function in production.\n */\nconst PropWarning = /*#__PURE__*/React.memo(({\n  dropdownMatchSelectWidth\n}) => {\n  const warning = devUseWarning('ConfigProvider');\n  warning.deprecated(dropdownMatchSelectWidth === undefined, 'dropdownMatchSelectWidth', 'popupMatchSelectWidth');\n  return null;\n});\nif (process.env.NODE_ENV !== 'production') {\n  PropWarning.displayName = 'PropWarning';\n}\nexport default process.env.NODE_ENV !== 'production' ? PropWarning : () => null;","\"use client\";\n\nimport { unit } from '@ant-design/cssinjs';\nexport const textEllipsis = {\n  overflow: 'hidden',\n  whiteSpace: 'nowrap',\n  textOverflow: 'ellipsis'\n};\nexport const resetComponent = (token, needInheritFontFamily = false) => ({\n  boxSizing: 'border-box',\n  margin: 0,\n  padding: 0,\n  color: token.colorText,\n  fontSize: token.fontSize,\n  // font-variant: @font-variant-base;\n  lineHeight: token.lineHeight,\n  listStyle: 'none',\n  // font-feature-settings: @font-feature-settings-base;\n  fontFamily: needInheritFontFamily ? 'inherit' : token.fontFamily\n});\nexport const resetIcon = () => ({\n  display: 'inline-flex',\n  alignItems: 'center',\n  color: 'inherit',\n  fontStyle: 'normal',\n  lineHeight: 0,\n  textAlign: 'center',\n  textTransform: 'none',\n  // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n  verticalAlign: '-0.125em',\n  textRendering: 'optimizeLegibility',\n  '-webkit-font-smoothing': 'antialiased',\n  '-moz-osx-font-smoothing': 'grayscale',\n  '> *': {\n    lineHeight: 1\n  },\n  svg: {\n    display: 'inline-block'\n  }\n});\nexport const clearFix = () => ({\n  // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n  '&::before': {\n    display: 'table',\n    content: '\"\"'\n  },\n  '&::after': {\n    // https://github.com/ant-design/ant-design/issues/21864\n    display: 'table',\n    clear: 'both',\n    content: '\"\"'\n  }\n});\nexport const genLinkStyle = token => ({\n  a: {\n    color: token.colorLink,\n    textDecoration: token.linkDecoration,\n    backgroundColor: 'transparent',\n    // remove the gray background on active links in IE 10.\n    outline: 'none',\n    cursor: 'pointer',\n    transition: `color ${token.motionDurationSlow}`,\n    '-webkit-text-decoration-skip': 'objects',\n    // remove gaps in links underline in iOS 8+ and Safari 8+.\n    '&:hover': {\n      color: token.colorLinkHover\n    },\n    '&:active': {\n      color: token.colorLinkActive\n    },\n    '&:active, &:hover': {\n      textDecoration: token.linkHoverDecoration,\n      outline: 0\n    },\n    // https://github.com/ant-design/ant-design/issues/22503\n    '&:focus': {\n      textDecoration: token.linkFocusDecoration,\n      outline: 0\n    },\n    '&[disabled]': {\n      color: token.colorTextDisabled,\n      cursor: 'not-allowed'\n    }\n  }\n});\nexport const genCommonStyle = (token, componentPrefixCls, rootCls, resetFont) => {\n  const prefixSelector = `[class^=\"${componentPrefixCls}\"], [class*=\" ${componentPrefixCls}\"]`;\n  const rootPrefixSelector = rootCls ? `.${rootCls}` : prefixSelector;\n  const resetStyle = {\n    boxSizing: 'border-box',\n    '&::before, &::after': {\n      boxSizing: 'border-box'\n    }\n  };\n  let resetFontStyle = {};\n  if (resetFont !== false) {\n    resetFontStyle = {\n      fontFamily: token.fontFamily,\n      fontSize: token.fontSize\n    };\n  }\n  return {\n    [rootPrefixSelector]: Object.assign(Object.assign(Object.assign({}, resetFontStyle), resetStyle), {\n      [prefixSelector]: resetStyle\n    })\n  };\n};\nexport const genFocusOutline = (token, offset) => ({\n  outline: `${unit(token.lineWidthFocus)} solid ${token.colorPrimaryBorder}`,\n  outlineOffset: offset !== null && offset !== void 0 ? offset : 1,\n  transition: 'outline-offset 0s, outline 0s'\n});\nexport const genFocusStyle = (token, offset) => ({\n  '&:focus-visible': Object.assign({}, genFocusOutline(token, offset))\n});\nexport const genIconStyle = iconPrefixCls => ({\n  [`.${iconPrefixCls}`]: Object.assign(Object.assign({}, resetIcon()), {\n    [`.${iconPrefixCls} .${iconPrefixCls}-icon`]: {\n      display: 'block'\n    }\n  })\n});\nexport const operationUnit = token => Object.assign(Object.assign({\n  // FIXME: This use link but is a operation unit. Seems should be a colorPrimary.\n  // And Typography use this to generate link style which should not do this.\n  color: token.colorLink,\n  textDecoration: token.linkDecoration,\n  outline: 'none',\n  cursor: 'pointer',\n  transition: `all ${token.motionDurationSlow}`,\n  border: 0,\n  padding: 0,\n  background: 'none',\n  userSelect: 'none'\n}, genFocusStyle(token)), {\n  '&:focus, &:hover': {\n    color: token.colorLinkHover\n  },\n  '&:active': {\n    color: token.colorLinkActive\n  }\n});","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { genIconStyle } from '../../style';\nimport useToken from '../useToken';\nconst useResetIconStyle = (iconPrefixCls, csp) => {\n  const [theme, token] = useToken();\n  // Generate style for icons\n  return useStyleRegister({\n    theme,\n    token,\n    hashId: '',\n    path: ['ant-design-icons', iconPrefixCls],\n    nonce: () => csp === null || csp === void 0 ? void 0 : csp.nonce,\n    layer: {\n      name: 'antd'\n    }\n  }, () => [genIconStyle(iconPrefixCls)]);\n};\nexport default useResetIconStyle;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport { createTheme, StyleContext as CssInJsStyleContext } from '@ant-design/cssinjs';\nimport IconContext from \"@ant-design/icons/es/components/Context\";\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport { merge } from \"rc-util/es/utils/set\";\nimport warning, { devUseWarning, WarningContext } from '../_util/warning';\nimport ValidateMessagesContext from '../form/validateMessagesContext';\nimport LocaleProvider, { ANT_MARK } from '../locale';\nimport LocaleContext from '../locale/context';\nimport defaultLocale from '../locale/en_US';\nimport { defaultTheme, DesignTokenContext } from '../theme/context';\nimport defaultSeedToken from '../theme/themes/seed';\nimport { ConfigConsumer, ConfigContext, defaultIconPrefixCls, defaultPrefixCls, Variants } from './context';\nimport { registerTheme } from './cssVariables';\nimport { DisabledContextProvider } from './DisabledContext';\nimport useConfig from './hooks/useConfig';\nimport useTheme from './hooks/useTheme';\nimport MotionWrapper from './MotionWrapper';\nimport PropWarning from './PropWarning';\nimport SizeContext, { SizeContextProvider } from './SizeContext';\nimport useStyle from './style';\nexport { Variants };\n/**\n * Since too many feedback using static method like `Modal.confirm` not getting theme, we record the\n * theme register info here to help developer get warning info.\n */\nlet existThemeConfig = false;\nexport const warnContext = process.env.NODE_ENV !== 'production' ? componentName => {\n  process.env.NODE_ENV !== \"production\" ? warning(!existThemeConfig, componentName, `Static function can not consume context like dynamic theme. Please use 'App' component instead.`) : void 0;\n} : /* istanbul ignore next */\nnull;\nexport { ConfigConsumer, ConfigContext, defaultPrefixCls, defaultIconPrefixCls };\nexport const configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale'];\n// These props is used by `useContext` directly in sub component\nconst PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'input', 'pagination', 'form', 'select', 'button'];\nlet globalPrefixCls;\nlet globalIconPrefixCls;\nlet globalTheme;\nlet globalHolderRender;\nfunction getGlobalPrefixCls() {\n  return globalPrefixCls || defaultPrefixCls;\n}\nfunction getGlobalIconPrefixCls() {\n  return globalIconPrefixCls || defaultIconPrefixCls;\n}\nfunction isLegacyTheme(theme) {\n  return Object.keys(theme).some(key => key.endsWith('Color'));\n}\nconst setGlobalConfig = props => {\n  const {\n    prefixCls,\n    iconPrefixCls,\n    theme,\n    holderRender\n  } = props;\n  if (prefixCls !== undefined) {\n    globalPrefixCls = prefixCls;\n  }\n  if (iconPrefixCls !== undefined) {\n    globalIconPrefixCls = iconPrefixCls;\n  }\n  if ('holderRender' in props) {\n    globalHolderRender = holderRender;\n  }\n  if (theme) {\n    if (isLegacyTheme(theme)) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', '`config` of css variable theme is not work in v5. Please use new `theme` config instead.') : void 0;\n      registerTheme(getGlobalPrefixCls(), theme);\n    } else {\n      globalTheme = theme;\n    }\n  }\n};\nexport const globalConfig = () => ({\n  getPrefixCls: (suffixCls, customizePrefixCls) => {\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    return suffixCls ? `${getGlobalPrefixCls()}-${suffixCls}` : getGlobalPrefixCls();\n  },\n  getIconPrefixCls: getGlobalIconPrefixCls,\n  getRootPrefixCls: () => {\n    // If Global prefixCls provided, use this\n    if (globalPrefixCls) {\n      return globalPrefixCls;\n    }\n    // Fallback to default prefixCls\n    return getGlobalPrefixCls();\n  },\n  getTheme: () => globalTheme,\n  holderRender: globalHolderRender\n});\nconst ProviderChildren = props => {\n  const {\n    children,\n    csp: customCsp,\n    autoInsertSpaceInButton,\n    alert,\n    anchor,\n    form,\n    locale,\n    componentSize,\n    direction,\n    space,\n    splitter,\n    virtual,\n    dropdownMatchSelectWidth,\n    popupMatchSelectWidth,\n    popupOverflow,\n    legacyLocale,\n    parentContext,\n    iconPrefixCls: customIconPrefixCls,\n    theme,\n    componentDisabled,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    layout,\n    list,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    menu,\n    pagination,\n    input,\n    textArea,\n    empty,\n    badge,\n    radio,\n    rate,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect\n  } = props;\n  // =================================== Context ===================================\n  const getPrefixCls = React.useCallback((suffixCls, customizePrefixCls) => {\n    const {\n      prefixCls\n    } = props;\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    const mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');\n    return suffixCls ? `${mergedPrefixCls}-${suffixCls}` : mergedPrefixCls;\n  }, [parentContext.getPrefixCls, props.prefixCls]);\n  const iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || defaultIconPrefixCls;\n  const csp = customCsp || parentContext.csp;\n  useStyle(iconPrefixCls, csp);\n  const mergedTheme = useTheme(theme, parentContext.theme, {\n    prefixCls: getPrefixCls('')\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    existThemeConfig = existThemeConfig || !!mergedTheme;\n  }\n  const baseConfig = {\n    csp,\n    autoInsertSpaceInButton,\n    alert,\n    anchor,\n    locale: locale || legacyLocale,\n    direction,\n    space,\n    splitter,\n    virtual,\n    popupMatchSelectWidth: popupMatchSelectWidth !== null && popupMatchSelectWidth !== void 0 ? popupMatchSelectWidth : dropdownMatchSelectWidth,\n    popupOverflow,\n    getPrefixCls,\n    iconPrefixCls,\n    theme: mergedTheme,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    input,\n    textArea,\n    layout,\n    list,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    menu,\n    pagination,\n    empty,\n    badge,\n    radio,\n    rate,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    const warningFn = devUseWarning('ConfigProvider');\n    warningFn(!('autoInsertSpaceInButton' in props), 'deprecated', '`autoInsertSpaceInButton` is deprecated. Please use `{ button: { autoInsertSpace: boolean }}` instead.');\n  }\n  const config = Object.assign({}, parentContext);\n  Object.keys(baseConfig).forEach(key => {\n    if (baseConfig[key] !== undefined) {\n      config[key] = baseConfig[key];\n    }\n  });\n  // Pass the props used by `useContext` directly with child component.\n  // These props should merged into `config`.\n  PASSED_PROPS.forEach(propName => {\n    const propValue = props[propName];\n    if (propValue) {\n      config[propName] = propValue;\n    }\n  });\n  if (typeof autoInsertSpaceInButton !== 'undefined') {\n    // merge deprecated api\n    config.button = Object.assign({\n      autoInsertSpace: autoInsertSpaceInButton\n    }, config.button);\n  }\n  // https://github.com/ant-design/ant-design/issues/27617\n  const memoedConfig = useMemo(() => config, config, (prevConfig, currentConfig) => {\n    const prevKeys = Object.keys(prevConfig);\n    const currentKeys = Object.keys(currentConfig);\n    return prevKeys.length !== currentKeys.length || prevKeys.some(key => prevConfig[key] !== currentConfig[key]);\n  });\n  const {\n    layer\n  } = React.useContext(CssInJsStyleContext);\n  const memoIconContextValue = React.useMemo(() => ({\n    prefixCls: iconPrefixCls,\n    csp,\n    layer: layer ? 'antd' : undefined\n  }), [iconPrefixCls, csp, layer]);\n  let childNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PropWarning, {\n    dropdownMatchSelectWidth: dropdownMatchSelectWidth\n  }), children);\n  const validateMessages = React.useMemo(() => {\n    var _a, _b, _c, _d;\n    return merge(((_a = defaultLocale.Form) === null || _a === void 0 ? void 0 : _a.defaultValidateMessages) || {}, ((_c = (_b = memoedConfig.locale) === null || _b === void 0 ? void 0 : _b.Form) === null || _c === void 0 ? void 0 : _c.defaultValidateMessages) || {}, ((_d = memoedConfig.form) === null || _d === void 0 ? void 0 : _d.validateMessages) || {}, (form === null || form === void 0 ? void 0 : form.validateMessages) || {});\n  }, [memoedConfig, form === null || form === void 0 ? void 0 : form.validateMessages]);\n  if (Object.keys(validateMessages).length > 0) {\n    childNode = /*#__PURE__*/React.createElement(ValidateMessagesContext.Provider, {\n      value: validateMessages\n    }, childNode);\n  }\n  if (locale) {\n    childNode = /*#__PURE__*/React.createElement(LocaleProvider, {\n      locale: locale,\n      _ANT_MARK__: ANT_MARK\n    }, childNode);\n  }\n  if (iconPrefixCls || csp) {\n    childNode = /*#__PURE__*/React.createElement(IconContext.Provider, {\n      value: memoIconContextValue\n    }, childNode);\n  }\n  if (componentSize) {\n    childNode = /*#__PURE__*/React.createElement(SizeContextProvider, {\n      size: componentSize\n    }, childNode);\n  }\n  // =================================== Motion ===================================\n  childNode = /*#__PURE__*/React.createElement(MotionWrapper, null, childNode);\n  // ================================ Dynamic theme ================================\n  const memoTheme = React.useMemo(() => {\n    const _a = mergedTheme || {},\n      {\n        algorithm,\n        token,\n        components,\n        cssVar\n      } = _a,\n      rest = __rest(_a, [\"algorithm\", \"token\", \"components\", \"cssVar\"]);\n    const themeObj = algorithm && (!Array.isArray(algorithm) || algorithm.length > 0) ? createTheme(algorithm) : defaultTheme;\n    const parsedComponents = {};\n    Object.entries(components || {}).forEach(([componentName, componentToken]) => {\n      const parsedToken = Object.assign({}, componentToken);\n      if ('algorithm' in parsedToken) {\n        if (parsedToken.algorithm === true) {\n          parsedToken.theme = themeObj;\n        } else if (Array.isArray(parsedToken.algorithm) || typeof parsedToken.algorithm === 'function') {\n          parsedToken.theme = createTheme(parsedToken.algorithm);\n        }\n        delete parsedToken.algorithm;\n      }\n      parsedComponents[componentName] = parsedToken;\n    });\n    const mergedToken = Object.assign(Object.assign({}, defaultSeedToken), token);\n    return Object.assign(Object.assign({}, rest), {\n      theme: themeObj,\n      token: mergedToken,\n      components: parsedComponents,\n      override: Object.assign({\n        override: mergedToken\n      }, parsedComponents),\n      cssVar: cssVar\n    });\n  }, [mergedTheme]);\n  if (theme) {\n    childNode = /*#__PURE__*/React.createElement(DesignTokenContext.Provider, {\n      value: memoTheme\n    }, childNode);\n  }\n  // ================================== Warning ===================================\n  if (memoedConfig.warning) {\n    childNode = /*#__PURE__*/React.createElement(WarningContext.Provider, {\n      value: memoedConfig.warning\n    }, childNode);\n  }\n  // =================================== Render ===================================\n  if (componentDisabled !== undefined) {\n    childNode = /*#__PURE__*/React.createElement(DisabledContextProvider, {\n      disabled: componentDisabled\n    }, childNode);\n  }\n  return /*#__PURE__*/React.createElement(ConfigContext.Provider, {\n    value: memoedConfig\n  }, childNode);\n};\nconst ConfigProvider = props => {\n  const context = React.useContext(ConfigContext);\n  const antLocale = React.useContext(LocaleContext);\n  return /*#__PURE__*/React.createElement(ProviderChildren, Object.assign({\n    parentContext: context,\n    legacyLocale: antLocale\n  }, props));\n};\nConfigProvider.ConfigContext = ConfigContext;\nConfigProvider.SizeContext = SizeContext;\nConfigProvider.config = setGlobalConfig;\nConfigProvider.useConfig = useConfig;\nObject.defineProperty(ConfigProvider, 'SizeContext', {\n  get: () => {\n    process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'ConfigProvider.SizeContext is deprecated. Please use `ConfigProvider.useConfig().componentSize` instead.') : void 0;\n    return SizeContext;\n  }\n});\nif (process.env.NODE_ENV !== 'production') {\n  ConfigProvider.displayName = 'ConfigProvider';\n}\nexport default ConfigProvider;","import useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport { devUseWarning } from '../../_util/warning';\nimport { defaultConfig } from '../../theme/internal';\nimport useThemeKey from './useThemeKey';\nexport default function useTheme(theme, parentTheme, config) {\n  var _a, _b;\n  const warning = devUseWarning('ConfigProvider');\n  const themeConfig = theme || {};\n  const parentThemeConfig = themeConfig.inherit === false || !parentTheme ? Object.assign(Object.assign({}, defaultConfig), {\n    hashed: (_a = parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.hashed) !== null && _a !== void 0 ? _a : defaultConfig.hashed,\n    cssVar: parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.cssVar\n  }) : parentTheme;\n  const themeKey = useThemeKey();\n  if (process.env.NODE_ENV !== 'production') {\n    const cssVarEnabled = themeConfig.cssVar || parentThemeConfig.cssVar;\n    const validKey = !!(typeof themeConfig.cssVar === 'object' && ((_b = themeConfig.cssVar) === null || _b === void 0 ? void 0 : _b.key) || themeKey);\n    process.env.NODE_ENV !== \"production\" ? warning(!cssVarEnabled || validKey, 'breaking', 'Missing key in `cssVar` config. Please upgrade to React 18 or set `cssVar.key` manually in each ConfigProvider inside `cssVar` enabled ConfigProvider.') : void 0;\n  }\n  return useMemo(() => {\n    var _a, _b;\n    if (!theme) {\n      return parentTheme;\n    }\n    // Override\n    const mergedComponents = Object.assign({}, parentThemeConfig.components);\n    Object.keys(theme.components || {}).forEach(componentName => {\n      mergedComponents[componentName] = Object.assign(Object.assign({}, mergedComponents[componentName]), theme.components[componentName]);\n    });\n    const cssVarKey = `css-var-${themeKey.replace(/:/g, '')}`;\n    const mergedCssVar = ((_a = themeConfig.cssVar) !== null && _a !== void 0 ? _a : parentThemeConfig.cssVar) && Object.assign(Object.assign(Object.assign({\n      prefix: config === null || config === void 0 ? void 0 : config.prefixCls\n    }, typeof parentThemeConfig.cssVar === 'object' ? parentThemeConfig.cssVar : {}), typeof themeConfig.cssVar === 'object' ? themeConfig.cssVar : {}), {\n      key: typeof themeConfig.cssVar === 'object' && ((_b = themeConfig.cssVar) === null || _b === void 0 ? void 0 : _b.key) || cssVarKey\n    });\n    // Base token\n    return Object.assign(Object.assign(Object.assign({}, parentThemeConfig), themeConfig), {\n      token: Object.assign(Object.assign({}, parentThemeConfig.token), themeConfig.token),\n      components: mergedComponents,\n      cssVar: mergedCssVar\n    });\n  }, [themeConfig, parentThemeConfig], (prev, next) => prev.some((prevTheme, index) => {\n    const nextTheme = next[index];\n    return !isEqual(prevTheme, nextTheme, true);\n  }));\n}","import _typeof from \"./typeof.js\";\nfunction _regeneratorRuntime() {\n  \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\n  _regeneratorRuntime = function _regeneratorRuntime() {\n    return r;\n  };\n  var t,\n    r = {},\n    e = Object.prototype,\n    n = e.hasOwnProperty,\n    o = \"function\" == typeof Symbol ? Symbol : {},\n    i = o.iterator || \"@@iterator\",\n    a = o.asyncIterator || \"@@asyncIterator\",\n    u = o.toStringTag || \"@@toStringTag\";\n  function c(t, r, e, n) {\n    return Object.defineProperty(t, r, {\n      value: e,\n      enumerable: !n,\n      configurable: !n,\n      writable: !n\n    });\n  }\n  try {\n    c({}, \"\");\n  } catch (t) {\n    c = function c(t, r, e) {\n      return t[r] = e;\n    };\n  }\n  function h(r, e, n, o) {\n    var i = e && e.prototype instanceof Generator ? e : Generator,\n      a = Object.create(i.prototype);\n    return c(a, \"_invoke\", function (r, e, n) {\n      var o = 1;\n      return function (i, a) {\n        if (3 === o) throw Error(\"Generator is already running\");\n        if (4 === o) {\n          if (\"throw\" === i) throw a;\n          return {\n            value: t,\n            done: !0\n          };\n        }\n        for (n.method = i, n.arg = a;;) {\n          var u = n.delegate;\n          if (u) {\n            var c = d(u, n);\n            if (c) {\n              if (c === f) continue;\n              return c;\n            }\n          }\n          if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n            if (1 === o) throw o = 4, n.arg;\n            n.dispatchException(n.arg);\n          } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n          o = 3;\n          var h = s(r, e, n);\n          if (\"normal\" === h.type) {\n            if (o = n.done ? 4 : 2, h.arg === f) continue;\n            return {\n              value: h.arg,\n              done: n.done\n            };\n          }\n          \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg);\n        }\n      };\n    }(r, n, new Context(o || [])), !0), a;\n  }\n  function s(t, r, e) {\n    try {\n      return {\n        type: \"normal\",\n        arg: t.call(r, e)\n      };\n    } catch (t) {\n      return {\n        type: \"throw\",\n        arg: t\n      };\n    }\n  }\n  r.wrap = h;\n  var f = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var l = {};\n  c(l, i, function () {\n    return this;\n  });\n  var p = Object.getPrototypeOf,\n    y = p && p(p(x([])));\n  y && y !== e && n.call(y, i) && (l = y);\n  var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l);\n  function g(t) {\n    [\"next\", \"throw\", \"return\"].forEach(function (r) {\n      c(t, r, function (t) {\n        return this._invoke(r, t);\n      });\n    });\n  }\n  function AsyncIterator(t, r) {\n    function e(o, i, a, u) {\n      var c = s(t[o], t, i);\n      if (\"throw\" !== c.type) {\n        var h = c.arg,\n          f = h.value;\n        return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) {\n          e(\"next\", t, a, u);\n        }, function (t) {\n          e(\"throw\", t, a, u);\n        }) : r.resolve(f).then(function (t) {\n          h.value = t, a(h);\n        }, function (t) {\n          return e(\"throw\", t, a, u);\n        });\n      }\n      u(c.arg);\n    }\n    var o;\n    c(this, \"_invoke\", function (t, n) {\n      function i() {\n        return new r(function (r, o) {\n          e(t, n, r, o);\n        });\n      }\n      return o = o ? o.then(i, i) : i();\n    }, !0);\n  }\n  function d(r, e) {\n    var n = e.method,\n      o = r.i[n];\n    if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f;\n    var i = s(o, r.i, e.arg);\n    if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f;\n    var a = i.arg;\n    return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f);\n  }\n  function w(t) {\n    this.tryEntries.push(t);\n  }\n  function m(r) {\n    var e = r[4] || {};\n    e.type = \"normal\", e.arg = t, r[4] = e;\n  }\n  function Context(t) {\n    this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0);\n  }\n  function x(r) {\n    if (null != r) {\n      var e = r[i];\n      if (e) return e.call(r);\n      if (\"function\" == typeof r.next) return r;\n      if (!isNaN(r.length)) {\n        var o = -1,\n          a = function e() {\n            for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e;\n            return e.value = t, e.done = !0, e;\n          };\n        return a.next = a;\n      }\n    }\n    throw new TypeError(_typeof(r) + \" is not iterable\");\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) {\n    var r = \"function\" == typeof t && t.constructor;\n    return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name));\n  }, r.mark = function (t) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t;\n  }, r.awrap = function (t) {\n    return {\n      __await: t\n    };\n  }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () {\n    return this;\n  }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) {\n    void 0 === i && (i = Promise);\n    var a = new AsyncIterator(h(t, e, n, o), i);\n    return r.isGeneratorFunction(e) ? a : a.next().then(function (t) {\n      return t.done ? t.value : a.next();\n    });\n  }, g(v), c(v, u, \"Generator\"), c(v, i, function () {\n    return this;\n  }), c(v, \"toString\", function () {\n    return \"[object Generator]\";\n  }), r.keys = function (t) {\n    var r = Object(t),\n      e = [];\n    for (var n in r) e.unshift(n);\n    return function t() {\n      for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t;\n      return t.done = !0, t;\n    };\n  }, r.values = x, Context.prototype = {\n    constructor: Context,\n    reset: function reset(r) {\n      if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t);\n    },\n    stop: function stop() {\n      this.done = !0;\n      var t = this.tryEntries[0][4];\n      if (\"throw\" === t.type) throw t.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(r) {\n      if (this.done) throw r;\n      var e = this;\n      function n(t) {\n        a.type = \"throw\", a.arg = r, e.next = t;\n      }\n      for (var o = e.tryEntries.length - 1; o >= 0; --o) {\n        var i = this.tryEntries[o],\n          a = i[4],\n          u = this.prev,\n          c = i[1],\n          h = i[2];\n        if (-1 === i[0]) return n(\"end\"), !1;\n        if (!c && !h) throw Error(\"try statement without catch or finally\");\n        if (null != i[0] && i[0] <= u) {\n          if (u < c) return this.method = \"next\", this.arg = t, n(c), !0;\n          if (u < h) return n(h), !1;\n        }\n      }\n    },\n    abrupt: function abrupt(t, r) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var n = this.tryEntries[e];\n        if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) {\n          var o = n;\n          break;\n        }\n      }\n      o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null);\n      var i = o ? o[4] : {};\n      return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i);\n    },\n    complete: function complete(t, r) {\n      if (\"throw\" === t.type) throw t.arg;\n      return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f;\n    },\n    finish: function finish(t) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var e = this.tryEntries[r];\n        if (e[2] === t) return this.complete(e[4], e[3]), m(e), f;\n      }\n    },\n    \"catch\": function _catch(t) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var e = this.tryEntries[r];\n        if (e[0] === t) {\n          var n = e[4];\n          if (\"throw\" === n.type) {\n            var o = n.arg;\n            m(e);\n          }\n          return o;\n        }\n      }\n      throw Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(r, e, n) {\n      return this.delegate = {\n        i: x(r),\n        r: e,\n        n: n\n      }, \"next\" === this.method && (this.arg = t), f;\n    }\n  }, r;\n}\nexport { _regeneratorRuntime as default };","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nexport { _asyncToGenerator as default };","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as ReactDOM from 'react-dom';\n// Let compiler not to search module usage\nvar fullClone = _objectSpread({}, ReactDOM);\nvar version = fullClone.version,\n  reactRender = fullClone.render,\n  unmountComponentAtNode = fullClone.unmountComponentAtNode;\nvar createRoot;\ntry {\n  var mainVersion = Number((version || '').split('.')[0]);\n  if (mainVersion >= 18) {\n    createRoot = fullClone.createRoot;\n  }\n} catch (e) {\n  // Do nothing;\n}\nfunction toggleWarning(skip) {\n  var __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = fullClone.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  if (__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && _typeof(__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === 'object') {\n    __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip;\n  }\n}\nvar MARK = '__rc_react_root__';\n\n// ========================== Render ==========================\n\nfunction modernRender(node, container) {\n  toggleWarning(true);\n  var root = container[MARK] || createRoot(container);\n  toggleWarning(false);\n  root.render(node);\n  container[MARK] = root;\n}\nfunction legacyRender(node, container) {\n  reactRender === null || reactRender === void 0 || reactRender(node, container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _r(node, container) {\n  if (process.env.NODE_ENV !== 'production') {\n    return legacyRender(node, container);\n  }\n}\nexport function render(node, container) {\n  if (createRoot) {\n    modernRender(node, container);\n    return;\n  }\n  legacyRender(node, container);\n}\n\n// ========================= Unmount ==========================\nfunction modernUnmount(_x) {\n  return _modernUnmount.apply(this, arguments);\n}\nfunction _modernUnmount() {\n  _modernUnmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(container) {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          return _context.abrupt(\"return\", Promise.resolve().then(function () {\n            var _container$MARK;\n            (_container$MARK = container[MARK]) === null || _container$MARK === void 0 || _container$MARK.unmount();\n            delete container[MARK];\n          }));\n        case 1:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  return _modernUnmount.apply(this, arguments);\n}\nfunction legacyUnmount(container) {\n  unmountComponentAtNode(container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _u(container) {\n  if (process.env.NODE_ENV !== 'production') {\n    return legacyUnmount(container);\n  }\n}\nexport function unmount(_x2) {\n  return _unmount.apply(this, arguments);\n}\nfunction _unmount() {\n  _unmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(container) {\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!(createRoot !== undefined)) {\n            _context2.next = 2;\n            break;\n          }\n          return _context2.abrupt(\"return\", modernUnmount(container));\n        case 2:\n          legacyUnmount(container);\n        case 3:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  return _unmount.apply(this, arguments);\n}","\"use client\";\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { render, unmount } from \"rc-util/es/React/render\";\nimport warning from '../_util/warning';\nconst defaultReactRender = (node, container) => {\n  // TODO: Remove in v6\n  // Warning for React 19\n  if (process.env.NODE_ENV !== 'production') {\n    const majorVersion = parseInt(React.version.split('.')[0], 10);\n    const fullKeys = Object.keys(ReactDOM);\n    process.env.NODE_ENV !== \"production\" ? warning(majorVersion < 19 || fullKeys.includes('createRoot'), 'compatible', 'antd v5 support React is 16 ~ 18. see https://u.ant.design/v5-for-19 for compatible.') : void 0;\n  }\n  render(node, container);\n  return () => {\n    return unmount(container);\n  };\n};\nlet unstableRender = defaultReactRender;\n/**\n * @deprecated Set React render function for compatible usage.\n * This is internal usage only compatible with React 19.\n * And will be removed in next major version.\n */\nexport function unstableSetRender(render) {\n  if (render) {\n    unstableRender = render;\n  }\n  return unstableRender;\n}","// This icon file is generated automatically.\nvar CheckCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z\" } }] }, \"name\": \"check-circle\", \"theme\": \"filled\" };\nexport default CheckCircleFilled;\n","function getRoot(ele) {\n  var _ele$getRootNode;\n  return ele === null || ele === void 0 || (_ele$getRootNode = ele.getRootNode) === null || _ele$getRootNode === void 0 ? void 0 : _ele$getRootNode.call(ele);\n}\n\n/**\n * Check if is in shadowRoot\n */\nexport function inShadow(ele) {\n  return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nexport function getShadowRoot(ele) {\n  return inShadow(ele) ? getRoot(ele) : null;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { generate as generateColor } from '@ant-design/colors';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { getShadowRoot } from \"rc-util/es/Dom/shadow\";\nimport warn from \"rc-util/es/warning\";\nimport React, { useContext, useEffect } from 'react';\nimport IconContext from \"./components/Context\";\nfunction camelCase(input) {\n  return input.replace(/-(.)/g, function (match, g) {\n    return g.toUpperCase();\n  });\n}\nexport function warning(valid, message) {\n  warn(valid, \"[@ant-design/icons] \".concat(message));\n}\nexport function isIconDefinition(target) {\n  return _typeof(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && (_typeof(target.icon) === 'object' || typeof target.icon === 'function');\n}\nexport function normalizeAttrs() {\n  var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return Object.keys(attrs).reduce(function (acc, key) {\n    var val = attrs[key];\n    switch (key) {\n      case 'class':\n        acc.className = val;\n        delete acc.class;\n        break;\n      default:\n        delete acc[key];\n        acc[camelCase(key)] = val;\n    }\n    return acc;\n  }, {});\n}\nexport function generate(node, key, rootProps) {\n  if (!rootProps) {\n    return /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n      key: key\n    }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {\n      return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n    }));\n  }\n  return /*#__PURE__*/React.createElement(node.tag, _objectSpread(_objectSpread({\n    key: key\n  }, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {\n    return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n  }));\n}\nexport function getSecondaryColor(primaryColor) {\n  // choose the second color\n  return generateColor(primaryColor)[0];\n}\nexport function normalizeTwoToneColors(twoToneColor) {\n  if (!twoToneColor) {\n    return [];\n  }\n  return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nexport var svgBaseProps = {\n  width: '1em',\n  height: '1em',\n  fill: 'currentColor',\n  'aria-hidden': 'true',\n  focusable: 'false'\n};\nexport var iconStyles = \"\\n.anticon {\\n  display: inline-flex;\\n  align-items: center;\\n  color: inherit;\\n  font-style: normal;\\n  line-height: 0;\\n  text-align: center;\\n  text-transform: none;\\n  vertical-align: -0.125em;\\n  text-rendering: optimizeLegibility;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.anticon > * {\\n  line-height: 1;\\n}\\n\\n.anticon svg {\\n  display: inline-block;\\n}\\n\\n.anticon::before {\\n  display: none;\\n}\\n\\n.anticon .anticon-icon {\\n  display: block;\\n}\\n\\n.anticon[tabindex] {\\n  cursor: pointer;\\n}\\n\\n.anticon-spin::before,\\n.anticon-spin {\\n  display: inline-block;\\n  -webkit-animation: loadingCircle 1s infinite linear;\\n  animation: loadingCircle 1s infinite linear;\\n}\\n\\n@-webkit-keyframes loadingCircle {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes loadingCircle {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\";\nexport var useInsertStyles = function useInsertStyles(eleRef) {\n  var _useContext = useContext(IconContext),\n    csp = _useContext.csp,\n    prefixCls = _useContext.prefixCls,\n    layer = _useContext.layer;\n  var mergedStyleStr = iconStyles;\n  if (prefixCls) {\n    mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n  }\n  if (layer) {\n    mergedStyleStr = \"@layer \".concat(layer, \" {\\n\").concat(mergedStyleStr, \"\\n}\");\n  }\n  useEffect(function () {\n    var ele = eleRef.current;\n    var shadowRoot = getShadowRoot(ele);\n    updateCSS(mergedStyleStr, '@ant-design-icons', {\n      prepend: !layer,\n      csp: csp,\n      attachTo: shadowRoot\n    });\n  }, []);\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"icon\", \"className\", \"onClick\", \"style\", \"primaryColor\", \"secondaryColor\"];\nimport * as React from 'react';\nimport { generate, getSecondaryColor, isIconDefinition, warning, useInsertStyles } from \"../utils\";\nvar twoToneColorPalette = {\n  primaryColor: '#333',\n  secondaryColor: '#E6E6E6',\n  calculated: false\n};\nfunction setTwoToneColors(_ref) {\n  var primaryColor = _ref.primaryColor,\n    secondaryColor = _ref.secondaryColor;\n  twoToneColorPalette.primaryColor = primaryColor;\n  twoToneColorPalette.secondaryColor = secondaryColor || getSecondaryColor(primaryColor);\n  twoToneColorPalette.calculated = !!secondaryColor;\n}\nfunction getTwoToneColors() {\n  return _objectSpread({}, twoToneColorPalette);\n}\nvar IconBase = function IconBase(props) {\n  var icon = props.icon,\n    className = props.className,\n    onClick = props.onClick,\n    style = props.style,\n    primaryColor = props.primaryColor,\n    secondaryColor = props.secondaryColor,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var svgRef = React.useRef();\n  var colors = twoToneColorPalette;\n  if (primaryColor) {\n    colors = {\n      primaryColor: primaryColor,\n      secondaryColor: secondaryColor || getSecondaryColor(primaryColor)\n    };\n  }\n  useInsertStyles(svgRef);\n  warning(isIconDefinition(icon), \"icon should be icon definiton, but got \".concat(icon));\n  if (!isIconDefinition(icon)) {\n    return null;\n  }\n  var target = icon;\n  if (target && typeof target.icon === 'function') {\n    target = _objectSpread(_objectSpread({}, target), {}, {\n      icon: target.icon(colors.primaryColor, colors.secondaryColor)\n    });\n  }\n  return generate(target.icon, \"svg-\".concat(target.name), _objectSpread(_objectSpread({\n    className: className,\n    onClick: onClick,\n    style: style,\n    'data-icon': target.name,\n    width: '1em',\n    height: '1em',\n    fill: 'currentColor',\n    'aria-hidden': 'true'\n  }, restProps), {}, {\n    ref: svgRef\n  }));\n};\nIconBase.displayName = 'IconReact';\nIconBase.getTwoToneColors = getTwoToneColors;\nIconBase.setTwoToneColors = setTwoToneColors;\nexport default IconBase;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ReactIcon from \"./IconBase\";\nimport { normalizeTwoToneColors } from \"../utils\";\nexport function setTwoToneColor(twoToneColor) {\n  var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n    _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n    primaryColor = _normalizeTwoToneColo2[0],\n    secondaryColor = _normalizeTwoToneColo2[1];\n  return ReactIcon.setTwoToneColors({\n    primaryColor: primaryColor,\n    secondaryColor: secondaryColor\n  });\n}\nexport function getTwoToneColor() {\n  var colors = ReactIcon.getTwoToneColors();\n  if (!colors.calculated) {\n    return colors.primaryColor;\n  }\n  return [colors.primaryColor, colors.secondaryColor];\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"icon\", \"spin\", \"rotate\", \"tabIndex\", \"onClick\", \"twoToneColor\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { blue } from '@ant-design/colors';\nimport Context from \"./Context\";\nimport ReactIcon from \"./IconBase\";\nimport { getTwoToneColor, setTwoToneColor } from \"./twoTonePrimaryColor\";\nimport { normalizeTwoToneColors } from \"../utils\";\n// Initial setting\n// should move it to antd main repo?\nsetTwoToneColor(blue.primary);\n\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720\n\nvar Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var className = props.className,\n    icon = props.icon,\n    spin = props.spin,\n    rotate = props.rotate,\n    tabIndex = props.tabIndex,\n    onClick = props.onClick,\n    twoToneColor = props.twoToneColor,\n    restProps = _objectWithoutProperties(props, _excluded);\n  var _React$useContext = React.useContext(Context),\n    _React$useContext$pre = _React$useContext.prefixCls,\n    prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,\n    rootClassName = _React$useContext.rootClassName;\n  var classString = classNames(rootClassName, prefixCls, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-\").concat(icon.name), !!icon.name), \"\".concat(prefixCls, \"-spin\"), !!spin || icon.name === 'loading'), className);\n  var iconTabIndex = tabIndex;\n  if (iconTabIndex === undefined && onClick) {\n    iconTabIndex = -1;\n  }\n  var svgStyle = rotate ? {\n    msTransform: \"rotate(\".concat(rotate, \"deg)\"),\n    transform: \"rotate(\".concat(rotate, \"deg)\")\n  } : undefined;\n  var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n    _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n    primaryColor = _normalizeTwoToneColo2[0],\n    secondaryColor = _normalizeTwoToneColo2[1];\n  return /*#__PURE__*/React.createElement(\"span\", _extends({\n    role: \"img\",\n    \"aria-label\": icon.name\n  }, restProps, {\n    ref: ref,\n    tabIndex: iconTabIndex,\n    onClick: onClick,\n    className: classString\n  }), /*#__PURE__*/React.createElement(ReactIcon, {\n    icon: icon,\n    primaryColor: primaryColor,\n    secondaryColor: secondaryColor,\n    style: svgStyle\n  }));\n});\nIcon.displayName = 'AntdIcon';\nIcon.getTwoToneColor = getTwoToneColor;\nIcon.setTwoToneColor = setTwoToneColor;\nexport default Icon;","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CheckCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CheckCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CheckCircleFilled = function CheckCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CheckCircleFilledSvg\n  }));\n};\n\n/**![check-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0xOTMuNSAzMDEuN2wtMjEwLjYgMjkyYTMxLjggMzEuOCAwIDAxLTUxLjcgMEwzMTguNSA0ODQuOWMtMy44LTUuMyAwLTEyLjcgNi41LTEyLjdoNDYuOWMxMC4yIDAgMTkuOSA0LjkgMjUuOSAxMy4zbDcxLjIgOTguOCAxNTcuMi0yMThjNi04LjMgMTUuNi0xMy4zIDI1LjktMTMuM0g2OTljNi41IDAgMTAuMyA3LjQgNi41IDEyLjd6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CheckCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CheckCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar CloseCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z\" } }] }, \"name\": \"close-circle\", \"theme\": \"filled\" };\nexport default CloseCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CloseCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CloseCircleFilled = function CloseCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CloseCircleFilledSvg\n  }));\n};\n\n/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMTI3Ljk4IDI3NC44MmgtLjA0bC0uMDguMDZMNTEyIDQ2Ni43NSAzODQuMTQgMzM4Ljg4Yy0uMDQtLjA1LS4wNi0uMDYtLjA4LS4wNmEuMTIuMTIgMCAwMC0uMDcgMGMtLjAzIDAtLjA1LjAxLS4wOS4wNWwtNDUuMDIgNDUuMDJhLjIuMiAwIDAwLS4wNS4wOS4xMi4xMiAwIDAwMCAuMDd2LjAyYS4yNy4yNyAwIDAwLjA2LjA2TDQ2Ni43NSA1MTIgMzM4Ljg4IDYzOS44NmMtLjA1LjA0LS4wNi4wNi0uMDYuMDhhLjEyLjEyIDAgMDAwIC4wN2MwIC4wMy4wMS4wNS4wNS4wOWw0NS4wMiA0NS4wMmEuMi4yIDAgMDAuMDkuMDUuMTIuMTIgMCAwMC4wNyAwYy4wMiAwIC4wNC0uMDEuMDgtLjA1TDUxMiA1NTcuMjVsMTI3Ljg2IDEyNy44N2MuMDQuMDQuMDYuMDUuMDguMDVhLjEyLjEyIDAgMDAuMDcgMGMuMDMgMCAuMDUtLjAxLjA5LS4wNWw0NS4wMi00NS4wMmEuMi4yIDAgMDAuMDUtLjA5LjEyLjEyIDAgMDAwLS4wN3YtLjAyYS4yNy4yNyAwIDAwLS4wNS0uMDZMNTU3LjI1IDUxMmwxMjcuODctMTI3Ljg2Yy4wNC0uMDQuMDUtLjA2LjA1LS4wOGEuMTIuMTIgMCAwMDAtLjA3YzAtLjAzLS4wMS0uMDUtLjA1LS4wOWwtNDUuMDItNDUuMDJhLjIuMiAwIDAwLS4wOS0uMDUuMTIuMTIgMCAwMC0uMDcgMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CloseCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ExclamationCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"exclamation-circle\", \"theme\": \"filled\" };\nexport default ExclamationCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ExclamationCircleFilledSvg from \"@ant-design/icons-svg/es/asn/ExclamationCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ExclamationCircleFilled = function ExclamationCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: ExclamationCircleFilledSvg\n  }));\n};\n\n/**![exclamation-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0tMzIgMjMyYzAtNC40IDMuNi04IDgtOGg0OGM0LjQgMCA4IDMuNiA4IDh2MjcyYzAgNC40LTMuNiA4LTggOGgtNDhjLTQuNCAwLTgtMy42LTgtOFYyOTZ6bTMyIDQ0MGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ExclamationCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'ExclamationCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar InfoCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"info-circle\", \"theme\": \"filled\" };\nexport default InfoCircleFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport InfoCircleFilledSvg from \"@ant-design/icons-svg/es/asn/InfoCircleFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar InfoCircleFilled = function InfoCircleFilled(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: InfoCircleFilledSvg\n  }));\n};\n\n/**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0zMiA2NjRjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQ1NmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI3MnptLTMyLTM0NGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(InfoCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'InfoCircleFilled';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar LoadingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"0 0 1024 1024\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\" } }] }, \"name\": \"loading\", \"theme\": \"outlined\" };\nexport default LoadingOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport LoadingOutlinedSvg from \"@ant-design/icons-svg/es/asn/LoadingOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar LoadingOutlined = function LoadingOutlined(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: LoadingOutlinedSvg\n  }));\n};\n\n/**![loading](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4OCA1NDhjLTE5LjkgMC0zNi0xNi4xLTM2LTM2IDAtNTkuNC0xMS42LTExNy0zNC42LTE3MS4zYTQ0MC40NSA0NDAuNDUgMCAwMC05NC4zLTEzOS45IDQzNy43MSA0MzcuNzEgMCAwMC0xMzkuOS05NC4zQzYyOSA4My42IDU3MS40IDcyIDUxMiA3MmMtMTkuOSAwLTM2LTE2LjEtMzYtMzZzMTYuMS0zNiAzNi0zNmM2OS4xIDAgMTM2LjIgMTMuNSAxOTkuMyA0MC4zQzc3Mi4zIDY2IDgyNyAxMDMgODc0IDE1MGM0NyA0NyA4My45IDEwMS44IDEwOS43IDE2Mi43IDI2LjcgNjMuMSA0MC4yIDEzMC4yIDQwLjIgMTk5LjMuMSAxOS45LTE2IDM2LTM1LjkgMzZ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(LoadingOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'LoadingOutlined';\n}\nexport default RefIcon;","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nvar KeyCode = {\n  /**\n   * MAC_ENTER\n   */\n  MAC_ENTER: 3,\n  /**\n   * BACKSPACE\n   */\n  BACKSPACE: 8,\n  /**\n   * TAB\n   */\n  TAB: 9,\n  /**\n   * NUMLOCK on FF/Safari Mac\n   */\n  NUM_CENTER: 12,\n  // NUMLOCK on FF/Safari Mac\n  /**\n   * ENTER\n   */\n  ENTER: 13,\n  /**\n   * SHIFT\n   */\n  SHIFT: 16,\n  /**\n   * CTRL\n   */\n  CTRL: 17,\n  /**\n   * ALT\n   */\n  ALT: 18,\n  /**\n   * PAUSE\n   */\n  PAUSE: 19,\n  /**\n   * CAPS_LOCK\n   */\n  CAPS_LOCK: 20,\n  /**\n   * ESC\n   */\n  ESC: 27,\n  /**\n   * SPACE\n   */\n  SPACE: 32,\n  /**\n   * PAGE_UP\n   */\n  PAGE_UP: 33,\n  // also NUM_NORTH_EAST\n  /**\n   * PAGE_DOWN\n   */\n  PAGE_DOWN: 34,\n  // also NUM_SOUTH_EAST\n  /**\n   * END\n   */\n  END: 35,\n  // also NUM_SOUTH_WEST\n  /**\n   * HOME\n   */\n  HOME: 36,\n  // also NUM_NORTH_WEST\n  /**\n   * LEFT\n   */\n  LEFT: 37,\n  // also NUM_WEST\n  /**\n   * UP\n   */\n  UP: 38,\n  // also NUM_NORTH\n  /**\n   * RIGHT\n   */\n  RIGHT: 39,\n  // also NUM_EAST\n  /**\n   * DOWN\n   */\n  DOWN: 40,\n  // also NUM_SOUTH\n  /**\n   * PRINT_SCREEN\n   */\n  PRINT_SCREEN: 44,\n  /**\n   * INSERT\n   */\n  INSERT: 45,\n  // also NUM_INSERT\n  /**\n   * DELETE\n   */\n  DELETE: 46,\n  // also NUM_DELETE\n  /**\n   * ZERO\n   */\n  ZERO: 48,\n  /**\n   * ONE\n   */\n  ONE: 49,\n  /**\n   * TWO\n   */\n  TWO: 50,\n  /**\n   * THREE\n   */\n  THREE: 51,\n  /**\n   * FOUR\n   */\n  FOUR: 52,\n  /**\n   * FIVE\n   */\n  FIVE: 53,\n  /**\n   * SIX\n   */\n  SIX: 54,\n  /**\n   * SEVEN\n   */\n  SEVEN: 55,\n  /**\n   * EIGHT\n   */\n  EIGHT: 56,\n  /**\n   * NINE\n   */\n  NINE: 57,\n  /**\n   * QUESTION_MARK\n   */\n  QUESTION_MARK: 63,\n  // needs localization\n  /**\n   * A\n   */\n  A: 65,\n  /**\n   * B\n   */\n  B: 66,\n  /**\n   * C\n   */\n  C: 67,\n  /**\n   * D\n   */\n  D: 68,\n  /**\n   * E\n   */\n  E: 69,\n  /**\n   * F\n   */\n  F: 70,\n  /**\n   * G\n   */\n  G: 71,\n  /**\n   * H\n   */\n  H: 72,\n  /**\n   * I\n   */\n  I: 73,\n  /**\n   * J\n   */\n  J: 74,\n  /**\n   * K\n   */\n  K: 75,\n  /**\n   * L\n   */\n  L: 76,\n  /**\n   * M\n   */\n  M: 77,\n  /**\n   * N\n   */\n  N: 78,\n  /**\n   * O\n   */\n  O: 79,\n  /**\n   * P\n   */\n  P: 80,\n  /**\n   * Q\n   */\n  Q: 81,\n  /**\n   * R\n   */\n  R: 82,\n  /**\n   * S\n   */\n  S: 83,\n  /**\n   * T\n   */\n  T: 84,\n  /**\n   * U\n   */\n  U: 85,\n  /**\n   * V\n   */\n  V: 86,\n  /**\n   * W\n   */\n  W: 87,\n  /**\n   * X\n   */\n  X: 88,\n  /**\n   * Y\n   */\n  Y: 89,\n  /**\n   * Z\n   */\n  Z: 90,\n  /**\n   * META\n   */\n  META: 91,\n  // WIN_KEY_LEFT\n  /**\n   * WIN_KEY_RIGHT\n   */\n  WIN_KEY_RIGHT: 92,\n  /**\n   * CONTEXT_MENU\n   */\n  CONTEXT_MENU: 93,\n  /**\n   * NUM_ZERO\n   */\n  NUM_ZERO: 96,\n  /**\n   * NUM_ONE\n   */\n  NUM_ONE: 97,\n  /**\n   * NUM_TWO\n   */\n  NUM_TWO: 98,\n  /**\n   * NUM_THREE\n   */\n  NUM_THREE: 99,\n  /**\n   * NUM_FOUR\n   */\n  NUM_FOUR: 100,\n  /**\n   * NUM_FIVE\n   */\n  NUM_FIVE: 101,\n  /**\n   * NUM_SIX\n   */\n  NUM_SIX: 102,\n  /**\n   * NUM_SEVEN\n   */\n  NUM_SEVEN: 103,\n  /**\n   * NUM_EIGHT\n   */\n  NUM_EIGHT: 104,\n  /**\n   * NUM_NINE\n   */\n  NUM_NINE: 105,\n  /**\n   * NUM_MULTIPLY\n   */\n  NUM_MULTIPLY: 106,\n  /**\n   * NUM_PLUS\n   */\n  NUM_PLUS: 107,\n  /**\n   * NUM_MINUS\n   */\n  NUM_MINUS: 109,\n  /**\n   * NUM_PERIOD\n   */\n  NUM_PERIOD: 110,\n  /**\n   * NUM_DIVISION\n   */\n  NUM_DIVISION: 111,\n  /**\n   * F1\n   */\n  F1: 112,\n  /**\n   * F2\n   */\n  F2: 113,\n  /**\n   * F3\n   */\n  F3: 114,\n  /**\n   * F4\n   */\n  F4: 115,\n  /**\n   * F5\n   */\n  F5: 116,\n  /**\n   * F6\n   */\n  F6: 117,\n  /**\n   * F7\n   */\n  F7: 118,\n  /**\n   * F8\n   */\n  F8: 119,\n  /**\n   * F9\n   */\n  F9: 120,\n  /**\n   * F10\n   */\n  F10: 121,\n  /**\n   * F11\n   */\n  F11: 122,\n  /**\n   * F12\n   */\n  F12: 123,\n  /**\n   * NUMLOCK\n   */\n  NUMLOCK: 144,\n  /**\n   * SEMICOLON\n   */\n  SEMICOLON: 186,\n  // needs localization\n  /**\n   * DASH\n   */\n  DASH: 189,\n  // needs localization\n  /**\n   * EQUALS\n   */\n  EQUALS: 187,\n  // needs localization\n  /**\n   * COMMA\n   */\n  COMMA: 188,\n  // needs localization\n  /**\n   * PERIOD\n   */\n  PERIOD: 190,\n  // needs localization\n  /**\n   * SLASH\n   */\n  SLASH: 191,\n  // needs localization\n  /**\n   * APOSTROPHE\n   */\n  APOSTROPHE: 192,\n  // needs localization\n  /**\n   * SINGLE_QUOTE\n   */\n  SINGLE_QUOTE: 222,\n  // needs localization\n  /**\n   * OPEN_SQUARE_BRACKET\n   */\n  OPEN_SQUARE_BRACKET: 219,\n  // needs localization\n  /**\n   * BACKSLASH\n   */\n  BACKSLASH: 220,\n  // needs localization\n  /**\n   * CLOSE_SQUARE_BRACKET\n   */\n  CLOSE_SQUARE_BRACKET: 221,\n  // needs localization\n  /**\n   * WIN_KEY\n   */\n  WIN_KEY: 224,\n  /**\n   * MAC_FF_META\n   */\n  MAC_FF_META: 224,\n  // Firefox (Gecko) fires this for the meta key instead of 91\n  /**\n   * WIN_IME\n   */\n  WIN_IME: 229,\n  // ======================== Function ========================\n  /**\n   * whether text and modified key is entered at the same time.\n   */\n  isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n    var keyCode = e.keyCode;\n    if (e.altKey && !e.ctrlKey || e.metaKey ||\n    // Function keys don't generate text\n    keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n      return false;\n    }\n\n    // The following keys are quite harmless, even in combination with\n    // CTRL, ALT or SHIFT.\n    switch (keyCode) {\n      case KeyCode.ALT:\n      case KeyCode.CAPS_LOCK:\n      case KeyCode.CONTEXT_MENU:\n      case KeyCode.CTRL:\n      case KeyCode.DOWN:\n      case KeyCode.END:\n      case KeyCode.ESC:\n      case KeyCode.HOME:\n      case KeyCode.INSERT:\n      case KeyCode.LEFT:\n      case KeyCode.MAC_FF_META:\n      case KeyCode.META:\n      case KeyCode.NUMLOCK:\n      case KeyCode.NUM_CENTER:\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAUSE:\n      case KeyCode.PRINT_SCREEN:\n      case KeyCode.RIGHT:\n      case KeyCode.SHIFT:\n      case KeyCode.UP:\n      case KeyCode.WIN_KEY:\n      case KeyCode.WIN_KEY_RIGHT:\n        return false;\n      default:\n        return true;\n    }\n  },\n  /**\n   * whether character is entered.\n   */\n  isCharacterKey: function isCharacterKey(keyCode) {\n    if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n      return true;\n    }\n    if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n      return true;\n    }\n    if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n      return true;\n    }\n\n    // Safari sends zero key code for non-latin characters.\n    if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n      return true;\n    }\n    switch (keyCode) {\n      case KeyCode.SPACE:\n      case KeyCode.QUESTION_MARK:\n      case KeyCode.NUM_PLUS:\n      case KeyCode.NUM_MINUS:\n      case KeyCode.NUM_PERIOD:\n      case KeyCode.NUM_DIVISION:\n      case KeyCode.SEMICOLON:\n      case KeyCode.DASH:\n      case KeyCode.EQUALS:\n      case KeyCode.COMMA:\n      case KeyCode.PERIOD:\n      case KeyCode.SLASH:\n      case KeyCode.APOSTROPHE:\n      case KeyCode.SINGLE_QUOTE:\n      case KeyCode.OPEN_SQUARE_BRACKET:\n      case KeyCode.BACKSLASH:\n      case KeyCode.CLOSE_SQUARE_BRACKET:\n        return true;\n      default:\n        return false;\n    }\n  }\n};\nexport default KeyCode;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar attributes = \"accept acceptCharset accessKey action allowFullScreen allowTransparency\\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\\n    charSet checked classID className colSpan cols content contentEditable contextMenu\\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\\n    mediaGroup method min minLength multiple muted name noValidate nonce open\\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\\n    summary tabIndex target title type useMap value width wmode wrap\";\nvar eventsName = \"onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError\";\nvar propList = \"\".concat(attributes, \" \").concat(eventsName).split(/[\\s\\n]+/);\n\n/* eslint-enable max-len */\nvar ariaPrefix = 'aria-';\nvar dataPrefix = 'data-';\nfunction match(key, prefix) {\n  return key.indexOf(prefix) === 0;\n}\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props) {\n  var ariaOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var mergedConfig;\n  if (ariaOnly === false) {\n    mergedConfig = {\n      aria: true,\n      data: true,\n      attr: true\n    };\n  } else if (ariaOnly === true) {\n    mergedConfig = {\n      aria: true\n    };\n  } else {\n    mergedConfig = _objectSpread({}, ariaOnly);\n  }\n  var attrs = {};\n  Object.keys(props).forEach(function (key) {\n    if (\n    // Aria\n    mergedConfig.aria && (key === 'role' || match(key, ariaPrefix)) ||\n    // Data\n    mergedConfig.data && match(key, dataPrefix) ||\n    // Attr\n    mergedConfig.attr && propList.includes(key)) {\n      attrs[key] = props[key];\n    }\n  });\n  return attrs;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nvar Notify = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var prefixCls = props.prefixCls,\n    style = props.style,\n    className = props.className,\n    _props$duration = props.duration,\n    duration = _props$duration === void 0 ? 4.5 : _props$duration,\n    showProgress = props.showProgress,\n    _props$pauseOnHover = props.pauseOnHover,\n    pauseOnHover = _props$pauseOnHover === void 0 ? true : _props$pauseOnHover,\n    eventKey = props.eventKey,\n    content = props.content,\n    closable = props.closable,\n    _props$closeIcon = props.closeIcon,\n    closeIcon = _props$closeIcon === void 0 ? 'x' : _props$closeIcon,\n    divProps = props.props,\n    onClick = props.onClick,\n    onNoticeClose = props.onNoticeClose,\n    times = props.times,\n    forcedHovering = props.hovering;\n  var _React$useState = React.useState(false),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    hovering = _React$useState2[0],\n    setHovering = _React$useState2[1];\n  var _React$useState3 = React.useState(0),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    percent = _React$useState4[0],\n    setPercent = _React$useState4[1];\n  var _React$useState5 = React.useState(0),\n    _React$useState6 = _slicedToArray(_React$useState5, 2),\n    spentTime = _React$useState6[0],\n    setSpentTime = _React$useState6[1];\n  var mergedHovering = forcedHovering || hovering;\n  var mergedShowProgress = duration > 0 && showProgress;\n\n  // ======================== Close =========================\n  var onInternalClose = function onInternalClose() {\n    onNoticeClose(eventKey);\n  };\n  var onCloseKeyDown = function onCloseKeyDown(e) {\n    if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === KeyCode.ENTER) {\n      onInternalClose();\n    }\n  };\n\n  // ======================== Effect ========================\n  React.useEffect(function () {\n    if (!mergedHovering && duration > 0) {\n      var start = Date.now() - spentTime;\n      var timeout = setTimeout(function () {\n        onInternalClose();\n      }, duration * 1000 - spentTime);\n      return function () {\n        if (pauseOnHover) {\n          clearTimeout(timeout);\n        }\n        setSpentTime(Date.now() - start);\n      };\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [duration, mergedHovering, times]);\n  React.useEffect(function () {\n    if (!mergedHovering && mergedShowProgress && (pauseOnHover || spentTime === 0)) {\n      var start = performance.now();\n      var animationFrame;\n      var calculate = function calculate() {\n        cancelAnimationFrame(animationFrame);\n        animationFrame = requestAnimationFrame(function (timestamp) {\n          var runtime = timestamp + spentTime - start;\n          var progress = Math.min(runtime / (duration * 1000), 1);\n          setPercent(progress * 100);\n          if (progress < 1) {\n            calculate();\n          }\n        });\n      };\n      calculate();\n      return function () {\n        if (pauseOnHover) {\n          cancelAnimationFrame(animationFrame);\n        }\n      };\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [duration, spentTime, mergedHovering, mergedShowProgress, times]);\n\n  // ======================== Closable ========================\n  var closableObj = React.useMemo(function () {\n    if (_typeof(closable) === 'object' && closable !== null) {\n      return closable;\n    }\n    if (closable) {\n      return {\n        closeIcon: closeIcon\n      };\n    }\n    return {};\n  }, [closable, closeIcon]);\n  var ariaProps = pickAttrs(closableObj, true);\n\n  // ======================== Progress ========================\n  var validPercent = 100 - (!percent || percent < 0 ? 0 : percent > 100 ? 100 : percent);\n\n  // ======================== Render ========================\n  var noticePrefixCls = \"\".concat(prefixCls, \"-notice\");\n  return /*#__PURE__*/React.createElement(\"div\", _extends({}, divProps, {\n    ref: ref,\n    className: classNames(noticePrefixCls, className, _defineProperty({}, \"\".concat(noticePrefixCls, \"-closable\"), closable)),\n    style: style,\n    onMouseEnter: function onMouseEnter(e) {\n      var _divProps$onMouseEnte;\n      setHovering(true);\n      divProps === null || divProps === void 0 || (_divProps$onMouseEnte = divProps.onMouseEnter) === null || _divProps$onMouseEnte === void 0 || _divProps$onMouseEnte.call(divProps, e);\n    },\n    onMouseLeave: function onMouseLeave(e) {\n      var _divProps$onMouseLeav;\n      setHovering(false);\n      divProps === null || divProps === void 0 || (_divProps$onMouseLeav = divProps.onMouseLeave) === null || _divProps$onMouseLeav === void 0 || _divProps$onMouseLeav.call(divProps, e);\n    },\n    onClick: onClick\n  }), /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(noticePrefixCls, \"-content\")\n  }, content), closable && /*#__PURE__*/React.createElement(\"a\", _extends({\n    tabIndex: 0,\n    className: \"\".concat(noticePrefixCls, \"-close\"),\n    onKeyDown: onCloseKeyDown,\n    \"aria-label\": \"Close\"\n  }, ariaProps, {\n    onClick: function onClick(e) {\n      e.preventDefault();\n      e.stopPropagation();\n      onInternalClose();\n    }\n  }), closableObj.closeIcon), mergedShowProgress && /*#__PURE__*/React.createElement(\"progress\", {\n    className: \"\".concat(noticePrefixCls, \"-progress\"),\n    max: \"100\",\n    value: validPercent\n  }, validPercent + '%'));\n});\nexport default Notify;","import React from 'react';\nexport var NotificationContext = /*#__PURE__*/React.createContext({});\nvar NotificationProvider = function NotificationProvider(_ref) {\n  var children = _ref.children,\n    classNames = _ref.classNames;\n  return /*#__PURE__*/React.createElement(NotificationContext.Provider, {\n    value: {\n      classNames: classNames\n    }\n  }, children);\n};\nexport default NotificationProvider;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar DEFAULT_OFFSET = 8;\nvar DEFAULT_THRESHOLD = 3;\nvar DEFAULT_GAP = 16;\nvar useStack = function useStack(config) {\n  var result = {\n    offset: DEFAULT_OFFSET,\n    threshold: DEFAULT_THRESHOLD,\n    gap: DEFAULT_GAP\n  };\n  if (config && _typeof(config) === 'object') {\n    var _config$offset, _config$threshold, _config$gap;\n    result.offset = (_config$offset = config.offset) !== null && _config$offset !== void 0 ? _config$offset : DEFAULT_OFFSET;\n    result.threshold = (_config$threshold = config.threshold) !== null && _config$threshold !== void 0 ? _config$threshold : DEFAULT_THRESHOLD;\n    result.gap = (_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : DEFAULT_GAP;\n  }\n  return [!!config, result];\n};\nexport default useStack;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"className\", \"style\", \"classNames\", \"styles\"];\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport clsx from 'classnames';\nimport { CSSMotionList } from 'rc-motion';\nimport Notice from \"./Notice\";\nimport { NotificationContext } from \"./NotificationProvider\";\nimport useStack from \"./hooks/useStack\";\nvar NoticeList = function NoticeList(props) {\n  var configList = props.configList,\n    placement = props.placement,\n    prefixCls = props.prefixCls,\n    className = props.className,\n    style = props.style,\n    motion = props.motion,\n    onAllNoticeRemoved = props.onAllNoticeRemoved,\n    onNoticeClose = props.onNoticeClose,\n    stackConfig = props.stack;\n  var _useContext = useContext(NotificationContext),\n    ctxCls = _useContext.classNames;\n  var dictRef = useRef({});\n  var _useState = useState(null),\n    _useState2 = _slicedToArray(_useState, 2),\n    latestNotice = _useState2[0],\n    setLatestNotice = _useState2[1];\n  var _useState3 = useState([]),\n    _useState4 = _slicedToArray(_useState3, 2),\n    hoverKeys = _useState4[0],\n    setHoverKeys = _useState4[1];\n  var keys = configList.map(function (config) {\n    return {\n      config: config,\n      key: String(config.key)\n    };\n  });\n  var _useStack = useStack(stackConfig),\n    _useStack2 = _slicedToArray(_useStack, 2),\n    stack = _useStack2[0],\n    _useStack2$ = _useStack2[1],\n    offset = _useStack2$.offset,\n    threshold = _useStack2$.threshold,\n    gap = _useStack2$.gap;\n  var expanded = stack && (hoverKeys.length > 0 || keys.length <= threshold);\n  var placementMotion = typeof motion === 'function' ? motion(placement) : motion;\n\n  // Clean hover key\n  useEffect(function () {\n    if (stack && hoverKeys.length > 1) {\n      setHoverKeys(function (prev) {\n        return prev.filter(function (key) {\n          return keys.some(function (_ref) {\n            var dataKey = _ref.key;\n            return key === dataKey;\n          });\n        });\n      });\n    }\n  }, [hoverKeys, keys, stack]);\n\n  // Force update latest notice\n  useEffect(function () {\n    var _keys;\n    if (stack && dictRef.current[(_keys = keys[keys.length - 1]) === null || _keys === void 0 ? void 0 : _keys.key]) {\n      var _keys2;\n      setLatestNotice(dictRef.current[(_keys2 = keys[keys.length - 1]) === null || _keys2 === void 0 ? void 0 : _keys2.key]);\n    }\n  }, [keys, stack]);\n  return /*#__PURE__*/React.createElement(CSSMotionList, _extends({\n    key: placement,\n    className: clsx(prefixCls, \"\".concat(prefixCls, \"-\").concat(placement), ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.list, className, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-stack\"), !!stack), \"\".concat(prefixCls, \"-stack-expanded\"), expanded)),\n    style: style,\n    keys: keys,\n    motionAppear: true\n  }, placementMotion, {\n    onAllRemoved: function onAllRemoved() {\n      onAllNoticeRemoved(placement);\n    }\n  }), function (_ref2, nodeRef) {\n    var config = _ref2.config,\n      motionClassName = _ref2.className,\n      motionStyle = _ref2.style,\n      motionIndex = _ref2.index;\n    var _ref3 = config,\n      key = _ref3.key,\n      times = _ref3.times;\n    var strKey = String(key);\n    var _ref4 = config,\n      configClassName = _ref4.className,\n      configStyle = _ref4.style,\n      configClassNames = _ref4.classNames,\n      configStyles = _ref4.styles,\n      restConfig = _objectWithoutProperties(_ref4, _excluded);\n    var dataIndex = keys.findIndex(function (item) {\n      return item.key === strKey;\n    });\n\n    // If dataIndex is -1, that means this notice has been removed in data, but still in dom\n    // Should minus (motionIndex - 1) to get the correct index because keys.length is not the same as dom length\n    var stackStyle = {};\n    if (stack) {\n      var index = keys.length - 1 - (dataIndex > -1 ? dataIndex : motionIndex - 1);\n      var transformX = placement === 'top' || placement === 'bottom' ? '-50%' : '0';\n      if (index > 0) {\n        var _dictRef$current$strK, _dictRef$current$strK2, _dictRef$current$strK3;\n        stackStyle.height = expanded ? (_dictRef$current$strK = dictRef.current[strKey]) === null || _dictRef$current$strK === void 0 ? void 0 : _dictRef$current$strK.offsetHeight : latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetHeight;\n\n        // Transform\n        var verticalOffset = 0;\n        for (var i = 0; i < index; i++) {\n          var _dictRef$current$keys;\n          verticalOffset += ((_dictRef$current$keys = dictRef.current[keys[keys.length - 1 - i].key]) === null || _dictRef$current$keys === void 0 ? void 0 : _dictRef$current$keys.offsetHeight) + gap;\n        }\n        var transformY = (expanded ? verticalOffset : index * offset) * (placement.startsWith('top') ? 1 : -1);\n        var scaleX = !expanded && latestNotice !== null && latestNotice !== void 0 && latestNotice.offsetWidth && (_dictRef$current$strK2 = dictRef.current[strKey]) !== null && _dictRef$current$strK2 !== void 0 && _dictRef$current$strK2.offsetWidth ? ((latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetWidth) - offset * 2 * (index < 3 ? index : 3)) / ((_dictRef$current$strK3 = dictRef.current[strKey]) === null || _dictRef$current$strK3 === void 0 ? void 0 : _dictRef$current$strK3.offsetWidth) : 1;\n        stackStyle.transform = \"translate3d(\".concat(transformX, \", \").concat(transformY, \"px, 0) scaleX(\").concat(scaleX, \")\");\n      } else {\n        stackStyle.transform = \"translate3d(\".concat(transformX, \", 0, 0)\");\n      }\n    }\n    return /*#__PURE__*/React.createElement(\"div\", {\n      ref: nodeRef,\n      className: clsx(\"\".concat(prefixCls, \"-notice-wrapper\"), motionClassName, configClassNames === null || configClassNames === void 0 ? void 0 : configClassNames.wrapper),\n      style: _objectSpread(_objectSpread(_objectSpread({}, motionStyle), stackStyle), configStyles === null || configStyles === void 0 ? void 0 : configStyles.wrapper),\n      onMouseEnter: function onMouseEnter() {\n        return setHoverKeys(function (prev) {\n          return prev.includes(strKey) ? prev : [].concat(_toConsumableArray(prev), [strKey]);\n        });\n      },\n      onMouseLeave: function onMouseLeave() {\n        return setHoverKeys(function (prev) {\n          return prev.filter(function (k) {\n            return k !== strKey;\n          });\n        });\n      }\n    }, /*#__PURE__*/React.createElement(Notice, _extends({}, restConfig, {\n      ref: function ref(node) {\n        if (dataIndex > -1) {\n          dictRef.current[strKey] = node;\n        } else {\n          delete dictRef.current[strKey];\n        }\n      },\n      prefixCls: prefixCls,\n      classNames: configClassNames,\n      styles: configStyles,\n      className: clsx(configClassName, ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.notice),\n      style: configStyle,\n      times: times,\n      key: key,\n      eventKey: key,\n      onNoticeClose: onNoticeClose,\n      hovering: stack && hoverKeys.length > 0\n    })));\n  });\n};\nif (process.env.NODE_ENV !== 'production') {\n  NoticeList.displayName = 'NoticeList';\n}\nexport default NoticeList;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport NoticeList from \"./NoticeList\";\n// ant-notification ant-notification-topRight\nvar Notifications = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var _props$prefixCls = props.prefixCls,\n    prefixCls = _props$prefixCls === void 0 ? 'rc-notification' : _props$prefixCls,\n    container = props.container,\n    motion = props.motion,\n    maxCount = props.maxCount,\n    className = props.className,\n    style = props.style,\n    onAllRemoved = props.onAllRemoved,\n    stack = props.stack,\n    renderNotifications = props.renderNotifications;\n  var _React$useState = React.useState([]),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    configList = _React$useState2[0],\n    setConfigList = _React$useState2[1];\n\n  // ======================== Close =========================\n  var onNoticeClose = function onNoticeClose(key) {\n    var _config$onClose;\n    // Trigger close event\n    var config = configList.find(function (item) {\n      return item.key === key;\n    });\n    config === null || config === void 0 || (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);\n    setConfigList(function (list) {\n      return list.filter(function (item) {\n        return item.key !== key;\n      });\n    });\n  };\n\n  // ========================= Refs =========================\n  React.useImperativeHandle(ref, function () {\n    return {\n      open: function open(config) {\n        setConfigList(function (list) {\n          var clone = _toConsumableArray(list);\n\n          // Replace if exist\n          var index = clone.findIndex(function (item) {\n            return item.key === config.key;\n          });\n          var innerConfig = _objectSpread({}, config);\n          if (index >= 0) {\n            var _list$index;\n            innerConfig.times = (((_list$index = list[index]) === null || _list$index === void 0 ? void 0 : _list$index.times) || 0) + 1;\n            clone[index] = innerConfig;\n          } else {\n            innerConfig.times = 0;\n            clone.push(innerConfig);\n          }\n          if (maxCount > 0 && clone.length > maxCount) {\n            clone = clone.slice(-maxCount);\n          }\n          return clone;\n        });\n      },\n      close: function close(key) {\n        onNoticeClose(key);\n      },\n      destroy: function destroy() {\n        setConfigList([]);\n      }\n    };\n  });\n\n  // ====================== Placements ======================\n  var _React$useState3 = React.useState({}),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    placements = _React$useState4[0],\n    setPlacements = _React$useState4[1];\n  React.useEffect(function () {\n    var nextPlacements = {};\n    configList.forEach(function (config) {\n      var _config$placement = config.placement,\n        placement = _config$placement === void 0 ? 'topRight' : _config$placement;\n      if (placement) {\n        nextPlacements[placement] = nextPlacements[placement] || [];\n        nextPlacements[placement].push(config);\n      }\n    });\n\n    // Fill exist placements to avoid empty list causing remove without motion\n    Object.keys(placements).forEach(function (placement) {\n      nextPlacements[placement] = nextPlacements[placement] || [];\n    });\n    setPlacements(nextPlacements);\n  }, [configList]);\n\n  // Clean up container if all notices fade out\n  var onAllNoticeRemoved = function onAllNoticeRemoved(placement) {\n    setPlacements(function (originPlacements) {\n      var clone = _objectSpread({}, originPlacements);\n      var list = clone[placement] || [];\n      if (!list.length) {\n        delete clone[placement];\n      }\n      return clone;\n    });\n  };\n\n  // Effect tell that placements is empty now\n  var emptyRef = React.useRef(false);\n  React.useEffect(function () {\n    if (Object.keys(placements).length > 0) {\n      emptyRef.current = true;\n    } else if (emptyRef.current) {\n      // Trigger only when from exist to empty\n      onAllRemoved === null || onAllRemoved === void 0 || onAllRemoved();\n      emptyRef.current = false;\n    }\n  }, [placements]);\n  // ======================== Render ========================\n  if (!container) {\n    return null;\n  }\n  var placementList = Object.keys(placements);\n  return /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(React.Fragment, null, placementList.map(function (placement) {\n    var placementConfigList = placements[placement];\n    var list = /*#__PURE__*/React.createElement(NoticeList, {\n      key: placement,\n      configList: placementConfigList,\n      placement: placement,\n      prefixCls: prefixCls,\n      className: className === null || className === void 0 ? void 0 : className(placement),\n      style: style === null || style === void 0 ? void 0 : style(placement),\n      motion: motion,\n      onNoticeClose: onNoticeClose,\n      onAllNoticeRemoved: onAllNoticeRemoved,\n      stack: stack\n    });\n    return renderNotifications ? renderNotifications(list, {\n      prefixCls: prefixCls,\n      key: placement\n    }) : list;\n  })), container);\n});\nif (process.env.NODE_ENV !== 'production') {\n  Notifications.displayName = 'Notifications';\n}\nexport default Notifications;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"getContainer\", \"motion\", \"prefixCls\", \"maxCount\", \"className\", \"style\", \"onAllRemoved\", \"stack\", \"renderNotifications\"];\nimport * as React from 'react';\nimport Notifications from \"../Notifications\";\nimport { useEvent } from 'rc-util';\nvar defaultGetContainer = function defaultGetContainer() {\n  return document.body;\n};\nvar uniqueKey = 0;\nfunction mergeConfig() {\n  var clone = {};\n  for (var _len = arguments.length, objList = new Array(_len), _key = 0; _key < _len; _key++) {\n    objList[_key] = arguments[_key];\n  }\n  objList.forEach(function (obj) {\n    if (obj) {\n      Object.keys(obj).forEach(function (key) {\n        var val = obj[key];\n        if (val !== undefined) {\n          clone[key] = val;\n        }\n      });\n    }\n  });\n  return clone;\n}\nexport default function useNotification() {\n  var rootConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _rootConfig$getContai = rootConfig.getContainer,\n    getContainer = _rootConfig$getContai === void 0 ? defaultGetContainer : _rootConfig$getContai,\n    motion = rootConfig.motion,\n    prefixCls = rootConfig.prefixCls,\n    maxCount = rootConfig.maxCount,\n    className = rootConfig.className,\n    style = rootConfig.style,\n    onAllRemoved = rootConfig.onAllRemoved,\n    stack = rootConfig.stack,\n    renderNotifications = rootConfig.renderNotifications,\n    shareConfig = _objectWithoutProperties(rootConfig, _excluded);\n  var _React$useState = React.useState(),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    container = _React$useState2[0],\n    setContainer = _React$useState2[1];\n  var notificationsRef = React.useRef();\n  var contextHolder = /*#__PURE__*/React.createElement(Notifications, {\n    container: container,\n    ref: notificationsRef,\n    prefixCls: prefixCls,\n    motion: motion,\n    maxCount: maxCount,\n    className: className,\n    style: style,\n    onAllRemoved: onAllRemoved,\n    stack: stack,\n    renderNotifications: renderNotifications\n  });\n  var _React$useState3 = React.useState([]),\n    _React$useState4 = _slicedToArray(_React$useState3, 2),\n    taskQueue = _React$useState4[0],\n    setTaskQueue = _React$useState4[1];\n  var open = useEvent(function (config) {\n    var mergedConfig = mergeConfig(shareConfig, config);\n    if (mergedConfig.key === null || mergedConfig.key === undefined) {\n      mergedConfig.key = \"rc-notification-\".concat(uniqueKey);\n      uniqueKey += 1;\n    }\n    setTaskQueue(function (queue) {\n      return [].concat(_toConsumableArray(queue), [{\n        type: 'open',\n        config: mergedConfig\n      }]);\n    });\n  });\n\n  // ========================= Refs =========================\n  var api = React.useMemo(function () {\n    return {\n      open: open,\n      close: function close(key) {\n        setTaskQueue(function (queue) {\n          return [].concat(_toConsumableArray(queue), [{\n            type: 'close',\n            key: key\n          }]);\n        });\n      },\n      destroy: function destroy() {\n        setTaskQueue(function (queue) {\n          return [].concat(_toConsumableArray(queue), [{\n            type: 'destroy'\n          }]);\n        });\n      }\n    };\n  }, []);\n\n  // ======================= Container ======================\n  // React 18 should all in effect that we will check container in each render\n  // Which means getContainer should be stable.\n  React.useEffect(function () {\n    setContainer(getContainer());\n  });\n\n  // ======================== Effect ========================\n  React.useEffect(function () {\n    // Flush task when node ready\n    if (notificationsRef.current && taskQueue.length) {\n      taskQueue.forEach(function (task) {\n        switch (task.type) {\n          case 'open':\n            notificationsRef.current.open(task.config);\n            break;\n          case 'close':\n            notificationsRef.current.close(task.key);\n            break;\n          case 'destroy':\n            notificationsRef.current.destroy();\n            break;\n        }\n      });\n\n      // https://github.com/ant-design/ant-design/issues/52590\n      // React `startTransition` will run once `useEffect` but many times `setState`,\n      // So `setTaskQueue` with filtered array will cause infinite loop.\n      // We cache the first match queue instead.\n      var oriTaskQueue;\n      var tgtTaskQueue;\n\n      // React 17 will mix order of effect & setState in async\n      // - open: setState[0]\n      // - effect[0]\n      // - open: setState[1]\n      // - effect setState([]) * here will clean up [0, 1] in React 17\n      setTaskQueue(function (oriQueue) {\n        if (oriTaskQueue !== oriQueue || !tgtTaskQueue) {\n          oriTaskQueue = oriQueue;\n          tgtTaskQueue = oriQueue.filter(function (task) {\n            return !taskQueue.includes(task);\n          });\n        }\n        return tgtTaskQueue;\n      });\n    }\n  }, [taskQueue]);\n\n  // ======================== Return ========================\n  return [api, contextHolder];\n}","import { useToken } from '../../theme/internal';\n/**\n * This hook is only for cssVar to add root className for components.\n * If root ClassName is needed, this hook could be refactored with `-root`\n * @param prefixCls\n */\nconst useCSSVarCls = prefixCls => {\n  const [,,,, cssVar] = useToken();\n  return cssVar ? `${prefixCls}-css-var` : '';\n};\nexport default useCSSVarCls;","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar AbstractCalculator = /*#__PURE__*/_createClass(function AbstractCalculator() {\n  _classCallCheck(this, AbstractCalculator);\n});\nexport default AbstractCalculator;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return \"\".concat(value).concat(CALC_UNIT);\n  }\n  return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(CSSCalculator, _AbstractCalculator);\n  var _super = _createSuper(CSSCalculator);\n  function CSSCalculator(num, unitlessCssVar) {\n    var _this;\n    _classCallCheck(this, CSSCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", '');\n    _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n    var numType = _typeof(num);\n    _this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      _this.result = \"(\".concat(num.result, \")\");\n    } else if (numType === 'number') {\n      _this.result = unit(num);\n    } else if (numType === 'string') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(CSSCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" * \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" / \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"getResult\",\n    value: function getResult(force) {\n      return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal(options) {\n      var _this2 = this;\n      var _ref = options || {},\n        cssUnit = _ref.unit;\n      var mergedUnit = true;\n      if (typeof cssUnit === 'boolean') {\n        mergedUnit = cssUnit;\n      } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n        return _this2.result.includes(cssVar);\n      })) {\n        mergedUnit = false;\n      }\n      this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n      if (typeof this.lowPriority !== 'undefined') {\n        return \"calc(\".concat(this.result, \")\");\n      }\n      return this.result;\n    }\n  }]);\n  return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar NumCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(NumCalculator, _AbstractCalculator);\n  var _super = _createSuper(NumCalculator);\n  function NumCalculator(num) {\n    var _this;\n    _classCallCheck(this, NumCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", 0);\n    if (num instanceof NumCalculator) {\n      _this.result = num.result;\n    } else if (typeof num === 'number') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(NumCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof NumCalculator) {\n        this.result += num.result;\n      } else if (typeof num === 'number') {\n        this.result += num;\n      }\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof NumCalculator) {\n        this.result -= num.result;\n      } else if (typeof num === 'number') {\n        this.result -= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (num instanceof NumCalculator) {\n        this.result *= num.result;\n      } else if (typeof num === 'number') {\n        this.result *= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (num instanceof NumCalculator) {\n        this.result /= num.result;\n      } else if (typeof num === 'number') {\n        this.result /= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal() {\n      return this.result;\n    }\n  }]);\n  return NumCalculator;\n}(AbstractCalculator);\nexport default NumCalculator;","import CSSCalculator from \"./CSSCalculator\";\nimport NumCalculator from \"./NumCalculator\";\nvar genCalc = function genCalc(type, unitlessCssVar) {\n  var Calculator = type === 'css' ? CSSCalculator : NumCalculator;\n  return function (num) {\n    return new Calculator(num, unitlessCssVar);\n  };\n};\nexport default genCalc;","var getCompVarPrefix = function getCompVarPrefix(component, prefix) {\n  return \"\".concat([prefix, component.replace(/([A-Z]+)([A-Z][a-z]+)/g, '$1-$2').replace(/([a-z])([A-Z])/g, '$1-$2')].filter(Boolean).join('-'));\n};\nexport default getCompVarPrefix;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from 'rc-util';\nfunction getComponentToken(component, token, defaultToken, options) {\n  var customToken = _objectSpread({}, token[component]);\n  if (options !== null && options !== void 0 && options.deprecatedTokens) {\n    var deprecatedTokens = options.deprecatedTokens;\n    deprecatedTokens.forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n        oldTokenKey = _ref2[0],\n        newTokenKey = _ref2[1];\n      if (process.env.NODE_ENV !== 'production') {\n        warning(!(customToken !== null && customToken !== void 0 && customToken[oldTokenKey]), \"Component Token `\".concat(String(oldTokenKey), \"` of \").concat(String(component), \" is deprecated. Please use `\").concat(String(newTokenKey), \"` instead.\"));\n      }\n\n      // Should wrap with `if` clause, or there will be `undefined` in object.\n      if (customToken !== null && customToken !== void 0 && customToken[oldTokenKey] || customToken !== null && customToken !== void 0 && customToken[newTokenKey]) {\n        var _customToken$newToken;\n        (_customToken$newToken = customToken[newTokenKey]) !== null && _customToken$newToken !== void 0 ? _customToken$newToken : customToken[newTokenKey] = customToken === null || customToken === void 0 ? void 0 : customToken[oldTokenKey];\n      }\n    });\n  }\n  var mergedToken = _objectSpread(_objectSpread({}, defaultToken), customToken);\n\n  // Remove same value as global token to minimize size\n  Object.keys(mergedToken).forEach(function (key) {\n    if (mergedToken[key] === token[key]) {\n      delete mergedToken[key];\n    }\n  });\n  return mergedToken;\n}\nexport default getComponentToken;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar enableStatistic = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nvar recording = true;\n\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge() {\n  for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {\n    objs[_key] = arguments[_key];\n  }\n  /* istanbul ignore next */\n  if (!enableStatistic) {\n    return Object.assign.apply(Object, [{}].concat(objs));\n  }\n  recording = false;\n  var ret = {};\n  objs.forEach(function (obj) {\n    if (_typeof(obj) !== 'object') {\n      return;\n    }\n    var keys = Object.keys(obj);\n    keys.forEach(function (key) {\n      Object.defineProperty(ret, key, {\n        configurable: true,\n        enumerable: true,\n        get: function get() {\n          return obj[key];\n        }\n      });\n    });\n  });\n  recording = true;\n  return ret;\n}\n\n/** @internal Internal Usage. Not use in your production. */\nexport var statistic = {};\n\n/** @internal Internal Usage. Not use in your production. */\nexport var _statistic_build_ = {};\n\n/* istanbul ignore next */\nfunction noop() {}\n\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nvar statisticToken = function statisticToken(token) {\n  var tokenKeys;\n  var proxy = token;\n  var flush = noop;\n  if (enableStatistic && typeof Proxy !== 'undefined') {\n    tokenKeys = new Set();\n    proxy = new Proxy(token, {\n      get: function get(obj, prop) {\n        if (recording) {\n          var _tokenKeys;\n          (_tokenKeys = tokenKeys) === null || _tokenKeys === void 0 || _tokenKeys.add(prop);\n        }\n        return obj[prop];\n      }\n    });\n    flush = function flush(componentName, componentToken) {\n      var _statistic$componentN;\n      statistic[componentName] = {\n        global: Array.from(tokenKeys),\n        component: _objectSpread(_objectSpread({}, (_statistic$componentN = statistic[componentName]) === null || _statistic$componentN === void 0 ? void 0 : _statistic$componentN.component), componentToken)\n      };\n    };\n  }\n  return {\n    token: proxy,\n    keys: tokenKeys,\n    flush: flush\n  };\n};\nexport default statisticToken;","import { merge as mergeToken } from \"./statistic\";\nfunction getDefaultComponentToken(component, token, getDefaultToken) {\n  if (typeof getDefaultToken === 'function') {\n    var _token$component;\n    return getDefaultToken(mergeToken(token, (_token$component = token[component]) !== null && _token$component !== void 0 ? _token$component : {}));\n  }\n  return getDefaultToken !== null && getDefaultToken !== void 0 ? getDefaultToken : {};\n}\nexport default getDefaultComponentToken;","import { unit } from '@ant-design/cssinjs';\nfunction genMaxMin(type) {\n  if (type === 'js') {\n    return {\n      max: Math.max,\n      min: Math.min\n    };\n  }\n  return {\n    max: function max() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      return \"max(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    },\n    min: function min() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      return \"min(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    }\n  };\n}\nexport default genMaxMin;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nvar BEAT_LIMIT = 1000 * 60 * 10;\n\n/**\n * A helper class to map keys to values.\n * It supports both primitive keys and object keys.\n */\nvar ArrayKeyMap = /*#__PURE__*/function () {\n  function ArrayKeyMap() {\n    _classCallCheck(this, ArrayKeyMap);\n    _defineProperty(this, \"map\", new Map());\n    // Use WeakMap to avoid memory leak\n    _defineProperty(this, \"objectIDMap\", new WeakMap());\n    _defineProperty(this, \"nextID\", 0);\n    _defineProperty(this, \"lastAccessBeat\", new Map());\n    // We will clean up the cache when reach the limit\n    _defineProperty(this, \"accessBeat\", 0);\n  }\n  _createClass(ArrayKeyMap, [{\n    key: \"set\",\n    value: function set(keys, value) {\n      // New set will trigger clear\n      this.clear();\n\n      // Set logic\n      var compositeKey = this.getCompositeKey(keys);\n      this.map.set(compositeKey, value);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n    }\n  }, {\n    key: \"get\",\n    value: function get(keys) {\n      var compositeKey = this.getCompositeKey(keys);\n      var cache = this.map.get(compositeKey);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n      this.accessBeat += 1;\n      return cache;\n    }\n  }, {\n    key: \"getCompositeKey\",\n    value: function getCompositeKey(keys) {\n      var _this = this;\n      var ids = keys.map(function (key) {\n        if (key && _typeof(key) === 'object') {\n          return \"obj_\".concat(_this.getObjectID(key));\n        }\n        return \"\".concat(_typeof(key), \"_\").concat(key);\n      });\n      return ids.join('|');\n    }\n  }, {\n    key: \"getObjectID\",\n    value: function getObjectID(obj) {\n      if (this.objectIDMap.has(obj)) {\n        return this.objectIDMap.get(obj);\n      }\n      var id = this.nextID;\n      this.objectIDMap.set(obj, id);\n      this.nextID += 1;\n      return id;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _this2 = this;\n      if (this.accessBeat > 10000) {\n        var now = Date.now();\n        this.lastAccessBeat.forEach(function (beat, key) {\n          if (now - beat > BEAT_LIMIT) {\n            _this2.map.delete(key);\n            _this2.lastAccessBeat.delete(key);\n          }\n        });\n        this.accessBeat = 0;\n      }\n    }\n  }]);\n  return ArrayKeyMap;\n}();\nvar uniqueMap = new ArrayKeyMap();\n\n/**\n * Like `useMemo`, but this hook result will be shared across all instances.\n */\nfunction useUniqueMemo(memoFn, deps) {\n  return React.useMemo(function () {\n    var cachedValue = uniqueMap.get(deps);\n    if (cachedValue) {\n      return cachedValue;\n    }\n    var newValue = memoFn();\n    uniqueMap.set(deps, newValue);\n    return newValue;\n  }, deps);\n}\nexport default useUniqueMemo;","/**\n * Provide a default hook since not everyone needs to config this.\n */\nvar useDefaultCSP = function useDefaultCSP() {\n  return {};\n};\nexport default useDefaultCSP;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport React from 'react';\nimport { token2CSSVar, useCSSVarRegister, useStyleRegister } from '@ant-design/cssinjs';\nimport genCalc from \"./calc\";\nimport getCompVarPrefix from \"./getCompVarPrefix\";\nimport getComponentToken from \"./getComponentToken\";\nimport getDefaultComponentToken from \"./getDefaultComponentToken\";\nimport genMaxMin from \"./maxmin\";\nimport statisticToken, { merge as mergeToken } from \"./statistic\";\nimport useUniqueMemo from \"../_util/hooks/useUniqueMemo\";\nimport useDefaultCSP from \"../hooks/useCSP\";\nfunction genStyleUtils(config) {\n  // Dependency inversion for preparing basic config.\n  var _config$useCSP = config.useCSP,\n    useCSP = _config$useCSP === void 0 ? useDefaultCSP : _config$useCSP,\n    useToken = config.useToken,\n    usePrefix = config.usePrefix,\n    getResetStyles = config.getResetStyles,\n    getCommonStyle = config.getCommonStyle,\n    getCompUnitless = config.getCompUnitless;\n  function genStyleHooks(component, styleFn, getDefaultToken, options) {\n    var componentName = Array.isArray(component) ? component[0] : component;\n    function prefixToken(key) {\n      return \"\".concat(String(componentName)).concat(key.slice(0, 1).toUpperCase()).concat(key.slice(1));\n    }\n\n    // Fill unitless\n    var originUnitless = (options === null || options === void 0 ? void 0 : options.unitless) || {};\n    var originCompUnitless = typeof getCompUnitless === 'function' ? getCompUnitless(component) : {};\n    var compUnitless = _objectSpread(_objectSpread({}, originCompUnitless), {}, _defineProperty({}, prefixToken('zIndexPopup'), true));\n    Object.keys(originUnitless).forEach(function (key) {\n      compUnitless[prefixToken(key)] = originUnitless[key];\n    });\n\n    // Options\n    var mergedOptions = _objectSpread(_objectSpread({}, options), {}, {\n      unitless: compUnitless,\n      prefixToken: prefixToken\n    });\n\n    // Hooks\n    var useStyle = genComponentStyleHook(component, styleFn, getDefaultToken, mergedOptions);\n    var useCSSVar = genCSSVarRegister(componentName, getDefaultToken, mergedOptions);\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var _useStyle = useStyle(prefixCls, rootCls),\n        _useStyle2 = _slicedToArray(_useStyle, 2),\n        hashId = _useStyle2[1];\n      var _useCSSVar = useCSSVar(rootCls),\n        _useCSSVar2 = _slicedToArray(_useCSSVar, 2),\n        wrapCSSVar = _useCSSVar2[0],\n        cssVarCls = _useCSSVar2[1];\n      return [wrapCSSVar, hashId, cssVarCls];\n    };\n  }\n  function genCSSVarRegister(component, getDefaultToken, options) {\n    var compUnitless = options.unitless,\n      _options$injectStyle = options.injectStyle,\n      injectStyle = _options$injectStyle === void 0 ? true : _options$injectStyle,\n      prefixToken = options.prefixToken,\n      ignore = options.ignore;\n    var CSSVarRegister = function CSSVarRegister(_ref) {\n      var rootCls = _ref.rootCls,\n        _ref$cssVar = _ref.cssVar,\n        cssVar = _ref$cssVar === void 0 ? {} : _ref$cssVar;\n      var _useToken = useToken(),\n        realToken = _useToken.realToken;\n      useCSSVarRegister({\n        path: [component],\n        prefix: cssVar.prefix,\n        key: cssVar.key,\n        unitless: compUnitless,\n        ignore: ignore,\n        token: realToken,\n        scope: rootCls\n      }, function () {\n        var defaultToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentToken = getComponentToken(component, realToken, defaultToken, {\n          deprecatedTokens: options === null || options === void 0 ? void 0 : options.deprecatedTokens\n        });\n        Object.keys(defaultToken).forEach(function (key) {\n          componentToken[prefixToken(key)] = componentToken[key];\n          delete componentToken[key];\n        });\n        return componentToken;\n      });\n      return null;\n    };\n    var useCSSVar = function useCSSVar(rootCls) {\n      var _useToken2 = useToken(),\n        cssVar = _useToken2.cssVar;\n      return [function (node) {\n        return injectStyle && cssVar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CSSVarRegister, {\n          rootCls: rootCls,\n          cssVar: cssVar,\n          component: component\n        }), node) : node;\n      }, cssVar === null || cssVar === void 0 ? void 0 : cssVar.key];\n    };\n    return useCSSVar;\n  }\n  function genComponentStyleHook(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var cells = Array.isArray(componentName) ? componentName : [componentName, componentName];\n    var _cells = _slicedToArray(cells, 1),\n      component = _cells[0];\n    var concatComponent = cells.join('-');\n    var mergedLayer = config.layer || {\n      name: 'antd'\n    };\n\n    // Return new style hook\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var _useToken3 = useToken(),\n        theme = _useToken3.theme,\n        realToken = _useToken3.realToken,\n        hashId = _useToken3.hashId,\n        token = _useToken3.token,\n        cssVar = _useToken3.cssVar;\n      var _usePrefix = usePrefix(),\n        rootPrefixCls = _usePrefix.rootPrefixCls,\n        iconPrefixCls = _usePrefix.iconPrefixCls;\n      var csp = useCSP();\n      var type = cssVar ? 'css' : 'js';\n\n      // Use unique memo to share the result across all instances\n      var calc = useUniqueMemo(function () {\n        var unitlessCssVar = new Set();\n        if (cssVar) {\n          Object.keys(options.unitless || {}).forEach(function (key) {\n            // Some component proxy the AliasToken (e.g. Image) and some not (e.g. Modal)\n            // We should both pass in `unitlessCssVar` to make sure the CSSVar can be unitless.\n            unitlessCssVar.add(token2CSSVar(key, cssVar.prefix));\n            unitlessCssVar.add(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)));\n          });\n        }\n        return genCalc(type, unitlessCssVar);\n      }, [type, component, cssVar === null || cssVar === void 0 ? void 0 : cssVar.prefix]);\n      var _genMaxMin = genMaxMin(type),\n        max = _genMaxMin.max,\n        min = _genMaxMin.min;\n\n      // Shared config\n      var sharedConfig = {\n        theme: theme,\n        token: token,\n        hashId: hashId,\n        nonce: function nonce() {\n          return csp.nonce;\n        },\n        clientOnly: options.clientOnly,\n        layer: mergedLayer,\n        // antd is always at top of styles\n        order: options.order || -999\n      };\n\n      // This if statement is safe, as it will only be used if the generator has the function. It's not dynamic.\n      if (typeof getResetStyles === 'function') {\n        // Generate style for all need reset tags.\n        useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n          clientOnly: false,\n          path: ['Shared', rootPrefixCls]\n        }), function () {\n          return getResetStyles(token, {\n            prefix: {\n              rootPrefixCls: rootPrefixCls,\n              iconPrefixCls: iconPrefixCls\n            },\n            csp: csp\n          });\n        });\n      }\n      var wrapSSR = useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n        path: [concatComponent, prefixCls, iconPrefixCls]\n      }), function () {\n        if (options.injectStyle === false) {\n          return [];\n        }\n        var _statisticToken = statisticToken(token),\n          proxyToken = _statisticToken.token,\n          flush = _statisticToken.flush;\n        var defaultComponentToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentCls = \".\".concat(prefixCls);\n        var componentToken = getComponentToken(component, realToken, defaultComponentToken, {\n          deprecatedTokens: options.deprecatedTokens\n        });\n        if (cssVar && defaultComponentToken && _typeof(defaultComponentToken) === 'object') {\n          Object.keys(defaultComponentToken).forEach(function (key) {\n            defaultComponentToken[key] = \"var(\".concat(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)), \")\");\n          });\n        }\n        var mergedToken = mergeToken(proxyToken, {\n          componentCls: componentCls,\n          prefixCls: prefixCls,\n          iconCls: \".\".concat(iconPrefixCls),\n          antCls: \".\".concat(rootPrefixCls),\n          calc: calc,\n          // @ts-ignore\n          max: max,\n          // @ts-ignore\n          min: min\n        }, cssVar ? defaultComponentToken : componentToken);\n        var styleInterpolation = styleFn(mergedToken, {\n          hashId: hashId,\n          prefixCls: prefixCls,\n          rootPrefixCls: rootPrefixCls,\n          iconPrefixCls: iconPrefixCls\n        });\n        flush(component, componentToken);\n        var commonStyle = typeof getCommonStyle === 'function' ? getCommonStyle(mergedToken, prefixCls, rootCls, options.resetFont) : null;\n        return [options.resetStyle === false ? null : commonStyle, styleInterpolation];\n      });\n      return [wrapSSR, hashId];\n    };\n  }\n  function genSubStyleComponent(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var useStyle = genComponentStyleHook(componentName, styleFn, getDefaultToken, _objectSpread({\n      resetStyle: false,\n      // Sub Style should default after root one\n      order: -998\n    }, options));\n    var StyledComponent = function StyledComponent(_ref2) {\n      var prefixCls = _ref2.prefixCls,\n        _ref2$rootCls = _ref2.rootCls,\n        rootCls = _ref2$rootCls === void 0 ? prefixCls : _ref2$rootCls;\n      useStyle(prefixCls, rootCls);\n      return null;\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.displayName = \"SubStyle_\".concat(String(Array.isArray(componentName) ? componentName.join('.') : componentName));\n    }\n    return StyledComponent;\n  }\n  return {\n    genStyleHooks: genStyleHooks,\n    genSubStyleComponent: genSubStyleComponent,\n    genComponentStyleHook: genComponentStyleHook\n  };\n}\nexport default genStyleUtils;","import { useContext } from 'react';\nimport { genStyleUtils } from '@ant-design/cssinjs-utils';\nimport { ConfigContext, defaultIconPrefixCls } from '../../config-provider/context';\nimport { genCommonStyle, genIconStyle, genLinkStyle } from '../../style';\nimport useLocalToken, { unitless } from '../useToken';\nexport const {\n  genStyleHooks,\n  genComponentStyleHook,\n  genSubStyleComponent\n} = genStyleUtils({\n  usePrefix: () => {\n    const {\n      getPrefixCls,\n      iconPrefixCls\n    } = useContext(ConfigContext);\n    const rootPrefixCls = getPrefixCls();\n    return {\n      rootPrefixCls,\n      iconPrefixCls\n    };\n  },\n  useToken: () => {\n    const [theme, realToken, hashId, token, cssVar] = useLocalToken();\n    return {\n      theme,\n      realToken,\n      hashId,\n      token,\n      cssVar\n    };\n  },\n  useCSP: () => {\n    const {\n      csp\n    } = useContext(ConfigContext);\n    return csp !== null && csp !== void 0 ? csp : {};\n  },\n  getResetStyles: (token, config) => {\n    var _a;\n    const linkStyle = genLinkStyle(token);\n    return [linkStyle, {\n      '&': linkStyle\n    }, genIconStyle((_a = config === null || config === void 0 ? void 0 : config.prefix.iconPrefixCls) !== null && _a !== void 0 ? _a : defaultIconPrefixCls)];\n  },\n  getCommonStyle: genCommonStyle,\n  getCompUnitless: () => unitless\n});","import { Keyframes } from '@ant-design/cssinjs';\nimport { CONTAINER_MAX_OFFSET } from '../../_util/hooks/useZIndex';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genMessageStyle = token => {\n  const {\n    componentCls,\n    iconCls,\n    boxShadow,\n    colorText,\n    colorSuccess,\n    colorError,\n    colorWarning,\n    colorInfo,\n    fontSizeLG,\n    motionEaseInOutCirc,\n    motionDurationSlow,\n    marginXS,\n    paddingXS,\n    borderRadiusLG,\n    zIndexPopup,\n    // Custom token\n    contentPadding,\n    contentBg\n  } = token;\n  const noticeCls = `${componentCls}-notice`;\n  const messageMoveIn = new Keyframes('MessageMoveIn', {\n    '0%': {\n      padding: 0,\n      transform: 'translateY(-100%)',\n      opacity: 0\n    },\n    '100%': {\n      padding: paddingXS,\n      transform: 'translateY(0)',\n      opacity: 1\n    }\n  });\n  const messageMoveOut = new Keyframes('MessageMoveOut', {\n    '0%': {\n      maxHeight: token.height,\n      padding: paddingXS,\n      opacity: 1\n    },\n    '100%': {\n      maxHeight: 0,\n      padding: 0,\n      opacity: 0\n    }\n  });\n  const noticeStyle = {\n    padding: paddingXS,\n    textAlign: 'center',\n    [`${componentCls}-custom-content`]: {\n      display: 'flex',\n      alignItems: 'center'\n    },\n    [`${componentCls}-custom-content > ${iconCls}`]: {\n      marginInlineEnd: marginXS,\n      // affected by ltr or rtl\n      fontSize: fontSizeLG\n    },\n    [`${noticeCls}-content`]: {\n      display: 'inline-block',\n      padding: contentPadding,\n      background: contentBg,\n      borderRadius: borderRadiusLG,\n      boxShadow,\n      pointerEvents: 'all'\n    },\n    [`${componentCls}-success > ${iconCls}`]: {\n      color: colorSuccess\n    },\n    [`${componentCls}-error > ${iconCls}`]: {\n      color: colorError\n    },\n    [`${componentCls}-warning > ${iconCls}`]: {\n      color: colorWarning\n    },\n    [`${componentCls}-info > ${iconCls},\n      ${componentCls}-loading > ${iconCls}`]: {\n      color: colorInfo\n    }\n  };\n  return [\n  // ============================ Holder ============================\n  {\n    [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n      color: colorText,\n      position: 'fixed',\n      top: marginXS,\n      width: '100%',\n      pointerEvents: 'none',\n      zIndex: zIndexPopup,\n      [`${componentCls}-move-up`]: {\n        animationFillMode: 'forwards'\n      },\n      [`\n        ${componentCls}-move-up-appear,\n        ${componentCls}-move-up-enter\n      `]: {\n        animationName: messageMoveIn,\n        animationDuration: motionDurationSlow,\n        animationPlayState: 'paused',\n        animationTimingFunction: motionEaseInOutCirc\n      },\n      [`\n        ${componentCls}-move-up-appear${componentCls}-move-up-appear-active,\n        ${componentCls}-move-up-enter${componentCls}-move-up-enter-active\n      `]: {\n        animationPlayState: 'running'\n      },\n      [`${componentCls}-move-up-leave`]: {\n        animationName: messageMoveOut,\n        animationDuration: motionDurationSlow,\n        animationPlayState: 'paused',\n        animationTimingFunction: motionEaseInOutCirc\n      },\n      [`${componentCls}-move-up-leave${componentCls}-move-up-leave-active`]: {\n        animationPlayState: 'running'\n      },\n      '&-rtl': {\n        direction: 'rtl',\n        span: {\n          direction: 'rtl'\n        }\n      }\n    })\n  },\n  // ============================ Notice ============================\n  {\n    [componentCls]: {\n      [`${noticeCls}-wrapper`]: Object.assign({}, noticeStyle)\n    }\n  },\n  // ============================= Pure =============================\n  {\n    [`${componentCls}-notice-pure-panel`]: Object.assign(Object.assign({}, noticeStyle), {\n      padding: 0,\n      textAlign: 'start'\n    })\n  }];\n};\nexport const prepareComponentToken = token => ({\n  zIndexPopup: token.zIndexPopupBase + CONTAINER_MAX_OFFSET + 10,\n  contentBg: token.colorBgElevated,\n  contentPadding: `${(token.controlHeightLG - token.fontSize * token.lineHeight) / 2}px ${token.paddingSM}px`\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Message', token => {\n  // Gen-style functions here\n  const combinedToken = mergeToken(token, {\n    height: 150\n  });\n  return [genMessageStyle(combinedToken)];\n}, prepareComponentToken);","import React from 'react';\nimport useToken from '../../theme/useToken';\nimport { devUseWarning } from '../warning';\nimport zIndexContext from '../zindexContext';\n// Z-Index control range\n// Container: 1000 + offset 100 (max base + 10 * offset = 2000)\n// Popover: offset 50\n// Notification: Container Max zIndex + componentOffset\nconst CONTAINER_OFFSET = 100;\nconst CONTAINER_OFFSET_MAX_COUNT = 10;\nexport const CONTAINER_MAX_OFFSET = CONTAINER_OFFSET * CONTAINER_OFFSET_MAX_COUNT;\n/**\n * Static function will default be the `CONTAINER_MAX_OFFSET`.\n * But it still may have children component like Select, Dropdown.\n * So the warning zIndex should exceed the `CONTAINER_MAX_OFFSET`.\n */\nconst CONTAINER_MAX_OFFSET_WITH_CHILDREN = CONTAINER_MAX_OFFSET + CONTAINER_OFFSET;\nexport const containerBaseZIndexOffset = {\n  Modal: CONTAINER_OFFSET,\n  Drawer: CONTAINER_OFFSET,\n  Popover: CONTAINER_OFFSET,\n  Popconfirm: CONTAINER_OFFSET,\n  Tooltip: CONTAINER_OFFSET,\n  Tour: CONTAINER_OFFSET,\n  FloatButton: CONTAINER_OFFSET\n};\nexport const consumerBaseZIndexOffset = {\n  SelectLike: 50,\n  Dropdown: 50,\n  DatePicker: 50,\n  Menu: 50,\n  ImagePreview: 1\n};\nfunction isContainerType(type) {\n  return type in containerBaseZIndexOffset;\n}\nexport const useZIndex = (componentType, customZIndex) => {\n  const [, token] = useToken();\n  const parentZIndex = React.useContext(zIndexContext);\n  const isContainer = isContainerType(componentType);\n  let result;\n  if (customZIndex !== undefined) {\n    result = [customZIndex, customZIndex];\n  } else {\n    let zIndex = parentZIndex !== null && parentZIndex !== void 0 ? parentZIndex : 0;\n    if (isContainer) {\n      zIndex +=\n      // Use preset token zIndex by default but not stack when has parent container\n      (parentZIndex ? 0 : token.zIndexPopupBase) +\n      // Container offset\n      containerBaseZIndexOffset[componentType];\n    } else {\n      zIndex += consumerBaseZIndexOffset[componentType];\n    }\n    result = [parentZIndex === undefined ? customZIndex : zIndex, zIndex];\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning(componentType);\n    const maxZIndex = token.zIndexPopupBase + CONTAINER_MAX_OFFSET_WITH_CHILDREN;\n    const currentZIndex = result[0] || 0;\n    process.env.NODE_ENV !== \"production\" ? warning(customZIndex !== undefined || currentZIndex <= maxZIndex, 'usage', '`zIndex` is over design token `zIndexPopupBase` too much. It may cause unexpected override.') : void 0;\n  }\n  return result;\n};","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport CheckCircleFilled from \"@ant-design/icons/es/icons/CheckCircleFilled\";\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport ExclamationCircleFilled from \"@ant-design/icons/es/icons/ExclamationCircleFilled\";\nimport InfoCircleFilled from \"@ant-design/icons/es/icons/InfoCircleFilled\";\nimport LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\nimport classNames from 'classnames';\nimport { Notice } from 'rc-notification';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useStyle from './style';\nexport const TypeIcon = {\n  info: /*#__PURE__*/React.createElement(InfoCircleFilled, null),\n  success: /*#__PURE__*/React.createElement(CheckCircleFilled, null),\n  error: /*#__PURE__*/React.createElement(CloseCircleFilled, null),\n  warning: /*#__PURE__*/React.createElement(ExclamationCircleFilled, null),\n  loading: /*#__PURE__*/React.createElement(LoadingOutlined, null)\n};\nexport const PureContent = ({\n  prefixCls,\n  type,\n  icon,\n  children\n}) => (/*#__PURE__*/React.createElement(\"div\", {\n  className: classNames(`${prefixCls}-custom-content`, `${prefixCls}-${type}`)\n}, icon || TypeIcon[type], /*#__PURE__*/React.createElement(\"span\", null, children)));\n/** @private Internal Component. Do not use in your production. */\nconst PurePanel = props => {\n  const {\n      prefixCls: staticPrefixCls,\n      className,\n      type,\n      icon,\n      content\n    } = props,\n    restProps = __rest(props, [\"prefixCls\", \"className\", \"type\", \"icon\", \"content\"]);\n  const {\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const prefixCls = staticPrefixCls || getPrefixCls('message');\n  const rootCls = useCSSVarCls(prefixCls);\n  const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  return wrapCSSVar(/*#__PURE__*/React.createElement(Notice, Object.assign({}, restProps, {\n    prefixCls: prefixCls,\n    className: classNames(className, hashId, `${prefixCls}-notice-pure-panel`, cssVarCls, rootCls),\n    eventKey: \"pure\",\n    duration: null,\n    content: /*#__PURE__*/React.createElement(PureContent, {\n      prefixCls: prefixCls,\n      type: type,\n      icon: icon\n    }, content)\n  })));\n};\nexport default PurePanel;","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CloseOutlined = function CloseOutlined(props, ref) {\n  return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n    ref: ref,\n    icon: CloseOutlinedSvg\n  }));\n};\n\n/**![close](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNzk5Ljg2IDE2Ni4zMWMuMDIgMCAuMDQuMDIuMDguMDZsNTcuNjkgNTcuN2MuMDQuMDMuMDUuMDUuMDYuMDhhLjEyLjEyIDAgMDEwIC4wNmMwIC4wMy0uMDIuMDUtLjA2LjA5TDU2OS45MyA1MTJsMjg3LjcgMjg3LjdjLjA0LjA0LjA1LjA2LjA2LjA5YS4xMi4xMiAwIDAxMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMyAwLS4wNS0uMDItLjA5LS4wNkw1MTIgNTY5LjkzbC0yODcuNyAyODcuN2MtLjA0LjA0LS4wNi4wNS0uMDkuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDItLjA4LS4wNmwtNTcuNjktNTcuN2MtLjA0LS4wMy0uMDUtLjA1LS4wNi0uMDdhLjEyLjEyIDAgMDEwLS4wN2MwLS4wMy4wMi0uMDUuMDYtLjA5TDQ1NC4wNyA1MTJsLTI4Ny43LTI4Ny43Yy0uMDQtLjA0LS4wNS0uMDYtLjA2LS4wOWEuMTIuMTIgMCAwMTAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMDEuMDcgMGMuMDMgMCAuMDUuMDIuMDkuMDZMNTEyIDQ1NC4wN2wyODcuNy0yODcuN2MuMDQtLjA0LjA2LS4wNS4wOS0uMDZhLjEyLjEyIDAgMDEuMDcgMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CloseOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseOutlined';\n}\nexport default RefIcon;","export function getMotion(prefixCls, transitionName) {\n  return {\n    motionName: transitionName !== null && transitionName !== void 0 ? transitionName : `${prefixCls}-move-up`\n  };\n}\n/** Wrap message open with promise like function */\nexport function wrapPromiseFn(openFn) {\n  let closeFn;\n  const closePromise = new Promise(resolve => {\n    closeFn = openFn(() => {\n      resolve(true);\n    });\n  });\n  const result = () => {\n    closeFn === null || closeFn === void 0 ? void 0 : closeFn();\n  };\n  result.then = (filled, rejected) => closePromise.then(filled, rejected);\n  result.promise = closePromise;\n  return result;\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\nimport * as React from 'react';\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport classNames from 'classnames';\nimport { NotificationProvider, useNotification as useRcNotification } from 'rc-notification';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport { PureContent } from './PurePanel';\nimport useStyle from './style';\nimport { getMotion, wrapPromiseFn } from './util';\nconst DEFAULT_OFFSET = 8;\nconst DEFAULT_DURATION = 3;\nconst Wrapper = ({\n  children,\n  prefixCls\n}) => {\n  const rootCls = useCSSVarCls(prefixCls);\n  const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  return wrapCSSVar(/*#__PURE__*/React.createElement(NotificationProvider, {\n    classNames: {\n      list: classNames(hashId, cssVarCls, rootCls)\n    }\n  }, children));\n};\nconst renderNotifications = (node, {\n  prefixCls,\n  key\n}) => (/*#__PURE__*/React.createElement(Wrapper, {\n  prefixCls: prefixCls,\n  key: key\n}, node));\nconst Holder = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    top,\n    prefixCls: staticPrefixCls,\n    getContainer: staticGetContainer,\n    maxCount,\n    duration = DEFAULT_DURATION,\n    rtl,\n    transitionName,\n    onAllRemoved\n  } = props;\n  const {\n    getPrefixCls,\n    getPopupContainer,\n    message,\n    direction\n  } = React.useContext(ConfigContext);\n  const prefixCls = staticPrefixCls || getPrefixCls('message');\n  // =============================== Style ===============================\n  const getStyle = () => ({\n    left: '50%',\n    transform: 'translateX(-50%)',\n    top: top !== null && top !== void 0 ? top : DEFAULT_OFFSET\n  });\n  const getClassName = () => classNames({\n    [`${prefixCls}-rtl`]: rtl !== null && rtl !== void 0 ? rtl : direction === 'rtl'\n  });\n  // ============================== Motion ===============================\n  const getNotificationMotion = () => getMotion(prefixCls, transitionName);\n  // ============================ Close Icon =============================\n  const mergedCloseIcon = /*#__PURE__*/React.createElement(\"span\", {\n    className: `${prefixCls}-close-x`\n  }, /*#__PURE__*/React.createElement(CloseOutlined, {\n    className: `${prefixCls}-close-icon`\n  }));\n  // ============================== Origin ===============================\n  const [api, holder] = useRcNotification({\n    prefixCls,\n    style: getStyle,\n    className: getClassName,\n    motion: getNotificationMotion,\n    closable: false,\n    closeIcon: mergedCloseIcon,\n    duration,\n    getContainer: () => (staticGetContainer === null || staticGetContainer === void 0 ? void 0 : staticGetContainer()) || (getPopupContainer === null || getPopupContainer === void 0 ? void 0 : getPopupContainer()) || document.body,\n    maxCount,\n    onAllRemoved,\n    renderNotifications\n  });\n  // ================================ Ref ================================\n  React.useImperativeHandle(ref, () => Object.assign(Object.assign({}, api), {\n    prefixCls,\n    message\n  }));\n  return holder;\n});\n// ==============================================================================\n// ==                                   Hook                                   ==\n// ==============================================================================\nlet keyIndex = 0;\nexport function useInternalMessage(messageConfig) {\n  const holderRef = React.useRef(null);\n  const warning = devUseWarning('Message');\n  // ================================ API ================================\n  const wrapAPI = React.useMemo(() => {\n    // Wrap with notification content\n    // >>> close\n    const close = key => {\n      var _a;\n      (_a = holderRef.current) === null || _a === void 0 ? void 0 : _a.close(key);\n    };\n    // >>> Open\n    const open = config => {\n      if (!holderRef.current) {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'usage', 'You are calling notice in render which will break in React 18 concurrent mode. Please trigger in effect instead.') : void 0;\n        const fakeResult = () => {};\n        fakeResult.then = () => {};\n        return fakeResult;\n      }\n      const {\n        open: originOpen,\n        prefixCls,\n        message\n      } = holderRef.current;\n      const noticePrefixCls = `${prefixCls}-notice`;\n      const {\n          content,\n          icon,\n          type,\n          key,\n          className,\n          style,\n          onClose\n        } = config,\n        restConfig = __rest(config, [\"content\", \"icon\", \"type\", \"key\", \"className\", \"style\", \"onClose\"]);\n      let mergedKey = key;\n      if (mergedKey === undefined || mergedKey === null) {\n        keyIndex += 1;\n        mergedKey = `antd-message-${keyIndex}`;\n      }\n      return wrapPromiseFn(resolve => {\n        originOpen(Object.assign(Object.assign({}, restConfig), {\n          key: mergedKey,\n          content: (/*#__PURE__*/React.createElement(PureContent, {\n            prefixCls: prefixCls,\n            type: type,\n            icon: icon\n          }, content)),\n          placement: 'top',\n          className: classNames(type && `${noticePrefixCls}-${type}`, className, message === null || message === void 0 ? void 0 : message.className),\n          style: Object.assign(Object.assign({}, message === null || message === void 0 ? void 0 : message.style), style),\n          onClose: () => {\n            onClose === null || onClose === void 0 ? void 0 : onClose();\n            resolve();\n          }\n        }));\n        // Return close function\n        return () => {\n          close(mergedKey);\n        };\n      });\n    };\n    // >>> destroy\n    const destroy = key => {\n      var _a;\n      if (key !== undefined) {\n        close(key);\n      } else {\n        (_a = holderRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n      }\n    };\n    const clone = {\n      open,\n      destroy\n    };\n    const keys = ['info', 'success', 'warning', 'error', 'loading'];\n    keys.forEach(type => {\n      const typeOpen = (jointContent, duration, onClose) => {\n        let config;\n        if (jointContent && typeof jointContent === 'object' && 'content' in jointContent) {\n          config = jointContent;\n        } else {\n          config = {\n            content: jointContent\n          };\n        }\n        // Params\n        let mergedDuration;\n        let mergedOnClose;\n        if (typeof duration === 'function') {\n          mergedOnClose = duration;\n        } else {\n          mergedDuration = duration;\n          mergedOnClose = onClose;\n        }\n        const mergedConfig = Object.assign(Object.assign({\n          onClose: mergedOnClose,\n          duration: mergedDuration\n        }, config), {\n          type\n        });\n        return open(mergedConfig);\n      };\n      clone[type] = typeOpen;\n    });\n    return clone;\n  }, []);\n  // ============================== Return ===============================\n  return [wrapAPI, /*#__PURE__*/React.createElement(Holder, Object.assign({\n    key: \"message-holder\"\n  }, messageConfig, {\n    ref: holderRef\n  }))];\n}\nexport default function useMessage(messageConfig) {\n  return useInternalMessage(messageConfig);\n}","\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport React, { useContext } from 'react';\nimport { AppConfigContext } from '../app/context';\nimport ConfigProvider, { ConfigContext, globalConfig, warnContext } from '../config-provider';\nimport { unstableSetRender } from '../config-provider/UnstableContext';\nimport PurePanel from './PurePanel';\nimport useMessage, { useInternalMessage } from './useMessage';\nimport { wrapPromiseFn } from './util';\nlet message = null;\nlet act = callback => callback();\nlet taskQueue = [];\nlet defaultGlobalConfig = {};\nfunction getGlobalContext() {\n  const {\n    getContainer,\n    duration,\n    rtl,\n    maxCount,\n    top\n  } = defaultGlobalConfig;\n  const mergedContainer = (getContainer === null || getContainer === void 0 ? void 0 : getContainer()) || document.body;\n  return {\n    getContainer: () => mergedContainer,\n    duration,\n    rtl,\n    maxCount,\n    top\n  };\n}\nconst GlobalHolder = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    messageConfig,\n    sync\n  } = props;\n  const {\n    getPrefixCls\n  } = useContext(ConfigContext);\n  const prefixCls = defaultGlobalConfig.prefixCls || getPrefixCls('message');\n  const appConfig = useContext(AppConfigContext);\n  const [api, holder] = useInternalMessage(Object.assign(Object.assign(Object.assign({}, messageConfig), {\n    prefixCls\n  }), appConfig.message));\n  React.useImperativeHandle(ref, () => {\n    const instance = Object.assign({}, api);\n    Object.keys(instance).forEach(method => {\n      instance[method] = (...args) => {\n        sync();\n        return api[method].apply(api, args);\n      };\n    });\n    return {\n      instance,\n      sync\n    };\n  });\n  return holder;\n});\nconst GlobalHolderWrapper = /*#__PURE__*/React.forwardRef((_, ref) => {\n  const [messageConfig, setMessageConfig] = React.useState(getGlobalContext);\n  const sync = () => {\n    setMessageConfig(getGlobalContext);\n  };\n  React.useEffect(sync, []);\n  const global = globalConfig();\n  const rootPrefixCls = global.getRootPrefixCls();\n  const rootIconPrefixCls = global.getIconPrefixCls();\n  const theme = global.getTheme();\n  const dom = /*#__PURE__*/React.createElement(GlobalHolder, {\n    ref: ref,\n    sync: sync,\n    messageConfig: messageConfig\n  });\n  return /*#__PURE__*/React.createElement(ConfigProvider, {\n    prefixCls: rootPrefixCls,\n    iconPrefixCls: rootIconPrefixCls,\n    theme: theme\n  }, global.holderRender ? global.holderRender(dom) : dom);\n});\nfunction flushNotice() {\n  if (!message) {\n    const holderFragment = document.createDocumentFragment();\n    const newMessage = {\n      fragment: holderFragment\n    };\n    message = newMessage;\n    // Delay render to avoid sync issue\n    act(() => {\n      const reactRender = unstableSetRender();\n      reactRender(/*#__PURE__*/React.createElement(GlobalHolderWrapper, {\n        ref: node => {\n          const {\n            instance,\n            sync\n          } = node || {};\n          // React 18 test env will throw if call immediately in ref\n          Promise.resolve().then(() => {\n            if (!newMessage.instance && instance) {\n              newMessage.instance = instance;\n              newMessage.sync = sync;\n              flushNotice();\n            }\n          });\n        }\n      }), holderFragment);\n    });\n    return;\n  }\n  // Notification not ready\n  if (!message.instance) {\n    return;\n  }\n  // >>> Execute task\n  taskQueue.forEach(task => {\n    const {\n      type,\n      skipped\n    } = task;\n    // Only `skipped` when user call notice but cancel it immediately\n    // and instance not ready\n    if (!skipped) {\n      switch (type) {\n        case 'open':\n          {\n            act(() => {\n              const closeFn = message.instance.open(Object.assign(Object.assign({}, defaultGlobalConfig), task.config));\n              closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);\n              task.setCloseFn(closeFn);\n            });\n            break;\n          }\n        case 'destroy':\n          act(() => {\n            message === null || message === void 0 ? void 0 : message.instance.destroy(task.key);\n          });\n          break;\n        // Other type open\n        default:\n          {\n            act(() => {\n              var _message$instance;\n              const closeFn = (_message$instance = message.instance)[type].apply(_message$instance, _toConsumableArray(task.args));\n              closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);\n              task.setCloseFn(closeFn);\n            });\n          }\n      }\n    }\n  });\n  // Clean up\n  taskQueue = [];\n}\n// ==============================================================================\n// ==                                  Export                                  ==\n// ==============================================================================\nfunction setMessageGlobalConfig(config) {\n  defaultGlobalConfig = Object.assign(Object.assign({}, defaultGlobalConfig), config);\n  // Trigger sync for it\n  act(() => {\n    var _a;\n    (_a = message === null || message === void 0 ? void 0 : message.sync) === null || _a === void 0 ? void 0 : _a.call(message);\n  });\n}\nfunction open(config) {\n  const result = wrapPromiseFn(resolve => {\n    let closeFn;\n    const task = {\n      type: 'open',\n      config,\n      resolve,\n      setCloseFn: fn => {\n        closeFn = fn;\n      }\n    };\n    taskQueue.push(task);\n    return () => {\n      if (closeFn) {\n        act(() => {\n          closeFn();\n        });\n      } else {\n        task.skipped = true;\n      }\n    };\n  });\n  flushNotice();\n  return result;\n}\nfunction typeOpen(type, args) {\n  const global = globalConfig();\n  if (process.env.NODE_ENV !== 'production' && !global.holderRender) {\n    warnContext('message');\n  }\n  const result = wrapPromiseFn(resolve => {\n    let closeFn;\n    const task = {\n      type,\n      args,\n      resolve,\n      setCloseFn: fn => {\n        closeFn = fn;\n      }\n    };\n    taskQueue.push(task);\n    return () => {\n      if (closeFn) {\n        act(() => {\n          closeFn();\n        });\n      } else {\n        task.skipped = true;\n      }\n    };\n  });\n  flushNotice();\n  return result;\n}\nconst destroy = key => {\n  taskQueue.push({\n    type: 'destroy',\n    key\n  });\n  flushNotice();\n};\nconst methods = ['success', 'info', 'warning', 'error', 'loading'];\nconst baseStaticMethods = {\n  open,\n  destroy,\n  config: setMessageGlobalConfig,\n  useMessage,\n  _InternalPanelDoNotUseOrYouWillBeFired: PurePanel\n};\nconst staticMethods = baseStaticMethods;\nmethods.forEach(type => {\n  staticMethods[type] = (...args) => typeOpen(type, args);\n});\n// ==============================================================================\n// ==                                   Test                                   ==\n// ==============================================================================\nconst noop = () => {};\n/** @internal Only Work in test env */\n// eslint-disable-next-line import/no-mutable-exports\nexport let actWrapper = noop;\nif (process.env.NODE_ENV === 'test') {\n  actWrapper = wrapper => {\n    act = wrapper;\n  };\n}\n/** @internal Only Work in test env */\n// eslint-disable-next-line import/no-mutable-exports\nexport let actDestroy = noop;\nif (process.env.NODE_ENV === 'test') {\n  actDestroy = () => {\n    message = null;\n  };\n}\nexport default staticMethods;","import axios from 'axios';\r\n\r\nconst API_BASE_URL = 'http://localhost:8088'; // 替换为你的后端API基础URL\r\n\r\nexport const getAllUsers = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/user/allUser`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    console.log(\"API Response:\", response.data); // 打印完整响应\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 修正这里：response.data.data.data 才是用户数组\r\n      const data = response.data.data.data;\r\n      return Array.isArray(data) ? data : [data];\r\n    } else {\r\n      throw new Error(response.data?.message || \"未知错误\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取用户列表失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const searchUsers = async (key) => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/user/searchUser`, {\r\n      params: { key },\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n\r\n    if (response.data?.code === 200) {\r\n      // 提取正确的用户数组：response.data.data.data\r\n      const users = response.data.data.data;\r\n      return Array.isArray(users) ? users : [users];\r\n    } else {\r\n      throw new Error(response.data?.message || \"搜索失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('搜索用户失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 修改用户权限\r\nexport const updateUserAuthority = async (username, authority) => {\r\n  try {\r\n    const response = await axios.put(`${API_BASE_URL}/user/changeAuthority`, \r\n      { \r\n        changeUsername: username, \r\n        authority: authority \r\n      },\r\n      {\r\n        headers: {\r\n          Authorization: localStorage.getItem('token')\r\n        }\r\n      }\r\n    );\r\n    return response.data;\r\n  } catch (error) {\r\n    console.error('修改用户权限失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n\r\n// // 获取所有折扣\r\n// export const getAllDiscounts = async () => {\r\n//   try {\r\n//     const response = await axios.get(`${API_BASE_URL}/discount/all`, {\r\n//       headers: {\r\n//         Authorization: localStorage.getItem('token')\r\n//       }\r\n//     });\r\n    \r\n//     if (response.data && response.data.code === 200) {\r\n//       // 确保返回的是数组格式\r\n//       const data = response.data.data.data || response.data.data;\r\n//       return Array.isArray(data) ? data : [data];\r\n//     } else {\r\n//       throw new Error(response.data?.message || \"获取折扣信息失败\");\r\n//     }\r\n//   } catch (error) {\r\n//     console.error('获取折扣列表失败:', error);\r\n//     throw error;\r\n//   }\r\n// };\r\n\r\n// // 获取当前折扣\r\n// export const getCurrentDiscount = async () => {\r\n//   try {\r\n//     const response = await axios.get(`${API_BASE_URL}/discount/current`, {\r\n//       headers: {\r\n//         Authorization: localStorage.getItem('token')\r\n//       }\r\n//     });\r\n    \r\n//     if (response.data && response.data.code === 200) {\r\n//       return response.data.data.data || response.data.data;\r\n//     } else {\r\n//       throw new Error(response.data?.message || \"获取当前折扣失败\");\r\n//     }\r\n//   } catch (error) {\r\n//     console.error('获取当前折扣失败:', error);\r\n//     throw error;\r\n//   }\r\n// };\r\n// 修改 getAllDiscounts 和 getCurrentDiscount 方法\r\nexport const getAllDiscounts = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/discount/all`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 更健壮的数据提取方式\r\n      return response.data.data?.data || response.data.data || [];\r\n    } else {\r\n      throw new Error(response.data?.message || \"获取折扣信息失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取折扣列表失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const getCurrentDiscount = async () => {\r\n  try {\r\n    const response = await axios.get(`${API_BASE_URL}/discount/current`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      // 更健壮的数据提取方式\r\n      return response.data.data?.data || response.data.data || null;\r\n    } else if (response.data?.message === \"目前没有进行中的折扣\") {\r\n      return null;\r\n    } else {\r\n      throw new Error(response.data?.message || \"获取当前折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('获取当前折扣失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 添加折扣\r\nexport const addDiscount = async (discountData) => {\r\n  try {\r\n    const response = await axios.post(`${API_BASE_URL}/discount/add`, discountData, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      return response.data.data.data || response.data.data;\r\n    } else {\r\n      throw new Error(response.data?.message || \"添加折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('添加折扣失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\n// 删除折扣\r\nexport const deleteDiscount = async (id) => {\r\n  try {\r\n    const response = await axios.delete(`${API_BASE_URL}/discount/delete/${id}`, {\r\n      headers: {\r\n        Authorization: localStorage.getItem('token')\r\n      }\r\n    });\r\n    \r\n    if (response.data && response.data.code === 200) {\r\n      return true;\r\n    } else {\r\n      throw new Error(response.data?.message || \"删除折扣失败\");\r\n    }\r\n  } catch (error) {\r\n    console.error('删除折扣失败:', error);\r\n    throw error;\r\n  }\r\n};","import React, {useEffect, useState} from 'react';\r\nimport {useNavigate, useLocation, useParams} from 'react-router-dom';  \r\nimport {createTorrent, getTorrents, downloadTorrent, getDownloadProgress, deleteTorrent, searchTorrents} from '../api/torrent';\r\nimport './Dashboard.css';\r\nimport {createHelpPost, getHelpPosts, getHelpPostDetail, searchHelpPosts} from '../api/helpPost';\r\nimport {createRequestPost, getRequestPosts, getRequestPostDetail, searchRequestPosts} from '../api/requestPost';\r\nimport { message } from 'antd'; // 用于显示提示消息\r\nimport { getAnnouncements,getLatestAnnouncements,getAnnouncementDetail } from '../api/announcement'; \r\nimport { getAllDiscounts } from '../api/administer'; \r\n   import { getUserInfo, isAdmin } from '../api/auth';\r\nimport { api } from '../api/auth'; \r\n\r\n\r\nconst Dashboard = ({onLogout}) => {\r\n    const location = useLocation();\r\n    const [userInfo, setUserInfo] = useState(null);\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState('');\r\n    const [currentSlide, setCurrentSlide] = useState(0);\r\n    const navigate = useNavigate();\r\n    const {tab} = useParams();\r\n    const [showUploadModal, setShowUploadModal] = useState(false);\r\n    const [isUploading, setIsUploading] = useState(false);\r\n    const [uploadData, setUploadData] = useState({\r\n        name: '',\r\n        type: '',\r\n        region: '',\r\n        subtitle: '',\r\n        resolution: '', // 新增分辨率字段\r\n        file: null,\r\n        description: ''\r\n    });\r\n    const [showPostModal, setShowPostModal] = useState(false);\r\n    const [postTitle, setPostTitle] = useState('');\r\n    const [postContent, setPostContent] = useState('');\r\n    const [selectedImage, setSelectedImage] = useState(null);\r\n    const [helpPosts, setHelpPosts] = useState([]);\r\n    const [helpLoading, setHelpLoading] = useState(false);\r\n    const [helpError, setHelpError] = useState(null);\r\n    const [currentPage, setCurrentPage] = useState(1);\r\n    const [totalPages, setTotalPages] = useState(1);\r\n    const [likedPosts,setLikedPosts] = useState({});\r\n    const [announcements, setAnnouncements] = useState([]);\r\n    const [carouselDiscounts, setCarouselDiscounts] = useState([]);\r\n    const [requestLoading, setRequestLoading] = useState(false);\r\n    const [requestError, setRequestError] = useState(null);\r\n    const [requestPosts, setRequestPosts] = useState([]);\r\n\r\n\r\n    // 添加状态\r\n    const [torrentPosts, setTorrentPosts] = useState([]);\r\n    const [torrentLoading, setTorrentLoading] = useState(false);\r\n    const [torrentError, setTorrentError] = useState(null);\r\n\r\n    const [filteredResources, setFilteredResources] = useState(torrentPosts);\r\n    const [isAdmin, setIsAdmin] = useState(false);\r\n\r\n    // 在组件状态中添加\r\n    const [showDownloadModal, setShowDownloadModal] = useState(false);\r\n    const [selectedTorrent, setSelectedTorrent] = useState(null);\r\n    const [downloadProgress, setDownloadProgress] = useState(0);\r\n    const [isDownloading, setIsDownloading] = useState(false);\r\n    const [downloadPath, setDownloadPath] = useState('D:/studies/ptPlatform/torrent');\r\n\r\n    // 新增搜索状态\r\n    const [announcementSearch, setAnnouncementSearch] = useState('');\r\n    const [shareSearch, setShareSearch] = useState('');\r\n    const [requestSearch, setRequestSearch] = useState('');\r\n    const [helpSearch, setHelpSearch] = useState('');\r\n\r\n\r\n    const activeTab = tab || 'announcement'; // 如果没有tab参数，则默认为announcement\r\n    // 从location.state中初始化状态\r\n\r\n\r\n    const handleTabChange = (tabName) => {\r\n        navigate(`/dashboard/${tabName}`, {\r\n            state: {\r\n                savedFilters: selectedFilters, // 使用新的筛选状态 // 保留现有状态\r\n                activeTab: tabName // 可选，如果其他组件依赖这个 state\r\n            }\r\n        });\r\n    };\r\n\r\n    \r\n\r\n    //公告区\r\n    // 添加获取公告的方法\r\n    const fetchAnnouncements = async () => {\r\n    try {\r\n        const response = await getLatestAnnouncements();\r\n        setAnnouncements(response.data.data.announcements || []);\r\n    } catch (error) {\r\n        console.error('获取公告失败:', error);\r\n    }\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'announcement') {\r\n            fetchAnnouncements();\r\n            fetchDiscountsForCarousel();\r\n        }\r\n    }, [activeTab]);\r\n\r\n    const fetchDiscountsForCarousel = async () => {\r\n        try {\r\n            const all = await getAllDiscounts();\r\n            console.log(\"返回的折扣数据：\", all);\r\n            const now = new Date();\r\n\r\n            // ⚠️ 使用 Date.parse 确保兼容 ISO 格式\r\n            const ongoing = all.filter(d =>\r\n            Date.parse(d.startTime) <= now.getTime() && Date.parse(d.endTime) >= now.getTime()\r\n            );\r\n\r\n            const upcoming = all\r\n            .filter(d => Date.parse(d.startTime) > now.getTime())\r\n            .sort((a, b) => Date.parse(a.startTime) - Date.parse(b.startTime));\r\n\r\n            const selected = [...ongoing.slice(0, 3)];\r\n\r\n            while (selected.length < 3 && upcoming.length > 0) {\r\n            selected.push(upcoming.shift());\r\n            }\r\n\r\n            setCarouselDiscounts(selected);\r\n        } catch (e) {\r\n            console.error(\"获取折扣失败:\", e);\r\n        }\r\n    };\r\n\r\n    // 修改handleAnnouncementClick函数中的state传递，移除不必要的字段\r\n    const handleAnnouncementClick = (announcement, e) => {\r\n        if (!e.target.closest('.exclude-click')) {\r\n            navigate(`/announcement/${announcement.id}`, {\r\n                state: {\r\n                    announcement,\r\n                    returnPath: `/dashboard/${activeTab}`,\r\n                    scrollPosition: window.scrollY,\r\n                    activeTab\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    \r\n   // 公告区搜索处理\r\n    const handleSearchAnnouncement = (e) => {\r\n        setAnnouncementSearch(e.target.value);\r\n    };\r\n\r\n    // 修改后的搜索函数\r\n    const handleSearchShare = async () => {\r\n        try {\r\n            setTorrentLoading(true);\r\n            const response = await searchTorrents(shareSearch, 1);\r\n            if (response.data.code === 200) {\r\n                setTorrentPosts(response.data.data.records);\r\n                const total = response.data.data.total;\r\n                setTotalPages(Math.ceil(total / 5));\r\n                setCurrentPage(1);\r\n            } else {\r\n                setTorrentError(response.data.message || '搜索失败');\r\n            }\r\n        } catch (err) {\r\n            setTorrentError(err.message || '搜索失败');\r\n        } finally {\r\n            setTorrentLoading(false);\r\n        }\r\n    };\r\n\r\n    const handleResetShareSearch = async () => {\r\n        setShareSearch('');\r\n        setSelectedFilters(\r\n            Object.keys(filterCategories).reduce((acc, category) => {\r\n                acc[category] = 'all';\r\n                return acc;\r\n            }, {})\r\n        );\r\n        await fetchTorrentPosts(1, true);\r\n    };\r\n\r\n    // 添加搜索函数\r\n    const handleSearchRequest = async () => {\r\n        try {\r\n        setRequestLoading(true);\r\n        const response = await searchRequestPosts(requestSearch, currentPage);\r\n        if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n            response.data.data.records.map(async (post) => {\r\n                try {\r\n                const detailResponse = await getRequestPostDetail(post.id);\r\n                if (detailResponse.data.code === 200) {\r\n                    return {\r\n                    ...post,\r\n                    replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                    isLiked: false\r\n                    };\r\n                }\r\n                return post;\r\n                } catch (err) {\r\n                console.error(`获取帖子${post.id}详情失败:`, err);\r\n                return post;\r\n                }\r\n            })\r\n            );\r\n            setRequestPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5));\r\n        } else {\r\n            setRequestError(response.data.message || '搜索失败');\r\n        }\r\n        } catch (err) {\r\n        setRequestError(err.message || '搜索失败');\r\n        } finally {\r\n        setRequestLoading(false);\r\n        }\r\n    };\r\n    \r\n    // 添加重置搜索函数\r\n    const handleResetRequestSearch = async () => {\r\n        setRequestSearch('');\r\n        await fetchRequestPosts(1); // 重置到第一页\r\n };\r\n\r\n   // 添加搜索函数\r\n    const handleSearchHelp = async () => {\r\n        try {\r\n        setHelpLoading(true);\r\n        const response = await searchHelpPosts(helpSearch, currentPage);\r\n        if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n            response.data.data.records.map(async (post) => {\r\n                try {\r\n                const detailResponse = await getHelpPostDetail(post.id);\r\n                if (detailResponse.data.code === 200) {\r\n                    return {\r\n                    ...post,\r\n                    replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                    isLiked: false\r\n                    };\r\n                }\r\n                return post;\r\n                } catch (err) {\r\n                console.error(`获取帖子${post.id}详情失败:`, err);\r\n                return post;\r\n                }\r\n            })\r\n            );\r\n            setHelpPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5));\r\n        } else {\r\n            setHelpError(response.data.message || '搜索失败');\r\n        }\r\n        } catch (err) {\r\n        setHelpError(err.message || '搜索失败');\r\n        } finally {\r\n        setHelpLoading(false);\r\n        }\r\n    };\r\n    \r\n    // 添加重置搜索函数\r\n    const handleResetHelpSearch = async () => {\r\n        setHelpSearch('');\r\n        await fetchHelpPosts(1); // 重置到第一页\r\n };\r\n\r\n\r\n\r\n\r\n    //资源区\r\n    const handleFileChange = (e) => {\r\n        setUploadData({...uploadData, file: e.target.files[0]});\r\n    };\r\n\r\n    const handleUploadSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n            setIsUploading(true);\r\n\r\n            const torrentData = {\r\n                torrentName: uploadData.name,\r\n                description: uploadData.description,\r\n                category: uploadData.type,\r\n                region: uploadData.region,\r\n                resolution: uploadData.resolution,\r\n                subtitle: uploadData.subtitle\r\n            };\r\n\r\n            await createTorrent(uploadData.file, torrentData, (progress) => {\r\n                console.log(`上传进度: ${progress}%`);\r\n                // 这里可以添加进度条更新逻辑\r\n                });\r\n\r\n            // 上传成功处理\r\n            setShowUploadModal(false);\r\n            setUploadData({\r\n                name: '',\r\n                type: '',\r\n                region: '',\r\n                subtitle: '',\r\n                resolution: '',\r\n                file: null,\r\n                description: ''\r\n            });\r\n            alert('种子创建成功！');\r\n\r\n            // 刷新列表\r\n            await fetchTorrentPosts(currentPage);\r\n\r\n        } catch (error) {\r\n            console.error('创建失败:', error);\r\n            alert('创建失败: ' + (error.response?.data?.message || error.message));\r\n        } finally {\r\n            setIsUploading(false);\r\n        }\r\n    };\r\n\r\n    // 处理下载按钮点击\r\n    const handleDownloadClick = (torrent, e) => {\r\n        e.stopPropagation();\r\n        setSelectedTorrent(torrent);\r\n        setShowDownloadModal(true);\r\n    };\r\n\r\n    // 执行下载\r\n    const handleDownload = async () => {\r\n    if (!selectedTorrent || !downloadPath) return;\r\n\r\n    setIsDownloading(true);\r\n    setDownloadProgress(0);\r\n\r\n    try {\r\n        // 标准化路径\r\n        const cleanPath = downloadPath\r\n        .replace(/\\\\/g, '/')  // 统一使用正斜杠\r\n        .replace(/\\/+/g, '/') // 去除多余斜杠\r\n        .trim();\r\n\r\n        // 确保路径以斜杠结尾\r\n        const finalPath = cleanPath.endsWith('/') ? cleanPath : cleanPath + '/';\r\n\r\n        // 发起下载请求\r\n        await downloadTorrent(selectedTorrent.id, finalPath);\r\n        \r\n        // 开始轮询进度\r\n        const interval = setInterval(async () => {\r\n            try {\r\n                const res = await getDownloadProgress();\r\n                const progresses = res.data.progresses;\r\n                \r\n                if (progresses) {\r\n                    // 使用完整的 torrent 文件路径作为键\r\n                    const torrentPath = selectedTorrent.filePath.replace(/\\\\/g, '/');\r\n                    const torrentHash = selectedTorrent.hash;\r\n                    // 查找匹配的进度\r\n                    let foundProgress = null;\r\n                    for (const [key, value] of Object.entries(progresses)) {\r\n                        const normalizedKey = key.replace(/\\\\/g, '/');\r\n                        if (normalizedKey.includes(selectedTorrent.hash) || \r\n                            normalizedKey.includes(selectedTorrent.torrentName)) {\r\n                            foundProgress = value;\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (foundProgress !== null) {\r\n                        const newProgress = Math.round(foundProgress * 100);\r\n                        setDownloadProgress(newProgress);\r\n                        \r\n                        // 检查是否下载完成\r\n                        if (newProgress >= 100) {\r\n                        clearInterval(interval);\r\n                        setIsDownloading(false);\r\n                        message.success('下载完成！');\r\n                        setTimeout(() => setShowDownloadModal(false), 2000);\r\n                        }\r\n                    } else {\r\n                        console.log('当前下载进度:', progresses); // 添加日志\r\n                    }\r\n                    }\r\n                } catch (error) {\r\n                    console.error('获取进度失败:', error);\r\n                    // 如果获取进度失败但文件已存在，也视为完成\r\n                    const filePath = `${finalPath}${selectedTorrent.torrentName || 'downloaded_file'}`;\r\n                    try {\r\n                    const exists = await checkFileExists(filePath);\r\n                    if (exists) {\r\n                        clearInterval(interval);\r\n                        setDownloadProgress(100);\r\n                        setIsDownloading(false);\r\n                        message.success('下载完成！');\r\n                        setTimeout(() => setShowDownloadModal(false), 2000);\r\n                    }\r\n                    } catch (e) {\r\n                    console.error('文件检查失败:', e);\r\n                    }\r\n                }\r\n                }, 2000);\r\n\r\n        return () => clearInterval(interval);\r\n    } catch (error) {\r\n        setIsDownloading(false);\r\n        if (error.response && error.response.status === 409) {\r\n        message.error('分享率不足，无法下载此资源');\r\n        } else {\r\n        message.error('下载失败: ' + (error.message || '未知错误'));\r\n        }\r\n    }\r\n    };\r\n\r\n    const checkFileExists = async (filePath) => {\r\n        try {\r\n            // 这里需要根据您的实际环境实现文件存在性检查\r\n            // 如果是Electron应用，可以使用Node.js的fs模块\r\n            // 如果是纯前端，可能需要通过API请求后端检查\r\n            return true; // 暂时返回true，实际实现需要修改\r\n        } catch (e) {\r\n            console.error('检查文件存在性失败:', e);\r\n            return false;\r\n        }\r\n    };\r\n\r\n    const handleDeleteTorrent = async (torrentId, e) => {\r\n        e.stopPropagation(); // 阻止事件冒泡，避免触发资源项的点击事件\r\n        \r\n        try {\r\n            // 确认删除\r\n            if (!window.confirm('确定要删除这个种子吗？此操作不可撤销！')) {\r\n            return;\r\n            }\r\n            \r\n            // 调用删除API\r\n            await deleteTorrent(torrentId);\r\n            \r\n            // 删除成功后刷新列表\r\n            message.success('种子删除成功');\r\n            await fetchTorrentPosts(currentPage);\r\n        } catch (error) {\r\n            console.error('删除种子失败:', error);\r\n            message.error('删除种子失败: ' + (error.response?.data?.message || error.message));\r\n        }\r\n        };\r\n\r\n        const handleRequestPostSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          const response = await createRequestPost(\r\n            postTitle,\r\n            postContent,\r\n            username,\r\n            selectedImage\r\n          );\r\n          \r\n          if (response.data.code === 200) {\r\n            // 刷新帖子列表\r\n           \r\n            await fetchRequestPosts(currentPage);\r\n            // 重置表单\r\n            setShowPostModal(false);\r\n            setPostTitle('');\r\n            setPostContent('');\r\n            setSelectedImage(null);\r\n          } else {\r\n            setHelpError(response.data.message || '发帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '发帖失败');\r\n        }\r\n      };\r\n\r\n    const handleHelpPostSubmit = async (e) => {\r\n        e.preventDefault();\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          const response = await createHelpPost(\r\n            postTitle,\r\n            postContent,\r\n            username,\r\n            selectedImage\r\n          );\r\n          \r\n          if (response.data.code === 200) {\r\n            // 刷新帖子列表\r\n            await fetchHelpPosts(currentPage);\r\n            \r\n            // 重置表单\r\n            setShowPostModal(false);\r\n            setPostTitle('');\r\n            setPostContent('');\r\n            setSelectedImage(null);\r\n          } else {\r\n            setHelpError(response.data.message || '发帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '发帖失败');\r\n        }\r\n      };\r\n\r\n\r\nconst fetchTorrentPosts = async (page = 1, isReset = false) => {\r\n    setTorrentLoading(true);\r\n    try {\r\n        const params = {\r\n            page,\r\n            size: 5\r\n        };\r\n        \r\n        // 如果有筛选条件且不是重置操作\r\n        if (!isReset && Object.values(selectedFilters).some(v => v !== 'all')) {\r\n            if (selectedFilters.type !== 'all') params.category = selectedFilters.type;\r\n            if (selectedFilters.subtitle !== 'all') params.subtitle = selectedFilters.subtitle;\r\n            if (selectedFilters.region !== 'all') params.region = selectedFilters.region;\r\n            if (selectedFilters.resolution !== 'all') params.resolution = selectedFilters.resolution;\r\n        }\r\n        \r\n        const response = (shareSearch && !isReset) \r\n            ? await searchTorrents(shareSearch, page)\r\n            : await api.get('http://localhost:8088/torrent', { params });\r\n            \r\n        if (response.data.code === 200) {\r\n            setTorrentPosts(response.data.data.records);\r\n            const total = response.data.data.total;\r\n            setTotalPages(Math.ceil(total / 5));\r\n            setCurrentPage(page);\r\n        } else {\r\n            setTorrentError(response.data.message);\r\n        }\r\n    } catch (err) {\r\n        setTorrentError(err.message);\r\n    } finally {\r\n        setTorrentLoading(false);\r\n    }\r\n};\r\n\r\n    // 在useEffect中调用\r\n    useEffect(() => {\r\n        if (activeTab === 'share') {\r\n            fetchTorrentPosts();\r\n        }\r\n    }, [activeTab]);\r\n\r\nconst fetchRequestPosts = async (page = 1) => {\r\n        setRequestLoading(true);\r\n        try {\r\n          const response = await getRequestPosts(page);\r\n          if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n              response.data.data.records.map(async (post) => {\r\n                try {\r\n                  const detailResponse = await getRequestPostDetail(post.id);\r\n                  if (detailResponse.data.code === 200) {\r\n                    return {\r\n                      ...post,\r\n                      replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                      isLiked: false // 根据需要添加其他字段\r\n                    };\r\n                  }\r\n                  return post; // 如果获取详情失败，返回原始帖子数据\r\n                } catch (err) {\r\n                  console.error(`获取帖子${post.id}详情失败:`, err);\r\n                  return post;\r\n                }\r\n              })\r\n            );\r\n            setRequestPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5)); // 假设每页5条\r\n            setCurrentPage(page);\r\n          } else {\r\n            setRequestError(response.data.message || '获取求助帖失败');\r\n          }\r\n        } catch (err) {\r\n          setRequestError(err.message || '获取求助帖失败');\r\n        } finally {\r\n          setRequestLoading(false);\r\n        }\r\n      };\r\n\r\n    const handleImageUpload = (e) => {\r\n        setSelectedImage(e.target.files[0]);\r\n    };\r\n\r\n\r\n    const fetchHelpPosts = async (page = 1) => {\r\n        setHelpLoading(true);\r\n        try {\r\n          const response = await getHelpPosts(page);\r\n          if (response.data.code === 200) {\r\n            const postsWithCounts = await Promise.all(\r\n              response.data.data.records.map(async (post) => {\r\n                try {\r\n                  const detailResponse = await getHelpPostDetail(post.id);\r\n                  if (detailResponse.data.code === 200) {\r\n                    return {\r\n                      ...post,\r\n                      replyCount: detailResponse.data.data.post.replyCount || 0,\r\n                      isLiked: false // 根据需要添加其他字段\r\n                    };\r\n                  }\r\n                  return post; // 如果获取详情失败，返回原始帖子数据\r\n                } catch (err) {\r\n                  console.error(`获取帖子${post.id}详情失败:`, err);\r\n                  return post;\r\n                }\r\n              })\r\n            );\r\n            setHelpPosts(postsWithCounts);\r\n            setTotalPages(Math.ceil(response.data.data.total / 5)); // 假设每页5条\r\n            setCurrentPage(page);\r\n          } else {\r\n            setHelpError(response.data.message || '获取求助帖失败');\r\n          }\r\n        } catch (err) {\r\n          setHelpError(err.message || '获取求助帖失败');\r\n        } finally {\r\n          setHelpLoading(false);\r\n        }\r\n      };\r\n\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'request') {\r\n            fetchRequestPosts(currentPage);\r\n        }\r\n    }, [activeTab, currentPage]); // 添加 currentPage 作为依赖\r\n\r\n\r\n        // 分类维度配置\r\n    const filterCategories = {\r\n        type: {\r\n            label: '类型',\r\n            options: {\r\n                'all': '全部',\r\n                '电影': '电影',\r\n                '电视剧': '电视剧',\r\n                '动漫': '动漫',\r\n                '综艺': '综艺',\r\n                '音乐': '音乐',\r\n                '其他': '其他'\r\n            }\r\n        },\r\n        subtitle: {\r\n            label: '字幕',\r\n            options: {\r\n                'all': '全部',\r\n                '无需字幕': '无需字幕',\r\n                '暂无字幕': '暂无字幕',\r\n                '自带中文字幕': '自带中文字幕',\r\n                '自带双语字幕(含中文)': '自带双语字幕(含中文)',\r\n                '附件中文字幕': '附件中文字幕',\r\n                '附件双语字幕': '附件双语字幕'\r\n            }\r\n        },\r\n        region: {\r\n            label: '地区',\r\n            options: {\r\n                'all': '全部',\r\n                '中国': '中国',\r\n                '英国': '英国',\r\n                '美国': '美国',\r\n                '日本': '日本',\r\n                '韩国': '韩国',\r\n                '其他': '其他'\r\n            }\r\n        },\r\n        resolution: {\r\n            label: '分辨率',\r\n            options: {\r\n                'all': '全部',\r\n                '4K': '4K',\r\n                '2K': '2K',\r\n                '1080P': '1080P',\r\n                '720P': '720P',\r\n                'SD': 'SD',\r\n                '无损音源': '无损音源',\r\n                '杜比全景声': '杜比全景声',\r\n                '其他': '其他'\r\n            }\r\n        }\r\n    };\r\n    const [selectedFilters, setSelectedFilters] = useState(\r\n        location.state?.savedFilters ||\r\n        Object.keys(filterCategories).reduce((acc, category) => {\r\n            acc[category] = 'all';\r\n            return acc;\r\n        }, {})\r\n    );\r\n\r\n    // 处理筛选条件变更\r\n    const handleFilterSelect = (category, value) => {\r\n        setSelectedFilters(prev => ({\r\n            ...prev,\r\n            [category]: prev[category] === value ? 'all' : value\r\n        }));\r\n    };\r\n\r\n    // 应用筛选条件\r\n    const applyFilters = async () => {\r\n        try {\r\n            setTorrentLoading(true);\r\n            \r\n            // 构建查询参数\r\n            const params = {\r\n                page: 1, // 从第一页开始\r\n                size: 5 \r\n            };\r\n            \r\n            // 添加筛选条件\r\n            if (selectedFilters.type !== 'all') {\r\n                params.category = selectedFilters.type;\r\n            }\r\n            if (selectedFilters.subtitle !== 'all') {\r\n                params.subtitle = selectedFilters.subtitle;\r\n            }\r\n            if (selectedFilters.region !== 'all') {\r\n                params.region = selectedFilters.region;\r\n            }\r\n            if (selectedFilters.resolution !== 'all') {\r\n                params.resolution = selectedFilters.resolution;\r\n            }\r\n            \r\n            // 调用API获取筛选结果\r\n            const response = await api.get('http://localhost:8088/torrent', { params });\r\n            \r\n            if (response.data.code === 200) {\r\n                setTorrentPosts(response.data.data.records);\r\n                setTotalPages(Math.ceil(response.data.data.total / 5));\r\n                setCurrentPage(1);\r\n            } else {\r\n                setTorrentError(response.data.message || '筛选失败');\r\n            }\r\n        } catch (err) {\r\n            setTorrentError(err.message || '筛选失败');\r\n        } finally {\r\n            setTorrentLoading(false);\r\n        }\r\n    };\r\n\r\n\r\n    // 恢复滚动位置\r\n    useEffect(() => {\r\n        if (location.state?.scrollPosition) {\r\n            window.scrollTo(0, location.state.scrollPosition);\r\n        }\r\n    }, [location.state]);\r\n\r\n    // 在Dashboard.jsx中修改useEffect\r\nuseEffect(() => {\r\n    const token = localStorage.getItem('token');\r\n    if (!token) {\r\n        navigate('/login');\r\n        return;\r\n    }\r\n    \r\n    const fetchUserInfo = async () => {\r\n        try {\r\n          setLoading(true);\r\n          const backendData = await getUserInfo(); // 调用修改后的方法\r\n          console.log('后端返回的用户数据:', backendData); // 调试用\r\n          \r\n          setUserInfo({\r\n            name: backendData.username || '演示用户',\r\n            avatar: 'https://via.placeholder.com/40',\r\n            isAdmin: backendData.authority === 'ADMIN' // 检查 authority 是否为 \"ADMIN\"\r\n          });\r\n        } catch (error) {\r\n          console.error('获取用户信息失败:', error);\r\n          setError('获取用户信息失败');\r\n        } finally {\r\n          setLoading(false);\r\n        }\r\n      };\r\n    \r\n    fetchUserInfo();\r\n}, [navigate]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'announcement') {\r\n            const timer = setInterval(() => {\r\n                setCurrentSlide(prev => {\r\n                    const count = carouselDiscounts.length || 1;\r\n                    return (prev + 1) % count;\r\n                });\r\n            }, 3000);\r\n            return () => clearInterval(timer);\r\n        }\r\n    }, [activeTab]);\r\n\r\n    useEffect(() => {\r\n        if (activeTab === 'help') {\r\n            fetchHelpPosts();\r\n        }\r\n    }, [activeTab, currentPage]); // 添加 currentPage 作为依赖\r\n\r\n    \r\n\r\n    const renderContent = () => {\r\n        switch (activeTab) {\r\n            case 'announcement':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"announcement-section\">\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索公告...\"\r\n                                value={announcementSearch}\r\n                                onChange={(e) => setAnnouncementSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchAnnouncement()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchAnnouncement}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                        </div>\r\n                        {/* 轮播图区域 */}\r\n                       <div className=\"carousel-container\">\r\n                        {carouselDiscounts.length === 0 ? (\r\n                            <div className=\"carousel-slide active\">\r\n                            <div className=\"carousel-image gray-bg\">暂无折扣活动</div>\r\n                            </div>\r\n                        ) : (\r\n                            carouselDiscounts.map((discount, index) => (\r\n                            <div key={index} className={`carousel-slide ${currentSlide === index ? 'active' : ''}`}>\r\n                                <div className=\"carousel-image gray-bg\">\r\n                                <h3>{discount.type}</h3>\r\n                                <p>{discount.name}</p>\r\n                                <p>{new Date(discount.startTime).toLocaleDateString()} ~ {new Date(discount.endTime).toLocaleDateString()}</p>\r\n                                </div>\r\n                            </div>\r\n                            ))\r\n                        )}\r\n                        <div className=\"carousel-dots\">\r\n                            {carouselDiscounts.map((_, index) => (\r\n                            <span key={index} className={`dot ${currentSlide === index ? 'active' : ''}`}></span>\r\n                            ))}\r\n                        </div>\r\n                        </div>\r\n\r\n\r\n\r\n                        {/* 公告区块区域 */}\r\n                        <div className=\"announcement-grid\">\r\n                            {announcements.map(announcement => (\r\n                                <div\r\n                                    key={announcement.id}\r\n                                    className=\"announcement-card\"\r\n                                    onClick={(e) => handleAnnouncementClick(announcement, e)}\r\n                                >\r\n                                    <h3>{announcement.title}</h3>\r\n                                    <p>{announcement.content.substring(0, 100)}...</p>\r\n                                    <div className=\"announcement-footer exclude-click\">\r\n                                        <span>{announcement.date}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n                    </div>\r\n                );\r\n            case 'share':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"share-section\">\r\n                        {/* 分享区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索资源...\"\r\n                                value={shareSearch}\r\n                                onChange={(e) => setShareSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchShare()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchShare}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetShareSearch}  // 使用新的重置函数\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 上传按钮 - 添加在筛选区上方 */}\r\n                        <div className=\"upload-header\">\r\n                            <button\r\n                                className=\"upload-btn\"\r\n                                onClick={() => setShowUploadModal(true)}\r\n                            >\r\n                                ＋ 上传种子\r\n                            </button>\r\n                        </div>\r\n                        {/* 分类筛选区 */}\r\n                        <div className=\"filter-section\">\r\n                            {Object.entries(filterCategories).map(([category, config]) => (\r\n                                <div key={category} className=\"filter-group\">\r\n                                    <h4>{config.label}：</h4>\r\n                                    <div className=\"filter-options\">\r\n                                        {Object.entries(config.options).map(([value, label]) => (\r\n                                            <button\r\n                                                key={value}\r\n                                                className={`filter-btn ${\r\n                                                    selectedFilters[category] === value ? 'active' : ''\r\n                                                }`}\r\n                                                onClick={() => handleFilterSelect(category, value)}\r\n                                            >\r\n                                                {label}\r\n                                            </button>\r\n                                        ))}\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n\r\n                            <button\r\n                                className=\"confirm-btn\"\r\n                                onClick={applyFilters}\r\n                            >\r\n                                确认筛选\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 上传弹窗 */}\r\n                        {showUploadModal && (\r\n                            <div className=\"modal-overlay\">\r\n                                <div className=\"upload-modal\">\r\n                                    <h3>上传新种子</h3>\r\n                                    <button\r\n                                        className=\"close-btn\"\r\n                                        onClick={() => setShowUploadModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleUploadSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>种子名称</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={uploadData.name}\r\n                                                onChange={(e) => setUploadData({...uploadData, name: e.target.value})}\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>资源类型</label>\r\n                                            <select\r\n                                                value={uploadData.type}\r\n                                                onChange={(e) => setUploadData({...uploadData, type: e.target.value})}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"电影\">电影</option>\r\n                                                <option value=\"电视剧\">电视剧</option>\r\n                                                <option value=\"动漫\">动漫</option>\r\n                                                <option value=\"综艺\">综艺</option>\r\n                                                <option value=\"音乐\">音乐</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        {/* 修改后的地区下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>地区</label>\r\n                                            <select\r\n                                                value={uploadData.region || ''}\r\n                                                onChange={(e) => setUploadData({...uploadData, region: e.target.value})}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"中国\">中国</option>\r\n                                                <option value=\"英国\">英国</option>\r\n                                                <option value=\"美国\">美国</option>\r\n                                                <option value=\"日本\">日本</option>\r\n                                                <option value=\"韩国\">韩国</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        {/* 添加分辨率下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>分辨率</label>\r\n                                            <select\r\n                                                value={uploadData.resolution || ''}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    resolution: e.target.value\r\n                                                })}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"4K\">4K</option>\r\n                                                <option value=\"2K\">2K</option>\r\n                                                <option value=\"1080P\">1080P</option>\r\n                                                <option value=\"720P\">720P</option>\r\n                                                <option value=\"SD\">SD</option>\r\n                                                <option value=\"无损音源\">无损音源</option>\r\n                                                <option value=\"杜比全景声\">杜比全景声</option>\r\n                                                <option value=\"其他\">其他</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n\r\n                                        {/* 新增字幕语言下拉框 */}\r\n                                        <div className=\"form-group\">\r\n                                            <label>字幕语言</label>\r\n                                            <select\r\n                                                value={uploadData.subtitle || ''}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    subtitle: e.target.value\r\n                                                })}\r\n                                                required\r\n                                            >\r\n                                                <option value=\"\">请选择</option>\r\n                                                <option value=\"无需字幕\">无需字幕</option>\r\n                                                <option value=\"暂无字幕\">暂无字幕</option>\r\n                                                <option value=\"自带中文字幕\">自带中文字幕</option>\r\n                                                <option value=\"自带双语字幕(含中文)\">自带双语字幕(含中文)</option>\r\n                                                <option value=\"附件中文字幕\">附件中文字幕</option>\r\n                                                <option value=\"附件双语字幕\">附件双语字幕</option>\r\n                                            </select>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>种子文件</label>\r\n                                            <input\r\n                                                type=\"file\"\r\n                                                accept=\".torrent\"\r\n                                                onChange={handleFileChange}\r\n\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>简介</label>\r\n                                            <textarea\r\n                                                value={uploadData.description}\r\n                                                onChange={(e) => setUploadData({\r\n                                                    ...uploadData,\r\n                                                    description: e.target.value\r\n                                                })}\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowUploadModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"confirm-btn\"\r\n                                                disabled={isUploading}\r\n                                            >\r\n                                                {isUploading ? '上传中...' : '确认上传'}\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n\r\n                        <div className=\"resource-list\">\r\n                            {torrentPosts.map(torrent => (\r\n                                <div\r\n                                    key={torrent.id}\r\n                                    className=\"resource-item\"\r\n                                    onClick={() => navigate(`/torrent/${torrent.id}`)}\r\n                                >\r\n                                    <div className=\"resource-poster\">\r\n                                        <div className=\"poster-image gray-bg\">{torrent.torrentName.charAt(0)}</div>\r\n                                    </div>\r\n                                    <div className=\"resource-info\">\r\n                                        <h3 className=\"resource-title\">{torrent.torrentName}</h3>\r\n                                        <p className=\"resource-meta\">\r\n                                            {torrent.resolution} | {torrent.region} | {torrent.category}\r\n                                        </p>\r\n                                        <p className=\"resource-subtitle\">字幕: {torrent.subtitle}</p>\r\n                                    </div>\r\n                                    <div className=\"resource-stats\">\r\n                                    <span className=\"stat\">{torrent.size}</span>\r\n                                        <span className=\"stat\">发布者: {torrent.username}</span>\r\n                                    </div>\r\n                                    <button\r\n                                        className=\"download-btn\"\r\n                                        onClick={(e) => handleDownloadClick(torrent, e)}\r\n                                    >\r\n                                        立即下载\r\n                                    </button>\r\n                                    {/* 添加删除按钮 - 只有管理员或发布者可见 */}\r\n                                    {(userInfo?.isAdmin || userInfo?.name === torrent.username) && (\r\n                                        <button\r\n                                        className=\"delete-btn\"\r\n                                        onClick={(e) => handleDeleteTorrent(torrent.id, e)}\r\n                                        >\r\n                                        删除\r\n                                        </button>\r\n                                    )}\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n\r\n                    {totalPages > 1 && (\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchTorrentPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchTorrentPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchTorrentPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n                        )}\r\n                    </div>\r\n                );\r\n            // 在Dashboard.jsx的renderContent函数中修改case 'request'部分\r\n            case 'request':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"request-section\">\r\n                        {/* 求助区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索求助...\"\r\n                                value={requestSearch}\r\n                                onChange={(e) => setRequestSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchRequest()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchRequest}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetRequestSearch}\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                         {/* 新增发帖按钮 */}\r\n                        <div className=\"post-header\">\r\n                            <button\r\n                                className=\"create-post-btn\"\r\n                                onClick={() => setShowPostModal(true)}\r\n                            >\r\n                                ＋ 发帖求助\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 加载状态和错误提示 */}\r\n                        {requestLoading && <div className=\"loading\">加载中...</div>}\r\n                        {requestError && <div className=\"error\">{helpError}</div>}\r\n                        {/* 求种区帖子列表 */}\r\n                        <div className=\"request-list\">\r\n                            {requestPosts.map(post => (\r\n                                <div\r\n                                    key={post.id}\r\n                                    className={`request-post ${post.isSolved ? 'solved' : ''}`}\r\n                                    onClick={() => navigate(`/request/${post.id}`)}\r\n                                >\r\n                                    <div className=\"post-header\">\r\n                                        <img\r\n                                            src={post.authorAvatar || 'https://via.placeholder.com/40'}\r\n                                            alt={post.authorId}\r\n                                            className=\"post-avatar\"\r\n                                        />\r\n                                        <div className=\"post-author\">{post.authorId}</div>\r\n                                        <div className=\"post-date\">\r\n                                            {new Date(post.createTime).toLocaleDateString()}\r\n                                        </div>\r\n                                        {post.isSolved && <span className=\"solved-badge\">已解决</span>}\r\n                                    </div>\r\n                                    <h3 className=\"post-title\">{post.title}</h3>\r\n                                    <p className=\"post-content\">{post.content}</p>\r\n                                    <div className=\"post-stats\">\r\n                                        <span className=\"post-likes\">👍 {post.likeCount || 0}</span>\r\n                                        <span className=\"post-comments\">💬 {post.replyCount || 0}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n                        {/* 在帖子列表后添加分页控件 */}\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchRequestPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchRequestPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchRequestPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n                        {/* 新增发帖弹窗 */}\r\n                        {showPostModal && (\r\n                            <div className=\"post-modal-overlay\">\r\n                                <div className=\"post-modal\">\r\n                                    <h3>发布求种帖</h3>\r\n                                    <button\r\n                                        className=\"modal-close-btn\"\r\n                                        onClick={() => setShowPostModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleRequestPostSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子标题</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={postTitle}\r\n                                                onChange={(e) => setPostTitle(e.target.value)}\r\n                                                placeholder=\"请输入标题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子内容</label>\r\n                                            <textarea\r\n                                                value={postContent}\r\n                                                onChange={(e) => setPostContent(e.target.value)}\r\n                                                placeholder=\"详细描述你的问题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>上传图片</label>\r\n                                            <div className=\"upload-image-btn\">\r\n                                                <input\r\n                                                    type=\"file\"\r\n                                                    id=\"image-upload\"\r\n                                                    accept=\"image/*\"\r\n                                                    onChange={handleImageUpload}\r\n                                                    style={{display: 'none'}}\r\n                                                />\r\n                                                <label htmlFor=\"image-upload\">\r\n                                                    {selectedImage ? '已选择图片' : '选择图片'}\r\n                                                </label>\r\n                                                {selectedImage && (\r\n                                                    <span className=\"image-name\">{selectedImage.name}</span>\r\n                                                )}\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowPostModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"submit-btn\"\r\n                                            >\r\n                                                确认发帖\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                    \r\n                \r\n\r\n                    \r\n                );\r\n            // 在Dashboard.jsx的renderContent函数中修改case 'help'部分\r\n            case 'help':\r\n                return (\r\n                    <div className=\"content-area\" data-testid=\"help-section\">\r\n                        {/* 求助区搜索框 */}\r\n                        <div className=\"section-search-container\">\r\n                            <input\r\n                                type=\"text\"\r\n                                placeholder=\"搜索求助...\"\r\n                                value={helpSearch}\r\n                                onChange={(e) => setHelpSearch(e.target.value)}\r\n                                className=\"section-search-input\"\r\n                                onKeyPress={(e) => e.key === 'Enter' && handleSearchHelp()}\r\n                            />\r\n                            <button \r\n                                className=\"search-button\"\r\n                                onClick={handleSearchHelp}\r\n                            >\r\n                                搜索\r\n                            </button>\r\n                            <button \r\n                                className=\"reset-button\"\r\n                                onClick={handleResetHelpSearch}\r\n                                style={{marginLeft: '10px'}}\r\n                            >\r\n                                重置\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 新增发帖按钮 */}\r\n                        <div className=\"post-header\">\r\n                            <button\r\n                                className=\"create-post-btn\"\r\n                                onClick={() => setShowPostModal(true)}\r\n                            >\r\n                                ＋ 发帖求助\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 加载状态和错误提示 */}\r\n                        {helpLoading && <div className=\"loading\">加载中...</div>}\r\n                        {helpError && <div className=\"error\">{helpError}</div>}\r\n\r\n                        {/* 求助区帖子列表 */}\r\n                        <div className=\"help-list\">\r\n                            {helpPosts.map(post => (\r\n                                <div\r\n                                    key={post.id}\r\n                                    className={`help-post ${post.isSolved ? 'solved' : ''}`}\r\n                                    onClick={() => navigate(`/help/${post.id}`)}\r\n                                >\r\n                                    <div className=\"post-header\">\r\n                                        <img\r\n                                            src={post.authorAvatar || 'https://via.placeholder.com/40'}\r\n                                            alt={post.authorId}\r\n                                            className=\"post-avatar\"\r\n                                        />\r\n                                        <div className=\"post-author\">{post.authorId}</div>\r\n                                        <div className=\"post-date\">\r\n                                            {new Date(post.createTime).toLocaleDateString()}\r\n                                        </div>\r\n                                        {post.isSolved && <span className=\"solved-badge\">已解决</span>}\r\n                                    </div>\r\n                                    <h3 className=\"post-title\">{post.title}</h3>\r\n                                    <p className=\"post-content\">{post.content}</p>\r\n                                    <div className=\"post-stats\">\r\n                                        <span className=\"post-likes\">👍 {post.likeCount || 0}</span>\r\n                                        <span className=\"post-comments\">💬 {post.replyCount || 0}</span>\r\n                                    </div>\r\n                                </div>\r\n                            ))}\r\n                        </div>\r\n\r\n                        {/* 在帖子列表后添加分页控件 */}\r\n                        <div className=\"pagination\">\r\n                            <button\r\n                                onClick={() => fetchHelpPosts(currentPage - 1)}\r\n                                disabled={currentPage === 1}\r\n                            >\r\n                                上一页\r\n                            </button>\r\n\r\n                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (\r\n                                <button\r\n                                    key={page}\r\n                                    onClick={() => fetchHelpPosts(page)}\r\n                                    className={currentPage === page ? 'active' : ''}\r\n                                >\r\n                                    {page}\r\n                                </button>\r\n                            ))}\r\n\r\n                            <button\r\n                                onClick={() => fetchHelpPosts(currentPage + 1)}\r\n                                disabled={currentPage === totalPages}\r\n                            >\r\n                                下一页\r\n                            </button>\r\n                        </div>\r\n\r\n                        {/* 新增发帖弹窗 */}\r\n                        {showPostModal && (\r\n                            <div className=\"post-modal-overlay\">\r\n                                <div className=\"post-modal\">\r\n                                    <h3>发布求助帖</h3>\r\n                                    <button\r\n                                        className=\"modal-close-btn\"\r\n                                        onClick={() => setShowPostModal(false)}\r\n                                    >\r\n                                        ×\r\n                                    </button>\r\n\r\n                                    <form onSubmit={handleHelpPostSubmit}>\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子标题</label>\r\n                                            <input\r\n                                                type=\"text\"\r\n                                                value={postTitle}\r\n                                                onChange={(e) => setPostTitle(e.target.value)}\r\n                                                placeholder=\"请输入标题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>帖子内容</label>\r\n                                            <textarea\r\n                                                value={postContent}\r\n                                                onChange={(e) => setPostContent(e.target.value)}\r\n                                                placeholder=\"详细描述你的问题\"\r\n                                                required\r\n                                            />\r\n                                        </div>\r\n\r\n                                        <div className=\"form-group\">\r\n                                            <label>上传图片</label>\r\n                                            <div className=\"upload-image-btn\">\r\n                                                <input\r\n                                                    type=\"file\"\r\n                                                    id=\"image-upload\"\r\n                                                    accept=\"image/*\"\r\n                                                    onChange={handleImageUpload}\r\n                                                    style={{display: 'none'}}\r\n                                                />\r\n                                                <label htmlFor=\"image-upload\">\r\n                                                    {selectedImage ? '已选择图片' : '选择图片'}\r\n                                                </label>\r\n                                                {selectedImage && (\r\n                                                    <span className=\"image-name\">{selectedImage.name}</span>\r\n                                                )}\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className=\"form-actions\">\r\n                                            <button\r\n                                                type=\"button\"\r\n                                                className=\"cancel-btn\"\r\n                                                onClick={() => setShowPostModal(false)}\r\n                                            >\r\n                                                取消\r\n                                            </button>\r\n                                            <button\r\n                                                type=\"submit\"\r\n                                                className=\"submit-btn\"\r\n                                            >\r\n                                                确认发帖\r\n                                            </button>\r\n                                        </div>\r\n                                    </form>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                );\r\n            default:\r\n                return <div className=\"content-area\" data-testid=\"default-section\">公告区内容</div>;\r\n        }\r\n        \r\n    };\r\n\r\n    if (loading) return <div className=\"loading\">加载中...</div>;\r\n    if (error) return <div className=\"error\">{error}</div>;\r\n\r\n    return (\r\n        <div className=\"dashboard-container\" data-testid=\"dashboard-container\">\r\n            {/* 顶部栏 */}\r\n            <div className=\"top-bar\" data-testid=\"top-bar\">\r\n                {/* 平台名称替换搜索框 */}\r\n                <div className=\"platform-name\">\r\n                    <h2>PT资源站</h2>\r\n                </div>\r\n\r\n                <div className=\"user-actions\">\r\n                    {/* 新增管理员按钮 - 只有管理员可见 */}\r\n                    {userInfo?.isAdmin && (\r\n                        <button\r\n                            className=\"admin-center-button\"\r\n                            onClick={() => navigate('/administer')}\r\n                        >\r\n                            管理员中心\r\n                        </button>\r\n                    )}\r\n\r\n                    <div className=\"user-info\" data-testid=\"user-info\">\r\n                        <img\r\n                            src={userInfo?.avatar || 'https://via.placeholder.com/40'}\r\n                            alt=\"用户头像\"\r\n                            className=\"user-avatar\"\r\n                            onClick={() => navigate('/personal')}\r\n                            style={{cursor: 'pointer'}}\r\n                        />\r\n                        <span className=\"username\">{userInfo?.name || '用户'}</span>\r\n                        <button onClick={onLogout} className=\"logout-button\">退出</button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            {/* 导航栏 */}\r\n            {/* handleTabchange函数替换了原本的setactivetab函数 */}\r\n            <div className=\"nav-tabs\">\r\n                <button\r\n                    className={`tab-button ${activeTab === 'announcement' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('announcement')}\r\n                >\r\n                    公告区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'share' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('share')}\r\n                >\r\n                    分享区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'request' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('request')}\r\n                >\r\n                    求种区\r\n                </button>\r\n                <button\r\n                    className={`tab-button ${activeTab === 'help' ? 'active' : ''}`}\r\n                    onClick={() => handleTabChange('help')}\r\n                >\r\n                    求助区\r\n                </button>\r\n            </div>\r\n\r\n            {/* 内容区 */}\r\n            {renderContent()}\r\n            {/* 下载模态框 - 添加在这里 */}\r\n            {showDownloadModal && selectedTorrent && (\r\n                <div className=\"modal-overlay\">\r\n                    <div className=\"download-modal\">\r\n                        <h3>下载 {selectedTorrent.torrentName}</h3>\r\n                        <button \r\n                            className=\"close-btn\"\r\n                            onClick={() => !isDownloading && setShowDownloadModal(false)}\r\n                            disabled={isDownloading}\r\n                        >\r\n                            ×\r\n                        </button>\r\n                        \r\n                        <div className=\"form-group\">\r\n                            <label>下载路径:</label>\r\n                            <input\r\n                                type=\"text\"\r\n                                value={downloadPath}\r\n                                onChange={(e) => {\r\n                                    // 实时格式化显示\r\n                                    let path = e.target.value\r\n                                        .replace(/\\t/g, '')\r\n                                        .replace(/\\\\/g, '/')\r\n                                        .replace(/\\s+/g, ' ');\r\n                                    setDownloadPath(path);\r\n                                }}\r\n                                disabled={isDownloading}\r\n                                placeholder=\"例如: D:/downloads/\"\r\n                            />\r\n                        </div>\r\n                        \r\n                        {isDownloading && (\r\n                            <div className=\"progress-container\">\r\n                                <div className=\"progress-bar\" style={{ width: `${downloadProgress}%` }}>\r\n                                    {downloadProgress}%\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                        \r\n                        <div className=\"modal-actions\">\r\n                            <button\r\n                                onClick={() => !isDownloading && setShowDownloadModal(false)}\r\n                                disabled={isDownloading}\r\n                            >\r\n                                取消\r\n                            </button>\r\n                            <button\r\n                                onClick={handleDownload}\r\n                                disabled={isDownloading || !downloadPath}\r\n                            >\r\n                                {isDownloading ? '下载中...' : '开始下载'}\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            )}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Dashboard;","import { api } from './auth';\r\n\r\n// 获取所有公告\r\nexport const getAnnouncements = () => {\r\n  return api.get('/announcement/list');\r\n};\r\n\r\n\r\nexport const postAnnouncement = (data) => {\r\n  // 创建 FormData 对象\r\n  const formData = new FormData();\r\n  formData.append('title', data.title);\r\n  formData.append('content', data.content);\r\n\r\n  return api.post('/announcement/create', formData);\r\n}\r\n\r\n\r\n// 获取最新公告\r\nexport const getLatestAnnouncements = () => {\r\n  return api.get('/announcement/latest');\r\n};\r\n\r\n// 获取公告详情\r\nexport const getAnnouncementDetail = (id) => {\r\n  return api.get(`/announcement/${id}`);\r\n};\r\n\r\n","// src/api/personal.js\r\nimport { api } from './auth';\r\n\r\n/**\r\n * 获取用户信息\r\n * @returns {Promise<Object>} 用户信息对象\r\n */\r\nexport const getUserInfo = async () => {\r\n  try {\r\n    const response = await api.get('/user/userInfo');\r\n    if (response.data.code === 200) {\r\n        const userData = response.data.data;\r\n        return {\r\n            username: userData.username,\r\n            level: userData.level,\r\n            registTime: formatDate(userData.registTime),\r\n            magicPoints: userData.magicPoints,\r\n            upload: userData.upload, \r\n            download: userData.download, \r\n            shareRate: userData.shareRate.toFixed(2)\r\n        };\r\n    }\r\n    throw new Error(response.data.message || '获取用户信息失败');\r\n  } catch (error) {\r\n    console.error('获取用户信息失败:', error);\r\n    throw error;\r\n  }\r\n};\r\n\r\nexport const formatFileSize = (bytes) => {\r\n    if (bytes < 1024) {\r\n      return bytes + ' B';\r\n    }\r\n    const kb = bytes / 1024;\r\n    if (kb < 1024) {\r\n      return kb.toFixed(2) + ' KB';\r\n    }\r\n    const mb = kb / 1024;\r\n    if (mb < 1024) {\r\n      return mb.toFixed(2) + ' MB';\r\n    }\r\n    const gb = mb / 1024;\r\n    return gb.toFixed(2) + ' GB';\r\n  };\r\n  \r\n  \r\n  export const getDownloadQuota = async () => {\r\n    try {\r\n      const response = await api.get('/user/allowDownload');\r\n      if (response.data.code === 200) {\r\n        const data = response.data.data;\r\n        return {\r\n          total: data.total,  // 已经是字节\r\n          used: data.used,\r\n          remaining: data.remaining\r\n        };\r\n      }\r\n      throw new Error(response.data.message || '获取下载额度失败');\r\n    } catch (error) {\r\n      console.error('获取下载额度失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n// 修正后的时间格式化（正确处理时区）\r\nconst formatDate = (dateString) => {\r\n    const date = new Date(dateString);\r\n    const year = date.getFullYear();\r\n    const month = String(date.getMonth() + 1).padStart(2, '0');\r\n    const day = String(date.getDate()).padStart(2, '0');\r\n    return `${year}-${month}-${day}`;\r\n  };\r\n\r\n\r\n  export const getDownloadProgress = async () => {\r\n    try {\r\n      const response = await api.get('/torrent/getProgress');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.progresses;\r\n      }\r\n      throw new Error(response.data.message || '获取下载进度失败');\r\n    } catch (error) {\r\n      console.error('获取下载进度失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const getUserTorrents = async (page = 1, size = 5) => {\r\n    try {\r\n      const response = await api.get('/torrent/get/torrentMyself', {\r\n        params: { page, size }\r\n      });\r\n      if (response.data.code === 200) {\r\n        const records = response.data.data.records.map(item => ({\r\n          ...item.torrent,\r\n          downloadCount: item.downloadCount,\r\n          formattedSize: item.formattedSize\r\n        }));\r\n        return {\r\n          records: records,\r\n          total: response.data.data.total\r\n        };\r\n      }\r\n      throw new Error(response.data.message || '获取上传记录失败');\r\n    } catch (error) {\r\n      console.error('获取上传记录失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n  \r\n\r\n  export const deleteTorrent = async (id) => {\r\n    try {\r\n      const response = await api.delete(`/torrent/deleteTorrent/${id}`);\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '删除种子失败');\r\n    } catch (error) {\r\n      console.error('删除种子失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n\r\n  export const generateInviteCode = async () => {\r\n    try {\r\n      const response = await api.post('/invitecode/generate');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.inviteCode;\r\n      }\r\n      throw new Error(response.data.message || '生成邀请码失败');\r\n    } catch (error) {\r\n      console.error('生成邀请码失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const getUserInviteCodes = async () => {\r\n    try {\r\n      const response = await api.get('/invitecode/userInviteCode');\r\n      if (response.data.code === 200) {\r\n        return response.data.data.inviteCode;\r\n      }\r\n      throw new Error(response.data.message || '获取邀请码列表失败');\r\n    } catch (error) {\r\n      console.error('获取邀请码列表失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const exchangeUpload = async (magicPoints) => {\r\n    try {\r\n      const response = await api.post('/user/exchangeUpload', {\r\n        magicPoint: magicPoints\r\n      });\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '兑换上传量失败');\r\n    } catch (error) {\r\n      console.error('兑换上传量失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  export const updatePassword = async (oldPassword, newPassword) => {\r\n    try {\r\n      const response = await api.put('/user/password', {\r\n        oldPassword,\r\n        newPassword\r\n      });\r\n      if (response.data.code === 200) {\r\n        return response.data;\r\n      }\r\n      throw new Error(response.data.message || '修改密码失败');\r\n    } catch (error) {\r\n      console.error('修改密码失败:', error);\r\n      throw error;\r\n    }\r\n  };\r\n","// Personal.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation, Outlet } from 'react-router-dom';\r\nimport { getUserInfo, getDownloadQuota, getDownloadProgress } from '../../api/personal';\r\nimport './Personal.css';\r\nimport ActionCard from './ActionCard';\r\n\r\nconst Personal = () => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [userData, setUserData] = useState(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [downloadProgress, setDownloadProgress] = useState({});\r\n\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      try {\r\n        // 并行获取用户信息和下载额度\r\n        const [userInfo, downloadQuota] = await Promise.all([\r\n          getUserInfo(),\r\n          getDownloadQuota()\r\n        ]);\r\n        \r\n        setUserData({\r\n          username: userInfo.username,\r\n          avatar: 'https://via.placeholder.com/150',\r\n          joinDate: userInfo.registTime,\r\n          level: userInfo.level, // 可以根据userInfo.level设置不同等级\r\n          points: userInfo.magicPoints,\r\n          upload: userInfo.upload,\r\n          download: userInfo.download,\r\n          ratio: userInfo.shareRate,\r\n          downloadQuota: {\r\n            total: downloadQuota.total,\r\n            used: downloadQuota.used,\r\n            remaining: downloadQuota.remaining\r\n          }\r\n        });\r\n      } catch (err) {\r\n        setError(err.message);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchData();\r\n  }, []);\r\n\r\n  // 获取下载进度数据\r\n  const fetchDownloadProgress = async () => {\r\n    try {\r\n      const progressData = await getDownloadProgress();\r\n      setDownloadProgress(progressData);\r\n    } catch (err) {\r\n      console.error('获取下载进度失败:', err);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    // 初始获取下载进度\r\n    fetchDownloadProgress();\r\n    \r\n    // 设置定时器，每10秒获取一次下载进度\r\n    const intervalId = setInterval(fetchDownloadProgress, 10000);\r\n    \r\n    // 组件卸载时清除定时器\r\n    return () => clearInterval(intervalId);\r\n  }, []);\r\n\r\n\r\n  if (loading) {\r\n    return <div className=\"loading\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return <div className=\"error\">错误: {error}</div>;\r\n  }\r\n\r\n  if (!userData) {\r\n    return <div className=\"error\">未获取到用户数据</div>;\r\n  }\r\n\r\n  const features = [\r\n    { \r\n      title: '兑换区', \r\n      description: '下载量/邀请码',\r\n      path: '/personal/Exchange' // 相对路径\r\n    },\r\n    { \r\n      title: '上传记录', \r\n      description: '管理上传的资源',\r\n      path: '/personal/Upload' \r\n    },\r\n    { \r\n      title: '消息通知', \r\n      description: '查看系统消息',\r\n      path: '/personal/Notice' \r\n    },\r\n    { \r\n      title: '设置', \r\n      description: '修改个人资料',\r\n      path: '/personal/Setting' \r\n    }\r\n  ];\r\n\r\n  const handleCardClick = (path) => {\r\n    navigate(path); // 相对导航\r\n  };\r\n\r\n  const handleBack = () => {\r\n    if (location.state?.fromSubpage) {\r\n      // 如果是从子页面返回，则继续返回到Dashboard\r\n      navigate(`/dashboard/${location.state.dashboardTab || ''}`, {\r\n        replace: true\r\n      });\r\n    } else {\r\n      // 普通返回逻辑\r\n      navigate(-1);\r\n    }\r\n  };\r\n\r\n  const formatSize = (bytes) => {\r\n    if (bytes < 1024) return `${bytes} B`;\r\n    const kb = bytes / 1024;\r\n    if (kb < 1024) return `${kb.toFixed(2)} KB`;\r\n    const mb = kb / 1024;\r\n    if (mb < 1024) return `${mb.toFixed(2)} MB`;\r\n    const gb = mb / 1024;\r\n    return `${gb.toFixed(2)} GB`;\r\n  };\r\n\r\n  // 添加进度条颜色函数\r\n  const getProgressColor = (percentage) => {\r\n    if (percentage < 0.3) return '#4CAF50'; // 绿色\r\n    if (percentage < 0.7) return '#FFC107'; // 黄色\r\n    return '#F44336'; // 红色\r\n  };\r\n\r\n  return (\r\n    <div className=\"personal-container\">\r\n      {/* 返回按钮 */}\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回\r\n      </button>\r\n      \r\n      {/* 用户基本信息卡片 */}\r\n      <div className=\"profile-card\">\r\n        <div className=\"profile-header\">\r\n          <img \r\n            src={userData.avatar} \r\n            alt={userData.username} \r\n            className=\"profile-avatar\"\r\n          />\r\n          <div className=\"profile-info\">\r\n            <h2 className=\"username\">{userData.username}</h2>\r\n            <div className=\"user-meta\">\r\n              <span>加入时间: {userData.joinDate}</span>\r\n              <span>会员等级: Lv.{userData.level}</span> \r\n            </div>\r\n          </div>\r\n        </div>\r\n        \r\n        {/* 用户数据统计 */}\r\n        <div className=\"stats-grid\">\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">保种积分</div>\r\n            <div className=\"stat-value\">{userData.points}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">上传量</div>\r\n            <div className=\"stat-value\">{formatSize(userData.upload)}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">下载量</div>\r\n            <div className=\"stat-value\">{formatSize(userData.download)}</div>\r\n          </div>\r\n          <div className=\"stat-item\">\r\n            <div className=\"stat-label\">分享率</div>\r\n            <div className=\"stat-value\">{userData.ratio}</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      \r\n      {/* 下载额度卡片 */}\r\n      <div className=\"quota-card\">\r\n        <h3>下载额度</h3>\r\n        <div className=\"quota-info\">\r\n          <span className=\"quota-used\">\r\n            {formatSize(userData.downloadQuota.used)} 已使用\r\n          </span>\r\n          <span className=\"quota-remaining\">\r\n            {formatSize(userData.downloadQuota.remaining)} 剩余\r\n          </span>\r\n        </div>\r\n        <div className=\"progress-bar\">\r\n          <div \r\n            className=\"progress-fill\"\r\n            style={{ \r\n              width: `${(userData.downloadQuota.used / userData.downloadQuota.total) * 100}%`,\r\n              backgroundColor: getProgressColor(userData.downloadQuota.used / userData.downloadQuota.total)\r\n            }}\r\n          ></div>\r\n        </div>\r\n        <div className=\"quota-total\">\r\n          总额度: {formatSize(userData.downloadQuota.total)}\r\n        </div>\r\n      </div>\r\n\r\n      {Object.keys(downloadProgress).length > 0 && (\r\n        <div className=\"progress-card\">\r\n          <h3>当前下载进度</h3>\r\n          {Object.entries(downloadProgress).map(([taskId, progress]) => (\r\n            <div key={taskId} className=\"download-task\">\r\n              <div className=\"task-info\">\r\n                <span className=\"task-id\">任务: {taskId.substring(0, 8)}...</span>\r\n                <span className=\"task-progress\">{Math.round(progress * 100)}%</span>\r\n              </div>\r\n              <div className=\"progress-bar\">\r\n                <div \r\n                  className=\"progress-fill\"\r\n                  style={{ width: `${progress * 100}%` }}\r\n                ></div>\r\n              </div>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )}\r\n      \r\n      {/* 功能卡片区 */}\r\n      <div className=\"action-cards\">\r\n        {features.map((feature) => (\r\n          <div \r\n            key={feature.path}\r\n            className=\"action-card\"\r\n            onClick={() => handleCardClick(feature.path)}\r\n          >\r\n            <h3>{feature.title}</h3>\r\n            <p>{feature.description}</p>\r\n          </div>\r\n        ))}\r\n      </div>\r\n\r\n      {/* 子路由出口 */}\r\n      <div className=\"subpage-container\">\r\n        <Outlet />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Personal;","// src/components/AuthForm.jsx\r\nimport React, { useState } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { login, register } from '../api/auth';\r\nimport './AuthForm.css';\r\n\r\nconst AuthForm = ({ onLoginSuccess }) => {\r\n  const [isLogin, setIsLogin] = useState(true);\r\n  const [formData, setFormData] = useState({\r\n    username: '',\r\n    password: '',\r\n    code: ''\r\n  });\r\n  const [error, setError] = useState('');\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const navigate = useNavigate();\r\n\r\n  const handleChange = (e) => {\r\n    const { name, value } = e.target;\r\n    setFormData(prev => ({ ...prev, [name]: value }));\r\n  };\r\n\r\n  const handleSubmit = async (e) => {\r\n    e.preventDefault();\r\n    \r\n    try {\r\n      if (isLogin) {\r\n            const response = await login(formData.username, formData.password);\r\n            if (response.data.code === 200) {\r\n              localStorage.setItem('token', response.data.data.token);\r\n              localStorage.setItem('username', formData.username);\r\n              onLoginSuccess?.();\r\n              navigate('/dashboard');\r\n            } else {\r\n              setError(response.data.message || '登录失败');\r\n            }\r\n          } else {\r\n            const response = await register(\r\n              formData.username,\r\n              formData.password,\r\n              formData.code\r\n            );\r\n            if (response.data.code === 200) {\r\n              setError('');\r\n              setIsLogin(true);\r\n              setFormData({ username: '', password: '', code: '' });\r\n            } else {\r\n              setError(response.data.message || '注册失败');\r\n            }\r\n          }\r\n        } catch (err) {\r\n          setError(err.message || (isLogin ? '登录失败' : '注册失败'));\r\n        } finally {\r\n          setIsLoading(false);\r\n        }\r\n      \r\n\r\n      \r\n  };\r\n\r\n  return (\r\n    <div className=\"auth-container\">\r\n      <h1 className=\"auth-title\">PT影视资源站</h1>\r\n      \r\n      <div className=\"auth-form-wrapper\">\r\n        {isLogin ? (\r\n          <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n            <h2>用户登录</h2>\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"username\"\r\n                placeholder=\"账号\"\r\n                value={formData.username}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"password\"\r\n                name=\"password\"\r\n                placeholder=\"密码\"\r\n                value={formData.password}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <button type=\"submit\" className=\"auth-button\" disabled={isLoading}>\r\n              {isLoading ? '登录中...' : '登录'}\r\n            </button>\r\n            \r\n            <div className=\"auth-switch\">\r\n              <span>未有账户？</span>\r\n              <button type=\"button\" onClick={() => setIsLogin(false)} className=\"switch-button\">\r\n                去注册\r\n              </button>\r\n            </div>\r\n          </form>\r\n        ) : (\r\n          <form className=\"auth-form\" onSubmit={handleSubmit}>\r\n            <h2>用户注册</h2>\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"username\"\r\n                placeholder=\"账号\"\r\n                value={formData.username}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"password\"\r\n                name=\"password\"\r\n                placeholder=\"密码\"\r\n                value={formData.password}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <div className=\"form-group\">\r\n              <input\r\n                type=\"text\"\r\n                name=\"code\"\r\n                placeholder=\"邀请码\"\r\n                value={formData.code}\r\n                onChange={handleChange}\r\n                required\r\n              />\r\n            </div>\r\n            \r\n            <button type=\"submit\" className=\"auth-button\" disabled={isLoading}>\r\n              {isLoading ? '注册中...' : '注册'}\r\n            </button>\r\n            \r\n            <div className=\"auth-switch\">\r\n              <span>已有账户？</span>\r\n              <button type=\"button\" onClick={() => setIsLogin(true)} className=\"switch-button\">\r\n                去登录\r\n              </button>\r\n            </div>\r\n          </form>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default AuthForm;","import React, { useEffect, useState } from 'react';\r\nimport { useNavigate, useLocation, useParams } from 'react-router-dom';\r\nimport { getAnnouncementDetail } from '../api/announcement';\r\nimport { message } from 'antd';\r\nimport './AnnouncementDetail.css';\r\n\r\nconst AnnouncementDetail = () => {\r\n  const navigate = useNavigate();\r\n  const { id } = useParams();\r\n  const [announcement, setAnnouncement] = useState(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState('');\r\n  const location = useLocation();\r\n  const { state } = useLocation();\r\n  \r\n  \r\n  const handleBack = () => {\r\n    const fromTab = location.state?.fromTab; // 从跳转时传递的 state 中获取\r\n    if (fromTab) {\r\n    navigate(`/dashboard/${fromTab}`); // 明确返回对应标签页\r\n    } else {\r\n        navigate(-1); // 保底策略\r\n    }\r\n}\r\n  useEffect(() => {\r\n    const fetchAnnouncement = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getAnnouncementDetail(id);\r\n        if (response.data.code === 200) {\r\n          setAnnouncement(response.data.data.announcement);\r\n        } else {\r\n          setError(response.data.message || '获取公告详情失败');\r\n        }\r\n      } catch (err) {\r\n        setError('获取公告详情失败');\r\n        message.error('获取公告详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchAnnouncement();\r\n  }, [id]);\r\n  \r\n    \r\n\r\n  if (error || !announcement) {\r\n    return (\r\n      <div className=\"announcement-container\">\r\n        <button className=\"back-button\" onClick={handleBack}>\r\n          &larr; 返回\r\n        </button>\r\n        <div className=\"error-message\">{error || '公告不存在'}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"announcement-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回\r\n      </button>\r\n\r\n      <div className=\"announcement-detail\">\r\n        <div className=\"announcement-header\">\r\n          <h1>{announcement.title}</h1>\r\n          <div className=\"announcement-meta\">\r\n            <span>发布日期：{announcement.createTime}</span>\r\n          </div>\r\n        </div>\r\n\r\n        <div className=\"announcement-content\">\r\n          {announcement.content.split('\\n').map((paragraph, i) => (\r\n            <p key={i}>{paragraph}</p>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default AnnouncementDetail;\r\n\r\n\r\n    ","import React, { useState, useEffect } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getTorrentDetail, \r\n  likeTorrent, \r\n  addTorrentComment \r\n} from '../api/torrent';\r\nimport { \r\n  likeTorrentComment, \r\n  addCommentReply \r\n} from '../api/torrentComment';\r\nimport './TorrentDetail.css';\r\n\r\n\r\nconst TorrentDetail = ({ onLogout }) => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [torrent, setTorrent] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [setReplyingTo] = useState(null);\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState('');\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n  const [replyModal, setReplyModal] = useState({\r\n    visible: false,\r\n    replyingTo: null,\r\n    replyingToUsername: '',\r\n    isReply: false\r\n  });\r\n\r\n  // 确保openReplyModal接收username参数\r\nconst openReplyModal = (commentId, username) => {\r\n  setReplyModal({\r\n    visible: true,\r\n    replyingTo: commentId,\r\n    replyingToUsername: username,  // 确保这里接收username\r\n    isReply: false\r\n  });\r\n};\r\n\r\n  // 关闭回复弹窗\r\n  const closeReplyModal = () => {\r\n    setReplyModal({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n    setReplyContent('');\r\n  };\r\n\r\n  const Comment = ({ comment, onLike, onReply, isReply = false }) => {\r\n    return (\r\n      <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n        <div className=\"comment-item\">\r\n          <div className=\"comment-avatar\">\r\n            {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n          </div>\r\n          <div className=\"comment-content\">\r\n            <div className=\"comment-header\">\r\n              <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n              {comment.replyTo && (\r\n                <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n              )}\r\n              <span className=\"comment-time\">\r\n                {new Date(comment.createTime).toLocaleString()}\r\n              </span>\r\n            </div>\r\n            <p className=\"comment-text\">{comment.content}</p>\r\n            <div className=\"comment-actions\">\r\n              <button onClick={() => onLike(comment.id)}>\r\n                👍 ({comment.likeCount || 0})\r\n              </button>\r\n              <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                回复\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n    // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n    \r\n\r\n\r\n  const fetchTorrentDetail = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const response = await getTorrentDetail(id);\r\n      console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n      setTorrent(response.data.data.torrent);\r\n      setComments(response.data.data.comments);\r\n    } catch (err) {\r\n      setError(err.response?.data?.message || '获取种子详情失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    fetchTorrentDetail();\r\n  }, [id]);\r\n\r\n  // 点赞种子\r\n  const handleLikeTorrent = async () => {\r\n    try {\r\n      await likeTorrent(id);\r\n      setTorrent(prev => ({\r\n        ...prev,\r\n        likeCount: prev.likeCount + 1\r\n      }));\r\n    } catch (err) {\r\n      setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n\r\n  const handleCommentSubmit = async (e) => {\r\n    e.preventDefault();\r\n    if (!newComment.trim()) return;\r\n    \r\n    try {\r\n      const username = localStorage.getItem('username');\r\n      const response = await addTorrentComment(id, {\r\n        content: newComment,\r\n        authorId: username\r\n      });\r\n  \r\n      // 修改这里的响应处理逻辑\r\n      if (response.data && response.data.code === 200) {\r\n        await fetchTorrentDetail();\r\n        \r\n        setNewComment('');\r\n      } else {\r\n        setError(response.data.message || '评论失败');\r\n      }\r\n    } catch (err) {\r\n      setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n  \r\n  \r\n  const handleLikeComment = async (commentId) => {\r\n    try {\r\n      await likeTorrentComment(commentId);\r\n      \r\n      // 递归更新评论点赞数\r\n      const updateComments = (comments) => {\r\n        return comments.map(comment => {\r\n          // 当前评论匹配\r\n          if (comment.id === commentId) {\r\n            return { ...comment, likeCount: comment.likeCount + 1 };\r\n          }\r\n          \r\n          // 递归处理回复\r\n          if (comment.replies && comment.replies.length > 0) {\r\n            return {\r\n              ...comment,\r\n              replies: updateComments(comment.replies)\r\n            };\r\n          }\r\n          \r\n          return comment;\r\n        });\r\n      };\r\n  \r\n      setComments(prev => updateComments(prev));\r\n    } catch (err) {\r\n      setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n  // 修改startReply函数\r\n  const startReply = (commentId) => {\r\n    if (activeReplyId === commentId) {\r\n      // 如果点击的是已经激活的回复按钮，则关闭\r\n      setActiveReplyId(null);\r\n      setReplyingTo(null);\r\n    } else {\r\n      // 否则打开新的回复框\r\n      setActiveReplyId(commentId);\r\n      setReplyingTo(commentId);\r\n    }\r\n  };\r\n\r\n  const handleReplySubmit = async (e) => {\r\n    e.preventDefault();\r\n    if (!replyContent.trim()) return;\r\n  \r\n    try {\r\n      const username = localStorage.getItem('username');\r\n      const response = await addCommentReply(replyModal.replyingTo, {\r\n        content: replyContent,\r\n        authorId: username\r\n      });\r\n  \r\n      console.log('回复响应:', response.data); // 调试\r\n      \r\n      if (response.data && response.data.code === 200) {\r\n        await fetchTorrentDetail();\r\n  \r\n        closeReplyModal();\r\n      }\r\n    } catch (err) {\r\n      console.error('回复错误:', err);\r\n      setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n    }\r\n  };\r\n\r\n\r\n  // 返回按钮\r\n  const handleBack = () => {\r\n    const fromTab = location.state?.fromTab || 'share';\r\n    navigate(`/dashboard/${fromTab}`);\r\n  };\r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!torrent) return <div className=\"error\">种子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"torrent-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回资源区\r\n      </button>\r\n      \r\n      <div className=\"torrent-main\">\r\n        <div className=\"torrent-cover\">\r\n          <div className=\"cover-placeholder\">\r\n            {torrent.torrentName.charAt(0)}\r\n          </div>\r\n        </div>\r\n        \r\n        <div className=\"torrent-info\">\r\n          <h1 className=\"torrent-title\">{torrent.torrentName}</h1>\r\n          \r\n          <div className=\"uploader-info\">\r\n            <div className=\"uploader-avatar\">\r\n              {torrent.username.charAt(0)}\r\n            </div>\r\n            <div className=\"uploader-details\">\r\n              <span className=\"uploader-name\">{torrent.username}</span>\r\n              <span className=\"upload-time\">\r\n                {new Date(torrent.createTime).toLocaleString()}\r\n              </span>\r\n            </div>\r\n          </div>\r\n          \r\n          <div className=\"torrent-meta\">\r\n            <p><strong>类型:</strong> {torrent.category}</p>\r\n            <p><strong>地区:</strong> {torrent.region}</p>\r\n            <p><strong>分辨率:</strong> {torrent.resolution}</p>\r\n            <p><strong>字幕:</strong> {torrent.subtitle}</p>\r\n            {torrent.size && <p><strong>大小:</strong> {torrent.size}</p>}\r\n          </div>\r\n          \r\n          <div className=\"torrent-description\">\r\n            <h3>资源描述</h3>\r\n            <p>{torrent.description}</p>\r\n          </div>\r\n          \r\n          <div className=\"interaction-buttons\">\r\n            <button \r\n              className=\"like-button\"\r\n              onClick={handleLikeTorrent}\r\n            >\r\n              <span>👍 点赞 ({torrent.likeCount})</span>\r\n            </button>\r\n            <button className=\"download-button\">\r\n              <span>⬇️ 立即下载</span>\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      \r\n      <div className=\"comments-section\">\r\n        <h2>评论 ({torrent.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n        </form>\r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default TorrentDetail;","import { api } from './auth';\r\n\r\nexport const likeTorrentComment = (commentId) => {\r\n  return api.post(`/torrent/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getCommentReplies = (commentId) => {\r\n  return api.get(`/torrent/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addCommentReply = (commentId, replyData) => {\r\n  return api.post(`/torrent/comments/${commentId}/replies`, replyData);\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getRequestPostDetail,\r\n  addRequestPostComment,\r\n  likeRequestPost,\r\n  deleteRequestPost\r\n} from '../api/requestPost';\r\nimport {\r\n  likeRequestPostComment,\r\n  getCommentReplies,\r\n  addRequestCommentReply,\r\n  deleteRequestComment\r\n} from '../api/requestComment';\r\nimport './RequestDetail.css';\r\n\r\nconst RequestDetail = () => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const fileInputRef = useRef(null);\r\n  const [post, setPost] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [replyImage, setReplyImage] = useState([]);\r\n  const [commentImage, setCommentImage] = useState([]);\r\n  const [expandedReplies, setExpandedReplies] = useState({}); // 记录哪些评论的回复是展开的\r\n  const [loadingReplies, setLoadingReplies] = useState({});\r\n  const [setReplyingTo] = useState(null);\r\n  \r\n\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n    const [replyModal, setReplyModal] = useState({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n  \r\n    // 确保openReplyModal接收username参数\r\n  const openReplyModal = (commentId, username) => {\r\n    setReplyModal({\r\n      visible: true,\r\n      replyingTo: commentId,\r\n      replyingToUsername: username,  // 确保这里接收username\r\n      isReply: false\r\n    });\r\n  };\r\n  \r\n    // 关闭回复弹窗\r\n    const closeReplyModal = () => {\r\n      setReplyModal({\r\n        visible: false,\r\n        replyingTo: null,\r\n        replyingToUsername: '',\r\n        isReply: false\r\n      });\r\n      setReplyContent('');\r\n    };\r\n\r\n    const Comment = ({ comment, onLike, onReply, onDelete, isReply = false }) => {\r\n      return (\r\n        <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n          <div className=\"comment-item\">\r\n            <div className=\"comment-avatar\">\r\n              {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n            </div>\r\n            <div className=\"comment-content\">\r\n              <div className=\"comment-header\">\r\n                <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n                {comment.replyTo && (\r\n                  <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n                )}\r\n                <span className=\"comment-time\">\r\n                  {new Date(comment.createTime).toLocaleString()}\r\n                </span>\r\n              </div>\r\n              <p className=\"comment-text\">{comment.content}</p>\r\n              {/* 添加评论图片展示 */}\r\n              {comment.imageUrl && (\r\n                <div className=\"comment-image-container\">\r\n                  <img \r\n                    src={`http://localhost:8088${comment.imageUrl}`} \r\n                    alt=\"评论图片\" \r\n                    className=\"comment-image\"\r\n                    onClick={() => window.open(comment.imageUrl, '_blank')}\r\n                  />\r\n                </div>\r\n              )}\r\n              <div className=\"comment-actions\">\r\n                <button onClick={() => onLike(comment.id)}>\r\n                  👍 ({comment.likeCount || 0})\r\n                </button>\r\n                <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                  回复\r\n                </button>\r\n                {comment.authorId === localStorage.getItem('username') && (\r\n                  <button \r\n                    className=\"delete-comment-btn\"\r\n                    onClick={() => onDelete(comment.id)}\r\n                  >\r\n                    删除\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    };\r\n\r\n      // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n          onDelete={handleDeleteComment}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n\r\n   const fetchPostDetail = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getRequestPostDetail(id);\r\n        console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n        setPost(response.data.data.post);\r\n        setComments(response.data.data.comments);\r\n      } catch (err) {\r\n        setError(err.response?.data?.message || '获取帖子详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n  \r\n    useEffect(() => {\r\n      fetchPostDetail();\r\n    }, [id]);\r\n  \r\n    // 点赞帖子\r\n    const handleLikePost = async () => {\r\n      try {\r\n        await likeRequestPost(id);\r\n        setPost(prev => ({\r\n          ...prev,\r\n          likeCount: prev.likeCount + 1\r\n        }));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n     // 添加删除处理函数\r\n     const handleDeletePost = async (postId) => {\r\n      if (window.confirm('确定要删除这个帖子吗？所有评论也将被删除！')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteRequestPost(postId, username);\r\n          navigate('/dashboard/request'); // 删除成功后返回求助区\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n  \r\n    const handleCommentSubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!newComment.trim()) return;\r\n      \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const formData = new FormData();\r\n        formData.append('content', newComment);\r\n        formData.append('authorId', username);\r\n        if (commentImage) {\r\n          formData.append('image', commentImage);\r\n        }\r\n\r\n        const response = await addRequestPostComment(id, formData);\r\n    \r\n        // 修改这里的响应处理逻辑\r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          \r\n          setNewComment('');\r\n          setCommentImage(null); // 清空评论图片\r\n        } else {\r\n          setError(response.data.message || '评论失败');\r\n        }\r\n      } catch (err) {\r\n        setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n    \r\n    \r\n    const handleLikeComment = async (commentId) => {\r\n      try {\r\n        await likeRequestPostComment(commentId);\r\n        \r\n        // 递归更新评论点赞数\r\n        const updateComments = (comments) => {\r\n          return comments.map(comment => {\r\n            // 当前评论匹配\r\n            if (comment.id === commentId) {\r\n              return { ...comment, likeCount: comment.likeCount + 1 };\r\n            }\r\n            \r\n            // 递归处理回复\r\n            if (comment.replies && comment.replies.length > 0) {\r\n              return {\r\n                ...comment,\r\n                replies: updateComments(comment.replies)\r\n              };\r\n            }\r\n            \r\n            return comment;\r\n          });\r\n        };\r\n    \r\n        setComments(prev => updateComments(prev));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n    const handleDeleteComment = async (commentId) => {\r\n      if (window.confirm('确定要删除这条评论吗？')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteRequestComment(commentId, username);\r\n          await fetchPostDetail(); // 刷新评论列表\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n\r\n\r\n    // 修改startReply函数\r\n    const startReply = (commentId) => {\r\n      if (activeReplyId === commentId) {\r\n        // 如果点击的是已经激活的回复按钮，则关闭\r\n        setActiveReplyId(null);\r\n        setReplyingTo(null);\r\n      } else {\r\n        // 否则打开新的回复框\r\n        setActiveReplyId(commentId);\r\n        setReplyingTo(commentId);\r\n      }\r\n    };\r\n  \r\n    const handleReplySubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!replyContent.trim()) return;\r\n    \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const response = await addRequestCommentReply(replyModal.replyingTo, {\r\n          authorId: username,\r\n          content: replyContent,\r\n          image: replyImage\r\n        });\r\n    \r\n        console.log('回复响应:', response.data); // 调试\r\n        \r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          setReplyContent('');\r\n          closeReplyModal();\r\n        }\r\n      } catch (err) {\r\n        console.error('回复错误:', err);\r\n        setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n  \r\n  \r\n    // 返回按钮\r\n    const handleBack = () => {\r\n      const fromTab = location.state?.fromTab || 'share';\r\n      navigate(`/dashboard/request`);\r\n    };\r\n  \r\n    \r\n\r\n  const handleMarkSolved = () => {\r\n    // TODO: 实现标记为已解决的功能\r\n    setPost(prev => ({\r\n      ...prev,\r\n      isSolved: !prev.isSolved\r\n    }));\r\n  };\r\n\r\n  // const handleImageUpload = (e) => {\r\n  //   const files = Array.from(e.target.files);\r\n  //   const newImages = files.map(file => URL.createObjectURL(file));\r\n  //   setImages(prev => [...prev, ...newImages]);\r\n  // };\r\n\r\n  // const handleRemoveImage = (index) => {\r\n  //   setImages(prev => prev.filter((_, i) => i !== index));\r\n  // };\r\n\r\n  \r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!post) return <div className=\"error\">帖子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"request-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回求助区\r\n      </button>\r\n      \r\n      <div className={`request-post ${post.isSolved ? 'solved' : ''}`}>\r\n        <div className=\"post-header\">\r\n          <img \r\n            src={post.authorAvatar || 'https://via.placeholder.com/40'} \r\n            alt={post.authorId} \r\n            className=\"post-avatar\" \r\n          />\r\n          <div className=\"post-meta\">\r\n            <div className=\"post-author\">{post.authorId}</div>\r\n            <div className=\"post-date\">\r\n              {new Date(post.createTime).toLocaleString()}\r\n              </div>\r\n          </div>\r\n          {post.isSolved && <span ClassName=\"solved-badge\">已解决</span>}\r\n          <div classname=\"delete-post\">\r\n            {post.authorId === localStorage.getItem('username') && (\r\n              <button \r\n                className=\"delete-button\"\r\n                onClick={() => handleDeletePost(post.id)}\r\n              >\r\n                删除帖子\r\n              </button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        \r\n        <h1 className=\"post-title\">{post.title}</h1>\r\n        \r\n        <div className=\"post-content\">\r\n          {post.content.split('\\n').map((para, i) => (\r\n            <p key={i}>{para}</p>\r\n          ))}\r\n          {/* 添加帖子图片展示 */}\r\n          {post.imageUrl && (\r\n            <div className=\"post-image-container\">\r\n              <img \r\n                src={`http://localhost:8088${post.imageUrl}`} \r\n                alt=\"帖子图片\" \r\n                className=\"post-image\"\r\n                // onError={(e) => {\r\n                //   e.target.onerror = null; \r\n                //   e.target.src = 'https://via.placeholder.com/400x300?text=图片加载失败';\r\n                //   console.error('图片加载失败:', post.imageUrl);\r\n                // }}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n        \r\n        <div className=\"post-actions\">\r\n          <button \r\n            className={`like-button ${post.isLiked ? 'liked' : ''}`}\r\n            onClick={handleLikePost}\r\n          >\r\n            👍 点赞 ({post.likeCount})\r\n          </button>\r\n          <button \r\n            className={`solve-button ${post.isSolved ? 'solved' : ''}`}\r\n            onClick={handleMarkSolved}\r\n          >\r\n            {post.isSolved ? '✓ 已解决' : '标记为已解决'}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      \r\n       <div className=\"comments-section\">\r\n        <h2>评论 ({post.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n\r\n          {/* 图片上传部分 */}\r\n          <div className=\"form-group\">\r\n            <div className=\"upload-image-btn\">\r\n              <input \r\n                type=\"file\" \r\n                accept=\"image/*\" \r\n                onChange={(e) => setCommentImage(e.target.files[0])} \r\n                data-testid=\"comment-image-input\"  \r\n              />\r\n            </div>\r\n          </div>\r\n        </form>\r\n        \r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n\r\n                {/* 图片上传部分 */}\r\n                <div className=\"form-group\">\r\n                  <div className=\"upload-image-btn\">\r\n                    <input \r\n                      type=\"file\" \r\n                      accept=\"image/*\" \r\n                      onChange={(e) => setReplyImage(e.target.files[0])} \r\n                    />\r\n                  </div>\r\n                </div>\r\n\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default RequestDetail;","import { api } from './auth';\r\n\r\nexport const likeRequestPostComment = (commentId) => {\r\n  return api.post(`/request/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getRequestCommentReplies = (commentId) => {\r\n  return api.get(`/request/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addRequestCommentReply = (commentId, replyData) => {\r\n  const formData = new FormData();\r\n  formData.append('authorId', replyData.authorId);\r\n  formData.append('content', replyData.content);\r\n\r\n  // 如果有图片，添加到formData\r\n  if (replyData.image) {\r\n    formData.append('image', replyData.image);\r\n  }\r\n\r\n  return api.post(`/request/comments/${commentId}/replies`, formData);\r\n};\r\n\r\nexport const deleteRequestComment = (commentId, authorId) => {\r\n  return api.delete(`/request/comments/${commentId}`, {\r\n    params: { authorId }\r\n  });\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useParams, useNavigate, useLocation } from 'react-router-dom';\r\nimport { \r\n  getHelpPostDetail,\r\n  addHelpPostComment,\r\n  likeHelpPost,\r\n  deleteHelpPost\r\n} from '../api/helpPost';\r\nimport {\r\n  likeHelpPostComment,\r\n  getCommentReplies,\r\n  addHelpCommentReply,\r\n  deleteHelpComment\r\n} from '../api/helpComment';\r\nimport './HelpDetail.css';\r\n\r\nconst HelpDetail = () => {\r\n  const { id } = useParams();\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const fileInputRef = useRef(null);\r\n  const [post, setPost] = useState(null);\r\n  const [comments, setComments] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [newComment, setNewComment] = useState('');\r\n  const [replyContent, setReplyContent] = useState('');\r\n  const [replyImage, setReplyImage] = useState([]);\r\n  const [commentImage, setCommentImage] = useState([]);\r\n  const [expandedReplies, setExpandedReplies] = useState({}); // 记录哪些评论的回复是展开的\r\n  const [loadingReplies, setLoadingReplies] = useState({});\r\n  const [setReplyingTo] = useState(null);\r\n  \r\n\r\n  const [activeReplyId, setActiveReplyId] = useState(null);\r\n    const [replyModal, setReplyModal] = useState({\r\n      visible: false,\r\n      replyingTo: null,\r\n      replyingToUsername: '',\r\n      isReply: false\r\n    });\r\n  \r\n    // 确保openReplyModal接收username参数\r\n  const openReplyModal = (commentId, username) => {\r\n    setReplyModal({\r\n      visible: true,\r\n      replyingTo: commentId,\r\n      replyingToUsername: username,  // 确保这里接收username\r\n      isReply: false\r\n    });\r\n  };\r\n  \r\n    // 关闭回复弹窗\r\n    const closeReplyModal = () => {\r\n      setReplyModal({\r\n        visible: false,\r\n        replyingTo: null,\r\n        replyingToUsername: '',\r\n        isReply: false\r\n      });\r\n      setReplyContent('');\r\n    };\r\n\r\n    const Comment = ({ comment, onLike, onReply, onDelete, isReply = false }) => {\r\n      return (\r\n        <div className={`comment-container ${isReply ? \"is-reply\" : \"\"}`}>\r\n          <div className=\"comment-item\">\r\n            <div className=\"comment-avatar\">\r\n              {(comment.authorId || \"?\").charAt(0)} {/* 修复点 */}\r\n            </div>\r\n            <div className=\"comment-content\">\r\n              <div className=\"comment-header\">\r\n                <span className=\"comment-user\">{comment.authorId || \"匿名用户\"}</span>\r\n                {comment.replyTo && (\r\n                  <span className=\"reply-to\">回复 @{comment.replyTo}</span>\r\n                )}\r\n                <span className=\"comment-time\">\r\n                  {new Date(comment.createTime).toLocaleString()}\r\n                </span>\r\n              </div>\r\n              <p className=\"comment-text\">{comment.content}</p>\r\n              {/* 添加评论图片展示 */}\r\n              {comment.imageUrl && (\r\n                <div className=\"comment-image-container\">\r\n                  <img \r\n                    src={`http://localhost:8088${comment.imageUrl}`} \r\n                    alt=\"评论图片\" \r\n                    className=\"comment-image\"\r\n                    onClick={() => window.open(comment.imageUrl, '_blank')}\r\n                  />\r\n                </div>\r\n              )}\r\n              <div className=\"comment-actions\">\r\n                <button onClick={() => onLike(comment.id)}>\r\n                  👍 ({comment.likeCount || 0})\r\n                </button>\r\n                <button onClick={() => onReply(comment.id, comment.authorId)}>\r\n                  回复\r\n                </button>\r\n                {comment.authorId === localStorage.getItem('username') && (\r\n                  <button \r\n                    className=\"delete-comment-btn\"\r\n                    onClick={() => onDelete(comment.id)}\r\n                  >\r\n                    删除\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    };\r\n\r\n      // 递归渲染评论组件\r\n  const renderComment = (comment, depth = 0) => {\r\n    return (\r\n      <div key={comment.id} style={{ marginLeft: `${depth * 30}px` }}>\r\n        <Comment\r\n          comment={comment}\r\n          onLike={handleLikeComment}\r\n          onReply={openReplyModal}\r\n          isReply={depth > 0}\r\n          onDelete={handleDeleteComment}\r\n        />\r\n        \r\n        {/* 递归渲染所有回复 */}\r\n        {comment.replies && comment.replies.map(reply => \r\n          renderComment(reply, depth + 1)\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n\r\n   const fetchPostDetail = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const response = await getHelpPostDetail(id);\r\n        console.log('API Response:', JSON.parse(JSON.stringify(response.data.data.comments))); // 深度拷贝避免Proxy影响\r\n        setPost(response.data.data.post);\r\n        setComments(response.data.data.comments);\r\n      } catch (err) {\r\n        setError(err.response?.data?.message || '获取帖子详情失败');\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n  \r\n    useEffect(() => {\r\n      fetchPostDetail();\r\n    }, [id]);\r\n  \r\n    // 点赞帖子\r\n    const handleLikePost = async () => {\r\n      try {\r\n        await likeHelpPost(id);\r\n        setPost(prev => ({\r\n          ...prev,\r\n          likeCount: prev.likeCount + 1\r\n        }));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n     // 添加删除处理函数\r\n     const handleDeletePost = async (postId) => {\r\n      if (window.confirm('确定要删除这个帖子吗？所有评论也将被删除！')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteHelpPost(postId, username);\r\n          navigate('/dashboard/help'); // 删除成功后返回求助区\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n  \r\n    const handleCommentSubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!newComment.trim()) return;\r\n      \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const formData = new FormData();\r\n        formData.append('content', newComment);\r\n        formData.append('authorId', username);\r\n        if (commentImage) {\r\n          formData.append('image', commentImage);\r\n        }\r\n\r\n        const response = await addHelpPostComment(id, formData);\r\n    \r\n        // 修改这里的响应处理逻辑\r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          \r\n          setNewComment('');\r\n          setCommentImage(null); // 清空评论图片\r\n        } else {\r\n          setError(response.data.message || '评论失败');\r\n        }\r\n      } catch (err) {\r\n        setError('评论失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n    \r\n    \r\n    const handleLikeComment = async (commentId) => {\r\n      try {\r\n        await likeHelpPostComment(commentId);\r\n        \r\n        // 递归更新评论点赞数\r\n        const updateComments = (comments) => {\r\n          return comments.map(comment => {\r\n            // 当前评论匹配\r\n            if (comment.id === commentId) {\r\n              return { ...comment, likeCount: comment.likeCount + 1 };\r\n            }\r\n            \r\n            // 递归处理回复\r\n            if (comment.replies && comment.replies.length > 0) {\r\n              return {\r\n                ...comment,\r\n                replies: updateComments(comment.replies)\r\n              };\r\n            }\r\n            \r\n            return comment;\r\n          });\r\n        };\r\n    \r\n        setComments(prev => updateComments(prev));\r\n      } catch (err) {\r\n        setError('点赞失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n\r\n    const handleDeleteComment = async (commentId) => {\r\n      if (window.confirm('确定要删除这条评论吗？')) {\r\n        try {\r\n          const username = localStorage.getItem('username');\r\n          await deleteHelpComment(commentId, username);\r\n          await fetchPostDetail(); // 刷新评论列表\r\n        } catch (err) {\r\n          setError('删除失败: ' + (err.response?.data?.message || err.message));\r\n        }\r\n      }\r\n    };\r\n\r\n\r\n    // 修改startReply函数\r\n    const startReply = (commentId) => {\r\n      if (activeReplyId === commentId) {\r\n        // 如果点击的是已经激活的回复按钮，则关闭\r\n        setActiveReplyId(null);\r\n        setReplyingTo(null);\r\n      } else {\r\n        // 否则打开新的回复框\r\n        setActiveReplyId(commentId);\r\n        setReplyingTo(commentId);\r\n      }\r\n    };\r\n  \r\n    const handleReplySubmit = async (e) => {\r\n      e.preventDefault();\r\n      if (!replyContent.trim()) return;\r\n    \r\n      try {\r\n        const username = localStorage.getItem('username');\r\n        const response = await addHelpCommentReply(replyModal.replyingTo, {\r\n          authorId: username,\r\n          content: replyContent,\r\n          image: replyImage\r\n        });\r\n    \r\n        console.log('回复响应:', response.data); // 调试\r\n        \r\n        if (response.data && response.data.code === 200) {\r\n          await fetchPostDetail();\r\n          setReplyContent('');\r\n          closeReplyModal();\r\n        }\r\n      } catch (err) {\r\n        console.error('回复错误:', err);\r\n        setError('回复失败: ' + (err.response?.data?.message || err.message));\r\n      }\r\n    };\r\n  \r\n  \r\n    // 返回按钮\r\n    const handleBack = () => {\r\n      const fromTab = location.state?.fromTab || 'share';\r\n      navigate(`/dashboard/help`);\r\n    };\r\n  \r\n    \r\n\r\n  const handleMarkSolved = () => {\r\n    // TODO: 实现标记为已解决的功能\r\n    setPost(prev => ({\r\n      ...prev,\r\n      isSolved: !prev.isSolved\r\n    }));\r\n  };\r\n\r\n  // const handleImageUpload = (e) => {\r\n  //   const files = Array.from(e.target.files);\r\n  //   const newImages = files.map(file => URL.createObjectURL(file));\r\n  //   setImages(prev => [...prev, ...newImages]);\r\n  // };\r\n\r\n  // const handleRemoveImage = (index) => {\r\n  //   setImages(prev => prev.filter((_, i) => i !== index));\r\n  // };\r\n\r\n  \r\n\r\n  if (loading) return <div className=\"loading\">加载中...</div>;\r\n  if (error) return <div className=\"error\">{error}</div>;\r\n  if (!post) return <div className=\"error\">帖子不存在</div>;\r\n\r\n  return (\r\n    <div className=\"help-detail-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        &larr; 返回求助区\r\n      </button>\r\n      \r\n      <div className={`help-post ${post.isSolved ? 'solved' : ''}`}>\r\n        <div className=\"post-header\">\r\n          <img \r\n            src={post.authorAvatar || 'https://via.placeholder.com/40'} \r\n            alt={post.authorId} \r\n            className=\"post-avatar\" \r\n          />\r\n          <div className=\"post-meta\">\r\n            <div className=\"post-author\">{post.authorId}</div>\r\n            <div className=\"post-date\">\r\n              {new Date(post.createTime).toLocaleString()}\r\n              </div>\r\n          </div>\r\n          {post.isSolved && <span ClassName=\"solved-badge\">已解决</span>}\r\n          <div classname=\"delete-post\">\r\n            {post.authorId === localStorage.getItem('username') && (\r\n              <button \r\n                className=\"delete-button\"\r\n                onClick={() => handleDeletePost(post.id)}\r\n              >\r\n                删除帖子\r\n              </button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        \r\n        <h1 className=\"post-title\">{post.title}</h1>\r\n        \r\n        <div className=\"post-content\">\r\n          {post.content.split('\\n').map((para, i) => (\r\n            <p key={i}>{para}</p>\r\n          ))}\r\n          {/* 添加帖子图片展示 */}\r\n          {post.imageUrl && (\r\n            <div className=\"post-image-container\">\r\n              <img \r\n                src={`http://localhost:8088${post.imageUrl}`} \r\n                alt=\"帖子图片\" \r\n                className=\"post-image\"\r\n                // onError={(e) => {\r\n                //   e.target.onerror = null; \r\n                //   e.target.src = 'https://via.placeholder.com/400x300?text=图片加载失败';\r\n                //   console.error('图片加载失败:', post.imageUrl);\r\n                // }}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n        \r\n        <div className=\"post-actions\">\r\n          <button \r\n            className={`like-button ${post.isLiked ? 'liked' : ''}`}\r\n            onClick={handleLikePost}\r\n          >\r\n            👍 点赞 ({post.likeCount})\r\n          </button>\r\n          <button \r\n            className={`solve-button ${post.isSolved ? 'solved' : ''}`}\r\n            onClick={handleMarkSolved}\r\n          >\r\n            {post.isSolved ? '✓ 已解决' : '标记为已解决'}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      \r\n       <div className=\"comments-section\">\r\n        <h2>评论 ({post.replyCount})</h2>\r\n        \r\n        <form onSubmit={handleCommentSubmit} className=\"comment-form\">\r\n          <textarea\r\n            value={newComment}\r\n            onChange={(e) => setNewComment(e.target.value)}\r\n            placeholder=\"写下你的评论...\"\r\n            rows=\"3\"\r\n            required\r\n          />\r\n          <button type=\"submit\">发表评论</button>\r\n\r\n          {/* 图片上传部分 */}\r\n          <div className=\"form-group\">\r\n            <div className=\"upload-image-btn\">\r\n              <input \r\n                type=\"file\" \r\n                accept=\"image/*\" \r\n                onChange={(e) => setCommentImage(e.target.files[0])} \r\n                data-testid=\"comment-image-input\"  \r\n              />\r\n            </div>\r\n          </div>\r\n        </form>\r\n        \r\n        \r\n        <div className=\"comment-list\">\r\n          {comments.map(comment => renderComment(comment))}\r\n        </div>\r\n\r\n        {replyModal.visible && (\r\n          <div className=\"reply-modal-overlay\">\r\n            <div className=\"reply-modal\">\r\n              <div className=\"modal-header\">\r\n                <h3>回复 @{replyModal.replyingToUsername}</h3>\r\n                <button onClick={closeReplyModal} className=\"close-modal\">&times;</button>\r\n              </div>\r\n              <form onSubmit={handleReplySubmit}>\r\n                <textarea\r\n                  value={replyContent}\r\n                  onChange={(e) => setReplyContent(e.target.value)}\r\n                  placeholder={`回复 @${replyModal.replyingToUsername}...`}\r\n                  rows=\"5\"\r\n                  autoFocus\r\n                  required\r\n                />\r\n\r\n                {/* 图片上传部分 */}\r\n                <div className=\"form-group\">\r\n                  <div className=\"upload-image-btn\">\r\n                    <input \r\n                      type=\"file\" \r\n                      accept=\"image/*\" \r\n                      onChange={(e) => setReplyImage(e.target.files[0])} \r\n                    />\r\n                  </div>\r\n                </div>\r\n\r\n                <div className=\"modal-actions\">\r\n                  <button type=\"button\" onClick={closeReplyModal} className=\"cancel-btn\">\r\n                    取消\r\n                  </button>\r\n                  <button type=\"submit\" className=\"submit-btn\">\r\n                    发送回复\r\n                  </button>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default HelpDetail;","import { api } from './auth';\r\n\r\nexport const likeHelpPostComment = (commentId) => {\r\n  return api.post(`/help/comments/${commentId}/like`);\r\n};\r\n\r\nexport const getHelpCommentReplies = (commentId) => {\r\n  return api.get(`/help/comments/${commentId}/replies`);\r\n};\r\n\r\nexport const addHelpCommentReply = (commentId, replyData) => {\r\n  const formData = new FormData();\r\n  formData.append('authorId', replyData.authorId);\r\n  formData.append('content', replyData.content);\r\n\r\n  // 如果有图片，添加到formData\r\n  if (replyData.image) {\r\n    formData.append('image', replyData.image);\r\n  }\r\n\r\n  return api.post(`/help/comments/${commentId}/replies`, formData);\r\n};\r\n\r\nexport const deleteHelpComment = (commentId, authorId) => {\r\n  return api.delete(`/help/comments/${commentId}`, {\r\n    params: { authorId }\r\n  });\r\n};","import React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { generateInviteCode, getUserInviteCodes, exchangeUpload, getUserInfo } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Exchange = () => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [inviteCodes, setInviteCodes] = useState([]);\r\n  const [userInfo, setUserInfo] = useState(null);\r\n  const [magicPoints, setMagicPoints] = useState('0'); \r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n\r\n  // 获取用户信息和邀请码列表\r\n  useEffect(() => {\r\n    const fetchData = async () => {\r\n      try {\r\n        setLoading(true);\r\n        const [userData, codes] = await Promise.all([\r\n          getUserInfo(),\r\n          getUserInviteCodes()\r\n        ]);\r\n        setUserInfo(userData);\r\n        setInviteCodes(codes);\r\n      } catch (err) {\r\n        setError(err.message);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n    fetchData();\r\n  }, []);\r\n\r\n  // 生成邀请码\r\n  const handleGenerateInviteCode = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const newCode = await generateInviteCode();\r\n      setInviteCodes([...inviteCodes, newCode]);\r\n      // 刷新用户信息\r\n      const updatedUser = await getUserInfo();\r\n      setUserInfo(updatedUser);\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleExchangeUpload = async () => {\r\n    const points = Number(magicPoints);\r\n    if (!points || points <= 0) {\r\n      setError('请输入有效的魔力值');\r\n      return;\r\n    }\r\n    try {\r\n      setLoading(true);\r\n      await exchangeUpload(points);\r\n      // 刷新用户信息\r\n      const updatedUser = await getUserInfo();\r\n      setUserInfo(updatedUser);\r\n      setMagicPoints('0');\r\n      setError(null);\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleBack = () => {\r\n    // 返回个人中心，并携带来源标记\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,  // 标记来自子页面\r\n        dashboardTab: location.state?.dashboardTab // 保留Dashboard的标签页状态\r\n      },\r\n      replace: true  // 替换当前历史记录\r\n    });\r\n  };\r\n\r\n  if (loading) {\r\n    return <div className=\"subpage-container\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return (\r\n      <div className=\"subpage-container\">\r\n        <button className=\"back-button\" onClick={handleBack}>\r\n          ← 返回个人中心\r\n        </button>\r\n        <div className=\"error\">错误: {error}</div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">兑换区</h2>\r\n      \r\n      <div className=\"exchange-section\">\r\n        <h3>当前魔力值: {userInfo?.magicPoints || 0}</h3>\r\n        \r\n        <div className=\"exchange-card\">\r\n          <h4>兑换邀请码</h4>\r\n          <p>消耗10魔力值兑换一个邀请码</p>\r\n          <button \r\n            className=\"exchange-btn\"\r\n            onClick={handleGenerateInviteCode}\r\n            disabled={!userInfo || userInfo.magicPoints < 10}\r\n          >\r\n            兑换邀请码\r\n          </button>\r\n        </div>\r\n\r\n        <div className=\"exchange-card\">\r\n          <h4>兑换上传量</h4>\r\n          <p>1魔力值 = 1GB上传量</p>\r\n          <div className=\"exchange-input-group\">\r\n          <input\r\n            type=\"number\"\r\n            value={magicPoints}\r\n            onChange={(e) => {\r\n              // 允许空字符串或有效数字\r\n              const value = e.target.value;\r\n              if (value === '' || !isNaN(value)) {\r\n                setMagicPoints(value);\r\n              }\r\n            }}\r\n            min=\"1\"\r\n            max={userInfo?.magicPoints || 0}\r\n            placeholder=\"输入要兑换的魔力值\"\r\n          />\r\n\r\n          <button \r\n            className=\"exchange-btn\"\r\n            onClick={handleExchangeUpload}\r\n            disabled={\r\n              !magicPoints || \r\n              Number(magicPoints) <= 0 || \r\n              !userInfo || \r\n              Number(magicPoints) > userInfo.magicPoints\r\n            }\r\n          >\r\n            兑换上传量\r\n          </button>\r\n          </div>\r\n        </div>\r\n\r\n        {inviteCodes.length > 0 && (\r\n          <div className=\"invite-code-list\">\r\n            <h4>我的邀请码</h4>\r\n            <ul>\r\n              {inviteCodes.map((code, index) => (\r\n                <li key={index}>\r\n                  <span className=\"code\">{code.code}</span>\r\n                  <span className={`status ${code.isUsed ? 'used' : 'available'}`}>\r\n                    {code.isUsed ? '已使用' : '可用'}\r\n                  </span>\r\n                </li>\r\n              ))}\r\n            </ul>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Exchange;","import React, { useState, useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { getUserTorrents, deleteTorrent } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Upload = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [torrents, setTorrents] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n  const [pagination, setPagination] = useState({\r\n    page: 1,\r\n    size: 5,\r\n    total: 0\r\n  });\r\n\r\n\r\n\r\n  // 格式化日期\r\n  const formatDate = (dateString) => {\r\n    const date = new Date(dateString);\r\n    return date.toLocaleString();\r\n  };\r\n\r\n  // 获取上传记录\r\n  const fetchTorrents = async () => {\r\n    try {\r\n      setLoading(true);\r\n      const { records, total } = await getUserTorrents(pagination.page, pagination.size);\r\n      setTorrents(records);\r\n      setPagination(prev => ({ ...prev, total }));\r\n    } catch (err) {\r\n      setError(err.message);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  \r\n\r\n  // 删除种子\r\n  const handleDelete = async (id) => {\r\n    if (window.confirm('确定要删除这个种子吗？此操作不可撤销！')) {\r\n      try {\r\n        await deleteTorrent(id);\r\n        // 删除成功后刷新列表\r\n        fetchTorrents();\r\n      } catch (err) {\r\n        alert('删除失败: ' + err.message);\r\n      }\r\n    }\r\n  };\r\n\r\n  // 计算总页数\r\n  const totalPages = Math.ceil(pagination.total / pagination.size);\r\n\r\n  // 生成页码数组\r\n  const getPageNumbers = () => {\r\n    const pages = [];\r\n    const maxVisiblePages = 5; // 最多显示5个页码\r\n    \r\n    let startPage = Math.max(1, pagination.page - Math.floor(maxVisiblePages / 2));\r\n    let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);\r\n    \r\n    // 调整起始页码，确保始终显示 maxVisiblePages 个页码（如果总页数足够）\r\n    if (endPage - startPage + 1 < maxVisiblePages) {\r\n      startPage = Math.max(1, endPage - maxVisiblePages + 1);\r\n    }\r\n    \r\n    for (let i = startPage; i <= endPage; i++) {\r\n      pages.push(i);\r\n    }\r\n    \r\n    return pages;\r\n  };\r\n\r\n  // 直接跳转到指定页码\r\n  const jumpToPage = (page) => {\r\n    if (page >= 1 && page <= totalPages && page !== pagination.page) {\r\n      setPagination(prev => ({ ...prev, page }));\r\n    }\r\n  };\r\n\r\n  // 分页改变\r\n  const handlePageChange = (newPage) => {\r\n    setPagination(prev => ({ ...prev, page: newPage }));\r\n  };\r\n\r\n  useEffect(() => {\r\n    fetchTorrents();\r\n  }, [pagination.page]);\r\n\r\n  const handleBack = () => {\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,\r\n        dashboardTab: location.state?.dashboardTab\r\n      },\r\n      replace: true\r\n    });\r\n  };\r\n\r\n  if (loading) {\r\n    return <div className=\"subpage-container\">加载中...</div>;\r\n  }\r\n\r\n  if (error) {\r\n    return <div className=\"subpage-container\">错误: {error}</div>;\r\n  }\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">上传记录</h2>\r\n      \r\n      <table className=\"uploads-table\">\r\n        <thead>\r\n          <tr>\r\n            <th>资源名称</th>\r\n            <th>大小</th>\r\n            <th>上传时间</th>\r\n            <th>下载次数</th>\r\n            <th>操作</th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          {torrents.map(torrent => (\r\n            <tr key={torrent.id} className=\"list-item\">\r\n              <td>{torrent.torrentName}</td>\r\n              <td>{torrent.formattedSize}</td>\r\n              <td>{formatDate(torrent.createTime)}</td>\r\n              <td>{torrent.downloadCount || 0}</td>\r\n              <td>\r\n                <button \r\n                  className=\"action-btn delete-btn\"\r\n                  onClick={() => handleDelete(torrent.id)}\r\n                >\r\n                  删除\r\n                </button>\r\n              </td>\r\n            </tr>\r\n          ))}\r\n        </tbody>\r\n      </table>\r\n\r\n     {/* 修改后的分页控件 */}\r\n     <div className=\"pagination\">\r\n        <button \r\n          disabled={pagination.page <= 1}\r\n          onClick={() => jumpToPage(1)}\r\n          className=\"page-nav\"\r\n        >\r\n          首页\r\n        </button>\r\n        <button \r\n          disabled={pagination.page <= 1}\r\n          onClick={() => jumpToPage(pagination.page - 1)}\r\n          className=\"page-nav\"\r\n        >\r\n          上一页\r\n        </button>\r\n        \r\n        {/* 显示页码 */}\r\n        {getPageNumbers().map(number => (\r\n          <button\r\n            key={number}\r\n            onClick={() => jumpToPage(number)}\r\n            className={`page-number ${pagination.page === number ? 'active' : ''}`}\r\n          >\r\n            {number}\r\n          </button>\r\n        ))}\r\n        \r\n        {/* 显示省略号（如果有更多页） */}\r\n        {totalPages > getPageNumbers()[getPageNumbers().length - 1] && (\r\n          <span className=\"ellipsis\">...</span>\r\n        )}\r\n        \r\n        <button \r\n          disabled={pagination.page >= totalPages}\r\n          onClick={() => jumpToPage(pagination.page + 1)}\r\n          className=\"page-nav\"\r\n        >\r\n          下一页\r\n        </button>\r\n        <button \r\n          disabled={pagination.page >= totalPages}\r\n          onClick={() => jumpToPage(totalPages)}\r\n          className=\"page-nav\"\r\n        >\r\n          末页\r\n        </button>\r\n        \r\n        <div className=\"page-info\">\r\n          <span>共 {totalPages} 页</span>\r\n          <span>跳至</span>\r\n          <input\r\n            type=\"number\"\r\n            min=\"1\"\r\n            max={totalPages}\r\n            onKeyDown={(e) => {\r\n              if (e.key === 'Enter') {\r\n                const page = parseInt(e.target.value);\r\n                if (!isNaN(page)) {\r\n                  jumpToPage(Math.max(1, Math.min(page, totalPages)));\r\n                  e.target.value = '';\r\n                }\r\n              }\r\n            }}\r\n          />\r\n          <span>页</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Upload;","import React from 'react';\r\nimport { useNavigate,useLocation } from 'react-router-dom';\r\nimport './personalSubpage.css';\r\n\r\nconst Notice = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  // 模拟数据\r\n  const [notices] = React.useState([\r\n    { \r\n      id: 1, \r\n      title: '积分奖励到账', \r\n      content: '您上传的资源《盗梦空间》获得100积分奖励',\r\n      date: '2023-10-20',\r\n      read: false\r\n    },\r\n    { \r\n      id: 2, \r\n      title: '系统通知', \r\n      content: '服务器将于今晚2:00-4:00进行维护',\r\n      date: '2023-10-18',\r\n      read: true\r\n    }\r\n  ]);\r\n\r\n  const handleBack = () => {\r\n    // 返回个人中心，并携带来源标记\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,  // 标记来自子页面\r\n        dashboardTab: location.state?.dashboardTab // 保留Dashboard的标签页状态\r\n      },\r\n      replace: true  // 替换当前历史记录\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={(handleBack)}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">消息通知</h2>\r\n      \r\n      <div className=\"notice-list\">\r\n        {notices.map(notice => (\r\n          <div key={notice.id} className={`list-item ${!notice.read ? 'unread' : ''}`}>\r\n            <div className=\"notice-header\">\r\n              <h3>{notice.title}</h3>\r\n              <span className=\"notice-date\">{notice.date}</span>\r\n            </div>\r\n            <p className=\"notice-content\">{notice.content}</p>\r\n          </div>\r\n        ))}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Notice;","import React, { useState,useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\nimport { getUserInfo, updatePassword } from '../../api/personal';\r\nimport './personalSubpage.css';\r\n\r\nconst Setting = ({ onLogout }) => {\r\n  const navigate = useNavigate();\r\n  const location = useLocation();\r\n  const [userInfo, setUserInfo] = useState(null);\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n  const [success, setSuccess] = useState(null);\r\n  const [passwordForm, setPasswordForm] = useState({\r\n    oldPassword: '',\r\n    newPassword: '',\r\n    confirmPassword: ''\r\n  });\r\n\r\n  // 获取用户信息\r\n  useEffect(() => {\r\n    const fetchUserInfo = async () => {\r\n      try {\r\n        const info = await getUserInfo();\r\n        setUserInfo(info);\r\n      } catch (err) {\r\n        console.error('获取用户信息失败:', err);\r\n      }\r\n    };\r\n    fetchUserInfo();\r\n  }, []);\r\n\r\n  const handleBack = () => {\r\n    navigate('/personal', { \r\n      state: { \r\n        fromSubpage: true,\r\n        dashboardTab: location.state?.dashboardTab\r\n      },\r\n      replace: true\r\n    });\r\n  };\r\n\r\n  const handlePasswordChange = (e) => {\r\n    const { name, value } = e.target;\r\n    setPasswordForm(prev => ({\r\n      ...prev,\r\n      [name]: value\r\n    }));\r\n  };\r\n\r\n  const handlePasswordSubmit = async (e) => {\r\n    e.preventDefault();\r\n    setError(null);\r\n    setSuccess(null);\r\n\r\n    // 验证表单\r\n    if (!passwordForm.oldPassword || !passwordForm.newPassword || !passwordForm.confirmPassword) {\r\n      setError('请填写所有密码字段');\r\n      return;\r\n    }\r\n\r\n    if (passwordForm.newPassword !== passwordForm.confirmPassword) {\r\n      setError('新密码与确认密码不一致');\r\n      return;\r\n    }\r\n\r\n    if (passwordForm.newPassword.length < 6) {\r\n      setError('新密码长度至少为6位');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      setLoading(true);\r\n      await updatePassword(passwordForm.oldPassword, passwordForm.newPassword);\r\n      setSuccess('密码修改成功');\r\n      setPasswordForm({\r\n        oldPassword: '',\r\n        newPassword: '',\r\n        confirmPassword: ''\r\n      });\r\n    } catch (err) {\r\n      setError(err.message || '修改密码失败');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className=\"subpage-container\">\r\n      <button className=\"back-button\" onClick={handleBack}>\r\n        ← 返回个人中心\r\n      </button>\r\n\r\n      <h2 className=\"page-title\">个人设置</h2>\r\n\r\n      <div className=\"setting-section\">\r\n        <div className=\"user-info-card\">\r\n          <h3>账户信息</h3>\r\n          <div className=\"info-item\">\r\n            <label>用户名:</label>\r\n            <span>{userInfo?.username || '加载中...'}</span>\r\n          </div>\r\n          <p className=\"info-note\">用户名不可更改</p>\r\n        </div>\r\n\r\n        <div className=\"password-form-card\">\r\n          <h3>修改密码</h3>\r\n          <form onSubmit={handlePasswordSubmit}>\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"oldPassword\">原密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"oldPassword\"\r\n                name=\"oldPassword\"\r\n                value={passwordForm.oldPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n              />\r\n            </div>\r\n\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"newPassword\">新密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"newPassword\"\r\n                name=\"newPassword\"\r\n                value={passwordForm.newPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n                minLength=\"6\"\r\n              />\r\n            </div>\r\n\r\n            <div className=\"form-group\">\r\n              <label htmlFor=\"confirmPassword\">确认新密码:</label>\r\n              <input\r\n                type=\"password\"\r\n                id=\"confirmPassword\"\r\n                name=\"confirmPassword\"\r\n                value={passwordForm.confirmPassword}\r\n                onChange={handlePasswordChange}\r\n                required\r\n                minLength=\"6\"\r\n              />\r\n            </div>\r\n\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n            {success && <div className=\"success-message\">{success}</div>}\r\n\r\n            <button \r\n              type=\"submit\" \r\n              className=\"submit-button\"\r\n              disabled={loading}\r\n            >\r\n              {loading ? '处理中...' : '修改密码'}\r\n            </button>\r\n          </form>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Setting;","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n  const invalidDate = () => constructFrom(options?.in, NaN);\n\n  const additionalDigits = options?.additionalDigits ?? 2;\n  const dateStrings = splitDateString(argument);\n\n  let date;\n  if (dateStrings.date) {\n    const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(+date)) return invalidDate();\n\n  const timestamp = +date;\n  let time = 0;\n  let offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) return invalidDate();\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) return invalidDate();\n  } else {\n    const tmpDate = new Date(timestamp + time);\n    const result = toDate(0, options?.in);\n    result.setFullYear(\n      tmpDate.getUTCFullYear(),\n      tmpDate.getUTCMonth(),\n      tmpDate.getUTCDate(),\n    );\n    result.setHours(\n      tmpDate.getUTCHours(),\n      tmpDate.getUTCMinutes(),\n      tmpDate.getUTCSeconds(),\n      tmpDate.getUTCMilliseconds(),\n    );\n    return result;\n  }\n\n  return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n  /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n  /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  const dateStrings = {};\n  const array = dateString.split(patterns.dateTimeDelimiter);\n  let timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(\n        dateStrings.date.length,\n        dateString.length,\n      );\n    }\n  }\n\n  if (timeString) {\n    const token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  const regex = new RegExp(\n    \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n      (4 + additionalDigits) +\n      \"})|(\\\\d{2}|[+-]\\\\d{\" +\n      (2 + additionalDigits) +\n      \"})$)\",\n  );\n\n  const captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return { year: NaN, restDateString: \"\" };\n\n  const year = captures[1] ? parseInt(captures[1]) : null;\n  const century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length),\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n\n  const captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n\n  const isWeekDate = !!captures[4];\n  const dayOfYear = parseDateUnit(captures[1]);\n  const month = parseDateUnit(captures[2]) - 1;\n  const day = parseDateUnit(captures[3]);\n  const week = parseDateUnit(captures[4]);\n  const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    const date = new Date(0);\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  const captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  const hours = parseTimeUnit(captures[1]);\n  const minutes = parseTimeUnit(captures[2]);\n  const seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return (\n    hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n  );\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n\n  const captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n\n  const sign = captures[1] === \"+\" ? -1 : 1;\n  const hours = parseInt(captures[2]);\n  const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  const date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  const fourthOfJanuaryDay = date.getUTCDay() || 7;\n  const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n  return (\n    month >= 0 &&\n    month <= 11 &&\n    date >= 1 &&\n    date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return (\n    seconds >= 0 &&\n    seconds < 60 &&\n    minutes >= 0 &&\n    minutes < 60 &&\n    hours >= 0 &&\n    hours < 25\n  );\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n","export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n","const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n\n  wide: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n","export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // [TODO] -- I challenge you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // [TODO] -- I challenge you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n","export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // [TODO] I challenge you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n  return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(date, constructor) {\n  const date_ = isConstructor(constructor)\n    ? new constructor(0)\n    : constructFrom(constructor, 0);\n  date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n  date_.setHours(\n    date.getHours(),\n    date.getMinutes(),\n    date.getSeconds(),\n    date.getMilliseconds(),\n  );\n  return date_;\n}\n\nfunction isConstructor(constructor) {\n  return (\n    typeof constructor === \"function\" &&\n    constructor.prototype?.constructor === constructor\n  );\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n  subPriority = 0;\n\n  validate(_utcDate, _options) {\n    return true;\n  }\n}\n\nexport class ValueSetter extends Setter {\n  constructor(\n    value,\n\n    validateValue,\n\n    setValue,\n\n    priority,\n    subPriority,\n  ) {\n    super();\n    this.value = value;\n    this.validateValue = validateValue;\n    this.setValue = setValue;\n    this.priority = priority;\n    if (subPriority) {\n      this.subPriority = subPriority;\n    }\n  }\n\n  validate(date, options) {\n    return this.validateValue(date, this.value, options);\n  }\n\n  set(date, flags, options) {\n    return this.setValue(date, flags, this.value, options);\n  }\n}\n\nexport class DateTimezoneSetter extends Setter {\n  priority = TIMEZONE_UNIT_PRIORITY;\n  subPriority = -1;\n\n  constructor(context, reference) {\n    super();\n    this.context = context || ((date) => constructFrom(reference, date));\n  }\n\n  set(date, flags) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(date, transpose(date, this.context));\n  }\n}\n","import { ValueSetter } from \"./Setter.js\";\n\nexport class Parser {\n  run(dateString, token, match, options) {\n    const result = this.parse(dateString, token, match, options);\n    if (!result) {\n      return null;\n    }\n\n    return {\n      setter: new ValueSetter(\n        result.value,\n        this.validate,\n        this.set,\n        this.priority,\n        this.subPriority,\n      ),\n      rest: result.rest,\n    };\n  }\n\n  validate(_utcDate, _value, _options) {\n    return true;\n  }\n}\n","export const numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n  millisecondsInSecond,\n} from \"../../constants.js\";\n\nimport { numericPatterns } from \"./constants.js\";\n\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest,\n  };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === \"Z\") {\n    return {\n      value: 0,\n      rest: dateString.slice(1),\n    };\n  }\n\n  const sign = matchResult[1] === \"+\" ? 1 : -1;\n  const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n  return {\n    value:\n      sign *\n      (hours * millisecondsInHour +\n        minutes * millisecondsInMinute +\n        seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case \"morning\":\n      return 4;\n    case \"evening\":\n      return 17;\n    case \"pm\":\n    case \"noon\":\n    case \"afternoon\":\n      return 12;\n    case \"am\":\n    case \"midnight\":\n    case \"night\":\n    default:\n      return 0;\n  }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  const isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n  let result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    const rangeEnd = absCurrentYear + 50;\n    const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n    const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (+_date >= +startOfNextYear) {\n    return year + 1;\n  } else if (+_date >= +startOfThisYear) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n  return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(options?.in || date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n  const date_ = toDate(date, options?.in);\n  const diff = getWeek(date_, options) - week;\n  date_.setDate(date_.getDate() - diff * 7);\n  return toDate(date_, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n  const year = getISOWeekYear(date, options);\n  const fourthOfJanuary = constructFrom(options?.in || date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week, options) {\n  const _date = toDate(date, options?.in);\n  const diff = getISOWeek(_date, options) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.js\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n  31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n  priority = 90;\n  subPriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"d\":\n        return parseNumericPattern(numericPatterns.date, dateString);\n      case \"do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    const month = date.getMonth();\n    if (isLeapYear) {\n      return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n    } else {\n      return value >= 1 && value <= DAYS_IN_MONTH[month];\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setDate(value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n  // If 0 days, no-op to avoid changing times in the hour before end of DST\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const date_ = toDate(date, options?.in);\n  const currentDay = date_.getDay();\n\n  const remainder = day % 7;\n  const dayIndex = (remainder + 7) % 7;\n\n  const delta = 7 - weekStartsOn;\n  const diff =\n    day < 0 || day > 6\n      ? day - ((currentDay + delta) % 7)\n      : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n  return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date, options) {\n  const day = toDate(date, options?.in).getDay();\n  return day === 0 ? 7 : day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day, options) {\n  const date_ = toDate(date, options?.in);\n  const currentDay = getISODay(date_, options);\n  const diff = day - currentDay;\n  return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nexport const parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser(),\n};\n","import { Parser } from \"../Parser.js\";\n\nexport class EraParser extends Parser {\n  priority = 140;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return (\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n\n      // A, B\n      case \"GGGGG\":\n        return match.era(dateString, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return (\n          match.era(dateString, { width: \"wide\" }) ||\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n    }\n  }\n\n  set(date, flags, value) {\n    flags.era = value;\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n  priority = 130;\n  incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"yy\",\n    });\n\n    switch (token) {\n      case \"y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value) {\n    const currentYear = date.getFullYear();\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(normalizedTwoDigitYear, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { getWeekYear } from \"../../../getWeekYear.js\";\n\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"YY\",\n    });\n\n    switch (token) {\n      case \"Y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"Yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value, options) {\n    const currentYear = getWeekYear(date, options);\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(\n        normalizedTwoDigitYear,\n        0,\n        options.firstWeekContainsDate,\n      );\n      date.setHours(0, 0, 0, 0);\n      return startOfWeek(date, options);\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, options.firstWeekContainsDate);\n    date.setHours(0, 0, 0, 0);\n    return startOfWeek(date, options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"R\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    const firstWeekOfYear = constructFrom(date, 0);\n    firstWeekOfYear.setFullYear(value, 0, 4);\n    firstWeekOfYear.setHours(0, 0, 0, 0);\n    return startOfISOWeek(firstWeekOfYear);\n  }\n\n  incompatibleTokens = [\n    \"G\",\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\nexport class ExtendedYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"u\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class QuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n      case \"QQ\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class StandAloneQuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n      case \"qq\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MonthParser extends Parser {\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"M\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"MM\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // J, F, ..., D\n      case \"MMMMM\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class StandAloneMonthParser extends Parser {\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"LL\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // J, F, ..., D\n      case \"LLLLL\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"w\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"wo\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value, options) {\n    return startOfWeek(setWeek(date, value, options), options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"I\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"Io\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value) {\n    return startOfISOWeek(setISOWeek(date, value));\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.js\";\n\nexport class DayOfYearParser extends Parser {\n  priority = 90;\n\n  subpriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"D\":\n      case \"DD\":\n        return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n      case \"Do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear) {\n      return value >= 1 && value <= 366;\n    } else {\n      return value >= 1 && value <= 365;\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(0, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\n// Day of week\nexport class DayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"EEEEE\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n  priority = 90;\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"e\":\n      case \"ee\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"eo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"eee\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"eeeee\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"eeee\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"c\":\n      case \"cc\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"co\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"ccc\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // T\n      case \"ccccc\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // Tuesday\n      case \"cccc\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => {\n      if (value === 0) {\n        return 7;\n      }\n      return value;\n    };\n\n    switch (token) {\n      // 2\n      case \"i\":\n      case \"ii\": // 02\n        return parseNDigits(token.length, dateString);\n      // 2nd\n      case \"io\":\n        return match.ordinalNumber(dateString, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // T\n      case \"iiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          }),\n          valueCallback,\n        );\n      // Tu\n      case \"iiiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // Tuesday\n      case \"iiii\":\n      default:\n        return mapValue(\n          match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"abbreviated\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 7;\n  }\n\n  set(date, _flags, value) {\n    date = setISODay(date, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n      case \"aaa\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"aaaaa\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMMidnightParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n      case \"bbb\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"bbbbb\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"BBBBB\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1to12Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"h\":\n        return parseNumericPattern(numericPatterns.hour12h, dateString);\n      case \"ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 12;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else if (!isPM && value === 12) {\n      date.setHours(0, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0to23Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"H\":\n        return parseNumericPattern(numericPatterns.hour23h, dateString);\n      case \"Ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 23;\n  }\n\n  set(date, _flags, value) {\n    date.setHours(value, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0To11Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"K\":\n        return parseNumericPattern(numericPatterns.hour11h, dateString);\n      case \"Ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1To24Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"k\":\n        return parseNumericPattern(numericPatterns.hour24h, dateString);\n      case \"ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 24;\n  }\n\n  set(date, _flags, value) {\n    const hours = value <= 24 ? value % 24 : value;\n    date.setHours(hours, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MinuteParser extends Parser {\n  priority = 60;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"m\":\n        return parseNumericPattern(numericPatterns.minute, dateString);\n      case \"mo\":\n        return match.ordinalNumber(dateString, { unit: \"minute\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setMinutes(value, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class SecondParser extends Parser {\n  priority = 50;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"s\":\n        return parseNumericPattern(numericPatterns.second, dateString);\n      case \"so\":\n        return match.ordinalNumber(dateString, { unit: \"second\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setSeconds(value, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\nexport class FractionOfSecondParser extends Parser {\n  priority = 30;\n\n  parse(dateString, token) {\n    const valueCallback = (value) =>\n      Math.trunc(value * Math.pow(10, -token.length + 3));\n    return mapValue(parseNDigits(token.length, dateString), valueCallback);\n  }\n\n  set(date, _flags, value) {\n    date.setMilliseconds(value);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"X\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"XX\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"XXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"XXXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"XXX\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"x\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"xx\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"xxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"xxxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"xxx\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampSecondsParser extends Parser {\n  priority = 40;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampMillisecondsParser extends Parser {\n  priority = 20;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n *    and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n  const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  if (!formatStr)\n    return dateStr ? invalidDate() : toDate(referenceDate, options?.in);\n\n  const subFnOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  // If timezone isn't specified, it will try to use the context or\n  // the reference date and fallback to the system time zone.\n  const setters = [new DateTimezoneSetter(options?.in, referenceDate)];\n\n  const tokens = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter in longFormatters) {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp);\n\n  const usedTokens = [];\n\n  for (let token of tokens) {\n    if (\n      !options?.useAdditionalWeekYearTokens &&\n      isProtectedWeekYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n    if (\n      !options?.useAdditionalDayOfYearTokens &&\n      isProtectedDayOfYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n\n    const firstCharacter = token[0];\n    const parser = parsers[firstCharacter];\n    if (parser) {\n      const { incompatibleTokens } = parser;\n      if (Array.isArray(incompatibleTokens)) {\n        const incompatibleToken = usedTokens.find(\n          (usedToken) =>\n            incompatibleTokens.includes(usedToken.token) ||\n            usedToken.token === firstCharacter,\n        );\n        if (incompatibleToken) {\n          throw new RangeError(\n            `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n          );\n        }\n      } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n        throw new RangeError(\n          `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n        );\n      }\n\n      usedTokens.push({ token: firstCharacter, fullToken: token });\n\n      const parseResult = parser.run(\n        dateStr,\n        token,\n        locale.match,\n        subFnOptions,\n      );\n\n      if (!parseResult) {\n        return invalidDate();\n      }\n\n      setters.push(parseResult.setter);\n\n      dateStr = parseResult.rest;\n    } else {\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\";\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token);\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateStr.indexOf(token) === 0) {\n        dateStr = dateStr.slice(token.length);\n      } else {\n        return invalidDate();\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n    return invalidDate();\n  }\n\n  const uniquePrioritySetters = setters\n    .map((setter) => setter.priority)\n    .sort((a, b) => b - a)\n    .filter((priority, index, array) => array.indexOf(priority) === index)\n    .map((priority) =>\n      setters\n        .filter((setter) => setter.priority === priority)\n        .sort((a, b) => b.subPriority - a.subPriority),\n    )\n    .map((setterArray) => setterArray[0]);\n\n  let date = toDate(referenceDate, options?.in);\n\n  if (isNaN(+date)) return invalidDate();\n\n  const flags = {};\n  for (const setter of uniquePrioritySetters) {\n    if (!setter.validate(date, subFnOptions)) {\n      return invalidDate();\n    }\n\n    const result = setter.set(date, flags, subFnOptions);\n    // Result is tuple (date, flags)\n    if (Array.isArray(result)) {\n      date = result[0];\n      Object.assign(flags, result[1]);\n      // Result is date\n    } else {\n      date = result;\n    }\n  }\n\n  return date;\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n  return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n  const normalize = constructFrom.bind(\n    null,\n    context || dates.find((date) => typeof date === \"object\"),\n  );\n  return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const laterStartOfDay = startOfDay(laterDate_);\n  const earlierStartOfDay = startOfDay(earlierDate_);\n\n  const laterTimestamp =\n    +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n  const earlierTimestamp =\n    +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setFullYear(date_.getFullYear(), 0, 1);\n  date_.setHours(0, 0, 0, 0);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","export function addLeadingZeros(number, targetLength) {\n  const sign = number < 0 ? \"-\" : \"\";\n  const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(+date / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    return addLeadingZeros(+date, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date, options?.in);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setHours} function options.\n */\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param hours - The hours of the new date\n * @param options - An object with options\n *\n * @returns The new date with the hours set\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport function setHours(date, hours, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(hours);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMinutes} function options.\n */\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, returned from the context function, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param minutes - The minutes of the new date\n * @param options - An object with options\n *\n * @returns The new date with the minutes set\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport function setMinutes(date, minutes, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setMinutes(minutes);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default setMinutes;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setSeconds} function options.\n */\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date, with context support.\n *\n * @description\n * Set the seconds to the given date, with an optional context for time zone specification.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param seconds - The seconds of the new date\n * @param options - An object with options\n *\n * @returns The new date with the seconds set\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport function setSeconds(date, seconds, options) {\n  const _date = toDate(date, options?.in);\n  _date.setSeconds(seconds);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setSeconds;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setDate(1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3);\n  _date.setMonth(month, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const month = _date.getMonth();\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameYear} function options.\n */\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return laterDate_.getFullYear() === earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return (\n    laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n    laterDate_.getMonth() === earlierDate_.getMonth()\n  );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfQuarter } from \"./startOfQuarter.js\";\n\n/**\n * The {@link isSameQuarter} function options.\n */\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same quarter (and year)?\n *\n * @description\n * Are the given dates in the same quarter (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same quarter (and year)\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport function isSameQuarter(laterDate, earlierDate, options) {\n  const [dateLeft_, dateRight_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return +startOfQuarter(dateLeft_) === +startOfQuarter(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameQuarter;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n  const [dateLeft_, dateRight_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The dates are equal\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport function isEqual(leftDate, rightDate) {\n  return +toDate(leftDate) === +toDate(rightDate);\n}\n\n// Fallback for modularized imports:\nexport default isEqual;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link isWithinInterval} function options.\n */\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param date - The date to check\n * @param interval - The interval to check\n * @param options - An object with options\n *\n * @returns The date is within the interval\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * // => true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * // => false\n *\n * @example\n * // For date equal to the interval start:\n * isWithinInterval(date, { start, end: date })\n * // => true\n *\n * @example\n * // For date equal to the interval end:\n * isWithinInterval(date, { start: date, end })\n * // => true\n */\nexport function isWithinInterval(date, interval, options) {\n  const time = +toDate(date, options?.in);\n  const [startTime, endTime] = [\n    +toDate(interval.start, options?.in),\n    +toDate(interval.end, options?.in),\n  ].sort((a, b) => a - b);\n\n  return time >= startTime && time <= endTime;\n}\n\n// Fallback for modularized imports:\nexport default isWithinInterval;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDaysInMonth} function options.\n */\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date, considering the context if provided.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport function getDaysInMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const monthIndex = _date.getMonth();\n  const lastDayOfMonth = constructFrom(_date, 0);\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n  lastDayOfMonth.setHours(0, 0, 0, 0);\n  return lastDayOfMonth.getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDaysInMonth;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getDaysInMonth } from \"./getDaysInMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMonth} function options.\n */\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param month - The month index to set (0-11)\n * @param options - The options\n *\n * @returns The new date with the month set\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport function setMonth(date, month, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const day = _date.getDate();\n\n  const midMonth = constructFrom(options?.in || date, 0);\n  midMonth.setFullYear(year, month, 15);\n  midMonth.setHours(0, 0, 0, 0);\n  const daysInMonth = getDaysInMonth(midMonth);\n\n  // Set the earlier date, allows to wrap Jan 31 to Feb 28\n  _date.setMonth(month, Math.min(day, daysInMonth));\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setMonth;\n","import { setMonth } from \"./setMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setQuarter} function options.\n */\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param quarter - The quarter of the new date\n * @param options - The options\n *\n * @returns The new date with the quarter set\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * const result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport function setQuarter(date, quarter, options) {\n  const date_ = toDate(date, options?.in);\n  const oldQuarter = Math.trunc(date_.getMonth() / 3) + 1;\n  const diff = quarter - oldQuarter;\n  return setMonth(date_, date_.getMonth() + diff * 3);\n}\n\n// Fallback for modularized imports:\nexport default setQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getYear} function options.\n */\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The year\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport function getYear(date, options) {\n  return toDate(date, options?.in).getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default getYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getMonth} function options.\n */\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The month index (0-11)\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport function getMonth(date, options) {\n  return toDate(date, options?.in).getMonth();\n}\n\n// Fallback for modularized imports:\nexport default getMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  _date.setFullYear(year + 1, 0, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getQuarter} function options.\n */\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The quarter\n *\n * @example\n * // Which quarter is 2 July 2014?\n * const result = getQuarter(new Date(2014, 6, 2));\n * //=> 3\n */\nexport function getQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const quarter = Math.trunc(_date.getMonth() / 3) + 1;\n  return quarter;\n}\n\n// Fallback for modularized imports:\nexport default getQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getHours} function options.\n */\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The hours\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport function getHours(date, options) {\n  return toDate(date, options?.in).getHours();\n}\n\n// Fallback for modularized imports:\nexport default getHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getMinutes} function options.\n */\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The minutes\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport function getMinutes(date, options) {\n  return toDate(date, options?.in).getMinutes();\n}\n\n// Fallback for modularized imports:\nexport default getMinutes;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param date - The given date\n *\n * @returns The seconds\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport function getSeconds(date) {\n  return toDate(date).getSeconds();\n}\n\n// Fallback for modularized imports:\nexport default getSeconds;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  const dayOfMonth = _date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  const daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(\n      endOfDesiredMonth.getFullYear(),\n      endOfDesiredMonth.getMonth(),\n      dayOfMonth,\n    );\n    return _date;\n  }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n  return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n  return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addQuarters} function options.\n */\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n * @param options - An object with options\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=; Mon Dec 01 2014 00:00:00\n */\nexport function addQuarters(date, amount, options) {\n  return addMonths(date, amount * 3, options);\n}\n\n// Fallback for modularized imports:\nexport default addQuarters;\n","import { addQuarters } from \"./addQuarters.js\";\n\n/**\n * The {@link subQuarters} function options.\n */\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the quarters subtracted\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * const result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport function subQuarters(date, amount, options) {\n  return addQuarters(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subQuarters;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { getQuarter } from \"./getQuarter.js\";\n\n/**\n * The {@link differenceInCalendarQuarters} function options.\n */\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar quarters\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport function differenceInCalendarQuarters(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  const quartersDiff = getQuarter(laterDate_) - getQuarter(earlierDate_);\n\n  return yearsDiff * 4 + quartersDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarQuarters;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n  return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { addYears } from \"./addYears.js\";\n\n/**\n * The {@link subYears} function options.\n */\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the years subtracted\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport function subYears(date, amount, options) {\n  return addYears(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subYears;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * );\n * //=> 2\n */\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return laterDate_.getFullYear() - earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link min} function options.\n */\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dates - The dates to compare\n *\n * @returns The earliest of the dates\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport function min(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result > date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default min;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link max} function options.\n */\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dates - The dates to compare\n *\n * @returns The latest of the dates\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport function max(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result < date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default max;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n  return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n  return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n  return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n  return +toDate(date) > +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDay} function options.\n */\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of week, 0 represents Sunday\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport function getDay(date, options) {\n  return toDate(date, options?.in).getDay();\n}\n\n// Fallback for modularized imports:\nexport default getDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDate} function options.\n */\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The day of month\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport function getDate(date, options) {\n  return toDate(date, options?.in).getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDate;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n  return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport function getTime(date) {\n  return +toDate(date);\n}\n\n// Fallback for modularized imports:\nexport default getTime;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setYear} function options.\n */\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param year - The year of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the year set\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport function setYear(date, year, options) {\n  const date_ = toDate(date, options?.in);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);\n\n  date_.setFullYear(year);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default setYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\n\n/**\n * The {@link differenceInDays} function options.\n */\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n * //=> 92\n */\nexport function differenceInDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const sign = compareLocalAsc(laterDate_, earlierDate_);\n  const difference = Math.abs(\n    differenceInCalendarDays(laterDate_, earlierDate_),\n  );\n\n  laterDate_.setDate(laterDate_.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  const isLastDayNotFull = Number(\n    compareLocalAsc(laterDate_, earlierDate_) === -sign,\n  );\n\n  const result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}\n\n// Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(laterDate, earlierDate) {\n  const diff =\n    laterDate.getFullYear() - earlierDate.getFullYear() ||\n    laterDate.getMonth() - earlierDate.getMonth() ||\n    laterDate.getDate() - earlierDate.getDate() ||\n    laterDate.getHours() - earlierDate.getHours() ||\n    laterDate.getMinutes() - earlierDate.getMinutes() ||\n    laterDate.getSeconds() - earlierDate.getSeconds() ||\n    laterDate.getMilliseconds() - earlierDate.getMilliseconds();\n\n  if (diff < 0) return -1;\n  if (diff > 0) return 1;\n\n  // Return 0 if diff is 0; return NaN if diff is NaN\n  return diff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInDays;\n","import { addWeeks } from \"./addWeeks.js\";\n\n/**\n * The {@link subWeeks} function options.\n */\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport function subWeeks(date, amount, options) {\n  return addWeeks(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subWeeks;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n  return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport { floor } from '@floating-ui/utils';\nimport { tabbable } from 'tabbable';\n\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n  const uaData = navigator.userAgentData;\n  if (uaData != null && uaData.platform) {\n    return uaData.platform;\n  }\n  return navigator.platform;\n}\nfunction getUserAgent() {\n  const uaData = navigator.userAgentData;\n  if (uaData && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(_ref => {\n      let {\n        brand,\n        version\n      } = _ref;\n      return brand + \"/\" + version;\n    }).join(' ');\n  }\n  return navigator.userAgent;\n}\nfunction isSafari() {\n  // Chrome DevTools does not complain about navigator.vendor\n  return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n  const re = /android/i;\n  return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n  return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n  return getUserAgent().includes('jsdom/');\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction activeElement(doc) {\n  let activeElement = doc.activeElement;\n  while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n    var _activeElement;\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n  return activeElement;\n}\nfunction contains(parent, child) {\n  if (!parent || !child) {\n    return false;\n  }\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n\n  // then fallback to custom implementation with Shadow DOM support\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) {\n        return true;\n      }\n      // @ts-ignore\n      next = next.parentNode || next.host;\n    }\n  }\n\n  // Give up, the result is false\n  return false;\n}\nfunction getTarget(event) {\n  if ('composedPath' in event) {\n    return event.composedPath()[0];\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support\n  // `composedPath()`, but browsers without shadow DOM don't.\n  return event.target;\n}\nfunction isEventTargetWithin(event, node) {\n  if (node == null) {\n    return false;\n  }\n  if ('composedPath' in event) {\n    return event.composedPath().includes(node);\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n  const e = event;\n  return e.target != null && node.contains(e.target);\n}\nfunction isRootElement(element) {\n  return element.matches('html,body');\n}\nfunction getDocument(node) {\n  return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isTypeableElement(element) {\n  return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n  if (!element) return false;\n  return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nfunction matchesFocusVisible(element) {\n  // We don't want to block focus from working with `visibleOnly`\n  // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n  if (!element || isJSDOM()) return true;\n  try {\n    return element.matches(':focus-visible');\n  } catch (_e) {\n    return true;\n  }\n}\nfunction getFloatingFocusElement(floatingElement) {\n  if (!floatingElement) {\n    return null;\n  }\n  // Try to find the element that has `{...getFloatingProps()}` spread on it.\n  // This indicates the floating element is acting as a positioning wrapper, and\n  // so focus should be managed on the child element with the event handlers and\n  // aria props.\n  return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n  if (onlyOpenChildren === void 0) {\n    onlyOpenChildren = true;\n  }\n  let allChildren = nodes.filter(node => {\n    var _node$context;\n    return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n  });\n  let currentChildren = allChildren;\n  while (currentChildren.length) {\n    currentChildren = onlyOpenChildren ? nodes.filter(node => {\n      var _currentChildren;\n      return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n        var _node$context2;\n        return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n      });\n    }) : nodes;\n    allChildren = allChildren.concat(currentChildren);\n  }\n  return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n  let deepestNodeId;\n  let maxDepth = -1;\n  function findDeepest(nodeId, depth) {\n    if (depth > maxDepth) {\n      deepestNodeId = nodeId;\n      maxDepth = depth;\n    }\n    const children = getNodeChildren(nodes, nodeId);\n    children.forEach(child => {\n      findDeepest(child.id, depth + 1);\n    });\n  }\n  findDeepest(id, 0);\n  return nodes.find(node => node.id === deepestNodeId);\n}\nfunction getNodeAncestors(nodes, id) {\n  var _nodes$find;\n  let allAncestors = [];\n  let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n  while (currentParentId) {\n    const currentNode = nodes.find(node => node.id === currentParentId);\n    currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n    if (currentNode) {\n      allAncestors = allAncestors.concat(currentNode);\n    }\n  }\n  return allAncestors;\n}\n\nfunction stopEvent(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction isReactEvent(event) {\n  return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n  // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n  // Try to find a workaround for this. `react-aria` source still has the check.\n  if (event.mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n  if (isAndroid() && event.pointerType) {\n    return event.type === 'click' && event.buttons === 1;\n  }\n  return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n  if (isJSDOM()) return false;\n  return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n  // iOS VoiceOver returns 0.333• for width/height.\n  event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n  // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n  // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n  const values = ['mouse', 'pen'];\n  if (!strict) {\n    values.push('', undefined);\n  }\n  return values.includes(pointerType);\n}\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n  ...React\n};\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n  const ref = React.useRef(() => {\n    if (process.env.NODE_ENV !== \"production\") {\n      throw new Error('Cannot call an event handler while rendering.');\n    }\n  });\n  useSafeInsertionEffect(() => {\n    ref.current = callback;\n  });\n  return React.useCallback(function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return ref.current == null ? void 0 : ref.current(...args);\n  }, []);\n}\n\nfunction isDifferentGridRow(index, cols, prevRow) {\n  return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n  return index < 0 || index >= listRef.current.length;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n  return findNonDisabledListIndex(listRef, {\n    disabledIndices\n  });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n  return findNonDisabledListIndex(listRef, {\n    decrement: true,\n    startingIndex: listRef.current.length,\n    disabledIndices\n  });\n}\nfunction findNonDisabledListIndex(listRef, _temp) {\n  let {\n    startingIndex = -1,\n    decrement = false,\n    disabledIndices,\n    amount = 1\n  } = _temp === void 0 ? {} : _temp;\n  let index = startingIndex;\n  do {\n    index += decrement ? -amount : amount;\n  } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n  return index;\n}\nfunction getGridNavigatedIndex(listRef, _ref) {\n  let {\n    event,\n    orientation,\n    loop,\n    rtl,\n    cols,\n    disabledIndices,\n    minIndex,\n    maxIndex,\n    prevIndex,\n    stopEvent: stop = false\n  } = _ref;\n  let nextIndex = prevIndex;\n  if (event.key === ARROW_UP) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = maxIndex;\n    } else {\n      nextIndex = findNonDisabledListIndex(listRef, {\n        startingIndex: nextIndex,\n        amount: cols,\n        decrement: true,\n        disabledIndices\n      });\n      if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n        const col = prevIndex % cols;\n        const maxCol = maxIndex % cols;\n        const offset = maxIndex - (maxCol - col);\n        if (maxCol === col) {\n          nextIndex = maxIndex;\n        } else {\n          nextIndex = maxCol > col ? offset : offset - cols;\n        }\n      }\n    }\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n  if (event.key === ARROW_DOWN) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = minIndex;\n    } else {\n      nextIndex = findNonDisabledListIndex(listRef, {\n        startingIndex: prevIndex,\n        amount: cols,\n        disabledIndices\n      });\n      if (loop && prevIndex + cols > maxIndex) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex % cols - cols,\n          amount: cols,\n          disabledIndices\n        });\n      }\n    }\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n\n  // Remains on the same row/column.\n  if (orientation === 'both') {\n    const prevRow = floor(prevIndex / cols);\n    if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== cols - 1) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex,\n          disabledIndices\n        });\n        if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledListIndex(listRef, {\n            startingIndex: prevIndex - prevIndex % cols - 1,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      }\n      if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== 0) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex,\n          decrement: true,\n          disabledIndices\n        });\n        if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledListIndex(listRef, {\n            startingIndex: prevIndex + (cols - prevIndex % cols),\n            decrement: true,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex + (cols - prevIndex % cols),\n          decrement: true,\n          disabledIndices\n        });\n      }\n      if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    const lastRow = floor(maxIndex / cols) === prevRow;\n    if (isIndexOutOfListBounds(listRef, nextIndex)) {\n      if (loop && lastRow) {\n        nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(listRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      } else {\n        nextIndex = prevIndex;\n      }\n    }\n  }\n  return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction createGridCellMap(sizes, cols, dense) {\n  const cellMap = [];\n  let startIndex = 0;\n  sizes.forEach((_ref2, index) => {\n    let {\n      width,\n      height\n    } = _ref2;\n    if (width > cols) {\n      if (process.env.NODE_ENV !== \"production\") {\n        throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n      }\n    }\n    let itemPlaced = false;\n    if (dense) {\n      startIndex = 0;\n    }\n    while (!itemPlaced) {\n      const targetCells = [];\n      for (let i = 0; i < width; i++) {\n        for (let j = 0; j < height; j++) {\n          targetCells.push(startIndex + i + j * cols);\n        }\n      }\n      if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n        targetCells.forEach(cell => {\n          cellMap[cell] = index;\n        });\n        itemPlaced = true;\n      } else {\n        startIndex++;\n      }\n    }\n  });\n\n  // convert into a non-sparse array\n  return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n  if (index === -1) return -1;\n  const firstCellIndex = cellMap.indexOf(index);\n  const sizeItem = sizes[index];\n  switch (corner) {\n    case 'tl':\n      return firstCellIndex;\n    case 'tr':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + sizeItem.width - 1;\n    case 'bl':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + (sizeItem.height - 1) * cols;\n    case 'br':\n      return cellMap.lastIndexOf(index);\n  }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getGridCellIndices(indices, cellMap) {\n  return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n  if (disabledIndices) {\n    return disabledIndices.includes(index);\n  }\n  const element = listRef.current[index];\n  return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nconst getTabbableOptions = () => ({\n  getShadowRoot: true,\n  displayCheck:\n  // JSDOM does not support the `tabbable` library. To solve this we can\n  // check if `ResizeObserver` is a real function (not polyfilled), which\n  // determines if the current environment is JSDOM-like.\n  typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, dir) {\n  const list = tabbable(container, getTabbableOptions());\n  const len = list.length;\n  if (len === 0) return;\n  const active = activeElement(getDocument(container));\n  const index = list.indexOf(active);\n  const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n  return list[nextIndex];\n}\nfunction getNextTabbable(referenceElement) {\n  return getTabbableIn(getDocument(referenceElement).body, 1) || referenceElement;\n}\nfunction getPreviousTabbable(referenceElement) {\n  return getTabbableIn(getDocument(referenceElement).body, -1) || referenceElement;\n}\nfunction isOutsideEvent(event, container) {\n  const containerElement = container || event.currentTarget;\n  const relatedTarget = event.relatedTarget;\n  return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n  const tabbableElements = tabbable(container, getTabbableOptions());\n  tabbableElements.forEach(element => {\n    element.dataset.tabindex = element.getAttribute('tabindex') || '';\n    element.setAttribute('tabindex', '-1');\n  });\n}\nfunction enableFocusInside(container) {\n  const elements = container.querySelectorAll('[data-tabindex]');\n  elements.forEach(element => {\n    const tabindex = element.dataset.tabindex;\n    delete element.dataset.tabindex;\n    if (tabindex) {\n      element.setAttribute('tabindex', tabindex);\n    } else {\n      element.removeAttribute('tabindex');\n    }\n  });\n}\n\nexport { activeElement, contains, createGridCellMap, disableFocusInside, enableFocusInside, findNonDisabledListIndex, getDeepestNode, getDocument, getFloatingFocusElement, getGridCellIndexOfCorner, getGridCellIndices, getGridNavigatedIndex, getMaxListIndex, getMinListIndex, getNextTabbable, getNodeAncestors, getNodeChildren, getPlatform, getPreviousTabbable, getTabbableOptions, getTarget, getUserAgent, isAndroid, isDifferentGridRow, isEventTargetWithin, isIndexOutOfListBounds, isJSDOM, isListIndexDisabled, isMac, isMouseLikePointerType, isOutsideEvent, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, matchesFocusVisible, stopEvent, useEffectEvent, useLatestRef, index as useModernLayoutEffect };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          var _overflowsData$;\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;\n          if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n  if (ignoreScrollbarX === void 0) {\n    ignoreScrollbarX = false;\n  }\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n  // RTL <body> scrollbar.\n  getWindowScrollBarX(documentElement, htmlRect));\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, offset as offset$1, shift as shift$1, limitShift as limitShift$1, flip as flip$1, size as size$1, autoPlacement as autoPlacement$1, hide as hide$1, inline as inline$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useModernLayoutEffect, useEffectEvent, getMinListIndex, getMaxListIndex, createGridCellMap, isListIndexDisabled, getGridNavigatedIndex, getGridCellIndexOfCorner, getGridCellIndices, findNonDisabledListIndex, isIndexOutOfListBounds, useLatestRef, getDocument as getDocument$1, isMouseLikePointerType, contains as contains$1, isSafari, enableFocusInside, isOutsideEvent, getPreviousTabbable, getNextTabbable, disableFocusInside, isTypeableCombobox, getFloatingFocusElement, getTabbableOptions, getNodeAncestors, activeElement, getNodeChildren as getNodeChildren$1, stopEvent, getTarget as getTarget$1, isVirtualClick, isVirtualPointerEvent, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, matchesFocusVisible, isMac, getDeepestNode, getUserAgent } from '@floating-ui/react/utils';\nimport { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { getComputedStyle, isElement, isShadowRoot, getNodeName, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable, focusable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset, detectOverflow } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\nimport { evaluate, max, round, min } from '@floating-ui/utils';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n  const cleanupRef = React.useRef(undefined);\n  const refEffect = React.useCallback(instance => {\n    const cleanups = refs.map(ref => {\n      if (ref == null) {\n        return;\n      }\n      if (typeof ref === 'function') {\n        const refCallback = ref;\n        const refCleanup = refCallback(instance);\n        return typeof refCleanup === 'function' ? refCleanup : () => {\n          refCallback(null);\n        };\n      }\n      ref.current = instance;\n      return () => {\n        ref.current = null;\n      };\n    });\n    return () => {\n      cleanups.forEach(refCleanup => refCleanup == null ? void 0 : refCleanup());\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return value => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = undefined;\n      }\n      if (value != null) {\n        cleanupRef.current = refEffect(value);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}\n\nfunction sortByDocumentPosition(a, b) {\n  const position = a.compareDocumentPosition(b);\n  if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n    return -1;\n  }\n  if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n    return 1;\n  }\n  return 0;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n  register: () => {},\n  unregister: () => {},\n  map: /*#__PURE__*/new Map(),\n  elementsRef: {\n    current: []\n  }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n  const {\n    children,\n    elementsRef,\n    labelsRef\n  } = props;\n  const [nodes, setNodes] = React.useState(() => new Set());\n  const register = React.useCallback(node => {\n    setNodes(prevSet => new Set(prevSet).add(node));\n  }, []);\n  const unregister = React.useCallback(node => {\n    setNodes(prevSet => {\n      const set = new Set(prevSet);\n      set.delete(node);\n      return set;\n    });\n  }, []);\n  const map = React.useMemo(() => {\n    const newMap = new Map();\n    const sortedNodes = Array.from(nodes.keys()).sort(sortByDocumentPosition);\n    sortedNodes.forEach((node, index) => {\n      newMap.set(node, index);\n    });\n    return newMap;\n  }, [nodes]);\n  return /*#__PURE__*/jsx(FloatingListContext.Provider, {\n    value: React.useMemo(() => ({\n      register,\n      unregister,\n      map,\n      elementsRef,\n      labelsRef\n    }), [register, unregister, map, elementsRef, labelsRef]),\n    children: children\n  });\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    label\n  } = props;\n  const {\n    register,\n    unregister,\n    map,\n    elementsRef,\n    labelsRef\n  } = React.useContext(FloatingListContext);\n  const [index, setIndex] = React.useState(null);\n  const componentRef = React.useRef(null);\n  const ref = React.useCallback(node => {\n    componentRef.current = node;\n    if (index !== null) {\n      elementsRef.current[index] = node;\n      if (labelsRef) {\n        var _node$textContent;\n        const isLabelDefined = label !== undefined;\n        labelsRef.current[index] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n      }\n    }\n  }, [index, elementsRef, labelsRef, label]);\n  useModernLayoutEffect(() => {\n    const node = componentRef.current;\n    if (node) {\n      register(node);\n      return () => {\n        unregister(node);\n      };\n    }\n  }, [register, unregister]);\n  useModernLayoutEffect(() => {\n    const index = componentRef.current ? map.get(componentRef.current) : null;\n    if (index != null) {\n      setIndex(index);\n    }\n  }, [map]);\n  return React.useMemo(() => ({\n    ref,\n    index: index == null ? -1 : index\n  }), [index, ref]);\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction renderJsx(render, computedProps) {\n  if (typeof render === 'function') {\n    return render(computedProps);\n  }\n  if (render) {\n    return /*#__PURE__*/React.cloneElement(render, computedProps);\n  }\n  return /*#__PURE__*/jsx(\"div\", {\n    ...computedProps\n  });\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n  activeIndex: 0,\n  onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n  const {\n    render,\n    orientation = 'both',\n    loop = true,\n    rtl = false,\n    cols = 1,\n    disabledIndices,\n    activeIndex: externalActiveIndex,\n    onNavigate: externalSetActiveIndex,\n    itemSizes,\n    dense = false,\n    ...domProps\n  } = props;\n  const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n  const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n  const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n  const elementsRef = React.useRef([]);\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const contextValue = React.useMemo(() => ({\n    activeIndex,\n    onNavigate\n  }), [activeIndex, onNavigate]);\n  const isGrid = cols > 1;\n  function handleKeyDown(event) {\n    if (!allKeys.includes(event.key)) return;\n    let nextIndex = activeIndex;\n    const minIndex = getMinListIndex(elementsRef, disabledIndices);\n    const maxIndex = getMaxListIndex(elementsRef, disabledIndices);\n    const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n    const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n    if (isGrid) {\n      const sizes = itemSizes || Array.from({\n        length: elementsRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = createGridCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const maybeNextIndex = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getGridCellIndices([...(disabledIndices || elementsRef.current.map((_, index) => isListIndexDisabled(elementsRef, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getGridCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction we're\n        // moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n      })];\n      if (maybeNextIndex != null) {\n        nextIndex = maybeNextIndex;\n      }\n    }\n    const toEndKeys = {\n      horizontal: [horizontalEndKey],\n      vertical: [ARROW_DOWN],\n      both: [horizontalEndKey, ARROW_DOWN]\n    }[orientation];\n    const toStartKeys = {\n      horizontal: [horizontalStartKey],\n      vertical: [ARROW_UP],\n      both: [horizontalStartKey, ARROW_UP]\n    }[orientation];\n    const preventedKeys = isGrid ? allKeys : {\n      horizontal: horizontalKeys,\n      vertical: verticalKeys,\n      both: allKeys\n    }[orientation];\n    if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n      if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n        nextIndex = minIndex;\n      } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n        nextIndex = maxIndex;\n      } else {\n        nextIndex = findNonDisabledListIndex(elementsRef, {\n          startingIndex: nextIndex,\n          decrement: toStartKeys.includes(event.key),\n          disabledIndices\n        });\n      }\n    }\n    if (nextIndex !== activeIndex && !isIndexOutOfListBounds(elementsRef, nextIndex)) {\n      var _elementsRef$current$;\n      event.stopPropagation();\n      if (preventedKeys.includes(event.key)) {\n        event.preventDefault();\n      }\n      onNavigate(nextIndex);\n      (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n    }\n  }\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: forwardedRef,\n    'aria-orientation': orientation === 'both' ? undefined : orientation,\n    onKeyDown(e) {\n      domProps.onKeyDown == null || domProps.onKeyDown(e);\n      renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n      handleKeyDown(e);\n    }\n  };\n  return /*#__PURE__*/jsx(CompositeContext.Provider, {\n    value: contextValue,\n    children: /*#__PURE__*/jsx(FloatingList, {\n      elementsRef: elementsRef,\n      children: renderJsx(render, computedProps)\n    })\n  });\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n  const {\n    render,\n    ...domProps\n  } = props;\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const {\n    activeIndex,\n    onNavigate\n  } = React.useContext(CompositeContext);\n  const {\n    ref,\n    index\n  } = useListItem();\n  const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n  const isActive = activeIndex === index;\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: mergedRef,\n    tabIndex: isActive ? 0 : -1,\n    'data-active': isActive ? '' : undefined,\n    onFocus(e) {\n      domProps.onFocus == null || domProps.onFocus(e);\n      renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n      onNavigate(index);\n    }\n  };\n  return renderJsx(render, computedProps);\n});\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n  ...React\n};\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n  const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n  useModernLayoutEffect(() => {\n    if (id == null) {\n      setId(genId());\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  React.useEffect(() => {\n    serverHandoffComplete = true;\n  }, []);\n  return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n  devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n  var _devMessageSet;\n  for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n    messages[_key] = arguments[_key];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n    var _devMessageSet2;\n    (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n    console.warn(message);\n  }\n}\nfunction error() {\n  var _devMessageSet3;\n  for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    messages[_key2] = arguments[_key2];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n    var _devMessageSet4;\n    (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n    console.error(message);\n  }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n  const {\n    context: {\n      placement,\n      elements: {\n        floating\n      },\n      middlewareData: {\n        arrow,\n        shift\n      }\n    },\n    width = 14,\n    height = 7,\n    tipRadius = 0,\n    strokeWidth = 0,\n    staticOffset,\n    stroke,\n    d,\n    style: {\n      transform,\n      ...restStyle\n    } = {},\n    ...rest\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!ref) {\n      warn('The `ref` prop is required for `FloatingArrow`.');\n    }\n  }\n  const clipPathId = useId();\n  const [isRTL, setIsRTL] = React.useState(false);\n\n  // https://github.com/floating-ui/floating-ui/issues/2932\n  useModernLayoutEffect(() => {\n    if (!floating) return;\n    const isRTL = getComputedStyle(floating).direction === 'rtl';\n    if (isRTL) {\n      setIsRTL(true);\n    }\n  }, [floating]);\n  if (!floating) {\n    return null;\n  }\n  const [side, alignment] = placement.split('-');\n  const isVerticalSide = side === 'top' || side === 'bottom';\n  let computedStaticOffset = staticOffset;\n  if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n    computedStaticOffset = null;\n  }\n\n  // Strokes must be double the border width, this ensures the stroke's width\n  // works as you'd expect.\n  const computedStrokeWidth = strokeWidth * 2;\n  const halfStrokeWidth = computedStrokeWidth / 2;\n  const svgX = width / 2 * (tipRadius / -8 + 1);\n  const svgY = height / 2 * tipRadius / 4;\n  const isCustomShape = !!d;\n  const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n  let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n  if (computedStaticOffset && isRTL) {\n    xOffsetProp = alignment === 'end' ? 'left' : 'right';\n  }\n  const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n  const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n  const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n  const rotation = {\n    top: isCustomShape ? 'rotate(180deg)' : '',\n    left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n    bottom: isCustomShape ? '' : 'rotate(180deg)',\n    right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n  }[side];\n  return /*#__PURE__*/jsxs(\"svg\", {\n    ...rest,\n    \"aria-hidden\": true,\n    ref: ref,\n    width: isCustomShape ? width : width + computedStrokeWidth,\n    height: width,\n    viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n    style: {\n      position: 'absolute',\n      pointerEvents: 'none',\n      [xOffsetProp]: arrowX,\n      [yOffsetProp]: arrowY,\n      [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n      transform: [rotation, transform].filter(t => !!t).join(' '),\n      ...restStyle\n    },\n    children: [computedStrokeWidth > 0 && /*#__PURE__*/jsx(\"path\", {\n      clipPath: \"url(#\" + clipPathId + \")\",\n      fill: \"none\",\n      stroke: stroke\n      // Account for the stroke on the fill path rendered below.\n      ,\n      strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n      d: dValue\n    }), /*#__PURE__*/jsx(\"path\", {\n      stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n      d: dValue\n    }), /*#__PURE__*/jsx(\"clipPath\", {\n      id: clipPathId,\n      children: /*#__PURE__*/jsx(\"rect\", {\n        x: -halfStrokeWidth,\n        y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n        width: width + computedStrokeWidth,\n        height: width\n      })\n    })]\n  });\n});\n\nfunction createEventEmitter() {\n  const map = new Map();\n  return {\n    emit(event, data) {\n      var _map$get;\n      (_map$get = map.get(event)) == null || _map$get.forEach(listener => listener(data));\n    },\n    on(event, listener) {\n      if (!map.has(event)) {\n        map.set(event, new Set());\n      }\n      map.get(event).add(listener);\n    },\n    off(event, listener) {\n      var _map$get2;\n      (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);\n    }\n  };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n  var _React$useContext;\n  return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n  const id = useId();\n  const tree = useFloatingTree();\n  const reactParentId = useFloatingParentNodeId();\n  const parentId = customParentId || reactParentId;\n  useModernLayoutEffect(() => {\n    if (!id) return;\n    const node = {\n      id,\n      parentId\n    };\n    tree == null || tree.addNode(node);\n    return () => {\n      tree == null || tree.removeNode(node);\n    };\n  }, [tree, id, parentId]);\n  return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n  const {\n    children,\n    id\n  } = props;\n  const parentId = useFloatingParentNodeId();\n  return /*#__PURE__*/jsx(FloatingNodeContext.Provider, {\n    value: React.useMemo(() => ({\n      id,\n      parentId\n    }), [id, parentId]),\n    children: children\n  });\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n  const {\n    children\n  } = props;\n  const nodesRef = React.useRef([]);\n  const addNode = React.useCallback(node => {\n    nodesRef.current = [...nodesRef.current, node];\n  }, []);\n  const removeNode = React.useCallback(node => {\n    nodesRef.current = nodesRef.current.filter(n => n !== node);\n  }, []);\n  const [events] = React.useState(() => createEventEmitter());\n  return /*#__PURE__*/jsx(FloatingTreeContext.Provider, {\n    value: React.useMemo(() => ({\n      nodesRef,\n      addNode,\n      removeNode,\n      events\n    }), [addNode, removeNode, events]),\n    children: children\n  });\n}\n\nfunction createAttribute(name) {\n  return \"data-floating-ui-\" + name;\n}\n\nfunction clearTimeoutIfSet(timeoutRef) {\n  if (timeoutRef.current !== -1) {\n    clearTimeout(timeoutRef.current);\n    timeoutRef.current = -1;\n  }\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n  if (pointerType && !isMouseLikePointerType(pointerType)) {\n    return 0;\n  }\n  if (typeof value === 'number') {\n    return value;\n  }\n  if (typeof value === 'function') {\n    const result = value();\n    if (typeof result === 'number') {\n      return result;\n    }\n    return result == null ? void 0 : result[prop];\n  }\n  return value == null ? void 0 : value[prop];\n}\nfunction getRestMs(value) {\n  if (typeof value === 'function') {\n    return value();\n  }\n  return value;\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    events,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    delay = 0,\n    handleClose = null,\n    mouseOnly = false,\n    restMs = 0,\n    move = true\n  } = props;\n  const tree = useFloatingTree();\n  const parentId = useFloatingParentNodeId();\n  const handleCloseRef = useLatestRef(handleClose);\n  const delayRef = useLatestRef(delay);\n  const openRef = useLatestRef(open);\n  const restMsRef = useLatestRef(restMs);\n  const pointerTypeRef = React.useRef();\n  const timeoutRef = React.useRef(-1);\n  const handlerRef = React.useRef();\n  const restTimeoutRef = React.useRef(-1);\n  const blockMouseMoveRef = React.useRef(true);\n  const performedPointerEventsMutationRef = React.useRef(false);\n  const unbindMouseMoveRef = React.useRef(() => {});\n  const restTimeoutPendingRef = React.useRef(false);\n  const isHoverOpen = React.useCallback(() => {\n    var _dataRef$current$open;\n    const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n    return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n  }, [dataRef]);\n\n  // When closing before opening, clear the delay timeouts to cancel it\n  // from showing.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        open\n      } = _ref;\n      if (!open) {\n        clearTimeoutIfSet(timeoutRef);\n        clearTimeoutIfSet(restTimeoutRef);\n        blockMouseMoveRef.current = true;\n        restTimeoutPendingRef.current = false;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [enabled, events]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    if (!handleCloseRef.current) return;\n    if (!open) return;\n    function onLeave(event) {\n      if (isHoverOpen()) {\n        onOpenChange(false, event, 'hover');\n      }\n    }\n    const html = getDocument$1(elements.floating).documentElement;\n    html.addEventListener('mouseleave', onLeave);\n    return () => {\n      html.removeEventListener('mouseleave', onLeave);\n    };\n  }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n  const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n    if (runElseBranch === void 0) {\n      runElseBranch = true;\n    }\n    if (reason === void 0) {\n      reason = 'hover';\n    }\n    const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n    if (closeDelay && !handlerRef.current) {\n      clearTimeoutIfSet(timeoutRef);\n      timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n    } else if (runElseBranch) {\n      clearTimeoutIfSet(timeoutRef);\n      onOpenChange(false, event, reason);\n    }\n  }, [delayRef, onOpenChange]);\n  const cleanupMouseMoveHandler = useEffectEvent(() => {\n    unbindMouseMoveRef.current();\n    handlerRef.current = undefined;\n  });\n  const clearPointerEvents = useEffectEvent(() => {\n    if (performedPointerEventsMutationRef.current) {\n      const body = getDocument$1(elements.floating).body;\n      body.style.pointerEvents = '';\n      body.removeAttribute(safePolygonIdentifier);\n      performedPointerEventsMutationRef.current = false;\n    }\n  });\n  const isClickLikeOpenEvent = useEffectEvent(() => {\n    return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n  });\n\n  // Registering the mouse events on the reference directly to bypass React's\n  // delegation system. If the cursor was on a disabled element and then entered\n  // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onReferenceMouseEnter(event) {\n      clearTimeoutIfSet(timeoutRef);\n      blockMouseMoveRef.current = false;\n      if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || getRestMs(restMsRef.current) > 0 && !getDelay(delayRef.current, 'open')) {\n        return;\n      }\n      const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n      if (openDelay) {\n        timeoutRef.current = window.setTimeout(() => {\n          if (!openRef.current) {\n            onOpenChange(true, event, 'hover');\n          }\n        }, openDelay);\n      } else if (!open) {\n        onOpenChange(true, event, 'hover');\n      }\n    }\n    function onReferenceMouseLeave(event) {\n      if (isClickLikeOpenEvent()) {\n        clearPointerEvents();\n        return;\n      }\n      unbindMouseMoveRef.current();\n      const doc = getDocument$1(elements.floating);\n      clearTimeoutIfSet(restTimeoutRef);\n      restTimeoutPendingRef.current = false;\n      if (handleCloseRef.current && dataRef.current.floatingContext) {\n        // Prevent clearing `onScrollMouseLeave` timeout.\n        if (!open) {\n          clearTimeoutIfSet(timeoutRef);\n        }\n        handlerRef.current = handleCloseRef.current({\n          ...dataRef.current.floatingContext,\n          tree,\n          x: event.clientX,\n          y: event.clientY,\n          onClose() {\n            clearPointerEvents();\n            cleanupMouseMoveHandler();\n            if (!isClickLikeOpenEvent()) {\n              closeWithDelay(event, true, 'safe-polygon');\n            }\n          }\n        });\n        const handler = handlerRef.current;\n        doc.addEventListener('mousemove', handler);\n        unbindMouseMoveRef.current = () => {\n          doc.removeEventListener('mousemove', handler);\n        };\n        return;\n      }\n\n      // Allow interactivity without `safePolygon` on touch devices. With a\n      // pointer, a short close delay is an alternative, so it should work\n      // consistently.\n      const shouldClose = pointerTypeRef.current === 'touch' ? !contains$1(elements.floating, event.relatedTarget) : true;\n      if (shouldClose) {\n        closeWithDelay(event);\n      }\n    }\n\n    // Ensure the floating element closes after scrolling even if the pointer\n    // did not move.\n    // https://github.com/floating-ui/floating-ui/discussions/1692\n    function onScrollMouseLeave(event) {\n      if (isClickLikeOpenEvent()) return;\n      if (!dataRef.current.floatingContext) return;\n      handleCloseRef.current == null || handleCloseRef.current({\n        ...dataRef.current.floatingContext,\n        tree,\n        x: event.clientX,\n        y: event.clientY,\n        onClose() {\n          clearPointerEvents();\n          cleanupMouseMoveHandler();\n          if (!isClickLikeOpenEvent()) {\n            closeWithDelay(event);\n          }\n        }\n      })(event);\n    }\n    function onFloatingMouseEnter() {\n      clearTimeoutIfSet(timeoutRef);\n    }\n    function onFloatingMouseLeave(event) {\n      if (!isClickLikeOpenEvent()) {\n        closeWithDelay(event, false);\n      }\n    }\n    if (isElement(elements.domReference)) {\n      const reference = elements.domReference;\n      const floating = elements.floating;\n      if (open) {\n        reference.addEventListener('mouseleave', onScrollMouseLeave);\n      }\n      if (move) {\n        reference.addEventListener('mousemove', onReferenceMouseEnter, {\n          once: true\n        });\n      }\n      reference.addEventListener('mouseenter', onReferenceMouseEnter);\n      reference.addEventListener('mouseleave', onReferenceMouseLeave);\n      if (floating) {\n        floating.addEventListener('mouseleave', onScrollMouseLeave);\n        floating.addEventListener('mouseenter', onFloatingMouseEnter);\n        floating.addEventListener('mouseleave', onFloatingMouseLeave);\n      }\n      return () => {\n        if (open) {\n          reference.removeEventListener('mouseleave', onScrollMouseLeave);\n        }\n        if (move) {\n          reference.removeEventListener('mousemove', onReferenceMouseEnter);\n        }\n        reference.removeEventListener('mouseenter', onReferenceMouseEnter);\n        reference.removeEventListener('mouseleave', onReferenceMouseLeave);\n        if (floating) {\n          floating.removeEventListener('mouseleave', onScrollMouseLeave);\n          floating.removeEventListener('mouseenter', onFloatingMouseEnter);\n          floating.removeEventListener('mouseleave', onFloatingMouseLeave);\n        }\n      };\n    }\n  }, [elements, enabled, context, mouseOnly, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef]);\n\n  // Block pointer-events of every element other than the reference and floating\n  // while the floating element is open and has a `handleClose` handler. Also\n  // handles nested floating elements.\n  // https://github.com/floating-ui/floating-ui/issues/1722\n  useModernLayoutEffect(() => {\n    var _handleCloseRef$curre;\n    if (!enabled) return;\n    if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && _handleCloseRef$curre.__options.blockPointerEvents && isHoverOpen()) {\n      performedPointerEventsMutationRef.current = true;\n      const floatingEl = elements.floating;\n      if (isElement(elements.domReference) && floatingEl) {\n        var _tree$nodesRef$curren;\n        const body = getDocument$1(elements.floating).body;\n        body.setAttribute(safePolygonIdentifier, '');\n        const ref = elements.domReference;\n        const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n        if (parentFloating) {\n          parentFloating.style.pointerEvents = '';\n        }\n        body.style.pointerEvents = 'none';\n        ref.style.pointerEvents = 'auto';\n        floatingEl.style.pointerEvents = 'auto';\n        return () => {\n          body.style.pointerEvents = '';\n          ref.style.pointerEvents = '';\n          floatingEl.style.pointerEvents = '';\n        };\n      }\n    }\n  }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n  useModernLayoutEffect(() => {\n    if (!open) {\n      pointerTypeRef.current = undefined;\n      restTimeoutPendingRef.current = false;\n      cleanupMouseMoveHandler();\n      clearPointerEvents();\n    }\n  }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n  React.useEffect(() => {\n    return () => {\n      cleanupMouseMoveHandler();\n      clearTimeoutIfSet(timeoutRef);\n      clearTimeoutIfSet(restTimeoutRef);\n      clearPointerEvents();\n    };\n  }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n  const reference = React.useMemo(() => {\n    function setPointerRef(event) {\n      pointerTypeRef.current = event.pointerType;\n    }\n    return {\n      onPointerDown: setPointerRef,\n      onPointerEnter: setPointerRef,\n      onMouseMove(event) {\n        const {\n          nativeEvent\n        } = event;\n        function handleMouseMove() {\n          if (!blockMouseMoveRef.current && !openRef.current) {\n            onOpenChange(true, nativeEvent, 'hover');\n          }\n        }\n        if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n          return;\n        }\n        if (open || getRestMs(restMsRef.current) === 0) {\n          return;\n        }\n\n        // Ignore insignificant movements to account for tremors.\n        if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n          return;\n        }\n        clearTimeoutIfSet(restTimeoutRef);\n        if (pointerTypeRef.current === 'touch') {\n          handleMouseMove();\n        } else {\n          restTimeoutPendingRef.current = true;\n          restTimeoutRef.current = window.setTimeout(handleMouseMove, getRestMs(restMsRef.current));\n        }\n      }\n    };\n  }, [mouseOnly, onOpenChange, open, openRef, restMsRef]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n  delay: 0,\n  initialDelay: 0,\n  timeoutMs: 0,\n  currentId: null,\n  setCurrentId: NOOP,\n  setState: NOOP,\n  isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n  const {\n    children,\n    delay,\n    timeoutMs = 0\n  } = props;\n  const [state, setState] = React.useReducer((prev, next) => ({\n    ...prev,\n    ...next\n  }), {\n    delay,\n    timeoutMs,\n    initialDelay: delay,\n    currentId: null,\n    isInstantPhase: false\n  });\n  const initialCurrentIdRef = React.useRef(null);\n  const setCurrentId = React.useCallback(currentId => {\n    setState({\n      currentId\n    });\n  }, []);\n  useModernLayoutEffect(() => {\n    if (state.currentId) {\n      if (initialCurrentIdRef.current === null) {\n        initialCurrentIdRef.current = state.currentId;\n      } else if (!state.isInstantPhase) {\n        setState({\n          isInstantPhase: true\n        });\n      }\n    } else {\n      if (state.isInstantPhase) {\n        setState({\n          isInstantPhase: false\n        });\n      }\n      initialCurrentIdRef.current = null;\n    }\n  }, [state.currentId, state.isInstantPhase]);\n  return /*#__PURE__*/jsx(FloatingDelayGroupContext.Provider, {\n    value: React.useMemo(() => ({\n      ...state,\n      setState,\n      setCurrentId\n    }), [state, setCurrentId]),\n    children: children\n  });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    floatingId\n  } = context;\n  const {\n    id: optionId,\n    enabled = true\n  } = options;\n  const id = optionId != null ? optionId : floatingId;\n  const groupContext = useDelayGroupContext();\n  const {\n    currentId,\n    setCurrentId,\n    initialDelay,\n    setState,\n    timeoutMs\n  } = groupContext;\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!currentId) return;\n    setState({\n      delay: {\n        open: 1,\n        close: getDelay(initialDelay, 'close')\n      }\n    });\n    if (currentId !== id) {\n      onOpenChange(false);\n    }\n  }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n  useModernLayoutEffect(() => {\n    function unset() {\n      onOpenChange(false);\n      setState({\n        delay: initialDelay,\n        currentId: null\n      });\n    }\n    if (!enabled) return;\n    if (!currentId) return;\n    if (!open && currentId === id) {\n      if (timeoutMs) {\n        const timeout = window.setTimeout(unset, timeoutMs);\n        return () => {\n          clearTimeout(timeout);\n        };\n      }\n      unset();\n    }\n  }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (setCurrentId === NOOP || !open) return;\n    setCurrentId(id);\n  }, [enabled, open, setCurrentId, id]);\n  return groupContext;\n}\n\nconst NextFloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n  hasProvider: false,\n  timeoutMs: 0,\n  delayRef: {\n    current: 0\n  },\n  initialDelayRef: {\n    current: 0\n  },\n  timeoutIdRef: {\n    current: -1\n  },\n  currentIdRef: {\n    current: null\n  },\n  currentContextRef: {\n    current: null\n  }\n});\n/**\n * Experimental next version of `FloatingDelayGroup` to become the default\n * in the future. This component is not yet stable.\n * Provides context for a group of floating elements that should share a\n * `delay`. Unlike `FloatingDelayGroup`, `useNextDelayGroup` with this\n * component does not cause a re-render of unrelated consumers of the\n * context when the delay changes.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction NextFloatingDelayGroup(props) {\n  const {\n    children,\n    delay,\n    timeoutMs = 0\n  } = props;\n  const delayRef = React.useRef(delay);\n  const initialDelayRef = React.useRef(delay);\n  const currentIdRef = React.useRef(null);\n  const currentContextRef = React.useRef(null);\n  const timeoutIdRef = React.useRef(-1);\n  return /*#__PURE__*/jsx(NextFloatingDelayGroupContext.Provider, {\n    value: React.useMemo(() => ({\n      hasProvider: true,\n      delayRef,\n      initialDelayRef,\n      currentIdRef,\n      timeoutMs,\n      currentContextRef,\n      timeoutIdRef\n    }), [timeoutMs]),\n    children: children\n  });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `NextFloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useNextDelayGroup(context, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    floatingId\n  } = context;\n  const {\n    enabled = true\n  } = options;\n  const groupContext = React.useContext(NextFloatingDelayGroupContext);\n  const {\n    currentIdRef,\n    delayRef,\n    timeoutMs,\n    initialDelayRef,\n    currentContextRef,\n    hasProvider,\n    timeoutIdRef\n  } = groupContext;\n  const [isInstantPhase, setIsInstantPhase] = React.useState(false);\n  useModernLayoutEffect(() => {\n    function unset() {\n      var _currentContextRef$cu;\n      setIsInstantPhase(false);\n      (_currentContextRef$cu = currentContextRef.current) == null || _currentContextRef$cu.setIsInstantPhase(false);\n      currentIdRef.current = null;\n      currentContextRef.current = null;\n      delayRef.current = initialDelayRef.current;\n    }\n    if (!enabled) return;\n    if (!currentIdRef.current) return;\n    if (!open && currentIdRef.current === floatingId) {\n      setIsInstantPhase(false);\n      if (timeoutMs) {\n        timeoutIdRef.current = window.setTimeout(unset, timeoutMs);\n        return () => {\n          clearTimeout(timeoutIdRef.current);\n        };\n      }\n      unset();\n    }\n  }, [enabled, open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!open) return;\n    const prevContext = currentContextRef.current;\n    const prevId = currentIdRef.current;\n    currentContextRef.current = {\n      onOpenChange,\n      setIsInstantPhase\n    };\n    currentIdRef.current = floatingId;\n    delayRef.current = {\n      open: 0,\n      close: getDelay(initialDelayRef.current, 'close')\n    };\n    if (prevId !== null && prevId !== floatingId) {\n      clearTimeoutIfSet(timeoutIdRef);\n      setIsInstantPhase(true);\n      prevContext == null || prevContext.setIsInstantPhase(true);\n      prevContext == null || prevContext.onOpenChange(false);\n    } else {\n      setIsInstantPhase(false);\n      prevContext == null || prevContext.setIsInstantPhase(false);\n    }\n  }, [enabled, open, floatingId, onOpenChange, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n  useModernLayoutEffect(() => {\n    return () => {\n      currentContextRef.current = null;\n    };\n  }, [currentContextRef]);\n  return React.useMemo(() => ({\n    hasProvider,\n    delayRef,\n    isInstantPhase\n  }), [hasProvider, delayRef, isInstantPhase]);\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    preventScroll = false,\n    cancelPrevious = true,\n    sync = false\n  } = options;\n  cancelPrevious && cancelAnimationFrame(rafId);\n  const exec = () => el == null ? void 0 : el.focus({\n    preventScroll\n  });\n  if (sync) {\n    exec();\n  } else {\n    rafId = requestAnimationFrame(exec);\n  }\n}\n\nfunction contains(parent, child) {\n  if (!parent || !child) {\n    return false;\n  }\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n\n  // then fallback to custom implementation with Shadow DOM support\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) {\n        return true;\n      }\n      // @ts-ignore\n      next = next.parentNode || next.host;\n    }\n  }\n\n  // Give up, the result is false\n  return false;\n}\nfunction getTarget(event) {\n  if ('composedPath' in event) {\n    return event.composedPath()[0];\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support\n  // `composedPath()`, but browsers without shadow DOM don't.\n  return event.target;\n}\nfunction getDocument(node) {\n  return (node == null ? void 0 : node.ownerDocument) || document;\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nlet counterMap = /*#__PURE__*/new WeakMap();\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n  if (parent.contains(target)) {\n    return target;\n  }\n  const correctedTarget = unwrapHost(target);\n  if (parent.contains(correctedTarget)) {\n    return correctedTarget;\n  }\n  return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n  const markerName = 'data-floating-ui-inert';\n  const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n  const avoidElements = correctElements(body, uncorrectedAvoidElements);\n  const elementsToKeep = new Set();\n  const elementsToStop = new Set(avoidElements);\n  const hiddenElements = [];\n  if (!markerMap[markerName]) {\n    markerMap[markerName] = new WeakMap();\n  }\n  const markerCounter = markerMap[markerName];\n  avoidElements.forEach(keep);\n  deep(body);\n  elementsToKeep.clear();\n  function keep(el) {\n    if (!el || elementsToKeep.has(el)) {\n      return;\n    }\n    elementsToKeep.add(el);\n    el.parentNode && keep(el.parentNode);\n  }\n  function deep(parent) {\n    if (!parent || elementsToStop.has(parent)) {\n      return;\n    }\n    [].forEach.call(parent.children, node => {\n      if (getNodeName(node) === 'script') return;\n      if (elementsToKeep.has(node)) {\n        deep(node);\n      } else {\n        const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n        const alreadyHidden = attr !== null && attr !== 'false';\n        const currentCounterValue = counterMap.get(node) || 0;\n        const counterValue = controlAttribute ? currentCounterValue + 1 : currentCounterValue;\n        const markerValue = (markerCounter.get(node) || 0) + 1;\n        counterMap.set(node, counterValue);\n        markerCounter.set(node, markerValue);\n        hiddenElements.push(node);\n        if (counterValue === 1 && alreadyHidden) {\n          uncontrolledElementsSet.add(node);\n        }\n        if (markerValue === 1) {\n          node.setAttribute(markerName, '');\n        }\n        if (!alreadyHidden && controlAttribute) {\n          node.setAttribute(controlAttribute, controlAttribute === 'inert' ? '' : 'true');\n        }\n      }\n    });\n  }\n  lockCount$1++;\n  return () => {\n    hiddenElements.forEach(element => {\n      const currentCounterValue = counterMap.get(element) || 0;\n      const counterValue = controlAttribute ? currentCounterValue - 1 : currentCounterValue;\n      const markerValue = (markerCounter.get(element) || 0) - 1;\n      counterMap.set(element, counterValue);\n      markerCounter.set(element, markerValue);\n      if (!counterValue) {\n        if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n          element.removeAttribute(controlAttribute);\n        }\n        uncontrolledElementsSet.delete(element);\n      }\n      if (!markerValue) {\n        element.removeAttribute(markerName);\n      }\n    });\n    lockCount$1--;\n    if (!lockCount$1) {\n      counterMap = new WeakMap();\n      counterMap = new WeakMap();\n      uncontrolledElementsSet = new WeakSet();\n      markerMap = {};\n    }\n  };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n  if (ariaHidden === void 0) {\n    ariaHidden = false;\n  }\n  if (inert === void 0) {\n    inert = false;\n  }\n  const body = getDocument(avoidElements[0]).body;\n  return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst HIDDEN_STYLES = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'fixed',\n  whiteSpace: 'nowrap',\n  width: '1px',\n  top: 0,\n  left: 0\n};\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n  const [role, setRole] = React.useState();\n  useModernLayoutEffect(() => {\n    if (isSafari()) {\n      // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n      // on VoiceOver does trigger the onFocus event, so we can use the focus\n      // trap element. On Safari, only buttons trigger the onFocus event.\n      // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n      // button role.\n      setRole('button');\n    }\n  }, []);\n  const restProps = {\n    ref,\n    tabIndex: 0,\n    // Role is only for VoiceOver\n    role,\n    'aria-hidden': role ? undefined : true,\n    [createAttribute('focus-guard')]: '',\n    style: HIDDEN_STYLES\n  };\n  return /*#__PURE__*/jsx(\"span\", {\n    ...props,\n    ...restProps\n  });\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    id,\n    root\n  } = props;\n  const uniqueId = useId();\n  const portalContext = usePortalContext();\n  const [portalNode, setPortalNode] = React.useState(null);\n  const portalNodeRef = React.useRef(null);\n  useModernLayoutEffect(() => {\n    return () => {\n      portalNode == null || portalNode.remove();\n      // Allow the subsequent layout effects to create a new node on updates.\n      // The portal node will still be cleaned up on unmount.\n      // https://github.com/floating-ui/floating-ui/issues/2454\n      queueMicrotask(() => {\n        portalNodeRef.current = null;\n      });\n    };\n  }, [portalNode]);\n  useModernLayoutEffect(() => {\n    // Wait for the uniqueId to be generated before creating the portal node in\n    // React <18 (using `useFloatingId` instead of the native `useId`).\n    // https://github.com/floating-ui/floating-ui/issues/2778\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    const existingIdRoot = id ? document.getElementById(id) : null;\n    if (!existingIdRoot) return;\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    existingIdRoot.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, uniqueId]);\n  useModernLayoutEffect(() => {\n    // Wait for the root to exist before creating the portal node. The root must\n    // be stored in state, not a ref, for this to work reactively.\n    if (root === null) return;\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n    if (container && !isElement(container)) container = container.current;\n    container = container || document.body;\n    let idWrapper = null;\n    if (id) {\n      idWrapper = document.createElement('div');\n      idWrapper.id = id;\n      container.appendChild(idWrapper);\n    }\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    container = idWrapper || container;\n    container.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, root, uniqueId, portalContext]);\n  return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n  const {\n    children,\n    id,\n    root,\n    preserveTabOrder = true\n  } = props;\n  const portalNode = useFloatingPortalNode({\n    id,\n    root\n  });\n  const [focusManagerState, setFocusManagerState] = React.useState(null);\n  const beforeOutsideRef = React.useRef(null);\n  const afterOutsideRef = React.useRef(null);\n  const beforeInsideRef = React.useRef(null);\n  const afterInsideRef = React.useRef(null);\n  const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n  const open = focusManagerState == null ? void 0 : focusManagerState.open;\n  const shouldRenderGuards =\n  // The FocusManager and therefore floating element are currently open/\n  // rendered.\n  !!focusManagerState &&\n  // Guards are only for non-modal focus management.\n  !focusManagerState.modal &&\n  // Don't render if unmount is transitioning.\n  focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n  // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n  React.useEffect(() => {\n    if (!portalNode || !preserveTabOrder || modal) {\n      return;\n    }\n\n    // Make sure elements inside the portal element are tabbable only when the\n    // portal has already been focused, either by tabbing into a focus trap\n    // element outside or using the mouse.\n    function onFocus(event) {\n      if (portalNode && isOutsideEvent(event)) {\n        const focusing = event.type === 'focusin';\n        const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n        manageFocus(portalNode);\n      }\n    }\n    // Listen to the event on the capture phase so they run before the focus\n    // trap elements onFocus prop is called.\n    portalNode.addEventListener('focusin', onFocus, true);\n    portalNode.addEventListener('focusout', onFocus, true);\n    return () => {\n      portalNode.removeEventListener('focusin', onFocus, true);\n      portalNode.removeEventListener('focusout', onFocus, true);\n    };\n  }, [portalNode, preserveTabOrder, modal]);\n  React.useEffect(() => {\n    if (!portalNode) return;\n    if (open) return;\n    enableFocusInside(portalNode);\n  }, [open, portalNode]);\n  return /*#__PURE__*/jsxs(PortalContext.Provider, {\n    value: React.useMemo(() => ({\n      preserveTabOrder,\n      beforeOutsideRef,\n      afterOutsideRef,\n      beforeInsideRef,\n      afterInsideRef,\n      portalNode,\n      setFocusManagerState\n    }), [preserveTabOrder, portalNode]),\n    children: [shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"outside\",\n      ref: beforeOutsideRef,\n      onFocus: event => {\n        if (isOutsideEvent(event, portalNode)) {\n          var _beforeInsideRef$curr;\n          (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n        } else {\n          const domReference = focusManagerState ? focusManagerState.domReference : null;\n          const prevTabbable = getPreviousTabbable(domReference);\n          prevTabbable == null || prevTabbable.focus();\n        }\n      }\n    }), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(\"span\", {\n      \"aria-owns\": portalNode.id,\n      style: HIDDEN_STYLES\n    }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"outside\",\n      ref: afterOutsideRef,\n      onFocus: event => {\n        if (isOutsideEvent(event, portalNode)) {\n          var _afterInsideRef$curre;\n          (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n        } else {\n          const domReference = focusManagerState ? focusManagerState.domReference : null;\n          const nextTabbable = getNextTabbable(domReference);\n          nextTabbable == null || nextTabbable.focus();\n          (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n        }\n      }\n    })]\n  });\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nfunction useLiteMergeRefs(refs) {\n  return React.useMemo(() => {\n    return value => {\n      refs.forEach(ref => {\n        if (ref) {\n          ref.current = value;\n        }\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n  previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n  if (element && getNodeName(element) !== 'body') {\n    previouslyFocusedElements.push(element);\n    if (previouslyFocusedElements.length > LIST_LIMIT) {\n      previouslyFocusedElements = previouslyFocusedElements.slice(-20);\n    }\n  }\n}\nfunction getPreviouslyFocusedElement() {\n  return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nfunction getFirstTabbableElement(container) {\n  const tabbableOptions = getTabbableOptions();\n  if (isTabbable(container, tabbableOptions)) {\n    return container;\n  }\n  return tabbable(container, tabbableOptions)[0] || container;\n}\nfunction handleTabIndex(floatingFocusElement, orderRef) {\n  var _floatingFocusElement;\n  if (!orderRef.current.includes('floating') && !((_floatingFocusElement = floatingFocusElement.getAttribute('role')) != null && _floatingFocusElement.includes('dialog'))) {\n    return;\n  }\n  const options = getTabbableOptions();\n  const focusableElements = focusable(floatingFocusElement, options);\n  const tabbableContent = focusableElements.filter(element => {\n    const dataTabIndex = element.getAttribute('data-tabindex') || '';\n    return isTabbable(element, options) || element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-');\n  });\n  const tabIndex = floatingFocusElement.getAttribute('tabindex');\n  if (orderRef.current.includes('floating') || tabbableContent.length === 0) {\n    if (tabIndex !== '0') {\n      floatingFocusElement.setAttribute('tabindex', '0');\n    }\n  } else if (tabIndex !== '-1' || floatingFocusElement.hasAttribute('data-tabindex') && floatingFocusElement.getAttribute('data-tabindex') !== '-1') {\n    floatingFocusElement.setAttribute('tabindex', '-1');\n    floatingFocusElement.setAttribute('data-tabindex', '-1');\n  }\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n  return /*#__PURE__*/jsx(\"button\", {\n    ...props,\n    type: \"button\",\n    ref: ref,\n    tabIndex: -1,\n    style: HIDDEN_STYLES\n  });\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n  const {\n    context,\n    children,\n    disabled = false,\n    order = ['content'],\n    guards: _guards = true,\n    initialFocus = 0,\n    returnFocus = true,\n    restoreFocus = false,\n    modal = true,\n    visuallyHiddenDismiss = false,\n    closeOnFocusOut = true,\n    outsideElementsInert = false,\n    getInsideElements: _getInsideElements = () => []\n  } = props;\n  const {\n    open,\n    onOpenChange,\n    events,\n    dataRef,\n    elements: {\n      domReference,\n      floating\n    }\n  } = context;\n  const getNodeId = useEffectEvent(() => {\n    var _dataRef$current$floa;\n    return (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n  });\n  const getInsideElements = useEffectEvent(_getInsideElements);\n  const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n  // If the reference is a combobox and is typeable (e.g. input/textarea),\n  // there are different focus semantics. The guards should not be rendered, but\n  // aria-hidden should be applied to all nodes still. Further, the visually\n  // hidden dismiss button should only appear at the end of the list, not the\n  // start.\n  const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n  // Force the guards to be rendered if the `inert` attribute is not supported.\n  const inertSupported = supportsInert();\n  const guards = inertSupported ? _guards : true;\n  const useInert = !guards || inertSupported && outsideElementsInert;\n  const orderRef = useLatestRef(order);\n  const initialFocusRef = useLatestRef(initialFocus);\n  const returnFocusRef = useLatestRef(returnFocus);\n  const tree = useFloatingTree();\n  const portalContext = usePortalContext();\n  const startDismissButtonRef = React.useRef(null);\n  const endDismissButtonRef = React.useRef(null);\n  const preventReturnFocusRef = React.useRef(false);\n  const isPointerDownRef = React.useRef(false);\n  const tabbableIndexRef = React.useRef(-1);\n  const isInsidePortal = portalContext != null;\n  const floatingFocusElement = getFloatingFocusElement(floating);\n  const getTabbableContent = useEffectEvent(function (container) {\n    if (container === void 0) {\n      container = floatingFocusElement;\n    }\n    return container ? tabbable(container, getTabbableOptions()) : [];\n  });\n  const getTabbableElements = useEffectEvent(container => {\n    const content = getTabbableContent(container);\n    return orderRef.current.map(type => {\n      if (domReference && type === 'reference') {\n        return domReference;\n      }\n      if (floatingFocusElement && type === 'floating') {\n        return floatingFocusElement;\n      }\n      return content;\n    }).filter(Boolean).flat();\n  });\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!modal) return;\n    function onKeyDown(event) {\n      if (event.key === 'Tab') {\n        // The focus guards have nothing to focus, so we need to stop the event.\n        if (contains$1(floatingFocusElement, activeElement(getDocument$1(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n          stopEvent(event);\n        }\n        const els = getTabbableElements();\n        const target = getTarget$1(event);\n        if (orderRef.current[0] === 'reference' && target === domReference) {\n          stopEvent(event);\n          if (event.shiftKey) {\n            enqueueFocus(els[els.length - 1]);\n          } else {\n            enqueueFocus(els[1]);\n          }\n        }\n        if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n          stopEvent(event);\n          enqueueFocus(els[0]);\n        }\n      }\n    }\n    const doc = getDocument$1(floatingFocusElement);\n    doc.addEventListener('keydown', onKeyDown);\n    return () => {\n      doc.removeEventListener('keydown', onKeyDown);\n    };\n  }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!floating) return;\n    function handleFocusIn(event) {\n      const target = getTarget$1(event);\n      const tabbableContent = getTabbableContent();\n      const tabbableIndex = tabbableContent.indexOf(target);\n      if (tabbableIndex !== -1) {\n        tabbableIndexRef.current = tabbableIndex;\n      }\n    }\n    floating.addEventListener('focusin', handleFocusIn);\n    return () => {\n      floating.removeEventListener('focusin', handleFocusIn);\n    };\n  }, [disabled, floating, getTabbableContent]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!closeOnFocusOut) return;\n\n    // In Safari, buttons lose focus when pressing them.\n    function handlePointerDown() {\n      isPointerDownRef.current = true;\n      setTimeout(() => {\n        isPointerDownRef.current = false;\n      });\n    }\n    function handleFocusOutside(event) {\n      const relatedTarget = event.relatedTarget;\n      const currentTarget = event.currentTarget;\n      queueMicrotask(() => {\n        const nodeId = getNodeId();\n        const movedToUnrelatedNode = !(contains$1(domReference, relatedTarget) || contains$1(floating, relatedTarget) || contains$1(relatedTarget, floating) || contains$1(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getNodeChildren$1(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context, _node$context2;\n          return contains$1((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains$1((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n        }) || getNodeAncestors(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context3, _node$context4, _node$context5;\n          return [(_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating, getFloatingFocusElement((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.floating)].includes(relatedTarget) || ((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.domReference) === relatedTarget;\n        })));\n        if (currentTarget === domReference && floatingFocusElement) {\n          handleTabIndex(floatingFocusElement, orderRef);\n        }\n\n        // Restore focus to the previous tabbable element index to prevent\n        // focus from being lost outside the floating tree.\n        if (restoreFocus && movedToUnrelatedNode && activeElement(getDocument$1(floatingFocusElement)) === getDocument$1(floatingFocusElement).body) {\n          // Let `FloatingPortal` effect knows that focus is still inside the\n          // floating tree.\n          if (isHTMLElement(floatingFocusElement)) {\n            floatingFocusElement.focus();\n          }\n          const prevTabbableIndex = tabbableIndexRef.current;\n          const tabbableContent = getTabbableContent();\n          const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n          if (isHTMLElement(nodeToFocus)) {\n            nodeToFocus.focus();\n          }\n        }\n\n        // Focus did not move inside the floating tree, and there are no tabbable\n        // portal guards to handle closing.\n        if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n        // Fix React 18 Strict Mode returnFocus due to double rendering.\n        relatedTarget !== getPreviouslyFocusedElement()) {\n          preventReturnFocusRef.current = true;\n          onOpenChange(false, event, 'focus-out');\n        }\n      });\n    }\n    if (floating && isHTMLElement(domReference)) {\n      domReference.addEventListener('focusout', handleFocusOutside);\n      domReference.addEventListener('pointerdown', handlePointerDown);\n      floating.addEventListener('focusout', handleFocusOutside);\n      return () => {\n        domReference.removeEventListener('focusout', handleFocusOutside);\n        domReference.removeEventListener('pointerdown', handlePointerDown);\n        floating.removeEventListener('focusout', handleFocusOutside);\n      };\n    }\n  }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef]);\n  const beforeGuardRef = React.useRef(null);\n  const afterGuardRef = React.useRef(null);\n  const mergedBeforeGuardRef = useLiteMergeRefs([beforeGuardRef, portalContext == null ? void 0 : portalContext.beforeInsideRef]);\n  const mergedAfterGuardRef = useLiteMergeRefs([afterGuardRef, portalContext == null ? void 0 : portalContext.afterInsideRef]);\n  React.useEffect(() => {\n    var _portalContext$portal, _ancestors$find;\n    if (disabled) return;\n    if (!floating) return;\n\n    // Don't hide portals nested within the parent portal.\n    const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n    const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];\n    const ancestorFloatingNodes = tree && !modal ? ancestors.map(node => {\n      var _node$context6;\n      return (_node$context6 = node.context) == null ? void 0 : _node$context6.elements.floating;\n    }) : [];\n    const rootAncestorComboboxDomReference = (_ancestors$find = ancestors.find(node => {\n      var _node$context7;\n      return isTypeableCombobox(((_node$context7 = node.context) == null ? void 0 : _node$context7.elements.domReference) || null);\n    })) == null || (_ancestors$find = _ancestors$find.context) == null ? void 0 : _ancestors$find.elements.domReference;\n    const insideElements = [floating, rootAncestorComboboxDomReference, ...portalNodes, ...ancestorFloatingNodes, ...getInsideElements(), startDismissButtonRef.current, endDismissButtonRef.current, beforeGuardRef.current, afterGuardRef.current, portalContext == null ? void 0 : portalContext.beforeOutsideRef.current, portalContext == null ? void 0 : portalContext.afterOutsideRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n    const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, !useInert, useInert) : markOthers(insideElements);\n    return () => {\n      cleanup();\n    };\n  }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards, useInert, tree, getNodeId, getInsideElements]);\n  useModernLayoutEffect(() => {\n    if (disabled || !isHTMLElement(floatingFocusElement)) return;\n    const doc = getDocument$1(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n\n    // Wait for any layout effect state setters to execute to set `tabIndex`.\n    queueMicrotask(() => {\n      const focusableElements = getTabbableElements(floatingFocusElement);\n      const initialFocusValue = initialFocusRef.current;\n      const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n      const focusAlreadyInsideFloatingEl = contains$1(floatingFocusElement, previouslyFocusedElement);\n      if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n        enqueueFocus(elToFocus, {\n          preventScroll: elToFocus === floatingFocusElement\n        });\n      }\n    });\n  }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n  useModernLayoutEffect(() => {\n    if (disabled || !floatingFocusElement) return;\n    let preventReturnFocusScroll = false;\n    const doc = getDocument$1(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n    addPreviouslyFocusedElement(previouslyFocusedElement);\n\n    // Dismissing via outside press should always ignore `returnFocus` to\n    // prevent unwanted scrolling.\n    function onOpenChange(_ref) {\n      let {\n        reason,\n        event,\n        nested\n      } = _ref;\n      if (['hover', 'safe-polygon'].includes(reason) && event.type === 'mouseleave') {\n        preventReturnFocusRef.current = true;\n      }\n      if (reason !== 'outside-press') return;\n      if (nested) {\n        preventReturnFocusRef.current = false;\n        preventReturnFocusScroll = true;\n      } else if (isVirtualClick(event) || isVirtualPointerEvent(event)) {\n        preventReturnFocusRef.current = false;\n      } else {\n        let isPreventScrollSupported = false;\n        document.createElement('div').focus({\n          get preventScroll() {\n            isPreventScrollSupported = true;\n            return false;\n          }\n        });\n        if (isPreventScrollSupported) {\n          preventReturnFocusRef.current = false;\n          preventReturnFocusScroll = true;\n        } else {\n          preventReturnFocusRef.current = true;\n        }\n      }\n    }\n    events.on('openchange', onOpenChange);\n    const fallbackEl = doc.createElement('span');\n    fallbackEl.setAttribute('tabindex', '-1');\n    fallbackEl.setAttribute('aria-hidden', 'true');\n    Object.assign(fallbackEl.style, HIDDEN_STYLES);\n    if (isInsidePortal && domReference) {\n      domReference.insertAdjacentElement('afterend', fallbackEl);\n    }\n    function getReturnElement() {\n      if (typeof returnFocusRef.current === 'boolean') {\n        const el = domReference || getPreviouslyFocusedElement();\n        return el && el.isConnected ? el : fallbackEl;\n      }\n      return returnFocusRef.current.current || fallbackEl;\n    }\n    return () => {\n      events.off('openchange', onOpenChange);\n      const activeEl = activeElement(doc);\n      const isFocusInsideFloatingTree = contains$1(floating, activeEl) || tree && getNodeChildren$1(tree.nodesRef.current, getNodeId()).some(node => {\n        var _node$context8;\n        return contains$1((_node$context8 = node.context) == null ? void 0 : _node$context8.elements.floating, activeEl);\n      });\n      const returnElement = getReturnElement();\n      queueMicrotask(() => {\n        // This is `returnElement`, if it's tabbable, or its first tabbable child.\n        const tabbableReturnElement = getFirstTabbableElement(returnElement);\n        if (\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && (\n        // If the focus moved somewhere else after mount, avoid returning focus\n        // since it likely entered a different element which should be\n        // respected: https://github.com/floating-ui/floating-ui/issues/2607\n        tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n          tabbableReturnElement.focus({\n            preventScroll: preventReturnFocusScroll\n          });\n        }\n        fallbackEl.remove();\n      });\n    };\n  }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, events, tree, isInsidePortal, domReference, getNodeId]);\n  React.useEffect(() => {\n    // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n    // wait for it to complete before resetting the flag.\n    queueMicrotask(() => {\n      preventReturnFocusRef.current = false;\n    });\n  }, [disabled]);\n\n  // Synchronize the `context` & `modal` value to the FloatingPortal context.\n  // It will decide whether or not it needs to render its own guards.\n  useModernLayoutEffect(() => {\n    if (disabled) return;\n    if (!portalContext) return;\n    portalContext.setFocusManagerState({\n      modal,\n      closeOnFocusOut,\n      open,\n      onOpenChange,\n      domReference\n    });\n    return () => {\n      portalContext.setFocusManagerState(null);\n    };\n  }, [disabled, portalContext, modal, open, onOpenChange, closeOnFocusOut, domReference]);\n  useModernLayoutEffect(() => {\n    if (disabled) return;\n    if (!floatingFocusElement) return;\n    handleTabIndex(floatingFocusElement, orderRef);\n  }, [disabled, floatingFocusElement, orderRef]);\n  function renderDismissButton(location) {\n    if (disabled || !visuallyHiddenDismiss || !modal) {\n      return null;\n    }\n    return /*#__PURE__*/jsx(VisuallyHiddenDismiss, {\n      ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n      onClick: event => onOpenChange(false, event.nativeEvent),\n      children: typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss'\n    });\n  }\n  const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n  return /*#__PURE__*/jsxs(Fragment, {\n    children: [shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"inside\",\n      ref: mergedBeforeGuardRef,\n      onFocus: event => {\n        if (modal) {\n          const els = getTabbableElements();\n          enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n        } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n          preventReturnFocusRef.current = false;\n          if (isOutsideEvent(event, portalContext.portalNode)) {\n            const nextTabbable = getNextTabbable(domReference);\n            nextTabbable == null || nextTabbable.focus();\n          } else {\n            var _portalContext$before;\n            (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n          }\n        }\n      }\n    }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n      \"data-type\": \"inside\",\n      ref: mergedAfterGuardRef,\n      onFocus: event => {\n        if (modal) {\n          enqueueFocus(getTabbableElements()[0]);\n        } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n          if (closeOnFocusOut) {\n            preventReturnFocusRef.current = true;\n          }\n          if (isOutsideEvent(event, portalContext.portalNode)) {\n            const prevTabbable = getPreviousTabbable(domReference);\n            prevTabbable == null || prevTabbable.focus();\n          } else {\n            var _portalContext$afterO;\n            (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n          }\n        }\n      }\n    })]\n  });\n}\n\nlet lockCount = 0;\nfunction enableScrollLock() {\n  const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());\n  const bodyStyle = document.body.style;\n  // RTL <body> scrollbar\n  const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n  const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n  const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n  const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n  bodyStyle.overflow = 'hidden';\n  if (scrollbarWidth) {\n    bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n  }\n\n  // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n  // technique has fewer side effects.\n  if (isIOS) {\n    var _window$visualViewpor, _window$visualViewpor2;\n    // iOS 12 does not support `visualViewport`.\n    const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n    const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n    Object.assign(bodyStyle, {\n      position: 'fixed',\n      top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n      left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n      right: '0'\n    });\n  }\n  return () => {\n    Object.assign(bodyStyle, {\n      overflow: '',\n      [paddingProp]: ''\n    });\n    if (isIOS) {\n      Object.assign(bodyStyle, {\n        position: '',\n        top: '',\n        left: '',\n        right: ''\n      });\n      window.scrollTo(scrollX, scrollY);\n    }\n  };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n  const {\n    lockScroll = false,\n    ...rest\n  } = props;\n  useModernLayoutEffect(() => {\n    if (!lockScroll) return;\n    lockCount++;\n    if (lockCount === 1) {\n      cleanup = enableScrollLock();\n    }\n    return () => {\n      lockCount--;\n      if (lockCount === 0) {\n        cleanup();\n      }\n    };\n  }, [lockScroll]);\n  return /*#__PURE__*/jsx(\"div\", {\n    ref: ref,\n    ...rest,\n    style: {\n      position: 'fixed',\n      overflow: 'auto',\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      ...rest.style\n    }\n  });\n});\n\nfunction isButtonTarget(event) {\n  return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isAnchorTarget(event) {\n  return isHTMLElement(event.target) && event.target.tagName === 'A';\n}\nfunction isSpaceIgnored(element) {\n  return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    elements: {\n      domReference\n    }\n  } = context;\n  const {\n    enabled = true,\n    event: eventOption = 'click',\n    toggle = true,\n    ignoreMouse = false,\n    keyboardHandlers = true,\n    stickIfOpen = true\n  } = props;\n  const pointerTypeRef = React.useRef();\n  const didKeyDownRef = React.useRef(false);\n  const reference = React.useMemo(() => ({\n    onPointerDown(event) {\n      pointerTypeRef.current = event.pointerType;\n    },\n    onMouseDown(event) {\n      const pointerType = pointerTypeRef.current;\n\n      // Ignore all buttons except for the \"main\" button.\n      // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n      if (event.button !== 0) return;\n      if (eventOption === 'click') return;\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        // Prevent stealing focus from the floating element\n        event.preventDefault();\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onClick(event) {\n      const pointerType = pointerTypeRef.current;\n      if (eventOption === 'mousedown' && pointerTypeRef.current) {\n        pointerTypeRef.current = undefined;\n        return;\n      }\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onKeyDown(event) {\n      pointerTypeRef.current = undefined;\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n        return;\n      }\n      if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n        // Prevent scrolling\n        event.preventDefault();\n        didKeyDownRef.current = true;\n      }\n      if (isAnchorTarget(event)) {\n        return;\n      }\n      if (event.key === 'Enter') {\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    },\n    onKeyUp(event) {\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n        return;\n      }\n      if (event.key === ' ' && didKeyDownRef.current) {\n        didKeyDownRef.current = false;\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    }\n  }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n  let offsetX = null;\n  let offsetY = null;\n  let isAutoUpdateEvent = false;\n  return {\n    contextElement: domElement || undefined,\n    getBoundingClientRect() {\n      var _data$dataRef$current;\n      const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n      const isXAxis = data.axis === 'x' || data.axis === 'both';\n      const isYAxis = data.axis === 'y' || data.axis === 'both';\n      const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n      let width = domRect.width;\n      let height = domRect.height;\n      let x = domRect.x;\n      let y = domRect.y;\n      if (offsetX == null && data.x && isXAxis) {\n        offsetX = domRect.x - data.x;\n      }\n      if (offsetY == null && data.y && isYAxis) {\n        offsetY = domRect.y - data.y;\n      }\n      x -= offsetX || 0;\n      y -= offsetY || 0;\n      width = 0;\n      height = 0;\n      if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n        width = data.axis === 'y' ? domRect.width : 0;\n        height = data.axis === 'x' ? domRect.height : 0;\n        x = isXAxis && data.x != null ? data.x : x;\n        y = isYAxis && data.y != null ? data.y : y;\n      } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n        height = data.axis === 'x' ? domRect.height : height;\n        width = data.axis === 'y' ? domRect.width : width;\n      }\n      isAutoUpdateEvent = true;\n      return {\n        width,\n        height,\n        x,\n        y,\n        top: y,\n        right: x + width,\n        bottom: y + height,\n        left: x\n      };\n    }\n  };\n}\nfunction isMouseBasedEvent(event) {\n  return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    dataRef,\n    elements: {\n      floating,\n      domReference\n    },\n    refs\n  } = context;\n  const {\n    enabled = true,\n    axis = 'both',\n    x = null,\n    y = null\n  } = props;\n  const initialRef = React.useRef(false);\n  const cleanupListenerRef = React.useRef(null);\n  const [pointerType, setPointerType] = React.useState();\n  const [reactive, setReactive] = React.useState([]);\n  const setReference = useEffectEvent((x, y) => {\n    if (initialRef.current) return;\n\n    // Prevent setting if the open event was not a mouse-like one\n    // (e.g. focus to open, then hover over the reference element).\n    // Only apply if the event exists.\n    if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n      return;\n    }\n    refs.setPositionReference(createVirtualElement(domReference, {\n      x,\n      y,\n      axis,\n      dataRef,\n      pointerType\n    }));\n  });\n  const handleReferenceEnterOrMove = useEffectEvent(event => {\n    if (x != null || y != null) return;\n    if (!open) {\n      setReference(event.clientX, event.clientY);\n    } else if (!cleanupListenerRef.current) {\n      // If there's no cleanup, there's no listener, but we want to ensure\n      // we add the listener if the cursor landed on the floating element and\n      // then back on the reference (i.e. it's interactive).\n      setReactive([]);\n    }\n  });\n\n  // If the pointer is a mouse-like pointer, we want to continue following the\n  // mouse even if the floating element is transitioning out. On touch\n  // devices, this is undesirable because the floating element will move to\n  // the dismissal touch point.\n  const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n  const addListener = React.useCallback(() => {\n    // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n    if (!openCheck || !enabled || x != null || y != null) return;\n    const win = getWindow(floating);\n    function handleMouseMove(event) {\n      const target = getTarget$1(event);\n      if (!contains$1(floating, target)) {\n        setReference(event.clientX, event.clientY);\n      } else {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      }\n    }\n    if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n      win.addEventListener('mousemove', handleMouseMove);\n      const cleanup = () => {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      };\n      cleanupListenerRef.current = cleanup;\n      return cleanup;\n    }\n    refs.setPositionReference(domReference);\n  }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n  React.useEffect(() => {\n    return addListener();\n  }, [addListener, reactive]);\n  React.useEffect(() => {\n    if (enabled && !floating) {\n      initialRef.current = false;\n    }\n  }, [enabled, floating]);\n  React.useEffect(() => {\n    if (!enabled && open) {\n      initialRef.current = true;\n    }\n  }, [enabled, open]);\n  useModernLayoutEffect(() => {\n    if (enabled && (x != null || y != null)) {\n      initialRef.current = false;\n      setReference(x, y);\n    }\n  }, [enabled, x, y, setReference]);\n  const reference = React.useMemo(() => {\n    function setPointerTypeRef(_ref) {\n      let {\n        pointerType\n      } = _ref;\n      setPointerType(pointerType);\n    }\n    return {\n      onPointerDown: setPointerTypeRef,\n      onPointerEnter: setPointerTypeRef,\n      onMouseMove: handleReferenceEnterOrMove,\n      onMouseEnter: handleReferenceEnterOrMove\n    };\n  }, [handleReferenceEnterOrMove]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n  pointerdown: 'onPointerDown',\n  mousedown: 'onMouseDown',\n  click: 'onClick'\n};\nconst captureHandlerKeys = {\n  pointerdown: 'onPointerDownCapture',\n  mousedown: 'onMouseDownCapture',\n  click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n  var _normalizable$escapeK, _normalizable$outside;\n  return {\n    escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n    outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n  };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    elements,\n    dataRef\n  } = context;\n  const {\n    enabled = true,\n    escapeKey = true,\n    outsidePress: unstable_outsidePress = true,\n    outsidePressEvent = 'pointerdown',\n    referencePress = false,\n    referencePressEvent = 'pointerdown',\n    ancestorScroll = false,\n    bubbles,\n    capture\n  } = props;\n  const tree = useFloatingTree();\n  const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n  const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n  const insideReactTreeRef = React.useRef(false);\n  const endedOrStartedInsideRef = React.useRef(false);\n  const {\n    escapeKey: escapeKeyBubbles,\n    outsidePress: outsidePressBubbles\n  } = normalizeProp(bubbles);\n  const {\n    escapeKey: escapeKeyCapture,\n    outsidePress: outsidePressCapture\n  } = normalizeProp(capture);\n  const isComposingRef = React.useRef(false);\n  const closeOnEscapeKeyDown = useEffectEvent(event => {\n    var _dataRef$current$floa;\n    if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n      return;\n    }\n\n    // Wait until IME is settled. Pressing `Escape` while composing should\n    // close the compose menu, but not the floating element.\n    if (isComposingRef.current) {\n      return;\n    }\n    const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n    const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n    if (!escapeKeyBubbles) {\n      event.stopPropagation();\n      if (children.length > 0) {\n        let shouldDismiss = true;\n        children.forEach(child => {\n          var _child$context;\n          if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n            shouldDismiss = false;\n            return;\n          }\n        });\n        if (!shouldDismiss) {\n          return;\n        }\n      }\n    }\n    onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n  });\n  const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n    var _getTarget2;\n    const callback = () => {\n      var _getTarget;\n      closeOnEscapeKeyDown(event);\n      (_getTarget = getTarget$1(event)) == null || _getTarget.removeEventListener('keydown', callback);\n    };\n    (_getTarget2 = getTarget$1(event)) == null || _getTarget2.addEventListener('keydown', callback);\n  });\n  const closeOnPressOutside = useEffectEvent(event => {\n    var _dataRef$current$floa2;\n    // Given developers can stop the propagation of the synthetic event,\n    // we can only be confident with a positive value.\n    const insideReactTree = insideReactTreeRef.current;\n    insideReactTreeRef.current = false;\n\n    // When click outside is lazy (`click` event), handle dragging.\n    // Don't close if:\n    // - The click started inside the floating element.\n    // - The click ended inside the floating element.\n    const endedOrStartedInside = endedOrStartedInsideRef.current;\n    endedOrStartedInsideRef.current = false;\n    if (outsidePressEvent === 'click' && endedOrStartedInside) {\n      return;\n    }\n    if (insideReactTree) {\n      return;\n    }\n    if (typeof outsidePress === 'function' && !outsidePress(event)) {\n      return;\n    }\n    const target = getTarget$1(event);\n    const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n    const markers = getDocument$1(elements.floating).querySelectorAll(inertSelector);\n    let targetRootAncestor = isElement(target) ? target : null;\n    while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n      const nextParent = getParentNode(targetRootAncestor);\n      if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n        break;\n      }\n      targetRootAncestor = nextParent;\n    }\n\n    // Check if the click occurred on a third-party element injected after the\n    // floating element rendered.\n    if (markers.length && isElement(target) && !isRootElement(target) &&\n    // Clicked on a direct ancestor (e.g. FloatingOverlay).\n    !contains$1(target, elements.floating) &&\n    // If the target root element contains none of the markers, then the\n    // element was injected after the floating element rendered.\n    Array.from(markers).every(marker => !contains$1(targetRootAncestor, marker))) {\n      return;\n    }\n\n    // Check if the click occurred on the scrollbar\n    if (isHTMLElement(target) && floating) {\n      const lastTraversableNode = isLastTraversableNode(target);\n      const style = getComputedStyle(target);\n      const scrollRe = /auto|scroll/;\n      const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);\n      const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);\n      const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n      const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n      const isRTL = style.direction === 'rtl';\n\n      // Check click position relative to scrollbar.\n      // In some browsers it is possible to change the <body> (or window)\n      // scrollbar to the left side, but is very rare and is difficult to\n      // check for. Plus, for modal dialogs with backdrops, it is more\n      // important that the backdrop is checked but not so much the window.\n      const pressedVerticalScrollbar = canScrollY && (isRTL ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);\n      const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;\n      if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {\n        return;\n      }\n    }\n    const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n    const targetIsInsideChildren = tree && getNodeChildren$1(tree.nodesRef.current, nodeId).some(node => {\n      var _node$context;\n      return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n    });\n    if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n      return;\n    }\n    const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n    if (children.length > 0) {\n      let shouldDismiss = true;\n      children.forEach(child => {\n        var _child$context2;\n        if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n          shouldDismiss = false;\n          return;\n        }\n      });\n      if (!shouldDismiss) {\n        return;\n      }\n    }\n    onOpenChange(false, event, 'outside-press');\n  });\n  const closeOnPressOutsideCapture = useEffectEvent(event => {\n    var _getTarget4;\n    const callback = () => {\n      var _getTarget3;\n      closeOnPressOutside(event);\n      (_getTarget3 = getTarget$1(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n    };\n    (_getTarget4 = getTarget$1(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n  });\n  React.useEffect(() => {\n    if (!open || !enabled) {\n      return;\n    }\n    dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n    dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n    let compositionTimeout = -1;\n    function onScroll(event) {\n      onOpenChange(false, event, 'ancestor-scroll');\n    }\n    function handleCompositionStart() {\n      window.clearTimeout(compositionTimeout);\n      isComposingRef.current = true;\n    }\n    function handleCompositionEnd() {\n      // Safari fires `compositionend` before `keydown`, so we need to wait\n      // until the next tick to set `isComposing` to `false`.\n      // https://bugs.webkit.org/show_bug.cgi?id=165004\n      compositionTimeout = window.setTimeout(() => {\n        isComposingRef.current = false;\n      },\n      // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n      // Only apply to WebKit for the test to remain 0ms.\n      isWebKit() ? 5 : 0);\n    }\n    const doc = getDocument$1(elements.floating);\n    if (escapeKey) {\n      doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n      doc.addEventListener('compositionstart', handleCompositionStart);\n      doc.addEventListener('compositionend', handleCompositionEnd);\n    }\n    outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n    let ancestors = [];\n    if (ancestorScroll) {\n      if (isElement(elements.domReference)) {\n        ancestors = getOverflowAncestors(elements.domReference);\n      }\n      if (isElement(elements.floating)) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n      }\n      if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n      }\n    }\n\n    // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n    ancestors = ancestors.filter(ancestor => {\n      var _doc$defaultView;\n      return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n    });\n    ancestors.forEach(ancestor => {\n      ancestor.addEventListener('scroll', onScroll, {\n        passive: true\n      });\n    });\n    return () => {\n      if (escapeKey) {\n        doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n        doc.removeEventListener('compositionstart', handleCompositionStart);\n        doc.removeEventListener('compositionend', handleCompositionEnd);\n      }\n      outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n      ancestors.forEach(ancestor => {\n        ancestor.removeEventListener('scroll', onScroll);\n      });\n      window.clearTimeout(compositionTimeout);\n    };\n  }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n  React.useEffect(() => {\n    insideReactTreeRef.current = false;\n  }, [outsidePress, outsidePressEvent]);\n  const reference = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    ...(referencePress && {\n      [bubbleHandlerKeys[referencePressEvent]]: event => {\n        onOpenChange(false, event.nativeEvent, 'reference-press');\n      },\n      ...(referencePressEvent !== 'click' && {\n        onClick(event) {\n          onOpenChange(false, event.nativeEvent, 'reference-press');\n        }\n      })\n    })\n  }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n  const floating = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    onMouseDown() {\n      endedOrStartedInsideRef.current = true;\n    },\n    onMouseUp() {\n      endedOrStartedInsideRef.current = true;\n    },\n    [captureHandlerKeys[outsidePressEvent]]: () => {\n      insideReactTreeRef.current = true;\n    }\n  }), [closeOnEscapeKeyDown, outsidePressEvent]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n  const {\n    open = false,\n    onOpenChange: onOpenChangeProp,\n    elements: elementsProp\n  } = options;\n  const floatingId = useId();\n  const dataRef = React.useRef({});\n  const [events] = React.useState(() => createEventEmitter());\n  const nested = useFloatingParentNodeId() != null;\n  if (process.env.NODE_ENV !== \"production\") {\n    const optionDomReference = elementsProp.reference;\n    if (optionDomReference && !isElement(optionDomReference)) {\n      error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n    }\n  }\n  const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n  const onOpenChange = useEffectEvent((open, event, reason) => {\n    dataRef.current.openEvent = open ? event : undefined;\n    events.emit('openchange', {\n      open,\n      event,\n      reason,\n      nested\n    });\n    onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n  });\n  const refs = React.useMemo(() => ({\n    setPositionReference\n  }), []);\n  const elements = React.useMemo(() => ({\n    reference: positionReference || elementsProp.reference || null,\n    floating: elementsProp.floating || null,\n    domReference: elementsProp.reference\n  }), [positionReference, elementsProp.reference, elementsProp.floating]);\n  return React.useMemo(() => ({\n    dataRef,\n    open,\n    onOpenChange,\n    elements,\n    events,\n    floatingId,\n    refs\n  }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    nodeId\n  } = options;\n  const internalRootContext = useFloatingRootContext({\n    ...options,\n    elements: {\n      reference: null,\n      floating: null,\n      ...options.elements\n    }\n  });\n  const rootContext = options.rootContext || internalRootContext;\n  const computedElements = rootContext.elements;\n  const [_domReference, setDomReference] = React.useState(null);\n  const [positionReference, _setPositionReference] = React.useState(null);\n  const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n  const domReference = optionDomReference || _domReference;\n  const domReferenceRef = React.useRef(null);\n  const tree = useFloatingTree();\n  useModernLayoutEffect(() => {\n    if (domReference) {\n      domReferenceRef.current = domReference;\n    }\n  }, [domReference]);\n  const position = useFloating$1({\n    ...options,\n    elements: {\n      ...computedElements,\n      ...(positionReference && {\n        reference: positionReference\n      })\n    }\n  });\n  const setPositionReference = React.useCallback(node => {\n    const computedPositionReference = isElement(node) ? {\n      getBoundingClientRect: () => node.getBoundingClientRect(),\n      getClientRects: () => node.getClientRects(),\n      contextElement: node\n    } : node;\n    // Store the positionReference in state if the DOM reference is specified externally via the\n    // `elements.reference` option. This ensures that it won't be overridden on future renders.\n    _setPositionReference(computedPositionReference);\n    position.refs.setReference(computedPositionReference);\n  }, [position.refs]);\n  const setReference = React.useCallback(node => {\n    if (isElement(node) || node === null) {\n      domReferenceRef.current = node;\n      setDomReference(node);\n    }\n\n    // Backwards-compatibility for passing a virtual element to `reference`\n    // after it has set the DOM reference.\n    if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n    // Don't allow setting virtual elements using the old technique back to\n    // `null` to support `positionReference` + an unstable `reference`\n    // callback ref.\n    node !== null && !isElement(node)) {\n      position.refs.setReference(node);\n    }\n  }, [position.refs]);\n  const refs = React.useMemo(() => ({\n    ...position.refs,\n    setReference,\n    setPositionReference,\n    domReference: domReferenceRef\n  }), [position.refs, setReference, setPositionReference]);\n  const elements = React.useMemo(() => ({\n    ...position.elements,\n    domReference: domReference\n  }), [position.elements, domReference]);\n  const context = React.useMemo(() => ({\n    ...position,\n    ...rootContext,\n    refs,\n    elements,\n    nodeId\n  }), [position, refs, elements, nodeId, rootContext]);\n  useModernLayoutEffect(() => {\n    rootContext.dataRef.current.floatingContext = context;\n    const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n    if (node) {\n      node.context = context;\n    }\n  });\n  return React.useMemo(() => ({\n    ...position,\n    context,\n    refs,\n    elements\n  }), [position, refs, elements, context]);\n}\n\nfunction isMacSafari() {\n  return isMac() && isSafari();\n}\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    events,\n    dataRef,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    visibleOnly = true\n  } = props;\n  const blockFocusRef = React.useRef(false);\n  const timeoutRef = React.useRef(-1);\n  const keyboardModalityRef = React.useRef(true);\n  React.useEffect(() => {\n    if (!enabled) return;\n    const win = getWindow(elements.domReference);\n\n    // If the reference was focused and the user left the tab/window, and the\n    // floating element was not open, the focus should be blocked when they\n    // return to the tab/window.\n    function onBlur() {\n      if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument$1(elements.domReference))) {\n        blockFocusRef.current = true;\n      }\n    }\n    function onKeyDown() {\n      keyboardModalityRef.current = true;\n    }\n    function onPointerDown() {\n      keyboardModalityRef.current = false;\n    }\n    win.addEventListener('blur', onBlur);\n    if (isMacSafari()) {\n      win.addEventListener('keydown', onKeyDown, true);\n      win.addEventListener('pointerdown', onPointerDown, true);\n    }\n    return () => {\n      win.removeEventListener('blur', onBlur);\n      if (isMacSafari()) {\n        win.removeEventListener('keydown', onKeyDown, true);\n        win.removeEventListener('pointerdown', onPointerDown, true);\n      }\n    };\n  }, [elements.domReference, open, enabled]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        reason\n      } = _ref;\n      if (reason === 'reference-press' || reason === 'escape-key') {\n        blockFocusRef.current = true;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [events, enabled]);\n  React.useEffect(() => {\n    return () => {\n      clearTimeoutIfSet(timeoutRef);\n    };\n  }, []);\n  const reference = React.useMemo(() => ({\n    onMouseLeave() {\n      blockFocusRef.current = false;\n    },\n    onFocus(event) {\n      if (blockFocusRef.current) return;\n      const target = getTarget$1(event.nativeEvent);\n      if (visibleOnly && isElement(target)) {\n        // Safari fails to match `:focus-visible` if focus was initially\n        // outside the document.\n        if (isMacSafari() && !event.relatedTarget) {\n          if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n            return;\n          }\n        } else if (!matchesFocusVisible(target)) {\n          return;\n        }\n      }\n      onOpenChange(true, event.nativeEvent, 'focus');\n    },\n    onBlur(event) {\n      blockFocusRef.current = false;\n      const relatedTarget = event.relatedTarget;\n      const nativeEvent = event.nativeEvent;\n\n      // Hit the non-modal focus management portal guard. Focus will be\n      // moved into the floating element immediately after.\n      const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n      // Wait for the window blur listener to fire.\n      timeoutRef.current = window.setTimeout(() => {\n        var _dataRef$current$floa;\n        const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n        // Focus left the page, keep it open.\n        if (!relatedTarget && activeEl === elements.domReference) return;\n\n        // When focusing the reference element (e.g. regular click), then\n        // clicking into the floating element, prevent it from hiding.\n        // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n        // We can not rely on relatedTarget to point to the correct element\n        // as it will only point to the shadow host of the newly focused element\n        // and not the element that actually has received focus if it is located\n        // inside a shadow root.\n        if (contains$1((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains$1(elements.domReference, activeEl) || movedToFocusGuard) {\n          return;\n        }\n        onOpenChange(false, nativeEvent, 'focus');\n      });\n    }\n  }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nfunction mergeProps(userProps, propsList, elementKey) {\n  const map = new Map();\n  const isItem = elementKey === 'item';\n  let domUserProps = userProps;\n  if (isItem && userProps) {\n    const {\n      [ACTIVE_KEY]: _,\n      [SELECTED_KEY]: __,\n      ...validProps\n    } = userProps;\n    domUserProps = validProps;\n  }\n  return {\n    ...(elementKey === 'floating' && {\n      tabIndex: -1,\n      [FOCUSABLE_ATTRIBUTE]: ''\n    }),\n    ...domUserProps,\n    ...propsList.map(value => {\n      const propsOrGetProps = value ? value[elementKey] : null;\n      if (typeof propsOrGetProps === 'function') {\n        return userProps ? propsOrGetProps(userProps) : null;\n      }\n      return propsOrGetProps;\n    }).concat(userProps).reduce((acc, props) => {\n      if (!props) {\n        return acc;\n      }\n      Object.entries(props).forEach(_ref => {\n        let [key, value] = _ref;\n        if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n          return;\n        }\n        if (key.indexOf('on') === 0) {\n          if (!map.has(key)) {\n            map.set(key, []);\n          }\n          if (typeof value === 'function') {\n            var _map$get;\n            (_map$get = map.get(key)) == null || _map$get.push(value);\n            acc[key] = function () {\n              var _map$get2;\n              for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n              }\n              return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n            };\n          }\n        } else {\n          acc[key] = value;\n        }\n      });\n      return acc;\n    }, {})\n  };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n  if (propsList === void 0) {\n    propsList = [];\n  }\n  const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n  const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n  const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n  const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  referenceDeps);\n  const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  floatingDeps);\n  const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  itemDeps);\n  return React.useMemo(() => ({\n    getReferenceProps,\n    getFloatingProps,\n    getItemProps\n  }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nconst ESCAPE = 'Escape';\nfunction doSwitch(orientation, vertical, horizontal) {\n  switch (orientation) {\n    case 'vertical':\n      return vertical;\n    case 'horizontal':\n      return horizontal;\n    default:\n      return vertical || horizontal;\n  }\n}\nfunction isMainOrientationKey(key, orientation) {\n  const vertical = key === ARROW_UP || key === ARROW_DOWN;\n  const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n  const vertical = key === ARROW_DOWN;\n  const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n  const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  const horizontal = key === ARROW_DOWN;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl, cols) {\n  const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n  const horizontal = key === ARROW_UP;\n  if (orientation === 'both' || orientation === 'horizontal' && cols && cols > 1) {\n    return key === ESCAPE;\n  }\n  return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n  const {\n    open,\n    onOpenChange,\n    elements,\n    floatingId\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onNavigate: unstable_onNavigate = () => {},\n    enabled = true,\n    selectedIndex = null,\n    allowEscape = false,\n    loop = false,\n    nested = false,\n    rtl = false,\n    virtual = false,\n    focusItemOnOpen = 'auto',\n    focusItemOnHover = true,\n    openOnArrowKeyDown = true,\n    disabledIndices = undefined,\n    orientation = 'vertical',\n    parentOrientation,\n    cols = 1,\n    scrollItemIntoView = true,\n    virtualItemRef,\n    itemSizes,\n    dense = false\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (allowEscape) {\n      if (!loop) {\n        warn('`useListNavigation` looping must be enabled to allow escaping.');\n      }\n      if (!virtual) {\n        warn('`useListNavigation` must be virtual to allow escaping.');\n      }\n    }\n    if (orientation === 'vertical' && cols > 1) {\n      warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n    }\n  }\n  const floatingFocusElement = getFloatingFocusElement(elements.floating);\n  const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n  const parentId = useFloatingParentNodeId();\n  const tree = useFloatingTree();\n  useModernLayoutEffect(() => {\n    context.dataRef.current.orientation = orientation;\n  }, [context, orientation]);\n  const onNavigate = useEffectEvent(() => {\n    unstable_onNavigate(indexRef.current === -1 ? null : indexRef.current);\n  });\n  const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n  const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n  const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n  const keyRef = React.useRef(null);\n  const isPointerModalityRef = React.useRef(true);\n  const previousOnNavigateRef = React.useRef(onNavigate);\n  const previousMountedRef = React.useRef(!!elements.floating);\n  const previousOpenRef = React.useRef(open);\n  const forceSyncFocusRef = React.useRef(false);\n  const forceScrollIntoViewRef = React.useRef(false);\n  const disabledIndicesRef = useLatestRef(disabledIndices);\n  const latestOpenRef = useLatestRef(open);\n  const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n  const selectedIndexRef = useLatestRef(selectedIndex);\n  const [activeId, setActiveId] = React.useState();\n  const [virtualId, setVirtualId] = React.useState();\n  const focusItem = useEffectEvent(() => {\n    function runFocus(item) {\n      if (virtual) {\n        var _item$id;\n        if ((_item$id = item.id) != null && _item$id.endsWith('-fui-option')) {\n          item.id = floatingId + \"-\" + Math.random().toString(16).slice(2, 10);\n        }\n        setActiveId(item.id);\n        tree == null || tree.events.emit('virtualfocus', item);\n        if (virtualItemRef) {\n          virtualItemRef.current = item;\n        }\n      } else {\n        enqueueFocus(item, {\n          sync: forceSyncFocusRef.current,\n          preventScroll: true\n        });\n      }\n    }\n    const initialItem = listRef.current[indexRef.current];\n    const forceScrollIntoView = forceScrollIntoViewRef.current;\n    if (initialItem) {\n      runFocus(initialItem);\n    }\n    const scheduler = forceSyncFocusRef.current ? v => v() : requestAnimationFrame;\n    scheduler(() => {\n      const waitedItem = listRef.current[indexRef.current] || initialItem;\n      if (!waitedItem) return;\n      if (!initialItem) {\n        runFocus(waitedItem);\n      }\n      const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n      const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n      if (shouldScrollIntoView) {\n        // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n        // by all browsers.\n        waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n          block: 'nearest',\n          inline: 'nearest'\n        } : scrollIntoViewOptions);\n      }\n    });\n  });\n\n  // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n  // element. Also, reset `activeIndex` upon closing the floating element.\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (open && elements.floating) {\n      if (focusItemOnOpenRef.current && selectedIndex != null) {\n        // Regardless of the pointer modality, we want to ensure the selected\n        // item comes into view when the floating element is opened.\n        forceScrollIntoViewRef.current = true;\n        indexRef.current = selectedIndex;\n        onNavigate();\n      }\n    } else if (previousMountedRef.current) {\n      // Since the user can specify `onNavigate` conditionally\n      // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n      // we store and call the previous function.\n      indexRef.current = -1;\n      previousOnNavigateRef.current();\n    }\n  }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n  // Sync `activeIndex` to be the focused item while the floating element is\n  // open.\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!open) return;\n    if (!elements.floating) return;\n    if (activeIndex == null) {\n      forceSyncFocusRef.current = false;\n      if (selectedIndexRef.current != null) {\n        return;\n      }\n\n      // Reset while the floating element was open (e.g. the list changed).\n      if (previousMountedRef.current) {\n        indexRef.current = -1;\n        focusItem();\n      }\n\n      // Initial sync.\n      if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n        let runs = 0;\n        const waitForListPopulated = () => {\n          if (listRef.current[0] == null) {\n            // Avoid letting the browser paint if possible on the first try,\n            // otherwise use rAF. Don't try more than twice, since something\n            // is wrong otherwise.\n            if (runs < 2) {\n              const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n              scheduler(waitForListPopulated);\n            }\n            runs++;\n          } else {\n            indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n            keyRef.current = null;\n            onNavigate();\n          }\n        };\n        waitForListPopulated();\n      }\n    } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n      indexRef.current = activeIndex;\n      focusItem();\n      forceScrollIntoViewRef.current = false;\n    }\n  }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n  // Ensure the parent floating element has focus when a nested child closes\n  // to allow arrow key navigation to work after the pointer leaves the child.\n  useModernLayoutEffect(() => {\n    var _nodes$find;\n    if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n      return;\n    }\n    const nodes = tree.nodesRef.current;\n    const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n    const activeEl = activeElement(getDocument$1(elements.floating));\n    const treeContainsActiveEl = nodes.some(node => node.context && contains$1(node.context.elements.floating, activeEl));\n    if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n      parent.focus({\n        preventScroll: true\n      });\n    }\n  }, [enabled, elements.floating, tree, parentId, virtual]);\n  useModernLayoutEffect(() => {\n    if (!enabled) return;\n    if (!tree) return;\n    if (!virtual) return;\n    if (parentId) return;\n    function handleVirtualFocus(item) {\n      setVirtualId(item.id);\n      if (virtualItemRef) {\n        virtualItemRef.current = item;\n      }\n    }\n    tree.events.on('virtualfocus', handleVirtualFocus);\n    return () => {\n      tree.events.off('virtualfocus', handleVirtualFocus);\n    };\n  }, [enabled, tree, virtual, parentId, virtualItemRef]);\n  useModernLayoutEffect(() => {\n    previousOnNavigateRef.current = onNavigate;\n    previousOpenRef.current = open;\n    previousMountedRef.current = !!elements.floating;\n  });\n  useModernLayoutEffect(() => {\n    if (!open) {\n      keyRef.current = null;\n    }\n  }, [open]);\n  const hasActiveIndex = activeIndex != null;\n  const item = React.useMemo(() => {\n    function syncCurrentTarget(currentTarget) {\n      if (!open) return;\n      const index = listRef.current.indexOf(currentTarget);\n      if (index !== -1 && indexRef.current !== index) {\n        indexRef.current = index;\n        onNavigate();\n      }\n    }\n    const props = {\n      onFocus(_ref) {\n        let {\n          currentTarget\n        } = _ref;\n        forceSyncFocusRef.current = true;\n        syncCurrentTarget(currentTarget);\n      },\n      onClick: _ref2 => {\n        let {\n          currentTarget\n        } = _ref2;\n        return currentTarget.focus({\n          preventScroll: true\n        });\n      },\n      // Safari\n      ...(focusItemOnHover && {\n        onMouseMove(_ref3) {\n          let {\n            currentTarget\n          } = _ref3;\n          forceSyncFocusRef.current = true;\n          forceScrollIntoViewRef.current = false;\n          syncCurrentTarget(currentTarget);\n        },\n        onPointerLeave(_ref4) {\n          let {\n            pointerType\n          } = _ref4;\n          if (!isPointerModalityRef.current || pointerType === 'touch') {\n            return;\n          }\n          forceSyncFocusRef.current = true;\n          indexRef.current = -1;\n          onNavigate();\n          if (!virtual) {\n            var _floatingFocusElement;\n            (_floatingFocusElement = floatingFocusElementRef.current) == null || _floatingFocusElement.focus({\n              preventScroll: true\n            });\n          }\n        }\n      })\n    };\n    return props;\n  }, [open, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, virtual]);\n  const getParentOrientation = React.useCallback(() => {\n    var _tree$nodesRef$curren;\n    return parentOrientation != null ? parentOrientation : tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.dataRef) == null ? void 0 : _tree$nodesRef$curren.current.orientation;\n  }, [parentId, tree, parentOrientation]);\n  const commonOnKeyDown = useEffectEvent(event => {\n    isPointerModalityRef.current = false;\n    forceSyncFocusRef.current = true;\n\n    // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n    // don't appear to suffer from this. `event.isComposing` is avoided due to\n    // Safari not supporting it properly (although it's not needed in the first\n    // place for Safari, just avoiding any possible issues).\n    if (event.which === 229) {\n      return;\n    }\n\n    // If the floating element is animating out, ignore navigation. Otherwise,\n    // the `activeIndex` gets set to 0 despite not being open so the next time\n    // the user ArrowDowns, the first item won't be focused.\n    if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n      return;\n    }\n    if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) {\n      // If the nested list's close key is also the parent navigation key,\n      // let the parent navigate. Otherwise, stop propagating the event.\n      if (!isMainOrientationKey(event.key, getParentOrientation())) {\n        stopEvent(event);\n      }\n      onOpenChange(false, event.nativeEvent, 'list-navigation');\n      if (isHTMLElement(elements.domReference)) {\n        if (virtual) {\n          tree == null || tree.events.emit('virtualfocus', elements.domReference);\n        } else {\n          elements.domReference.focus();\n        }\n      }\n      return;\n    }\n    const currentIndex = indexRef.current;\n    const minIndex = getMinListIndex(listRef, disabledIndices);\n    const maxIndex = getMaxListIndex(listRef, disabledIndices);\n    if (!typeableComboboxReference) {\n      if (event.key === 'Home') {\n        stopEvent(event);\n        indexRef.current = minIndex;\n        onNavigate();\n      }\n      if (event.key === 'End') {\n        stopEvent(event);\n        indexRef.current = maxIndex;\n        onNavigate();\n      }\n    }\n\n    // Grid navigation.\n    if (cols > 1) {\n      const sizes = itemSizes || Array.from({\n        length: listRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = createGridCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(listRef, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(listRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const index = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getGridCellIndices([...(disabledIndices || listRef.current.map((_, index) => isListIndexDisabled(listRef, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getGridCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction\n        // we're moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n        stopEvent: true\n      })];\n      if (index != null) {\n        indexRef.current = index;\n        onNavigate();\n      }\n      if (orientation === 'both') {\n        return;\n      }\n    }\n    if (isMainOrientationKey(event.key, orientation)) {\n      stopEvent(event);\n\n      // Reset the index if no item is focused.\n      if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n        indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n        onNavigate();\n        return;\n      }\n      if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n        if (loop) {\n          indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          }));\n        }\n      } else {\n        if (loop) {\n          indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          }));\n        }\n      }\n      if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n        indexRef.current = -1;\n      }\n      onNavigate();\n    }\n  });\n  const ariaActiveDescendantProp = React.useMemo(() => {\n    return virtual && open && hasActiveIndex && {\n      'aria-activedescendant': virtualId || activeId\n    };\n  }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n  const floating = React.useMemo(() => {\n    return {\n      'aria-orientation': orientation === 'both' ? undefined : orientation,\n      ...(!typeableComboboxReference ? ariaActiveDescendantProp : {}),\n      onKeyDown: commonOnKeyDown,\n      onPointerMove() {\n        isPointerModalityRef.current = true;\n      }\n    };\n  }, [ariaActiveDescendantProp, commonOnKeyDown, orientation, typeableComboboxReference]);\n  const reference = React.useMemo(() => {\n    function checkVirtualMouse(event) {\n      if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    function checkVirtualPointer(event) {\n      // `pointerdown` fires first, reset the state then perform the checks.\n      focusItemOnOpenRef.current = focusItemOnOpen;\n      if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    return {\n      ...ariaActiveDescendantProp,\n      onKeyDown(event) {\n        isPointerModalityRef.current = false;\n        const isArrowKey = event.key.startsWith('Arrow');\n        const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n        const isMoveKey = isArrowKey || isHomeOrEndKey;\n        const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n        const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl, cols);\n        const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl);\n        const isMainKey = isMainOrientationKey(event.key, orientation);\n        const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n        if (virtual && open) {\n          const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n          const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n          if (isMoveKey && deepestNode && virtualItemRef) {\n            const eventObject = new KeyboardEvent('keydown', {\n              key: event.key,\n              bubbles: true\n            });\n            if (isCrossOpenKey || isCrossCloseKey) {\n              var _deepestNode$context, _deepestNode$context2;\n              const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n              const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n              if (dispatchItem) {\n                stopEvent(event);\n                dispatchItem.dispatchEvent(eventObject);\n                setVirtualId(undefined);\n              }\n            }\n            if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n              if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n                var _deepestNode$context$;\n                stopEvent(event);\n                (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n                return;\n              }\n            }\n          }\n          return commonOnKeyDown(event);\n        }\n        // If a floating element should not open on arrow key down, avoid\n        // setting `activeIndex` while it's closed.\n        if (!open && !openOnArrowKeyDown && isArrowKey) {\n          return;\n        }\n        if (isNavigationKey) {\n          const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation());\n          keyRef.current = nested && isParentMainKey ? null : event.key;\n        }\n        if (nested) {\n          if (isParentCrossOpenKey) {\n            stopEvent(event);\n            if (open) {\n              indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n              onNavigate();\n            } else {\n              onOpenChange(true, event.nativeEvent, 'list-navigation');\n            }\n          }\n          return;\n        }\n        if (isMainKey) {\n          if (selectedIndex != null) {\n            indexRef.current = selectedIndex;\n          }\n          stopEvent(event);\n          if (!open && openOnArrowKeyDown) {\n            onOpenChange(true, event.nativeEvent, 'list-navigation');\n          } else {\n            commonOnKeyDown(event);\n          }\n          if (open) {\n            onNavigate();\n          }\n        }\n      },\n      onFocus() {\n        if (open && !virtual) {\n          indexRef.current = -1;\n          onNavigate();\n        }\n      },\n      onPointerDown: checkVirtualPointer,\n      onPointerEnter: checkVirtualPointer,\n      onMouseDown: checkVirtualMouse,\n      onClick: checkVirtualMouse\n    };\n  }, [activeId, ariaActiveDescendantProp, cols, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n  var _elements$domReferenc, _componentRoleToAriaR;\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    elements,\n    floatingId: defaultFloatingId\n  } = context;\n  const {\n    enabled = true,\n    role = 'dialog'\n  } = props;\n  const defaultReferenceId = useId();\n  const referenceId = ((_elements$domReferenc = elements.domReference) == null ? void 0 : _elements$domReferenc.id) || defaultReferenceId;\n  const floatingId = React.useMemo(() => {\n    var _getFloatingFocusElem;\n    return ((_getFloatingFocusElem = getFloatingFocusElement(elements.floating)) == null ? void 0 : _getFloatingFocusElem.id) || defaultFloatingId;\n  }, [elements.floating, defaultFloatingId]);\n  const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n  const parentId = useFloatingParentNodeId();\n  const isNested = parentId != null;\n  const reference = React.useMemo(() => {\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return {\n        [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n      };\n    }\n    return {\n      'aria-expanded': open ? 'true' : 'false',\n      'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n      'aria-controls': open ? floatingId : undefined,\n      ...(ariaRole === 'listbox' && {\n        role: 'combobox'\n      }),\n      ...(ariaRole === 'menu' && {\n        id: referenceId\n      }),\n      ...(ariaRole === 'menu' && isNested && {\n        role: 'menuitem'\n      }),\n      ...(role === 'select' && {\n        'aria-autocomplete': 'none'\n      }),\n      ...(role === 'combobox' && {\n        'aria-autocomplete': 'list'\n      })\n    };\n  }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n  const floating = React.useMemo(() => {\n    const floatingProps = {\n      id: floatingId,\n      ...(ariaRole && {\n        role: ariaRole\n      })\n    };\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return floatingProps;\n    }\n    return {\n      ...floatingProps,\n      ...(ariaRole === 'menu' && {\n        'aria-labelledby': referenceId\n      })\n    };\n  }, [ariaRole, floatingId, referenceId, role]);\n  const item = React.useCallback(_ref => {\n    let {\n      active,\n      selected\n    } = _ref;\n    const commonProps = {\n      role: 'option',\n      ...(active && {\n        id: floatingId + \"-fui-option\"\n      })\n    };\n\n    // For `menu`, we are unable to tell if the item is a `menuitemradio`\n    // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n    // avoid defaulting to `menuitem` as it may overwrite custom role props.\n    switch (role) {\n      case 'select':\n        return {\n          ...commonProps,\n          'aria-selected': active && selected\n        };\n      case 'combobox':\n        {\n          return {\n            ...commonProps,\n            'aria-selected': selected\n          };\n        }\n    }\n    return {};\n  }, [floatingId, role]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n  return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n  const [isMounted, setIsMounted] = React.useState(open);\n  if (open && !isMounted) {\n    setIsMounted(true);\n  }\n  React.useEffect(() => {\n    if (!open && isMounted) {\n      const timeout = setTimeout(() => setIsMounted(false), durationMs);\n      return () => clearTimeout(timeout);\n    }\n  }, [open, isMounted, durationMs]);\n  return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    elements: {\n      floating\n    }\n  } = context;\n  const {\n    duration = 250\n  } = props;\n  const isNumberDuration = typeof duration === 'number';\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [status, setStatus] = React.useState('unmounted');\n  const isMounted = useDelayUnmount(open, closeDuration);\n  if (!isMounted && status === 'close') {\n    setStatus('unmounted');\n  }\n  useModernLayoutEffect(() => {\n    if (!floating) return;\n    if (open) {\n      setStatus('initial');\n      const frame = requestAnimationFrame(() => {\n        // Ensure it opens before paint. With `FloatingDelayGroup`,\n        // this avoids a flicker when moving between floating elements\n        // to ensure one is always open with no missing frames.\n        ReactDOM.flushSync(() => {\n          setStatus('open');\n        });\n      });\n      return () => {\n        cancelAnimationFrame(frame);\n      };\n    }\n    setStatus('close');\n  }, [open, floating]);\n  return {\n    isMounted,\n    status\n  };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    initial: unstable_initial = {\n      opacity: 0\n    },\n    open: unstable_open,\n    close: unstable_close,\n    common: unstable_common,\n    duration = 250\n  } = props;\n  const placement = context.placement;\n  const side = placement.split('-')[0];\n  const fnArgs = React.useMemo(() => ({\n    side,\n    placement\n  }), [side, placement]);\n  const isNumberDuration = typeof duration === 'number';\n  const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [styles, setStyles] = React.useState(() => ({\n    ...execWithArgsOrReturn(unstable_common, fnArgs),\n    ...execWithArgsOrReturn(unstable_initial, fnArgs)\n  }));\n  const {\n    isMounted,\n    status\n  } = useTransitionStatus(context, {\n    duration\n  });\n  const initialRef = useLatestRef(unstable_initial);\n  const openRef = useLatestRef(unstable_open);\n  const closeRef = useLatestRef(unstable_close);\n  const commonRef = useLatestRef(unstable_common);\n  useModernLayoutEffect(() => {\n    const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n    const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n    const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n    const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n      acc[key] = '';\n      return acc;\n    }, {});\n    if (status === 'initial') {\n      setStyles(styles => ({\n        transitionProperty: styles.transitionProperty,\n        ...commonStyles,\n        ...initialStyles\n      }));\n    }\n    if (status === 'open') {\n      setStyles({\n        transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: openDuration + \"ms\",\n        ...commonStyles,\n        ...openStyles\n      });\n    }\n    if (status === 'close') {\n      const styles = closeStyles || initialStyles;\n      setStyles({\n        transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: closeDuration + \"ms\",\n        ...commonStyles,\n        ...styles\n      });\n    }\n  }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n  return {\n    isMounted,\n    styles\n  };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n  var _ref;\n  const {\n    open,\n    dataRef\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onMatch: unstable_onMatch,\n    onTypingChange: unstable_onTypingChange,\n    enabled = true,\n    findMatch = null,\n    resetMs = 750,\n    ignoreKeys = [],\n    selectedIndex = null\n  } = props;\n  const timeoutIdRef = React.useRef(-1);\n  const stringRef = React.useRef('');\n  const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n  const matchIndexRef = React.useRef(null);\n  const onMatch = useEffectEvent(unstable_onMatch);\n  const onTypingChange = useEffectEvent(unstable_onTypingChange);\n  const findMatchRef = useLatestRef(findMatch);\n  const ignoreKeysRef = useLatestRef(ignoreKeys);\n  useModernLayoutEffect(() => {\n    if (open) {\n      clearTimeoutIfSet(timeoutIdRef);\n      matchIndexRef.current = null;\n      stringRef.current = '';\n    }\n  }, [open]);\n  useModernLayoutEffect(() => {\n    // Sync arrow key navigation but not typeahead navigation.\n    if (open && stringRef.current === '') {\n      var _ref2;\n      prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n    }\n  }, [open, selectedIndex, activeIndex]);\n  const setTypingChange = useEffectEvent(value => {\n    if (value) {\n      if (!dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    } else {\n      if (dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    }\n  });\n  const onKeyDown = useEffectEvent(event => {\n    function getMatchingIndex(list, orderedList, string) {\n      const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n      return str ? list.indexOf(str) : -1;\n    }\n    const listContent = listRef.current;\n    if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n      if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n        setTypingChange(false);\n      } else if (event.key === ' ') {\n        stopEvent(event);\n      }\n    }\n    if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n    // Character key.\n    event.key.length !== 1 ||\n    // Modifier key.\n    event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n    if (open && event.key !== ' ') {\n      stopEvent(event);\n      setTypingChange(true);\n    }\n\n    // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n    // allow it in this case, too.\n    const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n      var _text$, _text$2;\n      return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n    });\n\n    // Allows the user to cycle through items that start with the same letter\n    // in rapid succession.\n    if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n    }\n    stringRef.current += event.key;\n    clearTimeoutIfSet(timeoutIdRef);\n    timeoutIdRef.current = window.setTimeout(() => {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n      setTypingChange(false);\n    }, resetMs);\n    const prevIndex = prevIndexRef.current;\n    const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n    if (index !== -1) {\n      onMatch(index);\n      matchIndexRef.current = index;\n    } else if (event.key !== ' ') {\n      stringRef.current = '';\n      setTypingChange(false);\n    }\n  });\n  const reference = React.useMemo(() => ({\n    onKeyDown\n  }), [onKeyDown]);\n  const floating = React.useMemo(() => {\n    return {\n      onKeyDown,\n      onKeyUp(event) {\n        if (event.key === ' ') {\n          setTypingChange(false);\n        }\n      }\n    };\n  }, [onKeyDown, setTypingChange]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n  return {\n    ...state,\n    rects: {\n      ...state.rects,\n      floating: {\n        ...state.rects.floating,\n        height\n      }\n    }\n  };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nconst inner = props => ({\n  name: 'inner',\n  options: props,\n  async fn(state) {\n    const {\n      listRef,\n      overflowRef,\n      onFallbackChange,\n      offset: innerOffset = 0,\n      index = 0,\n      minItemsVisible = 4,\n      referenceOverflowThreshold = 0,\n      scrollRef,\n      ...detectOverflowOptions\n    } = evaluate(props, state);\n    const {\n      rects,\n      elements: {\n        floating\n      }\n    } = state;\n    const item = listRef.current[index];\n    const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n    // Valid combinations:\n    // 1. Floating element is the scrollRef and has a border (default)\n    // 2. Floating element is not the scrollRef, floating element has a border\n    // 3. Floating element is not the scrollRef, scrollRef has a border\n    // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n    // allowed as VoiceOver doesn't work.\n    const clientTop = floating.clientTop || scrollEl.clientTop;\n    const floatingIsBordered = floating.clientTop !== 0;\n    const scrollElIsBordered = scrollEl.clientTop !== 0;\n    const floatingIsScrollEl = floating === scrollEl;\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!state.placement.startsWith('bottom')) {\n        warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n      }\n    }\n    if (!item) {\n      return {};\n    }\n    const nextArgs = {\n      ...state,\n      ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n    };\n    const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    const refOverflow = await detectOverflow(nextArgs, {\n      ...detectOverflowOptions,\n      elementContext: 'reference'\n    });\n    const diffY = max(0, overflow.top);\n    const nextY = nextArgs.y + diffY;\n    const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n    const rounder = isScrollable ? v => v : round;\n    const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n    scrollEl.style.maxHeight = maxHeight + \"px\";\n    scrollEl.scrollTop = diffY;\n\n    // There is not enough space, fallback to standard anchored positioning\n    if (onFallbackChange) {\n      const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n      ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n    }\n    if (overflowRef) {\n      overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n        ...nextArgs,\n        y: nextY\n      }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    }\n    return {\n      y: nextY\n    };\n  }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nfunction useInnerOffset(context, props) {\n  const {\n    open,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    overflowRef,\n    scrollRef,\n    onChange: unstable_onChange\n  } = props;\n  const onChange = useEffectEvent(unstable_onChange);\n  const controlledScrollingRef = React.useRef(false);\n  const prevScrollTopRef = React.useRef(null);\n  const initialOverflowRef = React.useRef(null);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onWheel(e) {\n      if (e.ctrlKey || !el || overflowRef.current == null) {\n        return;\n      }\n      const dY = e.deltaY;\n      const isAtTop = overflowRef.current.top >= -0.5;\n      const isAtBottom = overflowRef.current.bottom >= -0.5;\n      const remainingScroll = el.scrollHeight - el.clientHeight;\n      const sign = dY < 0 ? -1 : 1;\n      const method = dY < 0 ? 'max' : 'min';\n      if (el.scrollHeight <= el.clientHeight) {\n        return;\n      }\n      if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n        e.preventDefault();\n        ReactDOM.flushSync(() => {\n          onChange(d => d + Math[method](dY, remainingScroll * sign));\n        });\n      } else if (/firefox/i.test(getUserAgent())) {\n        // Needed to propagate scrolling during momentum scrolling phase once\n        // it gets limited by the boundary. UX improvement, not critical.\n        el.scrollTop += dY;\n      }\n    }\n    const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n    if (open && el) {\n      el.addEventListener('wheel', onWheel);\n\n      // Wait for the position to be ready.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n        if (overflowRef.current != null) {\n          initialOverflowRef.current = {\n            ...overflowRef.current\n          };\n        }\n      });\n      return () => {\n        prevScrollTopRef.current = null;\n        initialOverflowRef.current = null;\n        el.removeEventListener('wheel', onWheel);\n      };\n    }\n  }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n  const floating = React.useMemo(() => ({\n    onKeyDown() {\n      controlledScrollingRef.current = true;\n    },\n    onWheel() {\n      controlledScrollingRef.current = false;\n    },\n    onPointerMove() {\n      controlledScrollingRef.current = false;\n    },\n    onScroll() {\n      const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n      if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n        return;\n      }\n      if (prevScrollTopRef.current !== null) {\n        const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n        if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n          ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n        }\n      }\n\n      // [Firefox] Wait for the height change to have been applied.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n      });\n    }\n  }), [elements.floating, onChange, overflowRef, scrollRef]);\n  return React.useMemo(() => enabled ? {\n    floating\n  } : {}, [enabled, floating]);\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n  if (onlyOpenChildren === void 0) {\n    onlyOpenChildren = true;\n  }\n  let allChildren = nodes.filter(node => {\n    var _node$context;\n    return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n  });\n  let currentChildren = allChildren;\n  while (currentChildren.length) {\n    currentChildren = onlyOpenChildren ? nodes.filter(node => {\n      var _currentChildren;\n      return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n        var _node$context2;\n        return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n      });\n    }) : nodes;\n    allChildren = allChildren.concat(currentChildren);\n  }\n  return allChildren;\n}\n\nfunction isPointInPolygon(point, polygon) {\n  const [x, y] = point;\n  let isInside = false;\n  const length = polygon.length;\n  for (let i = 0, j = length - 1; i < length; j = i++) {\n    const [xi, yi] = polygon[i] || [0, 0];\n    const [xj, yj] = polygon[j] || [0, 0];\n    const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) {\n      isInside = !isInside;\n    }\n  }\n  return isInside;\n}\nfunction isInside(point, rect) {\n  return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    buffer = 0.5,\n    blockPointerEvents = false,\n    requireIntent = true\n  } = options;\n  let timeoutId;\n  let hasLanded = false;\n  let lastX = null;\n  let lastY = null;\n  let lastCursorTime = performance.now();\n  function getCursorSpeed(x, y) {\n    const currentTime = performance.now();\n    const elapsedTime = currentTime - lastCursorTime;\n    if (lastX === null || lastY === null || elapsedTime === 0) {\n      lastX = x;\n      lastY = y;\n      lastCursorTime = currentTime;\n      return null;\n    }\n    const deltaX = x - lastX;\n    const deltaY = y - lastY;\n    const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n    const speed = distance / elapsedTime; // px / ms\n\n    lastX = x;\n    lastY = y;\n    lastCursorTime = currentTime;\n    return speed;\n  }\n  const fn = _ref => {\n    let {\n      x,\n      y,\n      placement,\n      elements,\n      onClose,\n      nodeId,\n      tree\n    } = _ref;\n    return function onMouseMove(event) {\n      function close() {\n        clearTimeout(timeoutId);\n        onClose();\n      }\n      clearTimeout(timeoutId);\n      if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n        return;\n      }\n      const {\n        clientX,\n        clientY\n      } = event;\n      const clientPoint = [clientX, clientY];\n      const target = getTarget(event);\n      const isLeave = event.type === 'mouseleave';\n      const isOverFloatingEl = contains(elements.floating, target);\n      const isOverReferenceEl = contains(elements.domReference, target);\n      const refRect = elements.domReference.getBoundingClientRect();\n      const rect = elements.floating.getBoundingClientRect();\n      const side = placement.split('-')[0];\n      const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n      const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n      const isOverReferenceRect = isInside(clientPoint, refRect);\n      const isFloatingWider = rect.width > refRect.width;\n      const isFloatingTaller = rect.height > refRect.height;\n      const left = (isFloatingWider ? refRect : rect).left;\n      const right = (isFloatingWider ? refRect : rect).right;\n      const top = (isFloatingTaller ? refRect : rect).top;\n      const bottom = (isFloatingTaller ? refRect : rect).bottom;\n      if (isOverFloatingEl) {\n        hasLanded = true;\n        if (!isLeave) {\n          return;\n        }\n      }\n      if (isOverReferenceEl) {\n        hasLanded = false;\n      }\n      if (isOverReferenceEl && !isLeave) {\n        hasLanded = true;\n        return;\n      }\n\n      // Prevent overlapping floating element from being stuck in an open-close\n      // loop: https://github.com/floating-ui/floating-ui/issues/1910\n      if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n        return;\n      }\n\n      // If any nested child is open, abort.\n      if (tree && getNodeChildren(tree.nodesRef.current, nodeId).some(_ref2 => {\n        let {\n          context\n        } = _ref2;\n        return context == null ? void 0 : context.open;\n      })) {\n        return;\n      }\n\n      // If the pointer is leaving from the opposite side, the \"buffer\" logic\n      // creates a point where the floating element remains open, but should be\n      // ignored.\n      // A constant of 1 handles floating point rounding errors.\n      if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n        return close();\n      }\n\n      // Ignore when the cursor is within the rectangular trough between the\n      // two elements. Since the triangle is created from the cursor point,\n      // which can start beyond the ref element's edge, traversing back and\n      // forth from the ref to the floating element can cause it to close. This\n      // ensures it always remains open in that case.\n      let rectPoly = [];\n      switch (side) {\n        case 'top':\n          rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n          break;\n        case 'bottom':\n          rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n          break;\n        case 'left':\n          rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n          break;\n        case 'right':\n          rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n          break;\n      }\n      function getPolygon(_ref3) {\n        let [x, y] = _ref3;\n        switch (side) {\n          case 'top':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'bottom':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'left':\n            {\n              const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n              return [...commonPoints, cursorPointOne, cursorPointTwo];\n            }\n          case 'right':\n            {\n              const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n        }\n      }\n      if (isPointInPolygon([clientX, clientY], rectPoly)) {\n        return;\n      }\n      if (hasLanded && !isOverReferenceRect) {\n        return close();\n      }\n      if (!isLeave && requireIntent) {\n        const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n        const cursorSpeedThreshold = 0.1;\n        if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n          return close();\n        }\n      }\n      if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n        close();\n      } else if (!hasLanded && requireIntent) {\n        timeoutId = window.setTimeout(close, 40);\n      }\n    };\n  };\n  fn.__options = {\n    blockPointerEvents\n  };\n  return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, NextFloatingDelayGroup, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useNextDelayGroup, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import React, { useState, useEffect } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport './Administer.css';\r\nimport { \r\n  getAllUsers, \r\n  searchUsers, \r\n  updateUserAuthority,\r\n  getAllDiscounts,\r\n  getCurrentDiscount,\r\n  addDiscount,\r\n  deleteDiscount\r\n} from '../api/administer';\r\nimport {postAnnouncement, getAnnouncements} from '../api/announcement'; \r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\n\r\n\r\nconst Administer = () => {\r\n  const navigate = useNavigate();\r\n  const [users, setUsers] = useState([]);\r\n  const [discounts, setDiscounts] = useState([]);\r\n  const [currentDiscount, setCurrentDiscount] = useState(null);\r\n  const [searchKey, setSearchKey] = useState('');\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState(null);\r\n  const [announcements, setAnnouncements] = useState([]); // 存储公告列表\r\n  const [newAnnouncement, setNewAnnouncement] = useState({\r\n    title: '',\r\n    content: ''\r\n  });\r\n  const [newDiscount, setNewDiscount] = useState({\r\n    name: '',\r\n    discountType: 'FREE'\r\n  });\r\n  const [startDate, setStartDate] = useState(new Date());\r\n  const [endDate, setEndDate] = useState(new Date());\r\n  const [activeTab, setActiveTab] = useState('users'); // 'users' 或 'discounts','announcements'\r\n\r\nconst fetchAllUsers = async () => {\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const users = await getAllUsers();\r\n    console.log(\"API Data:\", users); // 现在应该直接是用户数组\r\n    \r\n    const formattedUsers = users.map(user => ({\r\n      username: user.username || '未知用户',\r\n      authority: user.authority || 'USER',\r\n      registTime: user.registTime || null,\r\n      lastLogin: user.lastLogin || null,\r\n      upload: Number(user.upload) || 0,\r\n      download: Number(user.download) || 0,\r\n      magicPoints: Number(user.magicPoints) || 0,\r\n      shareRate: Number(user.shareRate) || 0\r\n    }));\r\n    \r\n    console.log(\"Formatted Users:\", formattedUsers);\r\n    setUsers(formattedUsers);\r\n  } catch (err) {\r\n    console.error(\"Error details:\", err);\r\n    setError(`获取用户列表失败: ${err.message}`);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n\r\n const handleSearch = async () => {\r\n  if (!searchKey.trim()) {\r\n    fetchAllUsers();\r\n    return;\r\n  }\r\n\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const users = await searchUsers(searchKey);\r\n    console.log(\"Search Results:\", users); // 打印搜索结果\r\n\r\n    // 格式化数据（确保数值字段正确解析）\r\n    const formattedUsers = users.map(user => ({\r\n      username: user.username || '未知用户',\r\n      authority: user.authority || 'USER',\r\n      registTime: user.registTime || null,\r\n      lastLogin: user.lastLogin || null,\r\n      upload: Number(user.upload) || 0,    // 确保解析为数字\r\n      download: Number(user.download) || 0,\r\n      magicPoints: Number(user.magicPoints) || 0,\r\n      shareRate: Number(user.shareRate) || 0\r\n    }));\r\n\r\n    setUsers(formattedUsers);\r\n  } catch (err) {\r\n    setError('搜索用户失败，请重试');\r\n    console.error(err);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n  // 重置搜索\r\n  const handleReset = () => {\r\n    setSearchKey('');\r\n    fetchAllUsers();\r\n  };\r\n\r\n  // 修改用户权限\r\n  const handleChangeAuthority = async (username, newAuthority) => {\r\n    try {\r\n      await updateUserAuthority(username, newAuthority);\r\n      // 更新本地状态\r\n      setUsers(users.map(user => \r\n        user.username === username ? { ...user, authority: newAuthority } : user\r\n      ));\r\n    } catch (err) {\r\n      setError('修改权限失败，请重试');\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n   // 获取所有折扣\r\n  const fetchAllDiscounts = async () => {\r\n    setLoading(true);\r\n    setError(null);\r\n    try {\r\n      const data = await getAllDiscounts();\r\n      setDiscounts(data);\r\n    } catch (err) {\r\n      setError('获取折扣列表失败: ' + err.message);\r\n      console.error(err);\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  // 获取当前折扣\r\n  const fetchCurrentDiscount = async () => {\r\n    try {\r\n      const data = await getCurrentDiscount();\r\n      setCurrentDiscount(data);\r\n    } catch (err) {\r\n      console.error('获取当前折扣失败:', err);\r\n    }\r\n  };\r\n\r\n    const handleAddDiscount = async () => {\r\n  if (!newDiscount.name || !startDate || !endDate) {\r\n    setError('请填写所有必填字段');\r\n    return;\r\n  }\r\n\r\n  try {\r\n    // 验证时间\r\n    if (startDate >= endDate) {\r\n      setError('结束时间必须晚于开始时间');\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      name: newDiscount.name,\r\n      startTime: formatDateToISO(startDate), // 例如: \"2025-06-01T14:30:00\"\r\n      endTime: formatDateToISO(endDate, true), // 例如: \"2025-06-01T18:45:59\"\r\n      discountType: newDiscount.discountType\r\n    };\r\n\r\n    console.log('提交数据:', payload); // 调试用\r\n\r\n    await addDiscount(payload);\r\n    \r\n    // 重置表单\r\n    setNewDiscount({\r\n      name: '',\r\n      discountType: 'FREE'\r\n    });\r\n    setStartDate(new Date());\r\n    setEndDate(new Date());\r\n    \r\n    fetchAllDiscounts();\r\n    setError(null);\r\n  } catch (err) {\r\n    setError('添加折扣失败: ' + err.message);\r\n    console.error(err);\r\n  }\r\n};\r\n\r\nconst formatDateToISO = (date, isEndTime = false) => {\r\n  if (!date) return '';\r\n  \r\n  const pad = (num) => num.toString().padStart(2, '0');\r\n  \r\n  const year = date.getFullYear();\r\n  const month = pad(date.getMonth() + 1);\r\n  const day = pad(date.getDate());\r\n  const hours = pad(date.getHours());\r\n  const minutes = pad(date.getMinutes());\r\n  \r\n  if (isEndTime) {\r\n    // 结束时间精确到用户选择的时间+59秒\r\n    return `${year}-${month}-${day}T${hours}:${minutes}:59`;\r\n  } else {\r\n    // 开始时间精确到用户选择的时间+00秒\r\n    return `${year}-${month}-${day}T${hours}:${minutes}:00`;\r\n  }\r\n};\r\n\r\n  // 删除折扣\r\n  const handleDeleteDiscount = async (id) => {\r\n    try {\r\n      await deleteDiscount(id);\r\n      fetchAllDiscounts();\r\n    } catch (err) {\r\n      setError('删除折扣失败: ' + err.message);\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  \r\n\r\n  // 格式化分享率为百分比\r\n  const formatShareRate = (rate) => {\r\n    return (rate * 100).toFixed(2) + '%';\r\n  };\r\n\r\n  // 格式化日期\r\n  const formatDate = (date) => {\r\n    if (!date) return '-';\r\n    return new Date(date).toLocaleDateString();\r\n  };\r\n    // 格式化日期\r\n  const formatDateTime = (dateTime) => {\r\n    if (!dateTime) return '-';\r\n    return new Date(dateTime).toLocaleString();\r\n  };\r\n\r\n    // 折扣类型翻译\r\n  const translateDiscountType = (type) => {\r\n    switch (type) {\r\n      case 'FREE': return '全部免费';\r\n      case 'HALF': return '半价下载';\r\n      case 'DOUBLE': return '双倍上传';\r\n      default: return type;\r\n    }\r\n  };\r\n\r\n  // 获取所有公告\r\n  const fetchAllAnnouncements = async () => {\r\n  setLoading(true);\r\n  setError(null);\r\n  try {\r\n    const announcements = await getAnnouncements();\r\n    // 确保总是设置为数组\r\n    setAnnouncements(Array.isArray(announcements) ? announcements : []);\r\n  } catch (err) {\r\n    setError('获取公告列表失败: ' + err.message);\r\n    console.error(err);\r\n  } finally {\r\n    setLoading(false);\r\n  }\r\n};\r\n\r\n  // 发布新公告\r\n  const handlePostAnnouncement = async () => {\r\n    if (!newAnnouncement.title || !newAnnouncement.content) {\r\n      setError('请填写公告标题和内容');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      await postAnnouncement(newAnnouncement);\r\n      setNewAnnouncement({ title: '', content: '' });\r\n      fetchAllAnnouncements();\r\n      setError(null);\r\n    } catch (err) {\r\n      setError('发布公告失败: ' + err.message);\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  // 初始化加载数据\r\n  useEffect(() => {\r\n    if (activeTab === 'users') {\r\n      fetchAllUsers();\r\n    } else if (activeTab === 'discounts') {\r\n      fetchAllDiscounts();\r\n      fetchCurrentDiscount();\r\n    } else if (activeTab === 'announcements') {\r\n      fetchAllAnnouncements();\r\n    }\r\n  }, [activeTab]);\r\n\r\n  \r\n\r\n\r\n  return (\r\n    <div className=\"administer-container\">\r\n      <h1>系统管理</h1>\r\n\r\n      {/* 选项卡切换 */}\r\n      <div className=\"tab-container\">\r\n        <button \r\n          className={`tab-button ${activeTab === 'users' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('users')}\r\n        >\r\n          用户管理\r\n        </button>\r\n        <button \r\n          className={`tab-button ${activeTab === 'discounts' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('discounts')}\r\n        >\r\n          折扣管理\r\n        </button>\r\n        <button \r\n          className={`tab-button ${activeTab === 'announcements' ? 'active' : ''}`}\r\n          onClick={() => setActiveTab('announcements')}\r\n        >\r\n          公告管理\r\n        </button>\r\n      </div>\r\n\r\n      {activeTab === 'users' ? (\r\n        <>\r\n            {/* 搜索框 */}\r\n            <div className=\"search-container\">\r\n                <input\r\n                type=\"text\"\r\n                value={searchKey}\r\n                onChange={(e) => setSearchKey(e.target.value)}\r\n                placeholder=\"输入用户名搜索\"\r\n                className=\"search-input\"\r\n                />\r\n                <button onClick={handleSearch} className=\"search-button\">\r\n                搜索\r\n                </button>\r\n                <button onClick={handleReset} className=\"reset-button\">\r\n                重置\r\n                </button>\r\n            </div>\r\n\r\n            {/* 错误提示 */}\r\n            {error && <div className=\"error-message\">{error}</div>}\r\n\r\n            {/* 加载状态 */}\r\n            {loading && <div className=\"loading-message\">加载中...</div>}\r\n\r\n            {/* 用户列表 */}\r\n            <div className=\"user-list-container\">\r\n                <table className=\"user-table\">\r\n                <thead>\r\n                    <tr>\r\n                    <th>用户名</th>\r\n                    <th>注册时间</th>\r\n                    <th>最后登录</th>\r\n                    <th>上传量</th>\r\n                    <th>下载量</th>\r\n                    <th>分享率</th>\r\n                    <th>魔力值</th>\r\n                    <th>权限</th>\r\n                    <th>操作</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {Array.isArray(users) && users.map((user) => (\r\n                    <tr key={user.username}>\r\n                        <td>{user.username}</td>\r\n                        <td>{formatDate(user.registTime)}</td>\r\n                        <td>{formatDate(user.lastLogin)}</td>\r\n                        <td>{user.upload}</td>\r\n                        <td>{user.download}</td>\r\n                        <td>{formatShareRate(user.shareRate)}</td>\r\n                        <td>{user.magicPoints}</td>\r\n                        <td>{user.authority}</td>\r\n                        <td>\r\n                        <select\r\n                            value={user.authority}\r\n                            onChange={(e) => handleChangeAuthority(user.username, e.target.value)}\r\n                            className=\"authority-select\"\r\n                        >\r\n                            <option value=\"USER\">普通用户</option>\r\n                            <option value=\"ADMIN\">管理员</option>\r\n                            <option value=\"LIMIT\">受限用户</option>\r\n                            <option value=\"BAN\">封禁用户</option>\r\n                        </select>\r\n                        </td>\r\n                    </tr>\r\n                    ))}\r\n                </tbody>\r\n                </table>\r\n            </div>\r\n        </>\r\n      ) : activeTab === 'discounts' ? (\r\n          /* 新增的折扣管理部分 */\r\n          <>\r\n            {/* 当前活动折扣 */}\r\n            <div className=\"current-discount-section\">\r\n              <h3>当前活动折扣</h3>\r\n              {currentDiscount ? (\r\n                <div className=\"current-discount-card\">\r\n                  <p><strong>名称:</strong> {currentDiscount.name}</p>\r\n                  <p><strong>类型:</strong> {translateDiscountType(currentDiscount.discountType)}</p>\r\n                  <p><strong>时间:</strong> {formatDateTime(currentDiscount.startTime)} 至 {formatDateTime(currentDiscount.endTime)}</p>\r\n                  <p><strong>状态:</strong> {currentDiscount.status}</p>\r\n                </div>\r\n              ) : (\r\n                <p>当前没有进行中的折扣</p>\r\n              )}\r\n            </div>\r\n\r\n            {/* 添加新折扣表单 */}\r\n            <div className=\"add-discount-form\">\r\n              <h3>添加新折扣</h3>\r\n              <div className=\"form-group\">\r\n                <label>折扣名称:</label>\r\n                <input\r\n                  type=\"text\"\r\n                  value={newDiscount.name}\r\n                  onChange={(e) => setNewDiscount({...newDiscount, name: e.target.value})}\r\n                />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                  <label>开始时间:</label>\r\n                  <DatePicker\r\n                    selected={startDate}\r\n                    onChange={(date) => setStartDate(date)}\r\n                    showTimeSelect\r\n                    timeFormat=\"HH:mm\"\r\n                    timeIntervals={1} // 1分钟间隔\r\n                    dateFormat=\"yyyy-MM-dd HH:mm\"\r\n                    minDate={new Date()}\r\n                    placeholderText=\"选择开始日期和时间\"\r\n                  />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                    <label>结束时间:</label>\r\n                    <DatePicker\r\n                      selected={endDate}\r\n                      onChange={(date) => setEndDate(date)}\r\n                      showTimeSelect\r\n                      timeFormat=\"HH:mm\"\r\n                      timeIntervals={1} // 1分钟间隔\r\n                      dateFormat=\"yyyy-MM-dd HH:mm\"\r\n                      minDate={startDate}\r\n                      placeholderText=\"选择结束日期和时间\"\r\n                    />\r\n              </div>\r\n              <div className=\"form-group\">\r\n                <label>折扣类型:</label>\r\n                <select\r\n                  value={newDiscount.discountType}\r\n                  onChange={(e) => setNewDiscount({...newDiscount, discountType: e.target.value})}\r\n                >\r\n                  <option value=\"FREE\">全部免费</option>\r\n                  <option value=\"HALF\">半价下载</option>\r\n                  <option value=\"DOUBLE\">双倍上传</option>\r\n                </select>\r\n              </div>\r\n              <button \r\n                  onClick={(e) => {\r\n                      e.preventDefault(); // 确保没有阻止默认行为\r\n                      handleAddDiscount();\r\n                  }}\r\n                  >\r\n                  添加折扣\r\n              </button>\r\n            </div>\r\n\r\n            {/* 所有折扣列表 */}\r\n            <div className=\"discount-list-container\">\r\n              <h3>所有折扣计划</h3>\r\n              <table className=\"discount-table\">\r\n                <thead>\r\n                  <tr>\r\n                    <th>ID</th>\r\n                    <th>名称</th>\r\n                    <th>开始时间</th>\r\n                    <th>结束时间</th>\r\n                    <th>类型</th>\r\n                    <th>创建时间</th>\r\n                    <th>状态</th>\r\n                    <th>操作</th>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  {discounts.map(discount => (\r\n                    <tr key={discount.id}>\r\n                      <td>{discount.id}</td>\r\n                      <td>{discount.name}</td>\r\n                      <td>{formatDateTime(discount.startTime)}</td>\r\n                      <td>{formatDateTime(discount.endTime)}</td>\r\n                      <td>{translateDiscountType(discount.discountType)}</td>\r\n                      <td>{formatDateTime(discount.createTime)}</td>\r\n                      <td>{discount.status || '未知'}</td>\r\n                      <td>\r\n                        <button \r\n                          onClick={() => handleDeleteDiscount(discount.id)}\r\n                          className=\"delete-button\"\r\n                        >\r\n                          删除\r\n                        </button>\r\n                      </td>\r\n                    </tr>\r\n                  ))}\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n          </>\r\n        ) : (\r\n        /* 新增的公告管理部分 */\r\n        <>\r\n          {/* 发布新公告表单 */}\r\n          <div className=\"announcement-form\">\r\n            <h3>发布新公告</h3>\r\n            <div className=\"form-group\">\r\n              <label>公告标题:</label>\r\n              <input\r\n                type=\"text\"\r\n                value={newAnnouncement.title}\r\n                onChange={(e) => setNewAnnouncement({\r\n                  ...newAnnouncement,\r\n                  title: e.target.value\r\n                })}\r\n                placeholder=\"输入公告标题\"\r\n              />\r\n            </div>\r\n            <div className=\"form-group\">\r\n              <label>公告内容:</label>\r\n              <textarea\r\n                value={newAnnouncement.content}\r\n                onChange={(e) => setNewAnnouncement({\r\n                  ...newAnnouncement,\r\n                  content: e.target.value\r\n                })}\r\n                rows=\"5\"\r\n                placeholder=\"输入公告内容\"\r\n              />\r\n            </div>\r\n            <button onClick={handlePostAnnouncement}>\r\n              发布公告\r\n            </button>\r\n          </div>\r\n\r\n          {/* 所有公告列表 */}\r\n          <div className=\"announcement-list-container\">\r\n            <h3>所有公告</h3>\r\n            <table className=\"announcement-table\">\r\n              <thead>\r\n                <tr>\r\n                  <th>标题</th>\r\n                  <th>内容</th>\r\n                  <th>发布时间</th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                {announcements.map(announcement => (\r\n                  <tr key={announcement.id}>\r\n                    <td>{announcement.title}</td>\r\n                    <td>{announcement.content}</td>\r\n                    <td>{formatDateTime(announcement.createTime)}</td>\r\n                  </tr>\r\n                ))}\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Administer;","// src/App.jsx\r\nimport React from 'react';\r\nimport { \r\n  BrowserRouter as Router,\r\n  Routes,\r\n  Route,\r\n  Navigate\r\n} from 'react-router-dom';\r\nimport Dashboard from './components/Dashboard';\r\nimport Personal from './components/Personal/Personal';\r\nimport AuthForm from './components/AuthForm';\r\nimport AnnouncementDetail from './components/AnnouncementDetail';\r\n\r\nimport TorrentDetail from './components/TorrentDetail'; // 确保路径正确\r\nimport RequestDetail from './components/RequestDetail';\r\nimport HelpDetail from './components/HelpDetail';\r\nimport Exchange from './components/Personal/Exchange';\r\nimport Upload from './components/Personal/Upload';\r\nimport Notice from './components/Personal/Notice';\r\nimport Setting from './components/Personal/Setting';\r\nimport Administer from './components/Administer';\r\n\r\nimport './App.css';\r\n\r\nfunction App() {\r\n  // 每次应用启动时强制清除 token\r\n  React.useEffect(() => {\r\n    localStorage.removeItem('token');\r\n    console.log('Token cleared on app startup');\r\n    localStorage.removeItem('username');\r\n  }, []); // 空依赖数组表示只在组件挂载时执行一次\r\n\r\n  const [isAuthenticated, setIsAuthenticated] = React.useState(\r\n    false\r\n  );\r\n\r\n  const handleLoginSuccess = (token) => {\r\n    setIsAuthenticated(true);\r\n  };\r\n\r\n  const handleLogout = () => {\r\n    localStorage.removeItem('token');\r\n    setIsAuthenticated(false);\r\n  };\r\n\r\n  return (\r\n    <Router>\r\n      <Routes>\r\n        {/* 修改点1：根路径强制跳转到登录页 */}\r\n        <Route path=\"/\" element={<Navigate to=\"/login\" replace />} />\r\n\r\n        {/* 登录页 */}\r\n        <Route path=\"/login\" element={\r\n          isAuthenticated ? (\r\n            <Navigate to=\"/dashboard\" replace />\r\n          ) : (\r\n            <AuthForm onLoginSuccess={handleLoginSuccess} />\r\n          )\r\n        } />\r\n\r\n        {/* 主面板 */}\r\n        <Route path=\"/dashboard/:tab?\" element={\r\n          isAuthenticated ? (\r\n            <Dashboard onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 公告详情 */}\r\n        <Route path=\"/announcement/:id\" element={\r\n          isAuthenticated ? (\r\n            <AnnouncementDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 个人中心及子功能页面 */}\r\n        <Route path=\"/personal\" element={\r\n          isAuthenticated ? <Personal onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/exchange\" element={\r\n          isAuthenticated ? <Exchange onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/upload\" element={\r\n          isAuthenticated ? <Upload onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/notice\" element={\r\n          isAuthenticated ? <Notice onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n        <Route path=\"/personal/setting\" element={\r\n          isAuthenticated ? <Setting onLogout={handleLogout} /> : <Navigate to=\"/login\" replace />\r\n        } />\r\n\r\n        \r\n        {/* 404 重定向 */}\r\n        <Route path=\"*\" element={\r\n          isAuthenticated ? (\r\n            <Navigate to=\"/dashboard\" replace />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 新增管理员中心路由 */}\r\n        <Route path=\"/administer\" element={\r\n          isAuthenticated ? (\r\n            <Administer onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 求种区 */}\r\n        <Route path=\"/request/:id\" element={\r\n          isAuthenticated ? (\r\n            <RequestDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        {/* 求助区 */}\r\n        <Route path=\"/help/:id\" element={\r\n          isAuthenticated ? (\r\n            <HelpDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n        <Route path=\"/torrent/:id\" element={\r\n          isAuthenticated ? (\r\n            <TorrentDetail onLogout={handleLogout} />\r\n          ) : (\r\n            <Navigate to=\"/login\" replace />\r\n          )\r\n        } />\r\n\r\n\r\n\r\n      </Routes>\r\n\r\n      \r\n    </Router>\r\n  );\r\n}\r\n\r\nexport default App;","const reportWebVitals = onPerfEntry => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","// 1. 首先放所有 import 语句\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport process from 'process/browser';  // 新增\r\nimport { Buffer } from 'buffer';        // 新增\r\n\r\n// 2. 然后放 polyfill 代码\r\nif (typeof window.process === 'undefined') {\r\n  window.process = process;\r\n}\r\nif (typeof window.Buffer === 'undefined') {\r\n  window.Buffer = Buffer;\r\n}\r\n\r\n// 3. 最后放应用逻辑\r\nconst root = ReactDOM.createRoot(document.getElementById('root'));\r\nroot.render(\r\n  <React.StrictMode>\r\n    <App />\r\n  </React.StrictMode>\r\n);\r\n\r\nreportWebVitals();"],"names":["hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","appendClass","parseValue","Array","isArray","apply","toString","Object","prototype","includes","key","call","value","newClass","module","exports","default","u","b","Symbol","for","c","d","e","f","g","h","k","l","m","n","p","q","t","v","a","r","$$typeof","type","ForwardRef","isMemo","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","code","Error","indexOf","start","end","num","output","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","base64","require","ieee754","customInspectSymbol","Buffer","K_MAX_LENGTH","createBuffer","RangeError","buf","setPrototypeOf","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","obj","isBuffer","checked","undefined","numberIsNaN","data","fromObject","toPrimitive","assertSize","size","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","val","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","alloc","fill","allocUnsafeSlow","_isBuffer","compare","x","y","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","Scheduler","React","ReactDOM","formatProdErrorMessage","url","encodeURIComponent","isValidContainer","node","nodeType","getNearestMountedFiber","fiber","nearestMounted","alternate","return","flags","tag","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentHostFiberImpl","child","sibling","assign","REACT_LEGACY_ELEMENT_TYPE","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","MAYBE_ITERATOR_SYMBOL","iterator","getIteratorFn","maybeIterable","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","_context","innerType","render","_payload","_init","isArrayImpl","ReactSharedInternals","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","ReactDOMSharedInternals","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","sharedNotPendingObject","pending","method","action","valueStack","index","createCursor","defaultValue","current","pop","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","context","JSCompiler_inline_result","popHostContext","HostTransitionContext","_currentValue","scheduleCallback$3","unstable_scheduleCallback","cancelCallback$1","unstable_cancelCallback","shouldYield","unstable_shouldYield","requestPaint","unstable_requestPaint","now","unstable_now","getCurrentPriorityLevel","unstable_getCurrentPriorityLevel","ImmediatePriority","unstable_ImmediatePriority","UserBlockingPriority","unstable_UserBlockingPriority","NormalPriority$1","unstable_NormalPriority","LowPriority","unstable_LowPriority","IdlePriority","unstable_IdlePriority","log$1","log","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","err","clz32","LN2","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","currentTime","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$6","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","window","event","getEventPriority","randomKey","random","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","Map","hoistableScripts","markNodeAsHoistable","allNativeEvents","Set","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","add","prefix","suffix","VALID_ATTRIBUTE_NAME_REGEX","RegExp","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","test","removeAttribute","prefix$8","setAttribute","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","describeBuiltInComponentFrame","match","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","Reflect","control","x$9","x$10","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","getStackByFiberInDevAndProd","workInProgress","info","getToStringValue","isCheckable","elem","nodeName","track","_valueTracker","valueField","descriptor","currentValue","getValue","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","document","activeElement","body","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","ch","updateInput","element","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","options","selected","defaultSelected","disabled","updateTextarea","initTextarea","children","textContent","setTextContent","text","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","style","styleName","isCustomProperty","setProperty","cssFloat","has","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","props","querySelectorAll","otherNode","form","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","createElement","passiveBrowserEventsSupported","addEventListener","removeEventListener","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","propName","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","bubbles","cancelable","timeStamp","Date","isTrusted","SyntheticEvent","UIEventInterface","view","detail","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","location","repeat","locale","which","SyntheticPointerEvent","pointerId","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","color","date","datetime","email","month","number","password","search","tel","time","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$282","isSupported$jscomp$inline_417","element$jscomp$inline_418","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","is","shallowEqual","objA","objB","keysA","keys","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","contains","compareDocumentPosition","getActiveElementDeep","containerInfo","defaultView","HTMLIFrameElement","contentWindow","href","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","CapturedStacks","WeakMap","createCapturedValueAtFiber","source","existing","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","update","next","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","parent","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","mode","elementType","refCleanup","ref","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","Component","isReactComponent","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","hostContext","itemProp","precedence","rel","onLoad","onError","async","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","content","createFiberFromPortal","portal","pendingChildren","implementation","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","noop$1","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratable","isSingletonScope","previousHydratableOnEnteringScopedSingleton","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","signal","aborted","listener","abort","forEach","scheduleCallback$2","NormalPriority","CacheContext","Consumer","Provider","_currentValue2","_threadCount","createCache","controller","refCount","releaseCache","cache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","status","prevOnStartTransitionFinish","S","then","thenable","entangledListeners","requestTransitionLane","resolve","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","reason","shellSuspendCounter","fulfilledValue","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","rejectedReason","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","payload","callback","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","clone","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter$1","thenableState$1","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","H","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useState","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","use","usable","useMemoCache","map","basicStateReducer","state","updateReducer","reducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$32","revertLane","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","isHydrating$jscomp$0","snapshotChanged","updateEffectImpl","subscribeToStore","bind","pushSimpleEffect","destroy","resource","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialState","initialStateInitializer","updateOptimisticImpl","passthrough","dispatchActionState","actionQueue","setPendingState","setState","isRenderPhaseUpdate","actionNode","isTransition","T","runActionStateAction","prevState","prevTransition","currentTransition","onStartTransitionFinish","handleActionReturnValue","onActionError","error$38","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","create","createDeps","deps","updateRef","mountEffectImpl","fiberFlags","hookFlags","mountEffect","updateEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","initialValue","requestDeferredLane","updateDeferredValueImpl","prevValue","startTransition","pendingState","finishedState","previousPriority","dispatchSetStateInternal","result","thenableWithOverride","chainThenableValue","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateId","updateRefresh","refreshCache","provider","root$41","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","useCallback","useContext","useEffect","useImperativeHandle","useLayoutEffect","useInsertionEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useSyncExternalStore","useId","useFormState","useActionState","useOptimistic","useCacheRefresh","initialArg","init","identifierPrefix","booleanOrThenable","thenableIndexCounter","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","delete","reconcileChildrenArray","step","done","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","row","isSuspenseInstanceFallback","revealOrder","applyDerivedStateFromProps","ctor","getDerivedStateFromProps","nextProps","classComponentUpdater","enqueueSetState","_reactInternals","enqueueReplaceState","enqueueForceUpdate","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","isPureReactComponent","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","defaultProps","propName$73","reportGlobalError","reportError","ErrorEvent","dispatchEvent","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","markRef","replayFunctionComponent","updateClassComponent","contextType","updater","refs","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","id","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","_pendingMarkers","_retryCache","_transitions","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","beginWork","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","lazyComponent","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","getAttribute","crossOrigin","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","markUpdate","preloadResourceAndSuspendIfNeeded","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$113","bubbleProperties","completedWork","didBailout","newChildLanes","child$114","completeWork","pendingContext","createElementNS","innerHTML","removeChild","appendChild","autoFocus","createTextNode","cache$127","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$143","commitHostMount","focus","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$205","propKey$221","propKey$226","propKey$231","setPropOnCustomElement","propKey$236","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$142","commitSuspenseHydrationCallbacks","readyState","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","count","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearSuspenseBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","head","querySelector","maybeNodes","getHydratableHoistableCache","splice","property","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","display","hostParentFiber","parent$144","parent$146","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendedState","media","matchMedia","matches","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","Promise","reject","onload","onerror","stylesheets","preload","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$169","handleThrow","A","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","unsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$4","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$2","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$167","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$5","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","extend","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","wasDelayedCommit","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$174","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","prev","scheduleTaskForRootDuringMicrotask","index$3","expirationTime","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1528","eventName$jscomp$inline_1529","toUpperCase","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","container","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","char","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","unshift","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","isNaN","endsWith","hasSrc","hasSrcSet","propValue$188","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","possiblePreambleContribution","depth","nextNode","nextNode$jscomp$0","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","D","preconnectAs","C","L","as","globalDocument","preloadSelector","imageSrcSet","imageSizes","getScriptKey","getScriptSelectorFromKey","X","scripts","adoptPreloadPropsForScript","link","insertStylesheet","M","limitedEscapedHref","currentProps","preloadProps","styles$244","resource$245","integrity","hrefLang","referrerPolicy","rawProps","styleProps","instance$250","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","priority","runWithPriority","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","shift","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1785","findDOMNode","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2256","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","hook$jscomp$inline_2257","isDisabled","supportsFiber","inject","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","ReactNoopUpdateQueue","isMounted","emptyObject","ComponentDummy","PureComponent","partialState","forceUpdate","pureComponentPrototype","V","ReactElement","self","isValidElement","object","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","escape","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","nextNamePrefix","resolveThenable","mapChildren","func","lazyInitializer","_status","_result","moduleObject","Children","forEachFunc","forEachContext","toArray","only","Fragment","Profiler","StrictMode","Suspense","__COMPILER_RUNTIME","__proto__","cloneElement","config","childArray","createContext","childrenLength","createRef","forwardRef","lazy","memo","scope","unstable_useCacheRefresh","permalink","Context","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","right","diff","sortIndex","performance","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","setImmediate","advanceTimers","timer","startTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","channel","port","port2","port1","onmessage","postMessage","ms","unstable_Profiling","task","unstable_forceFrameRate","fps","unstable_next","eventHandler","unstable_runWithPriority","delay","unstable_wrapCallback","parentPriorityLevel","jsxProd","maybeKey","jsx","jsxs","checkDCE","Internals","getCrossOriginStringAs","createPortal","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","prefetchDNS","preinit","fetchPriority","nonce","preinitModule","preloadModule","requestFormReset","unstable_batchedUpdates","useFormStatus","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","s","NaN","rt","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","ns","def","getOwnPropertyNames","definition","o","chunkId","all","reduce","promises","miniCssF","prop","inProgress","dataWebpackPrefix","script","needAttach","charset","nc","onScriptComplete","doneFns","toStringTag","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","Action","PopStateEventType","invariant","warning","cond","warn","getHistoryState","usr","idx","createLocation","to","_extends","pathname","hash","parsePath","createPath","_ref","charAt","path","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","v5Compat","globalHistory","history","Pop","getIndex","handlePop","nextIndex","delta","createURL","base","origin","URL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","sort","score","siblings","every","compareIndexes","routesMeta","meta","childrenIndex","rankRouteBranches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","startsWith","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","segments","rest","isOptional","required","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","filter","segment","branch","matchedParams","matchedPathname","remainingPathname","matchPath","params","pathnameBase","normalizePathname","pattern","matcher","compiledParams","regexpSource","_","paramName","compilePath","captureGroups","splatValue","decodeURIComponent","startIndex","nextChar","getInvalidPathError","field","dest","JSON","stringify","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","isRouteErrorResponse","statusText","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","cb","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","future","navigator","routePathnamesJson","UNSAFE_getResolveToMatches","parse","relative","useNavigateUnstable","OutletContext","useParams","routeMatch","useRoutesImpl","dataRouterState","isStatic","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","padding","backgroundColor","fontStyle","defaultErrorElement","RenderErrorBoundary","revalidation","routeContext","component","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState","_future","v7_partialHydration","initialized","errorIndex","findIndex","renderFallback","fallbackIndex","HydrateFallback","hydrateFallbackElement","loaderData","needsToRunLoader","loader","reduceRight","shouldRenderHydrateFallback","alreadyWarned$1","getChildren","hookName","ctx","useRouteContext","thisRoute","logV6DeprecationWarnings","renderFuture","routerFuture","v7_startTransition","v7_fetcherPersist","v7_normalizeFormMethod","v7_skipActionErrorRevalidation","Navigate","_ref4","jsonPath","Outlet","useOutlet","Route","_props","Router","_ref5","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","handle","__reactRouterVersion","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","UNSAFE_logV6DeprecationWarnings","toPropertyKey","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptors","defineProperties","thisArg","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","findKey","_key","_global","globalThis","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","descriptors","reducedDescriptors","isAsyncFn","_setImmediate","setImmediateSupported","postMessageSupported","token","_ref2","asap","isFormData","kind","append","isArrayBufferView","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","position","lastIndex","forEachEntry","_iterator","pair","matchAll","regExp","exec","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toFiniteNumber","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","isIterable","AxiosError","response","captureStackTrace","utils","description","fileName","lineNumber","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","predicates","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","isFlatArray","el","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serialize","serializeFn","serializedParams","hashmarkIndex","handlers","fulfilled","rejected","synchronous","runWhen","eject","clear","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isBrowser","URLSearchParams","protocols","hasBrowserEnv","_navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","_objectSpread","platform","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parser","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","substring","parseHeaders","entry","tokens","tokensRE","parseTokens","deleted","deleteHeader","normalize","format","normalized","w","formatHeader","_len","targets","asStrings","getSetCookie","computed","_len2","_key2","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","round","freq","lastArgs","timestamp","threshold","invoke","flush","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","speedometer","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","progressEventDecorator","throttled","asyncDecorator","isMSIE","protocol","host","userAgent","expires","domain","secure","cookie","toGMTString","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","btoa","username","unescape","Boolean","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","parseProtocol","send","composeSignals","signals","_OverloadYield","_wrapAsyncGenerator","AsyncGenerator","resume","_invoke","_awaitAsyncGenerator","_asyncGeneratorDelegate","pump","_asyncIterator","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","streamChunk","chunk","chunkSize","readBytes","iterable","_iteratorError","_iteratorAbruptCompletion","_didIteratorError","_step","readStream","_x","_x2","stream","reader","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","close","loadedBytes","enqueue","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","_request","getBodyLength","fetchOptions","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","knownAdapters","http","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","opt","desc","opts","ERR_DEPRECATED","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","spread","isAxiosError","formToJSON","getAdapter","api","localStorage","getItem","Authorization","getUserInfo","searchTorrents","keyword","page","getHelpPostDetail","postId","getRequestPostDetail","_arrayLikeToArray","_iterableToArray","_unsupportedIterableToArray","_toConsumableArray","AppConfigContext","defaultPrefixCls","defaultIconPrefixCls","ConfigContext","getPrefixCls","defaultGetPrefixCls","suffixCls","customizePrefixCls","iconPrefixCls","ConfigConsumer","_arrayWithHoles","_nonIterableRest","canUseDom","APPEND_ORDER","APPEND_PRIORITY","containerCache","getMark","mark","getContainer","attachTo","findStyles","injectCSS","css","csp","prepend","_option$priority","mergedOrder","getOrder","isPrependQueue","styleNode","existStyle","nodePriority","findExistNode","find","removeCSS","existNode","updateCSS","originOption","cachedRealContainer","placeholderStyle","syncRealContainer","_option$csp","_option$csp2","_option$csp3","newNode","condition","shouldUpdate","cacheRef","warned","preWarningFns","valid","note","warningOnce","preMessage","resetWarned","noteOnce","obj1","obj2","shallow","refSet","deepEqual","level","circular","newLevel","_typeof","_defineProperties","pathKey","Entity","instanceId","_classCallCheck","_defineProperty","_createClass","opGet","keyPathStr","valueFn","opUpdate","ATTR_TOKEN","ATTR_MARK","CSS_IN_JS_INSTANCE","cssinjsInstanceId","styleHash","_style$parentNode","CacheEntity","StyleContext","hashPriority","defaultCache","CALC_UNIT","ThemeCache","cacheCallTimes","derivativeOption","_cache2","_cache3","updateCallTimes","derivative","_cache","_this$internalGet","internalGet","_this","MAX_CACHE_SIZE","MAX_CACHE_OFFSET","_this$keys$reduce","callTimes","_slicedToArray","cacheValue","currentCache","derivatives","_cache$value","deleteByPath","item","sameDerivativeOption","uuid","Theme","cacheThemes","createTheme","derivativeArr","resultCache","RESULT_VALUE","flattenTokenCache","flattenToken","token2key","salt","isClientSide","unit","toStyleStr","tokenKey","styleId","_objectSpread2","attrs","attrStr","attr","token2CSSVar","serializeCSSVar","cssVars","hashId","transformToken","themeKey","_ref3","_config$preserve","_config$ignore","preserve","ignore","_config$unitless","cssVar","unitless","useInternalLayoutEffect","firstMountRef","renderEffect","effect","effectCleanups","cleanupFlag","useGlobalCache","keyPath","cacheFn","onCacheRemove","onCacheEffect","globalCache","fullPathStr","register","useEffectCleanupRegister","buildCache","useHMR","prevCache","_ref2$","cacheContent","useCompatibleInsertionEffect","polyfill","times","_ref6$","EMPTY_OVERRIDE","tokenKeys","cleanTokenStyle","tokenKeyList","cleanableKeyList","removeStyleTags","TOKEN_PREFIX","useCacheToken","theme","_useContext","_option$salt","_option$override","override","formatToken","compute","getComputedToken","mergedToken","dep","memoResult","tokenStr","overrideTokenStr","cssVarStr","cachedToken","_cssVar$key","mergedDerivativeToken","originToken","overrideToken","getDerivativeToken","actualToken","cssVarsStr","_transformToken2","_tokenKey","_themeKey","recordCleanToken","_hashId","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","COMMENT","RULESET","DECLARATION","replacement","indexof","charat","begin","strlen","column","character","characters","caret","dealloc","delimit","whitespace","escaping","commenter","identifier","compile","rule","rules","rulesets","pseudo","points","declarations","atrule","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","sizeof","z","cachePathMap","ATTR_CACHE_MAP","CSS_FILE_STYLE","fromCSSFile","existPath","div","className","visibility","getComputedStyle","_item$split2","_inlineMapStyle$paren","inlineMapStyle","prepare","MULTI_VALUE","normalizeStyle","styleStr","injectSelectorHash","hashClassName","hashSelector","_firstPath$match","fullPath","firstPath","htmlElement","parseStyle","interpolation","parentSelectors","injectHash","layer","_config$transformers","transformers","linters","effectStyle","parseKeyframes","keyframes","getName","_parsedStr","flattenStyleList","flattenList","fullList","originStyle","_keyframe","mergedStyle","trans","_trans$visit","isCompoundCSSProperty","appendStyle","cssKey","cssValue","formatValue","actualValue","subInjectHash","mergedKey","nextRoot","_parseStyle4","_parsedStr2","childEffectStyle","uniqueHash","Empty","STYLE_PREFIX","useStyleRegister","styleFn","clientOnly","_info$order","_React$useContext","autoClear","mock","ssrInline","enableLayer","isMergedClientSide","_useGlobalCache","cachePath","_getStyleAndHash","_style","getStyleAndHash","_getStyleAndHash2","inlineCacheStyleStr","styleObj","_parseStyle6","parsedStyle","fromHMR","mergedCSSConfig","nonceStr","effectLayerKeys","effectRestKeys","effectKey","_useGlobalCache2","cachedStyleStr","cachedTokenKey","cachedStyleId","CSS_VAR_PREFIX","_config$scope","stylePath","_ExtractStyleFns","effectStyles","plain","keyStyleText","sharedAttrs","effectStyleHTML","realToken","cssVarKey","Keyframe","noSplit","notSplit","entity","internalSet","removeIfUndefined","_paths","_toArray","restPath","createEmpty","sources","internalMerge","parentLoopSet","loopSet","isArr","originValue","WarningContext","devUseWarning","noopWarning","deprecated","items_per_page","jump_to","jump_to_confirm","prev_page","next_page","prev_5","next_5","prev_3","next_3","page_size","yearFormat","dayFormat","cellMeridiemFormat","monthBeforeYear","today","backToToday","ok","year","timeSelect","dateSelect","weekSelect","monthSelect","yearSelect","decadeSelect","dateFormat","dateTimeFormat","previousMonth","nextMonth","previousYear","nextYear","previousDecade","nextDecade","previousCentury","nextCentury","placeholder","rangePlaceholder","lang","yearPlaceholder","quarterPlaceholder","monthPlaceholder","weekPlaceholder","rangeYearPlaceholder","rangeQuarterPlaceholder","rangeMonthPlaceholder","rangeWeekPlaceholder","CalendarLocale","timePickerLocale","TimePickerLocale","typeTemplate","Pagination","DatePicker","TimePicker","Calendar","Table","filterTitle","filterConfirm","filterReset","filterEmptyText","filterCheckAll","filterSearchPlaceholder","emptyText","selectAll","selectInvert","selectNone","selectionAll","sortTitle","expand","collapse","triggerDesc","triggerAsc","cancelSort","Tour","Next","Previous","Finish","Modal","okText","cancelText","justOkText","Popconfirm","Transfer","titles","searchPlaceholder","itemUnit","itemsUnit","selectCurrent","removeCurrent","deselectAll","removeAll","Upload","uploading","removeFile","uploadError","previewFile","downloadFile","Icon","icon","Text","edit","copied","Form","optional","defaultValidateMessages","enum","invalid","types","integer","float","regexp","hex","mismatch","Image","preview","QRCode","expired","refresh","scanned","ColorPicker","presetEmpty","transparent","singleColor","gradientColor","runtimeLocale","defaultLocale","localeList","generateLocale","_ANT_MARK__","clearLocale","newLocale","cloneLocale","changeConfirmLocale","getMemoizedContextValue","exist","LocaleContext","splitColorStr","parseNum","numList","parseFloat","parseHSVorHSL","limitRange","mergedMax","FastColor","matchFormat","trimStr","matchPrefix","fromHexString","fromRgbString","fromHslString","fromHsvString","_h","_s","_l","_v","fromHsl","fromHsv","setR","_sc","setG","setB","setA","setHue","hsv","toHsv","_c","getLuminance","adjustGamma","raw","getHue","getMax","getMin","getSaturation","getLightness","getBrightness","_brightness","darken","amount","lighten","mix","calc","rgba","tint","shade","onBackground","background","bg","alpha","isDark","isLight","other","toHexString","rHex","gHex","bHex","aHex","toHsl","toHslString","toRgb","toRgbString","rgb","_max","_min","withoutPrefix","connectNum","index1","index2","huePrime","chroma","secondComponent","lightnessModification","vv","hh","ff","cells","txt","darkColorMap","light","hue","saturation","generate","patterns","pColor","_i","presetPrimaryColors","red","primary","volcano","orange","gold","yellow","lime","green","cyan","blue","geekblue","purple","magenta","grey","presetPalettes","redDark","volcanoDark","orangeDark","goldDark","yellowDark","limeDark","greenDark","cyanDark","blueDark","geekblueDark","purpleDark","magentaDark","greyDark","defaultPresetColors","pink","colorPrimary","colorSuccess","colorWarning","colorError","colorInfo","colorLink","colorTextBase","colorBgBase","fontFamily","fontFamilyCode","fontSize","lineWidth","lineType","motionUnit","motionBase","motionEaseOutCirc","motionEaseInOutCirc","motionEaseOut","motionEaseInOut","motionEaseOutBack","motionEaseInBack","motionEaseInQuint","motionEaseOutQuint","borderRadius","sizeUnit","sizeStep","sizePopupArrow","controlHeight","zIndexBase","zIndexPopupBase","opacityImage","wireframe","motion","radiusBase","radiusLG","radiusSM","radiusXS","radiusOuter","borderRadiusXS","borderRadiusSM","borderRadiusLG","borderRadiusOuter","controlHeightSM","controlHeightXS","controlHeightLG","fontSizePairs","fontSizes","baseSize","intSize","ceil","genFontSizes","lineHeights","fontSizeMD","fontSizeSM","fontSizeLG","lineHeightSM","lineHeightLG","fontSizeXL","fontSizeHeading1","fontSizeHeading2","fontSizeHeading3","fontSizeHeading4","fontSizeHeading5","fontHeight","fontHeightLG","fontHeightSM","lineHeightHeading1","lineHeightHeading2","lineHeightHeading3","lineHeightHeading4","lineHeightHeading5","getAlphaColor","baseColor","getSolidColor","brightness","generateColorPalettes","colors","generateNeutralColorPalettes","bgBaseColor","textBaseColor","colorText","colorTextSecondary","colorTextTertiary","colorTextQuaternary","colorFill","colorFillSecondary","colorFillTertiary","colorFillQuaternary","colorBgSolid","colorBgSolidHover","colorBgSolidActive","colorBgLayout","colorBgContainer","colorBgElevated","colorBgSpotlight","colorBgBlur","colorBorder","colorBorderSecondary","defaultTheme","colorPalettes","colorKey","cur","seed","colorSuccessBase","colorWarningBase","colorErrorBase","colorInfoBase","colorPrimaryBase","primaryColors","successColors","warningColors","errorColors","infoColors","neutralColors","linkColors","colorErrorBgFilledHover","colorPrimaryBg","colorPrimaryBgHover","colorPrimaryBorder","colorPrimaryBorderHover","colorPrimaryHover","colorPrimaryActive","colorPrimaryTextHover","colorPrimaryText","colorPrimaryTextActive","colorSuccessBg","colorSuccessBgHover","colorSuccessBorder","colorSuccessBorderHover","colorSuccessHover","colorSuccessActive","colorSuccessTextHover","colorSuccessText","colorSuccessTextActive","colorErrorBg","colorErrorBgHover","colorErrorBgActive","colorErrorBorder","colorErrorBorderHover","colorErrorHover","colorErrorActive","colorErrorTextHover","colorErrorText","colorErrorTextActive","colorWarningBg","colorWarningBgHover","colorWarningBorder","colorWarningBorderHover","colorWarningHover","colorWarningActive","colorWarningTextHover","colorWarningText","colorWarningTextActive","colorInfoBg","colorInfoBgHover","colorInfoBorder","colorInfoBorderHover","colorInfoHover","colorInfoActive","colorInfoTextHover","colorInfoText","colorInfoTextActive","colorLinkHover","colorLinkActive","colorBgMask","colorWhite","genColorMapToken","genFontMapToken","sizeXXL","sizeXL","sizeLG","sizeMD","sizeMS","sizeSM","sizeXS","sizeXXS","genSizeMapToken","genControlHeight","motionDurationFast","toFixed","motionDurationMid","motionDurationSlow","lineWidthBold","genRadius","genCommonMapToken","defaultSeedToken","hashed","DesignTokenContext","dynamicStyleMark","registerTheme","globalPrefixCls","variables","formatColor","fillColor","colorVal","primaryColor","primaryActiveColor","successColor","warningColor","errorColor","infoColor","cssList","getStyle","DisabledContext","DisabledContextProvider","originDisabled","SizeContext","SizeContextProvider","originSize","componentDisabled","componentSize","fullClone","useEmptyId","isDOM","HTMLElement","SVGElement","_ReactDOM$findDOMNode","domNode","nativeElement","getDOM","REACT_ELEMENT_TYPE_18","REACT_ELEMENT_TYPE_19","ReactMajorVersion","fillRef","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","isReactElement","propertyIsEnumerable","_excluded","MotionProvider","_objectWithoutProperties","_setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","ReferenceError","_React$Component","_inherits","DomWrapper","_super","_createSuper","useEvent","fnRef","memoFn","_fnRef$current","useSafeState","destroyRef","_React$useState2","ignoreDestroy","STATUS_NONE","STATUS_APPEAR","STATUS_ENTER","STATUS_LEAVE","STEP_NONE","STEP_PREPARE","STEP_START","STEP_ACTIVE","STEP_ACTIVATED","STEP_PREPARED","domSupport","getVendorPrefixes","_document$createEleme","stylePropList","internalAnimationEndName","internalTransitionEndName","supportTransition","animationEndName","transitionEndName","getTransitionName","transitionName","transitionType","raf","caf","requestAnimationFrame","cancelAnimationFrame","rafUUID","rafIds","cleanup","wrapperRaf","callRef","leftTimes","realId","FULL_STEP_QUEUE","SIMPLE_STEP_QUEUE","SkipStep","isActive","prepareOnly","_useState2","setStep","_useNextFrame","nextFrameRef","cancelNextFrame","nextFrame","nextFrameId","isCanceled","useNextFrame","_useNextFrame2","STEP_QUEUE","nextStep","doNext","useStatus","supportMotion","visible","getElement","_ref$motionEnter","motionEnter","_ref$motionAppear","motionAppear","_ref$motionLeave","motionLeave","motionDeadline","motionLeaveImmediately","onAppearPrepare","onEnterPrepare","onLeavePrepare","onAppearStart","onEnterStart","onLeaveStart","onAppearActive","onEnterActive","onLeaveActive","onAppearEnd","onEnterEnd","onLeaveEnd","onVisibleChanged","asyncVisible","setAsyncVisible","_useSyncState","currentValueRef","useSyncState","_useSyncState2","getStatus","setStatus","_useState4","setStyle","currentStatus","mountedRef","deadlineRef","getDomElement","updateMotionEndStatus","onInternalMotionEnd","deadline","canEnd","currentActive","_useDomMotionEvents","cacheElementRef","removeMotionEvents","useDomMotionEvents","patchMotionEvents","getEventHandlers","targetStatus","eventHandlers","_useStepQueue2","useStepQueue","newStep","onPrepare","_eventHandlers$step","startStep","active","visibleRef","nextStatus","nextEventHandlers","firstMountChangeRef","transitionSupport","CSSMotion","_props$visible","_props$removeOnLeave","removeOnLeave","forceRender","motionName","leavedClassName","eventProps","contextMotion","isSupportTransition","nodeRef","wrapperNodeRef","_useStatus2","statusStep","statusStyle","mergedVisible","renderedRef","motionChildren","setNodeRef","mergedProps","statusSuffix","motionCls","originNodeRef","ele","getNodeRef","STATUS_ADD","STATUS_KEEP","STATUS_REMOVE","STATUS_REMOVED","wrapKeyToObject","keyObj","parseKeys","_excluded2","MOTION_PROP_NAMES","OriginCSSMotion","CSSMotionList","_assertThisInitialized","keyEntities","removeKey","onAllRemoved","_this2","_this$props","_onVisibleChanged","restProps","motionProps","changedVisible","parsedKeyObjects","mixedKeyEntities","prevKeys","currentKeys","currentIndex","currentLen","prevKeyObjects","currentKeyObjects","hit","currentKeyObj","matchKey","diffKeys","prevEntity","isStableColor","frontColor","fR","fG","fB","originAlpha","bR","bG","bB","fA","__rest","derivativeToken","restToken","overrideTokens","seedToken","screenXL","screenXXL","fastDuration","colorFillContent","colorFillContentHover","colorFillAlter","colorBgContainerDisabled","colorBorderBg","colorSplit","colorTextPlaceholder","colorTextDisabled","colorTextHeading","colorTextLabel","colorTextDescription","colorTextLightSolid","colorHighlight","colorBgTextHover","colorBgTextActive","colorIcon","colorIconHover","colorErrorOutline","colorWarningOutline","fontSizeIcon","lineWidthFocus","controlOutlineWidth","controlInteractiveSize","controlItemBgHover","controlItemBgActive","controlItemBgActiveHover","controlItemBgActiveDisabled","controlTmpOutline","controlOutline","fontWeightStrong","opacityLoading","linkDecoration","linkHoverDecoration","linkFocusDecoration","controlPaddingHorizontal","controlPaddingHorizontalSM","paddingXXS","paddingXS","paddingSM","paddingMD","paddingLG","paddingXL","paddingContentHorizontalLG","paddingContentVerticalLG","paddingContentHorizontal","paddingContentVertical","paddingContentHorizontalSM","paddingContentVerticalSM","marginXXS","marginXS","marginSM","margin","marginMD","marginLG","marginXL","marginXXL","boxShadow","boxShadowSecondary","boxShadowTertiary","screenXS","screenXSMin","screenXSMax","screenSM","screenSMMin","screenSMMax","screenMD","screenMDMin","screenMDMax","screenLG","screenLGMin","screenLGMax","screenXLMin","screenXLMax","screenXXLMin","boxShadowPopoverArrow","boxShadowCard","boxShadowDrawerRight","boxShadowDrawerLeft","boxShadowDrawerUp","boxShadowDrawerDown","boxShadowTabsOverflowLeft","boxShadowTabsOverflowRight","boxShadowTabsOverflowTop","boxShadowTabsOverflowBottom","components","componentTheme","componentTokens","mergedComponentToken","useToken","rootDesignToken","mergedTheme","MotionWrapper","needWrapMotionProviderRef","resetComponent","needInheritFontFamily","boxSizing","listStyle","genIconStyle","alignItems","textAlign","textTransform","verticalAlign","textRendering","svg","useResetIconStyle","PASSED_PROPS","globalIconPrefixCls","globalTheme","globalHolderRender","getGlobalPrefixCls","getGlobalIconPrefixCls","globalConfig","getIconPrefixCls","getRootPrefixCls","getTheme","holderRender","ProviderChildren","customCsp","autoInsertSpaceInButton","alert","anchor","direction","space","splitter","virtual","dropdownMatchSelectWidth","popupMatchSelectWidth","popupOverflow","legacyLocale","parentContext","customIconPrefixCls","segmented","statistic","spin","calendar","carousel","cascader","typography","checkbox","descriptions","divider","drawer","skeleton","steps","image","layout","mentions","modal","slider","breadcrumb","menu","pagination","textArea","empty","badge","radio","switch","SWITCH","transfer","avatar","card","tabs","timeline","timePicker","notification","tree","colorPicker","datePicker","rangePicker","wave","dropdown","warningConfig","tour","tooltip","popconfirm","floatButtonGroup","variant","inputNumber","treeSelect","prefixCls","mergedPrefixCls","useStyle","parentTheme","_a","themeConfig","parentThemeConfig","inherit","useThemeKey","_b","mergedComponents","componentName","mergedCssVar","prevTheme","nextTheme","isEqual","useTheme","baseConfig","autoInsertSpace","memoedConfig","prevConfig","currentConfig","CssInJsStyleContext","memoIconContextValue","childNode","PropWarning","validateMessages","_d","ValidateMessagesContext","LocaleProvider","IconContext","memoTheme","algorithm","themeObj","parsedComponents","componentToken","parsedToken","ConfigProvider","antLocale","isLegacyTheme","useConfig","_regeneratorRuntime","Generator","delegate","sent","_sent","dispatchException","abrupt","wrap","GeneratorFunction","GeneratorFunctionPrototype","AsyncIterator","__await","tryEntries","isGeneratorFunction","awrap","values","stop","rval","complete","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","reactRender","unmountComponentAtNode","toggleWarning","skip","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","usingClientEntryPoint","MARK","modernRender","legacyRender","modernUnmount","_modernUnmount","_callee","_container$MARK","legacyUnmount","_unmount","_callee2","_context2","unstableRender","defaultReactRender","getRoot","_ele$getRootNode","getShadowRoot","ShadowRoot","inShadow","isIconDefinition","normalizeAttrs","acc","class","rootProps","getSecondaryColor","generateColor","normalizeTwoToneColors","twoToneColor","twoToneColorPalette","secondaryColor","calculated","IconBase","svgRef","eleRef","mergedStyleStr","shadowRoot","useInsertStyles","getTwoToneColors","setTwoToneColors","setTwoToneColor","_normalizeTwoToneColo2","ReactIcon","rotate","tabIndex","_React$useContext$pre","rootClassName","classString","iconTabIndex","svgStyle","msTransform","transform","role","getTwoToneColor","CheckCircleFilled","AntdIcon","CheckCircleFilledSvg","CloseCircleFilled","CloseCircleFilledSvg","ExclamationCircleFilled","ExclamationCircleFilledSvg","InfoCircleFilled","InfoCircleFilledSvg","LoadingOutlined","LoadingOutlinedSvg","KeyCode","MAC_ENTER","BACKSPACE","TAB","NUM_CENTER","ENTER","SHIFT","CTRL","ALT","PAUSE","CAPS_LOCK","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","PRINT_SCREEN","INSERT","DELETE","ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","QUESTION_MARK","B","F","G","I","J","K","N","O","P","Q","R","U","W","Y","Z","META","WIN_KEY_RIGHT","CONTEXT_MENU","NUM_ZERO","NUM_ONE","NUM_TWO","NUM_THREE","NUM_FOUR","NUM_FIVE","NUM_SIX","NUM_SEVEN","NUM_EIGHT","NUM_NINE","NUM_MULTIPLY","NUM_PLUS","NUM_MINUS","NUM_PERIOD","NUM_DIVISION","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","NUMLOCK","SEMICOLON","DASH","EQUALS","COMMA","PERIOD","SLASH","APOSTROPHE","SINGLE_QUOTE","OPEN_SQUARE_BRACKET","BACKSLASH","CLOSE_SQUARE_BRACKET","WIN_KEY","MAC_FF_META","WIN_IME","isTextModifyingKeyEvent","isCharacterKey","propList","Notify","_props$duration","duration","showProgress","_props$pauseOnHover","pauseOnHover","eventKey","closable","_props$closeIcon","closeIcon","divProps","onNoticeClose","forcedHovering","hovering","setHovering","_React$useState4","percent","setPercent","_React$useState6","spentTime","setSpentTime","mergedHovering","mergedShowProgress","onInternalClose","animationFrame","calculate","closableObj","ariaProps","mergedConfig","ariaOnly","aria","pickAttrs","validPercent","noticePrefixCls","onMouseEnter","_divProps$onMouseEnte","onMouseLeave","_divProps$onMouseLeav","onKeyDown","NotificationContext","_config$offset","_config$threshold","_config$gap","gap","configList","placement","onAllNoticeRemoved","stackConfig","ctxCls","dictRef","latestNotice","setLatestNotice","hoverKeys","setHoverKeys","_useStack2","useStack","_useStack2$","expanded","placementMotion","dataKey","_keys","_keys2","clsx","motionClassName","motionStyle","motionIndex","strKey","configClassName","configStyle","configClassNames","configStyles","restConfig","dataIndex","stackStyle","transformX","_dictRef$current$strK","_dictRef$current$strK2","_dictRef$current$strK3","offsetHeight","verticalOffset","_dictRef$current$keys","transformY","scaleX","offsetWidth","wrapper","Notice","notice","Notifications","_props$prefixCls","maxCount","renderNotifications","setConfigList","_config$onClose","onClose","_list$index","innerConfig","placements","setPlacements","nextPlacements","_config$placement","originPlacements","emptyRef","placementList","placementConfigList","NoticeList","defaultGetContainer","uniqueKey","useNotification","rootConfig","_rootConfig$getContai","shareConfig","setContainer","notificationsRef","contextHolder","setTaskQueue","objList","oriTaskQueue","tgtTaskQueue","oriQueue","AbstractCalculator","CSSCalculator","_AbstractCalculator","unitlessCssVar","numType","getResult","lowPriority","force","cssUnit","mergedUnit","NumCalculator","Calculator","defaultToken","customToken","deprecatedTokens","_customToken$newToken","oldTokenKey","newTokenKey","enableStatistic","CSSINJS_STATISTIC","recording","objs","proxy","Proxy","_tokenKeys","_statistic$componentN","getDefaultToken","_token$component","mergeToken","ArrayKeyMap","compositeKey","getCompositeKey","lastAccessBeat","accessBeat","getObjectID","objectIDMap","nextID","beat","uniqueMap","cachedValue","newValue","_config$useCSP","useCSP","useDefaultCSP","usePrefix","getResetStyles","getCommonStyle","getCompUnitless","genComponentStyleHook","concatComponent","mergedLayer","rootCls","_useToken3","_usePrefix","rootPrefixCls","useUniqueMemo","getCompVarPrefix","genCalc","_genMaxMin","genMaxMin","sharedConfig","injectStyle","_statisticToken","statisticToken","proxyToken","defaultComponentToken","getDefaultComponentToken","componentCls","getComponentToken","iconCls","antCls","styleInterpolation","commonStyle","resetFont","resetStyle","genStyleHooks","prefixToken","originUnitless","compUnitless","mergedOptions","useCSSVar","_options$injectStyle","CSSVarRegister","_ref$cssVar","useCSSVarRegister","genCSSVarRegister","_useCSSVar2","genSubStyleComponent","_ref2$rootCls","genStyleUtils","useLocalToken","linkStyle","textDecoration","outline","genLinkStyle","genCommonStyle","componentPrefixCls","prefixSelector","rootPrefixSelector","resetFontStyle","genMessageStyle","zIndexPopup","contentPadding","contentBg","noticeCls","messageMoveIn","Keyframes","messageMoveOut","maxHeight","noticeStyle","marginInlineEnd","pointerEvents","animationFillMode","animationDuration","animationPlayState","animationTimingFunction","span","combinedToken","CONTAINER_OFFSET","TypeIcon","success","PureContent","staticPrefixCls","useCSSVarCls","wrapCSSVar","cssVarCls","CloseOutlined","CloseOutlinedSvg","wrapPromiseFn","openFn","closeFn","closePromise","filled","DEFAULT_DURATION","Wrapper","NotificationProvider","Holder","staticGetContainer","rtl","getPopupContainer","mergedCloseIcon","holder","useRcNotification","getClassName","getNotificationMotion","getMotion","keyIndex","useInternalMessage","messageConfig","holderRef","wrapAPI","fakeResult","originOpen","typeOpen","jointContent","mergedDuration","mergedOnClose","act","defaultGlobalConfig","getGlobalContext","mergedContainer","GlobalHolder","sync","appConfig","GlobalHolderWrapper","setMessageConfig","rootIconPrefixCls","dom","flushNotice","holderFragment","createDocumentFragment","newMessage","unstableSetRender","skipped","setCloseFn","_message$instance","baseStaticMethods","useMessage","_InternalPanelDoNotUseOrYouWillBeFired","PurePanel","staticMethods","API_BASE_URL","getAllDiscounts","_response$data$data","_response$data4","_location$state","onLogout","userInfo","setUserInfo","setLoading","setError","currentSlide","setCurrentSlide","tab","showUploadModal","setShowUploadModal","isUploading","setIsUploading","uploadData","setUploadData","region","subtitle","resolution","file","showPostModal","setShowPostModal","postTitle","setPostTitle","postContent","setPostContent","selectedImage","setSelectedImage","helpPosts","setHelpPosts","helpLoading","setHelpLoading","helpError","setHelpError","currentPage","setCurrentPage","totalPages","setTotalPages","likedPosts","setLikedPosts","announcements","setAnnouncements","carouselDiscounts","setCarouselDiscounts","requestLoading","setRequestLoading","requestError","setRequestError","requestPosts","setRequestPosts","torrentPosts","setTorrentPosts","torrentLoading","setTorrentLoading","torrentError","setTorrentError","filteredResources","setFilteredResources","isAdmin","setIsAdmin","showDownloadModal","setShowDownloadModal","selectedTorrent","setSelectedTorrent","downloadProgress","setDownloadProgress","isDownloading","setIsDownloading","downloadPath","setDownloadPath","announcementSearch","setAnnouncementSearch","shareSearch","setShareSearch","requestSearch","setRequestSearch","helpSearch","setHelpSearch","activeTab","handleTabChange","tabName","savedFilters","selectedFilters","fetchAnnouncements","fetchDiscountsForCarousel","ongoing","getTime","endTime","upcoming","handleSearchAnnouncement","handleSearchShare","records","handleResetShareSearch","setSelectedFilters","filterCategories","category","fetchTorrentPosts","handleSearchRequest","searchRequestPosts","postsWithCounts","detailResponse","replyCount","isLiked","handleResetRequestSearch","fetchRequestPosts","handleSearchHelp","searchHelpPosts","handleResetHelpSearch","fetchHelpPosts","handleFileChange","files","handleUploadSubmit","torrentData","torrentName","bodyObj","createTorrent","_error$response","_error$response$data","checkFileExists","handleDeleteTorrent","torrentId","confirm","deleteTorrent","_error$response2","_error$response2$data","handleRequestPostSubmit","createRequestPost","authorId","handleHelpPostSubmit","createHelpPost","isReset","getRequestPosts","handleImageUpload","getHelpPosts","label","applyFilters","_location$state2","scrollPosition","scrollTo","backendData","authority","fetchUserInfo","setInterval","clearInterval","_jsx","_jsxs","alt","renderContent","onChange","onKeyPress","discount","toLocaleDateString","announcement","handleAnnouncementClick","closest","returnPath","scrollY","marginLeft","handleFilterSelect","onSubmit","accept","torrent","handleDownloadClick","isSolved","authorAvatar","createTime","likeCount","htmlFor","cleanPath","finalPath","downloadTorrent","interval","getDownloadProgress","progresses","filePath","foundProgress","normalizedKey","newProgress","userData","registTime","formatDate","magicPoints","download","shareRate","getDownloadQuota","used","dateString","getFullYear","getMonth","padStart","day","getDate","getUserInviteCodes","inviteCode","Personal","setUserData","downloadQuota","joinDate","ratio","fetchData","fetchDownloadProgress","progressData","intervalId","formatSize","kb","mb","handleBack","fromSubpage","dashboardTab","percentage","taskId","feature","handleCardClick","onLoginSuccess","isLogin","setIsLogin","setFormData","isLoading","setIsLoading","handleChange","handleSubmit","setItem","login","AnnouncementDetail","setAnnouncement","fromTab","getAnnouncementDetail","fetchAnnouncement","paragraph","setTorrent","comments","setComments","newComment","setNewComment","setReplyingTo","replyContent","setReplyContent","activeReplyId","setActiveReplyId","replyModal","setReplyModal","replyingTo","replyingToUsername","isReply","openReplyModal","commentId","closeReplyModal","Comment","onLike","onReply","replyTo","renderComment","handleLikeComment","replies","reply","fetchTorrentDetail","_err$response","_err$response$data","likeTorrentComment","updateComments","_err$response4","_err$response4$data","_err$response2","_err$response2$data","addTorrentComment","commentData","_err$response3","_err$response3$data","rows","addCommentReply","replyData","_err$response5","_err$response5$data","RequestDetail","setPost","replyImage","setReplyImage","commentImage","setCommentImage","expandedReplies","setExpandedReplies","loadingReplies","setLoadingReplies","onDelete","imageUrl","handleDeleteComment","fetchPostDetail","handleDeletePost","deleteRequestPost","likeRequestPostComment","deleteRequestComment","_err$response6","_err$response6$data","ClassName","classname","para","likeRequestPost","handleMarkSolved","addRequestPostComment","addRequestCommentReply","_err$response7","_err$response7$data","HelpDetail","deleteHelpPost","likeHelpPostComment","deleteHelpComment","likeHelpPost","addHelpPostComment","addHelpCommentReply","Exchange","inviteCodes","setInviteCodes","setMagicPoints","codes","newCode","generateInviteCode","updatedUser","magicPoint","exchangeUpload","isUsed","torrents","setTorrents","setPagination","fetchTorrents","downloadCount","formattedSize","getUserTorrents","handleDelete","getPageNumbers","pages","startPage","maxVisiblePages","endPage","jumpToPage","notices","setSuccess","passwordForm","setPasswordForm","oldPassword","newPassword","confirmPassword","handlePasswordChange","put","updatePassword","minLength","millisecondsInWeek","millisecondsInMinute","millisecondsInHour","constructFromSymbol","constructFrom","toDate","argument","parseISO","_options$additionalDi","invalidDate","in","additionalDigits","dateStrings","dateTimeDelimiter","timeString","timeZoneDelimiter","timezone","splitDateString","parseYearResult","regex","captures","restDateString","century","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","setUTCDate","getUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","parseDate","timeRegex","hours","parseTimeUnit","minutes","seconds","validateTime","parseTime","tmpDate","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timezoneString","timezoneRegex","sign","_hours","validateTimezone","parseTimezone","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formats","formatLong","full","long","medium","short","dateTime","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","localize","ordinalNumber","dirtyNumber","_options","rem100","era","narrow","abbreviated","wide","quarter","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","predicate","valueCallback","parsePattern","parseResult","any","enUS","formatDistance","tokenValue","addSuffix","comparison","formatRelative","_date","_baseDate","weekStartsOn","firstWeekContainsDate","dateLongFormatter","timeLongFormatter","longFormatters","dateTimeLongFormatter","datePattern","timePattern","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","_message","subject","defaultOptions","getDefaultOptions","getInternalDefaultOptions","transpose","date_","_constructor$prototyp","isConstructor","getHours","getMinutes","getSeconds","getMilliseconds","Setter","validate","_utcDate","ValueSetter","validateValue","subPriority","DateTimezoneSetter","timestampIsSet","Parser","setter","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","trunc","startOfWeek","_options$weekStartsOn","_options$locale","_defaultOptions$local","getDay","setDate","getWeekYear","_options$firstWeekCon","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","startOfISOWeek","startOfWeekYear","firstWeek","getWeek","setWeek","getISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","startOfISOWeekYear","fourthOfJanuary","getISOWeek","setISOWeek","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","addDays","setDay","currentDay","getISODay","setISODay","getTimezoneOffsetInMilliseconds","utcDate","UTC","parsers","isTwoDigitYear","normalizedTwoDigitYear","_flags","firstWeekOfYear","setMonth","isLeapYear","wholeWeekDays","isPM","setMinutes","setSeconds","setMilliseconds","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dateStr","formatStr","referenceDate","_options$locale2","_ref7","_options$locale3","_defaultOptions$local2","subFnOptions","setters","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleTokens","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setterArray","isValid","isBefore","dateToCompare","normalizeDates","dates","startOfDay","differenceInCalendarDays","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","startOfYear","getDayOfYear","addLeadingZeros","targetLength","lightFormatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","dayPeriodEnum","formatters","signedWeekYear","weekYear","isoWeek","localDayOfWeek","isoDayOfWeek","_localize","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","absOffset","originalDate","isToken","cleanEscapedString","preprocessor","formatterOptions","part","formatter","matched","startOfMonth","startOfQuarter","currentMonth","endOfDay","endOfWeek","endOfMonth","isSameYear","isSameMonth","isSameQuarter","dateLeft_","dateRight_","isSameDay","leftDate","rightDate","isWithinInterval","getDaysInMonth","monthIndex","lastDayOfMonth","midMonth","daysInMonth","setQuarter","getYear","endOfYear","getQuarter","addMonths","dayOfMonth","endOfDesiredMonth","subMonths","differenceInCalendarMonths","addQuarters","subQuarters","differenceInCalendarQuarters","addYears","subYears","differenceInCalendarYears","addMilliseconds","addHours","addMinutes","setTime","addSeconds","isAfter","addWeeks","setYear","differenceInDays","compareLocalAsc","difference","subWeeks","subDays","useSafeInsertionEffect","hasWindow","getNodeName","getWindow","_node$ownerDocument","getDocumentElement","Node","isElement","Element","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","isTableElement","isTopLayer","selector","isContainingBlock","elementOrCss","webkit","isWebKit","containerType","backdropFilter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollX","getParentNode","assignedSlot","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","frameElement","getFrameElement","visualViewport","createCoords","oppositeSideMap","bottom","oppositeAlignmentMap","evaluate","param","getSide","getAlignment","getAxisLength","axis","getSideAxis","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","side","getPaddingObject","expandPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","rects","strategy","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","contextElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getCssDimensions","hasOffset","shouldFallback","$","unwrapElement","getBoundingClientRect","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","leftScroll","getHTMLOffset","scroll","ignoreScrollbarX","htmlRect","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scrollWidth","scrollHeight","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","setLeftRTLScrollbarOffset","offsetRect","htmlOffset","isStaticPositioned","getTrueOffsetParent","rawOffsetParent","svgOffsetParent","currentNode","getContainingBlock","topLayer","elementClippingAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","isRTL","rectsAreEqual","autoUpdate","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","referenceEl","ancestors","cleanupIo","onMove","timeoutId","io","_io","disconnect","elementRectForRootMargin","rootMargin","isFirstUpdate","handleObserve","intersectionRatio","_e","observe","observeMove","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","flip","_middlewareData$flip","initialPlacement","_evaluate2","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","isStart","lr","rl","tb","bt","getSideList","getOppositeAxisPlacements","overflows","overflowsData","sides","mainAlignmentSide","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextPlacement","_overflowsData$","ignoreCrossAxisOverflow","hasInitialMainAxisOverflow","resetPlacement","_overflowsData$filter2","currentSideAxis","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","centerOffset","computePosition","platformWithCache","middleware","validMiddleware","statefulPlacement","resetCount","nextX","nextY","computePosition$1","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","offset$1","arrow$2","arrow$1","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","horizontalKeys","verticalKeys","SafeReact","serverHandoffComplete","genId","setId","useModernLayoutEffect","FloatingArrow","tipRadius","staticOffset","stroke","restStyle","_excluded3","_excluded4","clipPathId","setIsRTL","isVerticalSide","computedStaticOffset","computedStrokeWidth","halfStrokeWidth","svgX","svgY","isCustomShape","yOffsetProp","xOffsetProp","arrowX","arrowY","dValue","rotation","viewBox","clipPath","createEventEmitter","_map$get","_map$get2","FloatingNodeContext","FloatingTreeContext","useFloatingParentNodeId","useFloatingTree","useFloatingRootContext","onOpenChange","onOpenChangeProp","elementsProp","floatingId","dataRef","nested","positionReference","setPositionReference","useEffectEvent","openEvent","domReference","useFloating","nodeId","internalRootContext","rootContext","computedElements","_domReference","setDomReference","_setPositionReference","domReferenceRef","externalReference","externalFloating","whileElementsMounted","setData","isPositioned","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","useFloating$1","computedPositionReference","floatingContext","nodesRef","_extendStatics","__extends","__","_assign","__spreadArray","pack","ar","SuppressedError","KeyType","CalendarContainer","showTimeSelectOnly","showTime","ariaLabel","ClickOutsideWrapper","onClickOutside","containerRef","detectRef","ignoreClass","onClickOutsideRef","handleClickOutside","composed","composedPath","eventTarget","classList","useDetectClickOutside","getLocaleScope","newDate","strictParsing","refDate","localeObject","getLocaleObject","getDefaultLocale","formats_1","format_1","parsedDate","minDate","isValid$1","localeObj","safeDateFormat","hour","minute","second","getStartOfDay","getStartOfWeek","calendarStartDay","getStartOfMonth","getStartOfYear","getStartOfQuarter","getStartOfToday","getEndOfDay","getEndOfMonth","date1","date2","isSameYear$1","isSameMonth$1","isSameQuarter$1","isSameDay$1","isEqual$1","isDayInRange","startDate","endDate","__localeId__","localeSpec","__localeData__","getMonthInLocale","getMonthShortInLocale","isDayDisabled","maxDate","excludeDates","excludeDateIntervals","includeDates","includeDateIntervals","filterDate","isOutOfBounds","excludeDate","includeDate","isDayExcluded","isMonthDisabled","isMonthInRange","startDateYear","startDateMonth","endDateYear","endDateMonth","dayYear","isMonthYearDisabled","excludedDate","includedDate","isQuarterDisabled","isYearInRange","startYear","endYear","isYearDisabled","isQuarterInRange","startDateQuarter","endDateQuarter","isTimeInList","listTime","isTimeDisabled","excludeTimes","includeTimes","filterTime","isTimeInDisabledRange","minTime","maxTime","baseTime","monthDisabledBefore","monthDisabledAfter","yearDisabledBefore","yearDisabledAfter","getEffectiveMinDate","getEffectiveMaxDate","getHighLightDaysMap","highlightDates","defaultClassName","dateClasses","classNamesArr","arrOfDates","len_1","dateK","getHolidaysMap","holidayDates","holiday","dateObj","holidayName","classNamesObj","holidayNames","array1","array2","holidayNameArr","timesToInjectAfter","currentMultiplier","intervals","injectedTimes","injectedTime","injectedTimeValue","nextTime","addZero","getYearsPeriod","yearItemNumber","endPeriod","startPeriod","startOfMinute","getMidnightDate","dateWithoutTime","isDateBefore","isSpaceKeyDown","Space","InputTime","inputRef","onTimeChange","propDate","renderTimeInput","customTimeInput","timeInputLabel","Day","dayEl","handleClick","handleMouseEnter","handleOnKeyDown","Enter","isKeyboardSelected","disabledKeyboardNavigation","isSelectedDate","selectsMultiple","selectedDates","isSameDayOrWeek","preSelection","isExcluded","isStartOfWeek","isSameWeek","showWeekPicker","getHighLightedClass","dayStr","getHolidaysClass","holidays","isInRange","isInSelectingRange","selectsStart","selectsEnd","selectsRange","selectsDisabledDaysInRange","selectingDate","isSelectingRangeStart","isSelectingRangeEnd","isRangeStart","isRangeEnd","isWeekend","weekday","isAfterMonth","isBeforeMonth","isCurrentDay","isSelected","getClassNames","dayClassName","getDayOfWeekCode","getAriaLabel","ariaLabelPrefixWhenEnabled","ariaLabelPrefixWhenDisabled","getTitle","compareDt","getTabIndex","selectedDay","preSelectionDay","showWeekNumber","handleFocusDay","shouldFocusDay","preventScroll","renderDayContents","monthShowsDuplicateDaysEnd","monthShowsDuplicateDaysStart","usePointerEvent","onPointerEnter","inline","shouldFocusDayInline","isDayActiveElement","isDuplicateDay","WeekNumber","weekNumberEl","handleFocusWeekNumber","shouldFocusWeekNumber","isInputFocused","ariaLabelPrefix","weekNumber","isWeekDisabled","weekNumberClasses","Week","handleDayClick","onDayClick","handleDayMouseEnter","onDayMouseEnter","handleWeekClick","enabledWeekDay","processingDay","onWeekSelect","shouldCloseOnSelect","setOpen","formatWeekNumber","processingDate","renderDays","days","onClickAction","chooseDayAriaLabelPrefix","disabledDayAriaLabelPrefix","MONTH_COLUMNS_LAYOUT","MONTH_COLUMNS","grid","verticalNavigationOffset","getMonthColumnsLayout","showFourColumnMonthYearPicker","showTwoColumnMonthYearPicker","Month","MONTH_REFS","QUARTER_REFS","orderInDisplay","handleMouseLeave","isRangeStartMonth","isRangeStartQuarter","isRangeEndMonth","isRangeEndQuarter","isInSelectingRangeMonth","isSelectingMonthRangeStart","_month","isSelectingMonthRangeEnd","isInSelectingRangeQuarter","isWeekInMonth","isCurrentMonth","isCurrentQuarter","isSelectedMonth","isSelectMonthInList","selectedDate","isSelectedQuarter","renderWeeks","weeks","isFixedHeight","fixedHeight","breakAfterNextPush","currentWeekStart","isPreSelected","weekAriaLabelPrefix","showWeekNumbers","isFixedAndFinalWeek","isNonFixedAndOutOfMonth","peekNextMonth","onMonthClick","isMonthDisabledForLabelDate","labelDate","onMonthMouseEnter","handleMonthNavigation","newMonth","setPreSelection","handleKeyboardNavigation","monthColumnsLayout","getVerticalOffset","monthsGrid","calculateNewDateAndMonth","newCalculatedDate","newCalculatedMonth","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","eventKeyCopy","validDateFound","iterations","getNewDateAndMonth","onMonthKeyDown","handleOnMonthKeyDown","Tab","onQuarterClick","onQuarterMouseEnter","handleQuarterNavigation","newQuarter","onQuarterKeyDown","getMonthClassNames","monthClassName","_monthClassName","preSelectedMonth","isPreSelectedMonthDisabled","getQuarterTabIndex","preSelectedQuarter","isCurrentQuarterDisabled","getQuarterClassNames","getMonthContent","showFullMonthYearPicker","renderMonthContent","shortMonthText","fullMonthText","getQuarterContent","renderQuarterContent","shortQuarter","getQuarterShortInLocale","renderMonths","monthColumns","renderQuarters","showMonthYearPicker","showQuarterYearPicker","formattedAriaLabelPrefix","onPointerLeave","MonthDropdownOptions","renderOptions","monthNames","onCancel","MonthDropdown","dropdownVisible","renderSelectOptions","renderSelectMode","renderReadView","toggleDropdown","renderDropdown","renderScrollMode","renderedDropdown","useShortMonthInDropdown","dropdownMode","generateMonthYears","currDate","lastDate","MonthYearDropdownOptions","monthYearsList","monthYear","monthYearPoint","isSameMonthYear","dropdownClass","scrollableMonthYearDropdown","MonthYearDropdown","timePoint","onSelectChange","yearMonth","changedDate","Time","scrollToTheSelectedTime","centerLi","calcCenterPosition","monthRef","isSelectedTime","d1","d2","isDisabledTime","liClasses","timeClassName","injectTimes","renderTimes","activeDate","openToDate","sortedInjectTimes","minutesInDay","startOfTheNextDay","getHoursInDay","multiplier","timesToInject","timeToFocus","li","renderTimeCaption","showTimeCaption","timeCaption","todayButton","observeDatePickerHeightChanges","updateContainerHeight","listHeight","centerLiRef","Year","YEAR_REFS","updateFocusOnPaginate","refIndex","handleYearClick","handleYearNavigation","newYear","isCurrentYear","isSelectedYear","onYearClick","onYearKeyDown","leftOverOffset","getYearClassNames","yearClassName","getYearTabIndex","preSelected","isPreSelectedYearDisabled","getYearContent","renderYearContent","yearsList","onYearMouseEnter","onYearMouseLeave","this_1","clearSelectingDate","generateYears","noOfYear","YearDropdownOptions","selectedYear","minYear","maxYear","incrementYears","decrementYears","shiftYears","years","yearDropdownItemNumber","scrollableYearDropdown","dropdownRef","dropdownCurrent","dropdownCurrentChildren","selectedYearOptionEl","childEl","ariaSelected","YearDropdown","adjustDateOnChange","handleYearChange","onSelect","DROPDOWN_FOCUS_CLASSNAMES","monthContainer","setClickOutsideRef","handleDropdownFocus","testClassname","isDropdownSelect","onDropdownFocus","getDateInView","initialDate","increaseMonth","handleMonthChange","decreaseMonth","monthSelectedIn","handleMonthMouseLeave","onMonthMouseLeave","handleYearMouseEnter","handleYearMouseLeave","onYearChange","isRenderAriaLiveMessage","getEnabledPreSelectionDateForMonth","totalDays","preSelectedDate","dayIdx","enabledPreSelectionDate","handleCustomMonthChange","onMonthChange","handleMonthYearChange","changeYear","changeMonth","changeMonthYear","dayNames","weekLabel","weekDayName","formatWeekday","weekDayClassName","formatWeekDay","formatFunc","getFormattedWeekdayInLocale","useWeekdaysShort","getWeekdayShortInLocale","getWeekdayMinInLocale","decreaseYear","showYearPicker","renderPreviousButton","renderCustomHeader","allPrevDaysDisabled","monthsShown","monthsToSubtract","showPreviousMonths","fromMonthDate","minDateYear","yearsDisabledBefore","previousQuarter","quarterDisabledBefore","forceShowMonthNavigation","showDisabledMonthNavigation","clickHandler","isForYear","previousMonthButtonLabel","_f","previousYearButtonLabel","_g","previousMonthAriaLabel","_j","previousYearAriaLabel","increaseYear","renderNextButton","allNextDaysDisabled","maxDateYear","yearsDisabledAfter","nextQuarter","quarterDisabledAfter","showTimeSelect","nextMonthButtonLabel","nextYearButtonLabel","nextMonthAriaLabel","nextYearAriaLabel","renderCurrentMonth","showYearDropdown","showMonthDropdown","showMonthYearDropdown","renderYearDropdown","overrideHide","renderMonthDropdown","renderMonthYearDropdown","handleTodayButtonClick","renderTodayButton","renderDefaultHeader","monthDate","onFocus","headerArgs","prevMonthButtonDisabled","nextMonthButtonDisabled","prevYearButtonDisabled","nextYearButtonDisabled","showDayNames","customHeaderCount","renderYearHeader","renderHeader","monthList","monthsToAdd","monthKey","monthAriaLabelPrefix","handleOnDayKeyDown","renderYears","renderTimeSection","timeFormat","timeIntervals","renderInputTimeSection","showTimeInput","renderAriaLiveRegion","ariaLiveMessage","renderChildren","assignMonthContainer","hasMonthChanged_1","Container","outsideClickIgnoreClass","CalendarIcon","defaultClass","iconElement_1","xmlns","Portal","portalRoot","portalHost","getElementById","portalId","focusableFilter","HTMLAnchorElement","TabLoop","getTabChildren","tabLoopRef","handleFocusStart","tabChildren","handleFocusEnd","enableTabLoop","PopperComponent","hidePopper","wrapperClassName","popperComponent","targetComponent","popperOnKeyDown","popperProps","showArrow","popper","arrowRef","popperContainer","wrapperClasses","PopperComponent$1","floatingProps","popperPlacement","flip$1","popperModifiers","componentProps","INPUT_ERR_1","getPreSelection","modifyHolidays","accumulator","calcInitialState","defaultPreSelection","boundedPreSelection","startOpen","preventFocus","inputValue","focused","resetHiddenStatus","setHiddenStatus","setHiddenStateOnVisibilityHidden","visibilityState","clearPreventFocusTimeout","preventFocusTimeout","setFocus","setBlur","blur","cancelFocusInput","deferBlur","skipSetBlur","lastPreSelectChange","PRESELECT_CHANGE_VIA_NAVIGATE","inputOk","isCalendarOpen","readOnly","handleFocus","isAutoReFocus","isOpenAllowed","preventOpenOnFocus","sendFocusBackToInput","inputFocusTimeout","deferFocusInput","handleBlur","withPortal","onBlur","handleCalendarClickOutside","allArgs","onChangeRaw","HTMLInputElement","PRESELECT_CHANGE_VIA_INPUT","valueStart","valueEnd","startDateNew","endDateNew","startChanged","endChanged","setSelected","handleSelect","showDateSelect","swapRange","keepInput","allowSameDay","focusSelectedMonth","hasStartRange","isRangeFilled","nextDates","hasMinDate","hasMaxDate","isValidDateSelection","dateStartOfDay","minDateStartOfDay","maxDateEndOfDay","toggleCalendar","handleTimeChange","onInputClick","onInputKeyDown","selectorString","selectedItem","Escape","onInputError","onPortalKeyDown","onDayKeyDown","isShiftKeyActive","calculateNewDate","PageUp","PageDown","Home","End","getEndOfWeek","newSelection","getNewDate","prevMonth","prevYear","onPopperKeyDown","onClearClick","closeOnScroll","renderCalendar","dateFormatCalendar","calendarClassName","calendarContainer","longDateFormat","renderDateInput","customInput","customInputRef","formattedStartDate","formattedEndDate","safeDateRangeFormat","formattedFirstDate","formattedSecondDate","extraDatesCount","safeMultipleDatesFormat","placeholderText","autoComplete","ariaDescribedBy","ariaInvalid","ariaLabelledBy","ariaRequired","renderClearButton","isClearable","clearButtonTitle","clearButtonClassName","ariaLabelClose","showPopperArrow","excludeScrollbar","toggleCalendarOnIconClick","onCalendarOpen","onCalendarClose","renderInputContainer","showIcon","calendarIconClassname","calendarIconClassName","portalContainer","popperClassName","Administer","users","setUsers","discounts","setDiscounts","currentDiscount","setCurrentDiscount","searchKey","setSearchKey","newAnnouncement","setNewAnnouncement","newDiscount","setNewDiscount","discountType","setStartDate","setEndDate","setActiveTab","fetchAllUsers","_response$data","getAllUsers","formattedUsers","user","lastLogin","handleChangeAuthority","newAuthority","changeUsername","updateUserAuthority","fetchAllDiscounts","fetchCurrentDiscount","_response$data5","_response$data$data2","_response$data6","getCurrentDiscount","handleAddDiscount","formatDateToISO","discountData","_response$data7","addDiscount","isEndTime","pad","handleDeleteDiscount","_response$data8","deleteDiscount","formatDateTime","translateDiscountType","fetchAllAnnouncements","_Fragment","_response$data2","_response$data3","searchUsers","handleReset","postAnnouncement","removeItem","isAuthenticated","setIsAuthenticated","handleLogout","AuthForm","Dashboard","Setting","TorrentDetail","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","App","reportWebVitals"],"sourceRoot":""}
\ No newline at end of file
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..4910242
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,28 @@
+server {
+    listen 80; # 代理默认端口，可改
+    server_name localhost;
+ 
+    root /var/www/html;
+    index index.html;
+ 
+    location / {
+        try_files $uri $uri/ /index.html;
+    }
+ 
+    # 代理 /api/v1/ 到后端服务
+    location /api/v1/ {
+        proxy_pass http://127.0.0.1:8088; # 你的后端暴露位置
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection 'upgrade';
+        proxy_set_header Host $host;
+        proxy_cache_bypass $http_upgrade;
+    }
+ 
+    location = /favicon.ico { log_not_found off; access_log off; }
+    location = /robots.txt { log_not_found off; access_log off; allow all; }
+    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
+        expires max;
+        log_not_found off;
+    }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index a27a56c..c18ddd7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
       "version": "0.1.0",
       "dependencies": {
         "@testing-library/dom": "^10.4.0",
-        "antd": "^5.25.3",
+        "antd": "^5.25.4",
         "axios": "^1.8.4",
         "buffer": "^6.0.3",
         "https-browserify": "^1.0.0",
@@ -5190,10 +5190,9 @@
       }
     },
     "node_modules/antd": {
-      "version": "5.25.3",
-      "resolved": "https://registry.npmmirror.com/antd/-/antd-5.25.3.tgz",
-      "integrity": "sha512-tBBcAFRjmWM3sitxrL/FEbQL+MTQntYY5bGa5c1ZZZHXWCynkhS3Ch/gy25mGMUY1M/9Uw3pH029v/RGht1x3w==",
-      "license": "MIT",
+      "version": "5.25.4",
+      "resolved": "https://registry.npmjs.org/antd/-/antd-5.25.4.tgz",
+      "integrity": "sha512-yXdWqq1NJSZnD1HoPZWnWuQJGVYYnB3h0Ufsz4sbt3T0N9SdJ4G9GPpLMk8Gn9zWtwBekfR4THPVZ9uzAyhBHQ==",
       "dependencies": {
         "@ant-design/colors": "^7.2.1",
         "@ant-design/cssinjs": "^1.23.0",
@@ -5214,7 +5213,7 @@
         "rc-checkbox": "~3.5.0",
         "rc-collapse": "~3.9.0",
         "rc-dialog": "~9.6.0",
-        "rc-drawer": "~7.2.0",
+        "rc-drawer": "~7.3.0",
         "rc-dropdown": "~4.2.1",
         "rc-field-form": "~2.7.0",
         "rc-image": "~7.12.0",
@@ -5240,7 +5239,7 @@
         "rc-tooltip": "~6.4.0",
         "rc-tree": "~5.13.1",
         "rc-tree-select": "~5.27.0",
-        "rc-upload": "~4.9.0",
+        "rc-upload": "~4.9.2",
         "rc-util": "^5.44.4",
         "scroll-into-view-if-needed": "^3.1.0",
         "throttle-debounce": "^5.0.2"
@@ -15516,10 +15515,9 @@
       }
     },
     "node_modules/rc-drawer": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.2.0.tgz",
-      "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==",
-      "license": "MIT",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.3.0.tgz",
+      "integrity": "sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==",
       "dependencies": {
         "@babel/runtime": "^7.23.9",
         "@rc-component/portal": "^1.1.1",
diff --git a/package.json b/package.json
index 8091f3c..76f9a72 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
   ],
   "dependencies": {
     "@testing-library/dom": "^10.4.0",
-    "antd": "^5.25.3",
+    "antd": "^5.25.4",
     "axios": "^1.8.4",
     "buffer": "^6.0.3",
     "https-browserify": "^1.0.0",
@@ -25,7 +25,7 @@
     "web-vitals": "^2.1.4"
   },
   "scripts": {
-    "start": "react-scripts start",
+    "start": "react-scripts start --no-source-maps",
     "build": "react-scripts build",
     "test": "jest",
     "test:watch": "jest --watch",
diff --git a/src/components/AnnouncementDetail.test.jsx b/src/components/AnnouncementDetail.test.jsx
index 7f44ecd..5a68ecf 100644
--- a/src/components/AnnouncementDetail.test.jsx
+++ b/src/components/AnnouncementDetail.test.jsx
@@ -21,32 +21,25 @@
     id: 1,
     title: '测试公告标题',
     content: '这是测试公告内容\n这是第二行内容',
-    
     createTime: '2023-01-01T00:00:00Z',
-    
   };
 
   beforeEach(() => {
-    // 重置 mock 函数
     mockNavigate.mockClear();
-    
+
     // 设置模拟的 API 响应
     announcementApi.getAnnouncementDetail.mockResolvedValue({
       data: {
         code: 200,
         data: {
-          announcement: mockAnnouncement
-        }
-      }
+          announcement: mockAnnouncement,
+        },
+      },
     });
 
-    // 模拟 useParams
+    // 模拟钩子
     useParams.mockReturnValue({ id: '1' });
-
-    // 模拟 useLocation
-    useLocation.mockReturnValue({
-      state: { fromTab: 'announcement' }
-    });
+    useLocation.mockReturnValue({ state: { fromTab: 'announcement' } });
   });
 
   const renderComponent = () => {
@@ -54,7 +47,6 @@
       <MemoryRouter initialEntries={['/announcement/1']}>
         <Routes>
           <Route path="/announcement/:id" element={<AnnouncementDetail />} />
-          {/* 添加一个模拟的公告列表路由用于导航测试 */}
           <Route path="/dashboard/announcement" element={<div>公告列表</div>} />
         </Routes>
       </MemoryRouter>
@@ -64,9 +56,6 @@
   it('应该正确加载和显示公告详情', async () => {
     renderComponent();
 
-    
-
-    // 等待数据加载完成
     await waitFor(() => {
       expect(screen.getByText('测试公告标题')).toBeInTheDocument();
       expect(screen.getByText('这是测试公告内容')).toBeInTheDocument();
@@ -75,12 +64,8 @@
   });
 
   it('应该处理公告加载失败的情况', async () => {
-    // 模拟 API 返回错误
     announcementApi.getAnnouncementDetail.mockResolvedValue({
-      data: {
-        code: 404,
-        message: '公告不存在'
-      }
+      data: { code: 404, message: '公告不存在' },
     });
 
     renderComponent();
@@ -92,19 +77,18 @@
 
   it('应该能够返回公告区', async () => {
     renderComponent();
-  
+
     await waitFor(() => {
       expect(screen.getByText('测试公告标题')).toBeInTheDocument();
     });
-  
+
     fireEvent.click(screen.getByRole('button', { name: /返回/i }));
-  
+
     // 检查是否导航回公告区
     expect(mockNavigate).toHaveBeenCalledWith('/dashboard/announcement');
   });
 
   it('应该显示加载错误时的UI', async () => {
-    // 模拟 API 抛出错误
     announcementApi.getAnnouncementDetail.mockRejectedValue(new Error('网络错误'));
 
     renderComponent();
@@ -113,4 +97,30 @@
       expect(screen.getByText('获取公告详情失败')).toBeInTheDocument();
     });
   });
-});
\ No newline at end of file
+
+  // 边界测试 - 测试公告ID不存在
+  it('应该处理不存在的公告ID', async () => {
+    announcementApi.getAnnouncementDetail.mockResolvedValue({
+      data: { code: 404, message: '公告不存在' },
+    });
+
+    renderComponent();
+
+    await waitFor(() => {
+      expect(screen.getByText('公告不存在')).toBeInTheDocument();
+    });
+  });
+
+  // 边界测试 - 测试其他API错误
+  it('应该处理服务器错误', async () => {
+    announcementApi.getAnnouncementDetail.mockResolvedValue({
+      data: { code: 500, message: '服务器错误' },
+    });
+
+    renderComponent();
+
+    await waitFor(() => {
+      expect(screen.getByText('服务器错误')).toBeInTheDocument();
+    });
+  });
+});
