diff --git a/resources/Supply-Line/.fxap b/resources/Supply-Line/.fxap
index 5153cf9a9..21b688da8 100644
Binary files a/resources/Supply-Line/.fxap and b/resources/Supply-Line/.fxap differ
diff --git a/resources/Supply-Line/cl_supplyline.lua b/resources/Supply-Line/cl_supplyline.lua
index 97a2b6527..3c3af8409 100644
Binary files a/resources/Supply-Line/cl_supplyline.lua and b/resources/Supply-Line/cl_supplyline.lua differ
diff --git a/resources/Supply-Line/config.lua b/resources/Supply-Line/config.lua
index e673462f4..9c0826e16 100644
--- a/resources/Supply-Line/config.lua
+++ b/resources/Supply-Line/config.lua
@@ -310,27 +310,6 @@ Config = {
{ x = 1.395, y = 0.445, z = 0.175, rx = -22.750, ry = 0.000, rz = -83.750, depth = 0.895 }
},
},
- [`rearmountels`] = {
- useBone = false,
- bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
- offsets = {
- {x = -1.345, y = 1.095, z = -0.440, rx = -24.750, ry = 0.000, rz = 72.000, depth = 0.670 },
- },
- },
- [`midmountels`] = {
- useBone = false,
- bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
- offsets = {
- { x = -1.320, y = 1.370, z = -0.595, rx = -24.250, ry = 0.000, rz = 77.500, depth = 0.860 },
- },
- },
- [`ldfoam`] = {
- useBone = false,
- bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
- offsets = {
- { x = 1.375, y = 1.160, z = 0.000, rx = -20.500, ry = 0.000, rz = -91.000, depth = 0.550 },
- },
- },
[`ldfoamels`] = {
useBone = false,
bones = {}, -- to add bones do "bone_name" you can have multiple by doing "bonename", "bonename_2"
diff --git a/resources/Supply-Line/stream/bv_water_pump.ydr b/resources/Supply-Line/stream/bv_water_pump.ydr
index 72c63538f..871777a1e 100644
--- a/resources/Supply-Line/stream/bv_water_pump.ydr
+++ b/resources/Supply-Line/stream/bv_water_pump.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0275e0fdb7b7d790a0105e611d8f66c8c8f5478b5793ff259e4d2f0541f23453
-size 1793560
+oid sha256:75fc8c4e8c0690515c45238b91b1b81cbcaf106af8d9ab274b790d9b5f6749bb
+size 1793551
diff --git a/resources/Supply-Line/sv_supplyline.lua b/resources/Supply-Line/sv_supplyline.lua
index adf954e87..3d1375e8d 100644
Binary files a/resources/Supply-Line/sv_supplyline.lua and b/resources/Supply-Line/sv_supplyline.lua differ
diff --git a/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/__resource.lua b/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/__resource.lua
new file mode 100644
index 000000000..1adf6dbe3
--- /dev/null
+++ b/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/__resource.lua
@@ -0,0 +1,26 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+ 'peds.meta'
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.META'
+data_file 'PED_METADATA_FILE' 'peds.meta'
+
+
+client_script {
+ 'vehicle_names.lua'
+}
+
+
+
+
diff --git a/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/fxmanifest.lua b/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/fxmanifest.lua
deleted file mode 100644
index c0f213953..000000000
--- a/resources/[EGRP-CarPacks]/[lapd-pack]/lapd25f/fxmanifest.lua
+++ /dev/null
@@ -1,19 +0,0 @@
-fx_version 'cerulean'
-games {'gta5'}
-lua54 'yes'
-
-files {
- 'data/**/*.meta',
- }
-
- escrow_ignore {
- 'data/*',
-}
-
-client_script 'data/**/vehicle_names.lua'
-
-data_file 'HANDLING_FILE' 'data/**/*handling.meta'
-data_file 'VEHICLE_METADATA_FILE' 'data/**/*vehicles.meta'
-data_file 'CARCOLS_FILE' 'data/**/*carcols.meta'
-data_file 'VEHICLE_VARIATION_FILE' 'data/**/*carvariations.meta'
-data_file 'VEHICLE_LAYOUTS_FILE' 'data/**/*vehiclelayouts.meta'
diff --git a/resources/[EGRP-CarPacks]/lapd25fsl/__resource.lua b/resources/[EGRP-CarPacks]/lapd25fsl/__resource.lua
new file mode 100644
index 000000000..1adf6dbe3
--- /dev/null
+++ b/resources/[EGRP-CarPacks]/lapd25fsl/__resource.lua
@@ -0,0 +1,26 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+ 'peds.meta'
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.META'
+data_file 'PED_METADATA_FILE' 'peds.meta'
+
+
+client_script {
+ 'vehicle_names.lua'
+}
+
+
+
+
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/.fxap b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/.fxap
index f18a52e0c..711860870 100644
Binary files a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/.fxap and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/.fxap differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_03.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_03.ydr
index ddf0680c2..df00f0b9e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_03.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_03.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f64263be4eee5fd8743037191a1f643df57005500da6af2fb4c98856bb51f5f7
-size 9895606
+oid sha256:ddcd79714e460daf85c62001939476018aca532dabe42ae3add257cd2848f1e9
+size 9957615
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_1a.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_1a.ydr
index 2040045b0..f91a33963 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_1a.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_1a.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:987f27a30330519a6430c9c7ff5a63d0ccd100067524a063f31b6bc09a60ab23
-size 770081
+oid sha256:08472fdeb422c56f84a351e117fe04facbd935e256c6acba8442e3d4ca2145a3
+size 808658
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_2.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_2.ydr
index 7ddcaab9e..d3d0821b1 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_2.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/ch3_06_land_2.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:28a6aa61cd5dce2c9b23f016ce36bcecdb19cf7df75c781f9a46a33fde558742
-size 903844
+oid sha256:dd47e03a33619f4b0758bc93ae793d2b3a405872a6daf9b8d7a158f7bb539e3d
+size 978246
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hei_id2_21_g_strm_0.ymap b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hei_id2_21_g_strm_0.ymap
index 8e4e70474..946561ac6 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hei_id2_21_g_strm_0.ymap
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hei_id2_21_g_strm_0.ymap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f64774313533c69e199a4d5b1908ec7038297c79f42e036bc4c31acca47f4bba
-size 9316
+oid sha256:baa828df43e22662aac0e08df2b2656b64ed9e150e42e76da202bf7a5262c54e
+size 8799
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hi@id2_21_g_0.ybn b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hi@id2_21_g_0.ybn
index 85c547f72..f38edbf84 100644
Binary files a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hi@id2_21_g_0.ybn and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/hi@id2_21_g_0.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots10-12_ovly.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots10-12_ovly.ydr
index a72a48903..0fef2d100 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots10-12_ovly.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots10-12_ovly.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5713ba9d182240c85094631a0a394a3f09b53ee0b9b0ea3472311bfdb87eef85
-size 93620
+oid sha256:46411a947b57f4cf6ed46ce59fd94c46c94debc66bb55b02c4dbcd6c16fe9b24
+size 99958
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6.ydr
index 865ad827c..ca2ff8274 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3b1f611a326f0773128181ff58c50746c7a2ee8f97bc665c85edf599463da9c1
-size 992844
+oid sha256:355614ad1dd7920b3840a8e4eea79aea6159df1275371a7497bb22b2d277fff8
+size 1082220
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6_ovly.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6_ovly.ydr
index 21ebf0f4a..d07fe478f 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6_ovly.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots4-6_ovly.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f07ce58ac25d444689755db20d2c508b00ec6c0a588ff197a801fb00f6ebab81
-size 300156
+oid sha256:7f623c67d98447cdcf9e6d8f4b88cb30a800fb3301aa3a349cdfb3d6c4cfa7fa
+size 326879
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-12_ovly.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-12_ovly.ydr
index 1984f1998..d740f5ab9 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-12_ovly.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-12_ovly.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:697b72f0571f518fed0785f6706f1739a7510064ce991234d1af2f3c6301e7f6
-size 137760
+oid sha256:5207c6d78da21e2e292e8069b02e8e1c4d20d8f2e721f6e39af211972a862993
+size 154812
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-9.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-9.ydr
index 06610a71d..ffb5657af 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-9.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_a_plots7-9.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:475b2b5048c25a2c199876f5c116017ee289f0664bf217d3944431d3d6b4db95
-size 1903637
+oid sha256:24eaef8cd26d4e8ef883e0ce71fc0acb058f3bd50da61d7745f8b84c8487d935
+size 1965589
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_decalb2.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_decalb2.ydr
index e72739607..572ee405f 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_decalb2.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_decalb2.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8c40406f1e4f051ebb4b602fb93a260cd083825d07fdbd6338e2b647daab228c
-size 136927
+oid sha256:a48f6afc16c36ae8fe20f1ac682b2df0d9f9969dd2cf4bbe37473a61174434c5
+size 140708
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_gluea.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_gluea.ydr
index 28c3a41a9..f6860f597 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_gluea.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_gluea.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ef6bd1cc985839b832721c11c6c4aad85ad8e6130bf88dd36bed506f1e4c8af2
-size 172255
+oid sha256:73170d2cdb444aaf2cccad8e58f2cdbbf0b07a3704168b3e85a50a24901c37f2
+size 174477
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_glueb2.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_glueb2.ydr
index 8cb641670..a99065cb6 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_glueb2.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_glueb2.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:23abc4d4bfe9acb1cd033c07217db3456753b7c45753ef18bee49d44d3a3255f
-size 117388
+oid sha256:1db3a41a054bd14d0e4562a476d442441d47cd4c1f7678ea1083b72b5e2c9698
+size 135339
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_grndb.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_grndb.ydr
index eb07c1326..184e3420e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_grndb.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_c_grndb.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3fafe048f81a1c3d92780a48d82ec15bb68fe6eee7c0d041037220fd5669b529
-size 944084
+oid sha256:b404c44b3bca7e0195b6049d11b46be9c9df9e7f0aee23d5cae4d000f07bfd99
+size 987319
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_a2.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_a2.ydr
index 6b503752a..a6860fe7c 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_a2.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_a2.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d052dba94af200f3f16cc2ce70d11dc1a8cceff1800a72e8268050e1f60c10ee
-size 491170
+oid sha256:52be427fee4f5cf8fd66d822409d492cb2d99f3444a25c3aa2d543358047a49b
+size 520332
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_b_1.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_b_1.ydr
index 8cc720d19..467c5d9d6 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_b_1.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_b_1.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb17b831e1e676fb9f396c356ac824fc4a63954900b53e86e6078eaca98739bf
-size 393761
+oid sha256:1dcc2ab759bfab74d61235669c2287a0db0be14b2829f97667264a93e489c217
+size 431981
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_c.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_c.ydr
index af67a2cfd..d8a76806e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_c.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_c.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7d9908eddb4d0f2236d3a8f0393d810a7964e7be3b71dc41230fb40df23fcae9
-size 1157749
+oid sha256:55938dc1347fe756d1aa6790789acc468d8a0d233adb19f5e6ef2db7c2a079d6
+size 1169285
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_ca.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_ca.ydr
index acc240f3a..0ad267132 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_ca.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_decals_ca.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d01279e86455d9b904e7acddbe913c6342cb2ebd7b757f1bb1e17f373a3cf9ef
-size 149221
+oid sha256:583364663e2389e531a88cf0b3318845b957645a26c8f88030de37f3ebed4932
+size 153027
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_a.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_a.ydr
index 50066e8e2..78e8d458e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_a.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_a.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a64fa2fa5235345182ec525028bc0f1f46ad10cc5dd02ac8a48f06c7cba08b7f
-size 2959109
+oid sha256:eda9bbb762afddee94be66d889fe283b78093360ebf08c3866b129962e407ec2
+size 3015929
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_c.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_c.ydr
index f07206ba7..8840d8ad0 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_c.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_d_mesh_c.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:25756ab9a020171836a4c26e02736a5c966c96dedd16c876f427564af3aef2c4
-size 2771004
+oid sha256:0a8c142f321bc745e8747eda189909a9de4fca28e33a9265f67030011bd5848d
+size 2871205
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_e_grassx61.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_e_grassx61.ydr
index 829fc85dd..e3e456040 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_e_grassx61.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_e_grassx61.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:529ce618d3ad5796769ce4a9946ea3118f43e1b80bf7203dfe4a63844003dcff
-size 15039
+oid sha256:e4f85743ae6b7e82118052c0b03c0aa5d877c1115a30ac0f0d9a8ed4018e0284
+size 16351
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decala.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decala.ydr
index 521292d68..fa99abe6f 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decala.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decala.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0efa1db450a01a06b791c45d3f66bee23582023e09cfcc03f24b6bb22007e623
-size 168549
+oid sha256:81f63bdb3b3960f7808d8c7e326fc102cc3f7a4f950a5c6d463357adf35fdeb7
+size 180884
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decalb.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decalb.ydr
index 232c23bf7..23f0d7225 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decalb.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_alley_decalb.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c718f4bc15e84d0c3f77a4ca1e65e7fa4738a91524dee206604d5c1ac769507e
-size 272122
+oid sha256:1fd5b020ababbf14af7c23160938c2cef2b0b116797f1079911594a2f72a79d9
+size 278258
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_res_decal3.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_res_decal3.ydr
index fcd2e0524..ed6db386b 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_res_decal3.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_f_res_decal3.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5fe4845b156b251c6bd2ed5c8184e0a4a7b5f204a2c2493e39f095a53087a5ed
-size 148795
+oid sha256:e205f003448b484c415228ee6446c359267d583abfa60367f7f9e7556e1051ba
+size 156395
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_2.ybn b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_2.ybn
index 8eb14eee6..cb7a26aa5 100644
Binary files a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_2.ybn and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_2.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_3.ybn b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_3.ybn
index 437a140c3..2098693cc 100644
Binary files a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_3.ybn and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_3.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_blend_decal01.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_blend_decal01.ydr
index 27e4be3aa..1148784f8 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_blend_decal01.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_blend_decal01.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8dc65445b3020c1ee2aa198069cad970baa03edfbda91e2b24b613523307b14a
-size 432017
+oid sha256:2f13aac663b9512ea6c8d248586a5c562c85b16e88d80543688b30058002fcbc
+size 435815
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_culdesac_grnd.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_culdesac_grnd.ydr
index 451eea6ba..c30364ae0 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_culdesac_grnd.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_culdesac_grnd.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:66334c9bd4b60f1a24f8d168acb829802df9fac40e0ef7d0fe53d91e36104815
-size 6658873
+oid sha256:427c3a993998d99e9d169e76fd02ce555afae7311a17e027d21f1f30bebea7fe
+size 6906995
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_slod1_children.ydd b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_slod1_children.ydd
new file mode 100644
index 000000000..7d2c4c51c
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_g_slod1_children.ydd differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsa.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsa.ydr
index 848bee41b..74727c295 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsa.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsa.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d4ae11c7ddd81e18882f31e25276b43bbe5efcba66adcbe572c2d4e2c0a954ec
-size 159921
+oid sha256:6acab98f46ba31756b7da18ecbee4ee8d2312cf2149e9181d84534d0fba5454b
+size 164114
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsb.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsb.ydr
index 74bab2df4..aace4d3f1 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsb.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsb.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b955af47f2385ce60020b113e88aaa347a2f757f005c0d579cc8169e2176fcdb
-size 227692
+oid sha256:1d3d3d91b8f6604c19a26c6df920ab3d7edb60dd929afe5aab08f5165ae0d46f
+size 230442
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsc.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsc.ydr
index 15f10cc13..2b284338d 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsc.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resdecalsc.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a5fdf3948efafb044957f1ca875926d91f0a2543e856b6ebe7b1e57a0a2fdf8e
-size 146884
+oid sha256:48d0bbbf146675bdef5f6a07206be053f2ff92535a37872b709afa8259702cf3
+size 150214
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrnda.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrnda.ydr
index deb1f4a26..ca53cd721 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrnda.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrnda.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a65707d8bf4c3f22bb10ddde34a2e07be396de100fba042593f3fca936ef7b38
-size 647755
+oid sha256:a859f85e176303e67a432e567085d776949a1fa82b315ca9b20e8e2a96aeb40f
+size 697477
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrndb.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrndb.ydr
index 10721979b..3a02b6a27 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrndb.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_21_resgrndb.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fcfb847abd6bc31009b70d6cf74764bacf251ec7387ebc1eaf250dd7af84fc02
-size 832584
+oid sha256:a49c36fe5108beb2520c17fa0e3dba54321f0e7a9abaaa9b23a06145d39a9836
+size 884418
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_04.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_04.ydr
index 77ebaa1cd..7c8d134b2 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_04.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_04.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f54cfc78aa86868029518130afc604ad95d71a54c6e9d13c22e7349962a48b5d
-size 545423
+oid sha256:8189d77a8c7d7540328865ff96d8d4a9e28da127c842a73830fa15ecdc377ced
+size 563385
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_06.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_06.ydr
index 28f86ea4c..4091e325c 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_06.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r1_06.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9ae3d9920bf65ca1c9fb81068337fdcc8bb3395032951450cdd2c9cf576e7995
-size 376702
+oid sha256:ec73032a14a31d741b8004c997822dbe53f9217c0ed8748c327f07502bf530db
+size 406728
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_02.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_02.ydr
index 3a777eef0..334c04148 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_02.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_02.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0f19814803365744b087e55fe1c111e78a800d40baca0b5209d64154ea76f14f
-size 273251
+oid sha256:ebd29a74152a34bb9c297eaf3f2a6380c39b7ab645735f284cc4ff9f9e074e8b
+size 287769
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_03.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_03.ydr
index 92dd71814..20d604e17 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_03.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/id2_rdb_r3_03.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1d61d110d324334327910bdc4d8704ee4555790583f609d10d15ac9079323793
-size 218240
+oid sha256:4dd6230874e1f6d4ad6677365d7e67e434cec34f3df94f4d563305f4b8adbacf
+size 225321
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_01_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_01_.ydr
index 917d5e001..eb9cb3bf6 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_01_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_01_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d2f59555d763573567b3bf5385c5f70c373e936eaa4b92deb2fe112e2bcdd674
-size 55809
+oid sha256:5f938aca279c92da822183da21746c8d72927e0a2bf4c62c6d8e602e2242d866
+size 55838
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_09_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_09_.ydr
index fcdf393c1..8b2fe6d17 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_09_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_09_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1726b6a9dca85d49ce7e467b5f932c5f90c55a22bbbb186136c9e37d1f069782
-size 9908137
+oid sha256:5b90930d1cc21169f850d06c234ff2f345355e8de70224b93b0fe294fd582996
+size 10296118
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13_.ydr
index 295596c39..8628d4f33 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fbdcb1bbfa17dd25e483b2cc1d6248903ca9a06b6a89a02ba53dc6ad9f6124a9
-size 6780548
+oid sha256:2dcfc5c8f5a71fa5c91f6bb4ef755aa775816b0766be70e606ff7dfad3b2dd31
+size 7008002
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13d_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13d_.ydr
index 45450306f..195b82b02 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13d_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_13d_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d2043cf0713ac6158df5e4d6b296548edcfbf5d738d179b4424a6d6d318399a6
-size 47042
+oid sha256:09c88498b88ed167ab18314297453c0b012f5b6a9b7471d98229ab05557ddecf
+size 52662
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19_.ydr
index f6bd32d4f..971799a35 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6a3f384a045e8d9782ed137993de576b194ba997235e671b83d09ba66f7ba78c
-size 8341217
+oid sha256:8571176b59beddf6829614ebc8d70f7632cdf8cf7637951f7207fca61d90eb7e
+size 9462275
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19d_.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19d_.ydr
index 47a24b68c..ffb1d9f99 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19d_.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_data_mirrorpark/stream/lf_house_19d_.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3a2110f43d6b13abf998de5872b98b6d0670bbd87cf262d1d2dd2f7a672a7541
-size 35985
+oid sha256:6adb32fcea656cf0cdad2dac17174a7ce25b248172eae4b9a58c9f252b184438
+size 39811
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/.fxap b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/.fxap
index b93c0917e..25ffdd220 100644
Binary files a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/.fxap and b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/.fxap differ
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_meta/hn_mrp_culdesac.ymap b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_meta/hn_mrp_culdesac.ymap
index 41f7181db..274729dd1 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_meta/hn_mrp_culdesac.ymap
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_meta/hn_mrp_culdesac.ymap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8422f37381a7ca35ed48e58c1968a45b62c1b3601242c898041ad85578c2c91a
-size 4027
+oid sha256:24e671357b4ee7b523ce8107b13d35f8cc4f4a049faf212cee424396009ff05b
+size 4001
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_details.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_details.ydr
index 4522ba8eb..6ee97fd84 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_details.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_details.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d421b7889da219acedf5697d54e7c44908a29de55b31c724447ab3d4ac1eb315
-size 3952552
+oid sha256:27552200d17aa34802709a0cf0c6eb5310d878d6974343f0d5c8372231d29aef
+size 4529586
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_kitchen_unit.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_kitchen_unit.ydr
index 4b1d46c86..b5b91a6fb 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_kitchen_unit.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_kitchen_unit.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4fe4ebc9072c2f7ed35dd15e5283c40516a46e032b2a63935d3114921e7eb1d6
-size 596290
+oid sha256:19616b22ac45a9f2f44cd51a3ecba12e69a443760acaabccc578689ef28697cf
+size 688289
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_shell.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_shell.ydr
index 63b726389..3530f8b3b 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_shell.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_shell.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2d308a79901b15f1977856b629b44e5e11a28ef6ae20a5962b4ed41292a98202
-size 127911
+oid sha256:397b65aa7a27363127dc46edc9d9128608936d7f489768599859e6f60548f0a9
+size 147233
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_sofa.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_sofa.ydr
index 73fb26dd2..d6ad8b1cd 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_sofa.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h13_md_sofa.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f3523f49aaaf082f6ba6839d68ddd26e0524454c91084d663e35db2b3660a373
-size 266633
+oid sha256:a51f2e1ce78d6776fb2cbde5d75b21b970e906d775ebbcba3a163267919001e1
+size 281409
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details1.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details1.ydr
index 1843a8ceb..d8a28d85e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details1.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details1.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4f3bfa1c8be1cb2613c52d928631728e3e473f51f43c20243a199e5557711bd2
-size 6838667
+oid sha256:fbbdf7665d1c171a70d2480bae7b8f4454acd69d6d0b23b6d86e63ba057aa9b0
+size 7129229
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details2.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details2.ydr
index 33cfa0f8c..3f994465f 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details2.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_details2.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:de694b9716eb5d86bfe5728d19142d7bc8b8520fc4dc53a351576a9912aa1f18
-size 2708694
+oid sha256:68a246619a78108eda2871b30ad618cb3df297eee81798b536acc80d2b5e8a06
+size 3029610
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_sofa_md.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_sofa_md.ydr
index a72daba6a..29dcce750 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_sofa_md.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h19_sofa_md.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6916c7e74bd99c602c7c8ba527d136769e0fc411ca1ddbd53e678d016135db02
-size 12952584
+oid sha256:9397beaade3dad69b000b41db23f7005cf195d10b3097635b5c63aec6c6bca89
+size 13428161
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_details.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_details.ydr
index a990f668e..1c1ec9c2e 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_details.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_details.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:98777115bf14f8e86b62b141834d4fd4bf4767062834cd6808cb207ccc0a1ee2
-size 4404778
+oid sha256:ae1d90b12cf7c77ae0d7a067d3f40e3f7c18adfe662fffb40c8f9ef857295f15
+size 5731020
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_shell.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_shell.ydr
index fca1c6c7b..fc6acff66 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_shell.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_shell.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b76c7c2c84c113e92ac01958628e0bafe181fd29089bfc359d0129049f68dfc3
-size 298651
+oid sha256:0208b5f3a6f5368b34bf930a7f326ce7a90ffc758163d33a22cd60c5d1cc522a
+size 307827
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa.ydr
index e21091849..21b9811f5 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8eef5090b68617eaf3426b789af3c092f7a727c5b336913d947869922c5089f7
-size 384351
+oid sha256:4bb125400769b2386d5482e1a8be3992e35f020800ec2ff645690d0d3a1432b8
+size 426373
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa_b.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa_b.ydr
index 978e25db3..49e879b42 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa_b.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h1_md_sofa_b.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1f20a2da9dca3db6813128131b986ddc99b49690f2e62cdd8987a917d89ef512
-size 902121
+oid sha256:299b6a00863156663f4c2a552bbc93f8fde1fcfa67676216e77f9d7a17a1350b
+size 949577
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_details.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_details.ydr
index 41e4b698b..be24e1f47 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_details.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_details.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:daf7aeeb113775e1b5f14d72a963f599a775ea90a876c00fcdc0d54f47b5c707
-size 5774345
+oid sha256:5e07ce97072fd8044846a8efd52801cf055e9d84c49319ddc6aa3ed326be7812
+size 6662162
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_shell.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_shell.ydr
index 2a6238b97..bb9b06619 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_shell.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_shell.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:84951a87b1968ac581683ae4ebd5737733cf991d1074b6cec038d3d2bc0908bc
-size 1464653
+oid sha256:2fb419bffda4faee28fe74231ff62a1b581ebd28da319a6cfeafa91f3cfd874d
+size 1516825
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa.ydr
index fcd078b57..d87a3b12d 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:612a64f31fa28776647edccb777b204b1299fdc481bfebd1b5f79a97b4a650bd
-size 343974
+oid sha256:2f47b040d94f4a135399a053bf3e37ee6ce6da1927943e771511ebf98cdc585a
+size 367605
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa_b.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa_b.ydr
index 3ef45331e..dae503052 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa_b.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_h9_md_sofa_b.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e78f53df79e10e8f4c23790c1311642aa5a248231f4b579a76e24e9ba57eed63
-size 875111
+oid sha256:28e87cb2fcda9d6ec505426baaeb8cb05c01dfe0f138c9746b4cf5d05584ca25
+size 978393
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_house19_shell.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_house19_shell.ydr
index 1adba322e..c52fd84a0 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_house19_shell.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hn_mrp_house19_shell.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3f782712b846d33b50cb2b2bc30f2ad0c2bb4cd447ab305bdfe1756964e097fd
-size 627214
+oid sha256:b2ccc2e1f9fa81f94b2c270e13a235ca0362570ac9d201da3bb6c1f7e1b48f76
+size 653519
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hns_mrp_cul_grnd.ydr b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hns_mrp_cul_grnd.ydr
index 44544bcfd..e287eadc7 100644
--- a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hns_mrp_cul_grnd.ydr
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/hane_mirrorpark_41_house_md/stream/custom_models/hns_mrp_cul_grnd.ydr
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6ea63a94602cf41437ca8c66ee2c546da1171b8eafd23026e10cab5610aa42b0
-size 3943158
+oid sha256:0eb140203c5041f09f45b2c6993d05b52cc932182145b88cc09a5772e8b855f2
+size 4163475
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/LICENSE b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/LICENSE
new file mode 100644
index 000000000..65c5ca88a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/README.md b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/README.md
new file mode 100644
index 000000000..aa15bc914
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/README.md
@@ -0,0 +1,32 @@
+# ox_lib
+
+A FiveM library and resource implementing reusable modules, methods, and UI elements.
+
+
+
+
+
+
+For guidelines to contributing to the project, and to see our Contributor License Agreement, see [CONTRIBUTING.md](./CONTRIBUTING.md)
+
+For additional legal notices, refer to [NOTICE.md](./NOTICE.md).
+
+
+## 📚 Documentation
+
+https://overextended.dev/ox_lib
+
+## 💾 Download
+
+https://github.com/overextended/ox_lib/releases/latest/download/ox_lib.zip
+
+## 📦 npm package
+
+https://www.npmjs.com/package/@overextended/ox_lib
+
+## 🖥️ Lua Language Server
+
+- Install [Lua Language Server](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) to ease development with annotations, type checking, diagnostics, and more.
+- Install [cfxlua-vscode](https://marketplace.visualstudio.com/items?itemName=overextended.cfxlua-vscode) to add natives and cfxlua runtime declarations to LLS.
+- You can load ox_lib into your global development environment by modifying workspace/user settings "Lua.workspace.library" with the resource path.
+ - e.g. "c:/fxserver/resources/ox_lib"
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/fxmanifest.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/fxmanifest.lua
new file mode 100644
index 000000000..fd5e964dd
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/fxmanifest.lua
@@ -0,0 +1,48 @@
+fx_version 'cerulean'
+use_experimental_fxv2_oal 'yes'
+lua54 'yes'
+games { 'rdr3', 'gta5' }
+rdr3_warning 'I acknowledge that this is a prerelease build of RedM, and I am aware my resources *will* become incompatible once RedM ships.'
+
+name 'ox_lib'
+author 'Overextended'
+version '3.30.6'
+license 'LGPL-3.0-or-later'
+repository 'https://github.com/overextended/ox_lib'
+description 'A library of shared functions to utilise in other resources.'
+
+dependencies {
+ '/server:7290',
+ '/onesync',
+}
+
+ui_page 'web/build/index.html'
+
+files {
+ 'init.lua',
+ 'resource/settings.lua',
+ 'imports/**/client.lua',
+ 'imports/**/shared.lua',
+ 'web/build/index.html',
+ 'web/build/**/*',
+ 'locales/*.json',
+}
+
+shared_script 'resource/init.lua'
+
+shared_scripts {
+ 'resource/**/shared.lua',
+ -- 'resource/**/shared/*.lua'
+}
+
+client_scripts {
+ 'resource/**/client.lua',
+ 'resource/**/client/*.lua'
+}
+
+server_scripts {
+ 'imports/callback/server.lua',
+ 'imports/getFilesInDirectory/server.lua',
+ 'resource/**/server.lua',
+ 'resource/**/server/*.lua',
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/.gitignore b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/.gitignore
new file mode 100644
index 000000000..292a4afb6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/.gitignore
@@ -0,0 +1 @@
+!cache
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/__addCommand/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/__addCommand/server.lua
new file mode 100644
index 000000000..470d4fcf2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/__addCommand/server.lua
@@ -0,0 +1,118 @@
+-- DO NOT USE! Old syntax for addCommand (prior to v3.0)
+---@todo convert input and call standard function?
+
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local commands = {}
+
+SetTimeout(1000, function()
+ TriggerClientEvent('chat:addSuggestions', -1, commands)
+end)
+
+AddEventHandler('playerJoining', function()
+ TriggerClientEvent('chat:addSuggestions', source, commands)
+end)
+
+local function chatSuggestion(name, parameters, help)
+ local params = {}
+
+ if parameters then
+ for i = 1, #parameters do
+ local arg, argType = string.strsplit(':', parameters[i])
+
+ if argType and argType:sub(0, 1) == '?' then
+ argType = argType:sub(2, #argType)
+ end
+
+ params[i] = {
+ name = arg,
+ help = argType
+ }
+ end
+ end
+
+ commands[#commands + 1] = {
+ name = '/' .. name,
+ help = help,
+ params = params
+ }
+end
+
+---@deprecated
+---@param group string | string[] | false
+---@param name string | string[]
+---@param callback function
+---@param parameters table
+function lib.__addCommand(group, name, callback, parameters, help)
+ if not group then group = 'builtin.everyone' end
+
+ if type(name) == 'table' then
+ for i = 1, #name do
+ ---@diagnostic disable-next-line: deprecated
+ lib.__addCommand(group, name[i], callback, parameters, help)
+ end
+ else
+ chatSuggestion(name, parameters, help)
+
+ RegisterCommand(name, function(source, args, raw)
+ source = tonumber(source) --[[@as number]]
+
+ if parameters then
+ for i = 1, #parameters do
+ local arg, argType = string.strsplit(':', parameters[i])
+ local value = args[i]
+
+ if arg == 'target' and value == 'me' then value = source end
+
+ if argType then
+ local optional
+
+ if argType:sub(0, 1) == '?' then
+ argType = argType:sub(2, #argType)
+ optional = true
+ end
+
+ if argType == 'number' then
+ value = tonumber(value) or value
+ end
+
+ local type = type(value)
+
+ if type ~= argType and (not optional or type ~= 'nil') then
+ local invalid = ('^1%s expected <%s> for argument %s (%s), received %s^0'):format(name,
+ argType, i, arg, type)
+ if source < 1 then
+ return print(invalid)
+ else
+ return TriggerClientEvent('chat:addMessage', source, invalid)
+ end
+ end
+ end
+
+ args[arg] = value
+ args[i] = nil
+ end
+ end
+
+ callback(source, args, raw)
+ end, group and true)
+
+ name = ('command.%s'):format(name)
+ if type(group) == 'table' then
+ for _, v in ipairs(group) do
+ if not IsPrincipalAceAllowed(v, name) then lib.addAce(v, name) end
+ end
+ else
+ if not IsPrincipalAceAllowed(group, name) then lib.addAce(group, name) end
+ end
+ end
+end
+
+---@diagnostic disable-next-line: deprecated
+return lib.__addCommand
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addCommand/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addCommand/server.lua
new file mode 100644
index 000000000..a6919829f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addCommand/server.lua
@@ -0,0 +1,164 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class OxCommandParams
+---@field name string
+---@field help? string
+---@field type? 'number' | 'playerId' | 'string' | 'longString'
+---@field optional? boolean
+
+---@class OxCommandProperties
+---@field help string?
+---@field params OxCommandParams[]?
+---@field restricted boolean | string | string[]?
+
+---@type OxCommandProperties[]
+local registeredCommands = {}
+local shouldSendCommands = false
+
+SetTimeout(1000, function()
+ shouldSendCommands = true
+ TriggerClientEvent('chat:addSuggestions', -1, registeredCommands)
+end)
+
+AddEventHandler('playerJoining', function()
+ TriggerClientEvent('chat:addSuggestions', source, registeredCommands)
+end)
+
+---@param source number
+---@param args table
+---@param raw string
+---@param params OxCommandParams[]?
+---@return table?
+local function parseArguments(source, args, raw, params)
+ if not params then return args end
+
+ local paramsNum = #params
+ for i = 1, paramsNum do
+ local arg, param = args[i], params[i]
+ local value
+
+ if param.type == 'number' then
+ value = tonumber(arg)
+ elseif param.type == 'string' then
+ value = not tonumber(arg) and arg
+ elseif param.type == 'playerId' then
+ value = arg == 'me' and source or tonumber(arg)
+
+ if not value or not DoesPlayerExist(value--[[@as string]]) then
+ value = false
+ end
+ elseif param.type == 'longString' and i == paramsNum then
+ if arg then
+ local start = raw:find(arg, 1, true)
+ value = start and raw:sub(start)
+ else
+ value = nil
+ end
+ else
+ value = arg
+ end
+
+ if not value and (not param.optional or param.optional and arg) then
+ return Citizen.Trace(("^1command '%s' received an invalid %s for argument %s (%s), received '%s'^0\n"):format(string.strsplit(' ', raw) or raw, param.type, i, param.name, arg))
+ end
+
+ arg = value
+
+ args[param.name] = arg
+ args[i] = nil
+ end
+
+ return args
+end
+
+---@param commandName string | string[]
+---@param properties OxCommandProperties | false
+---@param cb fun(source: number, args: table, raw: string)
+---@param ... any
+function lib.addCommand(commandName, properties, cb, ...)
+ -- Try to handle backwards-compatibility with the old addCommand syntax (prior to v3.0)
+ local restricted, params
+
+ if properties then
+ if ... or table.type(properties) ~= 'hash' then
+ local _commandName = type(properties) == 'table' and properties[1] or properties
+ local info = debug.getinfo(2, 'Sl')
+
+ warn(("command '%s' is using deprecated syntax for lib.addCommand\nupdate the command or use lib.__addCommand to ignore this warning\n> source ^0(^5%s^0:%d)"):format(_commandName, info.short_src, info.currentline))
+ ---@diagnostic disable-next-line: deprecated
+ return lib.__addCommand(commandName, properties, cb, ...)
+ end
+
+ restricted = properties.restricted
+ params = properties.params
+ end
+
+ if params then
+ for i = 1, #params do
+ local param = params[i]
+
+ if param.type then
+ param.help = param.help and ('%s (type: %s)'):format(param.help, param.type) or ('(type: %s)'):format(param.type)
+ end
+ end
+ end
+
+ local commands = type(commandName) ~= 'table' and { commandName } or commandName
+ local numCommands = #commands
+ local totalCommands = #registeredCommands
+
+ local function commandHandler(source, args, raw)
+ args = parseArguments(source, args, raw, params)
+
+ if not args then return end
+
+ local success, resp = pcall(cb, source, args, raw)
+
+ if not success then
+ Citizen.Trace(("^1command '%s' failed to execute!\n%s"):format(string.strsplit(' ', raw) or raw, resp))
+ end
+ end
+
+ for i = 1, numCommands do
+ totalCommands += 1
+ commandName = commands[i]
+
+ RegisterCommand(commandName, commandHandler, restricted and true)
+
+ if restricted then
+ local ace = ('command.%s'):format(commandName)
+ local restrictedType = type(restricted)
+
+ if restrictedType == 'string' and not IsPrincipalAceAllowed(restricted, ace) then
+ lib.addAce(restricted, ace)
+ elseif restrictedType == 'table' then
+ for j = 1, #restricted do
+ if not IsPrincipalAceAllowed(restricted[j], ace) then
+ lib.addAce(restricted[j], ace)
+ end
+ end
+ end
+ end
+
+ if properties then
+ ---@diagnostic disable-next-line: inject-field
+ properties.name = ('/%s'):format(commandName)
+ properties.restricted = nil
+ registeredCommands[totalCommands] = properties
+
+ if i ~= numCommands and numCommands ~= 1 then
+ properties = table.clone(properties)
+ end
+
+ if shouldSendCommands then TriggerClientEvent('chat:addSuggestions', -1, properties) end
+ end
+ end
+end
+
+return lib.addCommand
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addKeybind/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addKeybind/client.lua
new file mode 100644
index 000000000..37dca17af
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/addKeybind/client.lua
@@ -0,0 +1,91 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+if cache.game == 'redm' then return end
+
+---@class KeybindProps
+---@field name string
+---@field description string
+---@field defaultMapper? string (see: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/)
+---@field defaultKey? string
+---@field disabled? boolean
+---@field disable? fun(self: CKeybind, toggle: boolean)
+---@field onPressed? fun(self: CKeybind)
+---@field onReleased? fun(self: CKeybind)
+---@field [string] any
+
+---@class CKeybind : KeybindProps
+---@field currentKey string
+---@field disabled boolean
+---@field isPressed boolean
+---@field hash number
+---@field getCurrentKey fun(): string
+---@field isControlPressed fun(): boolean
+
+local keybinds = {}
+
+local IsPauseMenuActive = IsPauseMenuActive
+local GetControlInstructionalButton = GetControlInstructionalButton
+
+local keybind_mt = {
+ disabled = false,
+ isPressed = false,
+ defaultKey = '',
+ defaultMapper = 'keyboard',
+}
+
+function keybind_mt:__index(index)
+ return index == 'currentKey' and self:getCurrentKey() or keybind_mt[index]
+end
+
+function keybind_mt:getCurrentKey()
+ return GetControlInstructionalButton(0, self.hash, true):sub(3)
+end
+
+function keybind_mt:isControlPressed()
+ return self.isPressed
+end
+
+function keybind_mt:disable(toggle)
+ self.disabled = toggle
+end
+
+---@param data KeybindProps
+---@return CKeybind
+function lib.addKeybind(data)
+ ---@cast data CKeybind
+ data.hash = joaat('+' .. data.name) | 0x80000000
+ keybinds[data.name] = setmetatable(data, keybind_mt)
+
+ RegisterCommand('+' .. data.name, function()
+ if data.disabled or IsPauseMenuActive() then return end
+ data.isPressed = true
+ if data.onPressed then data:onPressed() end
+ end)
+
+ RegisterCommand('-' .. data.name, function()
+ if data.disabled or IsPauseMenuActive() then return end
+ data.isPressed = false
+ if data.onReleased then data:onReleased() end
+ end)
+
+ RegisterKeyMapping('+' .. data.name, data.description, data.defaultMapper, data.defaultKey)
+
+ if data.secondaryKey then
+ RegisterKeyMapping('~!+' .. data.name, data.description, data.secondaryMapper or data.defaultMapper, data.secondaryKey)
+ end
+
+ SetTimeout(500, function()
+ TriggerEvent('chat:removeSuggestion', ('/+%s'):format(data.name))
+ TriggerEvent('chat:removeSuggestion', ('/-%s'):format(data.name))
+ end)
+
+ return data
+end
+
+return lib.addKeybind
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/array/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/array/shared.lua
new file mode 100644
index 000000000..6b82c4962
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/array/shared.lua
@@ -0,0 +1,363 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class Array : OxClass, { [number]: T }
+lib.array = lib.class('Array')
+
+local table_unpack = table.unpack
+local table_remove = table.remove
+local table_clone = table.clone
+local table_concat = table.concat
+local table_type = table.type
+
+---@alias ArrayLike Array | { [number]: T }
+
+---@private
+function lib.array:constructor(...)
+ local arr = { ... }
+
+ for i = 1, #arr do
+ self[i] = arr[i]
+ end
+end
+
+---@private
+function lib.array:__newindex(index, value)
+ if type(index) ~= 'number' then error(("Cannot insert non-number index '%s' into an array."):format(index)) end
+
+ rawset(self, index, value)
+end
+
+---Creates a new array from an iteratable value.
+---@param iter table | function | string
+---@return Array
+function lib.array:from(iter)
+ local iterType = type(iter)
+
+ if iterType == 'table' then
+ return lib.array:new(table_unpack(iter))
+ end
+
+ if iterType == 'string' then
+ return lib.array:new(string.strsplit('', iter))
+ end
+
+ if iterType == 'function' then
+ local arr = lib.array:new()
+ local length = 0
+
+ for value in iter do
+ length += 1
+ arr[length] = value
+ end
+
+ return arr
+ end
+
+ error(('Array.from argument was not a valid iterable value (received %s)'):format(iterType))
+end
+
+---Returns the element at the given index, with negative numbers counting backwards from the end of the array.
+---@param index number
+---@return unknown
+function lib.array:at(index)
+ if index < 0 then
+ index = #self + index + 1
+ end
+
+ return self[index]
+end
+
+---Create a new array containing the elements of two or more arrays.
+---@param ... ArrayLike
+function lib.array:merge(...)
+ local newArr = table_clone(self)
+ local length = #self
+ local arrays = { ... }
+
+ for i = 1, #arrays do
+ local arr = arrays[i]
+
+ for j = 1, #arr do
+ length += 1
+ newArr[length] = arr[j]
+ end
+ end
+
+ return lib.array:new(table_unpack(newArr))
+end
+
+---Tests if all elements in an array succeed in passing the provided test function.
+---@param testFn fun(element: unknown): boolean
+function lib.array:every(testFn)
+ for i = 1, #self do
+ if not testFn(self[i]) then
+ return false
+ end
+ end
+
+ return true
+end
+
+---Sets all elements within a range to the given value and returns the modified array.
+---@param value any
+---@param start? number
+---@param endIndex? number
+function lib.array:fill(value, start, endIndex)
+ local length = #self
+ start = start or 1
+ endIndex = endIndex or length
+
+ if start < 1 then start = 1 end
+ if endIndex > length then endIndex = length end
+
+ for i = start, endIndex do
+ self[i] = value
+ end
+
+ return self
+end
+
+---Creates a new array containing the elements from an array that pass the test of the provided function.
+---@param testFn fun(element: unknown): boolean
+function lib.array:filter(testFn)
+ local newArr = {}
+ local length = 0
+
+ for i = 1, #self do
+ local element = self[i]
+
+ if testFn(element) then
+ length += 1
+ newArr[length] = element
+ end
+ end
+
+ return lib.array:new(table_unpack(newArr))
+end
+
+---Returns the first or last element of an array that passes the provided test function.
+---@param testFn fun(element: unknown): boolean
+---@param last? boolean
+function lib.array:find(testFn, last)
+ local a = last and #self or 1
+ local b = last and 1 or #self
+ local c = last and -1 or 1
+
+ for i = a, b, c do
+ local element = self[i]
+
+ if testFn(element) then
+ return element
+ end
+ end
+end
+
+---Returns the first or last index of the first element of an array that passes the provided test function.
+---@param testFn fun(element: unknown): boolean
+---@param last? boolean
+function lib.array:findIndex(testFn, last)
+ local a = last and #self or 1
+ local b = last and 1 or #self
+ local c = last and -1 or 1
+
+ for i = a, b, c do
+ local element = self[i]
+
+ if testFn(element) then
+ return i
+ end
+ end
+end
+
+---Returns the first or last index of the first element of an array that matches the provided value.
+---@param value unknown
+---@param last? boolean
+function lib.array:indexOf(value, last)
+ local a = last and #self or 1
+ local b = last and 1 or #self
+ local c = last and -1 or 1
+
+ for i = a, b, c do
+ local element = self[i]
+
+ if element == value then
+ return i
+ end
+ end
+end
+
+---Executes the provided function for each element in an array.
+---@param cb fun(element: unknown)
+function lib.array:forEach(cb)
+ for i = 1, #self do
+ cb(self[i])
+ end
+end
+
+---Determines if a given element exists inside an array.
+---@param element unknown The value to find in the array.
+---@param fromIndex? number The position in the array to begin searching from.
+function lib.array:includes(element, fromIndex)
+ for i = (fromIndex or 1), #self do
+ if self[i] == element then return true end
+ end
+
+ return false
+end
+
+---Concatenates all array elements into a string, seperated by commas or the specified seperator.
+---@param seperator? string
+function lib.array:join(seperator)
+ return table_concat(self, seperator or ',')
+end
+
+---Create a new array containing the results from calling the provided function on every element in an array.
+---@param cb fun(element: unknown, index: number, array: self): unknown
+function lib.array:map(cb)
+ local arr = {}
+
+ for i = 1, #self do
+ arr[i] = cb(self[i], i, self)
+ end
+
+ return lib.array:new(table_unpack(arr))
+end
+
+---Removes the last element from an array and returns the removed element.
+function lib.array:pop()
+ return table_remove(self)
+end
+
+---Adds the given elements to the end of an array and returns the new array length.
+---@param ... any
+function lib.array:push(...)
+ local elements = { ... }
+ local length = #self
+
+ for i = 1, #elements do
+ length += 1
+ self[length] = elements[i]
+ end
+
+ return length
+end
+
+---The "reducer" function is applied to every element within an array, with the previous element's result serving as the accumulator.
+---If an initial value is provided, it's used as the accumulator for index 1; otherwise, index 1 itself serves as the initial value, and iteration begins from index 2.
+---@generic T
+---@param reducer fun(accumulator: T, currentValue: T, index?: number): T
+---@param initialValue? T
+---@param reverse? boolean Iterate over the array from right-to-left.
+---@return T
+function lib.array:reduce(reducer, initialValue, reverse)
+ local length = #self
+ local initialIndex = initialValue and 1 or 2
+ local accumulator = initialValue or self[1]
+
+ if reverse then
+ for i = initialIndex, length do
+ local index = length - i + initialIndex
+ accumulator = reducer(accumulator, self[index], index)
+ end
+ else
+ for i = initialIndex, length do
+ accumulator = reducer(accumulator, self[i], i)
+ end
+ end
+
+ return accumulator
+end
+
+---Reverses the elements inside an array.
+function lib.array:reverse()
+ local i, j = 1, #self
+
+ while i < j do
+ self[i], self[j] = self[j], self[i]
+ i += 1
+ j -= 1
+ end
+
+ return self
+end
+
+---Removes the first element from an array and returns the removed element.
+function lib.array:shift()
+ return table_remove(self, 1)
+end
+
+---Creates a shallow copy of a portion of an array as a new array.
+---@param start? number
+---@param finish? number
+function lib.array:slice(start, finish)
+ local length = #self
+ start = start or 1
+ finish = finish or length
+
+ if start < 0 then start = length + start + 1 end
+ if finish < 0 then finish = length + finish + 1 end
+ if start < 1 then start = 1 end
+ if finish > length then finish = length end
+
+ local arr = lib.array:new()
+ local index = 0
+
+ for i = start, finish do
+ index += 1
+ arr[index] = self[i]
+ end
+
+ return arr
+end
+
+---Creates a new array with reversed elements from the given array.
+function lib.array:toReversed()
+ local reversed = lib.array:new()
+
+ for i = #self, 1, -1 do
+ reversed:push(self[i])
+ end
+
+ return reversed
+end
+
+---Inserts the given elements to the start of an array and returns the new array length.
+---@param ... any
+function lib.array:unshift(...)
+ local elements = { ... }
+ local length = #self
+ local eLength = #elements
+
+ for i = length, 1, -1 do
+ self[i + eLength] = self[i]
+ end
+
+ for i = 1, #elements do
+ self[i] = elements[i]
+ end
+
+ return length + eLength
+end
+
+---Returns true if the given table is an instance of array or an array-like table.
+---@param tbl ArrayLike
+---@return boolean
+function lib.array.isArray(tbl)
+ local tableType = table_type(tbl)
+
+ if not tableType then return false end
+
+ if tableType == 'array' or tableType == 'empty' or lib.array.instanceOf(tbl, lib.array) then
+ return true
+ end
+
+ return false
+end
+
+return lib.array
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/client.lua
new file mode 100644
index 000000000..57b228bcf
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/client.lua
@@ -0,0 +1,145 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local pendingCallbacks = {}
+local timers = {}
+local cbEvent = '__ox_cb_%s'
+local callbackTimeout = GetConvarInt('ox:callbackTimeout', 300000)
+
+RegisterNetEvent(cbEvent:format(cache.resource), function(key, ...)
+ if source == '' then return end
+
+ local cb = pendingCallbacks[key]
+
+ if not cb then return end
+
+ pendingCallbacks[key] = nil
+
+ cb(...)
+end)
+
+---@param event string
+---@param delay? number | false prevent the event from being called for the given time
+local function eventTimer(event, delay)
+ if delay and type(delay) == 'number' and delay > 0 then
+ local time = GetGameTimer()
+
+ if (timers[event] or 0) > time then
+ return false
+ end
+
+ timers[event] = time + delay
+ end
+
+ return true
+end
+
+---@param _ any
+---@param event string
+---@param delay number | false | nil
+---@param cb function | false
+---@param ... any
+---@return ...
+local function triggerServerCallback(_, event, delay, cb, ...)
+ if not eventTimer(event, delay) then return end
+
+ local key
+
+ repeat
+ key = ('%s:%s'):format(event, math.random(0, 100000))
+ until not pendingCallbacks[key]
+
+ TriggerServerEvent('ox_lib:validateCallback', event, cache.resource, key)
+ TriggerServerEvent(cbEvent:format(event), cache.resource, key, ...)
+
+ ---@type promise | false
+ local promise = not cb and promise.new()
+
+ pendingCallbacks[key] = function(response, ...)
+ if response == 'cb_invalid' then
+ response = ("callback '%s' does not exist"):format(event)
+
+ return promise and promise:reject(response) or error(response)
+ end
+
+ response = { response, ... }
+
+ if promise then
+ return promise:resolve(response)
+ end
+
+ if cb then
+ cb(table.unpack(response))
+ end
+ end
+
+ if promise then
+ SetTimeout(callbackTimeout, function() promise:reject(("callback event '%s' timed out"):format(key)) end)
+
+ return table.unpack(Citizen.Await(promise))
+ end
+end
+
+---@overload fun(event: string, delay: number | false, cb: function, ...)
+lib.callback = setmetatable({}, {
+ __call = function(_, event, delay, cb, ...)
+ if not cb then
+ warn(("callback event '%s' does not have a function to callback to and will instead await\nuse lib.callback.await or a regular event to remove this warning")
+ :format(event))
+ else
+ local cbType = type(cb)
+
+ if cbType == 'table' and getmetatable(cb)?.__call then
+ cbType = 'function'
+ end
+
+ assert(cbType == 'function', ("expected argument 3 to have type 'function' (received %s)"):format(cbType))
+ end
+
+ return triggerServerCallback(_, event, delay, cb, ...)
+ end
+})
+
+---@param event string
+---@param delay? number | false prevent the event from being called for the given time.
+---Sends an event to the server and halts the current thread until a response is returned.
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.callback.await(event, delay, ...)
+ return triggerServerCallback(nil, event, delay, false, ...)
+end
+
+local function callbackResponse(success, result, ...)
+ if not success then
+ if result then
+ return print(('^1SCRIPT ERROR: %s^0\n%s'):format(result,
+ Citizen.InvokeNative(`FORMAT_STACK_TRACE` & 0xFFFFFFFF, nil, 0, Citizen.ResultAsString()) or ''))
+ end
+
+ return false
+ end
+
+ return result, ...
+end
+
+local pcall = pcall
+
+---@param name string
+---@param cb function
+---Registers an event handler and callback function to respond to server requests.
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.callback.register(name, cb)
+ event = cbEvent:format(name)
+
+ lib.setValidCallback(name, true)
+
+ RegisterNetEvent(event, function(resource, key, ...)
+ TriggerServerEvent(cbEvent:format(resource), key, callbackResponse(pcall(cb, ...)))
+ end)
+end
+
+return lib.callback
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/server.lua
new file mode 100644
index 000000000..4273384cd
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/callback/server.lua
@@ -0,0 +1,126 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local pendingCallbacks = {}
+local cbEvent = '__ox_cb_%s'
+local callbackTimeout = GetConvarInt('ox:callbackTimeout', 300000)
+
+RegisterNetEvent(cbEvent:format(cache.resource), function(key, ...)
+ local cb = pendingCallbacks[key]
+
+ if not cb then return end
+
+ pendingCallbacks[key] = nil
+
+ cb(...)
+end)
+
+---@param _ any
+---@param event string
+---@param playerId number
+---@param cb function|false
+---@param ... any
+---@return ...
+local function triggerClientCallback(_, event, playerId, cb, ...)
+ assert(DoesPlayerExist(playerId --[[@as string]]), ("target playerId '%s' does not exist"):format(playerId))
+
+ local key
+
+ repeat
+ key = ('%s:%s:%s'):format(event, math.random(0, 100000), playerId)
+ until not pendingCallbacks[key]
+
+ TriggerClientEvent('ox_lib:validateCallback', playerId, event, cache.resource, key)
+ TriggerClientEvent(cbEvent:format(event), playerId, cache.resource, key, ...)
+
+ ---@type promise | false
+ local promise = not cb and promise.new()
+
+ pendingCallbacks[key] = function(response, ...)
+ if response == 'cb_invalid' then
+ response = ("callback '%s' does not exist"):format(event)
+
+ return promise and promise:reject(response) or error(response)
+ end
+
+ response = { response, ... }
+
+ if promise then
+ return promise:resolve(response)
+ end
+
+ if cb then
+ cb(table.unpack(response))
+ end
+ end
+
+ if promise then
+ SetTimeout(callbackTimeout, function() promise:reject(("callback event '%s' timed out"):format(key)) end)
+
+ return table.unpack(Citizen.Await(promise))
+ end
+end
+
+---@overload fun(event: string, playerId: number, cb: function, ...)
+lib.callback = setmetatable({}, {
+ __call = function(_, event, playerId, cb, ...)
+ if not cb then
+ warn(("callback event '%s' does not have a function to callback to and will instead await\nuse lib.callback.await or a regular event to remove this warning")
+ :format(event))
+ else
+ local cbType = type(cb)
+
+ if cbType == 'table' and getmetatable(cb)?.__call then
+ cbType = 'function'
+ end
+
+ assert(cbType == 'function', ("expected argument 3 to have type 'function' (received %s)"):format(cbType))
+ end
+
+ return triggerClientCallback(_, event, playerId, cb, ...)
+ end
+})
+
+---@param event string
+---@param playerId number
+--- Sends an event to a client and halts the current thread until a response is returned.
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.callback.await(event, playerId, ...)
+ return triggerClientCallback(nil, event, playerId, false, ...)
+end
+
+local function callbackResponse(success, result, ...)
+ if not success then
+ if result then
+ return print(('^1SCRIPT ERROR: %s^0\n%s'):format(result,
+ Citizen.InvokeNative(`FORMAT_STACK_TRACE` & 0xFFFFFFFF, nil, 0, Citizen.ResultAsString()) or ''))
+ end
+
+ return false
+ end
+
+ return result, ...
+end
+
+local pcall = pcall
+
+---@param name string
+---@param cb function
+---Registers an event handler and callback function to respond to client requests.
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.callback.register(name, cb)
+ event = cbEvent:format(name)
+
+ lib.setValidCallback(name, true)
+
+ RegisterNetEvent(event, function(resource, key, ...)
+ TriggerClientEvent(cbEvent:format(resource), source, key, callbackResponse(pcall(cb, source, ...)))
+ end)
+end
+
+return lib.callback
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/class/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/class/shared.lua
new file mode 100644
index 000000000..3666af0e8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/class/shared.lua
@@ -0,0 +1,158 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@diagnostic disable: invisible
+local getinfo = debug.getinfo
+
+---Ensure the given argument or property has a valid type, otherwise throwing an error.
+---@param id number | string
+---@param var any
+---@param expected type
+local function assertType(id, var, expected)
+ local received = type(var)
+
+ if received ~= expected then
+ error(("expected %s %s to have type '%s' (received %s)")
+ :format(type(id) == 'string' and 'field' or 'argument', id, expected, received), 3)
+ end
+
+ if expected == 'table' and table.type(var) ~= 'hash' then
+ error(("expected argument %s to have table.type 'hash' (received %s)")
+ :format(id, table.type(var)), 3)
+ end
+
+ return true
+end
+
+---@alias OxClassConstructor fun(self: T, ...: unknown): nil
+
+---@class OxClass
+---@field private __index table
+---@field protected __name string
+---@field protected private? { [string]: unknown }
+---@field protected super? OxClassConstructor
+---@field protected constructor? OxClassConstructor
+local mixins = {}
+local constructors = {}
+
+---Somewhat hacky way to remove the constructor from the class.__index.
+---Maybe add static fields in the future?
+---@param class OxClass
+local function getConstructor(class)
+ local constructor = constructors[class] or class.constructor
+
+ if class.constructor then
+ constructors[class] = class.constructor
+ class.constructor = nil
+ end
+
+ return constructor
+end
+
+local function void() return '' end
+
+---Creates a new instance of the given class.
+---@protected
+---@generic T
+---@param class T | OxClass
+---@return T
+function mixins.new(class, ...)
+ local constructor = getConstructor(class)
+ local private = {}
+ local obj = setmetatable({ private = private }, class)
+
+ if constructor then
+ local parent = class
+
+ rawset(obj, 'super', function(self, ...)
+ parent = getmetatable(parent)
+ constructor = getConstructor(parent)
+
+ if constructor then return constructor(self, ...) end
+ end)
+
+ constructor(obj, ...)
+ end
+
+ rawset(obj, 'super', nil)
+
+ if private ~= obj.private or next(obj.private) then
+ private = table.clone(obj.private)
+
+ table.wipe(obj.private)
+ setmetatable(obj.private, {
+ __metatable = 'private',
+ __tostring = void,
+ __index = function(self, index)
+ local di = getinfo(2, 'n')
+
+ if di.namewhat ~= 'method' and di.namewhat ~= '' then return end
+
+ return private[index]
+ end,
+ __newindex = function(self, index, value)
+ local di = getinfo(2, 'n')
+
+ if di.namewhat ~= 'method' and di.namewhat ~= '' then
+ error(("cannot set value of private field '%s'"):format(index), 2)
+ end
+
+ private[index] = value
+ end
+ })
+ else
+ obj.private = nil
+ end
+
+ return obj
+end
+
+---Checks if an object is an instance of the given class.
+---@param class OxClass
+function mixins:isClass(class)
+ return getmetatable(self) == class
+end
+
+---Checks if an object is an instance or derivative of the given class.
+---@param class OxClass
+function mixins:instanceOf(class)
+ local mt = getmetatable(self)
+
+ while mt do
+ if mt == class then return true end
+
+ mt = getmetatable(mt)
+ end
+
+ return false
+end
+
+---Creates a new class.
+---@generic S : OxClass
+---@generic T : string
+---@param name `T`
+---@param super? S
+---@return `T`
+function lib.class(name, super)
+ assertType(1, name, 'string')
+
+ local class = table.clone(mixins)
+
+ class.__name = name
+ class.__index = class
+
+ if super then
+ assertType('super', super, 'table')
+ setmetatable(class, super)
+ end
+
+ ---@todo See if there's a way we can auto-create a class using the name and super
+ return class
+end
+
+return lib.class
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/cron/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/cron/server.lua
new file mode 100644
index 000000000..94031a208
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/cron/server.lua
@@ -0,0 +1,473 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+lib.cron = {}
+
+---@alias Date { year: number, month: number, day: number, hour: number, min: number, sec: number, wday: number, yday: number, isdst: boolean }
+---@type Date
+local currentDate = {}
+
+setmetatable(currentDate, {
+ __index = function(self, index)
+ local newDate = os.date('*t') --[[@as Date]]
+ for k, v in pairs(newDate) do
+ self[k] = v
+ end
+ SetTimeout(1000, function() table.wipe(self) end)
+ return self[index]
+ end
+})
+
+---@class OxTaskProperties
+---@field minute? number|string|function
+---@field hour? number|string|function
+---@field day? number|string|function
+---@field month? number|string|function
+---@field year? number|string|function
+---@field weekday? number|string|function
+---@field job fun(task: OxTask, date: osdate)
+---@field isActive boolean
+---@field id number
+---@field debug? boolean
+---@field lastRun? number
+---@field maxDelay? number Maximum allowed delay in seconds before skipping (0 to disable)
+
+---@class OxTask : OxTaskProperties
+---@field expression string
+---@field private scheduleTask fun(self: OxTask): boolean?
+local OxTask = {}
+OxTask.__index = OxTask
+
+local validRanges = {
+ min = { min = 0, max = 59 },
+ hour = { min = 0, max = 23 },
+ day = { min = 1, max = 31 },
+ month = { min = 1, max = 12 },
+ wday = { min = 0, max = 7 },
+}
+
+local maxUnits = {
+ min = 60,
+ hour = 24,
+ wday = 7,
+ day = 31,
+ month = 12,
+}
+
+local weekdayMap = {
+ sun = 1,
+ mon = 2,
+ tue = 3,
+ wed = 4,
+ thu = 5,
+ fri = 6,
+ sat = 7,
+}
+
+local monthMap = {
+ jan = 1, feb = 2, mar = 3, apr = 4,
+ may = 5, jun = 6, jul = 7, aug = 8,
+ sep = 9, oct = 10, nov = 11, dec = 12
+}
+
+---Returns the last day of the specified month
+---@param month number
+---@param year? number
+---@return number
+local function getMaxDaysInMonth(month, year)
+ return os.date('*t', os.time({ year = year or currentDate.year, month = month + 1, day = -1 })).day --[[@as number]]
+end
+
+---@param value string|number
+---@param unit string
+---@return boolean
+local function isValueInRange(value, unit)
+ local range = validRanges[unit]
+ if not range then return true end
+ return value >= range.min and value <= range.max
+end
+
+---@param value string
+---@param unit string
+---@return number|string|function|nil
+local function parseCron(value, unit)
+ if not value or value == '*' then return end
+
+ if unit == 'day' and value:lower() == 'l' then
+ return function()
+ return getMaxDaysInMonth(currentDate.month, currentDate.year)
+ end
+ end
+
+ local num = tonumber(value)
+ if num then
+ if not isValueInRange(num, unit) then
+ error(("^1invalid cron expression. '%s' is out of range for %s^0"):format(value, unit), 3)
+ end
+ return num
+ end
+
+ if unit == 'wday' then
+ local start, stop = value:match('(%a+)-(%a+)')
+ if start and stop then
+ start = weekdayMap[start:lower()]
+ stop = weekdayMap[stop:lower()]
+ if start and stop then
+ if stop < start then stop = stop + 7 end
+ return ('%d-%d'):format(start, stop)
+ end
+ end
+ local day = weekdayMap[value:lower()]
+ if day then return day end
+ end
+
+ if unit == 'month' then
+ local months = {}
+ for month in value:gmatch('[^,]+') do
+ local monthNum = monthMap[month:lower()]
+ if monthNum then
+ months[#months + 1] = tostring(monthNum)
+ end
+ end
+ if #months > 0 then
+ return table.concat(months, ',')
+ end
+ end
+
+ local stepMatch = value:match('^%*/(%d+)$')
+ if stepMatch then
+ local step = tonumber(stepMatch)
+ if not step or step == 0 then
+ error(("^1invalid cron expression. Step value cannot be %s^0"):format(step or 'nil'), 3)
+ end
+ return value
+ end
+
+ local start, stop = value:match('^(%d+)-(%d+)$')
+ if start and stop then
+ start, stop = tonumber(start), tonumber(stop)
+ if not start or not stop or not isValueInRange(start, unit) or not isValueInRange(stop, unit) then
+ error(("^1invalid cron expression. Range '%s' is invalid for %s^0"):format(value, unit), 3)
+ end
+ return value
+ end
+
+ local valid = true
+ for item in value:gmatch('[^,]+') do
+ local num = tonumber(item)
+ if not num or not isValueInRange(num, unit) then
+ valid = false
+ break
+ end
+ end
+ if valid then return value end
+
+ error(("^1invalid cron expression. '%s' is not supported for %s^0"):format(value, unit), 3)
+end
+
+---@param value string|number|function|nil
+---@param unit string
+---@return number|false|nil
+local function getTimeUnit(value, unit)
+ local currentTime = currentDate[unit]
+
+ if not value then
+ return unit == 'min' and currentTime + 1 or currentTime
+ end
+
+ if type(value) == 'function' then
+ return value()
+ end
+
+ local unitMax = maxUnits[unit]
+
+ if type(value) == 'string' then
+ local stepValue = string.match(value, '*/(%d+)')
+
+ if stepValue then
+ local step = tonumber(stepValue)
+ for i = currentTime + 1, unitMax do
+ if i % step == 0 then return i end
+ end
+ return step + unitMax
+ end
+
+ local range = string.match(value, '%d+-%d+')
+ if range then
+ local min, max = string.strsplit('-', range)
+ min, max = tonumber(min, 10), tonumber(max, 10)
+
+ if unit == 'min' then
+ if currentTime >= max then
+ return min + unitMax
+ end
+ elseif currentTime > max then
+ return min + unitMax
+ end
+
+ return currentTime < min and min or currentTime
+ end
+
+ local list = string.match(value, '%d+,%d+')
+ if list then
+ local values = {}
+ for listValue in string.gmatch(value, '%d+') do
+ values[#values + 1] = tonumber(listValue)
+ end
+ table.sort(values)
+
+ for i = 1, #values do
+ local listValue = values[i]
+ if unit == 'min' then
+ if currentTime < listValue then
+ return listValue
+ end
+ elseif currentTime <= listValue then
+ return listValue
+ end
+ end
+
+ return values[1] + unitMax
+ end
+
+ return false
+ end
+
+ if unit == 'min' then
+ return value <= currentTime and value + unitMax or value --[[@as number]]
+ end
+
+ return value < currentTime and value + unitMax or value --[[@as number]]
+end
+
+---@return number?
+function OxTask:getNextTime()
+ if not self.isActive then return end
+
+ local day = getTimeUnit(self.day, 'day')
+
+ if day == 0 then
+ day = getMaxDaysInMonth(currentDate.month)
+ end
+
+ if day ~= currentDate.day then return end
+
+ local month = getTimeUnit(self.month, 'month')
+ if month ~= currentDate.month then return end
+
+ local weekday = getTimeUnit(self.weekday, 'wday')
+ if weekday and weekday ~= currentDate.wday then return end
+
+ local minute = getTimeUnit(self.minute, 'min')
+ if not minute then return end
+
+ local hour = getTimeUnit(self.hour, 'hour')
+ if not hour then return end
+
+ if minute >= maxUnits.min then
+ if not self.hour then
+ hour += math.floor(minute / maxUnits.min)
+ end
+ minute = minute % maxUnits.min
+ end
+
+ if hour >= maxUnits.hour and day then
+ if not self.day then
+ day += math.floor(hour / maxUnits.hour)
+ end
+ hour = hour % maxUnits.hour
+ end
+
+ local nextTime = os.time({
+ min = minute,
+ hour = hour,
+ day = day or currentDate.day,
+ month = month or currentDate.month,
+ year = currentDate.year,
+ })
+
+ if self.lastRun and nextTime - self.lastRun < 60 then
+ if self.debug then
+ lib.print.debug(('Preventing duplicate execution of task %s - Last run: %s, Next scheduled: %s'):format(
+ self.id,
+ os.date('%c', self.lastRun),
+ os.date('%c', nextTime)
+ ))
+ end
+ return
+ end
+
+ return nextTime
+end
+
+---@return number
+function OxTask:getAbsoluteNextTime()
+ local minute = getTimeUnit(self.minute, 'min')
+ local hour = getTimeUnit(self.hour, 'hour')
+ local day = getTimeUnit(self.day, 'day')
+ local month = getTimeUnit(self.month, 'month')
+ local year = getTimeUnit(self.year, 'year')
+
+ if self.day then
+ if currentDate.hour < hour or (currentDate.hour == hour and currentDate.min < minute) then
+ day = day - 1
+ if day < 1 then
+ day = getMaxDaysInMonth(currentDate.month)
+ end
+ end
+
+ if currentDate.hour > hour or (currentDate.hour == hour and currentDate.min >= minute) then
+ day = day + 1
+ if day > getMaxDaysInMonth(currentDate.month) or day == 1 then
+ day = 1
+ month = month + 1
+ end
+ end
+ end
+
+ ---@diagnostic disable-next-line: assign-type-mismatch
+ if os.time({ year = year, month = month, day = day, hour = hour, min = minute }) < os.time() then
+ year = year and year + 1 or currentDate.year + 1
+ end
+
+ return os.time({
+ min = minute < 60 and minute or 0,
+ hour = hour < 24 and hour or 0,
+ day = day or currentDate.day,
+ month = month or currentDate.month,
+ year = year or currentDate.year,
+ })
+end
+
+function OxTask:getTimeAsString(timestamp)
+ return os.date('%A %H:%M, %d %B %Y', timestamp or self:getAbsoluteNextTime())
+end
+
+---@type OxTask[]
+local tasks = {}
+
+function OxTask:scheduleTask()
+ local runAt = self:getNextTime()
+
+ if not runAt then
+ return self:stop('getNextTime returned no value')
+ end
+
+ local currentTime = os.time()
+ local sleep = runAt - currentTime
+
+ if sleep < 0 then
+ if not self.maxDelay or -sleep > self.maxDelay then
+ return self:stop(self.debug and ('scheduled time expired %s seconds ago'):format(-sleep))
+ end
+
+ if self.debug then
+ lib.print.debug(('Task %s is %s seconds overdue, executing now due to maxDelay=%s'):format(
+ self.id,
+ -sleep,
+ self.maxDelay
+ ))
+ end
+
+ sleep = 0
+ end
+
+ local timeAsString = self:getTimeAsString(runAt)
+
+ if self.debug then
+ lib.print.debug(('(%s) task %s will run in %d seconds (%0.2f minutes / %0.2f hours)'):format(timeAsString, self.id, sleep,
+ sleep / 60,
+ sleep / 60 / 60))
+ end
+
+ if sleep > 0 then
+ Wait(sleep * 1000)
+ else
+ Wait(0)
+ return true
+ end
+
+ if self.isActive then
+ if self.debug then
+ lib.print.debug(('(%s) running task %s'):format(timeAsString, self.id))
+ end
+
+ Citizen.CreateThreadNow(function()
+ self:job(currentDate)
+ self.lastRun = os.time()
+ end)
+
+ return true
+ end
+end
+
+function OxTask:run()
+ if self.isActive then return end
+
+ self.isActive = true
+
+ CreateThread(function()
+ while self:scheduleTask() do end
+ end)
+end
+
+function OxTask:stop(msg)
+ self.isActive = false
+
+ if self.debug then
+ if msg then
+ return lib.print.debug(('stopping task %s (%s)'):format(self.id, msg))
+ end
+
+ lib.print.debug(('stopping task %s'):format(self.id))
+ end
+end
+
+---@param expression string A cron expression such as `* * * * *` representing minute, hour, day, month, and day of the week.
+---@param job fun(task: OxTask, date: osdate)
+---@param options? { debug?: boolean }
+---Creates a new [cronjob](https://en.wikipedia.org/wiki/Cron), scheduling a task to run at fixed times or intervals.
+---Supports numbers, any value `*`, lists `1,2,3`, ranges `1-3`, and steps `*/4`.
+---Day of the week is a range of `1-7` starting from Sunday and allows short-names (i.e. sun, mon, tue).
+---@note maxDelay: Maximum allowed delay in seconds before skipping (0 to disable)
+function lib.cron.new(expression, job, options)
+ if not job or type(job) ~= 'function' then
+ error(("expected job to have type 'function' (received %s)"):format(type(job)))
+ end
+
+ local minute, hour, day, month, weekday = string.strsplit(' ', string.lower(expression))
+ ---@type OxTask
+ local task = setmetatable(options or {}, OxTask)
+
+ task.expression = expression
+ task.minute = parseCron(minute, 'min')
+ task.hour = parseCron(hour, 'hour')
+ task.day = parseCron(day, 'day')
+ task.month = parseCron(month, 'month')
+ task.weekday = parseCron(weekday, 'wday')
+ task.id = #tasks + 1
+ task.job = job
+ task.lastRun = nil
+ task.maxDelay = task.maxDelay or 1
+ tasks[task.id] = task
+ task:run()
+
+ return task
+end
+
+-- reschedule any dead tasks on a new day
+lib.cron.new('0 0 * * *', function()
+ for i = 1, #tasks do
+ local task = tasks[i]
+ if not task.isActive then
+ task:run()
+ end
+ end
+end)
+
+return lib.cron
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/disableControls/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/disableControls/client.lua
new file mode 100644
index 000000000..7df7455f7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/disableControls/client.lua
@@ -0,0 +1,64 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+--- Call on frame to disable all stored keys.
+--- ```
+--- disableControls()
+--- ```
+local disableControls = {}
+
+---@param ... number | table
+function disableControls:Add(...)
+ local keys = type(...) == 'table' and ... or {...}
+ for i=1, #keys do
+ local key = keys[i]
+ if self[key] then
+ self[key] += 1
+ else
+ self[key] = 1
+ end
+ end
+end
+
+---@param ... number | table
+function disableControls:Remove(...)
+ local keys = type(...) == 'table' and ... or {...}
+ for i=1, #keys do
+ local key = keys[i]
+ local exists = self[key]
+ if exists and exists > 1 then
+ self[key] -= 1
+ else
+ self[key] = nil
+ end
+ end
+end
+
+---@param ... number | table
+function disableControls:Clear(...)
+ local keys = type(...) == 'table' and ... or {...}
+ for i=1, #keys do
+ self[keys[i]] = nil
+ end
+end
+
+local keys = {}
+local DisableControlAction = DisableControlAction
+local pairs = pairs
+
+lib.disableControls = setmetatable(disableControls, {
+ __index = keys,
+ __newindex = keys,
+ __call = function()
+ for k in pairs(keys) do
+ DisableControlAction(0, k, true)
+ end
+ end
+})
+
+return lib.disableControls
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/dui/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/dui/client.lua
new file mode 100644
index 000000000..d6d4bde0a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/dui/client.lua
@@ -0,0 +1,95 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class DuiProperties
+---@field url string
+---@field width number
+---@field height number
+---@field debug? boolean
+
+---@class Dui : OxClass
+---@field private private { id: string, debug: boolean }
+---@field url string
+---@field duiObject number
+---@field duiHandle string
+---@field runtimeTxd number
+---@field txdObject number
+---@field dictName string
+---@field txtName string
+lib.dui = lib.class('Dui')
+
+---@type table
+local duis = {}
+
+local currentId = 0
+
+---@param data DuiProperties
+function lib.dui:constructor(data)
+ local time = GetGameTimer()
+ local id = ("%s_%s_%s"):format(cache.resource, time, currentId)
+ currentId = currentId + 1
+ local dictName = ('ox_lib_dui_dict_%s'):format(id)
+ local txtName = ('ox_lib_dui_txt_%s'):format(id)
+ local duiObject = CreateDui(data.url, data.width, data.height)
+ local duiHandle = GetDuiHandle(duiObject)
+ local runtimeTxd = CreateRuntimeTxd(dictName)
+ local txdObject = CreateRuntimeTextureFromDuiHandle(runtimeTxd, txtName, duiHandle)
+ self.private.id = id
+ self.private.debug = data.debug or false
+ self.url = data.url
+ self.duiObject = duiObject
+ self.duiHandle = duiHandle
+ self.runtimeTxd = runtimeTxd
+ self.txdObject = txdObject
+ self.dictName = dictName
+ self.txtName = txtName
+ duis[id] = self
+
+ if self.private.debug then
+ print(('Dui %s created'):format(id))
+ end
+end
+
+function lib.dui:remove()
+ SetDuiUrl(self.duiObject, 'about:blank')
+ DestroyDui(self.duiObject)
+ duis[self.private.id] = nil
+
+ if self.private.debug then
+ print(('Dui %s removed'):format(self.private.id))
+ end
+end
+
+---@param url string
+function lib.dui:setUrl(url)
+ self.url = url
+ SetDuiUrl(self.duiObject, url)
+
+ if self.private.debug then
+ print(('Dui %s url set to %s'):format(self.private.id, url))
+ end
+end
+
+---@param message table
+function lib.dui:sendMessage(message)
+ SendDuiMessage(self.duiObject, json.encode(message))
+
+ if self.private.debug then
+ print(('Dui %s message sent with data :'):format(self.private.id), json.encode(message, { indent = true }))
+ end
+end
+
+AddEventHandler('onResourceStop', function(resourceName)
+ if cache.resource ~= resourceName then return end
+
+ for _, dui in pairs(duis) do
+ dui:remove()
+ end
+end)
+
+return lib.dui
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestObject/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestObject/shared.lua
new file mode 100644
index 000000000..33c04a33b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestObject/shared.lua
@@ -0,0 +1,34 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return number? object
+---@return vector3? objectCoords
+function lib.getClosestObject(coords, maxDistance)
+ local objects = GetGamePool('CObject')
+ local closestObject, closestCoords
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #objects do
+ local object = objects[i]
+
+ local objectCoords = GetEntityCoords(object)
+ local distance = #(coords - objectCoords)
+
+ if distance < maxDistance then
+ maxDistance = distance
+ closestObject = object
+ closestCoords = objectCoords
+ end
+ end
+
+ return closestObject, closestCoords
+end
+
+return lib.getClosestObject
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPed/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPed/shared.lua
new file mode 100644
index 000000000..315cc4aee
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPed/shared.lua
@@ -0,0 +1,36 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return number? ped
+---@return vector3? pedCoords
+function lib.getClosestPed(coords, maxDistance)
+ local peds = GetGamePool('CPed')
+ local closestPed, closestCoords
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #peds do
+ local ped = peds[i]
+
+ if not IsPedAPlayer(ped) then
+ local pedCoords = GetEntityCoords(ped)
+ local distance = #(coords - pedCoords)
+
+ if distance < maxDistance then
+ maxDistance = distance
+ closestPed = ped
+ closestCoords = pedCoords
+ end
+ end
+ end
+
+ return closestPed, closestCoords
+end
+
+return lib.getClosestPed
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/client.lua
new file mode 100644
index 000000000..b1f1da1c2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/client.lua
@@ -0,0 +1,40 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@param includePlayer? boolean Whether or not to include the current player.
+---@return number? playerId
+---@return number? playerPed
+---@return vector3? playerCoords
+function lib.getClosestPlayer(coords, maxDistance, includePlayer)
+ local players = GetActivePlayers()
+ local closestId, closestPed, closestCoords
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #players do
+ local playerId = players[i]
+
+ if playerId ~= cache.playerId or includePlayer then
+ local playerPed = GetPlayerPed(playerId)
+ local playerCoords = GetEntityCoords(playerPed)
+ local distance = #(coords - playerCoords)
+
+ if distance < maxDistance then
+ maxDistance = distance
+ closestId = playerId
+ closestPed = playerPed
+ closestCoords = playerCoords
+ end
+ end
+ end
+
+ return closestId, closestPed, closestCoords
+end
+
+return lib.getClosestPlayer
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/server.lua
new file mode 100644
index 000000000..e45a3511a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestPlayer/server.lua
@@ -0,0 +1,36 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return number? playerId
+---@return number? playerPed
+---@return vector3? playerCoords
+function lib.getClosestPlayer(coords, maxDistance)
+ local players = GetActivePlayers()
+ local closestId, closestPed, closestCoords
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #players do
+ local playerId = players[i]
+ local playerPed = GetPlayerPed(playerId)
+ local playerCoords = GetEntityCoords(playerPed)
+ local distance = #(coords - playerCoords)
+
+ if distance < maxDistance then
+ maxDistance = distance
+ closestId = playerId
+ closestPed = playerPed
+ closestCoords = playerCoords
+ end
+ end
+
+ return closestId, closestPed, closestCoords
+end
+
+return lib.getClosestPlayer
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestVehicle/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestVehicle/shared.lua
new file mode 100644
index 000000000..e7ea58f82
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getClosestVehicle/shared.lua
@@ -0,0 +1,37 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@param includePlayerVehicle? boolean Whether or not to include the player's current vehicle. Ignored on the server.
+---@return number? vehicle
+---@return vector3? vehicleCoords
+function lib.getClosestVehicle(coords, maxDistance, includePlayerVehicle)
+ local vehicles = GetGamePool('CVehicle')
+ local closestVehicle, closestCoords
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #vehicles do
+ local vehicle = vehicles[i]
+
+ if lib.context == 'server' or not cache.vehicle or vehicle ~= cache.vehicle or includePlayerVehicle then
+ local vehicleCoords = GetEntityCoords(vehicle)
+ local distance = #(coords - vehicleCoords)
+
+ if distance < maxDistance then
+ maxDistance = distance
+ closestVehicle = vehicle
+ closestCoords = vehicleCoords
+ end
+ end
+ end
+
+ return closestVehicle, closestCoords
+end
+
+return lib.getClosestVehicle
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getFilesInDirectory/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getFilesInDirectory/server.lua
new file mode 100644
index 000000000..5862bb10a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getFilesInDirectory/server.lua
@@ -0,0 +1,46 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param path string
+---@param pattern string
+---@return table string[]
+---@return integer fileCount
+function lib.getFilesInDirectory(path, pattern)
+ local resource = cache.resource
+
+ if path:find('^@') then
+ resource = path:gsub('^@(.-)/.+', '%1')
+ path = path:sub(#resource + 3)
+ end
+
+ local files = {}
+ local fileCount = 0
+ local windows = string.match(os.getenv('OS') or '', 'Windows')
+ local command = ('%s%s%s'):format(
+ windows and 'dir "' or 'ls "',
+ (GetResourcePath(resource):gsub('//', '/') .. '/' .. path):gsub('\\', '/'),
+ windows and '/" /b' or '/"'
+ )
+
+ local dir = io.popen(command)
+
+ if dir then
+ for line in dir:lines() do
+ if line:match(pattern) then
+ fileCount += 1
+ files[fileCount] = line
+ end
+ end
+
+ dir:close()
+ end
+
+ return files, fileCount
+end
+
+return lib.getFilesInDirectory
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyObjects/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyObjects/shared.lua
new file mode 100644
index 000000000..977d1b293
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyObjects/shared.lua
@@ -0,0 +1,36 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return { object: number, coords: vector3 }[]
+function lib.getNearbyObjects(coords, maxDistance)
+ local objects = GetGamePool('CObject')
+ local nearby = {}
+ local count = 0
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #objects do
+ local object = objects[i]
+
+ local objectCoords = GetEntityCoords(object)
+ local distance = #(coords - objectCoords)
+
+ if distance < maxDistance then
+ count += 1
+ nearby[count] = {
+ object = object,
+ coords = objectCoords
+ }
+ end
+ end
+
+ return nearby
+end
+
+return lib.getNearbyObjects
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPeds/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPeds/shared.lua
new file mode 100644
index 000000000..21688b996
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPeds/shared.lua
@@ -0,0 +1,38 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return { ped: number, coords: vector3 }[]
+function lib.getNearbyPeds(coords, maxDistance)
+ local peds = GetGamePool('CPed')
+ local nearby = {}
+ local count = 0
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #peds do
+ local ped = peds[i]
+
+ if not IsPedAPlayer(ped) then
+ local pedCoords = GetEntityCoords(ped)
+ local distance = #(coords - pedCoords)
+
+ if distance < maxDistance then
+ count += 1
+ nearby[count] = {
+ ped = ped,
+ coords = pedCoords,
+ }
+ end
+ end
+ end
+
+ return nearby
+end
+
+return lib.getNearbyPeds
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/client.lua
new file mode 100644
index 000000000..30bb811c2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/client.lua
@@ -0,0 +1,41 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@param includePlayer? boolean Whether or not to include the current player.
+---@return { id: number, ped: number, coords: vector3 }[]
+function lib.getNearbyPlayers(coords, maxDistance, includePlayer)
+ local players = GetActivePlayers()
+ local nearby = {}
+ local count = 0
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #players do
+ local playerId = players[i]
+
+ if playerId ~= cache.playerId or includePlayer then
+ local playerPed = GetPlayerPed(playerId)
+ local playerCoords = GetEntityCoords(playerPed)
+ local distance = #(coords - playerCoords)
+
+ if distance < maxDistance then
+ count += 1
+ nearby[count] = {
+ id = playerId,
+ ped = playerPed,
+ coords = playerCoords,
+ }
+ end
+ end
+ end
+
+ return nearby
+end
+
+return lib.getNearbyPlayers
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/server.lua
new file mode 100644
index 000000000..293d830fd
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyPlayers/server.lua
@@ -0,0 +1,37 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@return { id: number, ped: number, coords: vector3 }[]
+function lib.getNearbyPlayers(coords, maxDistance)
+ local players = GetActivePlayers()
+ local nearby = {}
+ local count = 0
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #players do
+ local playerId = players[i]
+ local playerPed = GetPlayerPed(playerId)
+ local playerCoords = GetEntityCoords(playerPed)
+ local distance = #(coords - playerCoords)
+
+ if distance < maxDistance then
+ count += 1
+ nearby[count] = {
+ id = playerId,
+ ped = playerPed,
+ coords = playerCoords,
+ }
+ end
+ end
+
+ return nearby
+end
+
+return lib.getNearbyPlayers
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyVehicles/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyVehicles/shared.lua
new file mode 100644
index 000000000..b594d0706
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getNearbyVehicles/shared.lua
@@ -0,0 +1,39 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param coords vector3 The coords to check from.
+---@param maxDistance? number The max distance to check.
+---@param includePlayerVehicle? boolean Whether or not to include the player's current vehicle.
+---@return { vehicle: number, coords: vector3 }[]
+function lib.getNearbyVehicles(coords, maxDistance, includePlayerVehicle)
+ local vehicles = GetGamePool('CVehicle')
+ local nearby = {}
+ local count = 0
+ maxDistance = maxDistance or 2.0
+
+ for i = 1, #vehicles do
+ local vehicle = vehicles[i]
+
+ if lib.context == 'server' or not cache.vehicle or vehicle ~= cache.vehicle or includePlayerVehicle then
+ local vehicleCoords = GetEntityCoords(vehicle)
+ local distance = #(coords - vehicleCoords)
+
+ if distance < maxDistance then
+ count += 1
+ nearby[count] = {
+ vehicle = vehicle,
+ coords = vehicleCoords
+ }
+ end
+ end
+ end
+
+ return nearby
+end
+
+return lib.getNearbyVehicles
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getRelativeCoords/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getRelativeCoords/shared.lua
new file mode 100644
index 000000000..bb9f7135a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/getRelativeCoords/shared.lua
@@ -0,0 +1,56 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local glm_sincos = require 'glm'.sincos --[[@as fun(n: number): number, number]]
+local glm_rad = require 'glm'.rad --[[@as fun(n: number): number]]
+
+---Get the relative coordinates based on heading/rotation and offset
+---@overload fun(coords: vector3, heading: number, offset: vector3): vector3
+---@overload fun(coords: vector4, offset: vector3): vector4
+---@overload fun(coords: vector3, rotation: vector3, offset: vector3): vector3
+function lib.getRelativeCoords(coords, rotation, offset)
+ if type(rotation) == 'vector3' and offset then
+ local pitch = glm_rad(rotation.x)
+ local roll = glm_rad(rotation.y)
+ local yaw = glm_rad(rotation.z)
+
+ local sp, cp = glm_sincos(pitch)
+ local sr, cr = glm_sincos(roll)
+ local sy, cy = glm_sincos(yaw)
+
+ local rotatedX = offset.x * (cy * cr) + offset.y * (cy * sr * sp - sy * cp) + offset.z * (cy * sr * cp + sy * sp)
+ local rotatedY = offset.x * (sy * cr) + offset.y * (sy * sr * sp + cy * cp) + offset.z * (sy * sr * cp - cy * sp)
+ local rotatedZ = offset.x * (-sr) + offset.y * (cr * sp) + offset.z * (cr * cp)
+
+ return vec3(
+ coords.x + rotatedX,
+ coords.y + rotatedY,
+ coords.z + rotatedZ
+ )
+ end
+
+ offset = offset or rotation
+ local x, y, z, w = coords.x, coords.y, coords.z, type(rotation) == 'number' and rotation or coords.w
+
+ local sin, cos = glm_sincos(glm_rad(w))
+ local relativeX = offset.x * cos - offset.y * sin
+ local relativeY = offset.x * sin + offset.y * cos
+
+ return coords.w and vec4(
+ x + relativeX,
+ y + relativeY,
+ z + offset.z,
+ w
+ ) or vec3(
+ x + relativeX,
+ y + relativeY,
+ z + offset.z
+ )
+end
+
+return lib.getRelativeCoords
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/grid/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/grid/shared.lua
new file mode 100644
index 000000000..044a560e0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/grid/shared.lua
@@ -0,0 +1,194 @@
+--[[
+ Based on PolyZone's grid system (https://github.com/mkafrin/PolyZone/blob/master/ComboZone.lua)
+
+ MIT License
+
+ Copyright © 2019-2021 Michael Afrin
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+]]
+
+local mapMinX = -3700
+local mapMinY = -4400
+local mapMaxX = 4500
+local mapMaxY = 8000
+local xDelta = (mapMaxX - mapMinX) / 34
+local yDelta = (mapMaxY - mapMinY) / 50
+local grid = {}
+local lastCell = {}
+local gridCache = {}
+local entrySet = {}
+
+lib.grid = {}
+
+---@class GridEntry
+---@field coords vector
+---@field length? number
+---@field width? number
+---@field radius? number
+---@field [string] any
+
+---@param point vector
+---@param length number
+---@param width number
+---@return number, number, number, number
+local function getGridDimensions(point, length, width)
+ local minX = (point.x - width - mapMinX) // xDelta
+ local maxX = (point.x + width - mapMinX) // xDelta
+ local minY = (point.y - length - mapMinY) // yDelta
+ local maxY = (point.y + length - mapMinY) // yDelta
+
+ return minX, maxX, minY, maxY
+end
+
+---@param point vector
+---@return number, number
+function lib.grid.getCellPosition(point)
+ local x = (point.x - mapMinX) // xDelta
+ local y = (point.y - mapMinY) // yDelta
+
+ return x, y
+end
+
+---@param point vector
+---@return GridEntry[]
+function lib.grid.getCell(point)
+ local x, y = lib.grid.getCellPosition(point)
+
+ if lastCell.x ~= x or lastCell.y ~= y then
+ lastCell.x = x
+ lastCell.y = y
+ lastCell.cell = grid[y] and grid[y][x] or {}
+ end
+
+ return lastCell.cell
+end
+
+---@param point vector
+---@param filter? fun(entry: GridEntry): boolean
+---@return Array
+function lib.grid.getNearbyEntries(point, filter)
+ local minX, maxX, minY, maxY = getGridDimensions(point, xDelta, yDelta)
+
+ if gridCache.filter == filter and
+ gridCache.minX == minX and
+ gridCache.maxX == maxX and
+ gridCache.minY == minY and
+ gridCache.maxY == maxY then
+ return gridCache.entries
+ end
+
+ local entries = lib.array:new()
+ local n = 0
+
+ table.wipe(entrySet)
+
+ for y = minY, maxY do
+ local row = grid[y]
+
+ for x = minX, maxX do
+ local cell = row and row[x]
+
+ if cell then
+ for j = 1, #cell do
+ local entry = cell[j]
+
+ if not entrySet[entry] and (not filter or filter(entry)) then
+ n = n + 1
+ entrySet[entry] = true
+ entries[n] = entry
+ end
+ end
+ end
+ end
+ end
+
+ gridCache.minX = minX
+ gridCache.maxX = maxX
+ gridCache.minY = minY
+ gridCache.maxY = maxY
+ gridCache.entries = entries
+ gridCache.filter = filter
+
+ return entries
+end
+
+---@param entry { coords: vector, length?: number, width?: number, radius?: number, [string]: any }
+function lib.grid.addEntry(entry)
+ entry.length = entry.length or entry.radius * 2
+ entry.width = entry.width or entry.radius * 2
+ local minX, maxX, minY, maxY = getGridDimensions(entry.coords, entry.length, entry.width)
+
+ for y = minY, maxY do
+ local row = grid[y] or {}
+
+ for x = minX, maxX do
+ local cell = row[x] or {}
+
+ cell[#cell + 1] = entry
+ row[x] = cell
+ end
+
+ grid[y] = row
+
+ table.wipe(gridCache)
+ end
+end
+
+---@param entry table A table that was added to the grid previously.
+function lib.grid.removeEntry(entry)
+ local minX, maxX, minY, maxY = getGridDimensions(entry.coords, entry.length, entry.width)
+ local success = false
+
+ for y = minY, maxY do
+ local row = grid[y]
+
+ if not row then goto continue end
+
+ for x = minX, maxX do
+ local cell = row[x]
+
+ if cell then
+ for i = 1, #cell do
+ if cell[i] == entry then
+ table.remove(cell, i)
+ success = true
+ break
+ end
+ end
+
+ if #cell == 0 then
+ row[x] = nil
+ end
+ end
+ end
+
+ if not next(row) then
+ grid[y] = nil
+ end
+
+ ::continue::
+ end
+
+ table.wipe(gridCache)
+
+ return success
+end
+
+return lib.grid
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/locale/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/locale/shared.lua
new file mode 100644
index 000000000..0ba1a0028
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/locale/shared.lua
@@ -0,0 +1,122 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@type { [string]: string }
+local dict = {}
+
+---@param source { [string]: string }
+---@param target { [string]: string }
+---@param prefix? string
+local function flattenDict(source, target, prefix)
+ for key, value in pairs(source) do
+ local fullKey = prefix and (prefix .. '.' .. key) or key
+
+ if type(value) == 'table' then
+ flattenDict(value, target, fullKey)
+ else
+ target[fullKey] = value
+ end
+ end
+
+ return target
+end
+
+---@param str string
+---@param ... string | number
+---@return string
+function locale(str, ...)
+ local lstr = dict[str]
+
+ if lstr then
+ if ... then
+ return lstr and lstr:format(...)
+ end
+
+ return lstr
+ end
+
+ return str
+end
+
+function lib.getLocales()
+ return dict
+end
+
+local function loadLocale(key)
+ local data = LoadResourceFile(cache.resource, ('locales/%s.json'):format(key))
+
+ if not data then
+ warn(("could not load 'locales/%s.json'"):format(key))
+ end
+
+ return json.decode(data) or {}
+end
+
+local table = lib.table
+
+---Loads the ox_lib locale module. Prefer using fxmanifest instead (see [docs](https://overextended.dev/ox_lib#usage)).
+---@param key? string
+function lib.locale(key)
+ local lang = key or lib.getLocaleKey()
+ local locales = loadLocale('en')
+
+ if lang ~= 'en' then
+ table.merge(locales, loadLocale(lang))
+ end
+
+ table.wipe(dict)
+
+ for k, v in pairs(flattenDict(locales, {})) do
+ if type(v) == 'string' then
+ for var in v:gmatch('${[%w%s%p]-}') do
+ local locale = locales[var:sub(3, -2)]
+
+ if locale then
+ locale = locale:gsub('%%', '%%%%')
+ v = v:gsub(var, locale)
+ end
+ end
+ end
+
+ dict[k] = v
+ end
+end
+
+---Gets a locale string from another resource and adds it to the dict.
+---@param resource string
+---@param key string
+---@return string?
+function lib.getLocale(resource, key)
+ local locale = dict[key]
+
+ if locale then
+ warn(("overwriting existing locale '%s' (%s)"):format(key, locale))
+ end
+
+ locale = exports[resource]:getLocale(key)
+ dict[key] = locale
+
+ if not locale then
+ warn(("no locale exists with key '%s' in resource '%s'"):format(key, resource))
+ end
+
+ return locale
+end
+
+---Backing function for lib.getLocale.
+---@param key string
+---@return string?
+exports('getLocale', function(key)
+ return dict[key]
+end)
+
+AddEventHandler('ox_lib:setLocale', function(key)
+ lib.locale(key)
+end)
+
+return lib.locale
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/logger/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/logger/server.lua
new file mode 100644
index 000000000..92bef37e1
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/logger/server.lua
@@ -0,0 +1,301 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local service = GetConvar('ox:logger', 'datadog')
+local buffer
+local bufferSize = 0
+
+local function removeColorCodes(str)
+ -- replace ^[0-9] with nothing
+ str = string.gsub(str, "%^%d", "")
+
+ -- replace ^#[0-9A-F]{3,6} with nothing
+ str = string.gsub(str, "%^#[%dA-Fa-f]+", "")
+
+ -- replace ~[a-z]~ with nothing
+ str = string.gsub(str, "~[%a]~", "")
+
+ return str
+end
+
+local hostname = removeColorCodes(GetConvar('ox:logger:hostname', GetConvar('sv_projectName', 'fxserver')))
+
+local b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+
+local function base64encode(data)
+ return ((data:gsub(".", function(x)
+ local r, b = "", x:byte()
+ for i = 8, 1, -1 do
+ r = r .. (b % 2 ^ i - b % 2 ^ (i - 1) > 0 and "1" or "0")
+ end
+ return r;
+ end) .. "0000"):gsub("%d%d%d?%d?%d?%d?", function(x)
+ if (#x < 6) then
+ return ""
+ end
+ local c = 0
+ for i = 1, 6 do
+ c = c + (x:sub(i, i) == "1" and 2 ^ (6 - i) or 0)
+ end
+ return b:sub(c + 1, c + 1)
+ end) .. ({"", "==", "="})[#data % 3 + 1])
+end
+
+local function getAuthorizationHeader(user, password)
+ return "Basic " .. base64encode(user .. ":" .. password)
+end
+
+
+local function badResponse(endpoint, status, response)
+ warn(('unable to submit logs to %s (status: %s)\n%s'):format(endpoint, status, json.encode(response, { indent = true })))
+end
+
+local playerData = {}
+
+AddEventHandler('playerDropped', function()
+ playerData[source] = nil
+end)
+
+local function formatTags(source, tags)
+ if type(source) == 'number' and source > 0 then
+ local data = playerData[source]
+
+ if not data then
+ local _data = {
+ ('username:%s'):format(GetPlayerName(source))
+ }
+
+ local num = 1
+
+ ---@cast source string
+ for i = 0, GetNumPlayerIdentifiers(source) - 1 do
+ local identifier = GetPlayerIdentifier(source, i)
+
+ if not identifier:find('ip') then
+ num += 1
+ _data[num] = identifier
+ end
+ end
+
+ data = table.concat(_data, ',')
+ playerData[source] = data
+ end
+
+ tags = tags and ('%s,%s'):format(tags, data) or data
+ end
+
+ return tags
+end
+
+if service == 'fivemanage' then
+ local key = GetConvar('fivemanage:key', '')
+
+ if key ~= '' then
+ local endpoint = 'https://api.fivemanage.com/api/logs/batch'
+
+ local headers = {
+ ['Content-Type'] = 'application/json',
+ ['Authorization'] = key,
+ ['User-Agent'] = 'ox_lib'
+ }
+
+ function lib.logger(source, event, message, ...)
+ if not buffer then
+ buffer = {}
+
+ SetTimeout(500, function()
+ PerformHttpRequest(endpoint, function(status, _, _, response)
+ if status ~= 200 then
+ if type(response) == 'string' then
+ response = json.decode(response) or response
+ badResponse(endpoint, status, response)
+ end
+ end
+ end, 'POST', json.encode(buffer), headers)
+
+ buffer = nil
+ bufferSize = 0
+ end)
+ end
+
+ bufferSize += 1
+ buffer[bufferSize] = {
+ level = "info",
+ message = message,
+ resource = cache.resource,
+ metadata = {
+ hostname = hostname,
+ service = event,
+ source = source,
+ tags = formatTags(source, ... and string.strjoin(',', string.tostringall(...)) or nil),
+ }
+ }
+ end
+ end
+end
+
+if service == 'datadog' then
+ local key = GetConvar('datadog:key', ''):gsub("[\'\"]", '')
+
+ if key ~= '' then
+ local endpoint = ('https://http-intake.logs.%s/api/v2/logs'):format(GetConvar('datadog:site', 'datadoghq.com'))
+
+ local headers = {
+ ['Content-Type'] = 'application/json',
+ ['DD-API-KEY'] = key,
+ }
+
+ function lib.logger(source, event, message, ...)
+ if not buffer then
+ buffer = {}
+
+ SetTimeout(500, function()
+ PerformHttpRequest(endpoint, function(status, _, _, response)
+ if status ~= 202 then
+ if type(response) == 'string' then
+ response = json.decode(response:sub(10)) or response
+ badResponse(endpoint, status, type(response) == 'table' and response.errors[1] or response)
+ end
+ end
+ end, 'POST', json.encode(buffer), headers)
+
+ buffer = nil
+ bufferSize = 0
+ end)
+ end
+
+ bufferSize += 1
+ buffer[bufferSize] = {
+ hostname = hostname,
+ service = event,
+ message = message,
+ resource = cache.resource,
+ ddsource = tostring(source),
+ ddtags = formatTags(source, ... and string.strjoin(',', string.tostringall(...)) or nil),
+ }
+ end
+ end
+end
+
+if service == 'loki' then
+ local lokiUser = GetConvar('loki:user', '')
+ local lokiPassword = GetConvar('loki:password', GetConvar('loki:key', ''))
+ local lokiEndpoint = GetConvar('loki:endpoint', '')
+ local lokiTenant = GetConvar('loki:tenant', '')
+ local startingPattern = '^http[s]?://'
+ local headers = {
+ ['Content-Type'] = 'application/json'
+ }
+
+ if lokiUser ~= '' then
+ headers['Authorization'] = getAuthorizationHeader(lokiUser, lokiPassword)
+ end
+
+ if lokiTenant ~= '' then
+ headers['X-Scope-OrgID'] = lokiTenant
+ end
+
+ if not lokiEndpoint:find(startingPattern) then
+ lokiEndpoint = 'https://' .. lokiEndpoint
+ end
+
+ local endpoint = ('%s/loki/api/v1/push'):format(lokiEndpoint)
+
+ -- Converts a string of comma seperated kvp string to a table of kvps
+ -- example `discord:blahblah,fivem:blahblah,license:blahblah` -> `{discord="blahblah",fivem="blahblah",license="blahblah"}`
+ local function convertDDTagsToKVP(tags)
+ if not tags or type(tags) ~= 'string' then
+ return {}
+ end
+ local tempTable = { string.strsplit(',', tags) } -- outputs a number index table wth k:v strings as values
+ local bTable = table.create(0, #tempTable) -- buffer table
+
+ -- Loop through table and grab only values
+ for _, v in pairs(tempTable) do
+ local key, value = string.strsplit(':', v) -- splits string on ':' character
+ bTable[key] = value
+ end
+
+ return bTable -- Return the new table of kvps
+ end
+
+ function lib.logger(source, event, message, ...)
+ if not buffer then
+ buffer = {}
+
+ SetTimeout(500, function()
+ -- Strip string keys from buffer
+ local tempBuffer = {}
+ for _,v in pairs(buffer) do
+ tempBuffer[#tempBuffer+1] = v
+ end
+
+ local postBody = json.encode({streams = tempBuffer})
+ PerformHttpRequest(endpoint, function(status, _, _, _)
+ if status ~= 204 then
+ badResponse(endpoint, status, ("%s"):format(status, postBody))
+ end
+ end, 'POST', postBody, headers)
+
+ buffer = nil
+ end)
+ end
+
+ -- Generates a nanosecond unix timestamp
+ ---@diagnostic disable-next-line: param-type-mismatch
+ local timestamp = ('%s000000000'):format(os.time(os.date('*t')))
+
+ -- Initializes values table with the message
+ local values = {message = message}
+
+ -- Format the args into strings
+ local tags = formatTags(source, ... and string.strjoin(',', string.tostringall(...)) or nil)
+ local tagsTable = convertDDTagsToKVP(tags)
+
+ -- Concatenates tags kvp table to the values table
+ for k,v in pairs(tagsTable) do
+ values[k] = v -- Store the tags in the values table ready for logging
+ end
+
+ -- initialise stream payload
+ local payload = {
+ stream = {
+ server = hostname,
+ resource = cache.resource,
+ event = event
+ },
+ values = {
+ {
+ timestamp,
+ json.encode(values)
+ }
+ }
+ }
+
+ -- Safety check incase it throws index issue
+ if not buffer then
+ buffer = {}
+ end
+
+ -- Checks if the event exists in the buffer and adds to the values if found
+ -- else initialises the stream
+ if not buffer[event] then
+ buffer[event] = payload
+ else
+ local lastIndex = #buffer[event].values
+ lastIndex += 1
+
+ buffer[event].values[lastIndex] = {
+ timestamp,
+ json.encode(values)
+ }
+ end
+ end
+end
+
+return lib.logger
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/marker/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/marker/client.lua
new file mode 100644
index 000000000..a7ee7c097
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/marker/client.lua
@@ -0,0 +1,173 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@diagnostic disable: param-type-mismatch
+lib.marker = {}
+
+local defaultRotation = vector3(0, 0, 0)
+local defaultDirection = vector3(0, 0, 0)
+local defaultColor = { r = 255, g = 255, b = 255, a = 100 }
+local defaultSize = { width = 2, height = 1 }
+local defaultTextureDict = nil
+local defaultTextureName = nil
+
+local markerTypesMap = {
+ UpsideDownCone = 0,
+ VerticalCylinder = 1,
+ ThickChevronUp = 2,
+ ThinChevronUp = 3,
+ CheckeredFlagRect = 4,
+ CheckeredFlagCircle = 5,
+ VerticleCircle = 6,
+ PlaneModel = 7,
+ LostMCTransparent = 8,
+ LostMC = 9,
+ Number0 = 10,
+ Number1 = 11,
+ Number2 = 12,
+ Number3 = 13,
+ Number4 = 14,
+ Number5 = 15,
+ Number6 = 16,
+ Number7 = 17,
+ Number8 = 18,
+ Number9 = 19,
+ ChevronUpx1 = 20,
+ ChevronUpx2 = 21,
+ ChevronUpx3 = 22,
+ HorizontalCircleFat = 23,
+ ReplayIcon = 24,
+ HorizontalCircleSkinny = 25,
+ HorizontalCircleSkinny_Arrow = 26,
+ HorizontalSplitArrowCircle = 27,
+ DebugSphere = 28,
+ DollarSign = 29,
+ HorizontalBars = 30,
+ WolfHead = 31,
+ QuestionMark = 32,
+ PlaneSymbol = 33,
+ HelicopterSymbol = 34,
+ BoatSymbol = 35,
+ CarSymbol = 36,
+ MotorcycleSymbol = 37,
+ BikeSymbol = 38,
+ TruckSymbol = 39,
+ ParachuteSymbol = 40,
+ Unknown41 = 41,
+ SawbladeSymbol = 42,
+ Unknown43 = 43,
+}
+
+---@alias MarkerType
+---| "UpsideDownCone"
+---| "VerticalCylinder"
+---| "ThickChevronUp"
+---| "ThinChevronUp"
+---| "CheckeredFlagRect"
+---| "CheckeredFlagCircle"
+---| "VerticleCircle"
+---| "PlaneModel"
+---| "LostMCTransparent"
+---| "LostMC"
+---| "Number0"
+---| "Number1"
+---| "Number2"
+---| "Number3"
+---| "Number4"
+---| "Number5"
+---| "Number6"
+---| "Number7"
+---| "Number8"
+---| "Number9"
+---| "ChevronUpx1"
+---| "ChevronUpx2"
+---| "ChevronUpx3"
+---| "HorizontalCircleFat"
+---| "ReplayIcon"
+---| "HorizontalCircleSkinny"
+---| "HorizontalCircleSkinny_Arrow"
+---| "HorizontalSplitArrowCircle"
+---| "DebugSphere"
+---| "DollarSign"
+---| "HorizontalBars"
+---| "WolfHead"
+---| "QuestionMark"
+---| "PlaneSymbol"
+---| "HelicopterSymbol"
+---| "BoatSymbol"
+---| "CarSymbol"
+---| "MotorcycleSymbol"
+---| "BikeSymbol"
+---| "TruckSymbol"
+---| "ParachuteSymbol"
+---| "Unknown41"
+---| "SawbladeSymbol"
+---| "Unknown43"
+
+---@class MarkerProps
+---@field type MarkerType | number
+---@field coords { x: number, y: number, z: number }
+---@field width? number
+---@field height? number
+---@field color? { r: number, g: number, b: number, a: number }
+---@field rotation? { x: number, y: number, z: number }
+---@field direction? { x: number, y: number, z: number }
+---@field bobUpAndDown? boolean
+---@field faceCamera? boolean
+---@field rotate? boolean
+---@field textureDict? string
+---@field textureName? string
+
+---@param self MarkerProps
+local function drawMarker(self)
+ DrawMarker(
+ self.type,
+ self.coords.x, self.coords.y, self.coords.z,
+ self.direction.x, self.direction.y, self.direction.z,
+ self.rotation.x, self.rotation.y, self.rotation.z,
+ self.width, self.width, self.height,
+ self.color.r, self.color.g, self.color.b, self.color.a,
+ self.bobUpAndDown, self.faceCamera, 2, self.rotate, self.textureDict, self.textureName, false)
+end
+
+---@param options MarkerProps
+function lib.marker.new(options)
+ local markerType
+ if type(options.type) == "string" then
+ markerType = markerTypesMap[options.type]
+ if markerType == nil then
+ error(("unknown marker type '%s'"):format(options.type))
+ end
+ elseif type(options.type) == "number" then
+ markerType = options.type
+ else
+ error(("expected marker type to have type 'string' or 'number' (received %s)"):format(type(options.type)))
+ end
+
+ local self = {}
+ self.type = markerType
+ self.coords = options.coords
+ self.color = options.color or defaultColor
+ self.width = options.width or defaultSize.width
+ self.height = options.height or defaultSize.height
+ self.rotation = options.rotation or defaultRotation
+ self.direction = options.direction or defaultDirection
+ self.bobUpAndDown = type(options.bobUpAndDown) == 'boolean' and options.bobUpAndDown
+ self.faceCamera = type(options.faceCamera) ~= 'boolean' or options.faceCamera
+ self.rotate = type(options.rotate) == 'boolean' and options.rotate
+ self.textureDict = options.textureDict or defaultTextureDict
+ self.textureName = options.textureName or defaultTextureName
+ self.draw = drawMarker
+
+ self.width += 0.0
+ self.height += 0.0
+
+ return self
+end
+
+return lib.marker
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/math/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/math/shared.lua
new file mode 100644
index 000000000..e00cf4e04
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/math/shared.lua
@@ -0,0 +1,229 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class oxmath : mathlib
+lib.math = math
+
+local function parseNumber(input, min, max, round)
+ local n = tonumber(input)
+
+ if not n then
+ error(("value cannot be converted into a number (received %s)"):format(input), 3)
+ end
+
+ n = round and math.floor(n + 0.5) or n
+
+ if min and n < min then
+ error(("value does not meet minimum value of '%s' (received %s)"):format(min, n), 3)
+ end
+
+ if max and n > max then
+ error(("value exceeds maximum value of '%s' (received %s)"):format(max, n), 3)
+ end
+
+ return n
+end
+
+---Takes a string and returns a set of scalar values.
+---@param input string
+---@param min? number
+---@param max? number
+---@param round? boolean
+---@return number? ...
+function math.toscalars(input, min, max, round)
+ local arr = {}
+ local i = 0
+
+ for s in string.gmatch(input:gsub('[%w]+%w?%(', ''), '(-?[%w.%w]+)') do
+ local n = parseNumber(s, min, max, round and (round == true or i < round))
+
+ i += 1
+ arr[i] = n
+ end
+
+ return table.unpack(arr)
+end
+
+---Tries to convert its argument to a vector.
+---@param input string | table
+---@param min? number
+---@param max? number
+---@param round? boolean | number If round is a number, only round n values.
+---@return number | vector2 | vector3 | vector4
+function math.tovector(input, min, max, round)
+ local inputType = type(input)
+
+ if inputType == 'string' then
+ ---@diagnostic disable-next-line: param-type-mismatch
+ return vector(math.toscalars(input, min, max, round))
+ end
+
+ if inputType == 'table' then
+ for _, v in pairs(input) do
+ parseNumber(v, min, max, round)
+ end
+
+ if table.type(input) == 'array' then
+ return vector(table.unpack(input))
+ end
+
+ -- vector doesn't accept literal nils
+ return input.w and vector4(input.x, input.y, input.z, input.w)
+ or input.z and vector3(input.x, input.y, input.z)
+ or input.y and vector2(input.x, input.y)
+ or input.x + 0.0
+ end
+
+ error(('cannot convert %s to a vector value'):format(inputType), 2)
+end
+
+---Tries to convert a surface Normal to a Rotation.
+---@param input vector3
+---@return vector3
+function math.normaltorotation(input)
+ local inputType = type(input)
+
+ if inputType == 'vector3' then
+ local pitch = -math.asin(input.y) * (180.0 / math.pi)
+ local yaw = math.atan(input.x, input.z) * (180.0 / math.pi)
+ return vec3(pitch, yaw, 0.0)
+ end
+
+ error(('cannot convert type %s to a rotation vector'):format(inputType), 2)
+end
+
+---Tries to convert its argument to a vector4.
+---@param input string | table
+---@return vector4
+function math.torgba(input)
+ local res = math.tovector(input, 0, 255, 3)
+ assert(type(res) == 'vector4', 'cannot convert input to rgba')
+ parseNumber(res.a, 0, 1)
+ return res
+end
+
+---Takes a hexidecimal string and returns three integers.
+---@param input string
+---@return integer
+---@return integer
+---@return integer
+function math.hextorgb(input)
+ local r, g, b = string.match(input, '([^#]+.)(..)(..)')
+ return tonumber(r, 16), tonumber(g, 16), tonumber(b, 16)
+end
+
+---Formats a number as a hexadecimal string.
+---@param n number | string
+---@param upper? boolean
+---@return string
+function math.tohex(n, upper)
+ local formatString = ('0x%s'):format(upper and '%X' or '%x')
+ return formatString:format(n)
+end
+
+---Converts input number into grouped digits
+---@param number number
+---@param seperator? string
+---@return string
+function math.groupdigits(number, seperator) -- credit http://richard.warburton.it
+ local left, num, right = string.match(number, '^([^%d]*%d)(%d*)(.-)$')
+ return left .. (num:reverse():gsub('(%d%d%d)', '%1' .. (seperator or ',')):reverse()) .. right
+end
+
+---Clamp a number between 2 other numbers
+---@param val number
+---@param lower number
+---@param upper number
+---@return number
+function math.clamp(val, lower, upper) -- credit https://love2d.org/forums/viewtopic.php?t=1856
+ if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
+ return math.max(lower, math.min(upper, val))
+end
+
+---Calculates an intermediate value between `start` and `finish` based on the interpolation `factor`.
+---@generic T : number | vector2 | vector3 | vector4
+---@param start T
+---@param finish T
+---@param factor integer The interpolation factor between 0 and 1.
+---@return T
+function math.interp(start, finish, factor)
+ return start + (finish - start) * factor
+end
+
+local function interpolateTable(start, finish, factor)
+ local interp = math.interp
+ local result = {}
+
+ for k, v in pairs(start) do
+ result[k] = interp(v, finish[k], factor)
+ end
+
+ return result
+end
+
+---Linearly interpolates between two values over a specified duration, returning an iterator function that will run once per game-frame.
+---@generic T : number | table | vector2 | vector3 | vector4
+---@param start T -- The starting value of the interpolation.
+---@param finish T -- The ending value of the interpolation.
+---@param duration number -- The duration over which to interpolate over in milliseconds.
+---@return fun(): T, number
+function math.lerp(start, finish, duration)
+ local startTime = GetGameTimer()
+ local typeStart = type(start)
+ local typeFinish = type(finish)
+
+ if typeStart ~= 'number' and typeStart ~= 'vector2' and typeStart ~= 'vector3' and typeStart ~= 'vector4' and typeStart ~= 'table' then
+ error(("expected argument 1 to have type '%s' (received %s)"):format('number | table | vector2 | vector3 | vector4', typeStart))
+ end
+
+ assert(typeFinish == typeStart, ("expected argument 2 to have type '%s' (received %s)"):format(typeStart, typeFinish))
+
+ local interpFn = typeStart == 'table' and interpolateTable or math.interp
+ local step
+
+ return function()
+ if not step then
+ step = 0
+ return start, step
+ end
+
+ if step == 1 then return end
+
+ Wait(0)
+ step = math.min((GetGameTimer() - startTime) / duration, 1)
+
+ if step < 1 then
+ return interpFn(start, finish, step), step
+ end
+
+ return finish, step
+ end
+end
+
+---Rounds a number to a whole number or to the specified number of decimal places.
+---@param value number | string
+---@param places? number | string
+---@return number
+function math.round(value, places)
+ if type(value) == 'string' then value = tonumber(value) end
+ if type(value) ~= 'number' then error('Value must be a number') end
+
+ if places then
+ if type(places) == 'string' then places = tonumber(places) end
+ if type(places) ~= 'number' then error('Places must be a number') end
+
+ if places > 0 then
+ local mult = 10 ^ (places or 0)
+ return math.floor(value * mult + 0.5) / mult
+ end
+ end
+
+ return math.floor(value + 0.5)
+end
+
+return lib.math
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/playAnim/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/playAnim/client.lua
new file mode 100644
index 000000000..8fbf4d3a9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/playAnim/client.lua
@@ -0,0 +1,78 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@alias AnimationFlags number
+---| 0 DEFAULT
+---| 1 LOOPING
+---| 2 HOLD_LAST_FRAME
+---| 4 REPOSITION_WHEN_FINISHED
+---| 8 NOT_INTERRUPTABLE
+---| 16 UPPERBODY
+---| 32 SECONDARY
+---| 64 REORIENT_WHEN_FINISHED
+---| 128 ABORT_ON_PED_MOVEMENT
+---| 256 ADDITIVE
+---| 512 TURN_OFF_COLLISION
+---| 1024 OVERRIDE_PHYSICS
+---| 2048 IGNORE_GRAVITY
+---| 4096 EXTRACT_INITIAL_OFFSET
+---| 8192 EXIT_AFTER_INTERRUPTED
+---| 16384 TAG_SYNC_IN
+---| 32768 TAG_SYNC_OUT
+---| 65536 TAG_SYNC_CONTINUOUS
+---| 131072 FORCE_START
+---| 262144 USE_KINEMATIC_PHYSICS
+---| 524288 USE_MOVER_EXTRACTION
+---| 1048576 HIDE_WEAPON
+---| 2097152 ENDS_IN_DEAD_POSE
+---| 4194304 ACTIVATE_RAGDOLL_ON_COLLISION
+---| 8388608 DONT_EXIT_ON_DEATH
+---| 16777216 ABORT_ON_WEAPON_DAMAGE
+---| 33554432 DISABLE_FORCED_PHYSICS_UPDATE
+---| 67108864 PROCESS_ATTACHMENTS_ON_START
+---| 134217728 EXPAND_PED_CAPSULE_FROM_SKELETON
+---| 268435456 USE_ALTERNATIVE_FP_ANIM
+---| 536870912 BLENDOUT_WRT_LAST_FRAME
+---| 1073741824 USE_FULL_BLENDING
+
+---@alias ControlFlags number
+---| 0 NONE
+---| 1 DISABLE_LEG_IK
+---| 2 DISABLE_ARM_IK
+---| 4 DISABLE_HEAD_IK
+---| 8 DISABLE_TORSO_IK
+---| 16 DISABLE_TORSO_REACT_IK
+---| 32 USE_LEG_ALLOW_TAGS
+---| 64 USE_LEG_BLOCK_TAGS
+---| 128 USE_ARM_ALLOW_TAGS
+---| 256 USE_ARM_BLOCK_TAGS
+---| 512 PROCESS_WEAPON_HAND_GRIP
+---| 1024 USE_FP_ARM_LEFT
+---| 2048 USE_FP_ARM_RIGHT
+---| 4096 DISABLE_TORSO_VEHICLE_IK
+---| 8192 LINKED_FACIAL
+
+---@param ped number
+---@param animDictionary string
+---@param animationName string
+---@param blendInSpeed? number Defaults to 8.0
+---@param blendOutSpeed? number Defaults to -8.0
+---@param duration? integer Defaults to -1
+---@param animFlags? AnimationFlags
+---@param startPhase? number
+---@param phaseControlled? boolean
+---@param controlFlags? integer
+---@param overrideCloneUpdate? boolean
+function lib.playAnim(ped, animDictionary, animationName, blendInSpeed, blendOutSpeed, duration, animFlags, startPhase, phaseControlled, controlFlags, overrideCloneUpdate)
+ lib.requestAnimDict(animDictionary)
+ ---@diagnostic disable-next-line: param-type-mismatch
+ TaskPlayAnim(ped, animDictionary, animationName, blendInSpeed or 8.0, blendOutSpeed or -8.0, duration or -1, animFlags or 0, startPhase or 0.0, phaseControlled or false, controlFlags or 0, overrideCloneUpdate or false)
+ RemoveAnimDict(animDictionary)
+end
+
+return lib.playAnim
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/points/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/points/client.lua
new file mode 100644
index 000000000..a0b21d78d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/points/client.lua
@@ -0,0 +1,188 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class PointProperties
+---@field coords vector3
+---@field distance number
+---@field onEnter? fun(self: CPoint)
+---@field onExit? fun(self: CPoint)
+---@field nearby? fun(self: CPoint)
+---@field [string] any
+
+---@class CPoint : PointProperties
+---@field id number
+---@field currentDistance number
+---@field isClosest? boolean
+---@field remove fun()
+
+---@type table
+local points = {}
+---@type CPoint[]
+local nearbyPoints = {}
+local nearbyCount = 0
+---@type CPoint?
+local closestPoint
+local tick
+
+local function removePoint(self)
+ if closestPoint?.id == self.id then
+ closestPoint = nil
+ end
+
+ lib.grid.removeEntry(self)
+
+ points[self.id] = nil
+end
+
+CreateThread(function()
+ while true do
+ local coords = GetEntityCoords(cache.ped)
+ local newPoints = lib.grid.getNearbyEntries(coords, function(entry) return entry.remove == removePoint end) --[[@as CPoint[] ]]
+ local cellX, cellY = lib.grid.getCellPosition(coords)
+ cache.coords = coords
+ closestPoint = nil
+
+ if cellX ~= cache.lastCellX or cellY ~= cache.lastCellY then
+ for i = 1, nearbyCount do
+ local point = nearbyPoints[i]
+
+ if point.inside then
+ local distance = #(coords - point.coords)
+
+ if distance > point.radius then
+ if point.onExit then point:onExit() end
+
+ point.inside = nil
+ point.currentDistance = nil
+ end
+ end
+ end
+
+ cache.lastCellX = cellX
+ cache.lastCellY = cellY
+ end
+
+ if nearbyCount ~= 0 then
+ table.wipe(nearbyPoints)
+ nearbyCount = 0
+ end
+
+ for i = 1, #newPoints do
+ local point = newPoints[i]
+ local distance = #(coords - point.coords)
+
+ if distance <= point.radius then
+ point.currentDistance = distance
+
+ if not closestPoint or distance < (closestPoint.currentDistance or point.radius) then
+ if closestPoint then closestPoint.isClosest = nil end
+
+ point.isClosest = true
+ closestPoint = point
+ end
+
+ nearbyCount += 1
+ nearbyPoints[nearbyCount] = point
+
+ if point.onEnter and not point.inside then
+ point.inside = true
+ point:onEnter()
+ end
+ elseif point.currentDistance then
+ if point.onExit then point:onExit() end
+
+ point.inside = nil
+ point.currentDistance = nil
+ end
+ end
+
+ if not tick then
+ if nearbyCount ~= 0 then
+ tick = SetInterval(function()
+ for i = nearbyCount, 1, -1 do
+ local point = nearbyPoints[i]
+
+ if point and point.nearby then
+ point:nearby()
+ end
+ end
+ end)
+ end
+ elseif nearbyCount == 0 then
+ tick = ClearInterval(tick)
+ end
+
+ Wait(300)
+ end
+end)
+
+local function toVector(coords)
+ local _type = type(coords)
+
+ if _type ~= 'vector3' then
+ if _type == 'table' or _type == 'vector4' then
+ return vec3(coords[1] or coords.x, coords[2] or coords.y, coords[3] or coords.z)
+ end
+
+ error(("expected type 'vector3' or 'table' (received %s)"):format(_type))
+ end
+
+ return coords
+end
+
+lib.points = {}
+
+---@return CPoint
+---@overload fun(data: PointProperties): CPoint
+---@overload fun(coords: vector3, distance: number, data?: PointProperties): CPoint
+function lib.points.new(...)
+ local args = { ... }
+ local id = #points + 1
+ local self
+
+ -- Support sending a single argument containing point data
+ if type(args[1]) == 'table' then
+ self = args[1]
+ self.id = id
+ self.remove = removePoint
+ else
+ -- Backwards compatibility for original implementation (args: coords, distance, data)
+ self = {
+ id = id,
+ coords = args[1],
+ remove = removePoint,
+ }
+ end
+
+ self.coords = toVector(self.coords)
+ self.distance = self.distance or args[2]
+ self.radius = self.distance
+
+ if args[3] then
+ for k, v in pairs(args[3]) do
+ self[k] = v
+ end
+ end
+
+ lib.grid.addEntry(self)
+ points[id] = self
+
+ return self
+end
+
+function lib.points.getAllPoints() return points end
+
+function lib.points.getNearbyPoints() return nearbyPoints end
+
+---@return CPoint?
+function lib.points.getClosestPoint() return closestPoint end
+
+---@deprecated
+lib.points.closest = lib.points.getClosestPoint
+
+return lib.points
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/print/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/print/shared.lua
new file mode 100644
index 000000000..202aaf221
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/print/shared.lua
@@ -0,0 +1,73 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@enum PrintLevel
+local printLevel = {
+ error = 1,
+ warn = 2,
+ info = 3,
+ verbose = 4,
+ debug = 5,
+}
+
+local levelPrefixes = {
+ '^1[ERROR]',
+ '^3[WARN]',
+ '^7[INFO]',
+ '^4[VERBOSE]',
+ '^6[DEBUG]',
+}
+local convarGlobal = 'ox:printlevel'
+local convarResource = 'ox:printlevel:' .. cache.resource
+local function getPrintLevelFromConvar()
+ return printLevel[GetConvar(convarResource, GetConvar(convarGlobal, 'info'))]
+end
+local resourcePrintLevel = getPrintLevelFromConvar()
+local template = ('^5[%s] %%s %%s^7'):format(cache.resource)
+local function handleException(reason, value)
+ if type(value) == 'function' then return tostring(value) end
+ return reason
+end
+local jsonOptions = { sort_keys = true, indent = true, exception = handleException }
+
+---Prints to console conditionally based on what ox:printlevel is.
+---Any print with a level more severe will also print. If ox:printlevel is info, then warn and error prints will appear as well, but debug prints will not.
+---@param level PrintLevel
+---@param ... any
+local function libPrint(level, ...)
+ if level > resourcePrintLevel then return end
+
+ local args = { ... }
+
+ for i = 1, #args do
+ local arg = args[i]
+ args[i] = type(arg) == 'table' and json.encode(arg, jsonOptions) or tostring(arg)
+ end
+
+ print(template:format(levelPrefixes[level], table.concat(args, '\t')))
+end
+
+lib.print = {
+ error = function(...) libPrint(printLevel.error, ...) end,
+ warn = function(...) libPrint(printLevel.warn, ...) end,
+ info = function(...) libPrint(printLevel.info, ...) end,
+ verbose = function(...) libPrint(printLevel.verbose, ...) end,
+ debug = function(...) libPrint(printLevel.debug, ...) end,
+}
+
+-- Update the print level when the convar changes
+if (AddConvarChangeListener) then
+ AddConvarChangeListener('ox:printlevel*', function(convarName, reserved)
+ if (convarName ~= convarResource and convarName ~= convarGlobal) then return end
+ resourcePrintLevel = getPrintLevelFromConvar()
+ end)
+else
+ libPrint(printLevel.verbose, 'Convar change listener not available, print level will not update dynamically.')
+end
+
+return lib.print
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/raycast/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/raycast/client.lua
new file mode 100644
index 000000000..b61875cc1
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/raycast/client.lua
@@ -0,0 +1,79 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+lib.raycast = {}
+
+local StartShapeTestLosProbe = StartShapeTestLosProbe
+local GetShapeTestResultIncludingMaterial = GetShapeTestResultIncludingMaterial
+local glm_sincos = require 'glm'.sincos
+local glm_rad = require 'glm'.rad
+local math_abs = math.abs
+local GetFinalRenderedCamCoord = GetFinalRenderedCamCoord
+local GetFinalRenderedCamRot = GetFinalRenderedCamRot
+
+---@alias ShapetestIgnore
+---| 1 GLASS
+---| 2 SEE_THROUGH
+---| 3 GLASS | SEE_THROUGH
+---| 4 NO_COLLISION
+---| 7 GLASS | SEE_THROUGH | NO_COLLISION
+
+---@alias ShapetestFlags integer
+---| 1 INCLUDE_MOVER
+---| 2 INCLUDE_VEHICLE
+---| 4 INCLUDE_PED
+---| 8 INCLUDE_RAGDOLL
+---| 16 INCLUDE_OBJECT
+---| 32 INCLUDE_PICKUP
+---| 64 INCLUDE_GLASS
+---| 128 INCLUDE_RIVER
+---| 256 INCLUDE_FOLIAGE
+---| 511 INCLUDE_ALL
+
+---@param coords vector3
+---@param destination vector3
+---@param flags ShapetestFlags? Defaults to 511.
+---@param ignore ShapetestIgnore? Defaults to 4.
+---@return boolean hit
+---@return number entityHit
+---@return vector3 endCoords
+---@return vector3 surfaceNormal
+---@return number materialHash
+function lib.raycast.fromCoords(coords, destination, flags, ignore)
+ local handle = StartShapeTestLosProbe(coords.x, coords.y, coords.z, destination.x, destination.y,
+ destination.z, flags or 511, cache.ped, ignore or 4)
+
+ while true do
+ Wait(0)
+ local retval, hit, endCoords, surfaceNormal, material, entityHit = GetShapeTestResultIncludingMaterial(handle)
+
+ if retval ~= 1 then
+ return hit, entityHit, endCoords, surfaceNormal, material
+ end
+ end
+end
+
+local function getForwardVector()
+ local sin, cos = glm_sincos(glm_rad(GetFinalRenderedCamRot(2)))
+ return vec3(-sin.z * math_abs(cos.x), cos.z * math_abs(cos.x), sin.x)
+end
+
+---@param flags ShapetestFlags? Defaults to 511.
+---@param ignore ShapetestIgnore? Defaults to 4.
+---@param distance number? Defaults to 10.
+function lib.raycast.fromCamera(flags, ignore, distance)
+ local coords = GetFinalRenderedCamCoord()
+ local destination = coords + getForwardVector() * (distance or 10)
+
+ return lib.raycast.fromCoords(GetFinalRenderedCamCoord(), destination, flags, ignore)
+end
+
+---@deprecated
+lib.raycast.cam = lib.raycast.fromCamera
+
+return lib.raycast
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimDict/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimDict/client.lua
new file mode 100644
index 000000000..3217cd860
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimDict/client.lua
@@ -0,0 +1,27 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load an animation dictionary. When called from a thread, it will yield until it has loaded.
+---@param animDict string
+---@param timeout number? Approximate milliseconds to wait for the dictionary to load. Default is 10000.
+---@return string animDict
+function lib.requestAnimDict(animDict, timeout)
+ if HasAnimDictLoaded(animDict) then return animDict end
+
+ if type(animDict) ~= 'string' then
+ error(("expected animDict to have type 'string' (received %s)"):format(type(animDict)))
+ end
+
+ if not DoesAnimDictExist(animDict) then
+ error(("attempted to load invalid animDict '%s'"):format(animDict))
+ end
+
+ return lib.streamingRequest(RequestAnimDict, HasAnimDictLoaded, 'animDict', animDict, timeout)
+end
+
+return lib.requestAnimDict
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimSet/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimSet/client.lua
new file mode 100644
index 000000000..576994a21
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAnimSet/client.lua
@@ -0,0 +1,23 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load an animation clipset. When called from a thread, it will yield until it has loaded.
+---@param animSet string
+---@param timeout number? Approximate milliseconds to wait for the clipset to load. Default is 10000.
+---@return string animSet
+function lib.requestAnimSet(animSet, timeout)
+ if HasAnimSetLoaded(animSet) then return animSet end
+
+ if type(animSet) ~= 'string' then
+ error(("expected animSet to have type 'string' (received %s)"):format(type(animSet)))
+ end
+
+ return lib.streamingRequest(RequestAnimSet, HasAnimSetLoaded, 'animSet', animSet, timeout)
+end
+
+return lib.requestAnimSet
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAudioBank/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAudioBank/client.lua
new file mode 100644
index 000000000..254ea4d9a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestAudioBank/client.lua
@@ -0,0 +1,19 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Loads an audio bank.
+---@param audioBank string
+---@param timeout number?
+---@return string
+function lib.requestAudioBank(audioBank, timeout)
+ return lib.waitFor(function()
+ if RequestScriptAudioBank(audioBank, false) then return audioBank end
+ end, ("failed to load audiobank '%s' - this may be caused by\n- too many loaded assets\n- oversized, invalid, or corrupted assets"):format(audioBank), timeout or 30000)
+end
+
+return lib.requestAudioBank
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestModel/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestModel/client.lua
new file mode 100644
index 000000000..e2d6225cc
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestModel/client.lua
@@ -0,0 +1,24 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load a model. When called from a thread, it will yield until it has loaded.
+---@param model number | string
+---@param timeout number? Approximate milliseconds to wait for the model to load. Default is 10000.
+---@return number model
+function lib.requestModel(model, timeout)
+ if type(model) ~= 'number' then model = joaat(model) end
+ if HasModelLoaded(model) then return model end
+
+ if not IsModelValid(model) and not IsModelInCdimage(model) then
+ error(("attempted to load invalid model '%s'"):format(model))
+ end
+
+ return lib.streamingRequest(RequestModel, HasModelLoaded, 'model', model, timeout)
+end
+
+return lib.requestModel
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestNamedPtfxAsset/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestNamedPtfxAsset/client.lua
new file mode 100644
index 000000000..6f825d7cc
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestNamedPtfxAsset/client.lua
@@ -0,0 +1,23 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load a named particle effect. When called from a thread, it will yield until it has loaded.
+---@param ptFxName string
+---@param timeout number? Approximate milliseconds to wait for the particle effect to load. Default is 10000.
+---@return string ptFxName
+function lib.requestNamedPtfxAsset(ptFxName, timeout)
+ if HasNamedPtfxAssetLoaded(ptFxName) then return ptFxName end
+
+ if type(ptFxName) ~= 'string' then
+ error(("expected ptFxName to have type 'string' (received %s)"):format(type(ptFxName)))
+ end
+
+ return lib.streamingRequest(RequestNamedPtfxAsset, HasNamedPtfxAssetLoaded, 'ptFxName', ptFxName, timeout)
+end
+
+return lib.requestNamedPtfxAsset
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestScaleformMovie/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestScaleformMovie/client.lua
new file mode 100644
index 000000000..1721d24fa
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestScaleformMovie/client.lua
@@ -0,0 +1,25 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load a scaleform movie. When called from a thread, it will yield until it has loaded.
+---@param scaleformName string
+---@param timeout number? Approximate milliseconds to wait for the scaleform movie to load. Default is 1000.
+---@return number? scaleform
+function lib.requestScaleformMovie(scaleformName, timeout)
+ if type(scaleformName) ~= 'string' then
+ error(("expected scaleformName to have type 'string' (received %s)"):format(type(scaleformName)))
+ end
+
+ local scaleform = RequestScaleformMovie(scaleformName)
+
+ return lib.waitFor(function()
+ if HasScaleformMovieLoaded(scaleform) then return scaleform end
+ end, ("failed to load scaleformMovie '%s'"):format(scaleformName), timeout)
+end
+
+return lib.requestScaleformMovie
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestStreamedTextureDict/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestStreamedTextureDict/client.lua
new file mode 100644
index 000000000..cf96e124e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestStreamedTextureDict/client.lua
@@ -0,0 +1,23 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Load a texture dictionary. When called from a thread, it will yield until it has loaded.
+---@param textureDict string
+---@param timeout number? Approximate milliseconds to wait for the dictionary to load. Default is 10000.
+---@return string textureDict
+function lib.requestStreamedTextureDict(textureDict, timeout)
+ if HasStreamedTextureDictLoaded(textureDict) then return textureDict end
+
+ if type(textureDict) ~= 'string' then
+ error(("expected textureDict to have type 'string' (received %s)"):format(type(textureDict)))
+ end
+
+ return lib.streamingRequest(RequestStreamedTextureDict, HasStreamedTextureDictLoaded, 'textureDict', textureDict, timeout)
+end
+
+return lib.requestStreamedTextureDict
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestWeaponAsset/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestWeaponAsset/client.lua
new file mode 100644
index 000000000..c26c175fe
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/requestWeaponAsset/client.lua
@@ -0,0 +1,52 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@alias WeaponResourceFlags
+---| 1 WRF_REQUEST_BASE_ANIMS
+---| 2 WRF_REQUEST_COVER_ANIMS
+---| 4 WRF_REQUEST_MELEE_ANIMS
+---| 8 WRF_REQUEST_MOTION_ANIMS
+---| 16 WRF_REQUEST_STEALTH_ANIMS
+---| 32 WRF_REQUEST_ALL_MOVEMENT_VARIATION_ANIMS
+---| 31 WRF_REQUEST_ALL_ANIMS
+
+---@alias ExtraWeaponComponentFlags
+---| 0 WEAPON_COMPONENT_NONE
+---| 1 WEAPON_COMPONENT_FLASH
+---| 2 WEAPON_COMPONENT_SCOPE
+---| 4 WEAPON_COMPONENT_SUPP
+---| 8 WEAPON_COMPONENT_SCLIP2
+---| 16 WEAPON_COMPONENT_GRIP
+
+---Load a weapon asset. When called from a thread, it will yield until it has loaded.
+---@param weaponType string | number
+---@param timeout number? Approximate milliseconds to wait for the asset to load. Default is 10000.
+---@param weaponResourceFlags WeaponResourceFlags? Default is 31.
+---@param extraWeaponComponentFlags ExtraWeaponComponentFlags? Default is 0.
+---@return string | number weaponType
+function lib.requestWeaponAsset(weaponType, timeout, weaponResourceFlags, extraWeaponComponentFlags)
+ if HasWeaponAssetLoaded(weaponType) then return weaponType end
+
+ local weaponTypeType = type(weaponType) --kekw
+
+ if weaponTypeType ~= 'string' and weaponTypeType ~= 'number' then
+ error(("expected weaponType to have type 'string' or 'number' (received %s)"):format(weaponTypeType))
+ end
+
+ if weaponResourceFlags and type(weaponResourceFlags) ~= 'number' then
+ error(("expected weaponResourceFlags to have type 'number' (received %s)"):format(type(weaponResourceFlags)))
+ end
+
+ if extraWeaponComponentFlags and type(extraWeaponComponentFlags) ~= 'number' then
+ error(("expected extraWeaponComponentFlags to have type 'number' (received %s)"):format(type(extraWeaponComponentFlags)))
+ end
+
+ return lib.streamingRequest(RequestWeaponAsset, HasWeaponAssetLoaded, 'weaponHash', weaponType, timeout, weaponResourceFlags or 31, extraWeaponComponentFlags or 0)
+end
+
+return lib.requestWeaponAsset
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/require/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/require/shared.lua
new file mode 100644
index 000000000..2ffe504de
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/require/shared.lua
@@ -0,0 +1,190 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local loaded = {}
+local _require = require
+
+package = {
+ path = './?.lua;./?/init.lua',
+ preload = {},
+ loaded = setmetatable({}, {
+ __index = loaded,
+ __newindex = noop,
+ __metatable = false,
+ })
+}
+
+---@param modName string
+---@return string
+---@return string
+local function getModuleInfo(modName)
+ local resource = modName:match('^@(.-)/.+') --[[@as string?]]
+
+ if resource then
+ return resource, modName:sub(#resource + 3)
+ end
+
+ local idx = 4 -- call stack depth (kept slightly lower than expected depth "just in case")
+
+ while true do
+ local src = debug.getinfo(idx, 'S')?.source
+
+ if not src then
+ return cache.resource, modName
+ end
+
+ resource = src:match('^@@([^/]+)/.+')
+
+ if resource and not src:find('^@@ox_lib/imports/require') then
+ return resource, modName
+ end
+
+ idx += 1
+ end
+end
+
+local tempData = {}
+
+---@param name string
+---@param path string
+---@return string? filename
+---@return string? errmsg
+---@diagnostic disable-next-line: duplicate-set-field
+function package.searchpath(name, path)
+ local resource, modName = getModuleInfo(name:gsub('%.', '/'))
+ local tried = {}
+
+ for template in path:gmatch('[^;]+') do
+ local fileName = template:gsub('^%./', ''):gsub('?', modName:gsub('%.', '/') or modName)
+ local file = LoadResourceFile(resource, fileName)
+
+ if file then
+ tempData[1] = file
+ tempData[2] = resource
+ return fileName
+ end
+
+ tried[#tried + 1] = ("no file '@%s/%s'"):format(resource, fileName)
+ end
+
+ return nil, table.concat(tried, "\n\t")
+end
+
+---Attempts to load a module at the given path relative to the resource root directory.\
+---Returns a function to load the module chunk, or a string containing all tested paths.
+---@param modName string
+---@param env? table
+local function loadModule(modName, env)
+ local fileName, err = package.searchpath(modName, package.path)
+
+ if fileName then
+ local file = tempData[1]
+ local resource = tempData[2]
+
+ table.wipe(tempData)
+ return assert(load(file, ('@@%s/%s'):format(resource, fileName), 't', env or _ENV))
+ end
+
+ return nil, err or 'unknown error'
+end
+
+---@alias PackageSearcher
+---| fun(modName: string): function loader
+---| fun(modName: string): nil, string errmsg
+
+---@type PackageSearcher[]
+package.searchers = {
+ function(modName)
+ local ok, result = pcall(_require, modName)
+
+ if ok then return result end
+
+ return ok, result
+ end,
+ function(modName)
+ if package.preload[modName] ~= nil then
+ return package.preload[modName]
+ end
+
+ return nil, ("no field package.preload['%s']"):format(modName)
+ end,
+ function(modName) return loadModule(modName) end,
+}
+
+---@param filePath string
+---@param env? table
+---@return unknown
+---Loads and runs a Lua file at the given path. Unlike require, the chunk is not cached for future use.
+function lib.load(filePath, env)
+ if type(filePath) ~= 'string' then
+ error(("file path must be a string (received '%s')"):format(filePath), 2)
+ end
+
+ local result, err = loadModule(filePath, env)
+
+ if result then return result() end
+
+ error(("file '%s' not found\n\t%s"):format(filePath, err))
+end
+
+---@param filePath string
+---@return table
+---Loads and decodes a json file at the given path.
+function lib.loadJson(filePath)
+ if type(filePath) ~= 'string' then
+ error(("file path must be a string (received '%s')"):format(filePath), 2)
+ end
+
+ local resourceSrc, modPath = getModuleInfo(filePath:gsub('%.', '/'))
+ local resourceFile = LoadResourceFile(resourceSrc, ('%s.json'):format(modPath))
+
+ if resourceFile then
+ return json.decode(resourceFile)
+ end
+
+ error(("json file '%s' not found\n\tno file '@%s/%s.json'"):format(filePath, resourceSrc, modPath))
+end
+
+---Loads the given module, returns any value returned by the seacher (`true` when `nil`).\
+---Passing `@resourceName.modName` loads a module from a remote resource.
+---@param modName string
+---@return unknown
+function lib.require(modName)
+ if type(modName) ~= 'string' then
+ error(("module name must be a string (received '%s')"):format(modName), 3)
+ end
+
+ local module = loaded[modName]
+
+ if module == '__loading' then
+ error(("^1circular-dependency occurred when loading module '%s'^0"):format(modName), 2)
+ end
+
+ if module ~= nil then return module end
+
+ loaded[modName] = '__loading'
+
+ local err = {}
+
+ for i = 1, #package.searchers do
+ local result, errMsg = package.searchers[i](modName)
+
+ if result then
+ if type(result) == 'function' then result = result() end
+ loaded[modName] = result or result == nil
+
+ return loaded[modName]
+ end
+
+ err[#err + 1] = errMsg
+ end
+
+ error(("%s"):format(table.concat(err, "\n\t")))
+end
+
+return lib.require
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/scaleform/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/scaleform/client.lua
new file mode 100644
index 000000000..dc156e964
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/scaleform/client.lua
@@ -0,0 +1,232 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class renderTargetTable
+---@field name string
+---@field model string | number
+
+---@class detailsTable
+---@field name string
+---@field fullScreen? boolean
+---@field x? number
+---@field y? number
+---@field width? number
+---@field height? number
+---@field renderTarget? renderTargetTable
+
+---@class Scaleform : OxClass
+---@field scaleform number
+---@field draw boolean
+---@field target number
+---@field targetName string
+---@field sfHandle? number
+---@field fullScreen boolean
+---@field private private { isDrawing: boolean }
+lib.scaleform = lib.class('Scaleform')
+
+--- Converts the arguments into data types usable by scaleform
+---@param argsTable (number | string | boolean)[]
+local function convertArgs(argsTable)
+ for i = 1, #argsTable do
+ local arg = argsTable[i]
+ local argType = type(arg)
+
+ if argType == 'string' then
+ ScaleformMovieMethodAddParamPlayerNameString(arg)
+ elseif argType == 'number' then
+ if math.type(arg) == 'integer' then
+ ScaleformMovieMethodAddParamInt(arg)
+ else
+ ScaleformMovieMethodAddParamFloat(arg)
+ end
+ elseif argType == 'boolean' then
+ ScaleformMovieMethodAddParamBool(arg)
+ else
+ error(('Unsupported Parameter type [%s]'):format(argType))
+ end
+ end
+end
+
+---@param expectedType 'boolean' | 'integer' | 'string'
+---@return boolean | integer | string
+local function retrieveReturnValue(expectedType)
+ local result = EndScaleformMovieMethodReturnValue()
+
+ lib.waitFor(function()
+ if IsScaleformMovieMethodReturnValueReady(result) then
+ return true
+ end
+ end, "Failed to retrieve return value", 1000)
+
+ if expectedType == "integer" then
+ return GetScaleformMovieMethodReturnValueInt(result)
+ elseif expectedType == "boolean" then
+ return GetScaleformMovieMethodReturnValueBool(result)
+ else
+ return GetScaleformMovieMethodReturnValueString(result)
+ end
+end
+
+---@param details detailsTable | string
+---@return nil
+function lib.scaleform:constructor(details)
+ details = type(details) == 'table' and details or { name = details }
+
+ local scaleform = lib.requestScaleformMovie(details.name)
+
+ self.sfHandle = scaleform
+ self.private.isDrawing = false
+
+ self.fullScreen = details.fullScreen or false
+ self.x = details.x or 0
+ self.y = details.y or 0
+ self.width = details.width or 0
+ self.height = details.height or 0
+
+ if details.renderTarget then
+ self:setRenderTarget(details.renderTarget.name, details.renderTarget.model)
+ end
+end
+
+---@param name string
+---@param args? (number | string | boolean)[]
+---@param returnValue? string
+---@return any
+function lib.scaleform:callMethod(name, args, returnValue)
+ if not self.sfHandle then
+ return error("attempted to call method with invalid scaleform handle")
+ end
+
+ BeginScaleformMovieMethod(self.sfHandle, name)
+
+ if args and type(args) == 'table' then
+ convertArgs(args)
+ end
+
+ if returnValue then
+ return retrieveReturnValue(returnValue)
+ end
+
+ EndScaleformMovieMethod()
+end
+
+---@param isFullscreen boolean
+---@return nil
+function lib.scaleform:setFullScreen(isFullscreen)
+ self.fullScreen = isFullscreen
+end
+
+---@param x number
+---@param y number
+---@param width number
+---@param height number
+---@return nil
+function lib.scaleform:setProperties(x, y, width, height)
+ if self.fullScreen then
+ lib.print.info('Cannot set properties when full screen is enabled')
+ return
+ end
+
+ self.x = x
+ self.y = y
+ self.width = width
+ self.height = height
+end
+
+---@param name string
+---@param model string|number
+---@return nil
+function lib.scaleform:setRenderTarget(name, model)
+ if self.target then
+ ReleaseNamedRendertarget(self.targetName)
+ end
+
+ if type(model) == 'string' then
+ model = joaat(model)
+ end
+
+ if not IsNamedRendertargetRegistered(name) then
+ RegisterNamedRendertarget(name, false)
+
+ if not IsNamedRendertargetLinked(model) then
+ LinkNamedRendertarget(model)
+ end
+
+ self.target = GetNamedRendertargetRenderId(name)
+ self.targetName = name
+ end
+end
+
+function lib.scaleform:isDrawing()
+ return self.private.isDrawing
+end
+
+function lib.scaleform:draw()
+ if self.target then
+ SetTextRenderId(self.target)
+ SetScriptGfxDrawOrder(4)
+ SetScriptGfxDrawBehindPausemenu(true)
+ SetScaleformFitRendertarget(self.sfHandle, true)
+ end
+
+ if self.fullScreen then
+ DrawScaleformMovieFullscreen(self.sfHandle, 255, 255, 255, 255, 0)
+ else
+ if not self.x or not self.y or not self.width or not self.height then
+ error('attempted to draw scaleform without setting properties')
+ else
+ DrawScaleformMovie(self.sfHandle, self.x, self.y, self.width, self.height, 255, 255, 255, 255, 0)
+ end
+ end
+
+ if self.target then
+ SetTextRenderId(1)
+ end
+end
+
+function lib.scaleform:startDrawing()
+ if self.private.isDrawing then
+ return
+ end
+
+ self.private.isDrawing = true
+
+ CreateThread(function()
+ while self:isDrawing() do
+ self:draw()
+ Wait(0)
+ end
+ end)
+end
+
+---@return nil
+function lib.scaleform:stopDrawing()
+ if not self.private.isDrawing then
+ return
+ end
+
+ self.private.isDrawing = false
+end
+
+---@return nil
+function lib.scaleform:dispose()
+ if self.sfHandle then
+ SetScaleformMovieAsNoLongerNeeded(self.sfHandle)
+ end
+
+ if self.target then
+ ReleaseNamedRendertarget(self.targetName)
+ end
+
+ self.sfHandle = nil
+ self.target = nil
+ self.private.isDrawing = false
+end
+
+---@return Scaleform
+return lib.scaleform
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/streamingRequest/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/streamingRequest/client.lua
new file mode 100644
index 000000000..ae4c82396
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/streamingRequest/client.lua
@@ -0,0 +1,29 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@async
+---@generic T : string | number
+---@param request function
+---@param hasLoaded function
+---@param assetType string
+---@param asset T
+---@param timeout? number
+---@param ... any
+---Used internally.
+function lib.streamingRequest(request, hasLoaded, assetType, asset, timeout, ...)
+ if hasLoaded(asset) then return asset end
+
+ request(asset, ...)
+
+ return lib.waitFor(function()
+ if hasLoaded(asset) then return asset end
+ end, ("failed to load %s '%s' - this may be caused by\n- too many loaded assets\n- oversized, invalid, or corrupted assets"):format(assetType, asset),
+ timeout or 30000)
+end
+
+return lib.streamingRequest
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/string/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/string/shared.lua
new file mode 100644
index 000000000..b4343410f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/string/shared.lua
@@ -0,0 +1,66 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class oxstring : stringlib
+lib.string = string
+
+local string_char = string.char
+local math_random = math.random
+
+local function getLetter() return string_char(math_random(65, 90)) end
+local function getLowerLetter() return string_char(math_random(97, 122)) end
+local function getInt() return math_random(0, 9) end
+local function getAlphanumeric() return math_random(0, 1) == 1 and getLetter() or getInt() end
+
+local formatChar = {
+ ['1'] = getInt,
+ ['A'] = getLetter,
+ ['a'] = getLowerLetter,
+ ['.'] = getAlphanumeric,
+}
+
+---Creates a random string based on a given pattern.
+---`1` will output a random number from 0-9.
+---`A` will output a random letter from A-Z.
+---`a` will output a random letter from a-z.
+---`.` will output a random letter or number.
+---`^` will output the following character literally.
+---Any other character will output said character.
+---@param pattern string
+---@param length? integer Sets the length of the returned string, either padding it or omitting characters.
+---@return string
+function string.random(pattern, length)
+ local len = length or #pattern:gsub('%^', '')
+ local arr = table.create(len, 0)
+ local size = 0
+ local i = 0
+
+ while size < len do
+ i += 1
+ ---@type string | integer
+ local char = pattern:sub(i, i)
+
+ if char == '' then
+ arr[size + 1] = string.rep(' ', len - size)
+ break
+ elseif char == '^' then
+ i += 1
+ char = pattern:sub(i, i)
+ else
+ local fn = formatChar[char]
+ char = fn and fn() or char
+ end
+
+ size += 1
+ arr[size] = char
+ end
+
+ return table.concat(arr)
+end
+
+return lib.string
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/table/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/table/shared.lua
new file mode 100644
index 000000000..021c603e8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/table/shared.lua
@@ -0,0 +1,175 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+-- Add additional functions to the standard table library
+
+---@class oxtable : tablelib
+lib.table = table
+local pairs = pairs
+
+---@param tbl table
+---@param value any
+---@return boolean
+---Checks if tbl contains the given values. Only intended for simple values and unnested tables.
+local function contains(tbl, value)
+ if type(value) ~= 'table' then
+ for _, v in pairs(tbl) do
+ if v == value then
+ return true
+ end
+ end
+
+ return false
+ else
+ local set = {}
+
+ for _, v in pairs(tbl) do
+ set[v] = true
+ end
+
+ for _, v in pairs(value) do
+ if not set[v] then
+ return false
+ end
+ end
+
+ return true
+ end
+end
+
+---@param t1 any
+---@param t2 any
+---@return boolean
+---Compares if two values are equal, iterating over tables and matching both keys and values.
+local function table_matches(t1, t2)
+ local tabletype1 = table.type(t1)
+
+ if not tabletype1 then return t1 == t2 end
+
+ if tabletype1 ~= table.type(t2) or (tabletype1 == 'array' and #t1 ~= #t2) then
+ return false
+ end
+
+ for k, v1 in pairs(t1) do
+ local v2 = t2[k]
+ if v2 == nil or not table_matches(v1, v2) then
+ return false
+ end
+ end
+
+ for k in pairs(t2) do
+ if t1[k] == nil then
+ return false
+ end
+ end
+
+ return true
+end
+
+---@generic T
+---@param tbl T
+---@return T
+---Recursively clones a table to ensure no table references.
+local function table_deepclone(tbl)
+ tbl = table.clone(tbl)
+
+ for k, v in pairs(tbl) do
+ if type(v) == 'table' then
+ tbl[k] = table_deepclone(v)
+ end
+ end
+
+ return tbl
+end
+
+---@param t1 table
+---@param t2 table
+---@param addDuplicateNumbers boolean? add duplicate number keys together if true, replace if false. Defaults to true.
+---@return table
+---Merges two tables together. Defaults to adding duplicate keys together if they are numbers, otherwise they are overriden.
+local function table_merge(t1, t2, addDuplicateNumbers)
+ addDuplicateNumbers = addDuplicateNumbers == nil or addDuplicateNumbers
+ for k, v2 in pairs(t2) do
+ local v1 = t1[k]
+ local type1 = type(v1)
+ local type2 = type(v2)
+
+ if type1 == 'table' and type2 == 'table' then
+ table_merge(v1, v2, addDuplicateNumbers)
+ elseif addDuplicateNumbers and (type1 == 'number' and type2 == 'number') then
+ t1[k] = v1 + v2
+ else
+ t1[k] = v2
+ end
+ end
+
+ return t1
+end
+
+---@param tbl table
+---@return table
+---Shuffles the elements of a table randomly using the Fisher-Yates algorithm.
+local function shuffle(tbl)
+ local len = #tbl
+ for i = len, 2, -1 do
+ local j = math.random(i)
+ tbl[i], tbl[j] = tbl[j], tbl[i]
+ end
+ return tbl
+end
+
+table.contains = contains
+table.matches = table_matches
+table.deepclone = table_deepclone
+table.merge = table_merge
+table.shuffle = shuffle
+
+local frozenNewIndex = function(self) error(('cannot set values on a frozen table (%s)'):format(self), 2) end
+local _rawset = rawset
+
+---@param tbl table
+---@param index any
+---@param value any
+---@return table
+function rawset(tbl, index, value)
+ if table.isfrozen(tbl) then
+ frozenNewIndex(tbl)
+ end
+
+ return _rawset(tbl, index, value)
+end
+
+---Makes a table read-only, preventing further modification. Unfrozen tables stored within `tbl` are still mutable.
+---@generic T : table
+---@param tbl T
+---@return T
+function table.freeze(tbl)
+ local copy = table.clone(tbl)
+ local metatbl = getmetatable(tbl)
+
+ table.wipe(tbl)
+ setmetatable(tbl, {
+ __index = metatbl and setmetatable(copy, metatbl) or copy,
+ __metatable = 'readonly',
+ __newindex = frozenNewIndex,
+ __len = function() return #copy end,
+ ---@diagnostic disable-next-line: redundant-return-value
+ __pairs = function() return next, copy end,
+ })
+
+ return tbl
+end
+
+---Return true if `tbl` is set as read-only.
+---@param tbl table
+---@return boolean
+function table.isfrozen(tbl)
+ return getmetatable(tbl) == 'readonly'
+end
+
+return lib.table
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/timer/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/timer/shared.lua
new file mode 100644
index 000000000..ad7c04604
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/timer/shared.lua
@@ -0,0 +1,151 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class TimerPrivateProps
+---@field initialTime number the initial duration of the timer.
+---@field async? boolean wether the timer should run asynchronously or not
+---@field startTime number the gametimer stamp of when the timer starts. changes when paused and played
+---@field triggerOnEnd boolean set in the forceEnd method using the optional param. wether or not the onEnd function is triggered when force ending the timer early
+---@field currentTimeLeft number current timer length
+---@field paused boolean the pause state of the timer
+
+---@class OxTimer : OxClass
+---@field private private TimerPrivateProps
+---@field start fun(self: self, async?: boolean) starts the timer
+---@field onEnd? fun() cb function triggered when the timer finishes
+---@field forceEnd fun(self: self, triggerOnEnd: boolean) end timer early and optionally trigger the onEnd function still
+---@field isPaused fun(self: self): boolean returns wether the timer is paused or not
+---@field pause fun(self: self) pauses the timer until play method is called
+---@field play fun(self: self) resumes the timer if paused
+---@field getTimeLeft fun(self: self, format?: 'ms' | 's' | 'm' | 'h'): number | table returns the time left on the timer with the specified format rounded to 2 decimal places (miliseconds, seconds, minutes, hours). returns a table of all if not specified.
+local timer = lib.class('OxTimer')
+
+---@private
+---@param time number
+---@param onEnd fun(self: OxTimer)
+---@param async? boolean
+function timer:constructor(time, onEnd, async)
+ assert(type(time) == "number" and time > 0, "Time must be a positive number")
+ assert(onEnd == nil or type(onEnd) == "function", "onEnd must be a function or nil")
+ assert(type(async) == "boolean" or async == nil, "async must be a boolean or nil")
+
+ self.onEnd = onEnd
+ self.private.initialTime = time
+ self.private.currentTimeLeft = time
+ self.private.startTime = 0
+ self.private.paused = false
+ self.private.triggerOnEnd = true
+
+ self:start(async)
+end
+
+---@protected
+function timer:run()
+ while self:isPaused() or self:getTimeLeft('ms') > 0 do
+ Wait(0)
+ end
+
+ if self.private.triggerOnEnd then
+ self:onEnd()
+ end
+
+ self.private.triggerOnEnd = true
+end
+
+function timer:start(async)
+ if self.private.startTime > 0 then error('Cannot start a timer that is already running') end
+
+ self.private.startTime = GetGameTimer()
+
+ if not async then return self:run() end
+
+ Citizen.CreateThreadNow(function()
+ self:run()
+ end)
+end
+
+function timer:forceEnd(triggerOnEnd)
+ if self:getTimeLeft('ms') <= 0 then return end
+
+ self.private.paused = false
+ self.private.currentTimeLeft = 0
+ self.private.triggerOnEnd = triggerOnEnd
+
+ Wait(0)
+end
+
+function timer:pause()
+ if self.private.paused then return end
+
+ self.private.currentTimeLeft = self:getTimeLeft('ms') --[[@as number]]
+ self.private.paused = true
+end
+
+function timer:play()
+ if not self.private.paused then return end
+ self.private.startTime = GetGameTimer()
+ self.private.paused = false
+end
+
+function timer:isPaused()
+ return self.private.paused
+end
+
+function timer:restart(async)
+ self:forceEnd(false)
+ Wait(0)
+ self.private.currentTimeLeft = self.private.initialTime
+ self.private.startTime = 0
+ self:start(async)
+end
+
+function timer:getTimeLeft(format)
+ local ms = self.private.currentTimeLeft - (GetGameTimer() - self.private.startTime)
+
+ local roundedfloat = function(value)
+ return tonumber(string.format('%.2f', value))
+ end
+
+ if format == 'ms' then
+ return roundedfloat(ms)
+ end
+
+ local s = ms / 1000
+
+ if format == 's' then
+ return roundedfloat(s)
+ end
+
+ local m = s / 60
+
+ if format == 'm' then
+ return roundedfloat(m)
+ end
+
+ local h = m / 60
+
+ if format == 'h' then
+ return roundedfloat(h)
+ end
+
+ return {
+ ms = roundedfloat(ms),
+ s = roundedfloat(s),
+ m = roundedfloat(m),
+ h = roundedfloat(h)
+ }
+end
+
+---@param time number
+---@param onEnd fun(self: OxTimer)
+---@param async? boolean
+function lib.timer(time, onEnd, async)
+ return timer:new(time, onEnd, async)
+end
+
+return lib.timer
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/triggerClientEvent/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/triggerClientEvent/server.lua
new file mode 100644
index 000000000..fc5116f22
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/triggerClientEvent/server.lua
@@ -0,0 +1,31 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Triggers an event for the given playerIds, sending additional parameters as arguments.\
+---Implements functionality from [this pending pull request](https://github.com/citizenfx/fivem/pull/1210) and may be deprecated.
+---
+---Provides non-neglibible performance gains due to msgpacking all arguments _once_, instead of per-target.
+---@param eventName string
+---@param targetIds number | ArrayLike
+---@param ... any
+function lib.triggerClientEvent(eventName, targetIds, ...)
+ local payload = msgpack.pack_args(...)
+ local payloadLen = #payload
+
+ if lib.array.isArray(targetIds) then
+ for i = 1, #targetIds do
+ TriggerClientEventInternal(eventName, targetIds[i] --[[@as string]], payload, payloadLen)
+ end
+
+ return
+ end
+
+ TriggerClientEventInternal(eventName, targetIds --[[@as string]], payload, payloadLen)
+end
+
+return lib.triggerClientEvent
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/waitFor/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/waitFor/shared.lua
new file mode 100644
index 000000000..57366f897
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/waitFor/shared.lua
@@ -0,0 +1,42 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---Yields the current thread until a non-nil value is returned by the function.
+---@generic T
+---@param cb fun(): T?
+---@param errMessage string?
+---@param timeout? number | false Error out after `~x` ms. Defaults to 1000, unless set to `false`.
+---@return T
+---@async
+function lib.waitFor(cb, errMessage, timeout)
+ local value = cb()
+
+ if value ~= nil then return value end
+
+ if timeout or timeout == nil then
+ if type(timeout) ~= 'number' then timeout = 1000 end
+ end
+
+ local start = timeout and GetGameTimer()
+
+ while value == nil do
+ Wait(0)
+
+ local elapsed = timeout and GetGameTimer() - start
+
+ if elapsed and elapsed > timeout then
+ return error(('%s (waited %.1fms)'):format(errMessage or 'failed to resolve callback', elapsed), 2)
+ end
+
+ value = cb()
+ end
+
+ return value
+end
+
+return lib.waitFor
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/zones/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/zones/shared.lua
new file mode 100644
index 000000000..46916417b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/imports/zones/shared.lua
@@ -0,0 +1,489 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local glm = require 'glm'
+
+---@class ZoneProperties
+---@field debug? boolean
+---@field debugColour? vector4
+---@field onEnter fun(self: CZone)?
+---@field onExit fun(self: CZone)?
+---@field inside fun(self: CZone)?
+---@field [string] any
+
+---@class CZone : PolyZone, BoxZone, SphereZone
+---@field id number
+---@field __type 'poly' | 'sphere' | 'box'
+---@field remove fun(self: self)
+---@field setDebug fun(self: CZone, enable?: boolean, colour?: vector)
+---@field contains fun(self: CZone, coords?: vector3, updateDistance?: boolean): boolean
+
+---@type table
+local Zones = {}
+_ENV.Zones = Zones
+
+local function nextFreePoint(points, b, len)
+ for i = 1, len do
+ local n = (i + b) % len
+
+ n = n ~= 0 and n or len
+
+ if points[n] then
+ return n
+ end
+ end
+end
+
+local function unableToSplit(polygon)
+ print('The following polygon is malformed and has failed to be split into triangles for debug')
+
+ for k, v in pairs(polygon) do
+ print(k, v)
+ end
+end
+
+local function getTriangles(polygon)
+ local triangles = {}
+
+ if polygon:isConvex() then
+ for i = 2, #polygon - 1 do
+ triangles[#triangles + 1] = mat(polygon[1], polygon[i], polygon[i + 1])
+ end
+
+ return triangles
+ end
+
+ if not polygon:isSimple() then
+ unableToSplit(polygon)
+
+ return triangles
+ end
+
+ local points = {}
+ local polygonN = #polygon
+
+ for i = 1, polygonN do
+ points[i] = polygon[i]
+ end
+
+ local a, b, c = 1, 2, 3
+ local zValue = polygon[1].z
+ local count = 0
+
+ while polygonN - #triangles > 2 do
+ local a2d = polygon[a].xy
+ local c2d = polygon[c].xy
+
+ if polygon:containsSegment(vec3(glm.segment2d.getPoint(a2d, c2d, 0.01), zValue), vec3(glm.segment2d.getPoint(a2d, c2d, 0.99), zValue)) then
+ triangles[#triangles + 1] = mat(polygon[a], polygon[b], polygon[c])
+ points[b] = false
+
+ b = c
+ c = nextFreePoint(points, b, polygonN)
+ else
+ a = b
+ b = c
+ c = nextFreePoint(points, b, polygonN)
+ end
+
+ count += 1
+
+ if count > polygonN and #triangles == 0 then
+ unableToSplit(polygon)
+
+ return triangles
+ end
+
+ Wait(0)
+ end
+
+ return triangles
+end
+
+local insideZones = lib.context == 'client' and {} --[[@as table]]
+local exitingZones = lib.context == 'client' and lib.array:new() --[[@as Array]]
+local enteringZones = lib.context == 'client' and lib.array:new() --[[@as Array]]
+local nearbyZones = lib.array:new() --[[@as Array]]
+local glm_polygon_contains = glm.polygon.contains
+local tick
+
+---@param zone CZone
+local function removeZone(zone)
+ Zones[zone.id] = nil
+
+ lib.grid.removeEntry(zone)
+
+ if lib.context == 'server' then return end
+
+ insideZones[zone.id] = nil
+
+ table.remove(exitingZones, exitingZones:indexOf(zone))
+ table.remove(enteringZones, enteringZones:indexOf(zone))
+end
+
+CreateThread(function()
+ if lib.context == 'server' then return end
+
+ while true do
+ local coords = GetEntityCoords(cache.ped)
+ local zones = lib.grid.getNearbyEntries(coords, function(entry) return entry.remove == removeZone end) --[[@as Array]]
+ local cellX, cellY = lib.grid.getCellPosition(coords)
+ cache.coords = coords
+
+ if cellX ~= cache.lastCellX or cellY ~= cache.lastCellY then
+ for i = 1, #nearbyZones do
+ local zone = nearbyZones[i]
+
+ if zone.insideZone then
+ local contains = zone:contains(coords, true)
+
+ if not contains then
+ zone.insideZone = false
+ insideZones[zone.id] = nil
+
+ if zone.onExit then
+ exitingZones:push(zone)
+ end
+ end
+ end
+ end
+
+ cache.lastCellX = cellX
+ cache.lastCellY = cellY
+ end
+
+ nearbyZones = zones
+
+ for i = 1, #zones do
+ local zone = zones[i]
+ local contains = zone:contains(coords, true)
+
+ if contains then
+ if not zone.insideZone then
+ zone.insideZone = true
+
+ if zone.onEnter then
+ enteringZones:push(zone)
+ end
+
+ if zone.inside or zone.debug then
+ insideZones[zone.id] = zone
+ end
+ end
+ else
+ if zone.insideZone then
+ zone.insideZone = false
+ insideZones[zone.id] = nil
+
+ if zone.onExit then
+ exitingZones:push(zone)
+ end
+ end
+
+ if zone.debug then
+ insideZones[zone.id] = zone
+ end
+ end
+ end
+
+ local exitingSize = #exitingZones
+ local enteringSize = #enteringZones
+
+ if exitingSize > 0 then
+ table.sort(exitingZones, function(a, b)
+ return a.distance < b.distance
+ end)
+
+ for i = exitingSize, 1, -1 do
+ exitingZones[i]:onExit()
+ end
+
+ table.wipe(exitingZones)
+ end
+
+ if enteringSize > 0 then
+ table.sort(enteringZones, function(a, b)
+ return a.distance < b.distance
+ end)
+
+ for i = 1, enteringSize do
+ enteringZones[i]:onEnter()
+ end
+
+ table.wipe(enteringZones)
+ end
+
+ if not tick then
+ if next(insideZones) then
+ tick = SetInterval(function()
+ for _, zone in pairs(insideZones) do
+ if zone.debug then
+ zone:debug()
+
+ if zone.inside and zone.insideZone then
+ zone:inside()
+ end
+ else
+ zone:inside()
+ end
+ end
+ end)
+ end
+ elseif not next(insideZones) then
+ tick = ClearInterval(tick)
+ end
+
+ Wait(300)
+ end
+end)
+
+local DrawLine = DrawLine
+local DrawPoly = DrawPoly
+
+local function debugPoly(self)
+ for i = 1, #self.triangles do
+ local triangle = self.triangles[i]
+ DrawPoly(triangle[1].x, triangle[1].y, triangle[1].z, triangle[2].x, triangle[2].y, triangle[2].z, triangle[3].x, triangle[3].y, triangle[3].z,
+ self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ DrawPoly(triangle[2].x, triangle[2].y, triangle[2].z, triangle[1].x, triangle[1].y, triangle[1].z, triangle[3].x, triangle[3].y, triangle[3].z,
+ self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ end
+ for i = 1, #self.polygon do
+ local thickness = vec(0, 0, self.thickness / 2)
+ local a = self.polygon[i] + thickness
+ local b = self.polygon[i] - thickness
+ local c = (self.polygon[i + 1] or self.polygon[1]) + thickness
+ local d = (self.polygon[i + 1] or self.polygon[1]) - thickness
+ DrawLine(a.x, a.y, a.z, b.x, b.y, b.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, 225)
+ DrawLine(a.x, a.y, a.z, c.x, c.y, c.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, 225)
+ DrawLine(b.x, b.y, b.z, d.x, d.y, d.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, 225)
+ DrawPoly(a.x, a.y, a.z, b.x, b.y, b.z, c.x, c.y, c.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ DrawPoly(c.x, c.y, c.z, b.x, b.y, b.z, a.x, a.y, a.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ DrawPoly(b.x, b.y, b.z, c.x, c.y, c.z, d.x, d.y, d.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ DrawPoly(d.x, d.y, d.z, c.x, c.y, c.z, b.x, b.y, b.z, self.debugColour.r, self.debugColour.g, self.debugColour.b, self.debugColour.a)
+ end
+end
+
+local function debugSphere(self)
+ DrawMarker(28, self.coords.x, self.coords.y, self.coords.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, self.radius, self.radius, self.radius, self.debugColour.r,
+ ---@diagnostic disable-next-line: param-type-mismatch
+ self.debugColour.g, self.debugColour.b, self.debugColour.a, false, false, 0, false, false, false, false)
+end
+
+local function contains(self, coords, updateDistance)
+ if updateDistance then self.distance = #(self.coords - coords) end
+
+ return glm_polygon_contains(self.polygon, coords, self.thickness / 4)
+end
+
+local function insideSphere(self, coords, updateDistance)
+ local distance = #(self.coords - coords)
+
+ if updateDistance then self.distance = distance end
+
+ return distance < self.radius
+end
+
+local function convertToVector(coords)
+ local _type = type(coords)
+
+ if _type ~= 'vector3' then
+ if _type == 'table' or _type == 'vector4' then
+ return vec3(coords[1] or coords.x, coords[2] or coords.y, coords[3] or coords.z)
+ end
+
+ error(("expected type 'vector3' or 'table' (received %s)"):format(_type))
+ end
+
+ return coords
+end
+
+local function setDebug(self, bool, colour)
+ if not bool and insideZones[self.id] then
+ insideZones[self.id] = nil
+ end
+
+ self.debugColour = bool and
+ {
+ r = glm.tointeger(colour?.r or self.debugColour?.r or 255),
+ g = glm.tointeger(colour?.g or self.debugColour?.g or 42),
+ b = glm.tointeger(colour?.b or
+ self.debugColour?.b or 24),
+ a = glm.tointeger(colour?.a or self.debugColour?.a or 100)
+ } or nil
+
+ if not bool and self.debug then
+ self.triangles = nil
+ self.debug = nil
+ return
+ end
+
+ if bool and self.debug and self.debug ~= true then return end
+
+ self.triangles = self.__type == 'poly' and getTriangles(self.polygon) or
+ self.__type == 'box' and { mat(self.polygon[1], self.polygon[2], self.polygon[3]), mat(self.polygon[1], self.polygon[3], self.polygon[4]) } or nil
+ self.debug = self.__type == 'sphere' and debugSphere or debugPoly or nil
+end
+
+---@param data ZoneProperties
+---@return CZone
+local function setZone(data)
+ ---@cast data CZone
+ data.remove = removeZone
+ data.contains = data.contains or contains
+
+ if lib.context == 'client' then
+ data.setDebug = setDebug
+
+ if data.debug then
+ data.debug = nil
+
+ data:setDebug(true, data.debugColour)
+ end
+ else
+ data.debug = nil
+ end
+
+ Zones[data.id] = data
+ lib.grid.addEntry(data)
+
+ return data
+end
+
+lib.zones = {}
+
+---@class PolyZone : ZoneProperties
+---@field points vector3[]
+---@field thickness? number
+
+---@param data PolyZone
+---@return CZone
+function lib.zones.poly(data)
+ data.id = #Zones + 1
+ data.thickness = data.thickness or 4
+
+ local pointN = #data.points
+ local points = table.create(pointN, 0)
+
+ for i = 1, pointN do
+ points[i] = convertToVector(data.points[i])
+ end
+
+ data.polygon = glm.polygon.new(points)
+
+ if not data.polygon:isPlanar() then
+ local zCoords = {}
+
+ for i = 1, pointN do
+ local zCoord = points[i].z
+
+ if zCoords[zCoord] then
+ zCoords[zCoord] += 1
+ else
+ zCoords[zCoord] = 1
+ end
+ end
+
+ local coordsArray = {}
+
+ for coord, count in pairs(zCoords) do
+ coordsArray[#coordsArray + 1] = {
+ coord = coord,
+ count = count
+ }
+ end
+
+ table.sort(coordsArray, function(a, b)
+ return a.count > b.count
+ end)
+
+ local zCoord = coordsArray[1].coord
+ local averageTo = 1
+
+ for i = 1, #coordsArray do
+ if coordsArray[i].count < coordsArray[1].count then
+ averageTo = i - 1
+ break
+ end
+ end
+
+ if averageTo > 1 then
+ for i = 2, averageTo do
+ zCoord += coordsArray[i].coord
+ end
+
+ zCoord /= averageTo
+ end
+
+ for i = 1, pointN do
+ ---@diagnostic disable-next-line: param-type-mismatch
+ points[i] = vec3(data.points[i].xy, zCoord)
+ end
+
+ data.polygon = glm.polygon.new(points)
+ end
+
+ data.coords = data.polygon:centroid()
+ data.__type = 'poly'
+ data.radius = lib.array.reduce(data.polygon, function(acc, point)
+ local distance = #(point - data.coords)
+ return distance > acc and distance or acc
+ end, 0)
+
+ return setZone(data)
+end
+
+---@class BoxZone : ZoneProperties
+---@field coords vector3
+---@field size? vector3
+---@field rotation? number | vector3 | vector4 | matrix
+
+---@param data BoxZone
+---@return CZone
+function lib.zones.box(data)
+ data.id = #Zones + 1
+ data.coords = convertToVector(data.coords)
+ data.size = data.size and convertToVector(data.size) / 2 or vec3(2)
+ data.thickness = data.size.z * 2
+ data.rotation = quat(data.rotation or 0, vec3(0, 0, 1))
+ data.__type = 'box'
+ data.width = data.size.x * 2
+ data.length = data.size.y * 2
+ data.polygon = (data.rotation * glm.polygon.new({
+ vec3(data.size.x, data.size.y, 0),
+ vec3(-data.size.x, data.size.y, 0),
+ vec3(-data.size.x, -data.size.y, 0),
+ vec3(data.size.x, -data.size.y, 0),
+ }) + data.coords)
+
+ return setZone(data)
+end
+
+---@class SphereZone : ZoneProperties
+---@field coords vector3
+---@field radius? number
+
+---@param data SphereZone
+---@return CZone
+function lib.zones.sphere(data)
+ data.id = #Zones + 1
+ data.coords = convertToVector(data.coords)
+ data.radius = (data.radius or 2) + 0.0
+ data.__type = 'sphere'
+ data.contains = insideSphere
+
+ return setZone(data)
+end
+
+function lib.zones.getAllZones() return Zones end
+
+function lib.zones.getCurrentZones() return insideZones end
+
+function lib.zones.getNearbyZones() return nearbyZones end
+
+return lib.zones
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/init.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/init.lua
new file mode 100644
index 000000000..d4a9ac393
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/init.lua
@@ -0,0 +1,297 @@
+---@meta
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+if not _VERSION:find('5.4') then
+ error('Lua 5.4 must be enabled in the resource manifest!', 2)
+end
+
+local resourceName = GetCurrentResourceName()
+local ox_lib = 'ox_lib'
+
+-- Some people have decided to load this file as part of ox_lib's fxmanifest?
+if resourceName == ox_lib then return end
+
+if lib and lib.name == ox_lib then
+ error(("Cannot load ox_lib more than once.\n\tRemove any duplicate entries from '@%s/fxmanifest.lua'"):format(resourceName))
+end
+
+local export = exports[ox_lib]
+
+if GetResourceState(ox_lib) ~= 'started' then
+ error('^1ox_lib must be started before this resource.^0', 0)
+end
+
+local status = export.hasLoaded()
+
+if status ~= true then error(status, 2) end
+
+-- Ignore invalid types during msgpack.pack (e.g. userdata)
+msgpack.setoption('ignore_invalid', true)
+
+-----------------------------------------------------------------------------------------------
+-- Module
+-----------------------------------------------------------------------------------------------
+
+local LoadResourceFile = LoadResourceFile
+local context = IsDuplicityVersion() and 'server' or 'client'
+
+function noop() end
+
+local function loadModule(self, module)
+ local dir = ('imports/%s'):format(module)
+ local chunk = LoadResourceFile(ox_lib, ('%s/%s.lua'):format(dir, context))
+ local shared = LoadResourceFile(ox_lib, ('%s/shared.lua'):format(dir))
+
+ if shared then
+ chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared
+ end
+
+ if chunk then
+ local fn, err = load(chunk, ('@@ox_lib/imports/%s/%s.lua'):format(module, context))
+
+ if not fn or err then
+ if shared then
+ lib.print.warn(("An error occurred when importing '@ox_lib/imports/%s'.\nThis is likely caused by improperly updating ox_lib.\n%s'")
+ :format(module, err))
+ fn, err = load(shared, ('@@ox_lib/imports/%s/shared.lua'):format(module))
+ end
+
+ if not fn or err then
+ return error(('\n^1Error importing module (%s): %s^0'):format(dir, err), 3)
+ end
+ end
+
+ local result = fn()
+ self[module] = result or noop
+ return self[module]
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- API
+-----------------------------------------------------------------------------------------------
+
+local function call(self, index, ...)
+ local module = rawget(self, index)
+
+ if not module then
+ self[index] = noop
+ module = loadModule(self, index)
+
+ if not module then
+ local function method(...)
+ return export[index](nil, ...)
+ end
+
+ if not ... then
+ self[index] = method
+ end
+
+ return method
+ end
+ end
+
+ return module
+end
+
+local lib = setmetatable({
+ name = ox_lib,
+ context = context,
+}, {
+ __index = call,
+ __call = call,
+})
+
+local intervals = {}
+--- Dream of a world where this PR gets accepted.
+---@param callback function | number
+---@param interval? number
+---@param ... any
+function SetInterval(callback, interval, ...)
+ interval = interval or 0
+
+ if type(interval) ~= 'number' then
+ return error(('Interval must be a number. Received %s'):format(json.encode(interval --[[@as unknown]])))
+ end
+
+ local cbType = type(callback)
+
+ if cbType == 'number' and intervals[callback] then
+ intervals[callback] = interval or 0
+ return
+ end
+
+ if cbType ~= 'function' then
+ return error(('Callback must be a function. Received %s'):format(cbType))
+ end
+
+ local args, id = { ... }
+
+ Citizen.CreateThreadNow(function(ref)
+ id = ref
+ intervals[id] = interval or 0
+ repeat
+ interval = intervals[id]
+ Wait(interval)
+ callback(table.unpack(args))
+ until interval < 0
+ intervals[id] = nil
+ end)
+
+ return id
+end
+
+---@param id number
+function ClearInterval(id)
+ if type(id) ~= 'number' then
+ return error(('Interval id must be a number. Received %s'):format(json.encode(id --[[@as unknown]])))
+ end
+
+ if not intervals[id] then
+ return error(('No interval exists with id %s'):format(id))
+ end
+
+ intervals[id] = -1
+end
+
+--[[
+ lua language server doesn't support generics when using @overload
+ see https://github.com/LuaLS/lua-language-server/issues/723
+ this function stub allows the following to work
+
+ local key = cache('key', function() return 'abc' end) -- fff: 'abc'
+ local game = cache.game -- game: string
+]]
+
+---@generic T
+---@param key string
+---@param func fun(...: any): T
+---@param timeout? number
+---@return T
+---Caches the result of a function, optionally clearing it after timeout ms.
+function cache(key, func, timeout) end
+
+local cacheEvents = {}
+
+local cache = setmetatable({ game = GetGameName(), resource = resourceName }, {
+ __index = function(self, key)
+ cacheEvents[key] = {}
+
+ AddEventHandler(('ox_lib:cache:%s'):format(key), function(value)
+ local oldValue = self[key]
+ local events = cacheEvents[key]
+
+ for i = 1, #events do
+ Citizen.CreateThreadNow(function()
+ events[i](value, oldValue)
+ end)
+ end
+
+ self[key] = value
+ end)
+
+ return rawset(self, key, export.cache(nil, key) or false)[key]
+ end,
+
+ __call = function(self, key, func, timeout)
+ local value = rawget(self, key)
+
+ if value == nil then
+ value = func()
+
+ rawset(self, key, value)
+
+ if timeout then SetTimeout(timeout, function() self[key] = nil end) end
+ end
+
+ return value
+ end,
+})
+
+function lib.onCache(key, cb)
+ if not cacheEvents[key] then
+ getmetatable(cache).__index(cache, key)
+ end
+
+ table.insert(cacheEvents[key], cb)
+end
+
+_ENV.lib = lib
+_ENV.cache = cache
+_ENV.require = lib.require
+
+local notifyEvent = ('__ox_notify_%s'):format(cache.resource)
+
+if context == 'client' then
+ RegisterNetEvent(notifyEvent, function(data)
+ if locale then
+ if data.title then
+ data.title = locale(data.title) or data.title
+ end
+
+ if data.description then
+ data.description = locale(data.description) or data.description
+ end
+ end
+
+ return export:notify(data)
+ end)
+
+ cache.playerId = PlayerId()
+ cache.serverId = GetPlayerServerId(cache.playerId)
+else
+ ---`server`\
+ ---Trigger a notification on the target playerId from the server.\
+ ---If locales are loaded, the title and description will be formatted automatically.\
+ ---Note: No support for locale placeholders when using this function.
+ ---@param playerId number
+ ---@param data NotifyProps
+ ---@deprecated
+ ---@diagnostic disable-next-line: duplicate-set-field
+ function lib.notify(playerId, data)
+ TriggerClientEvent(notifyEvent, playerId, data)
+ end
+
+ local poolNatives = {
+ CPed = GetAllPeds,
+ CObject = GetAllObjects,
+ CVehicle = GetAllVehicles,
+ }
+
+ ---@param poolName 'CPed' | 'CObject' | 'CVehicle'
+ ---@return number[]
+ ---Server-side parity for the `GetGamePool` client native.
+ function GetGamePool(poolName)
+ local fn = poolNatives[poolName]
+ return fn and fn() --[[@as number[] ]]
+ end
+
+ ---@return number[]
+ ---Server-side parity for the `GetPlayers` client native.
+ function GetActivePlayers()
+ local playerNum = GetNumPlayerIndices()
+ local players = table.create(playerNum, 0)
+
+ for i = 1, playerNum do
+ players[i] = tonumber(GetPlayerFromIndex(i - 1))
+ end
+
+ return players
+ end
+end
+
+for i = 1, GetNumResourceMetadata(cache.resource, 'ox_lib') do
+ local name = GetResourceMetadata(cache.resource, 'ox_lib', i - 1)
+
+ if not rawget(lib, name) then
+ local module = loadModule(lib, name)
+
+ if type(module) == 'function' then pcall(module) end
+ end
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/al.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/al.json
new file mode 100644
index 000000000..09085b7b0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/al.json
@@ -0,0 +1,32 @@
+{
+ "language": "Shqip",
+ "ui": {
+ "cancel": "Cancel",
+ "close": "Mbylle",
+ "confirm": "Konfirmo",
+ "more": "More...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ar.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ar.json
new file mode 100644
index 000000000..07687c7c1
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ar.json
@@ -0,0 +1,32 @@
+{
+ "language": "العربية",
+ "ui": {
+ "cancel": "إلغاء",
+ "close": "إغلاق",
+ "confirm": "تأكيد",
+ "more": "المزيد ...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "إعلان من قبل %s",
+ "txadmin_dm": "رسالة من %s",
+ "txadmin_warn": "تم تحذيرك من قبل %s",
+ "txadmin_warn_content": "%s \nأيدي: %s",
+ "txadmin_scheduledrestart": "تحديد ريستارت للسرفر"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/cs.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/cs.json
new file mode 100644
index 000000000..f647d599f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/cs.json
@@ -0,0 +1,32 @@
+{
+ "language": "Čeština",
+ "ui": {
+ "cancel": "Zrušit",
+ "close": "Zavřít",
+ "confirm": "Potvrdit",
+ "more": "Více...",
+ "settings": {
+ "locale": "Změnit jazyk",
+ "locale_description": "Aktuální jazyk: ${language} (%s)",
+ "notification_audio": "Zvuk notifikací",
+ "notification_position": "Pozice notifikací"
+ },
+ "position": {
+ "bottom": "Dole",
+ "bottom-left": "Vlevo dole",
+ "bottom-right": "Vpravo dole",
+ "center-left": "Vlevo uprostřed",
+ "center-right": "Vpravo uprostřed",
+ "top": "Nahoře",
+ "top-left": "Vlevo nahoře",
+ "top-right": "Vpravo nahoře"
+ }
+ },
+ "open_radial_menu": "Otevřít kruhové menu",
+ "cancel_progress": "Zrušit aktuální progress bar",
+ "txadmin_announcement": "Serverové oznámení od %s",
+ "txadmin_dm": "Soukromá zpráva od %s",
+ "txadmin_warn": "Byl jsi varován od %s",
+ "txadmin_warn_content": "%s \nID akce: %s",
+ "txadmin_scheduledrestart": "Plánovaný restart"
+}
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/da.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/da.json
new file mode 100644
index 000000000..c13fbaff7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/da.json
@@ -0,0 +1,33 @@
+{
+ "language": "Dansk",
+ "settings": "Indstillinger",
+ "ui": {
+ "cancel": "Annuller",
+ "close": "Luk",
+ "confirm": "Bekræft",
+ "more": "Mere...",
+ "settings": {
+ "locale": "Skift Sprog",
+ "locale_description": "Nuværende sprog: ${language} (%s)",
+ "notification_audio": "Notifikations lyd",
+ "notification_position": "Notifikations position"
+ },
+ "position": {
+ "bottom": "Nederst",
+ "bottom-left": "Nederst til venstre",
+ "bottom-right": "Nederst til højre",
+ "center-left": "Center til venstre",
+ "center-right": "Center til højre",
+ "top": "Øverst",
+ "top-left": "Øverst til venstre",
+ "top-right": "Øverst til højre"
+ }
+ },
+ "open_radial_menu": "Åbn radial menu",
+ "cancel_progress": "Annuller den aktuelle progress bar",
+ "txadmin_announcement": "Servermeddelelse af %s",
+ "txadmin_dm": "Direkte besked fra %s",
+ "txadmin_warn": "Du er blevet advaret af %s",
+ "txadmin_warn_content": "%s \nHandlings-id: %s",
+ "txadmin_scheduledrestart": "Planlagt genstart"
+}
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/de.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/de.json
new file mode 100644
index 000000000..9ffe206d6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/de.json
@@ -0,0 +1,33 @@
+{
+ "language": "Deutsch",
+ "settings": "Einstellungen",
+ "ui": {
+ "cancel": "Abbrechen",
+ "close": "Schließen",
+ "confirm": "Bestätigen",
+ "more": "Mehr...",
+ "settings": {
+ "locale": "Sprache ändern",
+ "locale_description": "Aktuelle Sprache: ${language} (%s)",
+ "notification_audio": "Benachrichtigungs-Sound",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Unten",
+ "bottom-left": "Unten-Links",
+ "bottom-right": "Unten-Rechts",
+ "center-left": "Mittig-Links",
+ "center-right": "Mittig-Rechts",
+ "top": "Oben",
+ "top-left": "Oben-Links",
+ "top-right": "Oben-Rechts"
+ }
+ },
+ "open_radial_menu": "Radial Menu öffnen",
+ "cancel_progress": "Aktuelle Tätigkeit abbrechen",
+ "txadmin_announcement": "Serverankündigung von %s",
+ "txadmin_dm": "Direktnachricht von %s",
+ "txadmin_warn": "Du wurdest von %s verwarnt",
+ "txadmin_warn_content": "%s \nVerwarn ID: %s",
+ "txadmin_scheduledrestart": "Geplanter Neustart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/el.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/el.json
new file mode 100644
index 000000000..3d2bfd48c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/el.json
@@ -0,0 +1,34 @@
+{
+ "language": "Ελληνικά",
+ "settings": "Ρυθμίσεις",
+ "ui": {
+ "cancel": "Ακύρωση",
+ "close": "Κλείσιμο",
+ "confirm": "Επιβεβαίωση",
+ "more": "Περισσότερα...",
+ "settings": {
+ "locale": "Αλλαγή γλώσσας",
+ "locale_description": "Τρέχουσα γλώσσα: ${language} (%s)",
+ "notification_audio": "Ήχος ειδοποίησης",
+ "notification_position": "Θέση ειδοποίησης"
+ },
+ "position": {
+ "bottom": "Κάτω",
+ "bottom-left": "Κάτω αριστερά",
+ "bottom-right": "Κάτω δεξιά",
+ "center-left": "Κέντρο αριστερά",
+ "center-right": "Κέντρο δεξιά",
+ "top": "Πάνω",
+ "top-left": "Πάνω αριστερά",
+ "top-right": "Πάνω δεξιά"
+ }
+ },
+ "open_radial_menu": "Άνοιγμα κυκλικού μενού",
+ "cancel_progress": "Ακύρωση τρέχουσας γραμμής προόδου",
+ "txadmin_announcement": "Ανακοίνωση διακομιστή από τον %s",
+ "txadmin_dm": "Άμεσο μήνυμα από τον %s",
+ "txadmin_warn": "Έχετε προειδοποιηθεί από τον %s",
+ "txadmin_warn_content": "%s \nID Ενέργειας: %s",
+ "txadmin_scheduledrestart": "Προγραμματισμένη επανεκκίνηση"
+ }
+
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/en.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/en.json
new file mode 100644
index 000000000..35f52734f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/en.json
@@ -0,0 +1,33 @@
+{
+ "language": "English",
+ "settings": "Settings",
+ "ui": {
+ "cancel": "Cancel",
+ "close": "Close",
+ "confirm": "Confirm",
+ "more": "More...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/es.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/es.json
new file mode 100644
index 000000000..2dc6e876d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/es.json
@@ -0,0 +1,33 @@
+{
+ "language": "Español",
+ "settings": "Ajustes",
+ "ui": {
+ "cancel": "Cancelar",
+ "close": "Cerrar",
+ "confirm": "Confirmar",
+ "more": "Más...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Anuncio de servidor de %s",
+ "txadmin_dm": "Mensaje directo de %s",
+ "txadmin_warn": "Has sido advertido por %s",
+ "txadmin_warn_content": "%s \nID de acción: %s",
+ "txadmin_scheduledrestart": "Reinicio programado"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/et.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/et.json
new file mode 100644
index 000000000..1d57d8d8e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/et.json
@@ -0,0 +1,32 @@
+{
+ "language": "Eesti",
+ "ui": {
+ "cancel": "Tühista",
+ "close": "Sulge",
+ "confirm": "Kinnita",
+ "more": "Rohkem...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Ava rullikmenüü",
+ "cancel_progress": "Katkesta praegune edenemisriba",
+ "txadmin_announcement": "Serveri teadaanne kasutajalt %s",
+ "txadmin_dm": "Sulle saadeti sõnum kasutajalt %s",
+ "txadmin_warn": "Sind hoiatati kasutaja %s poolt",
+ "txadmin_warn_content": "%s \nTegevuse ID: %s",
+ "txadmin_scheduledrestart": "Planeeritud taaskäivitus"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fi.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fi.json
new file mode 100644
index 000000000..0a7830ef8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fi.json
@@ -0,0 +1,33 @@
+{
+ "language": "Suomi",
+ "settings": "Asetukset",
+ "ui": {
+ "cancel": "Peruuta",
+ "close": "Sulje",
+ "confirm": "Vahvista",
+ "more": "Lisää...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Ilmoitus palvelimen ylläpitäjältä %s",
+ "txadmin_dm": "Sait viestin henkilöltä %s",
+ "txadmin_warn": "Sinua on varoitettu henkilön %s toimesta",
+ "txadmin_warn_content": "%s \nTunniste: %s",
+ "txadmin_scheduledrestart": "Ajoitettu uudelleenkäynnistyminen"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fr.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fr.json
new file mode 100644
index 000000000..c501a7770
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/fr.json
@@ -0,0 +1,33 @@
+{
+ "language": "Français",
+ "settings": "Paramètres",
+ "ui": {
+ "cancel": "Annuler",
+ "close": "Fermer",
+ "confirm": "Confirmer",
+ "more": "Plus...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/he.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/he.json
new file mode 100644
index 000000000..c0d232c9a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/he.json
@@ -0,0 +1,32 @@
+{
+ "language": "עברית",
+ "ui": {
+ "cancel": "ביטול",
+ "close": "סגירה",
+ "confirm": "אישור",
+ "more": "...עוד",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hr.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hr.json
new file mode 100644
index 000000000..cf6f3bd57
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hr.json
@@ -0,0 +1,32 @@
+{
+ "language": "Hrvatski",
+ "ui": {
+ "cancel": "Odustani",
+ "close": "Zatvori",
+ "confirm": "Potvrdi",
+ "more": "Više...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hu.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hu.json
new file mode 100644
index 000000000..2a9d5b2e2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/hu.json
@@ -0,0 +1,32 @@
+{
+ "language": "Magyar",
+ "ui": {
+ "cancel": "Mégse",
+ "close": "Bezárás",
+ "confirm": "Megerősít",
+ "more": "Tovább...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Szerver bejelentés által %s",
+ "txadmin_dm": "Közvetlen üzenet a %s",
+ "txadmin_warn": "Figyelmeztetett %s",
+ "txadmin_warn_content": "%s \nMűvelet ID: %s",
+ "txadmin_scheduledrestart": "Ütemezett újraindítás"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/id.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/id.json
new file mode 100644
index 000000000..9fd6add79
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/id.json
@@ -0,0 +1,32 @@
+{
+ "language": "Indonesian",
+ "ui": {
+ "cancel": "Batal",
+ "close": "Tutup",
+ "confirm": "Konfirmasi",
+ "more": "More...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/it.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/it.json
new file mode 100644
index 000000000..d0063feb6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/it.json
@@ -0,0 +1,33 @@
+{
+ "language": "Italiano",
+ "settings": "Impostazioni",
+ "ui": {
+ "cancel": "Annulla",
+ "close": "Chiudi",
+ "confirm": "Conferma",
+ "more": "Altro...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Annuncio server da %s",
+ "txadmin_dm": "Messaggio diretto da %s",
+ "txadmin_warn": "Sei stato richiamato da %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Riavvio Programmato"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/lt.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/lt.json
new file mode 100644
index 000000000..61400afb0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/lt.json
@@ -0,0 +1,33 @@
+{
+ "language": "Lietuvių",
+ "settings": "Nustatymai",
+ "ui": {
+ "cancel": "Atšaukti",
+ "close": "Uždaryti",
+ "confirm": "Patvirtinti",
+ "more": "Daugiau...",
+ "settings": {
+ "locale": "Pakeisti kalbą",
+ "locale_description": "Dabartinė: ${language} (%s)",
+ "notification_audio": "Pranešimo garsas",
+ "notification_position": "Pranešimo pozicija"
+ },
+ "position": {
+ "bottom": "Apačioje",
+ "bottom-left": "Apačioje-kairėje",
+ "bottom-right": "Apačioje-dešinėje",
+ "center-left": "Centre-kairėje",
+ "center-right": "Centre-dešinėje",
+ "top": "Viršuje",
+ "top-left": "Viršuje-kairėje",
+ "top-right": "Viršuje-dešinėje"
+ }
+ },
+ "open_radial_menu": "Atidaryti radialinį meniu",
+ "cancel_progress": "Atšaukti dabartinę eigos juostą",
+ "txadmin_announcement": "Serverio pranešimas nuo %s",
+ "txadmin_dm": "Tiesioginis pranešimas nuo %s",
+ "txadmin_warn": "Buvote įspėtas nuo %s",
+ "txadmin_warn_content": "%s \nVeiksmo ID: %s",
+ "txadmin_scheduledrestart": "Suplanuotas paleidimas iš naujo"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/nl.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/nl.json
new file mode 100644
index 000000000..686826e39
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/nl.json
@@ -0,0 +1,33 @@
+{
+ "language": "Nederlands",
+ "settings": "Instellingen",
+ "ui": {
+ "cancel": "Annuleren",
+ "close": "Sluiten",
+ "confirm": "Bevestigen",
+ "more": "Meer...",
+ "settings": {
+ "locale": "Taal wijzigen",
+ "locale_description": "Huidige taal: ${language} (%s)",
+ "notification_audio": "Meldingsgeluid",
+ "notification_position": "Meldingspositie"
+ },
+ "position": {
+ "bottom": "Onder",
+ "bottom-left": "Linksonder",
+ "bottom-right": "Rechtsonder",
+ "center-left": "Linksmidden",
+ "center-right": "Rechtsmidden",
+ "top": "Boven",
+ "top-left": "Linksboven",
+ "top-right": "Rechtsboven"
+ }
+ },
+ "open_radial_menu": "Radiaal menu openen",
+ "cancel_progress": "Huidige voortgangsbalk annuleren",
+ "txadmin_announcement": "Server mededeling door %s",
+ "txadmin_dm": "Bericht van %s",
+ "txadmin_warn": "Je hebt een waarschuwing gekregen van %s",
+ "txadmin_warn_content": "%s \nActie ID: %s",
+ "txadmin_scheduledrestart": "Geplande Server Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/no.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/no.json
new file mode 100644
index 000000000..d9a87bf05
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/no.json
@@ -0,0 +1,33 @@
+{
+ "language": "Norsk",
+ "settings": "Innstillinger",
+ "ui": {
+ "cancel": "Avbryt",
+ "close": "Lukk",
+ "confirm": "Bekreft",
+ "more": "Mer...",
+ "settings": {
+ "locale": "Endre språk",
+ "locale_description": "Nåværende språk: ${language} (%s)",
+ "notification_audio": "Varslings lyd",
+ "notification_position": "Varslings posisjon"
+ },
+ "position": {
+ "bottom": "Bunn",
+ "bottom-left": "Bunn-venstre",
+ "bottom-right": "Bunn-høyre",
+ "center-left": "Senter-venstre",
+ "center-right": "Senter-høyre",
+ "top": "Top",
+ "top-left": "Top-venstre",
+ "top-right": "Top-høyre"
+ }
+ },
+ "open_radial_menu": "Åpne radial menyen",
+ "cancel_progress": "Avbryt den nåværende progresjonsbaren",
+ "txadmin_announcement": "Server annonsering fra %s",
+ "txadmin_dm": "Direktemelding fra %s",
+ "txadmin_warn": "Du har fått en advarsel fra %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Planlagt Omstart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pl.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pl.json
new file mode 100644
index 000000000..e2b49b63c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pl.json
@@ -0,0 +1,32 @@
+{
+ "language": "Polski",
+ "ui": {
+ "cancel": "Anuluj",
+ "close": "Zamknij",
+ "confirm": "Potwierdź",
+ "more": "Więcej...",
+ "settings": {
+ "locale": "Zmień język",
+ "locale_description": "Aktualny język: ${language} (%s)",
+ "notification_audio": "Powiadomienie dźwiękowe",
+ "notification_position": "Pozycja powiadomień"
+ },
+ "position": {
+ "bottom": "Dół",
+ "bottom-left": "Lewy dolny róg",
+ "bottom-right": "Prawy dolny róg",
+ "center-left": "Środek po lewej",
+ "center-right": "Środek po prawej",
+ "top": "Góra",
+ "top-left": "Lewy górny róg",
+ "top-right": "Prawy górny róg"
+ }
+ },
+ "open_radial_menu": "Otwórz menu promieniowe",
+ "cancel_progress": "Anulowanie bieżącego paska postępu",
+ "txadmin_announcement": "Ogłoszenie serwerowe od %s",
+ "txadmin_dm": "Prywatna wiadomość od %s",
+ "txadmin_warn": "Otrzymano ostrzeżenie od %s",
+ "txadmin_warn_content": "%s \nId akcji: %s",
+ "txadmin_scheduledrestart": "Zaplanowany restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt-br.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt-br.json
new file mode 100644
index 000000000..29b335d79
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt-br.json
@@ -0,0 +1,32 @@
+{
+ "language": "Português",
+ "ui": {
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "confirm": "Confirmar",
+ "more": "Mais...",
+ "settings": {
+ "locale": "Alterar idioma",
+ "locale_description": "Idioma atual: ${language} (%s)",
+ "notification_audio": "Áudio de notificação",
+ "notification_position": "Posição da notificação"
+ },
+ "position": {
+ "bottom": "Inferior",
+ "bottom-left": "Inferior esquerdo",
+ "bottom-right": "Inferior direito",
+ "center-left": "Centro-esquerdo",
+ "center-right": "Centro-direito",
+ "top": "Superior",
+ "top-left": "Superior esquerdo",
+ "top-right": "Superior direito"
+ }
+ },
+ "open_radial_menu": "Abrir menu radial",
+ "cancel_progress": "Cancelar barra de progresso atual",
+ "txadmin_announcement": "Anúncio por %s",
+ "txadmin_dm": "Mensagem de %s",
+ "txadmin_warn": "Você foi alertado por %s",
+ "txadmin_warn_content": "%s \nID do aviso: %s",
+ "txadmin_scheduledrestart": "Reinício agendado"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt.json
new file mode 100644
index 000000000..55eaae355
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/pt.json
@@ -0,0 +1,32 @@
+{
+ "language": "Português",
+ "ui": {
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "confirm": "Confirmar",
+ "more": "Mais...",
+ "settings": {
+ "locale": "Mudar idioma",
+ "locale_description": "Idioma atual: ${language} (%s)",
+ "notification_audio": "Áudio de notificações",
+ "notification_position": "Posição das notificações"
+ },
+ "position": {
+ "bottom": "Em baixo",
+ "bottom-left": "Em baixo à esquerda",
+ "bottom-right": "Em baixo à direita",
+ "center-left": "Centro-esquerda",
+ "center-right": "Centro-direita",
+ "top": "Em cima",
+ "top-left": "Em cima à esquerda",
+ "top-right": "Em cima à direita"
+ }
+ },
+ "open_radial_menu": "Abrir menu radial",
+ "cancel_progress": "Cancelar barra de progresso atual",
+ "txadmin_announcement": "Anúncio do servidor por %s",
+ "txadmin_dm": "Mensagem direta de %s",
+ "txadmin_warn": "Foste avisado por %s",
+ "txadmin_warn_content": "%s \nID da ação: %s",
+ "txadmin_scheduledrestart": "Reinício agendado"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ro.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ro.json
new file mode 100644
index 000000000..0ed8e2496
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ro.json
@@ -0,0 +1,34 @@
+{
+ "language": "Română",
+ "settings": "Setări",
+ "ui": {
+ "cancel": "Anulează",
+ "close": "Închide",
+ "confirm": "Confirmă",
+ "more": "Mai multe...",
+ "settings": {
+ "locale": "Schimbă limba",
+ "locale_description": "Limba actuală: ${language} (%s)",
+ "notification_audio": "Audio notificări",
+ "notification_position": "Poziţie notificări"
+ },
+ "position": {
+ "bottom": "Jos",
+ "bottom-left": "Jos-stânga",
+ "bottom-right": "Jos-dreapta",
+ "center-left": "Centru-stânga",
+ "center-right": "Centru-dreapta",
+ "top": "Sus",
+ "top-left": "Sus-stânga",
+ "top-right": "Sus-dreapta"
+ }
+ },
+ "open_radial_menu": "Deschide meniul radial",
+ "cancel_progress": "Anuleaza bara de progres actuala",
+ "txadmin_announcement": "Anunţ de server dat de %s",
+ "txadmin_dm": "Mesaj Direct de la %s",
+ "txadmin_warn": "Ai fost avertizat de %s",
+ "txadmin_warn_content": "%s \nID Acţiune: %s",
+ "txadmin_scheduledrestart": "Restart Programat"
+ }
+
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ru.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ru.json
new file mode 100644
index 000000000..be8371f92
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/ru.json
@@ -0,0 +1,32 @@
+{
+ "language": "Русский",
+ "ui": {
+ "cancel": "Отменить",
+ "close": "Закрыть",
+ "confirm": "Подтвердить",
+ "more": "Ещё...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sk.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sk.json
new file mode 100644
index 000000000..d10304542
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sk.json
@@ -0,0 +1,32 @@
+{
+ "language": "Slovenčina",
+ "ui": {
+ "cancel": "Zrušiť",
+ "close": "Zavrieť",
+ "confirm": "Potvrdiť",
+ "more": "More...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sl.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sl.json
new file mode 100644
index 000000000..5bb4c8995
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sl.json
@@ -0,0 +1,32 @@
+{
+ "language": "Slovenski",
+ "ui": {
+ "cancel": "Cancel",
+ "close": "Zapri",
+ "confirm": "Potrdi",
+ "more": "More...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sv.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sv.json
new file mode 100644
index 000000000..405b9a4f0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/sv.json
@@ -0,0 +1,32 @@
+{
+ "language": "Svenska",
+ "ui": {
+ "cancel": "Avbryt",
+ "close": "Stäng",
+ "confirm": "Acceptera",
+ "more": "Mer...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/th.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/th.json
new file mode 100644
index 000000000..d770e9097
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/th.json
@@ -0,0 +1,32 @@
+{
+ "language": "Thailand",
+ "ui": {
+ "cancel": "ยกเลิก",
+ "close": "ปิด",
+ "confirm": "ยืนยัน",
+ "more": "เพิ่มเติม...",
+ "settings": {
+ "locale": "Change locale",
+ "locale_description": "Current language: ${language} (%s)",
+ "notification_audio": "Notification audio",
+ "notification_position": "Notification position"
+ },
+ "position": {
+ "bottom": "Bottom",
+ "bottom-left": "Bottom-left",
+ "bottom-right": "Bottom-right",
+ "center-left": "Center-left",
+ "center-right": "Center-right",
+ "top": "Top",
+ "top-left": "Top-left",
+ "top-right": "Top-right"
+ }
+ },
+ "open_radial_menu": "Open radial menu",
+ "cancel_progress": "Cancel current progress bar",
+ "txadmin_announcement": "Server announcement by %s",
+ "txadmin_dm": "Direct Message from %s",
+ "txadmin_warn": "You have been warned by %s",
+ "txadmin_warn_content": "%s \nAction ID: %s",
+ "txadmin_scheduledrestart": "Scheduled Restart"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/tr.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/tr.json
new file mode 100644
index 000000000..83c9ced81
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/tr.json
@@ -0,0 +1,33 @@
+{
+ "language": "Türkçe",
+ "settings": "Ayarlar",
+ "ui": {
+ "cancel": "İptal",
+ "close": "Kapat",
+ "confirm": "Onayla",
+ "more": "Daha Fazla...",
+ "settings": {
+ "locale": "Dili değiştir",
+ "locale_description": "Mevcut dil: ${language} (%s)",
+ "notification_audio": "Bildirim Sesi",
+ "notification_position": "Bildirim Pozisyonu"
+ },
+ "position": {
+ "bottom": "Alt",
+ "bottom-left": "Alt-sol",
+ "bottom-right": "Alt-sağ",
+ "center-left": "Merkez-sol",
+ "center-right": "Merkez-sağ",
+ "top": "Üst",
+ "top-left": "Üst-sol",
+ "top-right": "Üst-sağ"
+ }
+ },
+ "open_radial_menu": "Radyal menüyü aç",
+ "cancel_progress": "Mevcut ilerleme çubuğunu iptal et",
+ "txadmin_announcement": "%s tarafından sunucu duyurusu",
+ "txadmin_dm": "%s tarafından direkt mesaj",
+ "txadmin_warn": "%s tarafından uyarıldınız",
+ "txadmin_warn_content": "%s \nİşlem Kimliği: %s",
+ "txadmin_scheduledrestart": "Planlı Yeniden Başlatma"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-cn.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-cn.json
new file mode 100644
index 000000000..51abcc0e4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-cn.json
@@ -0,0 +1,33 @@
+{
+ "language": "简体中文",
+ "settings": "设置",
+ "ui": {
+ "cancel": "取消",
+ "close": "关闭",
+ "confirm": "确认",
+ "more": "更多...",
+ "settings": {
+ "locale": "更改语言",
+ "locale_description": "当前语言: ${language} (%s)",
+ "notification_audio": "通知提示音",
+ "notification_position": "通知位置"
+ },
+ "position": {
+ "bottom": "底部",
+ "bottom-left": "左下",
+ "bottom-right": "右下",
+ "center-left": "左侧居中",
+ "center-right": "右侧居中",
+ "top": "顶部",
+ "top-left": "左上",
+ "top-right": "右上"
+ }
+ },
+ "open_radial_menu": "打开轮盘菜单",
+ "cancel_progress": "取消当前进度条",
+ "txadmin_announcement": "来自 %s 的服务器公告",
+ "txadmin_dm": "来自 %s 的信息",
+ "txadmin_warn": "您被 %s 警告了",
+ "txadmin_warn_content": "%s \n操作 ID: %s",
+ "txadmin_scheduledrestart": "计划内重启"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-tw.json b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-tw.json
new file mode 100644
index 000000000..415a0bddb
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/locales/zh-tw.json
@@ -0,0 +1,33 @@
+{
+ "language": "繁體中文",
+ "settings": "設置",
+ "ui": {
+ "cancel": "取消",
+ "close": "關閉",
+ "confirm": "確認",
+ "more": "更多...",
+ "settings": {
+ "locale": "更改語言",
+ "locale_description": "當前語言: ${language} (%s)",
+ "notification_audio": "通知提示音",
+ "notification_position": "通知位置"
+ },
+ "position": {
+ "bottom": "底部",
+ "bottom-left": "左下",
+ "bottom-right": "右下",
+ "center-left": "左側居中",
+ "center-right": "右側居中",
+ "top": "頂部",
+ "top-left": "左上",
+ "top-right": "右上"
+ }
+ },
+ "open_radial_menu": "打開輪盤菜單",
+ "cancel_progress": "取消當前進度條",
+ "txadmin_announcement": "來自 %s 的伺服器通告",
+ "txadmin_dm": "來自 %s 的訊息",
+ "txadmin_warn": "您被 %s 警告了",
+ "txadmin_warn_content": "%s \n操作 ID: %s",
+ "txadmin_scheduledrestart": "計劃內重啟"
+}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/.gitignore b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/.gitignore
new file mode 100644
index 000000000..292a4afb6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/.gitignore
@@ -0,0 +1 @@
+!cache
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/acl/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/acl/server.lua
new file mode 100644
index 000000000..19d8eb2da
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/acl/server.lua
@@ -0,0 +1,51 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local function allowAce(allow)
+ return allow == false and 'deny' or 'allow'
+end
+
+-- Adds the ace to the principal.
+function lib.addAce(principal, ace, allow)
+ if type(principal) == 'number' then
+ principal = 'player.'..principal
+ end
+
+ ExecuteCommand(('add_ace %s %s %s'):format(principal, ace, allowAce(allow)))
+end
+
+-- Removes the ace from the principal.
+function lib.removeAce(principal, ace, allow)
+ if type(principal) == 'number' then
+ principal = 'player.'..principal
+ end
+
+ ExecuteCommand(('remove_ace %s %s %s'):format(principal, ace, allowAce(allow)))
+end
+
+-- Adds the child principal to the parent principal.
+function lib.addPrincipal(child, parent)
+ if type(child) == 'number' then
+ child = 'player.'..child
+ end
+
+ ExecuteCommand(('add_principal %s %s'):format(child, parent))
+end
+
+-- Removes the child principal from the parent principal.
+function lib.removePrincipal(child, parent)
+ if type(child) == 'number' then
+ child = 'player.'..child
+ end
+
+ ExecuteCommand(('remove_principal %s %s'):format(child, parent))
+end
+
+lib.callback.register('ox_lib:checkPlayerAce', function(source, command)
+ return IsPlayerAceAllowed(source, command)
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/cache/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/cache/client.lua
new file mode 100644
index 000000000..96b581312
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/cache/client.lua
@@ -0,0 +1,72 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local cache = _ENV.cache
+cache.playerId = PlayerId()
+cache.serverId = GetPlayerServerId(cache.playerId)
+
+function cache:set(key, value)
+ if value ~= self[key] then
+ TriggerEvent(('ox_lib:cache:%s'):format(key), value, self[key])
+ self[key] = value
+
+ return true
+ end
+end
+
+local GetVehiclePedIsIn = GetVehiclePedIsIn
+local GetPedInVehicleSeat = GetPedInVehicleSeat
+local GetVehicleMaxNumberOfPassengers = GetVehicleMaxNumberOfPassengers
+local GetMount = GetMount
+local IsPedOnMount = IsPedOnMount
+local GetCurrentPedWeapon = GetCurrentPedWeapon
+
+CreateThread(function()
+ while true do
+ local ped = PlayerPedId()
+ cache:set('ped', ped)
+
+ local vehicle = GetVehiclePedIsIn(ped, false)
+
+ if vehicle > 0 then
+ if vehicle ~= cache.vehicle then
+ cache:set('seat', false)
+ end
+
+ cache:set('vehicle', vehicle)
+
+ if not cache.seat or GetPedInVehicleSeat(vehicle, cache.seat) ~= ped then
+ for i = -1, GetVehicleMaxNumberOfPassengers(vehicle) - 1 do
+ if GetPedInVehicleSeat(vehicle, i) == ped then
+ cache:set('seat', i)
+ break
+ end
+ end
+ end
+ else
+ cache:set('vehicle', false)
+ cache:set('seat', false)
+ end
+
+ if cache.game == 'redm' then
+ local mount = GetMount(ped)
+ local onMount = IsPedOnMount(ped)
+ cache:set('mount', onMount and mount or false)
+ end
+
+ local hasWeapon, currentWeapon = GetCurrentPedWeapon(ped, true)
+
+ cache:set('weapon', hasWeapon and currentWeapon or false)
+
+ Wait(100)
+ end
+end)
+
+function lib.cache(key)
+ return cache[key]
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/callbacks/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/callbacks/shared.lua
new file mode 100644
index 000000000..59118f8f9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/callbacks/shared.lua
@@ -0,0 +1,65 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local registeredCallbacks = {}
+
+AddEventHandler('onResourceStop', function(resourceName)
+ if cache.resource == resourceName then return end
+
+ for callbackName, resource in pairs(registeredCallbacks) do
+ if resource == resourceName then
+ registeredCallbacks[callbackName] = nil
+ end
+ end
+end)
+
+---For internal use only.
+---Sets a callback event as registered to a specific resource, preventing it from
+---being overwritten. Any unknown callbacks will return an error to the caller.
+---@param callbackName string
+---@param isValid boolean
+function lib.setValidCallback(callbackName, isValid)
+ local resourceName = GetInvokingResource() or cache.resource
+ local callbackResource = registeredCallbacks[callbackName]
+
+ if callbackResource then
+ if not isValid then
+ callbackResource[callbackName] = nil
+ return
+ end
+
+ if callbackResource == resourceName then return end
+
+ local errMessage = ("^1resource '%s' attempted to overwrite callback '%s' owned by resource '%s'^0"):format(resourceName, callbackName, callbackResource)
+
+ return print(('^1SCRIPT ERROR: %s^0\n%s'):format(errMessage,
+ Citizen.InvokeNative(`FORMAT_STACK_TRACE` & 0xFFFFFFFF, nil, 0, Citizen.ResultAsString()) or ''))
+ end
+
+ lib.print.verbose(("set valid callback '%s' for resource '%s'"):format(callbackName, resourceName))
+
+ registeredCallbacks[callbackName] = resourceName
+end
+
+function lib.isCallbackValid(callbackName)
+ return registeredCallbacks[callbackName] == GetInvokingResource() or cache.resource
+end
+
+local cbEvent = '__ox_cb_%s'
+
+RegisterNetEvent('ox_lib:validateCallback', function(callbackName, invokingResource, key)
+ if registeredCallbacks[callbackName] then return end
+
+ local event = cbEvent:format(invokingResource)
+
+ if cache.game == 'fxserver' then
+ return TriggerClientEvent(event, source, key, 'cb_invalid')
+ end
+
+ TriggerServerEvent(event, key, 'cb_invalid')
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/client.lua
new file mode 100644
index 000000000..1e2affe26
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/client.lua
@@ -0,0 +1,27 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local _registerCommand = RegisterCommand
+
+---@param commandName string
+---@param callback fun(source, args, raw)
+---@param restricted boolean?
+function RegisterCommand(commandName, callback, restricted)
+ _registerCommand(commandName, function(source, args, raw)
+ if not restricted or lib.callback.await('ox_lib:checkPlayerAce', 100, ('command.%s'):format(commandName)) then
+ callback(source, args, raw)
+ end
+ end)
+end
+
+RegisterNUICallback('getConfig', function(_, cb)
+ cb({
+ primaryColor = GetConvar('ox:primaryColor', 'blue'),
+ primaryShade = GetConvarInt('ox:primaryShade', 8)
+ })
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/init.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/init.lua
new file mode 100644
index 000000000..0e21a1be3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/init.lua
@@ -0,0 +1,55 @@
+local debug_getinfo = debug.getinfo
+
+function noop() end
+
+lib = setmetatable({
+ name = 'ox_lib',
+ context = IsDuplicityVersion() and 'server' or 'client',
+}, {
+ __newindex = function(self, key, fn)
+ rawset(self, key, fn)
+
+ if debug_getinfo(2, 'S').short_src:find('@ox_lib/resource') then
+ exports(key, fn)
+ end
+ end,
+
+ __index = function(self, key)
+ local dir = ('imports/%s'):format(key)
+ local chunk = LoadResourceFile(self.name, ('%s/%s.lua'):format(dir, self.context))
+ local shared = LoadResourceFile(self.name, ('%s/shared.lua'):format(dir))
+
+ if shared then
+ chunk = (chunk and ('%s\n%s'):format(shared, chunk)) or shared
+ end
+
+ if chunk then
+ local fn, err = load(chunk, ('@@ox_lib/%s/%s.lua'):format(key, self.context))
+
+ if not fn or err then
+ return error(('\n^1Error importing module (%s): %s^0'):format(dir, err), 3)
+ end
+
+ rawset(self, key, fn() or noop)
+
+ return self[key]
+ end
+ end
+})
+
+cache = {
+ resource = lib.name,
+ game = GetGameName(),
+}
+
+if not LoadResourceFile(lib.name, 'web/build/index.html') then
+ local err =
+ '^1Unable to load UI. Build ox_lib or download the latest release.\n ^3https://github.com/overextended/ox_lib/releases/latest/download/ox_lib.zip^0'
+ function lib.hasLoaded() return err end
+
+ error(err)
+end
+
+function lib.hasLoaded() return true end
+
+require = lib.require
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/alert.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/alert.lua
new file mode 100644
index 000000000..f2feac936
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/alert.lua
@@ -0,0 +1,72 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@type promise?
+local alert = nil
+local alertId = 0
+
+---@class AlertDialogProps
+---@field header string;
+---@field content string;
+---@field centered? boolean?;
+---@field size? 'xs' | 'sm' | 'md' | 'lg' | 'xl';
+---@field overflow? boolean?;
+---@field cancel? boolean?;
+---@field labels? {cancel?: string, confirm?: string}
+
+---@param data AlertDialogProps
+---@param timeout? number Force the window to timeout after `x` milliseconds.
+---@return 'cancel' | 'confirm' | nil
+function lib.alertDialog(data, timeout)
+ if alert then return end
+
+ local id = alertId + 1
+ alertId = id
+ alert = promise.new()
+
+ lib.setNuiFocus(false)
+ SendNUIMessage({
+ action = 'sendAlert',
+ data = data
+ })
+
+ if timeout then
+ SetTimeout(timeout, function()
+ if id == alertId then lib.closeAlertDialog('timeout') end
+ end)
+ end
+
+ return Citizen.Await(alert)
+end
+
+---@param reason? string An optional reason for the window to be closed.
+function lib.closeAlertDialog(reason)
+ if not alert then return end
+
+ lib.resetNuiFocus()
+ SendNUIMessage({
+ action = 'closeAlertDialog'
+ })
+
+ local p = alert
+ alert = nil
+
+ if reason then p:reject(reason) else p:resolve() end
+end
+
+RegisterNUICallback('closeAlert', function(data, cb)
+ cb(1)
+ lib.resetNuiFocus()
+
+ local promise = alert --[[@as promise]]
+ alert = nil
+
+ promise:resolve(data)
+end)
+
+RegisterNetEvent('ox_lib:alertDialog', lib.alertDialog)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/clipboard.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/clipboard.lua
new file mode 100644
index 000000000..7a1c2f668
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/clipboard.lua
@@ -0,0 +1,15 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param value string
+function lib.setClipboard(value)
+ SendNUIMessage({
+ action = 'setClipboard',
+ data = value
+ })
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/context.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/context.lua
new file mode 100644
index 000000000..0bb379eb3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/context.lua
@@ -0,0 +1,125 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local contextMenus = {}
+local openContextMenu = nil
+
+---@class ContextMenuItem
+---@field title? string
+---@field menu? string
+---@field icon? string | {[1]: IconProp, [2]: string};
+---@field iconColor? string
+---@field image? string
+---@field progress? number
+---@field onSelect? fun(args: any)
+---@field arrow? boolean
+---@field description? string
+---@field metadata? string | { [string]: any } | string[]
+---@field disabled? boolean
+---@field readOnly? boolean
+---@field event? string
+---@field serverEvent? string
+---@field args? any
+
+---@class ContextMenuArrayItem : ContextMenuItem
+---@field title string
+
+---@class ContextMenuProps
+---@field id string
+---@field title string
+---@field menu? string
+---@field onExit? fun()
+---@field onBack? fun()
+---@field canClose? boolean
+---@field options { [string]: ContextMenuItem } | ContextMenuArrayItem[]
+
+local function closeContext(_, cb, onExit)
+ if cb then cb(1) end
+
+ lib.resetNuiFocus()
+
+ if not openContextMenu then return end
+
+ if (cb or onExit) and contextMenus[openContextMenu].onExit then contextMenus[openContextMenu].onExit() end
+
+ if not cb then SendNUIMessage({ action = 'hideContext' }) end
+
+ openContextMenu = nil
+end
+
+---@param id string
+function lib.showContext(id)
+ if not contextMenus[id] then error('No context menu of such id found.') end
+
+ local data = contextMenus[id]
+ openContextMenu = id
+
+ lib.setNuiFocus(false)
+
+ SendNuiMessage(json.encode({
+ action = 'showContext',
+ data = {
+ title = data.title,
+ canClose = data.canClose,
+ menu = data.menu,
+ options = data.options
+ }
+ }, { sort_keys = true }))
+end
+
+---@param context ContextMenuProps | ContextMenuProps[]
+function lib.registerContext(context)
+ for k, v in pairs(context) do
+ if type(k) == 'number' then
+ contextMenus[v.id] = v
+ else
+ contextMenus[context.id] = context
+ break
+ end
+ end
+end
+
+---@return string?
+function lib.getOpenContextMenu() return openContextMenu end
+
+---@param onExit boolean?
+function lib.hideContext(onExit) closeContext(nil, nil, onExit) end
+
+RegisterNUICallback('openContext', function(data, cb)
+ if data.back and contextMenus[openContextMenu].onBack then contextMenus[openContextMenu].onBack() end
+ cb(1)
+ lib.showContext(data.id)
+end)
+
+RegisterNUICallback('clickContext', function(id, cb)
+ cb(1)
+
+ if math.type(tonumber(id)) == 'float' then
+ id = math.tointeger(id)
+ elseif tonumber(id) then
+ id += 1
+ end
+
+ local data = contextMenus[openContextMenu].options[id]
+
+ if not data.event and not data.serverEvent and not data.onSelect then return end
+
+ openContextMenu = nil
+
+ SendNUIMessage({ action = 'hideContext' })
+ lib.resetNuiFocus()
+
+ if data.onSelect then data.onSelect(data.args) end
+ if data.event then TriggerEvent(data.event, data.args) end
+ if data.serverEvent then TriggerServerEvent(data.serverEvent, data.args) end
+end)
+
+RegisterNUICallback('closeContext', closeContext)
+
+
+
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/input.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/input.lua
new file mode 100644
index 000000000..3de2ed84c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/input.lua
@@ -0,0 +1,85 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local input
+
+---@class InputDialogRowProps
+---@field type 'input' | 'number' | 'checkbox' | 'select' | 'slider' | 'multi-select' | 'date' | 'date-range' | 'time' | 'textarea' | 'color'
+---@field label string
+---@field options? { value: string, label: string, default?: string }[]
+---@field password? boolean
+---@field icon? string | {[1]: IconProp, [2]: string};
+---@field iconColor? string
+---@field placeholder? string
+---@field default? string | number
+---@field disabled? boolean
+---@field checked? boolean
+---@field min? number
+---@field max? number
+---@field step? number
+---@field autosize? boolean
+---@field required? boolean
+---@field format? string
+---@field returnString? boolean
+---@field clearable? boolean
+---@field searchable? boolean
+---@field description? string
+---@field maxSelectedValues? number
+
+---@class InputDialogOptionsProps
+---@field allowCancel? boolean
+
+---@param heading string
+---@param rows string[] | InputDialogRowProps[]
+---@param options InputDialogOptionsProps[]?
+---@return string[] | number[] | boolean[] | nil
+function lib.inputDialog(heading, rows, options)
+ if input then return end
+ input = promise.new()
+
+ -- Backwards compat with string tables
+ for i = 1, #rows do
+ if type(rows[i]) == 'string' then
+ rows[i] = { type = 'input', label = rows[i] --[[@as string]] }
+ end
+ end
+
+ lib.setNuiFocus(false)
+ SendNUIMessage({
+ action = 'openDialog',
+ data = {
+ heading = heading,
+ rows = rows,
+ options = options
+ }
+ })
+
+ return Citizen.Await(input)
+end
+
+function lib.closeInputDialog()
+ if not input then return end
+
+ lib.resetNuiFocus()
+ SendNUIMessage({
+ action = 'closeInputDialog'
+ })
+
+ input:resolve(nil)
+ input = nil
+end
+
+RegisterNUICallback('inputData', function(data, cb)
+ cb(1)
+ lib.resetNuiFocus()
+
+ local promise = input
+ input = nil
+
+ promise:resolve(data)
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/main.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/main.lua
new file mode 100644
index 000000000..af07e262b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/main.lua
@@ -0,0 +1,22 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@alias IconProp 'fas' | 'far' | 'fal' | 'fat' | 'fad' | 'fab' | 'fak' | 'fass'
+
+local keepInput = IsNuiFocusKeepingInput()
+
+function lib.setNuiFocus(allowInput, disableCursor)
+ keepInput = IsNuiFocusKeepingInput()
+ SetNuiFocus(true, not disableCursor)
+ SetNuiFocusKeepInput(allowInput)
+end
+
+function lib.resetNuiFocus()
+ SetNuiFocus(false, false)
+ SetNuiFocusKeepInput(keepInput)
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/menu.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/menu.lua
new file mode 100644
index 000000000..5417720be
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/menu.lua
@@ -0,0 +1,209 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@type { [string]: MenuProps }
+local registeredMenus = {}
+---@type MenuProps | nil
+local openMenu
+
+---@alias MenuPosition 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
+---@alias MenuChangeFunction fun(selected: number, scrollIndex?: number, args?: any, checked?: boolean)
+
+---@class MenuOptions
+---@field label string
+---@field progress? number
+---@field colorScheme? string
+---@field icon? string | {[1]: IconProp, [2]: string};
+---@field iconColor? string
+---@field values? table
+---@field checked? boolean
+---@field description? string
+---@field defaultIndex? number
+---@field args? {[any]: any}
+---@field close? boolean
+
+---@class MenuProps
+---@field id string
+---@field title string
+---@field options MenuOptions[]
+---@field position? MenuPosition
+---@field disableInput? boolean
+---@field canClose? boolean
+---@field onClose? fun(keyPressed?: 'Escape' | 'Backspace')
+---@field onSelected? MenuChangeFunction
+---@field onSideScroll? MenuChangeFunction
+---@field onCheck? MenuChangeFunction
+---@field cb? MenuChangeFunction
+
+---@param data MenuProps
+---@param cb? MenuChangeFunction
+function lib.registerMenu(data, cb)
+ if not data.id then error('No menu id was provided.') end
+ if not data.title then error('No menu title was provided.') end
+ if not data.options then error('No menu options were provided.') end
+ data.cb = cb
+ registeredMenus[data.id] = data
+end
+
+---@param id string
+---@param startIndex? number
+function lib.showMenu(id, startIndex)
+ local menu = registeredMenus[id]
+ if not menu then
+ error(('No menu with id %s was found'):format(id))
+ end
+
+ if table.type(menu.options) == 'empty' then
+ error(('Can\'t open empty menu with id %s'):format(id))
+ end
+
+ if not openMenu then
+ local control = cache.game == 'fivem' and 140 or 0xE30CD707
+
+ CreateThread(function()
+ while openMenu do
+ if openMenu.disableInput == nil or openMenu.disableInput then
+ DisablePlayerFiring(cache.playerId, true)
+ if cache.game == 'fivem' then
+ HudWeaponWheelIgnoreSelection() -- Not a REDM native
+ end
+ DisableControlAction(0, control, true)
+ end
+ Wait(0)
+ end
+ end)
+ end
+
+ openMenu = menu
+ lib.setNuiFocus(not menu.disableInput, true)
+
+ SendNUIMessage({
+ action = 'setMenu',
+ data = {
+ position = menu.position,
+ canClose = menu.canClose,
+ title = menu.title,
+ items = menu.options,
+ startItemIndex = startIndex and startIndex - 1 or 0
+ }
+ })
+end
+---@param onExit boolean?
+function lib.hideMenu(onExit)
+ local menu = openMenu
+ openMenu = nil
+
+ if not menu then return end
+
+ lib.resetNuiFocus()
+
+ if onExit and menu.onClose then
+ menu.onClose()
+ end
+
+ SendNUIMessage({
+ action = 'closeMenu'
+ })
+end
+
+---@param id string
+---@param options MenuOptions | MenuOptions[]
+---@param index? number
+function lib.setMenuOptions(id, options, index)
+ if index then
+ registeredMenus[id].options[index] = options
+ else
+ if not options[1] then error('Invalid override format used, expected table of options.') end
+ registeredMenus[id].options = options
+ end
+end
+
+---@return string?
+function lib.getOpenMenu() return openMenu and openMenu.id end
+
+RegisterNUICallback('confirmSelected', function(data, cb)
+ cb(1)
+ data[1] += 1 -- selected
+
+ if data[2] then
+ data[2] += 1 -- scrollIndex
+ end
+
+ local menu = openMenu
+
+ if not menu then return end
+
+ if menu.options[data[1]].close ~= false then
+ lib.resetNuiFocus()
+ openMenu = nil
+ end
+
+ if menu.cb then
+ menu.cb(data[1], data[2], menu.options[data[1]].args, data[3])
+ end
+end)
+
+RegisterNUICallback('changeIndex', function(data, cb)
+ cb(1)
+ if not openMenu or not openMenu.onSideScroll then return end
+
+ data[1] += 1 -- selected
+
+ if data[2] then
+ data[2] += 1 -- scrollIndex
+ end
+
+ openMenu.onSideScroll(data[1], data[2], openMenu.options[data[1]].args)
+end)
+
+RegisterNUICallback('changeSelected', function(data, cb)
+ cb(1)
+ if not openMenu or not openMenu.onSelected then return end
+
+ data[1] += 1 -- selected
+
+
+ local args = openMenu.options[data[1]].args
+
+ if args and type(args) ~= 'table' then
+ return error("Menu args must be passed as a table")
+ end
+
+ if not args then args = {} end
+ if data[2] then args[data[3]] = true end
+
+ if data[2] and not args.isCheck then
+ data[2] += 1 -- scrollIndex
+ end
+
+ openMenu.onSelected(data[1], data[2], args)
+end)
+
+RegisterNUICallback('changeChecked', function(data, cb)
+ cb(1)
+ if not openMenu or not openMenu.onCheck then return end
+
+ data[1] += 1 -- selected
+
+ openMenu.onCheck(data[1], data[2], openMenu.options[data[1]].args)
+end)
+
+RegisterNUICallback('closeMenu', function(data, cb)
+ cb(1)
+ lib.resetNuiFocus()
+
+ local menu = openMenu
+
+ if not menu then return end
+
+ openMenu = nil
+
+ if menu.onClose then
+ menu.onClose(data --[[@as 'Escape' | 'Backspace' | nil]])
+ end
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/notify.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/notify.lua
new file mode 100644
index 000000000..ae99d9444
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/notify.lua
@@ -0,0 +1,71 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@alias NotificationPosition 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left' | 'center-right' | 'center-left'
+---@alias NotificationType 'info' | 'warning' | 'success' | 'error'
+---@alias IconAnimationType 'spin' | 'spinPulse' | 'spinReverse' | 'pulse' | 'beat' | 'fade' | 'beatFade' | 'bounce' | 'shake'
+
+---@class NotifyProps
+---@field id? string
+---@field title? string
+---@field description? string
+---@field duration? number
+---@field showDuration? boolean
+---@field position? NotificationPosition
+---@field type? NotificationType
+---@field style? { [string]: any }
+---@field icon? string | { [1]: IconProp, [2]: string }
+---@field iconAnimation? IconAnimationType
+---@field iconColor? string
+---@field alignIcon? 'top' | 'center'
+---@field sound? { bank?: string, set: string, name: string }
+
+local settings = require 'resource.settings'
+
+---`client`
+---@param data NotifyProps
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.notify(data)
+ local sound = settings.notification_audio and data.sound
+ data.sound = nil
+ data.position = data.position or settings.notification_position
+
+ SendNUIMessage({
+ action = 'notify',
+ data = data
+ })
+
+ if not sound then return end
+
+ if sound.bank then lib.requestAudioBank(sound.bank) end
+
+ local soundId = GetSoundId()
+ PlaySoundFrontend(soundId, sound.name, sound.set, true)
+ ReleaseSoundId(soundId)
+
+ if sound.bank then ReleaseNamedScriptAudioBank(sound.bank) end
+end
+
+---@class DefaultNotifyProps
+---@field title? string
+---@field description? string
+---@field duration? number
+---@field position? NotificationPosition
+---@field status? 'info' | 'warning' | 'success' | 'error'
+---@field id? number
+
+---@param data DefaultNotifyProps
+function lib.defaultNotify(data)
+ -- Backwards compat for v3
+ data.type = data.status
+ if data.type == 'inform' then data.type = 'info' end
+ return lib.notify(data --[[@as NotifyProps]])
+end
+
+RegisterNetEvent('ox_lib:notify', lib.notify)
+RegisterNetEvent('ox_lib:defaultNotify', lib.defaultNotify)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/progress.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/progress.lua
new file mode 100644
index 000000000..5ab1c345d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/progress.lua
@@ -0,0 +1,269 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local progress
+local DisableControlAction = DisableControlAction
+local DisablePlayerFiring = DisablePlayerFiring
+local playerState = LocalPlayer.state
+local createdProps = {}
+
+---@class ProgressPropProps
+---@field model string
+---@field bone? number
+---@field pos vector3
+---@field rot vector3
+---@field rotOrder? number
+
+---@class ProgressProps
+---@field label? string
+---@field duration number
+---@field position? 'middle' | 'bottom'
+---@field useWhileDead? boolean
+---@field allowRagdoll? boolean
+---@field allowCuffed? boolean
+---@field allowFalling? boolean
+---@field allowSwimming? boolean
+---@field canCancel? boolean
+---@field anim? { dict?: string, clip: string, flag?: number, blendIn?: number, blendOut?: number, duration?: number, playbackRate?: number, lockX?: boolean, lockY?: boolean, lockZ?: boolean, scenario?: string, playEnter?: boolean }
+---@field prop? ProgressPropProps | ProgressPropProps[]
+---@field disable? { move?: boolean, sprint?: boolean, car?: boolean, combat?: boolean, mouse?: boolean }
+
+local function createProp(ped, prop)
+ lib.requestModel(prop.model)
+ local coords = GetEntityCoords(ped)
+ local object = CreateObject(prop.model, coords.x, coords.y, coords.z, false, false, false)
+
+ AttachEntityToEntity(object, ped, GetPedBoneIndex(ped, prop.bone or 60309), prop.pos.x, prop.pos.y, prop.pos.z, prop.rot.x, prop.rot.y, prop.rot.z, true,
+ true, false, true, prop.rotOrder or 0, true)
+ SetModelAsNoLongerNeeded(prop.model)
+
+ return object
+end
+
+local function interruptProgress(data)
+ if not data.useWhileDead and IsEntityDead(cache.ped) then return true end
+ if not data.allowRagdoll and IsPedRagdoll(cache.ped) then return true end
+ if not data.allowCuffed and IsPedCuffed(cache.ped) then return true end
+ if not data.allowFalling and IsPedFalling(cache.ped) then return true end
+ if not data.allowSwimming and IsPedSwimming(cache.ped) then return true end
+end
+
+local isFivem = cache.game == 'fivem'
+
+local controls = {
+ INPUT_LOOK_LR = isFivem and 1 or 0xA987235F,
+ INPUT_LOOK_UD = isFivem and 2 or 0xD2047988,
+ INPUT_SPRINT = isFivem and 21 or 0x8FFC75D6,
+ INPUT_AIM = isFivem and 25 or 0xF84FA74F,
+ INPUT_MOVE_LR = isFivem and 30 or 0x4D8FB4C1,
+ INPUT_MOVE_UD = isFivem and 31 or 0xFDA83190,
+ INPUT_DUCK = isFivem and 36 or 0xDB096B85,
+ INPUT_VEH_MOVE_LEFT_ONLY = isFivem and 63 or 0x9DF54706,
+ INPUT_VEH_MOVE_RIGHT_ONLY = isFivem and 64 or 0x97A8FD98,
+ INPUT_VEH_ACCELERATE = isFivem and 71 or 0x5B9FD4E2,
+ INPUT_VEH_BRAKE = isFivem and 72 or 0x6E1F639B,
+ INPUT_VEH_EXIT = isFivem and 75 or 0xFEFAB9B4,
+ INPUT_VEH_MOUSE_CONTROL_OVERRIDE = isFivem and 106 or 0x39CCABD5
+}
+
+---@param data ProgressProps
+local function startProgress(data)
+ playerState.invBusy = true
+ progress = data
+ local anim = data.anim
+
+ if anim then
+ if anim.dict then
+ lib.requestAnimDict(anim.dict)
+
+ TaskPlayAnim(cache.ped, anim.dict, anim.clip, anim.blendIn or 3.0, anim.blendOut or 1.0, anim.duration or -1, anim.flag or 49, anim.playbackRate or 0,
+ anim.lockX, anim.lockY, anim.lockZ)
+ RemoveAnimDict(anim.dict)
+ elseif anim.scenario then
+ TaskStartScenarioInPlace(cache.ped, anim.scenario, 0, anim.playEnter == nil or anim.playEnter --[[@as boolean]])
+ end
+ end
+
+ if data.prop then
+ playerState:set('lib:progressProps', data.prop, true)
+ end
+
+ local disable = data.disable
+ local startTime = GetGameTimer()
+
+ while progress do
+ if disable then
+ if disable.mouse then
+ DisableControlAction(0, controls.INPUT_LOOK_LR, true)
+ DisableControlAction(0, controls.INPUT_LOOK_UD, true)
+ DisableControlAction(0, controls.INPUT_VEH_MOUSE_CONTROL_OVERRIDE, true)
+ end
+
+ if disable.move then
+ DisableControlAction(0, controls.INPUT_SPRINT, true)
+ DisableControlAction(0, controls.INPUT_MOVE_LR, true)
+ DisableControlAction(0, controls.INPUT_MOVE_UD, true)
+ DisableControlAction(0, controls.INPUT_DUCK, true)
+ end
+
+ if disable.sprint and not disable.move then
+ DisableControlAction(0, controls.INPUT_SPRINT, true)
+ end
+
+ if disable.car then
+ DisableControlAction(0, controls.INPUT_VEH_MOVE_LEFT_ONLY, true)
+ DisableControlAction(0, controls.INPUT_VEH_MOVE_RIGHT_ONLY, true)
+ DisableControlAction(0, controls.INPUT_VEH_ACCELERATE, true)
+ DisableControlAction(0, controls.INPUT_VEH_BRAKE, true)
+ DisableControlAction(0, controls.INPUT_VEH_EXIT, true)
+ end
+
+ if disable.combat then
+ DisableControlAction(0, controls.INPUT_AIM, true)
+ DisablePlayerFiring(cache.playerId, true)
+ end
+ end
+
+ if interruptProgress(progress) then
+ progress = false
+ end
+
+ Wait(0)
+ end
+
+ if data.prop then
+ playerState:set('lib:progressProps', nil, true)
+ end
+
+ if anim then
+ if anim.dict then
+ StopAnimTask(cache.ped, anim.dict, anim.clip, 1.0)
+ Wait(0) -- This is needed here otherwise the StopAnimTask is cancelled
+ else
+ ClearPedTasks(cache.ped)
+ end
+ end
+
+ playerState.invBusy = false
+ local duration = progress ~= false and GetGameTimer() - startTime + 100 -- give slight leeway
+
+ if progress == false or duration <= data.duration then
+ SendNUIMessage({ action = 'progressCancel' })
+ return false
+ end
+
+ return true
+end
+
+---@param data ProgressProps
+---@return boolean?
+function lib.progressBar(data)
+ while progress ~= nil do Wait(0) end
+
+ if not interruptProgress(data) then
+ SendNUIMessage({
+ action = 'progress',
+ data = {
+ label = data.label,
+ duration = data.duration
+ }
+ })
+
+ return startProgress(data)
+ end
+end
+
+---@param data ProgressProps
+---@return boolean?
+function lib.progressCircle(data)
+ while progress ~= nil do Wait(0) end
+
+ if not interruptProgress(data) then
+ SendNUIMessage({
+ action = 'circleProgress',
+ data = {
+ duration = data.duration,
+ position = data.position,
+ label = data.label
+ }
+ })
+
+ return startProgress(data)
+ end
+end
+
+function lib.cancelProgress()
+ if not progress then
+ error('No progress bar is active')
+ end
+
+ progress = false
+end
+
+---@return boolean
+function lib.progressActive()
+ return progress and true
+end
+
+RegisterNUICallback('progressComplete', function(data, cb)
+ cb(1)
+ progress = nil
+end)
+
+RegisterCommand('cancelprogress', function()
+ if progress?.canCancel then progress = false end
+end)
+
+if isFivem then
+ RegisterKeyMapping('cancelprogress', locale('cancel_progress'), 'keyboard', 'x')
+end
+
+local function deleteProgressProps(serverId)
+ local playerProps = createdProps[serverId]
+ if not playerProps then return end
+ for i = 1, #playerProps do
+ local prop = playerProps[i]
+ if DoesEntityExist(prop) then
+ DeleteEntity(prop)
+ end
+ end
+ createdProps[serverId] = nil
+end
+
+RegisterNetEvent('onPlayerDropped', function(serverId)
+ deleteProgressProps(serverId)
+end)
+
+AddStateBagChangeHandler('lib:progressProps', nil, function(bagName, key, value, reserved, replicated)
+ if replicated then return end
+
+ local ply = GetPlayerFromStateBagName(bagName)
+ if ply == 0 then return end
+
+ local ped = GetPlayerPed(ply)
+ local serverId = GetPlayerServerId(ply)
+
+ if not value then
+ return deleteProgressProps(serverId)
+ end
+
+ createdProps[serverId] = {}
+ local playerProps = createdProps[serverId]
+
+ if value.model then
+ playerProps[#playerProps + 1] = createProp(ped, value)
+ else
+ for i = 1, #value do
+ local prop = value[i]
+
+ if prop then
+ playerProps[#playerProps + 1] = createProp(ped, prop)
+ end
+ end
+ end
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/radial.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/radial.lua
new file mode 100644
index 000000000..4e974ef6c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/radial.lua
@@ -0,0 +1,353 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class RadialItem
+---@field icon string | {[1]: IconProp, [2]: string};
+---@field label string
+---@field menu? string
+---@field onSelect? fun(currentMenu: string | nil, itemIndex: number) | string
+---@field [string] any
+---@field keepOpen? boolean
+---@field iconWidth? number
+---@field iconHeight? number
+
+---@class RadialMenuItem: RadialItem
+---@field id string
+
+---@class RadialMenuProps
+---@field id string
+---@field items RadialItem[]
+---@field [string] any
+
+local isOpen = false
+
+---@type table
+local menus = {}
+
+---@type RadialMenuItem[]
+local menuItems = {}
+
+---@type table<{id: string, option: string}>
+local menuHistory = {}
+
+---@type RadialMenuProps?
+local currentRadial = nil
+
+---Open a the global radial menu or a registered radial submenu with the given id.
+---@param id string?
+---@param option number?
+local function showRadial(id, option)
+ local radial = id and menus[id]
+
+ if id and not radial then
+ return error('No radial menu with such id found.')
+ end
+
+ currentRadial = radial
+
+ -- Hide current menu and allow for transition
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = false
+ })
+
+ Wait(100)
+
+ -- If menu was closed during transition, don't open the submenu
+ if not isOpen then return end
+
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = {
+ items = radial and radial.items or menuItems,
+ sub = radial and true or nil,
+ option = option
+ }
+ })
+end
+
+---Refresh the current menu items or return from a submenu to its parent.
+local function refreshRadial(menuId)
+ if not isOpen then return end
+
+ if currentRadial and menuId then
+ if menuId == currentRadial.id then
+ return showRadial(menuId)
+ else
+ for i = 1, #menuHistory do
+ local subMenu = menuHistory[i]
+
+ if subMenu.id == menuId then
+ local parent = menus[subMenu.id]
+
+ for j = 1, #parent.items do
+ -- If we still have a path to the current submenu, refresh instead of returning
+ if parent.items[j].menu == currentRadial.id then
+ return -- showRadial(currentRadial.id)
+ end
+ end
+
+ currentRadial = parent
+
+ for j = #menuHistory, i, -1 do
+ menuHistory[j] = nil
+ end
+
+ return showRadial(currentRadial.id)
+ end
+ end
+ end
+
+ return
+ end
+
+ table.wipe(menuHistory)
+ showRadial()
+end
+
+---Registers a radial sub menu with predefined options.
+---@param radial RadialMenuProps
+function lib.registerRadial(radial)
+ menus[radial.id] = radial
+ radial.resource = GetInvokingResource()
+
+ if currentRadial then
+ refreshRadial(radial.id)
+ end
+end
+
+function lib.getCurrentRadialId()
+ return currentRadial and currentRadial.id
+end
+
+function lib.hideRadial()
+ if not isOpen then return end
+
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = false
+ })
+
+ lib.resetNuiFocus()
+ table.wipe(menuHistory)
+
+ isOpen = false
+ currentRadial = nil
+end
+
+---Registers an item or array of items in the global radial menu.
+---@param items RadialMenuItem | RadialMenuItem[]
+function lib.addRadialItem(items)
+ local menuSize = #menuItems
+ local invokingResource = GetInvokingResource()
+
+ items = table.type(items) == 'array' and items or { items }
+
+ for i = 1, #items do
+ local item = items[i]
+ item.resource = invokingResource
+
+ if menuSize == 0 then
+ menuSize += 1
+ menuItems[menuSize] = item
+ else
+ for j = 1, menuSize do
+ if menuItems[j].id == item.id then
+ menuItems[j] = item
+ break
+ end
+
+ if j == menuSize then
+ menuSize += 1
+ menuItems[menuSize] = item
+ end
+ end
+ end
+ end
+
+ if isOpen and not currentRadial then
+ refreshRadial()
+ end
+end
+
+---Removes an item from the global radial menu with the given id.
+---@param id string
+function lib.removeRadialItem(id)
+ local menuItem
+
+ for i = 1, #menuItems do
+ menuItem = menuItems[i]
+
+ if menuItem.id == id then
+ table.remove(menuItems, i)
+ break
+ end
+ end
+
+ if not isOpen then return end
+
+ refreshRadial(id)
+end
+
+---Removes all items from the global radial menu.
+function lib.clearRadialItems()
+ table.wipe(menuItems)
+
+ if isOpen then
+ refreshRadial()
+ end
+end
+
+RegisterNUICallback('radialClick', function(index, cb)
+ cb(1)
+
+ local itemIndex = index + 1
+ local item, currentMenu
+
+ if currentRadial then
+ item = currentRadial.items[itemIndex]
+ currentMenu = currentRadial.id
+ else
+ item = menuItems[itemIndex]
+ end
+
+ local menuResource = currentRadial and currentRadial.resource or item.resource
+
+ if item.menu then
+ menuHistory[#menuHistory + 1] = { id = currentRadial and currentRadial.id, option = item.menu }
+ showRadial(item.menu)
+ elseif not item.keepOpen then
+ lib.hideRadial()
+ end
+
+ local onSelect = item.onSelect
+
+ if onSelect then
+ if type(onSelect) == 'string' then
+ return exports[menuResource][onSelect](0, currentMenu, itemIndex)
+ end
+
+ onSelect(currentMenu, itemIndex)
+ end
+end)
+
+RegisterNUICallback('radialBack', function(_, cb)
+ cb(1)
+
+ local numHistory = #menuHistory
+ local lastMenu = numHistory > 0 and menuHistory[numHistory]
+
+ if not lastMenu then return end
+
+ menuHistory[numHistory] = nil
+
+ if lastMenu.id then
+ return showRadial(lastMenu.id, lastMenu.option)
+ end
+
+ currentRadial = nil
+
+ -- Hide current menu and allow for transition
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = false
+ })
+
+ Wait(100)
+
+ -- If menu was closed during transition, don't open the submenu
+ if not isOpen then return end
+
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = {
+ items = menuItems,
+ option = lastMenu.option
+ }
+ })
+end)
+
+RegisterNUICallback('radialClose', function(_, cb)
+ cb(1)
+
+ if not isOpen then return end
+
+ lib.resetNuiFocus()
+
+ isOpen = false
+ currentRadial = nil
+end)
+
+RegisterNUICallback('radialTransition', function(_, cb)
+ Wait(100)
+
+ -- If menu was closed during transition, don't open the submenu
+ if not isOpen then return cb(false) end
+
+ cb(true)
+end)
+
+local isDisabled = false
+
+---Disallow players from opening the radial menu.
+---@param state boolean
+function lib.disableRadial(state)
+ isDisabled = state
+
+ if isOpen and state then
+ return lib.hideRadial()
+ end
+end
+
+lib.addKeybind({
+ name = 'ox_lib-radial',
+ description = locale('open_radial_menu'),
+ defaultKey = 'z',
+ onPressed = function()
+ if isDisabled then return end
+
+ if isOpen then
+ return lib.hideRadial()
+ end
+
+ if #menuItems == 0 or IsNuiFocused() or IsPauseMenuActive() then return end
+
+ isOpen = true
+
+ SendNUIMessage({
+ action = 'openRadialMenu',
+ data = {
+ items = menuItems
+ }
+ })
+
+ lib.setNuiFocus(true)
+ SetCursorLocation(0.5, 0.5)
+
+ while isOpen do
+ DisablePlayerFiring(cache.playerId, true)
+ DisableControlAction(0, 1, true)
+ DisableControlAction(0, 2, true)
+ DisableControlAction(0, 142, true)
+ DisableControlAction(2, 199, true)
+ DisableControlAction(2, 200, true)
+ Wait(0)
+ end
+ end,
+ -- onReleased = lib.hideRadial,
+})
+
+AddEventHandler('onClientResourceStop', function(resource)
+ for i = #menuItems, 1, -1 do
+ local item = menuItems[i]
+
+ if item.resource == resource then
+ table.remove(menuItems, i)
+ end
+ end
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/skillcheck.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/skillcheck.lua
new file mode 100644
index 000000000..39f6171dd
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/skillcheck.lua
@@ -0,0 +1,55 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@type promise?
+local skillcheck
+
+---@alias SkillCheckDifficulity 'easy' | 'medium' | 'hard' | { areaSize: number, speedMultiplier: number }
+
+---@param difficulty SkillCheckDifficulity | SkillCheckDifficulity[]
+---@param inputs string[]?
+---@return boolean?
+function lib.skillCheck(difficulty, inputs)
+ if skillcheck then return end
+ skillcheck = promise:new()
+
+ lib.setNuiFocus(false, true)
+ SendNUIMessage({
+ action = 'startSkillCheck',
+ data = {
+ difficulty = difficulty,
+ inputs = inputs
+ }
+ })
+
+ return Citizen.Await(skillcheck)
+end
+
+function lib.cancelSkillCheck()
+ if not skillcheck then
+ error('No skillCheck is active')
+ end
+
+ SendNUIMessage({action = 'skillCheckCancel'})
+end
+
+---@return boolean
+function lib.skillCheckActive()
+ return skillcheck ~= nil
+end
+
+RegisterNUICallback('skillCheckOver', function(success, cb)
+ cb(1)
+
+ if skillcheck then
+ lib.resetNuiFocus()
+
+ skillcheck:resolve(success)
+ skillcheck = nil
+ end
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/textui.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/textui.lua
new file mode 100644
index 000000000..38897407b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/client/textui.lua
@@ -0,0 +1,49 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@class TextUIOptions
+---@field position? 'right-center' | 'left-center' | 'top-center' | 'bottom-center';
+---@field icon? string | {[1]: IconProp, [2]: string};
+---@field iconColor? string;
+---@field style? string | table;
+---@field alignIcon? 'top' | 'center';
+
+local isOpen = false
+local currentText
+
+---@param text string
+---@param options? TextUIOptions
+function lib.showTextUI(text, options)
+ if currentText == text then return end
+
+ if not options then options = {} end
+
+ options.text = text
+ currentText = text
+
+ SendNUIMessage({
+ action = 'textUi',
+ data = options
+ })
+
+ isOpen = true
+end
+
+function lib.hideTextUI()
+ SendNUIMessage({
+ action = 'textUiHide'
+ })
+
+ isOpen = false
+ currentText = nil
+end
+
+---@return boolean, string | nil
+function lib.isTextUIOpen()
+ return isOpen, currentText
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/server/txadmin.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/server/txadmin.lua
new file mode 100644
index 000000000..4e3a35fd2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/interface/server/txadmin.lua
@@ -0,0 +1,52 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+if GetConvarInt('ox:txAdminNotifications', 0) == 0 then return end
+
+if GetConvarInt('txAdmin-hideDefaultAnnouncement', 0) == 1 then
+ AddEventHandler('txAdmin:events:announcement', function(eventData)
+ TriggerClientEvent('ox_lib:notify', -1, {
+ id = 'txAdmin:announcement',
+ title = locale('txadmin_announcement', eventData.author),
+ description = eventData.message,
+ duration = 5000
+ })
+ end)
+end
+
+if GetConvarInt('txAdmin-hideDefaultDirectMessage', 0) == 1 then
+ AddEventHandler('txAdmin:events:playerDirectMessage', function(eventData)
+ TriggerClientEvent('ox_lib:notify', eventData.target, {
+ id = 'txAdmin:playerDirectMessage',
+ title = locale('txadmin_dm', eventData.author),
+ description = eventData.message,
+ duration = 5000
+ })
+ end)
+end
+
+if GetConvarInt('txAdmin-hideDefaultWarning', 0) == 1 then
+ AddEventHandler('txAdmin:events:playerWarned', function(eventData)
+ TriggerClientEvent('ox_lib:alertDialog', eventData.target, {
+ header = locale('txadmin_warn', eventData.author),
+ content = locale('txadmin_warn_content', eventData.reason, eventData.actionId),
+ centered = true
+ })
+ end)
+end
+
+if GetConvarInt('txAdmin-hideDefaultScheduledRestartWarning', 0) == 1 then
+ AddEventHandler('txAdmin:events:scheduledRestart', function(eventData)
+ TriggerClientEvent('ox_lib:notify', -1, {
+ id = 'txAdmin:scheduledRestart',
+ title = locale('txadmin_scheduledrestart'),
+ description = eventData.translatedMessage,
+ duration = 5000
+ })
+ end)
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/client.lua
new file mode 100644
index 000000000..2a3e06181
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/client.lua
@@ -0,0 +1,38 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local settings = require 'resource.settings'
+
+local function loadLocaleFile(key)
+ local file = LoadResourceFile(cache.resource, ('locales/%s.json'):format(key))
+ or LoadResourceFile(cache.resource, 'locales/en.json')
+
+ return file and json.decode(file) or {}
+end
+
+function lib.getLocaleKey() return settings.locale end
+
+---@param key string
+function lib.setLocale(key)
+ TriggerEvent('ox_lib:setLocale', key)
+ SendNUIMessage({
+ action = 'setLocale',
+ data = loadLocaleFile(key)
+ })
+end
+
+RegisterNUICallback('init', function(_, cb)
+ cb(1)
+
+ SendNUIMessage({
+ action = 'setLocale',
+ data = loadLocaleFile(settings.locale)
+ })
+end)
+
+lib.locale(settings.locale)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/server.lua
new file mode 100644
index 000000000..cae6edfed
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/locale/server.lua
@@ -0,0 +1,9 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+function lib.getLocaleKey() return GetConvar('ox:locale', 'en') end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/server.lua
new file mode 100644
index 000000000..99b62db68
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/server.lua
@@ -0,0 +1,14 @@
+local locales, localesN = lib.getFilesInDirectory('locales', '%.json')
+
+for i = 1, localesN do
+ local key = locales[i]
+ local value = key:gsub('%.json', '')
+ local label = (json.decode(LoadResourceFile(lib.name, ('locales/%s'):format(key)) or '') or '').language or value
+ locales[i] = { label = label, value = value }
+end
+
+table.sort(locales, function(a, b)
+ return a.label < b.label
+end)
+
+GlobalState['ox_lib:locales'] = locales
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/settings.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/settings.lua
new file mode 100644
index 000000000..7d0d8f87e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/settings.lua
@@ -0,0 +1,108 @@
+-- Some users have locale set from ox_lib v2
+if GetResourceKvpInt('reset_locale') ~= 1 then
+ DeleteResourceKvp('locale')
+ SetResourceKvpInt('reset_locale', 1)
+end
+
+---@generic T
+---@param fn fun(key): unknown
+---@param key string
+---@param default? T
+---@return T
+local function safeGetKvp(fn, key, default)
+ local ok, result = pcall(fn, key)
+
+ if not ok then
+ return DeleteResourceKvp(key)
+ end
+
+ return result or default
+end
+
+local settings = {
+ default_locale = GetConvar('ox:locale', 'en'),
+ notification_position = safeGetKvp(GetResourceKvpString, 'notification_position', 'top-right'),
+ notification_audio = safeGetKvp(GetResourceKvpInt, 'notification_audio') == 1
+}
+
+local userLocales = GetConvarInt('ox:userLocales', 1) == 1
+
+settings.locale = userLocales and safeGetKvp(GetResourceKvpString, 'locale') or settings.default_locale
+
+local function set(key, value)
+ if settings[key] == value then return false end
+
+ settings[key] = value
+ local valueType = type(value)
+
+ if valueType == 'nil' then
+ DeleteResourceKvp(key)
+ elseif valueType == 'string' then
+ SetResourceKvp(key, value)
+ elseif valueType == 'table' then
+ SetResourceKvp(key, json.encode(value))
+ elseif valueType == 'number' then
+ SetResourceKvpInt(key, value)
+ elseif valueType == 'boolean' then
+ SetResourceKvpInt(key, value and 1 or 0)
+ else
+ return false
+ end
+
+ return true
+end
+
+RegisterCommand('ox_lib', function()
+ local inputSettings = {
+ {
+ type = 'checkbox',
+ label = locale('ui.settings.notification_audio'),
+ checked = settings.notification_audio,
+ },
+ {
+ type = 'select',
+ label = locale('ui.settings.notification_position'),
+ options = {
+ { label = locale('ui.position.top-right'), value = 'top-right' },
+ { label = locale('ui.position.top'), value = 'top' },
+ { label = locale('ui.position.top-left'), value = 'top-left' },
+ { label = locale('ui.position.center-right'), value = 'center-right' },
+ { label = locale('ui.position.center-left'), value = 'center-left' },
+ { label = locale('ui.position.bottom-right'), value = 'bottom-right' },
+ { label = locale('ui.position.bottom'), value = 'bottom' },
+ { label = locale('ui.position.bottom-left'), value = 'bottom-left' },
+ },
+ default = settings.notification_position,
+ required = true,
+ icon = 'message',
+ },
+ }
+
+ if userLocales then
+ table.insert(inputSettings,
+ {
+ type = 'select',
+ label = locale('ui.settings.locale'),
+ searchable = true,
+ description = locale('ui.settings.locale_description', settings.locale),
+ options = GlobalState['ox_lib:locales'],
+ default = settings.locale,
+ required = true,
+ icon = 'book',
+ })
+ end
+
+ local input = lib.inputDialog(locale('settings'), inputSettings) --[[@as table?]]
+
+ if not input then return end
+
+ ---@type boolean, string, string
+ local notification_audio, notification_position, locale = table.unpack(input)
+
+ if userLocales and set('locale', locale) then lib.setLocale(locale) end
+
+ set('notification_position', notification_position)
+ set('notification_audio', notification_audio)
+end)
+
+return settings
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/client.lua
new file mode 100644
index 000000000..320778909
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/client.lua
@@ -0,0 +1,656 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+if cache.game == 'redm' then return end
+
+---@class VehicleProperties
+---@field model? number
+---@field plate? string
+---@field plateIndex? number
+---@field bodyHealth? number
+---@field engineHealth? number
+---@field tankHealth? number
+---@field fuelLevel? number
+---@field oilLevel? number
+---@field dirtLevel? number
+---@field paintType1? number
+---@field paintType2? number
+---@field color1? number | number[]
+---@field color2? number | number[]
+---@field pearlescentColor? number
+---@field interiorColor? number
+---@field dashboardColor? number
+---@field wheelColor? number
+---@field wheelWidth? number
+---@field wheelSize? number
+---@field wheels? number
+---@field windowTint? number
+---@field xenonColor? number
+---@field neonEnabled? boolean[]
+---@field neonColor? number | number[]
+---@field extras? table
+---@field tyreSmokeColor? number | number[]
+---@field modSpoilers? number
+---@field modFrontBumper? number
+---@field modRearBumper? number
+---@field modSideSkirt? number
+---@field modExhaust? number
+---@field modFrame? number
+---@field modGrille? number
+---@field modHood? number
+---@field modFender? number
+---@field modRightFender? number
+---@field modRoof? number
+---@field modEngine? number
+---@field modBrakes? number
+---@field modTransmission? number
+---@field modHorns? number
+---@field modSuspension? number
+---@field modArmor? number
+---@field modNitrous? number
+---@field modTurbo? boolean
+---@field modSubwoofer? boolean
+---@field modSmokeEnabled? boolean
+---@field modHydraulics? boolean
+---@field modXenon? boolean
+---@field modFrontWheels? number
+---@field modBackWheels? number
+---@field modCustomTiresF? boolean
+---@field modCustomTiresR? boolean
+---@field modPlateHolder? number
+---@field modVanityPlate? number
+---@field modTrimA? number
+---@field modOrnaments? number
+---@field modDashboard? number
+---@field modDial? number
+---@field modDoorSpeaker? number
+---@field modSeats? number
+---@field modSteeringWheel? number
+---@field modShifterLeavers? number
+---@field modAPlate? number
+---@field modSpeakers? number
+---@field modTrunk? number
+---@field modHydrolic? number
+---@field modEngineBlock? number
+---@field modAirFilter? number
+---@field modStruts? number
+---@field modArchCover? number
+---@field modAerials? number
+---@field modTrimB? number
+---@field modTank? number
+---@field modWindows? number
+---@field modDoorR? number
+---@field modLivery? number
+---@field modRoofLivery? number
+---@field modLightbar? number
+---@field livery? number
+---@field windows? number[]
+---@field doors? number[]
+---@field tyres? table
+---@field bulletProofTyres? boolean
+---@field driftTyres? boolean
+
+---@deprecated
+---Not recommended. Entity owners can change rapidly and sporadically.
+RegisterNetEvent('ox_lib:setVehicleProperties', function(netid, data)
+ local timeout = 100
+ while not NetworkDoesEntityExistWithNetworkId(netid) and timeout > 0 do
+ Wait(0)
+ timeout -= 1
+ end
+ if timeout > 0 then
+ lib.setVehicleProperties(NetToVeh(netid), data)
+ end
+end)
+
+AddStateBagChangeHandler('ox_lib:setVehicleProperties', '', function(bagName, _, value)
+ if not value or not GetEntityFromStateBagName then return end
+
+ while NetworkIsInTutorialSession() do Wait(0) end
+
+ local entityExists, entity = pcall(lib.waitFor, function()
+ local entity = GetEntityFromStateBagName(bagName)
+
+ if entity > 0 then return entity end
+ end, '', 10000)
+
+ if not entityExists then return end
+
+ lib.setVehicleProperties(entity, value)
+ Wait(200)
+
+ -- this delay and second-setting of vehicle properties hopefully counters the
+ -- weird sync/ownership/shitfuckery when setting props on server-side vehicles
+ if NetworkGetEntityOwner(entity) == cache.playerId then
+ lib.setVehicleProperties(entity, value)
+ Entity(entity).state:set('ox_lib:setVehicleProperties', nil, true)
+ end
+end)
+
+local gameBuild = GetGameBuildNumber()
+
+---@param vehicle number
+---@return VehicleProperties?
+function lib.getVehicleProperties(vehicle)
+ if DoesEntityExist(vehicle) then
+ ---@type number | number[], number | number[]
+ local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
+ local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
+ local paintType1 = GetVehicleModColor_1(vehicle)
+ local paintType2 = GetVehicleModColor_2(vehicle)
+
+ if GetIsVehiclePrimaryColourCustom(vehicle) then
+ colorPrimary = { GetVehicleCustomPrimaryColour(vehicle) }
+ end
+
+ if GetIsVehicleSecondaryColourCustom(vehicle) then
+ colorSecondary = { GetVehicleCustomSecondaryColour(vehicle) }
+ end
+
+ local extras = {}
+
+ for i = 1, 15 do
+ if DoesExtraExist(vehicle, i) then
+ extras[i] = IsVehicleExtraTurnedOn(vehicle, i) and 0 or 1
+ end
+ end
+
+ local damage = {
+ windows = {},
+ doors = {},
+ tyres = {},
+ }
+
+ local windows = 0
+
+ for i = 0, 7 do
+ RollUpWindow(vehicle, i)
+
+ if not IsVehicleWindowIntact(vehicle, i) then
+ windows += 1
+ damage.windows[windows] = i
+ end
+ end
+
+ local doors = 0
+
+ for i = 0, 5 do
+ if IsVehicleDoorDamaged(vehicle, i) then
+ doors += 1
+ damage.doors[doors] = i
+ end
+ end
+
+ for i = 0, 7 do
+ if IsVehicleTyreBurst(vehicle, i, false) then
+ damage.tyres[i] = IsVehicleTyreBurst(vehicle, i, true) and 2 or 1
+ end
+ end
+
+ local neons = {}
+
+ for i = 0, 3 do
+ neons[i + 1] = IsVehicleNeonLightEnabled(vehicle, i)
+ end
+
+ return {
+ model = GetEntityModel(vehicle),
+ plate = GetVehicleNumberPlateText(vehicle),
+ plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
+ bodyHealth = math.floor(GetVehicleBodyHealth(vehicle) + 0.5),
+ engineHealth = math.floor(GetVehicleEngineHealth(vehicle) + 0.5),
+ tankHealth = math.floor(GetVehiclePetrolTankHealth(vehicle) + 0.5),
+ fuelLevel = math.floor(GetVehicleFuelLevel(vehicle) + 0.5),
+ oilLevel = math.floor(GetVehicleOilLevel(vehicle) + 0.5),
+ dirtLevel = math.floor(GetVehicleDirtLevel(vehicle) + 0.5),
+ paintType1 = paintType1,
+ paintType2 = paintType2,
+ color1 = colorPrimary,
+ color2 = colorSecondary,
+ pearlescentColor = pearlescentColor,
+ interiorColor = GetVehicleInteriorColor(vehicle),
+ dashboardColor = GetVehicleDashboardColour(vehicle),
+ wheelColor = wheelColor,
+ wheelWidth = GetVehicleWheelWidth(vehicle),
+ wheelSize = GetVehicleWheelSize(vehicle),
+ wheels = GetVehicleWheelType(vehicle),
+ windowTint = GetVehicleWindowTint(vehicle),
+ xenonColor = GetVehicleXenonLightsColor(vehicle),
+ neonEnabled = neons,
+ neonColor = { GetVehicleNeonLightsColour(vehicle) },
+ extras = extras,
+ tyreSmokeColor = { GetVehicleTyreSmokeColor(vehicle) },
+ modSpoilers = GetVehicleMod(vehicle, 0),
+ modFrontBumper = GetVehicleMod(vehicle, 1),
+ modRearBumper = GetVehicleMod(vehicle, 2),
+ modSideSkirt = GetVehicleMod(vehicle, 3),
+ modExhaust = GetVehicleMod(vehicle, 4),
+ modFrame = GetVehicleMod(vehicle, 5),
+ modGrille = GetVehicleMod(vehicle, 6),
+ modHood = GetVehicleMod(vehicle, 7),
+ modFender = GetVehicleMod(vehicle, 8),
+ modRightFender = GetVehicleMod(vehicle, 9),
+ modRoof = GetVehicleMod(vehicle, 10),
+ modEngine = GetVehicleMod(vehicle, 11),
+ modBrakes = GetVehicleMod(vehicle, 12),
+ modTransmission = GetVehicleMod(vehicle, 13),
+ modHorns = GetVehicleMod(vehicle, 14),
+ modSuspension = GetVehicleMod(vehicle, 15),
+ modArmor = GetVehicleMod(vehicle, 16),
+ modNitrous = GetVehicleMod(vehicle, 17),
+ modTurbo = IsToggleModOn(vehicle, 18),
+ modSubwoofer = GetVehicleMod(vehicle, 19),
+ modSmokeEnabled = IsToggleModOn(vehicle, 20),
+ modHydraulics = IsToggleModOn(vehicle, 21),
+ modXenon = IsToggleModOn(vehicle, 22),
+ modFrontWheels = GetVehicleMod(vehicle, 23),
+ modBackWheels = GetVehicleMod(vehicle, 24),
+ modCustomTiresF = GetVehicleModVariation(vehicle, 23),
+ modCustomTiresR = GetVehicleModVariation(vehicle, 24),
+ modPlateHolder = GetVehicleMod(vehicle, 25),
+ modVanityPlate = GetVehicleMod(vehicle, 26),
+ modTrimA = GetVehicleMod(vehicle, 27),
+ modOrnaments = GetVehicleMod(vehicle, 28),
+ modDashboard = GetVehicleMod(vehicle, 29),
+ modDial = GetVehicleMod(vehicle, 30),
+ modDoorSpeaker = GetVehicleMod(vehicle, 31),
+ modSeats = GetVehicleMod(vehicle, 32),
+ modSteeringWheel = GetVehicleMod(vehicle, 33),
+ modShifterLeavers = GetVehicleMod(vehicle, 34),
+ modAPlate = GetVehicleMod(vehicle, 35),
+ modSpeakers = GetVehicleMod(vehicle, 36),
+ modTrunk = GetVehicleMod(vehicle, 37),
+ modHydrolic = GetVehicleMod(vehicle, 38),
+ modEngineBlock = GetVehicleMod(vehicle, 39),
+ modAirFilter = GetVehicleMod(vehicle, 40),
+ modStruts = GetVehicleMod(vehicle, 41),
+ modArchCover = GetVehicleMod(vehicle, 42),
+ modAerials = GetVehicleMod(vehicle, 43),
+ modTrimB = GetVehicleMod(vehicle, 44),
+ modTank = GetVehicleMod(vehicle, 45),
+ modWindows = GetVehicleMod(vehicle, 46),
+ modDoorR = GetVehicleMod(vehicle, 47),
+ modLivery = GetVehicleMod(vehicle, 48),
+ modRoofLivery = GetVehicleRoofLivery(vehicle),
+ modLightbar = GetVehicleMod(vehicle, 49),
+ livery = GetVehicleLivery(vehicle),
+ windows = damage.windows,
+ doors = damage.doors,
+ tyres = damage.tyres,
+ bulletProofTyres = GetVehicleTyresCanBurst(vehicle),
+ driftTyres = gameBuild >= 2372 and GetDriftTyresEnabled(vehicle),
+ -- no setters?
+ -- leftHeadlight = GetIsLeftVehicleHeadlightDamaged(vehicle),
+ -- rightHeadlight = GetIsRightVehicleHeadlightDamaged(vehicle),
+ -- frontBumper = IsVehicleBumperBrokenOff(vehicle, true),
+ -- rearBumper = IsVehicleBumperBrokenOff(vehicle, false),
+ }
+ end
+end
+
+---@param vehicle number
+---@param props VehicleProperties
+---@param fixVehicle? boolean Fix the vehicle after props have been set. Usually required when adding extras.
+---@return boolean isEntityOwner True if the entity is networked and the client is the current entity owner.
+function lib.setVehicleProperties(vehicle, props, fixVehicle)
+ if not DoesEntityExist(vehicle) then
+ error(("Unable to set vehicle properties for '%s' (entity does not exist)"):format(vehicle))
+ end
+
+ local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
+ local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
+
+ SetVehicleModKit(vehicle, 0)
+ -- SetVehicleAutoRepairDisabled(vehicle, true)
+
+ if props.extras then
+ for id, disable in pairs(props.extras) do
+ SetVehicleExtra(vehicle, tonumber(id) --[[@as number]], disable == 1)
+ end
+ end
+
+ if props.plate then
+ SetVehicleNumberPlateText(vehicle, props.plate)
+ end
+
+ if props.plateIndex then
+ SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
+ end
+
+ if props.bodyHealth then
+ SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
+ end
+
+ if props.engineHealth then
+ SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
+ end
+
+ if props.tankHealth then
+ SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0)
+ end
+
+ if props.fuelLevel then
+ SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
+ end
+
+ if props.oilLevel then
+ SetVehicleOilLevel(vehicle, props.oilLevel + 0.0)
+ end
+
+ if props.dirtLevel then
+ SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
+ end
+
+ if props.color1 then
+ if type(props.color1) == 'number' then
+ ClearVehicleCustomPrimaryColour(vehicle)
+ SetVehicleColours(vehicle, props.color1 --[[@as number]], colorSecondary --[[@as number]])
+ else
+ if props.paintType1 then SetVehicleModColor_1(vehicle, props.paintType1, 0, props.pearlescentColor or 0) end
+
+ SetVehicleCustomPrimaryColour(vehicle, props.color1[1], props.color1[2], props.color1[3])
+ end
+ end
+
+ if props.color2 then
+ if type(props.color2) == 'number' then
+ ClearVehicleCustomSecondaryColour(vehicle)
+ SetVehicleColours(vehicle, props.color1 or colorPrimary --[[@as number]], props.color2 --[[@as number]])
+ else
+ if props.paintType2 then SetVehicleModColor_2(vehicle, props.paintType2, 0) end
+
+ SetVehicleCustomSecondaryColour(vehicle, props.color2[1], props.color2[2], props.color2[3])
+ end
+ end
+
+ if props.pearlescentColor or props.wheelColor then
+ SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor or wheelColor)
+ end
+
+ if props.interiorColor then
+ SetVehicleInteriorColor(vehicle, props.interiorColor)
+ end
+
+ if props.dashboardColor then
+ SetVehicleDashboardColor(vehicle, props.dashboardColor)
+ end
+
+ if props.wheels then
+ SetVehicleWheelType(vehicle, props.wheels)
+ end
+
+ if props.wheelSize then
+ SetVehicleWheelSize(vehicle, props.wheelSize)
+ end
+
+ if props.wheelWidth then
+ SetVehicleWheelWidth(vehicle, props.wheelWidth)
+ end
+
+ if props.windowTint then
+ SetVehicleWindowTint(vehicle, props.windowTint)
+ end
+
+ if props.neonEnabled then
+ for i = 1, #props.neonEnabled do
+ SetVehicleNeonLightEnabled(vehicle, i - 1, props.neonEnabled[i])
+ end
+ end
+
+ if props.windows then
+ for i = 1, #props.windows do
+ RemoveVehicleWindow(vehicle, props.windows[i])
+ end
+ end
+
+ if props.doors then
+ for i = 1, #props.doors do
+ SetVehicleDoorBroken(vehicle, props.doors[i], true)
+ end
+ end
+
+ if props.tyres then
+ for tyre, state in pairs(props.tyres) do
+ SetVehicleTyreBurst(vehicle, tonumber(tyre) --[[@as number]], state == 2, 1000.0)
+ end
+ end
+
+ if props.neonColor then
+ SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
+ end
+
+ if props.modSmokeEnabled ~= nil then
+ ToggleVehicleMod(vehicle, 20, props.modSmokeEnabled)
+ end
+
+ if props.tyreSmokeColor then
+ SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
+ end
+
+ if props.modSpoilers then
+ SetVehicleMod(vehicle, 0, props.modSpoilers, false)
+ end
+
+ if props.modFrontBumper then
+ SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
+ end
+
+ if props.modRearBumper then
+ SetVehicleMod(vehicle, 2, props.modRearBumper, false)
+ end
+
+ if props.modSideSkirt then
+ SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
+ end
+
+ if props.modExhaust then
+ SetVehicleMod(vehicle, 4, props.modExhaust, false)
+ end
+
+ if props.modFrame then
+ SetVehicleMod(vehicle, 5, props.modFrame, false)
+ end
+
+ if props.modGrille then
+ SetVehicleMod(vehicle, 6, props.modGrille, false)
+ end
+
+ if props.modHood then
+ SetVehicleMod(vehicle, 7, props.modHood, false)
+ end
+
+ if props.modFender then
+ SetVehicleMod(vehicle, 8, props.modFender, false)
+ end
+
+ if props.modRightFender then
+ SetVehicleMod(vehicle, 9, props.modRightFender, false)
+ end
+
+ if props.modRoof then
+ SetVehicleMod(vehicle, 10, props.modRoof, false)
+ end
+
+ if props.modEngine then
+ SetVehicleMod(vehicle, 11, props.modEngine, false)
+ end
+
+ if props.modBrakes then
+ SetVehicleMod(vehicle, 12, props.modBrakes, false)
+ end
+
+ if props.modTransmission then
+ SetVehicleMod(vehicle, 13, props.modTransmission, false)
+ end
+
+ if props.modHorns then
+ SetVehicleMod(vehicle, 14, props.modHorns, false)
+ end
+
+ if props.modSuspension then
+ SetVehicleMod(vehicle, 15, props.modSuspension, false)
+ end
+
+ if props.modArmor then
+ SetVehicleMod(vehicle, 16, props.modArmor, false)
+ end
+
+ if props.modNitrous then
+ SetVehicleMod(vehicle, 17, props.modNitrous, false)
+ end
+
+ if props.modTurbo ~= nil then
+ ToggleVehicleMod(vehicle, 18, props.modTurbo)
+ end
+
+ if props.modSubwoofer ~= nil then
+ ToggleVehicleMod(vehicle, 19, props.modSubwoofer)
+ end
+
+ if props.modHydraulics ~= nil then
+ ToggleVehicleMod(vehicle, 21, props.modHydraulics)
+ end
+
+ if props.modXenon ~= nil then
+ ToggleVehicleMod(vehicle, 22, props.modXenon)
+ end
+
+ if props.xenonColor then
+ SetVehicleXenonLightsColor(vehicle, props.xenonColor)
+ end
+
+ if props.modFrontWheels then
+ SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF)
+ end
+
+ if props.modBackWheels then
+ SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR)
+ end
+
+ if props.modPlateHolder then
+ SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
+ end
+
+ if props.modVanityPlate then
+ SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
+ end
+
+ if props.modTrimA then
+ SetVehicleMod(vehicle, 27, props.modTrimA, false)
+ end
+
+ if props.modOrnaments then
+ SetVehicleMod(vehicle, 28, props.modOrnaments, false)
+ end
+
+ if props.modDashboard then
+ SetVehicleMod(vehicle, 29, props.modDashboard, false)
+ end
+
+ if props.modDial then
+ SetVehicleMod(vehicle, 30, props.modDial, false)
+ end
+
+ if props.modDoorSpeaker then
+ SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
+ end
+
+ if props.modSeats then
+ SetVehicleMod(vehicle, 32, props.modSeats, false)
+ end
+
+ if props.modSteeringWheel then
+ SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
+ end
+
+ if props.modShifterLeavers then
+ SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
+ end
+
+ if props.modAPlate then
+ SetVehicleMod(vehicle, 35, props.modAPlate, false)
+ end
+
+ if props.modSpeakers then
+ SetVehicleMod(vehicle, 36, props.modSpeakers, false)
+ end
+
+ if props.modTrunk then
+ SetVehicleMod(vehicle, 37, props.modTrunk, false)
+ end
+
+ if props.modHydrolic then
+ SetVehicleMod(vehicle, 38, props.modHydrolic, false)
+ end
+
+ if props.modEngineBlock then
+ SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
+ end
+
+ if props.modAirFilter then
+ SetVehicleMod(vehicle, 40, props.modAirFilter, false)
+ end
+
+ if props.modStruts then
+ SetVehicleMod(vehicle, 41, props.modStruts, false)
+ end
+
+ if props.modArchCover then
+ SetVehicleMod(vehicle, 42, props.modArchCover, false)
+ end
+
+ if props.modAerials then
+ SetVehicleMod(vehicle, 43, props.modAerials, false)
+ end
+
+ if props.modTrimB then
+ SetVehicleMod(vehicle, 44, props.modTrimB, false)
+ end
+
+ if props.modTank then
+ SetVehicleMod(vehicle, 45, props.modTank, false)
+ end
+
+ if props.modWindows then
+ SetVehicleMod(vehicle, 46, props.modWindows, false)
+ end
+
+ if props.modDoorR then
+ SetVehicleMod(vehicle, 47, props.modDoorR, false)
+ end
+
+ if props.modLivery then
+ SetVehicleMod(vehicle, 48, props.modLivery, false)
+ end
+
+ if props.modRoofLivery then
+ SetVehicleRoofLivery(vehicle, props.modRoofLivery)
+ end
+
+ if props.modLightbar then
+ SetVehicleMod(vehicle, 49, props.modLightbar, false)
+ end
+
+ if props.livery then
+ SetVehicleLivery(vehicle, props.livery)
+ end
+
+ if props.bulletProofTyres ~= nil then
+ SetVehicleTyresCanBurst(vehicle, props.bulletProofTyres)
+ end
+
+ if gameBuild >= 2372 and props.driftTyres then
+ SetDriftTyresEnabled(vehicle, true)
+ end
+
+ if fixVehicle then
+ SetVehicleFixed(vehicle)
+ end
+
+ return not NetworkGetEntityIsNetworked(vehicle) or NetworkGetEntityOwner(vehicle) == cache.playerId
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/server.lua
new file mode 100644
index 000000000..92640e3cd
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/vehicleProperties/server.lua
@@ -0,0 +1,14 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+---@param vehicle number
+---@param props VehicleProperties
+---@diagnostic disable-next-line: duplicate-set-field
+function lib.setVehicleProperties(vehicle, props)
+ Entity(vehicle).state:set('ox_lib:setVehicleProperties', props, true)
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/server.lua
new file mode 100644
index 000000000..0cd3cd2a0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/server.lua
@@ -0,0 +1,46 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+function lib.versionCheck(repository)
+ local resource = GetInvokingResource() or GetCurrentResourceName()
+
+ local currentVersion = GetResourceMetadata(resource, 'version', 0)
+
+ if currentVersion then
+ currentVersion = currentVersion:match('%d+%.%d+%.%d+')
+ end
+
+ if not currentVersion then return print(("^1Unable to determine current resource version for '%s' ^0"):format(resource)) end
+
+ SetTimeout(1000, function()
+ PerformHttpRequest(('https://api.github.com/repos/%s/releases/latest'):format(repository), function(status, response)
+ if status ~= 200 then return end
+
+ response = json.decode(response)
+ if response.prerelease then return end
+
+ local latestVersion = response.tag_name:match('%d+%.%d+%.%d+')
+ if not latestVersion or latestVersion == currentVersion then return end
+
+ local cv = { string.strsplit('.', currentVersion) }
+ local lv = { string.strsplit('.', latestVersion) }
+
+ for i = 1, #cv do
+ local current, minimum = tonumber(cv[i]), tonumber(lv[i])
+
+ if current ~= minimum then
+ if current < minimum then
+ return print(('^3An update is available for %s (current version: %s)\r\n%s^0'):format(resource, currentVersion, response.html_url))
+ else break end
+ end
+ end
+ end, 'GET')
+ end)
+end
+
+lib.versionCheck('overextended/ox_lib')
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/shared.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/shared.lua
new file mode 100644
index 000000000..bc61d72ce
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/version/shared.lua
@@ -0,0 +1,34 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+function lib.checkDependency(resource, minimumVersion, printMessage)
+ local currentVersion = GetResourceMetadata(resource, 'version', 0)
+ currentVersion = currentVersion and currentVersion:match('%d+%.%d+%.%d+') or 'unknown'
+
+ if currentVersion ~= minimumVersion then
+ local cv = { string.strsplit('.', currentVersion) }
+ local mv = { string.strsplit('.', minimumVersion) }
+ local msg = ("^1%s requires version '%s' of '%s' (current version: %s)^0"):format(GetInvokingResource() or GetCurrentResourceName(), minimumVersion, resource, currentVersion)
+
+ for i = 1, #cv do
+ local current, minimum = tonumber(cv[i]), tonumber(mv[i])
+
+ if current ~= minimum then
+ if not current or current < minimum then
+ if printMessage then
+ return print(msg)
+ end
+
+ return false, msg
+ else break end
+ end
+ end
+ end
+
+ return true
+end
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/client.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/client.lua
new file mode 100644
index 000000000..2c2a85a6c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/client.lua
@@ -0,0 +1,505 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local creatorActive = false
+local controlsActive = false
+local zoneType, step, xCoord, yCoord, zCoord, heading, height, width, length
+local steps = {{0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 25, 50, 100}, {0.25, 0.5, 1, 2.5, 5, 15, 30, 45, 60, 90, 180}}
+local points = {}
+local format = 'array'
+local displayModes = {'basic', 'walls', 'axes', 'full'}
+local displayMode = 1
+local minCheck = steps[1][1] / 2
+local lastZone = {}
+local alignMovementWithCamera = false
+local useLastZoneFalsyInputs = {['0'] = true, [''] = true, ['false'] = true, ['nil'] = true}
+
+local function firstToUpper(str)
+ return (str:gsub('^%l', string.upper))
+end
+
+local function updateText()
+ local text = {
+ ('------ Creating %s Zone ------ \n'):format(firstToUpper(zoneType)),
+ ('Step size [Scroll]: %sm/%s° \n'):format(steps[1][step], steps[2][step]),
+ ('X coord [A/D]: %s \n'):format(xCoord),
+ ('Y coord [W/S]: %s \n'):format(yCoord),
+ ('Z coord [R/F]: %s \n'):format(zCoord),
+ }
+
+ if zoneType == 'poly' then
+ text[#text + 1] = ('Height [Shift + Scroll]: %s \n'):format(height)
+ text[#text + 1] = ('Cycle display mode [G]: %s \n'):format(firstToUpper(displayModes[displayMode]))
+ text[#text + 1] = ('Toggle Axis mode [C]: %s \n'):format(alignMovementWithCamera and 'Camera' or 'Grid')
+ text[#text + 1] = 'Create new point - [Space] \n'
+ text[#text + 1] = 'Edit last point - [Backspace] \n'
+ elseif zoneType == 'box' then
+ text[#text + 1] = ('Heading [Q/E]: %s° \n'):format(heading)
+ text[#text + 1] = ('Height [Shift + Scroll]: %s \n'):format(height)
+ text[#text + 1] = ('Width [Ctrl + Scroll]: %s \n'):format(width)
+ text[#text + 1] = ('Length [Alt + Scroll]: %s \n'):format(length)
+ text[#text + 1] = ('Cycle display mode [G]: %s \n'):format(firstToUpper(displayModes[displayMode]))
+ text[#text + 1] = ('Toggle Axis mode [C]: %s \n'):format(alignMovementWithCamera and 'Camera' or 'Grid')
+ text[#text + 1] = 'Recenter - [Space] \n'
+ elseif zoneType == 'sphere' then
+ text[#text + 1] = ('Size [Shift + Scroll]: %s \n'):format(height)
+ text[#text + 1] = ('Toggle Axis mode [C]: %s \n'):format(alignMovementWithCamera and 'Camera' or 'Grid')
+ text[#text + 1] = 'Recenter - [Space] \n'
+ end
+
+ text[#text + 1] = 'Toggle controls - [X] \n'
+ text[#text + 1] = 'Save - [Enter] \n'
+ text[#text + 1] = 'Cancel - [Esc]'
+
+ lib.showTextUI(table.concat(text))
+end
+
+local function round(number)
+ return number >= 0 and math.floor(number + 0.5) or math.ceil(number - 0.5)
+end
+
+local function closeCreator(cancel)
+ if not cancel then
+ if zoneType == 'poly' then
+ points[#points + 1] = vec(xCoord, yCoord)
+ end
+
+ ---@type string[]?
+ local input = lib.inputDialog(('Name your %s Zone'):format(firstToUpper(zoneType)), {
+ { type = 'input', label = 'Name', placeholder = 'none' },
+ { type = 'select', label = 'Format', default = format, options = {
+ { value = 'function', label = 'Function' },
+ { value = 'array', label = 'Array' },
+ { value = 'target', label = 'Target'},
+ }}
+ })
+
+ if not input then return end
+
+ format = input[2]
+
+ TriggerServerEvent('ox_lib:saveZone', {
+ zoneType = zoneType,
+ name = input[1] or 'none',
+ format = format,
+ xCoord = xCoord,
+ yCoord = yCoord,
+ zCoord = zCoord,
+ heading = heading,
+ height = height,
+ width = width,
+ length = length,
+ points = points
+ })
+
+ lastZone[zoneType] = {
+ zoneType = zoneType,
+ heading = heading,
+ height = height,
+ width = width,
+ length = length,
+ }
+ end
+
+ creatorActive = false
+ controlsActive = false
+ lib.hideTextUI()
+ zoneType = nil
+end
+
+local function drawRectangle(rec)
+ DrawPoly(rec[1].x, rec[1].y, rec[1].z, rec[2].x, rec[2].y, rec[2].z, rec[3].x, rec[3].y, rec[3].z, 255, 42, 24, 100)
+ DrawPoly(rec[2].x, rec[2].y, rec[2].z, rec[1].x, rec[1].y, rec[1].z, rec[3].x, rec[3].y, rec[3].z, 255, 42, 24, 100)
+ DrawPoly(rec[1].x, rec[1].y, rec[1].z, rec[4].x, rec[4].y, rec[4].z, rec[3].x, rec[3].y, rec[3].z, 255, 42, 24, 100)
+ DrawPoly(rec[4].x, rec[4].y, rec[4].z, rec[1].x, rec[1].y, rec[1].z, rec[3].x, rec[3].y, rec[3].z, 255, 42, 24, 100)
+end
+
+local function drawLines()
+ local thickness = vec(0, 0, height / 2)
+ local activeA, activeB = vec(xCoord, yCoord, zCoord) + thickness, vec(xCoord, yCoord, zCoord) - thickness
+
+ if zoneType == 'poly' then
+ DrawLine(activeA.x, activeA.y, activeA.z, activeB.x, activeB.y, activeB.z, 255, 42, 24, 225)
+ end
+
+ for i = 1, #points do
+ points[i] = vec(points[i].x, points[i].y, zCoord)
+ local a = points[i] + thickness
+ local b = points[i] - thickness
+ local c = (points[i + 1] and vec(points[i + 1].x, points[i + 1].y, zCoord) or points[1]) + thickness
+ local d = (points[i + 1] and vec(points[i + 1].x, points[i + 1].y, zCoord) or points[1]) - thickness
+ local e = points[i]
+ local f = (points[i + 1] and vec(points[i + 1].x, points[i + 1].y, zCoord) or points[1])
+
+ if i == #points and zoneType == 'poly' then
+ DrawLine(a.x, a.y, a.z, b.x, b.y, b.z, 255, 42, 24, 225)
+ DrawLine(activeA.x, activeA.y, activeA.z, c.x, c.y, c.z, 255, 42, 24, 225)
+ DrawLine(activeB.x, activeB.y, activeB.z, d.x, d.y, d.z, 255, 42, 24, 225)
+ DrawLine(a.x, a.y, a.z, activeA.x, activeA.y, activeA.z, 255, 42, 24, 225)
+ DrawLine(b.x, b.y, b.z, activeB.x, activeB.y, activeB.z, 255, 42, 24, 225)
+ DrawLine(xCoord, yCoord, zCoord, f.x, f.y, f.z, 255, 42, 24, 225)
+ DrawLine(e.x, e.y, e.z, xCoord, yCoord, zCoord, 255, 42, 24, 225)
+ else
+ DrawLine(a.x, a.y, a.z, b.x, b.y, b.z, 255, 42, 24, 225)
+ DrawLine(a.x, a.y, a.z, c.x, c.y, c.z, 255, 42, 24, 225)
+ DrawLine(b.x, b.y, b.z, d.x, d.y, d.z, 255, 42, 24, 225)
+ DrawLine(e.x, e.y, e.z, f.x, f.y, f.z, 255, 42, 24, 225)
+ end
+
+ if displayMode == 2 or displayMode == 4 then
+ if i == #points and zoneType == 'poly' then
+ drawRectangle({a, b, activeB, activeA})
+ drawRectangle({activeA, activeB, d, c})
+ else
+ drawRectangle({a, b, d, c})
+ end
+ end
+ end
+end
+
+local function getRelativePos(origin, point, theta)
+ if theta == 0.0 then return point end
+ local p = point - origin
+ local pX, pY = p.x, p.y
+ theta = math.rad(theta)
+ local cosTheta = math.cos(theta)
+ local sinTheta = math.sin(theta)
+ local x = math.floor(((pX * cosTheta - pY * sinTheta) + origin.x) * 100 + 0.0) / 100
+ local y = math.floor(((pX * sinTheta + pY * cosTheta) + origin.y) * 100 + 0.0) / 100
+ return x, y
+end
+
+local isFivem = cache.game == 'fivem'
+local controls = {
+ ['INPUT_LOOK_LR'] = isFivem and 1 or 0xA987235F,
+ ['INPUT_LOOK_UD'] = isFivem and 2 or 0xD2047988,
+ ['INPUT_MP_TEXT_CHAT_ALL'] = isFivem and 245 or 0x9720FCEE
+}
+
+local function startCreator(arg, useLast)
+ creatorActive = true
+ controlsActive = true
+ zoneType = arg
+
+ step = 5
+ local coords = GetEntityCoords(cache.ped)
+ xCoord = round(coords.x) + 0.0
+ yCoord = round(coords.y) + 0.0
+ zCoord = round(coords.z) + 0.0
+ heading = useLast and lastZone[zoneType].heading or 0.0
+ height = useLast and lastZone[zoneType].height or 4.0
+ width = useLast and lastZone[zoneType].width or 4.0
+ length = useLast and lastZone[zoneType].length or 4.0
+ points = {}
+
+ updateText()
+
+ while creatorActive do
+ Wait(0)
+
+ if IsDisabledControlJustReleased(0, 73) then -- x
+ controlsActive = not controlsActive
+ end
+
+ if displayMode == 3 or displayMode == 4 then
+ if alignMovementWithCamera then
+ local rightX, rightY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord + 2, yCoord), GetGameplayCamRot(2).z)
+ local forwardX, forwardY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord, yCoord + 2), GetGameplayCamRot(2).z)
+
+ DrawLine(xCoord, yCoord, zCoord, rightX, rightY or 0, zCoord, 0, 255, 0, 225)
+ DrawLine(xCoord, yCoord, zCoord, forwardX, forwardY or 0, zCoord, 0, 255, 0, 225)
+ end
+
+ DrawLine(xCoord, yCoord, zCoord, xCoord + 2, yCoord, zCoord, 0, 0, 255, 225)
+ DrawLine(xCoord, yCoord, zCoord, xCoord, yCoord + 2, zCoord, 0, 0, 255, 225)
+ DrawLine(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord + 2, 0, 0, 255, 225)
+ end
+
+ if zoneType == 'poly' then
+ drawLines()
+ elseif zoneType == 'box' then
+ local rad = math.rad(-heading)
+ local sinH = math.sin(rad)
+ local cosH = math.cos(rad)
+ local center = vec2(xCoord, yCoord)
+ ---@type vector2[]
+ points = {
+ center + vec2((width * cosH + length * sinH), (length * cosH - width * sinH)) / 2,
+ center + vec2(-(width * cosH - length * sinH), (length * cosH + width * sinH)) / 2,
+ center + vec2(-(width * cosH + length * sinH), -(length * cosH - width * sinH)) / 2,
+ center + vec2((width * cosH - length * sinH), -(length * cosH + width * sinH)) / 2,
+ }
+
+ drawLines()
+ elseif zoneType == 'sphere' then
+ ---@diagnostic disable-next-line: param-type-mismatch
+ DrawMarker(28, xCoord, yCoord, zCoord, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, height, height, height, 255, 42, 24, 100, false, false, 0, false, false, false, false)
+ end
+
+ if controlsActive then
+ DisableAllControlActions(0)
+ EnableControlAction(0, controls['INPUT_LOOK_LR'], true)
+ EnableControlAction(0, controls['INPUT_LOOK_UD'], true)
+ EnableControlAction(0, controls['INPUT_MP_TEXT_CHAT_ALL'], true)
+
+ local change = false
+ local lStep = steps[1][step]
+ local rStep = steps[2][step]
+
+ if IsDisabledControlJustReleased(0, 17) then -- scroll up
+ if IsDisabledControlPressed(0, 21) then -- shift held down
+ change = true
+ height += lStep
+ elseif IsDisabledControlPressed(0, 36) then -- ctrl held down
+ change = true
+ width += lStep
+ elseif IsDisabledControlPressed(0, 19) then -- alt held down
+ change = true
+ length += lStep
+ elseif step < 11 then
+ change = true
+ step += 1
+ end
+ elseif IsDisabledControlJustReleased(0, 16) then -- scroll down
+ if IsDisabledControlPressed(0, 21) then -- shift held down
+ change = true
+
+ if height - lStep > lStep then
+ height -= lStep
+ elseif height - lStep > 0 then
+ height = lStep
+ end
+ elseif IsDisabledControlPressed(0, 36) then -- ctrl held down
+ change = true
+
+ if width - lStep > lStep then
+ width -= lStep
+ elseif width - lStep > 0 then
+ width = lStep
+ end
+ elseif IsDisabledControlPressed(0, 19) then -- alt held down
+ change = true
+
+ if length - lStep > lStep then
+ length -= lStep
+ elseif length - lStep > 0 then
+ length = lStep
+ end
+ elseif step > 1 then
+ change = true
+ step -= 1
+ end
+ elseif IsDisabledControlJustReleased(0, 32) then -- w
+ change = true
+
+ if alignMovementWithCamera then
+ local newX, newY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord, yCoord + lStep), GetGameplayCamRot(2).z)
+
+ if math.abs(newX) < minCheck then
+ newX = 0.0
+ end
+
+ if math.abs(newY or 0) < minCheck then
+ newY = 0.0
+ end
+
+ xCoord = newX
+ yCoord = newY
+ else
+ local newValue = yCoord + lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ yCoord = newValue
+ end
+ elseif IsDisabledControlJustReleased(0, 33) then -- s
+ change = true
+
+ if alignMovementWithCamera then
+ local newX, newY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord, yCoord - lStep), GetGameplayCamRot(2).z)
+
+ if math.abs(newX) < minCheck then
+ newX = 0.0
+ end
+
+ if math.abs(newY or 0) < minCheck then
+ newY = 0.0
+ end
+
+ xCoord = newX
+ yCoord = newY
+ else
+ local newValue = yCoord - lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ yCoord = newValue
+ end
+ elseif IsDisabledControlJustReleased(0, 35) then -- d
+ change = true
+
+ if alignMovementWithCamera then
+ local newX, newY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord + lStep, yCoord), GetGameplayCamRot(2).z)
+
+ if math.abs(newX) < minCheck then
+ newX = 0.0
+ end
+
+ if math.abs(newY or 0) < minCheck then
+ newY = 0.0
+ end
+
+ xCoord = newX
+ yCoord = newY
+ else
+ local newValue = xCoord + lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ xCoord = newValue
+ end
+ elseif IsDisabledControlJustReleased(0, 34) then -- a
+ change = true
+
+ if alignMovementWithCamera then
+ local newX, newY = getRelativePos(vec2(xCoord, yCoord), vec2(xCoord - lStep, yCoord), GetGameplayCamRot(2).z)
+
+ if math.abs(newX) < minCheck then
+ newX = 0.0
+ end
+
+ if math.abs(newY or 0) < minCheck then
+ newY = 0.0
+ end
+
+ xCoord = newX
+ yCoord = newY
+ else
+ local newValue = xCoord - lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ xCoord = newValue
+ end
+ elseif IsDisabledControlJustReleased(0, 45) then -- r
+ change = true
+ local newValue = zCoord + lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ zCoord = newValue
+ elseif IsDisabledControlJustReleased(0, 23) then -- f
+ change = true
+ local newValue = zCoord - lStep
+
+ if math.abs(newValue) < minCheck then
+ newValue = 0.0
+ end
+
+ zCoord = newValue
+ elseif IsDisabledControlJustReleased(0, 38) then -- e
+ change = true
+ heading -= rStep
+
+ if heading < 0 then
+ heading += 360
+ end
+ elseif IsDisabledControlJustReleased(0, 44) then -- q
+ change = true
+ heading += rStep
+
+ if heading >= 360 then
+ heading -= 360
+ end
+ elseif IsDisabledControlJustReleased(0, 47) then -- g
+ change = true
+
+ if displayMode == #displayModes then
+ displayMode = 1
+ else
+ displayMode += 1
+ end
+ elseif IsDisabledControlJustReleased(0, 26) then -- c
+ change = true
+ alignMovementWithCamera = not alignMovementWithCamera
+ elseif IsDisabledControlJustReleased(0, 22) then -- space
+ change = true
+
+ if zoneType == 'poly' then
+ points[#points + 1] = vec2(xCoord, yCoord)
+ end
+
+ coords = GetEntityCoords(cache.ped)
+ xCoord = round(coords.x)
+ yCoord = round(coords.y)
+ elseif IsDisabledControlJustReleased(0, 201) then -- enter
+ closeCreator()
+ elseif IsDisabledControlJustReleased(0, 194) then -- backspace
+ change = true
+
+ if zoneType == 'poly' and #points > 0 then
+ xCoord = points[#points].x
+ yCoord = points[#points].y
+
+ points[#points] = nil
+ end
+ elseif IsDisabledControlJustReleased(0, 200) then -- esc
+ SetPauseMenuActive(false)
+ closeCreator(true)
+ end
+
+ if change then
+ updateText()
+ end
+ end
+ end
+end
+
+RegisterCommand('zone', function(source, args, rawCommand)
+ if args[1] ~= 'poly' and args[1] ~= 'box' and args[1] ~= 'sphere' then
+ lib.notify({title = 'Invalid zone type', type = 'error'})
+ return
+ end
+
+ if creatorActive then
+ lib.notify({title = 'Already creating a zone', type = 'error'})
+ return
+ end
+
+ local useLast = args[2] and not useLastZoneFalsyInputs[args[2]]
+
+ if useLast then
+ if args[1] == 'poly' then
+ lib.notify({title = 'Cannot duplicate a poly zone', type = 'error'})
+ useLast = false
+ elseif not lastZone[args[1]] then
+ lib.notify({title = ('No previous %s zone to duplicate'):format(args[1]), type = 'error'})
+ useLast = false
+ end
+ end
+
+ startCreator(args[1], useLast)
+end, true)
+
+CreateThread(function()
+ Wait(1000)
+ TriggerEvent('chat:addSuggestion', '/zone', 'Starts creation of the specified zone', {
+ { name = 'zoneType', help = 'poly, box, sphere' },
+ { name = 'useLast', help = 'duplicates the last created zone of the specified type (box and sphere only, optional)' }
+ })
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/server.lua b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/server.lua
new file mode 100644
index 000000000..df026a6b4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/resource/zoneCreator/server.lua
@@ -0,0 +1,137 @@
+--[[
+ https://github.com/overextended/ox_lib
+
+ This file is licensed under LGPL-3.0 or higher
+
+ Copyright © 2025 Linden
+]]
+
+local function formatNumber(num)
+ return tostring(num):gsub(",", ".")
+end
+
+local parse = {
+ poly = function(data)
+ local points = {}
+ for i = 1, #data.points do
+ points[#points + 1] = ('\t\tvec3(%s, %s, %s),\n'):format((data.points[i].x), (data.points[i].y), data.zCoord)
+ end
+
+ local pattern
+ if data.format == 'function' then
+ pattern = {
+ 'local poly = lib.zones.poly({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ '\tpoints = {\n',
+ ('%s\t},\n'):format(table.concat(points)),
+ ('\tthickness = %s,\n'):format(data.height),
+ '})\n',
+ }
+ elseif data.format == 'array' then
+ pattern = {
+ '{\n',
+ ('\tname = "%s",\n'):format(data.name),
+ '\tpoints = {\n',
+ ('%s\t},\n'):format(table.concat(points)),
+ ('\tthickness = %s,\n'):format(data.height),
+ '},\n'
+ }
+ elseif data.format == 'target' then
+ pattern = {
+ 'exports.ox_target:addPolyZone({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ '\tpoints = {\n',
+ ('%s\t},\n'):format(table.concat(points)),
+ ('\tthickness = %s,\n'):format(data.height),
+ '})\n'
+ }
+ end
+
+ return table.concat(pattern)
+ end,
+ box = function(data)
+ local pattern
+ if data.format == 'function' then
+ pattern = {
+ 'local box = lib.zones.box({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(
+ formatNumber(data.xCoord),
+ formatNumber(data.yCoord),
+ formatNumber(data.zCoord)
+ ),
+ ('\tsize = vec3(%s, %s, %s),\n'):format(
+ formatNumber(data.width),
+ formatNumber(data.length),
+ formatNumber(data.height)
+ ),
+ ('\trotation = %s,\n'):format(formatNumber(data.heading)),
+ '})\n',
+ }
+ elseif data.format == 'array' then
+ pattern = {
+ '{\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(
+ formatNumber(data.xCoord),
+ formatNumber(data.yCoord),
+ formatNumber(data.zCoord)
+ ),
+ ('\tsize = vec3(%s, %s, %s),\n'):format(
+ formatNumber(data.width),
+ formatNumber(data.length),
+ formatNumber(data.height)
+ ),
+ ('\trotation = %s,\n'):format(formatNumber(data.heading)),
+ '},\n',
+ }
+ elseif data.format == 'target' then
+ pattern = {
+ 'exports.ox_target:addBoxZone({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
+ ('\tsize = vec3(%s, %s, %s),\n'):format(data.width, data.length, data.height),
+ ('\trotation = %s,\n'):format(data.heading),
+ '})\n',
+ }
+ end
+
+ return table.concat(pattern)
+ end,
+ sphere = function(data)
+ local pattern
+ if data.format == 'function' then
+ pattern = {
+ 'local sphere = lib.zones.sphere({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
+ ('\tradius = %s,\n'):format(data.height),
+ '})\n',
+ }
+ elseif data.format == 'array' then
+ pattern = {
+ '{\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
+ ('\tradius = %s,\n'):format(data.height),
+ '},\n',
+ }
+ elseif data.format == 'target' then
+ pattern = {
+ 'exports.ox_target:addSphereZone({\n',
+ ('\tname = "%s",\n'):format(data.name),
+ ('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
+ ('\tradius = %s,\n'):format(data.height),
+ '})\n',
+ }
+ end
+
+ return table.concat(pattern)
+ end,
+}
+
+RegisterNetEvent('ox_lib:saveZone', function(data)
+ if not source or not IsPlayerAceAllowed(source, 'command') then return end
+ local output = (LoadResourceFile(cache.resource, 'created_zones.lua') or '') .. parse[data.zoneType](data)
+ SaveResourceFile(cache.resource, 'created_zones.lua', output, -1)
+end)
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-BgkLwDpx.css b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-BgkLwDpx.css
new file mode 100644
index 000000000..fc961ce90
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-BgkLwDpx.css
@@ -0,0 +1 @@
+@font-face{font-family:Roboto;src:url(../fonts/Roboto-Thin.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:100;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ThinItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:100;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ExtraLight.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:200;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ExtraLightItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:200;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Light.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:300;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-LightItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:300;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Regular.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:400;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Italic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:400;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Medium.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:500;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-MediumItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:500;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-SemiBold.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:600;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-SemiBoldItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:600;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Bold.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:700;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-BoldItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:700;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ExtraBold.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:800;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ExtraBoldItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:800;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Black.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:900;font-stretch:normal}@font-face{font-family:Roboto;src:url(../fonts/Roboto-BlackItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:900;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Thin.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:100;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-ThinItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:100;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-ExtraLight.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:200;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-ExtraLightItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:200;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Light.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:300;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-LightItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:300;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Regular.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:400;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Italic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:400;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Medium.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:500;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-MediumItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:500;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-SemiBold.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:600;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-SemiBoldItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:600;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-Bold.ttf) format("truetype");font-display:auto;font-style:normal;font-weight:700;font-stretch:normal}@font-face{font-family:Roboto Mono;src:url(../fonts/RobotoMono-BoldItalic.ttf) format("truetype");font-display:auto;font-style:italic;font-weight:700;font-stretch:normal}html{color-scheme:normal!important}body{background:none!important;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100vh;user-select:none;overflow:hidden!important}p{margin:0}#root{height:100%}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@keyframes progress-bar{0%{width:0%}to{width:100%}}::-webkit-scrollbar{background-color:transparent;padding:0;margin:0;width:0;height:0}.toast-inform{background-color:#2980b9}.toast-success{background-color:#27ae60}.toast-error{background-color:#c0392b}
diff --git a/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-Dk9MkoH6.js b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-Dk9MkoH6.js
new file mode 100644
index 000000000..8256f11c4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[Hane_MirrorPark_41_House_Modern]/ox_lib/web/build/assets/index-Dk9MkoH6.js
@@ -0,0 +1,1041 @@
+function dW(e,t){for(var r=0;rn[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const c of a)if(c.type==="childList")for(const i of c.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(a){const c={};return a.integrity&&(c.integrity=a.integrity),a.referrerPolicy&&(c.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?c.credentials="include":a.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function n(a){if(a.ep)return;a.ep=!0;const c=r(a);fetch(a.href,c)}})();var pW=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Rb(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,a.get?a:{enumerable:!0,get:function(){return e[n]}})}),r}var Fb={exports:{}},Mc={},Ib={exports:{}},F1={};/**
+ * @license React
+ * react.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.
+ */var p7=Symbol.for("react.element"),mW=Symbol.for("react.portal"),hW=Symbol.for("react.fragment"),vW=Symbol.for("react.strict_mode"),gW=Symbol.for("react.profiler"),zW=Symbol.for("react.provider"),yW=Symbol.for("react.context"),CW=Symbol.for("react.forward_ref"),HW=Symbol.for("react.suspense"),bW=Symbol.for("react.memo"),MW=Symbol.for("react.lazy"),Jp=Symbol.iterator;function VW(e){return e===null||typeof e!="object"?null:(e=Jp&&e[Jp]||e["@@iterator"],typeof e=="function"?e:null)}var jb={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Bb=Object.assign,Wb={};function C8(e,t,r){this.props=e,this.context=t,this.refs=Wb,this.updater=r||jb}C8.prototype.isReactComponent={};C8.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};C8.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ub(){}Ub.prototype=C8.prototype;function ff(e,t,r){this.props=e,this.context=t,this.refs=Wb,this.updater=r||jb}var uf=ff.prototype=new Ub;uf.constructor=ff;Bb(uf,C8.prototype);uf.isPureReactComponent=!0;var em=Array.isArray,qb=Object.prototype.hasOwnProperty,df={current:null},Gb={key:!0,ref:!0,__self:!0,__source:!0};function Yb(e,t,r){var n,a={},c=null,i=null;if(t!=null)for(n in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(c=""+t.key),t)qb.call(t,n)&&!Gb.hasOwnProperty(n)&&(a[n]=t[n]);var o=arguments.length-2;if(o===1)a.children=r;else if(1>>1,Z=T[q];if(0>>1;q<_;){var t1=2*(q+1)-1,v1=T[t1],X=t1+1,s1=T[X];if(0>a(v1,L))Xa(s1,v1)?(T[q]=s1,T[X]=L,q=X):(T[q]=v1,T[t1]=L,q=t1);else if(Xa(s1,L))T[q]=s1,T[X]=L,q=X;else break e}}return F}function a(T,F){var L=T.sortIndex-F.sortIndex;return L!==0?L:T.id-F.id}if(typeof performance=="object"&&typeof performance.now=="function"){var c=performance;e.unstable_now=function(){return c.now()}}else{var i=Date,o=i.now();e.unstable_now=function(){return i.now()-o}}var s=[],l=[],f=1,u=null,d=3,p=!1,m=!1,v=!1,H=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function z(T){for(var F=r(l);F!==null;){if(F.callback===null)n(l);else if(F.startTime<=T)n(l),F.sortIndex=F.expirationTime,t(s,F);else break;F=r(l)}}function b(T){if(v=!1,z(T),!m)if(r(s)!==null)m=!0,j(x);else{var F=r(l);F!==null&&R(b,F.startTime-T)}}function x(T,F){m=!1,v&&(v=!1,h(S),S=-1),p=!0;var L=d;try{for(z(F),u=r(s);u!==null&&(!(u.expirationTime>F)||T&&!P());){var q=u.callback;if(typeof q=="function"){u.callback=null,d=u.priorityLevel;var Z=q(u.expirationTime<=F);F=e.unstable_now(),typeof Z=="function"?u.callback=Z:u===r(s)&&n(s),z(F)}else n(s);u=r(s)}if(u!==null)var _=!0;else{var t1=r(l);t1!==null&&R(b,t1.startTime-F),_=!1}return _}finally{u=null,d=L,p=!1}}var C=!1,M=null,S=-1,k=5,w=-1;function P(){return!(e.unstable_now()-wT||125q?(T.sortIndex=L,t(l,T),r(s)===null&&T===r(l)&&(v?(h(S),S=-1):v=!0,R(b,L-q))):(T.sortIndex=Z,t(s,T),m||p||(m=!0,j(x))),T},e.unstable_shouldYield=P,e.unstable_wrapCallback=function(T){var F=d;return function(){var L=d;d=F;try{return T.apply(this,arguments)}finally{d=L}}}})(Qb);Xb.exports=Qb;var EW=Xb.exports;/**
+ * @license React
+ * react-dom.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.
+ */var Jb=y,W3=EW;function Q(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ko=Object.prototype.hasOwnProperty,$W=/^[: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]*$/,rm={},nm={};function DW(e){return Ko.call(nm,e)?!0:Ko.call(rm,e)?!1:$W.test(e)?nm[e]=!0:(rm[e]=!0,!1)}function TW(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function RW(e,t,r,n){if(t===null||typeof t>"u"||TW(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function g3(e,t,r,n,a,c,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=a,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=c,this.removeEmptyString=i}var K2={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){K2[e]=new g3(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];K2[t]=new g3(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){K2[e]=new g3(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){K2[e]=new g3(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){K2[e]=new g3(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){K2[e]=new g3(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){K2[e]=new g3(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){K2[e]=new g3(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){K2[e]=new g3(e,5,!1,e.toLowerCase(),null,!1,!1)});var mf=/[\-:]([a-z])/g;function hf(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(mf,hf);K2[t]=new g3(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(mf,hf);K2[t]=new g3(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(mf,hf);K2[t]=new g3(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){K2[e]=new g3(e,1,!1,e.toLowerCase(),null,!1,!1)});K2.xlinkHref=new g3("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){K2[e]=new g3(e,1,!1,e.toLowerCase(),null,!0,!0)});function vf(e,t,r,n){var a=K2.hasOwnProperty(t)?K2[t]:null;(a!==null?a.type!==0:n||!(2o||a[i]!==c[o]){var s=`
+`+a[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=o);break}}}finally{ni=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?i5(e):""}function FW(e){switch(e.tag){case 5:return i5(e.type);case 16:return i5("Lazy");case 13:return i5("Suspense");case 19:return i5("SuspenseList");case 0:case 2:case 15:return e=ai(e.type,!1),e;case 11:return e=ai(e.type.render,!1),e;case 1:return e=ai(e.type,!0),e;default:return""}}function es(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case V0:return"Fragment";case M0:return"Portal";case Xo:return"Profiler";case gf:return"StrictMode";case Qo:return"Suspense";case Jo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case rM:return(e.displayName||"Context")+".Consumer";case tM:return(e._context.displayName||"Context")+".Provider";case zf:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case yf:return t=e.displayName||null,t!==null?t:es(e.type)||"Memo";case D6:t=e._payload,e=e._init;try{return es(e(t))}catch{}}return null}function IW(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return es(t);case 8:return t===gf?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ce(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function aM(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function jW(e){var t=aM(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var a=r.get,c=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){n=""+i,c.call(this,i)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(i){n=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function it(e){e._valueTracker||(e._valueTracker=jW(e))}function cM(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=aM(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function Dr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ts(e,t){var r=t.checked;return C2({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function cm(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=ce(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function iM(e,t){t=t.checked,t!=null&&vf(e,"checked",t,!1)}function rs(e,t){iM(e,t);var r=ce(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ns(e,t.type,r):t.hasOwnProperty("defaultValue")&&ns(e,t.type,ce(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function im(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function ns(e,t,r){(t!=="number"||Dr(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var o5=Array.isArray;function j0(e,t,r,n){if(e=e.options,t){t={};for(var a=0;a"+t.valueOf().toString()+"",t=ot.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function R5(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var g5={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},BW=["Webkit","ms","Moz","O"];Object.keys(g5).forEach(function(e){BW.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),g5[t]=g5[e]})});function fM(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||g5.hasOwnProperty(e)&&g5[e]?(""+t).trim():t+"px"}function uM(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,a=fM(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,a):e[r]=a}}var WW=C2({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function is(e,t){if(t){if(WW[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(Q(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(Q(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(Q(61))}if(t.style!=null&&typeof t.style!="object")throw Error(Q(62))}}function os(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";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 ss=null;function Cf(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ls=null,B0=null,W0=null;function lm(e){if(e=v7(e)){if(typeof ls!="function")throw Error(Q(280));var t=e.stateNode;t&&(t=Sc(t),ls(e.stateNode,e.type,t))}}function dM(e){B0?W0?W0.push(e):W0=[e]:B0=e}function pM(){if(B0){var e=B0,t=W0;if(W0=B0=null,lm(e),t)for(e=0;e>>=0,e===0?32:31-(tU(e)/rU|0)|0}var st=64,lt=4194304;function s5(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Ir(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,a=e.suspendedLanes,c=e.pingedLanes,i=r&268435455;if(i!==0){var o=i&~a;o!==0?n=s5(o):(c&=i,c!==0&&(n=s5(c)))}else i=r&~a,i!==0?n=s5(i):c!==0&&(n=s5(c));if(n===0)return 0;if(t!==0&&t!==n&&!(t&a)&&(a=n&-n,c=t&-t,a>=c||a===16&&(c&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function m7(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-C4(t),e[t]=r}function iU(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=y5),zm=" ",ym=!1;function OM(e,t){switch(e){case"keyup":return AU.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function AM(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var x0=!1;function $U(e,t){switch(e){case"compositionend":return AM(t);case"keypress":return t.which!==32?null:(ym=!0,zm);case"textInput":return e=t.data,e===zm&&ym?null:e;default:return null}}function DU(e,t){if(x0)return e==="compositionend"||!Sf&&OM(e,t)?(e=PM(),cr=xf=W6=null,x0=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=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=Mm(r)}}function TM(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?TM(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function RM(){for(var e=window,t=Dr();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Dr(e.document)}return t}function kf(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function qU(e){var t=RM(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&TM(r.ownerDocument.documentElement,r)){if(n!==null&&kf(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=r.textContent.length,c=Math.min(n.start,a);n=n.end===void 0?c:Math.min(n.end,a),!e.extend&&c>n&&(a=n,n=c,c=a),a=Vm(r,c);var i=Vm(r,n);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),c>n?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,w0=null,hs=null,H5=null,vs=!1;function xm(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;vs||w0==null||w0!==Dr(n)||(n=w0,"selectionStart"in n&&kf(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),H5&&U5(H5,n)||(H5=n,n=Wr(hs,"onSelect"),0k0||(e.current=bs[k0],bs[k0]=null,k0--)}function c2(e,t){k0++,bs[k0]=e.current,e.current=t}var ie={},i3=he(ie),V3=he(!1),Ue=ie;function a8(e,t){var r=e.type.contextTypes;if(!r)return ie;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var a={},c;for(c in r)a[c]=t[c];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function x3(e){return e=e.childContextTypes,e!=null}function qr(){l2(V3),l2(i3)}function Nm(e,t,r){if(i3.current!==ie)throw Error(Q(168));c2(i3,t),c2(V3,r)}function YM(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var a in n)if(!(a in t))throw Error(Q(108,IW(e)||"Unknown",a));return C2({},r,n)}function Gr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ie,Ue=i3.current,c2(i3,e),c2(V3,V3.current),!0}function Om(e,t,r){var n=e.stateNode;if(!n)throw Error(Q(169));r?(e=YM(e,t,Ue),n.__reactInternalMemoizedMergedChildContext=e,l2(V3),l2(i3),c2(i3,e)):l2(V3),c2(V3,r)}var a6=null,kc=!1,zi=!1;function ZM(e){a6===null?a6=[e]:a6.push(e)}function aq(e){kc=!0,ZM(e)}function ve(){if(!zi&&a6!==null){zi=!0;var e=0,t=K1;try{var r=a6;for(K1=1;e>=i,a-=i,i6=1<<32-C4(t)+a|r<S?(k=M,M=null):k=M.sibling;var w=d(h,M,z[S],b);if(w===null){M===null&&(M=k);break}e&&M&&w.alternate===null&&t(h,M),g=c(w,g,S),C===null?x=w:C.sibling=w,C=w,M=k}if(S===z.length)return r(h,M),h2&&Se(h,S),x;if(M===null){for(;SS?(k=M,M=null):k=M.sibling;var P=d(h,M,w.value,b);if(P===null){M===null&&(M=k);break}e&&M&&P.alternate===null&&t(h,M),g=c(P,g,S),C===null?x=P:C.sibling=P,C=P,M=k}if(w.done)return r(h,M),h2&&Se(h,S),x;if(M===null){for(;!w.done;S++,w=z.next())w=u(h,w.value,b),w!==null&&(g=c(w,g,S),C===null?x=w:C.sibling=w,C=w);return h2&&Se(h,S),x}for(M=n(h,M);!w.done;S++,w=z.next())w=p(M,h,S,w.value,b),w!==null&&(e&&w.alternate!==null&&M.delete(w.key===null?S:w.key),g=c(w,g,S),C===null?x=w:C.sibling=w,C=w);return e&&M.forEach(function(N){return t(h,N)}),h2&&Se(h,S),x}function H(h,g,z,b){if(typeof z=="object"&&z!==null&&z.type===V0&&z.key===null&&(z=z.props.children),typeof z=="object"&&z!==null){switch(z.$$typeof){case ct:e:{for(var x=z.key,C=g;C!==null;){if(C.key===x){if(x=z.type,x===V0){if(C.tag===7){r(h,C.sibling),g=a(C,z.props.children),g.return=h,h=g;break e}}else if(C.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===D6&&Fm(x)===C.type){r(h,C.sibling),g=a(C,z.props),g.ref=F8(h,C,z),g.return=h,h=g;break e}r(h,C);break}else t(h,C);C=C.sibling}z.type===V0?(g=Be(z.props.children,h.mode,b,z.key),g.return=h,h=g):(b=pr(z.type,z.key,z.props,null,h.mode,b),b.ref=F8(h,g,z),b.return=h,h=b)}return i(h);case M0:e:{for(C=z.key;g!==null;){if(g.key===C)if(g.tag===4&&g.stateNode.containerInfo===z.containerInfo&&g.stateNode.implementation===z.implementation){r(h,g.sibling),g=a(g,z.children||[]),g.return=h,h=g;break e}else{r(h,g);break}else t(h,g);g=g.sibling}g=wi(z,h.mode,b),g.return=h,h=g}return i(h);case D6:return C=z._init,H(h,g,C(z._payload),b)}if(o5(z))return m(h,g,z,b);if(E8(z))return v(h,g,z,b);vt(h,z)}return typeof z=="string"&&z!==""||typeof z=="number"?(z=""+z,g!==null&&g.tag===6?(r(h,g.sibling),g=a(g,z),g.return=h,h=g):(r(h,g),g=xi(z,h.mode,b),g.return=h,h=g),i(h)):r(h,g)}return H}var i8=nV(!0),aV=nV(!1),g7={},B4=he(g7),Z5=he(g7),K5=he(g7);function $e(e){if(e===g7)throw Error(Q(174));return e}function Tf(e,t){switch(c2(K5,t),c2(Z5,e),c2(B4,g7),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:cs(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=cs(t,e)}l2(B4),c2(B4,t)}function o8(){l2(B4),l2(Z5),l2(K5)}function cV(e){$e(K5.current);var t=$e(B4.current),r=cs(t,e.type);t!==r&&(c2(Z5,e),c2(B4,r))}function Rf(e){Z5.current===e&&(l2(B4),l2(Z5))}var z2=he(0);function Jr(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var yi=[];function Ff(){for(var e=0;er?r:4,e(!0);var n=Ci.transition;Ci.transition={};try{e(!1),t()}finally{K1=r,Ci.transition=n}}function HV(){return c4().memoizedState}function sq(e,t,r){var n=te(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},bV(e))MV(t,r);else if(r=JM(e,t,r,n),r!==null){var a=p3();H4(r,e,n,a),VV(r,t,n)}}function lq(e,t,r){var n=te(e),a={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(bV(e))MV(t,a);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var i=t.lastRenderedState,o=c(i,r);if(a.hasEagerState=!0,a.eagerState=o,M4(o,i)){var s=t.interleaved;s===null?(a.next=a,$f(t)):(a.next=s.next,s.next=a),t.interleaved=a;return}}catch{}finally{}r=JM(e,t,a,n),r!==null&&(a=p3(),H4(r,e,n,a),VV(r,t,n))}}function bV(e){var t=e.alternate;return e===y2||t!==null&&t===y2}function MV(e,t){b5=en=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function VV(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,bf(e,r)}}var tn={readContext:a4,useCallback:Q2,useContext:Q2,useEffect:Q2,useImperativeHandle:Q2,useInsertionEffect:Q2,useLayoutEffect:Q2,useMemo:Q2,useReducer:Q2,useRef:Q2,useState:Q2,useDebugValue:Q2,useDeferredValue:Q2,useTransition:Q2,useMutableSource:Q2,useSyncExternalStore:Q2,useId:Q2,unstable_isNewReconciler:!1},fq={readContext:a4,useCallback:function(e,t){return O4().memoizedState=[e,t===void 0?null:t],e},useContext:a4,useEffect:jm,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,lr(4194308,4,vV.bind(null,t,e),r)},useLayoutEffect:function(e,t){return lr(4194308,4,e,t)},useInsertionEffect:function(e,t){return lr(4,2,e,t)},useMemo:function(e,t){var r=O4();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=O4();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=sq.bind(null,y2,e),[n.memoizedState,e]},useRef:function(e){var t=O4();return e={current:e},t.memoizedState=e},useState:Im,useDebugValue:Uf,useDeferredValue:function(e){return O4().memoizedState=e},useTransition:function(){var e=Im(!1),t=e[0];return e=oq.bind(null,e[1]),O4().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=y2,a=O4();if(h2){if(r===void 0)throw Error(Q(407));r=r()}else{if(r=t(),j2===null)throw Error(Q(349));Ge&30||sV(n,t,r)}a.memoizedState=r;var c={value:r,getSnapshot:t};return a.queue=c,jm(fV.bind(null,n,c,e),[e]),n.flags|=2048,J5(9,lV.bind(null,n,c,r,t),void 0,null),r},useId:function(){var e=O4(),t=j2.identifierPrefix;if(h2){var r=o6,n=i6;r=(n&~(1<<32-C4(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=X5++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=i.createElement(r,{is:n.is}):(e=i.createElement(r),r==="select"&&(i=e,n.multiple?i.multiple=!0:n.size&&(i.size=n.size))):e=i.createElementNS(e,r),e[T4]=t,e[Y5]=n,OV(e,t,!1,!1),t.stateNode=e;e:{switch(i=os(r,n),r){case"dialog":i2("cancel",e),i2("close",e),a=n;break;case"iframe":case"object":case"embed":i2("load",e),a=n;break;case"video":case"audio":for(a=0;al8&&(t.flags|=128,n=!0,I8(c,!1),t.lanes=4194304)}else{if(!n)if(e=Jr(i),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),I8(c,!0),c.tail===null&&c.tailMode==="hidden"&&!i.alternate&&!h2)return J2(t),null}else 2*x2()-c.renderingStartTime>l8&&r!==1073741824&&(t.flags|=128,n=!0,I8(c,!1),t.lanes=4194304);c.isBackwards?(i.sibling=t.child,t.child=i):(r=c.last,r!==null?r.sibling=i:t.child=i,c.last=i)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=x2(),t.sibling=null,r=z2.current,c2(z2,n?r&1|2:r&1),t):(J2(t),null);case 22:case 23:return Xf(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?O3&1073741824&&(J2(t),t.subtreeFlags&6&&(t.flags|=8192)):J2(t),null;case 24:return null;case 25:return null}throw Error(Q(156,t.tag))}function zq(e,t){switch(Pf(t),t.tag){case 1:return x3(t.type)&&qr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return o8(),l2(V3),l2(i3),Ff(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Rf(t),null;case 13:if(l2(z2),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(Q(340));c8()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return l2(z2),null;case 4:return o8(),null;case 10:return Ef(t.type._context),null;case 22:case 23:return Xf(),null;case 24:return null;default:return null}}var zt=!1,n3=!1,yq=typeof WeakSet=="function"?WeakSet:Set,h1=null;function O0(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){H2(e,t,n)}else r.current=null}function As(e,t,r){try{r()}catch(n){H2(e,t,n)}}var Xm=!1;function Cq(e,t){if(gs=jr,e=RM(),kf(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var a=n.anchorOffset,c=n.focusNode;n=n.focusOffset;try{r.nodeType,c.nodeType}catch{r=null;break e}var i=0,o=-1,s=-1,l=0,f=0,u=e,d=null;t:for(;;){for(var p;u!==r||a!==0&&u.nodeType!==3||(o=i+a),u!==c||n!==0&&u.nodeType!==3||(s=i+n),u.nodeType===3&&(i+=u.nodeValue.length),(p=u.firstChild)!==null;)d=u,u=p;for(;;){if(u===e)break t;if(d===r&&++l===a&&(o=i),d===c&&++f===n&&(s=i),(p=u.nextSibling)!==null)break;u=d,d=u.parentNode}u=p}r=o===-1||s===-1?null:{start:o,end:s}}else r=null}r=r||{start:0,end:0}}else r=null;for(zs={focusedElem:e,selectionRange:r},jr=!1,h1=t;h1!==null;)if(t=h1,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,h1=e;else for(;h1!==null;){t=h1;try{var m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var v=m.memoizedProps,H=m.memoizedState,h=t.stateNode,g=h.getSnapshotBeforeUpdate(t.elementType===t.type?v:p4(t.type,v),H);h.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var z=t.stateNode.containerInfo;z.nodeType===1?z.textContent="":z.nodeType===9&&z.documentElement&&z.removeChild(z.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Q(163))}}catch(b){H2(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,h1=e;break}h1=t.return}return m=Xm,Xm=!1,m}function M5(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var a=n=n.next;do{if((a.tag&e)===e){var c=a.destroy;a.destroy=void 0,c!==void 0&&As(t,r,c)}a=a.next}while(a!==n)}}function Nc(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Es(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function $V(e){var t=e.alternate;t!==null&&(e.alternate=null,$V(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[T4],delete t[Y5],delete t[Hs],delete t[rq],delete t[nq])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function DV(e){return e.tag===5||e.tag===3||e.tag===4}function Qm(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||DV(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function $s(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Ur));else if(n!==4&&(e=e.child,e!==null))for($s(e,t,r),e=e.sibling;e!==null;)$s(e,t,r),e=e.sibling}function Ds(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Ds(e,t,r),e=e.sibling;e!==null;)Ds(e,t,r),e=e.sibling}var G2=null,m4=!1;function _6(e,t,r){for(r=r.child;r!==null;)TV(e,t,r),r=r.sibling}function TV(e,t,r){if(j4&&typeof j4.onCommitFiberUnmount=="function")try{j4.onCommitFiberUnmount(Vc,r)}catch{}switch(r.tag){case 5:n3||O0(r,t);case 6:var n=G2,a=m4;G2=null,_6(e,t,r),G2=n,m4=a,G2!==null&&(m4?(e=G2,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):G2.removeChild(r.stateNode));break;case 18:G2!==null&&(m4?(e=G2,r=r.stateNode,e.nodeType===8?gi(e.parentNode,r):e.nodeType===1&&gi(e,r),B5(e)):gi(G2,r.stateNode));break;case 4:n=G2,a=m4,G2=r.stateNode.containerInfo,m4=!0,_6(e,t,r),G2=n,m4=a;break;case 0:case 11:case 14:case 15:if(!n3&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){a=n=n.next;do{var c=a,i=c.destroy;c=c.tag,i!==void 0&&(c&2||c&4)&&As(r,t,i),a=a.next}while(a!==n)}_6(e,t,r);break;case 1:if(!n3&&(O0(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(o){H2(r,t,o)}_6(e,t,r);break;case 21:_6(e,t,r);break;case 22:r.mode&1?(n3=(n=n3)||r.memoizedState!==null,_6(e,t,r),n3=n):_6(e,t,r);break;default:_6(e,t,r)}}function Jm(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new yq),t.forEach(function(n){var a=kq.bind(null,e,n);r.has(n)||(r.add(n),n.then(a,a))})}}function f4(e,t){var r=t.deletions;if(r!==null)for(var n=0;na&&(a=i),n&=~c}if(n=a,n=x2()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*bq(n/1960))-n,10e?16:e,U6===null)var n=!1;else{if(e=U6,U6=null,an=0,W1&6)throw Error(Q(331));var a=W1;for(W1|=4,h1=e.current;h1!==null;){var c=h1,i=c.child;if(h1.flags&16){var o=c.deletions;if(o!==null){for(var s=0;sx2()-Zf?je(e,0):Yf|=r),w3(e,t)}function qV(e,t){t===0&&(e.mode&1?(t=lt,lt<<=1,!(lt&130023424)&&(lt=4194304)):t=1);var r=p3();e=p6(e,t),e!==null&&(m7(e,t,r),w3(e,r))}function Sq(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),qV(e,r)}function kq(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,a=e.memoizedState;a!==null&&(r=a.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(Q(314))}n!==null&&n.delete(t),qV(e,r)}var GV;GV=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||V3.current)M3=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return M3=!1,vq(e,t,r);M3=!!(e.flags&131072)}else M3=!1,h2&&t.flags&1048576&&KM(t,Zr,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;fr(e,t),e=t.pendingProps;var a=a8(t,i3.current);q0(t,r),a=jf(null,t,n,e,a,r);var c=Bf();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,x3(n)?(c=!0,Gr(t)):c=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Df(t),a.updater=_c,t.stateNode=a,a._reactInternals=t,Ls(t,n,e,r),t=_s(null,t,n,!0,c,r)):(t.tag=0,h2&&c&&_f(t),f3(null,t,a,r),t=t.child),t;case 16:n=t.elementType;e:{switch(fr(e,t),e=t.pendingProps,a=n._init,n=a(n._payload),t.type=n,a=t.tag=Pq(n),e=p4(n,e),a){case 0:t=ks(null,t,n,e,r);break e;case 1:t=Ym(null,t,n,e,r);break e;case 11:t=qm(null,t,n,e,r);break e;case 14:t=Gm(null,t,n,p4(n.type,e),r);break e}throw Error(Q(306,n,""))}return t;case 0:return n=t.type,a=t.pendingProps,a=t.elementType===n?a:p4(n,a),ks(e,t,n,a,r);case 1:return n=t.type,a=t.pendingProps,a=t.elementType===n?a:p4(n,a),Ym(e,t,n,a,r);case 3:e:{if(_V(t),e===null)throw Error(Q(387));n=t.pendingProps,c=t.memoizedState,a=c.element,eV(e,t),Qr(t,n,null,r);var i=t.memoizedState;if(n=i.element,c.isDehydrated)if(c={element:n,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=c,t.memoizedState=c,t.flags&256){a=s8(Error(Q(423)),t),t=Zm(e,t,n,r,a);break e}else if(n!==a){a=s8(Error(Q(424)),t),t=Zm(e,t,n,r,a);break e}else for($3=Q6(t.stateNode.containerInfo.firstChild),R3=t,h2=!0,v4=null,r=aV(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(c8(),n===a){t=m6(e,t,r);break e}f3(e,t,n,r)}t=t.child}return t;case 5:return cV(t),e===null&&Vs(t),n=t.type,a=t.pendingProps,c=e!==null?e.memoizedProps:null,i=a.children,ys(n,a)?i=null:c!==null&&ys(n,c)&&(t.flags|=32),kV(e,t),f3(e,t,i,r),t.child;case 6:return e===null&&Vs(t),null;case 13:return PV(e,t,r);case 4:return Tf(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=i8(t,null,n,r):f3(e,t,n,r),t.child;case 11:return n=t.type,a=t.pendingProps,a=t.elementType===n?a:p4(n,a),qm(e,t,n,a,r);case 7:return f3(e,t,t.pendingProps,r),t.child;case 8:return f3(e,t,t.pendingProps.children,r),t.child;case 12:return f3(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,a=t.pendingProps,c=t.memoizedProps,i=a.value,c2(Kr,n._currentValue),n._currentValue=i,c!==null)if(M4(c.value,i)){if(c.children===a.children&&!V3.current){t=m6(e,t,r);break e}}else for(c=t.child,c!==null&&(c.return=t);c!==null;){var o=c.dependencies;if(o!==null){i=c.child;for(var s=o.firstContext;s!==null;){if(s.context===n){if(c.tag===1){s=s6(-1,r&-r),s.tag=2;var l=c.updateQueue;if(l!==null){l=l.shared;var f=l.pending;f===null?s.next=s:(s.next=f.next,f.next=s),l.pending=s}}c.lanes|=r,s=c.alternate,s!==null&&(s.lanes|=r),xs(c.return,r,t),o.lanes|=r;break}s=s.next}}else if(c.tag===10)i=c.type===t.type?null:c.child;else if(c.tag===18){if(i=c.return,i===null)throw Error(Q(341));i.lanes|=r,o=i.alternate,o!==null&&(o.lanes|=r),xs(i,r,t),i=c.sibling}else i=c.child;if(i!==null)i.return=c;else for(i=c;i!==null;){if(i===t){i=null;break}if(c=i.sibling,c!==null){c.return=i.return,i=c;break}i=i.return}c=i}f3(e,t,a.children,r),t=t.child}return t;case 9:return a=t.type,n=t.pendingProps.children,q0(t,r),a=a4(a),n=n(a),t.flags|=1,f3(e,t,n,r),t.child;case 14:return n=t.type,a=p4(n,t.pendingProps),a=p4(n.type,a),Gm(e,t,n,a,r);case 15:return LV(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,a=t.pendingProps,a=t.elementType===n?a:p4(n,a),fr(e,t),t.tag=1,x3(n)?(e=!0,Gr(t)):e=!1,q0(t,r),rV(t,n,a),Ls(t,n,a,r),_s(null,t,n,!0,e,r);case 19:return NV(e,t,r);case 22:return SV(e,t,r)}throw Error(Q(156,t.tag))};function YV(e,t){return CM(e,t)}function _q(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function t4(e,t,r,n){return new _q(e,t,r,n)}function Jf(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Pq(e){if(typeof e=="function")return Jf(e)?1:0;if(e!=null){if(e=e.$$typeof,e===zf)return 11;if(e===yf)return 14}return 2}function re(e,t){var r=e.alternate;return r===null?(r=t4(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function pr(e,t,r,n,a,c){var i=2;if(n=e,typeof e=="function")Jf(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case V0:return Be(r.children,a,c,t);case gf:i=8,a|=8;break;case Xo:return e=t4(12,r,t,a|2),e.elementType=Xo,e.lanes=c,e;case Qo:return e=t4(13,r,t,a),e.elementType=Qo,e.lanes=c,e;case Jo:return e=t4(19,r,t,a),e.elementType=Jo,e.lanes=c,e;case nM:return Ac(r,a,c,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case tM:i=10;break e;case rM:i=9;break e;case zf:i=11;break e;case yf:i=14;break e;case D6:i=16,n=null;break e}throw Error(Q(130,e==null?e:typeof e,""))}return t=t4(i,r,t,a),t.elementType=e,t.type=n,t.lanes=c,t}function Be(e,t,r,n){return e=t4(7,e,n,t),e.lanes=r,e}function Ac(e,t,r,n){return e=t4(22,e,n,t),e.elementType=nM,e.lanes=r,e.stateNode={isHidden:!1},e}function xi(e,t,r){return e=t4(6,e,null,t),e.lanes=r,e}function wi(e,t,r){return t=t4(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Nq(e,t,r,n,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ii(0),this.expirationTimes=ii(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ii(0),this.identifierPrefix=n,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function eu(e,t,r,n,a,c,i,o,s){return e=new Nq(e,t,r,o,s),t===1?(t=1,c===!0&&(t|=8)):t=0,c=t4(3,null,null,t),e.current=c,c.stateNode=e,c.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Df(c),e}function Oq(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(QV)}catch(e){console.error(e)}}QV(),Kb.exports=G3;var Rc=Kb.exports,JV,oh=Rc;JV=oh.createRoot,oh.hydrateRoot;const ex=()=>!window.invokeNative,Tq=()=>{},w2=(e,t)=>{const r=y.useRef(Tq);y.useEffect(()=>{r.current=t},[t]),y.useEffect(()=>{const n=a=>{const{action:c,data:i}=a.data;r.current&&c===e&&r.current(i)};return window.addEventListener("message",n),()=>window.removeEventListener("message",n)},[e])};let Rq={data:""},Fq=e=>typeof window=="object"?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||Rq,Iq=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,jq=/\/\*[^]*?\*\/| +/g,sh=/\n+/g,j6=(e,t)=>{let r="",n="",a="";for(let c in e){let i=e[c];c[0]=="@"?c[1]=="i"?r=c+" "+i+";":n+=c[1]=="f"?j6(i,c):c+"{"+j6(i,c[1]=="k"?"":t)+"}":typeof i=="object"?n+=j6(i,t?t.replace(/([^,])+/g,o=>c.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,s=>/&/.test(s)?s.replace(/&/g,o):o?o+" "+s:s)):c):i!=null&&(c=/^--/.test(c)?c:c.replace(/[A-Z]/g,"-$&").toLowerCase(),a+=j6.p?j6.p(c,i):c+":"+i+";")}return r+(t&&a?t+"{"+a+"}":a)+n},J4={},tx=e=>{if(typeof e=="object"){let t="";for(let r in e)t+=r+tx(e[r]);return t}return e},Bq=(e,t,r,n,a)=>{let c=tx(e),i=J4[c]||(J4[c]=(s=>{let l=0,f=11;for(;l>>0;return"go"+f})(c));if(!J4[i]){let s=c!==e?e:(l=>{let f,u,d=[{}];for(;f=Iq.exec(l.replace(jq,""));)f[4]?d.shift():f[3]?(u=f[3].replace(sh," ").trim(),d.unshift(d[0][u]=d[0][u]||{})):d[0][f[1]]=f[2].replace(sh," ").trim();return d[0]})(e);J4[i]=j6(a?{["@keyframes "+i]:s}:s,r?"":"."+i)}let o=r&&J4.g?J4.g:null;return r&&(J4.g=J4[i]),((s,l,f,u)=>{u?l.data=l.data.replace(u,s):l.data.indexOf(s)===-1&&(l.data=f?s+l.data:l.data+s)})(J4[i],t,n,o),i},Wq=(e,t,r)=>e.reduce((n,a,c)=>{let i=t[c];if(i&&i.call){let o=i(r),s=o&&o.props&&o.props.className||/^go/.test(o)&&o;i=s?"."+s:o&&typeof o=="object"?o.props?"":j6(o,""):o===!1?"":o}return n+a+(i??"")},"");function Fc(e){let t=this||{},r=e.call?e(t.p):e;return Bq(r.unshift?r.raw?Wq(r,[].slice.call(arguments,1),t.p):r.reduce((n,a)=>Object.assign(n,a&&a.call?a(t.p):a),{}):r,Fq(t.target),t.g,t.o,t.k)}let rx,js,Bs;Fc.bind({g:1});let h6=Fc.bind({k:1});function Uq(e,t,r,n){j6.p=t,rx=e,js=r,Bs=n}function ge(e,t){let r=this||{};return function(){let n=arguments;function a(c,i){let o=Object.assign({},c),s=o.className||a.className;r.p=Object.assign({theme:js&&js()},o),r.o=/ *go\d+/.test(s),o.className=Fc.apply(r,n)+(s?" "+s:"");let l=e;return e[0]&&(l=o.as||e,delete o.as),Bs&&l[0]&&Bs(o),rx(l,o)}return a}}var qq=e=>typeof e=="function",sn=(e,t)=>qq(e)?e(t):e,Gq=(()=>{let e=0;return()=>(++e).toString()})(),nx=(()=>{let e;return()=>{if(e===void 0&&typeof window<"u"){let t=matchMedia("(prefers-reduced-motion: reduce)");e=!t||t.matches}return e}})(),Yq=20,mr=new Map,Zq=1e3,lh=e=>{if(mr.has(e))return;let t=setTimeout(()=>{mr.delete(e),a0({type:4,toastId:e})},Zq);mr.set(e,t)},Kq=e=>{let t=mr.get(e);t&&clearTimeout(t)},Ws=(e,t)=>{switch(t.type){case 0:return{...e,toasts:[t.toast,...e.toasts].slice(0,Yq)};case 1:return t.toast.id&&Kq(t.toast.id),{...e,toasts:e.toasts.map(c=>c.id===t.toast.id?{...c,...t.toast}:c)};case 2:let{toast:r}=t;return e.toasts.find(c=>c.id===r.id)?Ws(e,{type:1,toast:r}):Ws(e,{type:0,toast:r});case 3:let{toastId:n}=t;return n?lh(n):e.toasts.forEach(c=>{lh(c.id)}),{...e,toasts:e.toasts.map(c=>c.id===n||n===void 0?{...c,visible:!1}:c)};case 4:return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(c=>c.id!==t.toastId)};case 5:return{...e,pausedAt:t.time};case 6:let a=t.time-(e.pausedAt||0);return{...e,pausedAt:void 0,toasts:e.toasts.map(c=>({...c,pauseDuration:c.pauseDuration+a}))}}},hr=[],vr={toasts:[],pausedAt:void 0},a0=e=>{vr=Ws(vr,e),hr.forEach(t=>{t(vr)})},Xq={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},Qq=(e={})=>{let[t,r]=y.useState(vr);y.useEffect(()=>(hr.push(r),()=>{let a=hr.indexOf(r);a>-1&&hr.splice(a,1)}),[t]);let n=t.toasts.map(a=>{var c,i;return{...e,...e[a.type],...a,duration:a.duration||((c=e[a.type])==null?void 0:c.duration)||e?.duration||Xq[a.type],style:{...e.style,...(i=e[a.type])==null?void 0:i.style,...a.style}}});return{...t,toasts:n}},Jq=(e,t="blank",r)=>({createdAt:Date.now(),visible:!0,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...r,id:r?.id||Gq()}),z7=e=>(t,r)=>{let n=Jq(t,e,r);return a0({type:2,toast:n}),n.id},D3=(e,t)=>z7("blank")(e,t);D3.error=z7("error");D3.success=z7("success");D3.loading=z7("loading");D3.custom=z7("custom");D3.dismiss=e=>{a0({type:3,toastId:e})};D3.remove=e=>a0({type:4,toastId:e});D3.promise=(e,t,r)=>{let n=D3.loading(t.loading,{...r,...r?.loading});return e.then(a=>(D3.success(sn(t.success,a),{id:n,...r,...r?.success}),a)).catch(a=>{D3.error(sn(t.error,a),{id:n,...r,...r?.error})}),e};var eG=(e,t)=>{a0({type:1,toast:{id:e,height:t}})},tG=()=>{a0({type:5,time:Date.now()})},rG=e=>{let{toasts:t,pausedAt:r}=Qq(e);y.useEffect(()=>{if(r)return;let c=Date.now(),i=t.map(o=>{if(o.duration===1/0)return;let s=(o.duration||0)+o.pauseDuration-(c-o.createdAt);if(s<0){o.visible&&D3.dismiss(o.id);return}return setTimeout(()=>D3.dismiss(o.id),s)});return()=>{i.forEach(o=>o&&clearTimeout(o))}},[t,r]);let n=y.useCallback(()=>{r&&a0({type:6,time:Date.now()})},[r]),a=y.useCallback((c,i)=>{let{reverseOrder:o=!1,gutter:s=8,defaultPosition:l}=i||{},f=t.filter(p=>(p.position||l)===(c.position||l)&&p.height),u=f.findIndex(p=>p.id===c.id),d=f.filter((p,m)=>mp.visible).slice(...o?[d+1]:[0,d]).reduce((p,m)=>p+(m.height||0)+s,0)},[t]);return{toasts:t,handlers:{updateHeight:eG,startPause:tG,endPause:n,calculateOffset:a}}},nG=h6`
+from {
+ transform: scale(0) rotate(45deg);
+ opacity: 0;
+}
+to {
+ transform: scale(1) rotate(45deg);
+ opacity: 1;
+}`,aG=h6`
+from {
+ transform: scale(0);
+ opacity: 0;
+}
+to {
+ transform: scale(1);
+ opacity: 1;
+}`,cG=h6`
+from {
+ transform: scale(0) rotate(90deg);
+ opacity: 0;
+}
+to {
+ transform: scale(1) rotate(90deg);
+ opacity: 1;
+}`,iG=ge("div")`
+ width: 20px;
+ opacity: 0;
+ height: 20px;
+ border-radius: 10px;
+ background: ${e=>e.primary||"#ff4b4b"};
+ position: relative;
+ transform: rotate(45deg);
+
+ animation: ${nG} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
+ forwards;
+ animation-delay: 100ms;
+
+ &:after,
+ &:before {
+ content: '';
+ animation: ${aG} 0.15s ease-out forwards;
+ animation-delay: 150ms;
+ position: absolute;
+ border-radius: 3px;
+ opacity: 0;
+ background: ${e=>e.secondary||"#fff"};
+ bottom: 9px;
+ left: 4px;
+ height: 2px;
+ width: 12px;
+ }
+
+ &:before {
+ animation: ${cG} 0.15s ease-out forwards;
+ animation-delay: 180ms;
+ transform: rotate(90deg);
+ }
+`,oG=h6`
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+`,sG=ge("div")`
+ width: 12px;
+ height: 12px;
+ box-sizing: border-box;
+ border: 2px solid;
+ border-radius: 100%;
+ border-color: ${e=>e.secondary||"#e0e0e0"};
+ border-right-color: ${e=>e.primary||"#616161"};
+ animation: ${oG} 1s linear infinite;
+`,lG=h6`
+from {
+ transform: scale(0) rotate(45deg);
+ opacity: 0;
+}
+to {
+ transform: scale(1) rotate(45deg);
+ opacity: 1;
+}`,fG=h6`
+0% {
+ height: 0;
+ width: 0;
+ opacity: 0;
+}
+40% {
+ height: 0;
+ width: 6px;
+ opacity: 1;
+}
+100% {
+ opacity: 1;
+ height: 10px;
+}`,uG=ge("div")`
+ width: 20px;
+ opacity: 0;
+ height: 20px;
+ border-radius: 10px;
+ background: ${e=>e.primary||"#61d345"};
+ position: relative;
+ transform: rotate(45deg);
+
+ animation: ${lG} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
+ forwards;
+ animation-delay: 100ms;
+ &:after {
+ content: '';
+ box-sizing: border-box;
+ animation: ${fG} 0.2s ease-out forwards;
+ opacity: 0;
+ animation-delay: 200ms;
+ position: absolute;
+ border-right: 2px solid;
+ border-bottom: 2px solid;
+ border-color: ${e=>e.secondary||"#fff"};
+ bottom: 6px;
+ left: 6px;
+ height: 10px;
+ width: 6px;
+ }
+`,dG=ge("div")`
+ position: absolute;
+`,pG=ge("div")`
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-width: 20px;
+ min-height: 20px;
+`,mG=h6`
+from {
+ transform: scale(0.6);
+ opacity: 0.4;
+}
+to {
+ transform: scale(1);
+ opacity: 1;
+}`,hG=ge("div")`
+ position: relative;
+ transform: scale(0.6);
+ opacity: 0.4;
+ min-width: 20px;
+ animation: ${mG} 0.3s 0.12s cubic-bezier(0.175, 0.885, 0.32, 1.275)
+ forwards;
+`,vG=({toast:e})=>{let{icon:t,type:r,iconTheme:n}=e;return t!==void 0?typeof t=="string"?y.createElement(hG,null,t):t:r==="blank"?null:y.createElement(pG,null,y.createElement(sG,{...n}),r!=="loading"&&y.createElement(dG,null,r==="error"?y.createElement(iG,{...n}):y.createElement(uG,{...n})))},gG=e=>`
+0% {transform: translate3d(0,${e*-200}%,0) scale(.6); opacity:.5;}
+100% {transform: translate3d(0,0,0) scale(1); opacity:1;}
+`,zG=e=>`
+0% {transform: translate3d(0,0,-1px) scale(1); opacity:1;}
+100% {transform: translate3d(0,${e*-150}%,-1px) scale(.6); opacity:0;}
+`,yG="0%{opacity:0;} 100%{opacity:1;}",CG="0%{opacity:1;} 100%{opacity:0;}",HG=ge("div")`
+ display: flex;
+ align-items: center;
+ background: #fff;
+ color: #363636;
+ line-height: 1.3;
+ will-change: transform;
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1), 0 3px 3px rgba(0, 0, 0, 0.05);
+ max-width: 350px;
+ pointer-events: auto;
+ padding: 8px 10px;
+ border-radius: 8px;
+`,bG=ge("div")`
+ display: flex;
+ justify-content: center;
+ margin: 4px 10px;
+ color: inherit;
+ flex: 1 1 auto;
+ white-space: pre-line;
+`,MG=(e,t)=>{let r=e.includes("top")?1:-1,[n,a]=nx()?[yG,CG]:[gG(r),zG(r)];return{animation:t?`${h6(n)} 0.35s cubic-bezier(.21,1.02,.73,1) forwards`:`${h6(a)} 0.4s forwards cubic-bezier(.06,.71,.55,1)`}},VG=y.memo(({toast:e,position:t,style:r,children:n})=>{let a=e.height?MG(e.position||t||"top-center",e.visible):{opacity:0},c=y.createElement(vG,{toast:e}),i=y.createElement(bG,{...e.ariaProps},sn(e.message,e));return y.createElement(HG,{className:e.className,style:{...a,...r,...e.style}},typeof n=="function"?n({icon:c,message:i}):y.createElement(y.Fragment,null,c,i))});Uq(y.createElement);var xG=({id:e,className:t,style:r,onHeightUpdate:n,children:a})=>{let c=y.useCallback(i=>{if(i){let o=()=>{let s=i.getBoundingClientRect().height;n(e,s)};o(),new MutationObserver(o).observe(i,{subtree:!0,childList:!0,characterData:!0})}},[e,n]);return y.createElement("div",{ref:c,className:t,style:r},a)},wG=(e,t)=>{let r=e.includes("top")||e.includes("center-"),n=r?{top:e.includes("center-")?"50%":0}:{bottom:0},a=e.includes("center-right")?{justifyContent:"flex-end"}:e.includes("center-left")?{justifyContent:"flex-start"}:e.includes("center")?{justifyContent:"center"}:e.includes("right")?{justifyContent:"flex-end"}:{};return{left:0,right:0,display:"flex",position:"absolute",transition:nx()?void 0:"all 230ms cubic-bezier(.21,1.02,.73,1)",transform:`translateY(${t*(r?1:-1)}px)`,...n,...a}},LG=Fc`
+ z-index: 9999;
+ > * {
+ pointer-events: auto;
+ }
+`,Ht=16,SG=({reverseOrder:e,position:t="top-center",toastOptions:r,gutter:n,children:a,containerStyle:c,containerClassName:i})=>{let{toasts:o,handlers:s}=rG(r);return y.createElement("div",{style:{position:"fixed",zIndex:9999,top:Ht,left:Ht,right:Ht,bottom:Ht,pointerEvents:"none",...c},className:i,onMouseEnter:s.startPause,onMouseLeave:s.endPause},o.map(l=>{let f=l.position||t,u=s.calculateOffset(l,{reverseOrder:e,gutter:n,defaultPosition:t}),d=wG(f,u);return y.createElement(xG,{id:l.id,key:l.id,onHeightUpdate:s.updateHeight,className:l.visible?LG:"",style:d},l.type==="custom"?sn(l.message,l):a?a(l):y.createElement(VG,{toast:l,position:f}))}))};const fh=["http","https","mailto","tel"];function kG(e){const t=(e||"").trim(),r=t.charAt(0);if(r==="#"||r==="/")return t;const n=t.indexOf(":");if(n===-1)return t;let a=-1;for(;++aa||(a=t.indexOf("#"),a!==-1&&n>a)?t:"javascript:void(0)"}/*!
+ * Determine if an object is a Buffer
+ *
+ * @author Feross Aboukhadijeh
+ * @license MIT
+ */var _G=function(t){return t!=null&&t.constructor!=null&&typeof t.constructor.isBuffer=="function"&&t.constructor.isBuffer(t)};const ax=pe(_G);function w5(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?uh(e.position):"start"in e||"end"in e?uh(e):"line"in e||"column"in e?Us(e):""}function Us(e){return dh(e&&e.line)+":"+dh(e&&e.column)}function uh(e){return Us(e&&e.start)+"-"+Us(e&&e.end)}function dh(e){return e&&typeof e=="number"?e:1}class i4 extends Error{constructor(t,r,n){const a=[null,null];let c={start:{line:null,column:null},end:{line:null,column:null}};if(super(),typeof r=="string"&&(n=r,r=void 0),typeof n=="string"){const i=n.indexOf(":");i===-1?a[1]=n:(a[0]=n.slice(0,i),a[1]=n.slice(i+1))}r&&("type"in r||"position"in r?r.position&&(c=r.position):"start"in r||"end"in r?c=r:("line"in r||"column"in r)&&(c.start=r)),this.name=w5(r)||"1:1",this.message=typeof t=="object"?t.message:t,this.stack="",typeof t=="object"&&t.stack&&(this.stack=t.stack),this.reason=this.message,this.fatal,this.line=c.start.line,this.column=c.start.column,this.position=c,this.source=a[0],this.ruleId=a[1],this.file,this.actual,this.expected,this.url,this.note}}i4.prototype.file="";i4.prototype.name="";i4.prototype.reason="";i4.prototype.message="";i4.prototype.stack="";i4.prototype.fatal=null;i4.prototype.column=null;i4.prototype.line=null;i4.prototype.source=null;i4.prototype.ruleId=null;i4.prototype.position=null;const A4={basename:PG,dirname:NG,extname:OG,join:AG,sep:"/"};function PG(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');y7(e);let r=0,n=-1,a=e.length,c;if(t===void 0||t.length===0||t.length>e.length){for(;a--;)if(e.charCodeAt(a)===47){if(c){r=a+1;break}}else n<0&&(c=!0,n=a+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let i=-1,o=t.length-1;for(;a--;)if(e.charCodeAt(a)===47){if(c){r=a+1;break}}else i<0&&(c=!0,i=a+1),o>-1&&(e.charCodeAt(a)===t.charCodeAt(o--)?o<0&&(n=a):(o=-1,n=i));return r===n?n=i:n<0&&(n=e.length),e.slice(r,n)}function NG(e){if(y7(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.charCodeAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.charCodeAt(0)===47?"/":".":t===1&&e.charCodeAt(0)===47?"//":e.slice(0,t)}function OG(e){y7(e);let t=e.length,r=-1,n=0,a=-1,c=0,i;for(;t--;){const o=e.charCodeAt(t);if(o===47){if(i){n=t+1;break}continue}r<0&&(i=!0,r=t+1),o===46?a<0?a=t:c!==1&&(c=1):a>-1&&(c=-1)}return a<0||r<0||c===0||c===1&&a===r-1&&a===n+1?"":e.slice(a,r)}function AG(...e){let t=-1,r;for(;++t0&&e.charCodeAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function $G(e,t){let r="",n=0,a=-1,c=0,i=-1,o,s;for(;++i<=e.length;){if(i2){if(s=r.lastIndexOf("/"),s!==r.length-1){s<0?(r="",n=0):(r=r.slice(0,s),n=r.length-1-r.lastIndexOf("/")),a=i,c=0;continue}}else if(r.length>0){r="",n=0,a=i,c=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(a+1,i):r=e.slice(a+1,i),n=i-a-1;a=i,c=0}else o===46&&c>-1?c++:c=-1}return r}function y7(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const DG={cwd:TG};function TG(){return"/"}function qs(e){return e!==null&&typeof e=="object"&&e.href&&e.origin}function RG(e){if(typeof e=="string")e=new URL(e);else if(!qs(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return FG(e)}function FG(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r"u"||gr.call(t,a)},yh=function(t,r){hh&&r.name==="__proto__"?hh(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0}):t[r.name]=r.newValue},Ch=function(t,r){if(r==="__proto__")if(gr.call(t,r)){if(vh)return vh(t,r).value}else return;return t[r]},jG=function e(){var t,r,n,a,c,i,o=arguments[0],s=1,l=arguments.length,f=!1;for(typeof o=="boolean"&&(f=o,o=arguments[1]||{},s=2),(o==null||typeof o!="object"&&typeof o!="function")&&(o={});si.length;let s;o&&i.push(a);try{s=e.apply(this,i)}catch(l){const f=l;if(o&&r)throw f;return a(f)}o||(s&&s.then&&typeof s.then=="function"?s.then(c,a):s instanceof Error?a(s):c(s))}function a(i,...o){r||(r=!0,t(i,...o))}function c(i){a(null,i)}}const UG=sx().freeze(),ox={}.hasOwnProperty;function sx(){const e=BG(),t=[];let r={},n,a=-1;return c.data=i,c.Parser=void 0,c.Compiler=void 0,c.freeze=o,c.attachers=t,c.use=s,c.parse=l,c.stringify=f,c.run=u,c.runSync=d,c.process=p,c.processSync=m,c;function c(){const v=sx();let H=-1;for(;++H{if(C||!M||!S)x(C);else{const k=c.stringify(M,S);k==null||(YG(k)?S.value=k:S.result=k),x(C,S)}});function x(C,M){C||!M?z(C):g?g(M):H(null,M)}}}function m(v){let H;c.freeze(),_i("processSync",c.Parser),Pi("processSync",c.Compiler);const h=B8(v);return c.process(h,g),Vh("processSync","process",H),h;function g(z){H=!0,mh(z)}}}function bh(e,t){return typeof e=="function"&&e.prototype&&(qG(e.prototype)||t in e.prototype)}function qG(e){let t;for(t in e)if(ox.call(e,t))return!0;return!1}function _i(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `Parser`")}function Pi(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `Compiler`")}function Ni(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Mh(e){if(!Gs(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Vh(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function B8(e){return GG(e)?e:new cx(e)}function GG(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function YG(e){return typeof e=="string"||ax(e)}const ZG={};function KG(e,t){const r=ZG,n=typeof r.includeImageAlt=="boolean"?r.includeImageAlt:!0,a=typeof r.includeHtml=="boolean"?r.includeHtml:!0;return lx(e,n,a)}function lx(e,t,r){if(XG(e)){if("value"in e)return e.type==="html"&&!r?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return xh(e.children,t,r)}return Array.isArray(e)?xh(e,t,r):""}function xh(e,t,r){const n=[];let a=-1;for(;++aa?0:a+t:t=t>a?a:t,r=r>0?r:0,n.length<1e4)i=Array.from(n),i.unshift(t,r),e.splice(...i);else for(r&&e.splice(t,r);c0?(F3(e,e.length,0,t),e):t}const wh={}.hasOwnProperty;function fx(e){const t={};let r=-1;for(;++ri))return;const M=t.events.length;let S=M,k,w;for(;S--;)if(t.events[S][0]==="exit"&&t.events[S][1].type==="chunkFlow"){if(k){w=t.events[S][1].end;break}k=!0}for(h(n),C=M;Cz;){const x=r[b];t.containerState=x[1],x[0].exit.call(t,e)}r.length=z}function g(){a.write([null]),c=void 0,a=void 0,t.containerState._closeFlow=void 0}}function sY(e,t,r){return j1(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function fn(e){if(e===null||e2(e)||Ke(e))return 1;if(Ic(e))return 2}function jc(e,t,r){const n=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const u=Object.assign({},e[n][1].end),d=Object.assign({},e[r][1].start);Sh(u,-s),Sh(d,s),i={type:s>1?"strongSequence":"emphasisSequence",start:u,end:Object.assign({},e[n][1].end)},o={type:s>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[r][1].start),end:d},c={type:s>1?"strongText":"emphasisText",start:Object.assign({},e[n][1].end),end:Object.assign({},e[r][1].start)},a={type:s>1?"strong":"emphasis",start:Object.assign({},i.start),end:Object.assign({},o.end)},e[n][1].end=Object.assign({},i.start),e[r][1].start=Object.assign({},o.end),l=[],e[n][1].end.offset-e[n][1].start.offset&&(l=J3(l,[["enter",e[n][1],t],["exit",e[n][1],t]])),l=J3(l,[["enter",a,t],["enter",i,t],["exit",i,t],["enter",c,t]]),l=J3(l,jc(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),l=J3(l,[["exit",c,t],["enter",o,t],["exit",o,t],["exit",a,t]]),e[r][1].end.offset-e[r][1].start.offset?(f=2,l=J3(l,[["enter",e[r][1],t],["exit",e[r][1],t]])):f=0,F3(e,n-1,r-n+3,l),r=n+l.length-f-2;break}}for(r=-1;++r0&&T1(C)?j1(e,g,"linePrefix",c+1)(C):g(C)}function g(C){return C===null||L1(C)?e.check(_h,v,b)(C):(e.enter("codeFlowValue"),z(C))}function z(C){return C===null||L1(C)?(e.exit("codeFlowValue"),g(C)):(e.consume(C),z)}function b(C){return e.exit("codeFenced"),t(C)}function x(C,M,S){let k=0;return w;function w(D){return C.enter("lineEnding"),C.consume(D),C.exit("lineEnding"),P}function P(D){return C.enter("codeFencedFence"),T1(D)?j1(C,N,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(D):N(D)}function N(D){return D===o?(C.enter("codeFencedFenceSequence"),$(D)):S(D)}function $(D){return D===o?(k++,C.consume(D),$):k>=i?(C.exit("codeFencedFenceSequence"),T1(D)?j1(C,A,"whitespace")(D):A(D)):S(D)}function A(D){return D===null||L1(D)?(C.exit("codeFencedFence"),M(D)):S(D)}}}function CY(e,t,r){const n=this;return a;function a(i){return i===null?r(i):(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),c)}function c(i){return n.parser.lazy[n.now().line]?r(i):t(i)}}const Oi={name:"codeIndented",tokenize:bY},HY={tokenize:MY,partial:!0};function bY(e,t,r){const n=this;return a;function a(l){return e.enter("codeIndented"),j1(e,c,"linePrefix",5)(l)}function c(l){const f=n.events[n.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?i(l):r(l)}function i(l){return l===null?s(l):L1(l)?e.attempt(HY,i,s)(l):(e.enter("codeFlowValue"),o(l))}function o(l){return l===null||L1(l)?(e.exit("codeFlowValue"),i(l)):(e.consume(l),o)}function s(l){return e.exit("codeIndented"),t(l)}}function MY(e,t,r){const n=this;return a;function a(i){return n.parser.lazy[n.now().line]?r(i):L1(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),a):j1(e,c,"linePrefix",5)(i)}function c(i){const o=n.events[n.events.length-1];return o&&o[1].type==="linePrefix"&&o[2].sliceSerialize(o[1],!0).length>=4?t(i):L1(i)?a(i):r(i)}}const VY={name:"codeText",tokenize:LY,resolve:xY,previous:wY};function xY(e){let t=e.length-4,r=3,n,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=4?t(i):e.interrupt(n.parser.constructs.flow,r,t)(i)}}function hx(e,t,r,n,a,c,i,o,s){const l=s||Number.POSITIVE_INFINITY;let f=0;return u;function u(h){return h===60?(e.enter(n),e.enter(a),e.enter(c),e.consume(h),e.exit(c),d):h===null||h===32||h===41||ln(h)?r(h):(e.enter(n),e.enter(i),e.enter(o),e.enter("chunkString",{contentType:"string"}),v(h))}function d(h){return h===62?(e.enter(c),e.consume(h),e.exit(c),e.exit(a),e.exit(n),t):(e.enter(o),e.enter("chunkString",{contentType:"string"}),p(h))}function p(h){return h===62?(e.exit("chunkString"),e.exit(o),d(h)):h===null||h===60||L1(h)?r(h):(e.consume(h),h===92?m:p)}function m(h){return h===60||h===62||h===92?(e.consume(h),p):p(h)}function v(h){return!f&&(h===null||h===41||e2(h))?(e.exit("chunkString"),e.exit(o),e.exit(i),e.exit(n),t(h)):f999||p===null||p===91||p===93&&!s||p===94&&!o&&"_hiddenFootnoteSupport"in i.parser.constructs?r(p):p===93?(e.exit(c),e.enter(a),e.consume(p),e.exit(a),e.exit(n),t):L1(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),f):(e.enter("chunkString",{contentType:"string"}),u(p))}function u(p){return p===null||p===91||p===93||L1(p)||o++>999?(e.exit("chunkString"),f(p)):(e.consume(p),s||(s=!T1(p)),p===92?d:u)}function d(p){return p===91||p===92||p===93?(e.consume(p),o++,u):u(p)}}function gx(e,t,r,n,a,c){let i;return o;function o(d){return d===34||d===39||d===40?(e.enter(n),e.enter(a),e.consume(d),e.exit(a),i=d===40?41:d,s):r(d)}function s(d){return d===i?(e.enter(a),e.consume(d),e.exit(a),e.exit(n),t):(e.enter(c),l(d))}function l(d){return d===i?(e.exit(c),s(i)):d===null?r(d):L1(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),j1(e,l,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),f(d))}function f(d){return d===i||d===null||L1(d)?(e.exit("chunkString"),l(d)):(e.consume(d),d===92?u:f)}function u(d){return d===i||d===92?(e.consume(d),f):f(d)}}function L5(e,t){let r;return n;function n(a){return L1(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,n):T1(a)?j1(e,n,r?"linePrefix":"lineSuffix")(a):t(a)}}function b4(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const AY={name:"definition",tokenize:$Y},EY={tokenize:DY,partial:!0};function $Y(e,t,r){const n=this;let a;return c;function c(p){return e.enter("definition"),i(p)}function i(p){return vx.call(n,e,o,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function o(p){return a=b4(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),s):r(p)}function s(p){return e2(p)?L5(e,l)(p):l(p)}function l(p){return hx(e,f,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function f(p){return e.attempt(EY,u,u)(p)}function u(p){return T1(p)?j1(e,d,"whitespace")(p):d(p)}function d(p){return p===null||L1(p)?(e.exit("definition"),n.parser.defined.push(a),t(p)):r(p)}}function DY(e,t,r){return n;function n(o){return e2(o)?L5(e,a)(o):r(o)}function a(o){return gx(e,c,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(o)}function c(o){return T1(o)?j1(e,i,"whitespace")(o):i(o)}function i(o){return o===null||L1(o)?t(o):r(o)}}const TY={name:"hardBreakEscape",tokenize:RY};function RY(e,t,r){return n;function n(c){return e.enter("hardBreakEscape"),e.consume(c),a}function a(c){return L1(c)?(e.exit("hardBreakEscape"),t(c)):r(c)}}const FY={name:"headingAtx",tokenize:jY,resolve:IY};function IY(e,t){let r=e.length-2,n=3,a,c;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(a={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},c={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},F3(e,n,r-n+1,[["enter",a,t],["enter",c,t],["exit",c,t],["exit",a,t]])),e}function jY(e,t,r){let n=0;return a;function a(f){return e.enter("atxHeading"),c(f)}function c(f){return e.enter("atxHeadingSequence"),i(f)}function i(f){return f===35&&n++<6?(e.consume(f),i):f===null||e2(f)?(e.exit("atxHeadingSequence"),o(f)):r(f)}function o(f){return f===35?(e.enter("atxHeadingSequence"),s(f)):f===null||L1(f)?(e.exit("atxHeading"),t(f)):T1(f)?j1(e,o,"whitespace")(f):(e.enter("atxHeadingText"),l(f))}function s(f){return f===35?(e.consume(f),s):(e.exit("atxHeadingSequence"),o(f))}function l(f){return f===null||f===35||e2(f)?(e.exit("atxHeadingText"),o(f)):(e.consume(f),l)}}const BY=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Nh=["pre","script","style","textarea"],WY={name:"htmlFlow",tokenize:YY,resolveTo:GY,concrete:!0},UY={tokenize:KY,partial:!0},qY={tokenize:ZY,partial:!0};function GY(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function YY(e,t,r){const n=this;let a,c,i,o,s;return l;function l(_){return f(_)}function f(_){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(_),u}function u(_){return _===33?(e.consume(_),d):_===47?(e.consume(_),c=!0,v):_===63?(e.consume(_),a=3,n.interrupt?t:L):d3(_)?(e.consume(_),i=String.fromCharCode(_),H):r(_)}function d(_){return _===45?(e.consume(_),a=2,p):_===91?(e.consume(_),a=5,o=0,m):d3(_)?(e.consume(_),a=4,n.interrupt?t:L):r(_)}function p(_){return _===45?(e.consume(_),n.interrupt?t:L):r(_)}function m(_){const t1="CDATA[";return _===t1.charCodeAt(o++)?(e.consume(_),o===t1.length?n.interrupt?t:N:m):r(_)}function v(_){return d3(_)?(e.consume(_),i=String.fromCharCode(_),H):r(_)}function H(_){if(_===null||_===47||_===62||e2(_)){const t1=_===47,v1=i.toLowerCase();return!t1&&!c&&Nh.includes(v1)?(a=1,n.interrupt?t(_):N(_)):BY.includes(i.toLowerCase())?(a=6,t1?(e.consume(_),h):n.interrupt?t(_):N(_)):(a=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(_):c?g(_):z(_))}return _===45||c3(_)?(e.consume(_),i+=String.fromCharCode(_),H):r(_)}function h(_){return _===62?(e.consume(_),n.interrupt?t:N):r(_)}function g(_){return T1(_)?(e.consume(_),g):w(_)}function z(_){return _===47?(e.consume(_),w):_===58||_===95||d3(_)?(e.consume(_),b):T1(_)?(e.consume(_),z):w(_)}function b(_){return _===45||_===46||_===58||_===95||c3(_)?(e.consume(_),b):x(_)}function x(_){return _===61?(e.consume(_),C):T1(_)?(e.consume(_),x):z(_)}function C(_){return _===null||_===60||_===61||_===62||_===96?r(_):_===34||_===39?(e.consume(_),s=_,M):T1(_)?(e.consume(_),C):S(_)}function M(_){return _===s?(e.consume(_),s=null,k):_===null||L1(_)?r(_):(e.consume(_),M)}function S(_){return _===null||_===34||_===39||_===47||_===60||_===61||_===62||_===96||e2(_)?x(_):(e.consume(_),S)}function k(_){return _===47||_===62||T1(_)?z(_):r(_)}function w(_){return _===62?(e.consume(_),P):r(_)}function P(_){return _===null||L1(_)?N(_):T1(_)?(e.consume(_),P):r(_)}function N(_){return _===45&&a===2?(e.consume(_),j):_===60&&a===1?(e.consume(_),R):_===62&&a===4?(e.consume(_),q):_===63&&a===3?(e.consume(_),L):_===93&&a===5?(e.consume(_),F):L1(_)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(UY,Z,$)(_)):_===null||L1(_)?(e.exit("htmlFlowData"),$(_)):(e.consume(_),N)}function $(_){return e.check(qY,A,Z)(_)}function A(_){return e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),D}function D(_){return _===null||L1(_)?$(_):(e.enter("htmlFlowData"),N(_))}function j(_){return _===45?(e.consume(_),L):N(_)}function R(_){return _===47?(e.consume(_),i="",T):N(_)}function T(_){if(_===62){const t1=i.toLowerCase();return Nh.includes(t1)?(e.consume(_),q):N(_)}return d3(_)&&i.length<8?(e.consume(_),i+=String.fromCharCode(_),T):N(_)}function F(_){return _===93?(e.consume(_),L):N(_)}function L(_){return _===62?(e.consume(_),q):_===45&&a===2?(e.consume(_),L):N(_)}function q(_){return _===null||L1(_)?(e.exit("htmlFlowData"),Z(_)):(e.consume(_),q)}function Z(_){return e.exit("htmlFlow"),t(_)}}function ZY(e,t,r){const n=this;return a;function a(i){return L1(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),c):r(i)}function c(i){return n.parser.lazy[n.now().line]?r(i):t(i)}}function KY(e,t,r){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(C7,t,r)}}const XY={name:"htmlText",tokenize:QY};function QY(e,t,r){const n=this;let a,c,i;return o;function o(L){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(L),s}function s(L){return L===33?(e.consume(L),l):L===47?(e.consume(L),x):L===63?(e.consume(L),z):d3(L)?(e.consume(L),S):r(L)}function l(L){return L===45?(e.consume(L),f):L===91?(e.consume(L),c=0,m):d3(L)?(e.consume(L),g):r(L)}function f(L){return L===45?(e.consume(L),p):r(L)}function u(L){return L===null?r(L):L===45?(e.consume(L),d):L1(L)?(i=u,R(L)):(e.consume(L),u)}function d(L){return L===45?(e.consume(L),p):u(L)}function p(L){return L===62?j(L):L===45?d(L):u(L)}function m(L){const q="CDATA[";return L===q.charCodeAt(c++)?(e.consume(L),c===q.length?v:m):r(L)}function v(L){return L===null?r(L):L===93?(e.consume(L),H):L1(L)?(i=v,R(L)):(e.consume(L),v)}function H(L){return L===93?(e.consume(L),h):v(L)}function h(L){return L===62?j(L):L===93?(e.consume(L),h):v(L)}function g(L){return L===null||L===62?j(L):L1(L)?(i=g,R(L)):(e.consume(L),g)}function z(L){return L===null?r(L):L===63?(e.consume(L),b):L1(L)?(i=z,R(L)):(e.consume(L),z)}function b(L){return L===62?j(L):z(L)}function x(L){return d3(L)?(e.consume(L),C):r(L)}function C(L){return L===45||c3(L)?(e.consume(L),C):M(L)}function M(L){return L1(L)?(i=M,R(L)):T1(L)?(e.consume(L),M):j(L)}function S(L){return L===45||c3(L)?(e.consume(L),S):L===47||L===62||e2(L)?k(L):r(L)}function k(L){return L===47?(e.consume(L),j):L===58||L===95||d3(L)?(e.consume(L),w):L1(L)?(i=k,R(L)):T1(L)?(e.consume(L),k):j(L)}function w(L){return L===45||L===46||L===58||L===95||c3(L)?(e.consume(L),w):P(L)}function P(L){return L===61?(e.consume(L),N):L1(L)?(i=P,R(L)):T1(L)?(e.consume(L),P):k(L)}function N(L){return L===null||L===60||L===61||L===62||L===96?r(L):L===34||L===39?(e.consume(L),a=L,$):L1(L)?(i=N,R(L)):T1(L)?(e.consume(L),N):(e.consume(L),A)}function $(L){return L===a?(e.consume(L),a=void 0,D):L===null?r(L):L1(L)?(i=$,R(L)):(e.consume(L),$)}function A(L){return L===null||L===34||L===39||L===60||L===61||L===96?r(L):L===47||L===62||e2(L)?k(L):(e.consume(L),A)}function D(L){return L===47||L===62||e2(L)?k(L):r(L)}function j(L){return L===62?(e.consume(L),e.exit("htmlTextData"),e.exit("htmlText"),t):r(L)}function R(L){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),T}function T(L){return T1(L)?j1(e,F,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(L):F(L)}function F(L){return e.enter("htmlTextData"),i(L)}}const cu={name:"labelEnd",tokenize:aZ,resolveTo:nZ,resolveAll:rZ},JY={tokenize:cZ},eZ={tokenize:iZ},tZ={tokenize:oZ};function rZ(e){let t=-1;for(;++t=3&&(l===null||L1(l))?(e.exit("thematicBreak"),t(l)):r(l)}function s(l){return l===a?(e.consume(l),n++,s):(e.exit("thematicBreakSequence"),T1(l)?j1(e,o,"whitespace")(l):o(l))}}const C3={name:"list",tokenize:vZ,continuation:{tokenize:gZ},exit:yZ},mZ={tokenize:CZ,partial:!0},hZ={tokenize:zZ,partial:!0};function vZ(e,t,r){const n=this,a=n.events[n.events.length-1];let c=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,i=0;return o;function o(p){const m=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(m==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:Ys(p)){if(n.containerState.type||(n.containerState.type=m,e.enter(m,{_container:!0})),m==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(zr,r,l)(p):l(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),s(p)}return r(p)}function s(p){return Ys(p)&&++i<10?(e.consume(p),s):(!n.interrupt||i<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),l(p)):r(p)}function l(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(C7,n.interrupt?r:f,e.attempt(mZ,d,u))}function f(p){return n.containerState.initialBlankLine=!0,c++,d(p)}function u(p){return T1(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),d):r(p)}function d(p){return n.containerState.size=c+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function gZ(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(C7,a,c);function a(o){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,j1(e,t,"listItemIndent",n.containerState.size+1)(o)}function c(o){return n.containerState.furtherBlankLines||!T1(o)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,i(o)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt(hZ,t,i)(o))}function i(o){return n.containerState._closeFlow=!0,n.interrupt=void 0,j1(e,e.attempt(C3,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o)}}function zZ(e,t,r){const n=this;return j1(e,a,"listItemIndent",n.containerState.size+1);function a(c){const i=n.events[n.events.length-1];return i&&i[1].type==="listItemIndent"&&i[2].sliceSerialize(i[1],!0).length===n.containerState.size?t(c):r(c)}}function yZ(e){e.exit(this.containerState.type)}function CZ(e,t,r){const n=this;return j1(e,a,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(c){const i=n.events[n.events.length-1];return!T1(c)&&i&&i[1].type==="listItemPrefixWhitespace"?t(c):r(c)}}const Oh={name:"setextUnderline",tokenize:bZ,resolveTo:HZ};function HZ(e,t){let r=e.length,n,a,c;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!c&&e[r][1].type==="definition"&&(c=r);const i={type:"setextHeading",start:Object.assign({},e[a][1].start),end:Object.assign({},e[e.length-1][1].end)};return e[a][1].type="setextHeadingText",c?(e.splice(a,0,["enter",i,t]),e.splice(c+1,0,["exit",e[n][1],t]),e[n][1].end=Object.assign({},e[c][1].end)):e[n][1]=i,e.push(["exit",i,t]),e}function bZ(e,t,r){const n=this;let a;return c;function c(l){let f=n.events.length,u;for(;f--;)if(n.events[f][1].type!=="lineEnding"&&n.events[f][1].type!=="linePrefix"&&n.events[f][1].type!=="content"){u=n.events[f][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||u)?(e.enter("setextHeadingLine"),a=l,i(l)):r(l)}function i(l){return e.enter("setextHeadingLineSequence"),o(l)}function o(l){return l===a?(e.consume(l),o):(e.exit("setextHeadingLineSequence"),T1(l)?j1(e,s,"lineSuffix")(l):s(l))}function s(l){return l===null||L1(l)?(e.exit("setextHeadingLine"),t(l)):r(l)}}const MZ={tokenize:VZ};function VZ(e){const t=this,r=e.attempt(C7,n,e.attempt(this.parser.constructs.flowInitial,a,j1(e,e.attempt(this.parser.constructs.flow,a,e.attempt(kY,a)),"linePrefix")));return r;function n(c){if(c===null){e.consume(c);return}return e.enter("lineEndingBlank"),e.consume(c),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function a(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const xZ={resolveAll:yx()},wZ=zx("string"),LZ=zx("text");function zx(e){return{tokenize:t,resolveAll:yx(e==="text"?SZ:void 0)};function t(r){const n=this,a=this.parser.constructs[e],c=r.attempt(a,i,o);return i;function i(f){return l(f)?c(f):o(f)}function o(f){if(f===null){r.consume(f);return}return r.enter("data"),r.consume(f),s}function s(f){return l(f)?(r.exit("data"),c(f)):(r.consume(f),s)}function l(f){if(f===null)return!0;const u=a[f];let d=-1;if(u)for(;++d-1){const o=i[0];typeof o=="string"?i[0]=o.slice(n):i.shift()}c>0&&i.push(e[a].slice(0,c))}return i}function PZ(e,t){let r=-1;const n=[];let a;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCharCode(r)}const UZ=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Hx(e){return e.replace(UZ,qZ)}function qZ(e,t,r){if(t)return t;if(r.charCodeAt(0)===35){const a=r.charCodeAt(1),c=a===120||a===88;return Cx(r.slice(c?2:1),c?16:10)}return au(r)||e}const bx={}.hasOwnProperty,GZ=function(e,t,r){return typeof t!="string"&&(r=t,t=void 0),YZ(r)(WZ(jZ(r).document().write(BZ()(e,t,!0))))};function YZ(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(r1),autolinkProtocol:P,autolinkEmail:P,atxHeading:o(I),blockQuote:o(a1),characterEscape:P,characterReference:P,codeFenced:o(u1),codeFencedFenceInfo:s,codeFencedFenceMeta:s,codeIndented:o(u1,s),codeText:o(x1,s),codeTextData:P,data:P,codeFlowValue:P,definition:o(E),definitionDestinationString:s,definitionLabelString:s,definitionTitleString:s,emphasis:o(B),hardBreakEscape:o(Y),hardBreakTrailing:o(Y),htmlFlow:o(K,s),htmlFlowData:P,htmlText:o(K,s),htmlTextData:P,image:o(U),label:s,link:o(r1),listItem:o(k1),listItemValue:m,listOrdered:o(m1,p),listUnordered:o(m1),paragraph:o(D1),reference:v1,referenceString:s,resourceDestinationString:s,resourceTitleString:s,setextHeading:o(I),strong:o(S1),thematicBreak:o(B1)},exit:{atxHeading:f(),atxHeadingSequence:M,autolink:f(),autolinkEmail:M1,autolinkProtocol:f1,blockQuote:f(),characterEscapeValue:N,characterReferenceMarkerHexadecimal:s1,characterReferenceMarkerNumeric:s1,characterReferenceValue:b1,codeFenced:f(g),codeFencedFence:h,codeFencedFenceInfo:v,codeFencedFenceMeta:H,codeFlowValue:N,codeIndented:f(z),codeText:f(R),codeTextData:N,data:N,definition:f(),definitionDestinationString:C,definitionLabelString:b,definitionTitleString:x,emphasis:f(),hardBreakEscape:f(A),hardBreakTrailing:f(A),htmlFlow:f(D),htmlFlowData:N,htmlText:f(j),htmlTextData:N,image:f(F),label:q,labelText:L,lineEnding:$,link:f(T),listItem:f(),listOrdered:f(),listUnordered:f(),paragraph:f(),referenceString:X,resourceDestinationString:Z,resourceTitleString:_,resource:t1,setextHeading:f(w),setextHeadingLineSequence:k,setextHeadingText:S,strong:f(),thematicBreak:f()}};Mx(t,(e||{}).mdastExtensions||[]);const r={};return n;function n(W){let G={type:"root",children:[]};const e1={stack:[G],tokenStack:[],config:t,enter:l,exit:u,buffer:s,resume:d,setData:c,getData:i},c1=[];let y1=-1;for(;++y10){const Q1=e1.tokenStack[e1.tokenStack.length-1];(Q1[1]||Eh).call(e1,void 0,Q1[0])}for(G.position={start:P6(W.length>0?W[0][1].start:{line:1,column:1,offset:0}),end:P6(W.length>0?W[W.length-2][1].end:{line:1,column:1,offset:0})},y1=-1;++y1{const n=this.data("settings");return GZ(r,Object.assign({},n,e,{extensions:this.data("micromarkExtensions")||[],mdastExtensions:this.data("fromMarkdownExtensions")||[]}))}})}function XZ(e,t){const r={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,r),e.applyData(t,r)}function QZ(e,t){const r={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,r),[e.applyData(t,r),{type:"text",value:`
+`}]}function JZ(e,t){const r=t.value?t.value+`
+`:"",n=t.lang?t.lang.match(/^[^ \t]+(?=[ \t]|$)/):null,a={};n&&(a.className=["language-"+n]);let c={type:"element",tagName:"code",properties:a,children:[{type:"text",value:r}]};return t.meta&&(c.data={meta:t.meta}),e.patch(t,c),c=e.applyData(t,c),c={type:"element",tagName:"pre",properties:{},children:[c]},e.patch(t,c),c}function eK(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function tK(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function M8(e){const t=[];let r=-1,n=0,a=0;for(;++r55295&&c<57344){const o=e.charCodeAt(r+1);c<56320&&o>56319&&o<57344?(i=String.fromCharCode(c,o),a=1):i="�"}else i=String.fromCharCode(c);i&&(t.push(e.slice(n,r),encodeURIComponent(i)),n=r+a+1,i=""),a&&(r+=a,a=0)}return t.join("")+e.slice(n)}function Vx(e,t){const r=String(t.identifier).toUpperCase(),n=M8(r.toLowerCase()),a=e.footnoteOrder.indexOf(r);let c;a===-1?(e.footnoteOrder.push(r),e.footnoteCounts[r]=1,c=e.footnoteOrder.length):(e.footnoteCounts[r]++,c=a+1);const i=e.footnoteCounts[r],o={type:"element",tagName:"a",properties:{href:"#"+e.clobberPrefix+"fn-"+n,id:e.clobberPrefix+"fnref-"+n+(i>1?"-"+i:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(c)}]};e.patch(t,o);const s={type:"element",tagName:"sup",properties:{},children:[o]};return e.patch(t,s),e.applyData(t,s)}function rK(e,t){const r=e.footnoteById;let n=1;for(;n in r;)n++;const a=String(n);return r[a]={type:"footnoteDefinition",identifier:a,children:[{type:"paragraph",children:t.children}],position:t.position},Vx(e,{type:"footnoteReference",identifier:a,position:t.position})}function nK(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function aK(e,t){if(e.dangerous){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}return null}function xx(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return{type:"text",value:"!["+t.alt+n};const a=e.all(t),c=a[0];c&&c.type==="text"?c.value="["+c.value:a.unshift({type:"text",value:"["});const i=a[a.length-1];return i&&i.type==="text"?i.value+=n:a.push({type:"text",value:n}),a}function cK(e,t){const r=e.definition(t.identifier);if(!r)return xx(e,t);const n={src:M8(r.url||""),alt:t.alt};r.title!==null&&r.title!==void 0&&(n.title=r.title);const a={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,a),e.applyData(t,a)}function iK(e,t){const r={src:M8(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function oK(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function sK(e,t){const r=e.definition(t.identifier);if(!r)return xx(e,t);const n={href:M8(r.url||"")};r.title!==null&&r.title!==void 0&&(n.title=r.title);const a={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function lK(e,t){const r={href:M8(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function fK(e,t,r){const n=e.all(t),a=r?uK(r):wx(t),c={},i=[];if(typeof t.checked=="boolean"){const f=n[0];let u;f&&f.type==="element"&&f.tagName==="p"?u=f:(u={type:"element",tagName:"p",properties:{},children:[]},n.unshift(u)),u.children.length>0&&u.children.unshift({type:"text",value:" "}),u.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),c.className=["task-list-item"]}let o=-1;for(;++o1}function dK(e,t){const r={},n=e.all(t);let a=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++a-1?n.offset:null}}}function gK(e,t){const r=e.all(t),n=r.shift(),a=[];if(n){const i={type:"element",tagName:"thead",properties:{},children:e.wrap([n],!0)};e.patch(t.children[0],i),a.push(i)}if(r.length>0){const i={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},o=iu(t.children[1]),s=ou(t.children[t.children.length-1]);o.line&&s.line&&(i.position={start:o,end:s}),a.push(i)}const c={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(t,c),e.applyData(t,c)}function zK(e,t,r){const n=r?r.children:void 0,c=(n?n.indexOf(t):1)===0?"th":"td",i=r&&r.type==="table"?r.align:void 0,o=i?i.length:t.children.length;let s=-1;const l=[];for(;++s0,!0),n[0]),a=n.index+n[0].length,n=r.exec(t);return c.push(Th(t.slice(a),a>0,!1)),c.join("")}function Th(e,t,r){let n=0,a=e.length;if(t){let c=e.codePointAt(n);for(;c===$h||c===Dh;)n++,c=e.codePointAt(n)}if(r){let c=e.codePointAt(a-1);for(;c===$h||c===Dh;)a--,c=e.codePointAt(a-1)}return a>n?e.slice(n,a):""}function HK(e,t){const r={type:"text",value:CK(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function bK(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const MK={blockquote:XZ,break:QZ,code:JZ,delete:eK,emphasis:tK,footnoteReference:Vx,footnote:rK,heading:nK,html:aK,imageReference:cK,image:iK,inlineCode:oK,linkReference:sK,link:lK,listItem:fK,list:dK,paragraph:pK,root:mK,strong:hK,table:gK,tableCell:yK,tableRow:zK,text:HK,thematicBreak:bK,toml:bt,yaml:bt,definition:bt,footnoteDefinition:bt};function bt(){return null}const su=function(e){if(e==null)return LK;if(typeof e=="string")return wK(e);if(typeof e=="object")return Array.isArray(e)?VK(e):xK(e);if(typeof e=="function")return Bc(e);throw new Error("Expected function, string, or object as test")};function VK(e){const t=[];let r=-1;for(;++r":""))+")"})}return u;function u(){let d=[],p,m,v;if((!t||a(o,s,l[l.length-1]||null))&&(d=_K(r(o,l)),d[0]===Rh))return d;if(o.children&&d[0]!==kK)for(m=(n?o.children.length:-1)+c,v=l.concat(o);m>-1&&m{const a=Ih(n.identifier);a&&!Fh.call(t,a)&&(t[a]=n)}),r;function r(n){const a=Ih(n);return a&&Fh.call(t,a)?t[a]:null}}function Ih(e){return String(e||"").toUpperCase()}const un={}.hasOwnProperty;function OK(e,t){const r=t||{},n=r.allowDangerousHtml||!1,a={};return i.dangerous=n,i.clobberPrefix=r.clobberPrefix===void 0||r.clobberPrefix===null?"user-content-":r.clobberPrefix,i.footnoteLabel=r.footnoteLabel||"Footnotes",i.footnoteLabelTagName=r.footnoteLabelTagName||"h2",i.footnoteLabelProperties=r.footnoteLabelProperties||{className:["sr-only"]},i.footnoteBackLabel=r.footnoteBackLabel||"Back to content",i.unknownHandler=r.unknownHandler,i.passThrough=r.passThrough,i.handlers={...MK,...r.handlers},i.definition=NK(e),i.footnoteById=a,i.footnoteOrder=[],i.footnoteCounts={},i.patch=AK,i.applyData=EK,i.one=o,i.all=s,i.wrap=DK,i.augment=c,lu(e,"footnoteDefinition",l=>{const f=String(l.identifier).toUpperCase();un.call(a,f)||(a[f]=l)}),i;function c(l,f){if(l&&"data"in l&&l.data){const u=l.data;u.hName&&(f.type!=="element"&&(f={type:"element",tagName:"",properties:{},children:[]}),f.tagName=u.hName),f.type==="element"&&u.hProperties&&(f.properties={...f.properties,...u.hProperties}),"children"in f&&f.children&&u.hChildren&&(f.children=u.hChildren)}if(l){const u="type"in l?l:{position:l};PK(u)||(f.position={start:iu(u),end:ou(u)})}return f}function i(l,f,u,d){return Array.isArray(u)&&(d=u,u={}),c(l,{type:"element",tagName:f,properties:u||{},children:d||[]})}function o(l,f){return kx(i,l,f)}function s(l){return fu(i,l)}}function AK(e,t){e.position&&(t.position=vK(e))}function EK(e,t){let r=t;if(e&&e.data){const n=e.data.hName,a=e.data.hChildren,c=e.data.hProperties;typeof n=="string"&&(r.type==="element"?r.tagName=n:r={type:"element",tagName:n,properties:{},children:[]}),r.type==="element"&&c&&(r.properties={...r.properties,...c}),"children"in r&&r.children&&a!==null&&a!==void 0&&(r.children=a)}return r}function kx(e,t,r){const n=t&&t.type;if(!n)throw new Error("Expected node, got `"+t+"`");return un.call(e.handlers,n)?e.handlers[n](e,t,r):e.passThrough&&e.passThrough.includes(n)?"children"in t?{...t,children:fu(e,t)}:t:e.unknownHandler?e.unknownHandler(e,t,r):$K(e,t)}function fu(e,t){const r=[];if("children"in t){const n=t.children;let a=-1;for(;++a0&&r.push({type:"text",value:`
+`}),r}function TK(e){const t=[];let r=-1;for(;++r1?"-"+o:""),dataFootnoteBackref:!0,className:["data-footnote-backref"],ariaLabel:e.footnoteBackLabel},children:[{type:"text",value:"↩"}]};o>1&&u.children.push({type:"element",tagName:"sup",children:[{type:"text",value:String(o)}]}),s.length>0&&s.push({type:"text",value:" "}),s.push(u)}const l=a[a.length-1];if(l&&l.type==="element"&&l.tagName==="p"){const u=l.children[l.children.length-1];u&&u.type==="text"?u.value+=" ":l.children.push({type:"text",value:" "}),l.children.push(...s)}else a.push(...s);const f={type:"element",tagName:"li",properties:{id:e.clobberPrefix+"fn-"+i},children:e.wrap(a,!0)};e.patch(n,f),t.push(f)}if(t.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:e.footnoteLabelTagName,properties:{...JSON.parse(JSON.stringify(e.footnoteLabelProperties)),id:"footnote-label"},children:[{type:"text",value:e.footnoteLabel}]},{type:"text",value:`
+`},{type:"element",tagName:"ol",properties:{},children:e.wrap(t,!0)},{type:"text",value:`
+`}]}}function _x(e,t){const r=OK(e,t),n=r.one(e,null),a=TK(r);return a&&n.children.push({type:"text",value:`
+`},a),Array.isArray(n)?{type:"root",children:n}:n}const RK=function(e,t){return e&&"run"in e?FK(e,t):IK(e||t)};function FK(e,t){return(r,n,a)=>{e.run(_x(r,t),n,c=>{a(c)})}}function IK(e){return t=>_x(t,e)}var Px={exports:{}},jK="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",BK=jK,WK=BK;function Nx(){}function Ox(){}Ox.resetWarningCache=Nx;var UK=function(){function e(n,a,c,i,o,s){if(s!==WK){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}e.isRequired=e;function t(){return e}var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Ox,resetWarningCache:Nx};return r.PropTypes=r,r};Px.exports=UK();var Ax=Px.exports;const l1=pe(Ax);class H7{constructor(t,r,n){this.property=t,this.normal=r,n&&(this.space=n)}}H7.prototype.property={};H7.prototype.normal={};H7.prototype.space=null;function Ex(e,t){const r={},n={};let a=-1;for(;++a4&&r.slice(0,4)==="data"&&KK.test(t)){if(t.charAt(4)==="-"){const c=t.slice(5).replace(Bh,eX);n="data"+c.charAt(0).toUpperCase()+c.slice(1)}else{const c=t.slice(4);if(!Bh.test(c)){let i=c.replace(XK,JK);i.charAt(0)!=="-"&&(i="-"+i),t="data"+i}}a=uu}return new a(n,t)}function JK(e){return"-"+e.toLowerCase()}function eX(e){return e.charAt(1).toUpperCase()}const Wh={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},tX=Ex([Tx,Dx,Ix,jx,YK],"html"),rX=Ex([Tx,Dx,Ix,jx,ZK],"svg");function nX(e){if(e.allowedElements&&e.disallowedElements)throw new TypeError("Only one of `allowedElements` and `disallowedElements` should be defined");if(e.allowedElements||e.disallowedElements||e.allowElement)return t=>{lu(t,"element",(r,n,a)=>{const c=a;let i;if(e.allowedElements?i=!e.allowedElements.includes(r.tagName):e.disallowedElements&&(i=e.disallowedElements.includes(r.tagName)),!i&&e.allowElement&&typeof n=="number"&&(i=!e.allowElement(r,n,c)),i&&typeof n=="number")return e.unwrapDisallowed&&r.children?c.children.splice(n,1,...r.children):c.children.splice(n,1),n})}}var Bx={exports:{}},t2={};/** @license React v17.0.2
+ * 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.
+ */var Wc=60103,Uc=60106,b7=60107,M7=60108,V7=60114,x7=60109,w7=60110,L7=60112,S7=60113,du=60120,k7=60115,_7=60116,Wx=60121,Ux=60122,qx=60117,Gx=60129,Yx=60131;if(typeof Symbol=="function"&&Symbol.for){var q2=Symbol.for;Wc=q2("react.element"),Uc=q2("react.portal"),b7=q2("react.fragment"),M7=q2("react.strict_mode"),V7=q2("react.profiler"),x7=q2("react.provider"),w7=q2("react.context"),L7=q2("react.forward_ref"),S7=q2("react.suspense"),du=q2("react.suspense_list"),k7=q2("react.memo"),_7=q2("react.lazy"),Wx=q2("react.block"),Ux=q2("react.server.block"),qx=q2("react.fundamental"),Gx=q2("react.debug_trace_mode"),Yx=q2("react.legacy_hidden")}function S4(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Wc:switch(e=e.type,e){case b7:case V7:case M7:case S7:case du:return e;default:switch(e=e&&e.$$typeof,e){case w7:case L7:case _7:case k7:case x7:return e;default:return t}}case Uc:return t}}}var aX=x7,cX=Wc,iX=L7,oX=b7,sX=_7,lX=k7,fX=Uc,uX=V7,dX=M7,pX=S7;t2.ContextConsumer=w7;t2.ContextProvider=aX;t2.Element=cX;t2.ForwardRef=iX;t2.Fragment=oX;t2.Lazy=sX;t2.Memo=lX;t2.Portal=fX;t2.Profiler=uX;t2.StrictMode=dX;t2.Suspense=pX;t2.isAsyncMode=function(){return!1};t2.isConcurrentMode=function(){return!1};t2.isContextConsumer=function(e){return S4(e)===w7};t2.isContextProvider=function(e){return S4(e)===x7};t2.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Wc};t2.isForwardRef=function(e){return S4(e)===L7};t2.isFragment=function(e){return S4(e)===b7};t2.isLazy=function(e){return S4(e)===_7};t2.isMemo=function(e){return S4(e)===k7};t2.isPortal=function(e){return S4(e)===Uc};t2.isProfiler=function(e){return S4(e)===V7};t2.isStrictMode=function(e){return S4(e)===M7};t2.isSuspense=function(e){return S4(e)===S7};t2.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===b7||e===V7||e===Gx||e===M7||e===S7||e===du||e===Yx||typeof e=="object"&&e!==null&&(e.$$typeof===_7||e.$$typeof===k7||e.$$typeof===x7||e.$$typeof===w7||e.$$typeof===L7||e.$$typeof===qx||e.$$typeof===Wx||e[0]===Ux)};t2.typeOf=S4;Bx.exports=t2;var mX=Bx.exports;const hX=pe(mX);function vX(e){const t=e&&typeof e=="object"&&e.type==="text"?e.value||"":e;return typeof t=="string"&&t.replace(/[ \t\n\f\r]/g,"")===""}function gX(e){return e.join(" ").trim()}function zX(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}var Uh=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,yX=/\n/g,CX=/^\s*/,HX=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,bX=/^:\s*/,MX=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,VX=/^[;\s]*/,xX=/^\s+|\s+$/g,wX=`
+`,qh="/",Gh="*",Pe="",LX="comment",SX="declaration",kX=function(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var r=1,n=1;function a(m){var v=m.match(yX);v&&(r+=v.length);var H=m.lastIndexOf(wX);n=~H?m.length-H:n+m.length}function c(){var m={line:r,column:n};return function(v){return v.position=new i(m),l(),v}}function i(m){this.start=m,this.end={line:r,column:n},this.source=t.source}i.prototype.content=e;function o(m){var v=new Error(t.source+":"+r+":"+n+": "+m);if(v.reason=m,v.filename=t.source,v.line=r,v.column=n,v.source=e,!t.silent)throw v}function s(m){var v=m.exec(e);if(v){var H=v[0];return a(H),e=e.slice(H.length),v}}function l(){s(CX)}function f(m){var v;for(m=m||[];v=u();)v!==!1&&m.push(v);return m}function u(){var m=c();if(!(qh!=e.charAt(0)||Gh!=e.charAt(1))){for(var v=2;Pe!=e.charAt(v)&&(Gh!=e.charAt(v)||qh!=e.charAt(v+1));)++v;if(v+=2,Pe===e.charAt(v-1))return o("End of comment missing");var H=e.slice(2,v-2);return n+=2,a(H),e=e.slice(v),n+=2,m({type:LX,comment:H})}}function d(){var m=c(),v=s(HX);if(v){if(u(),!s(bX))return o("property missing ':'");var H=s(MX),h=m({type:SX,property:Yh(v[0].replace(Uh,Pe)),value:H?Yh(H[0].replace(Uh,Pe)):Pe});return s(VX),h}}function p(){var m=[];f(m);for(var v;v=d();)v!==!1&&(m.push(v),f(m));return m}return l(),p()};function Yh(e){return e?e.replace(xX,Pe):Pe}var _X=kX;function PX(e,t){var r=null;if(!e||typeof e!="string")return r;for(var n,a=_X(e),c=typeof t=="function",i,o,s=0,l=a.length;s0?V.createElement(d,o,f):V.createElement(d,o)}function $X(e){let t=-1;for(;++tString(t)).join("")}const Zh={}.hasOwnProperty,IX="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Mt={plugins:{to:"plugins",id:"change-plugins-to-remarkplugins"},renderers:{to:"components",id:"change-renderers-to-components"},astPlugins:{id:"remove-buggy-html-in-markdown-parser"},allowDangerousHtml:{id:"remove-buggy-html-in-markdown-parser"},escapeHtml:{id:"remove-buggy-html-in-markdown-parser"},source:{to:"children",id:"change-source-to-children"},allowNode:{to:"allowElement",id:"replace-allownode-allowedtypes-and-disallowedtypes"},allowedTypes:{to:"allowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},disallowedTypes:{to:"disallowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},includeNodeIndex:{to:"includeElementIndex",id:"change-includenodeindex-to-includeelementindex"}};function v6(e){for(const c in Mt)if(Zh.call(Mt,c)&&Zh.call(e,c)){const i=Mt[c];console.warn(`[react-markdown] Warning: please ${i.to?`use \`${i.to}\` instead of`:"remove"} \`${c}\` (see <${IX}#${i.id}> for more info)`),delete Mt[c]}const t=UG().use(KZ).use(e.remarkPlugins||[]).use(RK,{...e.remarkRehypeOptions,allowDangerousHtml:!0}).use(e.rehypePlugins||[]).use(nX,e),r=new cx;typeof e.children=="string"?r.value=e.children:e.children!==void 0&&e.children!==null&&console.warn(`[react-markdown] Warning: please pass a string as \`children\` (not: \`${e.children}\`)`);const n=t.runSync(t.parse(r),r);if(n.type!=="root")throw new TypeError("Expected a `root` node");let a=V.createElement(V.Fragment,{},Zx({options:e,schema:tX,listDepth:0},n));return e.className&&(a=V.createElement("div",{className:e.className},a)),a}v6.defaultProps={transformLinkUri:kG};v6.propTypes={children:l1.string,className:l1.string,allowElement:l1.func,allowedElements:l1.arrayOf(l1.string),disallowedElements:l1.arrayOf(l1.string),unwrapDisallowed:l1.bool,remarkPlugins:l1.arrayOf(l1.oneOfType([l1.object,l1.func,l1.arrayOf(l1.oneOfType([l1.object,l1.func]))])),rehypePlugins:l1.arrayOf(l1.oneOfType([l1.object,l1.func,l1.arrayOf(l1.oneOfType([l1.object,l1.func]))])),sourcePos:l1.bool,rawSourcePos:l1.bool,skipHtml:l1.bool,includeElementIndex:l1.bool,transformLinkUri:l1.oneOfType([l1.func,l1.bool]),linkTarget:l1.oneOfType([l1.func,l1.string]),transformImageUri:l1.func,components:l1.object};function Kx(e){const t=y.createContext(null);return[({children:a,value:c})=>V.createElement(t.Provider,{value:c},a),()=>{const a=y.useContext(t);if(a===null)throw new Error(e);return a}]}function f8(e){return Array.isArray(e)?e:[e]}const Xx=()=>{};function jX(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||Xx:r=>{var n;r.key==="Escape"&&(e(r),(n=t.onTrigger)==null||n.call(t))}}function dn(e,t){return r=>{e?.(r),t?.(r)}}function Qx({data:e}){const t=[],r=[],n=e.reduce((a,c,i)=>(c.group?a[c.group]?a[c.group].push(i):a[c.group]=[i]:r.push(i),a),{});return Object.keys(n).forEach(a=>{t.push(...n[a].map(c=>e[c]))}),t.push(...r.map(a=>e[a])),t}function P7(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==V.Fragment:!1}function Jx(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;t({fontFamily:e.fontFamily||"sans-serif"})}var UX=Object.defineProperty,Kh=Object.getOwnPropertySymbols,qX=Object.prototype.hasOwnProperty,GX=Object.prototype.propertyIsEnumerable,Xh=(e,t,r)=>t in e?UX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Qh=(e,t)=>{for(var r in t||(t={}))qX.call(t,r)&&Xh(e,r,t[r]);if(Kh)for(var r of Kh(t))GX.call(t,r)&&Xh(e,r,t[r]);return e};function YX(e){return t=>({WebkitTapHighlightColor:"transparent",[t||"&:focus"]:Qh({},e.focusRing==="always"||e.focusRing==="auto"?e.focusRingStyles.styles(e):e.focusRingStyles.resetStyles(e)),[t?t.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:Qh({},e.focusRing==="auto"||e.focusRing==="never"?e.focusRingStyles.resetStyles(e):null)})}function N7(e){return t=>typeof e.primaryShade=="number"?e.primaryShade:e.primaryShade[t||e.colorScheme]}function pu(e){const t=N7(e);return(r,n,a=!0,c=!0)=>{if(typeof r=="string"&&r.includes(".")){const[o,s]=r.split("."),l=parseInt(s,10);if(o in e.colors&&l>=0&&l<10)return e.colors[o][typeof n=="number"&&!c?n:l]}const i=typeof n=="number"?n:t();return r in e.colors?e.colors[r][i]:a?e.colors[e.primaryColor][i]:r}}function tw(e){let t="";for(let r=1;r{const a={from:n?.from||e.defaultGradient.from,to:n?.to||e.defaultGradient.to,deg:n?.deg||e.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${t(a.from,r(),!1)} 0%, ${t(a.to,r(),!1)} 100%)`}}function mu(e){if(typeof e.size=="number")return e.size;const t=e.sizes[e.size];return t!==void 0?t:e.size||e.sizes.md}function XX(e){return t=>`@media (min-width: ${mu({size:t,sizes:e.breakpoints})}px)`}function QX(e){return t=>`@media (max-width: ${mu({size:t,sizes:e.breakpoints})-1}px)`}function JX(e){return/^#?([0-9A-F]{3}){1,2}$/i.test(e)}function eQ(e){let t=e.replace("#","");if(t.length===3){const i=t.split("");t=[i[0],i[0],i[1],i[1],i[2],i[2]].join("")}const r=parseInt(t,16),n=r>>16&255,a=r>>8&255,c=r&255;return{r:n,g:a,b:c,a:1}}function tQ(e){const[t,r,n,a]=e.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:t,g:r,b:n,a:a||1}}function hu(e){return JX(e)?eQ(e):e.startsWith("rgb")?tQ(e):{r:0,g:0,b:0,a:1}}function C0(e,t){if(typeof e!="string"||t>1||t<0)return"rgba(0, 0, 0, 1)";const{r,g:n,b:a}=hu(e);return`rgba(${r}, ${n}, ${a}, ${t})`}function rQ(e=0){return{position:"absolute",top:e,right:e,left:e,bottom:e}}function nQ(e,t){const{r,g:n,b:a,a:c}=hu(e),i=1-t,o=s=>Math.round(s*i);return`rgba(${o(r)}, ${o(n)}, ${o(a)}, ${c})`}function aQ(e,t){const{r,g:n,b:a,a:c}=hu(e),i=o=>Math.round(o+(255-o)*t);return`rgba(${i(r)}, ${i(n)}, ${i(a)}, ${c})`}function cQ(e){return t=>{if(typeof t=="number")return t;const r=typeof e.defaultRadius=="number"?e.defaultRadius:e.radius[e.defaultRadius]||e.defaultRadius;return e.radius[t]||t||r}}function iQ(e,t){if(typeof e=="string"&&e.includes(".")){const[r,n]=e.split("."),a=parseInt(n,10);if(r in t.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:r,shade:a}}return{isSplittedColor:!1}}function oQ(e){const t=pu(e),r=N7(e),n=rw(e);return({variant:a,color:c,gradient:i,primaryFallback:o})=>{const s=iQ(c,e);switch(a){case"light":return{border:"transparent",background:C0(t(c,e.colorScheme==="dark"?8:0,o,!1),e.colorScheme==="dark"?.2:1),color:c==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(c,e.colorScheme==="dark"?2:r("light")),hover:C0(t(c,e.colorScheme==="dark"?7:1,o,!1),e.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:c==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(c,e.colorScheme==="dark"?2:r("light")),hover:C0(t(c,e.colorScheme==="dark"?8:0,o,!1),e.colorScheme==="dark"?.2:1)};case"outline":return{border:t(c,e.colorScheme==="dark"?5:r("light")),background:"transparent",color:t(c,e.colorScheme==="dark"?5:r("light")),hover:e.colorScheme==="dark"?C0(t(c,5,o,!1),.05):C0(t(c,0,o,!1),.35)};case"default":return{border:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4],background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,color:e.colorScheme==="dark"?e.white:e.black,hover:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]};case"white":return{border:"transparent",background:e.white,color:t(c,r()),hover:null};case"transparent":return{border:"transparent",color:c==="dark"?e.colorScheme==="dark"?e.colors.dark[0]:e.colors.dark[9]:t(c,e.colorScheme==="dark"?2:r("light")),background:"transparent",hover:null};case"gradient":return{background:n(i),color:e.white,border:"transparent",hover:null};default:{const l=r(),f=s.isSplittedColor?s.shade:l,u=s.isSplittedColor?s.key:c;return{border:"transparent",background:t(u,f,o),color:e.white,hover:t(u,f===9?8:f+1)}}}}}function sQ(e){return t=>{const r=N7(e)(t);return e.colors[e.primaryColor][r]}}function lQ(e){return{"@media (hover: hover)":{"&:hover":e},"@media (hover: none)":{"&:active":e}}}function fQ(e){return()=>({userSelect:"none",color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]})}const A2={fontStyles:WX,themeColor:pu,focusStyles:YX,linearGradient:ZX,radialGradient:KX,smallerThan:QX,largerThan:XX,rgba:C0,size:mu,cover:rQ,darken:nQ,lighten:aQ,radius:cQ,variant:oQ,primaryShade:N7,hover:lQ,gradient:rw,primaryColor:sQ,placeholderStyles:fQ};var uQ=Object.defineProperty,dQ=Object.defineProperties,pQ=Object.getOwnPropertyDescriptors,Jh=Object.getOwnPropertySymbols,mQ=Object.prototype.hasOwnProperty,hQ=Object.prototype.propertyIsEnumerable,ev=(e,t,r)=>t in e?uQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,vQ=(e,t)=>{for(var r in t||(t={}))mQ.call(t,r)&&ev(e,r,t[r]);if(Jh)for(var r of Jh(t))hQ.call(t,r)&&ev(e,r,t[r]);return e},gQ=(e,t)=>dQ(e,pQ(t));function nw(e){return gQ(vQ({},e),{fn:{fontStyles:A2.fontStyles(e),themeColor:A2.themeColor(e),focusStyles:A2.focusStyles(e),largerThan:A2.largerThan(e),smallerThan:A2.smallerThan(e),radialGradient:A2.radialGradient,linearGradient:A2.linearGradient,gradient:A2.gradient(e),rgba:A2.rgba,size:A2.size,cover:A2.cover,lighten:A2.lighten,darken:A2.darken,primaryShade:A2.primaryShade(e),radius:A2.radius(e),variant:A2.variant(e),hover:A2.hover,primaryColor:A2.primaryColor(e),placeholderStyles:A2.placeholderStyles(e)}})}const zQ={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",dateFormat:"MMMM D, YYYY",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:BX,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.1)",sm:"0 1px 3px rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0px 10px 15px -5px, rgba(0, 0, 0, 0.04) 0px 7px 7px -5px",md:"0 1px 3px rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0px 20px 25px -5px, rgba(0, 0, 0, 0.04) 0px 10px 10px -5px",lg:"0 1px 3px rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0px 28px 23px -7px, rgba(0, 0, 0, 0.04) 0px 12px 12px -7px",xl:"0 1px 3px rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0px 36px 28px -7px, rgba(0, 0, 0, 0.04) 0px 17px 17px -7px"},fontSizes:{xs:12,sm:14,md:16,lg:18,xl:20},radius:{xs:2,sm:4,md:8,lg:16,xl:32},spacing:{xs:10,sm:12,md:16,lg:20,xl:24},breakpoints:{xs:576,sm:768,md:992,lg:1200,xl:1400},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:34,lineHeight:1.3,fontWeight:void 0},h2:{fontSize:26,lineHeight:1.35,fontWeight:void 0},h3:{fontSize:22,lineHeight:1.4,fontWeight:void 0},h4:{fontSize:18,lineHeight:1.45,fontWeight:void 0},h5:{fontSize:16,lineHeight:1.5,fontWeight:void 0},h6:{fontSize:14,lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(1px)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:e=>({outlineOffset:2,outline:`2px solid ${e.colors[e.primaryColor][e.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:e=>({outline:"none",borderColor:e.colors[e.primaryColor][typeof e.primaryShade=="object"?e.primaryShade[e.colorScheme]:e.primaryShade]})}},vu=nw(zQ);function yQ(e){if(e.sheet)return e.sheet;for(var t=0;t0?Y2(x8,--S3):0,u8--,P2===10&&(u8=1,Gc--),P2}function I3(){return P2=S32||r7(P2)>3?"":" "}function NQ(e,t){for(;--t&&I3()&&!(P2<48||P2>102||P2>57&&P2<65||P2>70&&P2<97););return O7(e,yr()+(t<6&&W4()==32&&I3()==32))}function el(e){for(;I3();)switch(P2){case e:return S3;case 34:case 39:e!==34&&e!==39&&el(P2);break;case 40:e===41&&el(e);break;case 92:I3();break}return S3}function OQ(e,t){for(;I3()&&e+P2!==57;)if(e+P2===84&&W4()===47)break;return"/*"+O7(t,S3-1)+"*"+qc(e===47?e:I3())}function AQ(e){for(;!r7(W4());)I3();return O7(e,S3)}function EQ(e){return lw(Hr("",null,null,null,[""],e=sw(e),0,[0],e))}function Hr(e,t,r,n,a,c,i,o,s){for(var l=0,f=0,u=i,d=0,p=0,m=0,v=1,H=1,h=1,g=0,z="",b=a,x=c,C=n,M=z;H;)switch(m=g,g=I3()){case 40:if(m!=108&&Y2(M,u-1)==58){Js(M+=q1(Cr(g),"&","&\f"),"&\f")!=-1&&(h=-1);break}case 34:case 39:case 91:M+=Cr(g);break;case 9:case 10:case 13:case 32:M+=PQ(m);break;case 92:M+=NQ(yr()-1,7);continue;case 47:switch(W4()){case 42:case 47:Vt($Q(OQ(I3(),yr()),t,r),s);break;default:M+="/"}break;case 123*v:o[l++]=$4(M)*h;case 125*v:case 59:case 0:switch(g){case 0:case 125:H=0;case 59+f:h==-1&&(M=q1(M,/\f/g,"")),p>0&&$4(M)-u&&Vt(p>32?rv(M+";",n,r,u-1):rv(q1(M," ","")+";",n,r,u-2),s);break;case 59:M+=";";default:if(Vt(C=tv(M,t,r,l,f,a,o,z,b=[],x=[],u),c),g===123)if(f===0)Hr(M,t,C,C,b,c,u,o,x);else switch(d===99&&Y2(M,3)===110?100:d){case 100:case 108:case 109:case 115:Hr(e,C,C,n&&Vt(tv(e,C,C,0,0,a,o,z,a,b=[],u),x),a,x,u,o,n?b:x);break;default:Hr(M,C,C,C,[""],x,0,o,x)}}l=f=p=0,v=h=1,z=M="",u=i;break;case 58:u=1+$4(M),p=m;default:if(v<1){if(g==123)--v;else if(g==125&&v++==0&&_Q()==125)continue}switch(M+=qc(g),g*v){case 38:h=f>0?1:(M+="\f",-1);break;case 44:o[l++]=($4(M)-1)*h,h=1;break;case 64:W4()===45&&(M+=Cr(I3())),d=W4(),f=u=$4(z=M+=AQ(yr())),g++;break;case 45:m===45&&$4(M)==2&&(v=0)}}return c}function tv(e,t,r,n,a,c,i,o,s,l,f){for(var u=a-1,d=a===0?c:[""],p=yu(d),m=0,v=0,H=0;m0?d[h]+" "+g:q1(g,/&\f/g,d[h])))&&(s[H++]=z);return Yc(e,t,r,a===0?gu:o,s,l,f)}function $Q(e,t,r){return Yc(e,t,r,aw,qc(kQ()),t7(e,2,-2),0)}function rv(e,t,r,n){return Yc(e,t,r,zu,t7(e,0,n),t7(e,n+1,-1),n)}function Z0(e,t){for(var r="",n=yu(e),a=0;a6)switch(Y2(e,t+1)){case 109:if(Y2(e,t+4)!==45)break;case 102:return q1(e,/(.+:)(.+)-([^]+)/,"$1"+U1+"$2-$3$1"+pn+(Y2(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~Js(e,"stretch")?fw(q1(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(Y2(e,t+1)!==115)break;case 6444:switch(Y2(e,$4(e)-3-(~Js(e,"!important")&&10))){case 107:return q1(e,":",":"+U1)+e;case 101:return q1(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+U1+(Y2(e,14)===45?"inline-":"")+"box$3$1"+U1+"$2$3$1"+e3+"$2box$3")+e}break;case 5936:switch(Y2(e,t+11)){case 114:return U1+e+e3+q1(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return U1+e+e3+q1(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return U1+e+e3+q1(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return U1+e+e3+e+e}return e}var qQ=function(t,r,n,a){if(t.length>-1&&!t.return)switch(t.type){case zu:t.return=fw(t.value,t.length);break;case cw:return Z0([W8(t,{value:q1(t.value,"@","@"+U1)})],a);case gu:if(t.length)return SQ(t.props,function(c){switch(LQ(c,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Z0([W8(t,{props:[q1(c,/:(read-\w+)/,":"+pn+"$1")]})],a);case"::placeholder":return Z0([W8(t,{props:[q1(c,/:(plac\w+)/,":"+U1+"input-$1")]}),W8(t,{props:[q1(c,/:(plac\w+)/,":"+pn+"$1")]}),W8(t,{props:[q1(c,/:(plac\w+)/,e3+"input-$1")]})],a)}return""})}},GQ=[qQ],uw=function(t){var r=t.key;if(r==="css"){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(v){var H=v.getAttribute("data-emotion");H.indexOf(" ")!==-1&&(document.head.appendChild(v),v.setAttribute("data-s",""))})}var a=t.stylisPlugins||GQ,c={},i,o=[];i=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+r+' "]'),function(v){for(var H=v.getAttribute("data-emotion").split(" "),h=1;h=4;++n,a-=4)r=e.charCodeAt(n)&255|(e.charCodeAt(++n)&255)<<8|(e.charCodeAt(++n)&255)<<16|(e.charCodeAt(++n)&255)<<24,r=(r&65535)*1540483477+((r>>>16)*59797<<16),r^=r>>>24,t=(r&65535)*1540483477+((r>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(a){case 3:t^=(e.charCodeAt(n+2)&255)<<16;case 2:t^=(e.charCodeAt(n+1)&255)<<8;case 1:t^=e.charCodeAt(n)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var iJ={animationIterationCount:1,aspectRatio: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,scale: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},oJ=/[A-Z]|^ms/g,sJ=/_EMO_([^_]+?)_([^]*?)_EMO_/g,gw=function(t){return t.charCodeAt(1)===45},cv=function(t){return t!=null&&typeof t!="boolean"},Di=FQ(function(e){return gw(e)?e:e.replace(oJ,"-$&").toLowerCase()}),iv=function(t,r){switch(t){case"animation":case"animationName":if(typeof r=="string")return r.replace(sJ,function(n,a,c){return D4={name:a,styles:c,next:D4},a})}return iJ[t]!==1&&!gw(t)&&typeof r=="number"&&r!==0?r+"px":r};function n7(e,t,r){if(r==null)return"";var n=r;if(n.__emotion_styles!==void 0)return n;switch(typeof r){case"boolean":return"";case"object":{var a=r;if(a.anim===1)return D4={name:a.name,styles:a.styles,next:D4},a.name;var c=r;if(c.styles!==void 0){var i=c.next;if(i!==void 0)for(;i!==void 0;)D4={name:i.name,styles:i.styles,next:D4},i=i.next;var o=c.styles+";";return o}return lJ(e,t,r)}case"function":{if(e!==void 0){var s=D4,l=r(e);return D4=s,n7(e,t,l)}break}}var f=r;if(t==null)return f;var u=t[f];return u!==void 0?u:f}function lJ(e,t,r){var n="";if(Array.isArray(r))for(var a=0;at in e?vJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,HJ=(e,t)=>{for(var r in t||(t={}))yJ.call(t,r)&&fv(e,r,t[r]);if(lv)for(var r of lv(t))CJ.call(t,r)&&fv(e,r,t[r]);return e},bJ=(e,t)=>gJ(e,zJ(t));function MJ({theme:e}){return V.createElement(c9,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:e.colorScheme==="dark"?"dark":"light"},body:bJ(HJ({},e.fn.fontStyles()),{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.white,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,lineHeight:e.lineHeight,fontSize:e.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function xt(e,t,r){Object.keys(t).forEach(n=>{e[`--mantine-${r}-${n}`]=typeof t[n]=="number"?`${t[n]}px`:t[n]})}function VJ({theme:e}){const t={"--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-transition-timing-function":e.transitionTimingFunction,"--mantine-line-height":`${e.lineHeight}`,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":`${e.headings.fontWeight}`};xt(t,e.shadows,"shadow"),xt(t,e.fontSizes,"font-size"),xt(t,e.radius,"radius"),xt(t,e.spacing,"spacing"),Object.keys(e.colors).forEach(n=>{e.colors[n].forEach((a,c)=>{t[`--mantine-color-${n}-${c}`]=a})});const r=e.headings.sizes;return Object.keys(r).forEach(n=>{t[`--mantine-${n}-font-size`]=`${r[n].fontSize}px`,t[`--mantine-${n}-line-height`]=`${r[n].lineHeight}`}),V.createElement(c9,{styles:{":root":t}})}var xJ=Object.defineProperty,wJ=Object.defineProperties,LJ=Object.getOwnPropertyDescriptors,uv=Object.getOwnPropertySymbols,SJ=Object.prototype.hasOwnProperty,kJ=Object.prototype.propertyIsEnumerable,dv=(e,t,r)=>t in e?xJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ve=(e,t)=>{for(var r in t||(t={}))SJ.call(t,r)&&dv(e,r,t[r]);if(uv)for(var r of uv(t))kJ.call(t,r)&&dv(e,r,t[r]);return e},pv=(e,t)=>wJ(e,LJ(t));function _J(e,t){if(!t)return e;const r=Object.keys(e).reduce((n,a)=>{if(a==="headings"&&t.headings){const c=t.headings.sizes?Object.keys(e.headings.sizes).reduce((i,o)=>(i[o]=Ve(Ve({},e.headings.sizes[o]),t.headings.sizes[o]),i),{}):e.headings.sizes;return pv(Ve({},n),{headings:pv(Ve(Ve({},e.headings),t.headings),{sizes:c})})}return n[a]=typeof t[a]=="object"?Ve(Ve({},e[a]),t[a]):typeof t[a]=="number"||typeof t[a]=="boolean"||typeof t[a]=="function"?t[a]:t[a]||e[a],n},{});if(!(r.primaryColor in r.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return r}function PJ(e,t){return nw(_J(e,t))}function yw(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}const NJ={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:"1px dotted ButtonText"},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"},"[hidden]":{display:"none"}};function OJ(){return V.createElement(c9,{styles:NJ})}var AJ=Object.defineProperty,mv=Object.getOwnPropertySymbols,EJ=Object.prototype.hasOwnProperty,$J=Object.prototype.propertyIsEnumerable,hv=(e,t,r)=>t in e?AJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,S5=(e,t)=>{for(var r in t||(t={}))EJ.call(t,r)&&hv(e,r,t[r]);if(mv)for(var r of mv(t))$J.call(t,r)&&hv(e,r,t[r]);return e};const mn=y.createContext({theme:vu});function V2(){var e;return((e=y.useContext(mn))==null?void 0:e.theme)||vu}function DJ(e){const t=V2(),r=n=>{var a,c;return{styles:((a=t.components[n])==null?void 0:a.styles)||{},classNames:((c=t.components[n])==null?void 0:c.classNames)||{}}};return Array.isArray(e)?e.map(r):[r(e)]}function Cw(){var e;return(e=y.useContext(mn))==null?void 0:e.emotionCache}function w1(e,t,r){var n;const a=V2(),c=(n=a.components[e])==null?void 0:n.defaultProps,i=typeof c=="function"?c(a):c;return S5(S5(S5({},t),i),yw(r))}function Hw({theme:e,emotionCache:t,withNormalizeCSS:r=!1,withGlobalStyles:n=!1,withCSSVariables:a=!1,inherit:c=!1,children:i}){const o=y.useContext(mn),s=PJ(vu,c?S5(S5({},o.theme),e):e);return V.createElement(mJ,{theme:s},V.createElement(mn.Provider,{value:{theme:s,emotionCache:t}},r&&V.createElement(OJ,null),n&&V.createElement(MJ,{theme:s}),a&&V.createElement(VJ,{theme:s}),typeof s.globalStyles=="function"&&V.createElement(c9,{styles:s.globalStyles(s)}),i))}Hw.displayName="@mantine/core/MantineProvider";const TJ={app:100,modal:200,popover:300,overlay:400,max:9999};function V6(e){return TJ[e]}function RJ(e,t){const r=y.useRef();return(!r.current||t.length!==r.current.prevDeps.length||r.current.prevDeps.map((n,a)=>n===t[a]).indexOf(!1)>=0)&&(r.current={v:e(),prevDeps:[...t]}),r.current.v}const FJ=uw({key:"mantine",prepend:!0});function IJ(){return Cw()||FJ}var jJ=Object.defineProperty,vv=Object.getOwnPropertySymbols,BJ=Object.prototype.hasOwnProperty,WJ=Object.prototype.propertyIsEnumerable,gv=(e,t,r)=>t in e?jJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,UJ=(e,t)=>{for(var r in t||(t={}))BJ.call(t,r)&&gv(e,r,t[r]);if(vv)for(var r of vv(t))WJ.call(t,r)&&gv(e,r,t[r]);return e};const Ti="ref";function qJ(e){let t;if(e.length!==1)return{args:e,ref:t};const[r]=e;if(!(r instanceof Object))return{args:e,ref:t};if(!(Ti in r))return{args:e,ref:t};t=r[Ti];const n=UJ({},r);return delete n[Ti],{args:[n],ref:t}}const{cssFactory:GJ}=(()=>{function e(r,n,a){const c=[],i=nJ(r,c,a);return c.length<2?a:i+n(c)}function t(r){const{cache:n}=r,a=(...i)=>{const{ref:o,args:s}=qJ(i),l=Mu(s,n.registered);return vw(n,l,!1),`${n.key}-${l.name}${o===void 0?"":` ${o}`}`};return{css:a,cx:(...i)=>e(n.registered,a,ew(i))}}return{cssFactory:t}})();function bw(){const e=IJ();return RJ(()=>GJ({cache:e}),[e])}function YJ({cx:e,classes:t,context:r,classNames:n,name:a,cache:c}){const i=r.reduce((o,s)=>(Object.keys(s.classNames).forEach(l=>{typeof o[l]!="string"?o[l]=`${s.classNames[l]}`:o[l]=`${o[l]} ${s.classNames[l]}`}),o),{});return Object.keys(t).reduce((o,s)=>(o[s]=e(t[s],i[s],n!=null&&n[s],Array.isArray(a)?a.filter(Boolean).map(l=>`${c?.key||"mantine"}-${l}-${s}`).join(" "):a?`${c?.key||"mantine"}-${a}-${s}`:null),o),{})}var ZJ=Object.defineProperty,zv=Object.getOwnPropertySymbols,KJ=Object.prototype.hasOwnProperty,XJ=Object.prototype.propertyIsEnumerable,yv=(e,t,r)=>t in e?ZJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ri=(e,t)=>{for(var r in t||(t={}))KJ.call(t,r)&&yv(e,r,t[r]);if(zv)for(var r of zv(t))XJ.call(t,r)&&yv(e,r,t[r]);return e};function QJ(e){return`__mantine-ref-${e||""}`}function Cv(e,t,r){const n=a=>typeof a=="function"?a(t,r||{}):a||{};return Array.isArray(e)?e.map(a=>n(a.styles)).reduce((a,c)=>(Object.keys(c).forEach(i=>{a[i]?a[i]=Ri(Ri({},a[i]),c[i]):a[i]=Ri({},c[i])}),a),{}):n(e)}function d1(e){const t=typeof e=="function"?e:()=>e;function r(n,a){const c=V2(),i=DJ(a?.name),o=Cw(),{css:s,cx:l}=bw(),f=t(c,n,QJ),u=Cv(a?.styles,c,n),d=Cv(i,c,n),p=Object.fromEntries(Object.keys(f).map(m=>{const v=l({[s(f[m])]:!a?.unstyled},s(d[m]),s(u[m]));return[m,v]}));return{classes:YJ({cx:l,classes:p,context:i,classNames:a?.classNames,name:a?.name,cache:o}),cx:l,theme:c}}return r}var JJ=Object.defineProperty,e11=Object.defineProperties,t11=Object.getOwnPropertyDescriptors,Hv=Object.getOwnPropertySymbols,r11=Object.prototype.hasOwnProperty,n11=Object.prototype.propertyIsEnumerable,bv=(e,t,r)=>t in e?JJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,U8=(e,t)=>{for(var r in t||(t={}))r11.call(t,r)&&bv(e,r,t[r]);if(Hv)for(var r of Hv(t))n11.call(t,r)&&bv(e,r,t[r]);return e},q8=(e,t)=>e11(e,t11(t));const G8={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(.9) translateY(10px)"},transitionProperty:"transform, opacity"},wt={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(-20px) skew(-10deg, -5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(20px) skew(-10deg, -5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(-5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:q8(U8({},G8),{common:{transformOrigin:"center center"}}),"pop-bottom-left":q8(U8({},G8),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":q8(U8({},G8),{common:{transformOrigin:"bottom right"}}),"pop-top-left":q8(U8({},G8),{common:{transformOrigin:"top left"}}),"pop-top-right":q8(U8({},G8),{common:{transformOrigin:"top right"}})},Mv=["mousedown","touchstart"];function a11(e,t,r){const n=y.useRef();return y.useEffect(()=>{const a=c=>{const{target:i}=c??{};if(Array.isArray(r)){const o=i?.hasAttribute("data-ignore-outside-clicks")||!document.body.contains(i)&&i.tagName!=="HTML";r.every(l=>!!l&&!c.composedPath().includes(l))&&!o&&e()}else n.current&&!n.current.contains(i)&&e()};return(t||Mv).forEach(c=>document.addEventListener(c,a)),()=>{(t||Mv).forEach(c=>document.removeEventListener(c,a))}},[n,e,r]),n}function c11(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function i11(e,t){return typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function o11(e,t,{getInitialValueInEffect:r}={getInitialValueInEffect:!0}){const[n,a]=y.useState(r?t:i11(e)),c=y.useRef();return y.useEffect(()=>{if("matchMedia"in window)return c.current=window.matchMedia(e),a(c.current.matches),c11(c.current,i=>a(i.matches))},[e]),n}function j3(e,t,r){return Math.min(Math.max(e,t),r)}const Vu=typeof document<"u"?y.useLayoutEffect:y.useEffect;function B2(e,t){const r=y.useRef(!1);y.useEffect(()=>()=>{r.current=!1},[]),y.useEffect(()=>{if(r.current)return e();r.current=!0},t)}function xu({opened:e,shouldReturnFocus:t=!0}){const r=y.useRef(),n=()=>{var a;r.current&&"focus"in r.current&&typeof r.current.focus=="function"&&((a=r.current)==null||a.focus({preventScroll:!0}))};return B2(()=>{let a=-1;const c=i=>{i.key==="Tab"&&window.clearTimeout(a)};return document.addEventListener("keydown",c),e?r.current=document.activeElement:t&&(a=window.setTimeout(n,10)),()=>{window.clearTimeout(a),document.removeEventListener("keydown",c)}},[e,t]),n}const s11=/input|select|textarea|button|object/,Mw="a, input, select, textarea, button, object, [tabindex]";function l11(e){return e.style.display==="none"}function f11(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let r=e;for(;r&&!(r===document.body||r.nodeType===11);){if(l11(r))return!1;r=r.parentNode}return!0}function Vw(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function rl(e){const t=e.nodeName.toLowerCase(),r=!Number.isNaN(Vw(e));return(s11.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||r)&&f11(e)}function xw(e){const t=Vw(e);return(Number.isNaN(t)||t>=0)&&rl(e)}function u11(e){return Array.from(e.querySelectorAll(Mw)).filter(xw)}function d11(e,t){const r=u11(e);if(!r.length){t.preventDefault();return}const n=r[t.shiftKey?0:r.length-1],a=e.getRootNode();if(!(n===a.activeElement||e===a.activeElement))return;t.preventDefault();const i=r[t.shiftKey?r.length-1:0];i&&i.focus()}function p11(e,t="body > :not(script)"){const r=Array.from(document.querySelectorAll(t)).map(n=>{var a;if((a=n?.shadowRoot)!=null&&a.contains(e)||n.contains(e))return;const c=n.getAttribute("aria-hidden");return(c===null||c==="false")&&n.setAttribute("aria-hidden","true"),{node:n,ariaHidden:c}});return()=>{r.forEach(n=>{n&&(n.ariaHidden===null?n.node.removeAttribute("aria-hidden"):n.node.setAttribute("aria-hidden",n.ariaHidden))})}}function wu(e=!0){const t=y.useRef(),r=y.useRef(null),n=y.useCallback(a=>{if(e&&a!==null&&(r.current=p11(a),t.current!==a))if(a){const c=()=>{let i=a.querySelector("[data-autofocus]");if(!i){const o=Array.from(a.querySelectorAll(Mw));i=o.find(xw)||o.find(rl)||null,!i&&rl(a)&&(i=a)}i&&i.focus({preventScroll:!0})};setTimeout(()=>{a.getRootNode()&&c()}),t.current=a}else t.current=null},[e]);return y.useEffect(()=>{if(!e)return;const a=c=>{c.key==="Tab"&&t.current&&d11(t.current,c)};return document.addEventListener("keydown",a),()=>{document.removeEventListener("keydown",a),r.current&&r.current()}},[e]),n}const m11=()=>`mantine-${Math.random().toString(36).slice(2,11)}`,h11=V.useId||(()=>{});function v11(){const[e,t]=y.useState("");return Vu(()=>{t(m11())},[]),e}function g11(){const e=h11();return e?`mantine-${e.replace(/:/g,"")}`:""}function k4(e){return typeof e=="string"?e:g11()||v11()}function z11(e,t){const[r,n]=y.useState(!1),a=y.useRef(),c=y.useRef();y.useEffect(()=>{c.current=e},[e]);const i=()=>{n(l=>(!l&&!a.current&&(a.current=window.setInterval(c.current,t)),!0))},o=()=>{n(!1),window.clearInterval(a.current),a.current=void 0};return{start:i,stop:o,toggle:()=>{r?o():i()},active:r}}function nl(e,t,r){y.useEffect(()=>(window.addEventListener(e,t,r),()=>window.removeEventListener(e,t,r)),[e,t])}function ww(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function y11(...e){return t=>{e.forEach(r=>ww(r,t))}}function o3(...e){return y.useCallback(y11(...e),e)}const Lw=e=>({x:j3(e.x,0,1),y:j3(e.y,0,1)});function Lu(e,t,r="ltr"){const n=y.useRef(),a=y.useRef(!1),c=y.useRef(!1),i=y.useRef(0),[o,s]=y.useState(!1);return y.useEffect(()=>{a.current=!0},[]),y.useEffect(()=>{const l=({x:g,y:z})=>{cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>{if(a.current&&n.current){n.current.style.userSelect="none";const b=n.current.getBoundingClientRect();if(b.width&&b.height){const x=j3((g-b.left)/b.width,0,1);e({x:r==="ltr"?x:1-x,y:j3((z-b.top)/b.height,0,1)})}}})},f=()=>{document.addEventListener("mousemove",v),document.addEventListener("mouseup",p),document.addEventListener("touchmove",h),document.addEventListener("touchend",p)},u=()=>{document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",p),document.removeEventListener("touchmove",h),document.removeEventListener("touchend",p)},d=()=>{!c.current&&a.current&&(c.current=!0,typeof t?.onScrubStart=="function"&&t.onScrubStart(),s(!0),f())},p=()=>{c.current&&a.current&&(c.current=!1,s(!1),u(),setTimeout(()=>{typeof t?.onScrubEnd=="function"&&t.onScrubEnd()},0))},m=g=>{d(),g.preventDefault(),v(g)},v=g=>l({x:g.clientX,y:g.clientY}),H=g=>{g.cancelable&&g.preventDefault(),d(),h(g)},h=g=>{g.cancelable&&g.preventDefault(),l({x:g.changedTouches[0].clientX,y:g.changedTouches[0].clientY})};return n.current.addEventListener("mousedown",m),n.current.addEventListener("touchstart",H,{passive:!1}),()=>{n.current&&(n.current.removeEventListener("mousedown",m),n.current.removeEventListener("touchstart",H))}},[r,e]),{ref:n,active:o}}function U3({value:e,defaultValue:t,finalValue:r,onChange:n=()=>{}}){const[a,c]=y.useState(t!==void 0?t:r),i=o=>{c(o),n?.(o)};return e!==void 0?[e,n,!0]:[a,i,!1]}function Sw(e,t){return o11("(prefers-reduced-motion: reduce)",e,t)}const C11=e=>e<.5?2*e*e:-1+(4-2*e)*e,H11=({axis:e,target:t,parent:r,alignment:n,offset:a,isList:c})=>{if(!t||!r&&typeof document>"u")return 0;const i=!!r,s=(r||document.body).getBoundingClientRect(),l=t.getBoundingClientRect(),f=u=>l[u]-s[u];if(e==="y"){const u=f("top");if(u===0)return 0;if(n==="start"){const p=u-a;return p<=l.height*(c?0:1)||!c?p:0}const d=i?s.height:window.innerHeight;if(n==="end"){const p=u+a-d+l.height;return p>=-l.height*(c?0:1)||!c?p:0}return n==="center"?u-d/2+l.height/2:0}if(e==="x"){const u=f("left");if(u===0)return 0;if(n==="start"){const p=u-a;return p<=l.width||!c?p:0}const d=i?s.width:window.innerWidth;if(n==="end"){const p=u+a-d+l.width;return p>=-l.width||!c?p:0}return n==="center"?u-d/2+l.width/2:0}return 0},b11=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const r=e==="y"?"scrollTop":"scrollLeft";if(t)return t[r];const{body:n,documentElement:a}=document;return n[r]+a[r]},M11=({axis:e,parent:t,distance:r})=>{if(!t&&typeof document>"u")return;const n=e==="y"?"scrollTop":"scrollLeft";if(t)t[n]=r;else{const{body:a,documentElement:c}=document;a[n]=r,c[n]=r}};function kw({duration:e=1250,axis:t="y",onScrollFinish:r,easing:n=C11,offset:a=0,cancelable:c=!0,isList:i=!1}={}){const o=y.useRef(0),s=y.useRef(0),l=y.useRef(!1),f=y.useRef(null),u=y.useRef(null),d=Sw(),p=()=>{o.current&&cancelAnimationFrame(o.current)},m=y.useCallback(({alignment:H="start"}={})=>{var h;l.current=!1,o.current&&p();const g=(h=b11({parent:f.current,axis:t}))!=null?h:0,z=H11({parent:f.current,target:u.current,axis:t,alignment:H,offset:a,isList:i})-(f.current?0:g);function b(){s.current===0&&(s.current=performance.now());const C=performance.now()-s.current,M=d||e===0?1:C/e,S=g+z*n(M);M11({parent:f.current,axis:t,distance:S}),!l.current&&M<1?o.current=requestAnimationFrame(b):(typeof r=="function"&&r(),s.current=0,o.current=0,p())}b()},[t,e,n,i,a,r,d]),v=()=>{c&&(l.current=!0)};return nl("wheel",v,{passive:!0}),nl("touchmove",v,{passive:!0}),y.useEffect(()=>p,[]),{scrollableRef:f,targetRef:u,scrollIntoView:m,cancel:p}}function V11(){if(typeof window>"u"||typeof document>"u")return 0;const e=parseInt(window.getComputedStyle(document.body).paddingRight,10),t=window.innerWidth-document.documentElement.clientWidth;return e+t}const x11=({disableBodyPadding:e})=>{const t=e?null:V11();return`body {
+ --removed-scroll-width: ${t}px;
+ touch-action: none;
+ overflow: hidden !important;
+ position: relative !important;
+ ${t?"padding-right: var(--removed-scroll-width) !important;":""}
+ `};function w11(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function L11(e){(document.head||document.getElementsByTagName("head")[0]).appendChild(e)}function S11(){const e=document.createElement("style");return e.type="text/css",e.setAttribute("mantine-scroll-lock",""),e}function _w(e,t={disableBodyPadding:!1}){const[r,n]=y.useState(e||!1),a=y.useRef(0),{disableBodyPadding:c}=t,i=y.useRef(null),o=()=>{a.current=window.scrollY;const l=x11({disableBodyPadding:c}),f=S11();w11(f,l),L11(f),i.current=f},s=()=>{i?.current&&(i.current.parentNode.removeChild(i.current),i.current=null)};return y.useEffect(()=>(r?o():s(),s),[r]),y.useEffect(()=>{e!==void 0&&n(e)},[e]),y.useEffect(()=>{e===void 0&&typeof window<"u"&&window.document.body.style.overflow==="hidden"&&n(!0)},[n]),[r,n]}function k11(){const{userAgent:e}=window.navigator,t=/(Macintosh)|(MacIntel)|(MacPPC)|(Mac68K)/i,r=/(Win32)|(Win64)|(Windows)|(WinCE)/i,n=/(iPhone)|(iPad)|(iPod)/i;return t.test(e)?"macos":n.test(e)?"ios":r.test(e)?"windows":/Android/i.test(e)?"android":/Linux/i.test(e)?"linux":"undetermined"}function _11(){return typeof window<"u"?k11():"undetermined"}function P11(e,t){const[r,n]=y.useState(e),a=()=>{var o;r||(n(!0),(o=t?.onOpen)==null||o.call(t))},c=()=>{var o;r&&(n(!1),(o=t?.onClose)==null||o.call(t))};return[r,{open:a,close:c,toggle:()=>{r?c():a()}}]}function N11(){const[e,t]=y.useState(!1);Vu(()=>{t(typeof window<"u"&&"EyeDropper"in window)},[]);const r=y.useCallback((n={})=>{if(e)return new window.EyeDropper().open(n)},[e]);return{supported:e,open:r}}function O11(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function q6(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)}var Vv=Object.getOwnPropertySymbols,A11=Object.prototype.hasOwnProperty,E11=Object.prototype.propertyIsEnumerable,$11=(e,t)=>{var r={};for(var n in e)A11.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Vv)for(var n of Vv(e))t.indexOf(n)<0&&E11.call(e,n)&&(r[n]=e[n]);return r};function x6(e){const t=e,{m:r,mx:n,my:a,mt:c,mb:i,ml:o,mr:s,p:l,px:f,py:u,pt:d,pb:p,pl:m,pr:v,bg:H,c:h,opacity:g,ff:z,fz:b,fw:x,lts:C,ta:M,lh:S,fs:k,tt:w,td:P,w:N,miw:$,maw:A,h:D,mih:j,mah:R,bgsz:T,bgp:F,bgr:L,bga:q,pos:Z,top:_,left:t1,bottom:v1,right:X,inset:s1,display:b1}=t,f1=$11(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:yw({m:r,mx:n,my:a,mt:c,mb:i,ml:o,mr:s,p:l,px:f,py:u,pt:d,pb:p,pl:m,pr:v,bg:H,c:h,opacity:g,ff:z,fz:b,fw:x,lts:C,ta:M,lh:S,fs:k,tt:w,td:P,w:N,miw:$,maw:A,h:D,mih:j,mah:R,bgsz:T,bgp:F,bgr:L,bga:q,pos:Z,top:_,left:t1,bottom:v1,right:X,inset:s1,display:b1}),rest:f1}}function D11(e,t){const r=Object.keys(e).filter(n=>n!=="base").sort((n,a)=>t.fn.size({size:n,sizes:t.breakpoints})-t.fn.size({size:a,sizes:t.breakpoints}));return"base"in e?["base",...r]:r}function T11({value:e,theme:t,getValue:r,property:n}){if(e==null)return;if(typeof e=="object")return D11(e,t).reduce((i,o)=>{if(o==="base"&&e.base!==void 0){const l=r(e.base,t);return Array.isArray(n)?(n.forEach(f=>{i[f]=l}),i):(i[n]=l,i)}const s=r(e[o],t);return Array.isArray(n)?(i[t.fn.largerThan(o)]={},n.forEach(l=>{i[t.fn.largerThan(o)][l]=s}),i):(i[t.fn.largerThan(o)]={[n]:s},i)},{});const a=r(e,t);return Array.isArray(n)?n.reduce((c,i)=>(c[i]=a,c),{}):{[n]:a}}function R11(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function F11(e){return e}function I11(e,t){return t.fn.size({size:e,sizes:t.fontSizes})}const j11=["-xs","-sm","-md","-lg","-xl"];function B11(e,t){return j11.includes(e)?t.fn.size({size:e.replace("-",""),sizes:t.spacing})*-1:t.fn.size({size:e,sizes:t.spacing})}const W11={color:R11,default:F11,fontSize:I11,spacing:B11},U11={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"default",property:"opacity"},ff:{type:"default",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"default",property:"fontWeight"},lts:{type:"default",property:"letterSpacing"},ta:{type:"default",property:"textAlign"},lh:{type:"default",property:"lineHeight"},fs:{type:"default",property:"fontStyle"},tt:{type:"default",property:"textTransform"},td:{type:"default",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"default",property:"background-size"},bgp:{type:"default",property:"background-position"},bgr:{type:"default",property:"background-repeat"},bga:{type:"default",property:"background-attachment"},pos:{type:"default",property:"position"},top:{type:"default",property:"top"},left:{type:"default",property:"left"},bottom:{type:"default",property:"bottom"},right:{type:"default",property:"right"},inset:{type:"default",property:"inset"},display:{type:"default",property:"display"}};var q11=Object.defineProperty,xv=Object.getOwnPropertySymbols,G11=Object.prototype.hasOwnProperty,Y11=Object.prototype.propertyIsEnumerable,wv=(e,t,r)=>t in e?q11(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Lv=(e,t)=>{for(var r in t||(t={}))G11.call(t,r)&&wv(e,r,t[r]);if(xv)for(var r of xv(t))Y11.call(t,r)&&wv(e,r,t[r]);return e};function al(e,t,r=U11){return Object.keys(r).reduce((a,c)=>(c in e&&e[c]!==void 0&&a.push(T11({value:e[c],getValue:W11[r[c].type],property:r[c].property,theme:t})),a),[]).reduce((a,c)=>(Object.keys(c).forEach(i=>{typeof c[i]=="object"&&c[i]!==null&&i in a?a[i]=Lv(Lv({},a[i]),c[i]):a[i]=c[i]}),a),{})}function Sv(e,t){return typeof e=="function"?e(t):e}function Z11(e,t,r){const n=V2(),{css:a,cx:c}=bw();return Array.isArray(e)?c(r,a(al(t,n)),e.map(i=>a(Sv(i,n)))):c(r,a(Sv(e,n)),a(al(t,n)))}var K11=Object.defineProperty,hn=Object.getOwnPropertySymbols,Pw=Object.prototype.hasOwnProperty,Nw=Object.prototype.propertyIsEnumerable,kv=(e,t,r)=>t in e?K11(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,X11=(e,t)=>{for(var r in t||(t={}))Pw.call(t,r)&&kv(e,r,t[r]);if(hn)for(var r of hn(t))Nw.call(t,r)&&kv(e,r,t[r]);return e},Q11=(e,t)=>{var r={};for(var n in e)Pw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&hn)for(var n of hn(e))t.indexOf(n)<0&&Nw.call(e,n)&&(r[n]=e[n]);return r};const Ow=y.forwardRef((e,t)=>{var r=e,{className:n,component:a,style:c,sx:i}=r,o=Q11(r,["className","component","style","sx"]);const{systemStyles:s,rest:l}=x6(o),f=a||"div";return V.createElement(f,X11({ref:t,className:Z11(i,s,n),style:c},l))});Ow.displayName="@mantine/core/Box";const z1=Ow;var J11=Object.defineProperty,e21=Object.defineProperties,t21=Object.getOwnPropertyDescriptors,_v=Object.getOwnPropertySymbols,r21=Object.prototype.hasOwnProperty,n21=Object.prototype.propertyIsEnumerable,Pv=(e,t,r)=>t in e?J11(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Nv=(e,t)=>{for(var r in t||(t={}))r21.call(t,r)&&Pv(e,r,t[r]);if(_v)for(var r of _v(t))n21.call(t,r)&&Pv(e,r,t[r]);return e},a21=(e,t)=>e21(e,t21(t)),c21=d1(e=>({root:a21(Nv(Nv({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})})),i21=Object.defineProperty,vn=Object.getOwnPropertySymbols,Aw=Object.prototype.hasOwnProperty,Ew=Object.prototype.propertyIsEnumerable,Ov=(e,t,r)=>t in e?i21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,o21=(e,t)=>{for(var r in t||(t={}))Aw.call(t,r)&&Ov(e,r,t[r]);if(vn)for(var r of vn(t))Ew.call(t,r)&&Ov(e,r,t[r]);return e},s21=(e,t)=>{var r={};for(var n in e)Aw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&vn)for(var n of vn(e))t.indexOf(n)<0&&Ew.call(e,n)&&(r[n]=e[n]);return r};const $w=y.forwardRef((e,t)=>{const r=w1("UnstyledButton",{},e),{className:n,component:a="button",unstyled:c}=r,i=s21(r,["className","component","unstyled"]),{classes:o,cx:s}=c21(null,{name:"UnstyledButton",unstyled:c});return V.createElement(z1,o21({component:a,ref:t,className:s(o.root,n),type:a==="button"?"button":void 0},i))});$w.displayName="@mantine/core/UnstyledButton";const A7=$w;var l21=Object.defineProperty,f21=Object.defineProperties,u21=Object.getOwnPropertyDescriptors,Av=Object.getOwnPropertySymbols,d21=Object.prototype.hasOwnProperty,p21=Object.prototype.propertyIsEnumerable,Ev=(e,t,r)=>t in e?l21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Dw=(e,t)=>{for(var r in t||(t={}))d21.call(t,r)&&Ev(e,r,t[r]);if(Av)for(var r of Av(t))p21.call(t,r)&&Ev(e,r,t[r]);return e},m21=(e,t)=>f21(e,u21(t));const f5={xs:18,sm:22,md:28,lg:34,xl:44};function h21({variant:e,theme:t,color:r,gradient:n}){const a=t.fn.variant({color:r,variant:e,gradient:n});return e==="gradient"?{border:0,backgroundImage:a.background,color:a.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:Dw({border:`1px solid ${a.border}`,backgroundColor:a.background,color:a.color},t.fn.hover({backgroundColor:a.hover}))}var v21=d1((e,{color:t,size:r,radius:n,variant:a,gradient:c})=>({root:m21(Dw({},h21({variant:a,theme:e,color:t,gradient:c})),{position:"relative",height:e.fn.size({size:r,sizes:f5}),minHeight:e.fn.size({size:r,sizes:f5}),width:e.fn.size({size:r,sizes:f5}),minWidth:e.fn.size({size:r,sizes:f5}),borderRadius:e.fn.radius(n),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center","&:active":e.activeStyles,"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:a==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:a==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":{content:'""',position:"absolute",top:-1,left:-1,right:-1,bottom:-1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(n),cursor:"not-allowed"}}})})),g21=Object.defineProperty,gn=Object.getOwnPropertySymbols,Tw=Object.prototype.hasOwnProperty,Rw=Object.prototype.propertyIsEnumerable,$v=(e,t,r)=>t in e?g21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,z21=(e,t)=>{for(var r in t||(t={}))Tw.call(t,r)&&$v(e,r,t[r]);if(gn)for(var r of gn(t))Rw.call(t,r)&&$v(e,r,t[r]);return e},y21=(e,t)=>{var r={};for(var n in e)Tw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&gn)for(var n of gn(e))t.indexOf(n)<0&&Rw.call(e,n)&&(r[n]=e[n]);return r};function C21(e){var t=e,{size:r,color:n}=t,a=y21(t,["size","color"]);return V.createElement("svg",z21({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:n,width:`${r}px`},a),V.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},V.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},V.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},V.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},V.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},V.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var H21=Object.defineProperty,zn=Object.getOwnPropertySymbols,Fw=Object.prototype.hasOwnProperty,Iw=Object.prototype.propertyIsEnumerable,Dv=(e,t,r)=>t in e?H21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,b21=(e,t)=>{for(var r in t||(t={}))Fw.call(t,r)&&Dv(e,r,t[r]);if(zn)for(var r of zn(t))Iw.call(t,r)&&Dv(e,r,t[r]);return e},M21=(e,t)=>{var r={};for(var n in e)Fw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&zn)for(var n of zn(e))t.indexOf(n)<0&&Iw.call(e,n)&&(r[n]=e[n]);return r};function V21(e){var t=e,{size:r,color:n}=t,a=M21(t,["size","color"]);return V.createElement("svg",b21({width:`${r}px`,height:`${r}px`,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:n},a),V.createElement("g",{fill:"none",fillRule:"evenodd"},V.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},V.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),V.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},V.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var x21=Object.defineProperty,yn=Object.getOwnPropertySymbols,jw=Object.prototype.hasOwnProperty,Bw=Object.prototype.propertyIsEnumerable,Tv=(e,t,r)=>t in e?x21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,w21=(e,t)=>{for(var r in t||(t={}))jw.call(t,r)&&Tv(e,r,t[r]);if(yn)for(var r of yn(t))Bw.call(t,r)&&Tv(e,r,t[r]);return e},L21=(e,t)=>{var r={};for(var n in e)jw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&yn)for(var n of yn(e))t.indexOf(n)<0&&Bw.call(e,n)&&(r[n]=e[n]);return r};function S21(e){var t=e,{size:r,color:n}=t,a=L21(t,["size","color"]);return V.createElement("svg",w21({width:`${r}px`,height:`${r/4}px`,viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:n},a),V.createElement("circle",{cx:"15",cy:"15",r:"15"},V.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},V.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),V.createElement("circle",{cx:"105",cy:"15",r:"15"},V.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),V.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var k21=Object.defineProperty,Cn=Object.getOwnPropertySymbols,Ww=Object.prototype.hasOwnProperty,Uw=Object.prototype.propertyIsEnumerable,Rv=(e,t,r)=>t in e?k21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_21=(e,t)=>{for(var r in t||(t={}))Ww.call(t,r)&&Rv(e,r,t[r]);if(Cn)for(var r of Cn(t))Uw.call(t,r)&&Rv(e,r,t[r]);return e},P21=(e,t)=>{var r={};for(var n in e)Ww.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Cn)for(var n of Cn(e))t.indexOf(n)<0&&Uw.call(e,n)&&(r[n]=e[n]);return r};const Fi={bars:C21,oval:V21,dots:S21},N21={xs:18,sm:22,md:36,lg:44,xl:58},O21={size:"md"};function Su(e){const t=w1("Loader",O21,e),{size:r,color:n,variant:a}=t,c=P21(t,["size","color","variant"]),i=V2(),o=a in Fi?a:i.loader;return V.createElement(z1,_21({role:"presentation",component:Fi[o]||Fi.bars,size:i.fn.size({size:r,sizes:N21}),color:i.fn.variant({variant:"filled",primaryFallback:!1,color:n||i.primaryColor}).background},c))}Su.displayName="@mantine/core/Loader";var A21=Object.defineProperty,Hn=Object.getOwnPropertySymbols,qw=Object.prototype.hasOwnProperty,Gw=Object.prototype.propertyIsEnumerable,Fv=(e,t,r)=>t in e?A21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Iv=(e,t)=>{for(var r in t||(t={}))qw.call(t,r)&&Fv(e,r,t[r]);if(Hn)for(var r of Hn(t))Gw.call(t,r)&&Fv(e,r,t[r]);return e},E21=(e,t)=>{var r={};for(var n in e)qw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Hn)for(var n of Hn(e))t.indexOf(n)<0&&Gw.call(e,n)&&(r[n]=e[n]);return r};const $21={color:"gray",size:"md",variant:"subtle",loading:!1},Yw=y.forwardRef((e,t)=>{const r=w1("ActionIcon",$21,e),{className:n,color:a,children:c,radius:i,size:o,variant:s,gradient:l,disabled:f,loaderProps:u,loading:d,unstyled:p}=r,m=E21(r,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled"]),{classes:v,cx:H,theme:h}=v21({size:o,radius:i,color:a,variant:s,gradient:l},{name:"ActionIcon",unstyled:p}),g=h.fn.variant({color:a,variant:s}),z=V.createElement(Su,Iv({color:g.color,size:h.fn.size({size:o,sizes:f5})-12},u));return V.createElement(A7,Iv({className:H(v.root,n),ref:t,disabled:f,"data-disabled":f||void 0,"data-loading":d||void 0,unstyled:p},m),d?z:c)});Yw.displayName="@mantine/core/ActionIcon";const d8=Yw;function Zw(e){const{children:t,target:r,className:n}=w1("Portal",{},e),a=V2(),[c,i]=y.useState(!1),o=y.useRef();return Vu(()=>(i(!0),o.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(o.current),()=>{!r&&document.body.removeChild(o.current)}),[r]),c?Rc.createPortal(V.createElement("div",{className:n,dir:a.dir},t),o.current):null}Zw.displayName="@mantine/core/Portal";var D21=Object.defineProperty,bn=Object.getOwnPropertySymbols,Kw=Object.prototype.hasOwnProperty,Xw=Object.prototype.propertyIsEnumerable,jv=(e,t,r)=>t in e?D21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,T21=(e,t)=>{for(var r in t||(t={}))Kw.call(t,r)&&jv(e,r,t[r]);if(bn)for(var r of bn(t))Xw.call(t,r)&&jv(e,r,t[r]);return e},R21=(e,t)=>{var r={};for(var n in e)Kw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&bn)for(var n of bn(e))t.indexOf(n)<0&&Xw.call(e,n)&&(r[n]=e[n]);return r};function w8(e){var t=e,{withinPortal:r=!0,children:n}=t,a=R21(t,["withinPortal","children"]);return r?V.createElement(Zw,T21({},a),n):V.createElement(V.Fragment,null,n)}w8.displayName="@mantine/core/OptionalPortal";var F21=Object.defineProperty,Bv=Object.getOwnPropertySymbols,I21=Object.prototype.hasOwnProperty,j21=Object.prototype.propertyIsEnumerable,Wv=(e,t,r)=>t in e?F21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,B21=(e,t)=>{for(var r in t||(t={}))I21.call(t,r)&&Wv(e,r,t[r]);if(Bv)for(var r of Bv(t))j21.call(t,r)&&Wv(e,r,t[r]);return e};function Qw(e){return V.createElement("svg",B21({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e),V.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}Qw.displayName="@mantine/core/CloseIcon";var W21=Object.defineProperty,Mn=Object.getOwnPropertySymbols,Jw=Object.prototype.hasOwnProperty,eL=Object.prototype.propertyIsEnumerable,Uv=(e,t,r)=>t in e?W21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,U21=(e,t)=>{for(var r in t||(t={}))Jw.call(t,r)&&Uv(e,r,t[r]);if(Mn)for(var r of Mn(t))eL.call(t,r)&&Uv(e,r,t[r]);return e},q21=(e,t)=>{var r={};for(var n in e)Jw.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Mn)for(var n of Mn(e))t.indexOf(n)<0&&eL.call(e,n)&&(r[n]=e[n]);return r};const G21={xs:12,sm:14,md:16,lg:20,xl:24},Y21={size:"md"},tL=y.forwardRef((e,t)=>{const r=w1("CloseButton",Y21,e),{iconSize:n,size:a="md"}=r,c=q21(r,["iconSize","size"]),i=V2(),o=n||i.fn.size({size:a,sizes:G21});return V.createElement(d8,U21({size:a,ref:t},c),V.createElement(Qw,{width:o,height:o}))});tL.displayName="@mantine/core/CloseButton";const L8=tL;var Z21=Object.defineProperty,K21=Object.defineProperties,X21=Object.getOwnPropertyDescriptors,qv=Object.getOwnPropertySymbols,Q21=Object.prototype.hasOwnProperty,J21=Object.prototype.propertyIsEnumerable,Gv=(e,t,r)=>t in e?Z21(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Y8=(e,t)=>{for(var r in t||(t={}))Q21.call(t,r)&&Gv(e,r,t[r]);if(qv)for(var r of qv(t))J21.call(t,r)&&Gv(e,r,t[r]);return e},e31=(e,t)=>K21(e,X21(t));function t31({underline:e,strikethrough:t}){const r=[];return e&&r.push("underline"),t&&r.push("line-through"),r.length>0?r.join(" "):"none"}function r31({theme:e,color:t,variant:r}){return t==="dimmed"?e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6]:typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:r==="link"?e.colors[e.primaryColor][e.colorScheme==="dark"?4:7]:t||"inherit"}function n31(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function a31(e){return e?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var c31=d1((e,{color:t,variant:r,size:n,lineClamp:a,truncate:c,inline:i,inherit:o,underline:s,gradient:l,weight:f,transform:u,align:d,strikethrough:p,italic:m})=>{const v=e.fn.variant({variant:"gradient",gradient:l});return{root:Y8(e31(Y8(Y8(Y8(Y8({},e.fn.fontStyles()),e.fn.focusStyles()),n31(a)),a31(c)),{color:r31({color:t,theme:e,variant:r}),fontFamily:o?"inherit":e.fontFamily,fontSize:o||n===void 0?"inherit":e.fn.size({size:n,sizes:e.fontSizes}),lineHeight:o?"inherit":i?1:e.lineHeight,textDecoration:t31({underline:s,strikethrough:p}),WebkitTapHighlightColor:"transparent",fontWeight:o?"inherit":f,textTransform:u,textAlign:d,fontStyle:m?"italic":void 0}),e.fn.hover(r==="link"&&s===void 0?{textDecoration:"underline"}:void 0)),gradient:{backgroundImage:v.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}}),i31=Object.defineProperty,Vn=Object.getOwnPropertySymbols,rL=Object.prototype.hasOwnProperty,nL=Object.prototype.propertyIsEnumerable,Yv=(e,t,r)=>t in e?i31(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,o31=(e,t)=>{for(var r in t||(t={}))rL.call(t,r)&&Yv(e,r,t[r]);if(Vn)for(var r of Vn(t))nL.call(t,r)&&Yv(e,r,t[r]);return e},s31=(e,t)=>{var r={};for(var n in e)rL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Vn)for(var n of Vn(e))t.indexOf(n)<0&&nL.call(e,n)&&(r[n]=e[n]);return r};const l31={variant:"text"},aL=y.forwardRef((e,t)=>{const r=w1("Text",l31,e),{className:n,size:a,weight:c,transform:i,color:o,align:s,variant:l,lineClamp:f,truncate:u,gradient:d,inline:p,inherit:m,underline:v,strikethrough:H,italic:h,classNames:g,styles:z,unstyled:b,span:x}=r,C=s31(r,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span"]),{classes:M,cx:S}=c31({variant:l,color:o,size:a,lineClamp:f,truncate:u,inline:p,inherit:m,underline:v,strikethrough:H,italic:h,weight:c,transform:i,align:s,gradient:d},{unstyled:b,name:"Text"});return V.createElement(z1,o31({ref:t,className:S(M.root,{[M.gradient]:l==="gradient"},n),component:x?"span":"div"},C))});aL.displayName="@mantine/core/Text";const Z1=aL,Lt={xs:1,sm:2,md:3,lg:4,xl:5};function St(e,t){const r=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?r:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var f31=d1((e,{size:t,variant:r,color:n})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:1,borderTop:`${e.fn.size({size:t,sizes:Lt})}px ${r} ${St(e,n)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${e.fn.size({size:t,sizes:Lt})}px ${r} ${St(e,n)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:n==="dark"?e.colors.dark[1]:e.fn.themeColor(n,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:e.fn.size({size:t,sizes:Lt}),borderTopColor:St(e,n),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:e.fn.size({size:t,sizes:Lt}),borderLeftColor:St(e,n),borderLeftStyle:r}})),u31=Object.defineProperty,d31=Object.defineProperties,p31=Object.getOwnPropertyDescriptors,xn=Object.getOwnPropertySymbols,cL=Object.prototype.hasOwnProperty,iL=Object.prototype.propertyIsEnumerable,Zv=(e,t,r)=>t in e?u31(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kv=(e,t)=>{for(var r in t||(t={}))cL.call(t,r)&&Zv(e,r,t[r]);if(xn)for(var r of xn(t))iL.call(t,r)&&Zv(e,r,t[r]);return e},m31=(e,t)=>d31(e,p31(t)),h31=(e,t)=>{var r={};for(var n in e)cL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&xn)for(var n of xn(e))t.indexOf(n)<0&&iL.call(e,n)&&(r[n]=e[n]);return r};const v31={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},c6=y.forwardRef((e,t)=>{const r=w1("Divider",v31,e),{className:n,color:a,orientation:c,size:i,label:o,labelPosition:s,labelProps:l,variant:f,styles:u,classNames:d,unstyled:p}=r,m=h31(r,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:v,cx:H}=f31({color:a,size:i,variant:f},{classNames:d,styles:u,unstyled:p,name:"Divider"}),h=c==="vertical",g=c==="horizontal",z=!!o&&g,b=!l?.color;return V.createElement(z1,Kv({ref:t,className:H(v.root,{[v.vertical]:h,[v.horizontal]:g,[v.withLabel]:z},n),role:"separator"},m),z&&V.createElement(Z1,m31(Kv({},l),{size:l?.size||"xs",sx:{marginTop:2},className:H(v.label,v[s],{[v.labelDefaultStyles]:b})}),o))});c6.displayName="@mantine/core/Divider";var g31=Object.defineProperty,z31=Object.defineProperties,y31=Object.getOwnPropertyDescriptors,Xv=Object.getOwnPropertySymbols,C31=Object.prototype.hasOwnProperty,H31=Object.prototype.propertyIsEnumerable,Qv=(e,t,r)=>t in e?g31(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Jv=(e,t)=>{for(var r in t||(t={}))C31.call(t,r)&&Qv(e,r,t[r]);if(Xv)for(var r of Xv(t))H31.call(t,r)&&Qv(e,r,t[r]);return e},b31=(e,t)=>z31(e,y31(t)),M31=d1((e,{size:t})=>({item:b31(Jv({},e.fn.fontStyles()),{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`${e.fn.size({size:t,sizes:e.spacing})/1.5}px ${e.fn.size({size:t,sizes:e.spacing})}px`,cursor:"pointer",fontSize:e.fn.size({size:t,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":Jv({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:e.fn.size({size:t,sizes:e.spacing})/2,paddingBottom:e.fn.size({size:t,sizes:e.spacing})/2,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`${e.fn.size({size:t,sizes:e.spacing})/1.5}px ${e.fn.size({size:t,sizes:e.spacing})}px`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}})),V31=Object.defineProperty,eg=Object.getOwnPropertySymbols,x31=Object.prototype.hasOwnProperty,w31=Object.prototype.propertyIsEnumerable,tg=(e,t,r)=>t in e?V31(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,L31=(e,t)=>{for(var r in t||(t={}))x31.call(t,r)&&tg(e,r,t[r]);if(eg)for(var r of eg(t))w31.call(t,r)&&tg(e,r,t[r]);return e};function ku({data:e,hovered:t,classNames:r,styles:n,isItemSelected:a,uuid:c,__staticSelector:i,onItemHover:o,onItemSelect:s,itemsRefs:l,itemComponent:f,size:u,nothingFound:d,creatable:p,createLabel:m,unstyled:v}){const{classes:H}=M31({size:u},{classNames:r,styles:n,unstyled:v,name:i}),h=[],g=[];let z=null;const b=(C,M)=>{const S=typeof a=="function"?a(C.value):!1;return V.createElement(f,L31({key:C.value,className:H.item,"data-disabled":C.disabled||void 0,"data-hovered":!C.disabled&&t===M||void 0,"data-selected":!C.disabled&&S||void 0,onMouseEnter:()=>o(M),id:`${c}-${M}`,role:"option",tabIndex:-1,"aria-selected":t===M,ref:k=>{l&&l.current&&(l.current[C.value]=k)},onMouseDown:C.disabled?null:k=>{k.preventDefault(),s(C)},disabled:C.disabled},C))};let x=null;if(e.forEach((C,M)=>{C.creatable?z=M:C.group?(x!==C.group&&(x=C.group,g.push(V.createElement("div",{className:H.separator,key:`__mantine-divider-${M}`},V.createElement(c6,{classNames:{label:H.separatorLabel},label:C.group})))),g.push(b(C,M))):h.push(b(C,M))}),p){const C=e[z];h.push(V.createElement("div",{key:O11(),className:H.item,"data-hovered":t===z||void 0,onMouseEnter:()=>o(z),onMouseDown:M=>{M.preventDefault(),s(C)},tabIndex:-1,ref:M=>{l&&l.current&&(l.current[C.value]=M)}},m))}return g.length>0&&h.length>0&&h.unshift(V.createElement("div",{className:H.separator,key:"empty-group-separator"},V.createElement(c6,null))),g.length>0||h.length>0?V.createElement(V.Fragment,null,g,h):V.createElement(Z1,{size:u,unstyled:v,className:H.nothingFound},d)}ku.displayName="@mantine/core/SelectItems";var S31=Object.defineProperty,wn=Object.getOwnPropertySymbols,oL=Object.prototype.hasOwnProperty,sL=Object.prototype.propertyIsEnumerable,rg=(e,t,r)=>t in e?S31(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k31=(e,t)=>{for(var r in t||(t={}))oL.call(t,r)&&rg(e,r,t[r]);if(wn)for(var r of wn(t))sL.call(t,r)&&rg(e,r,t[r]);return e},_31=(e,t)=>{var r={};for(var n in e)oL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&wn)for(var n of wn(e))t.indexOf(n)<0&&sL.call(e,n)&&(r[n]=e[n]);return r};const _u=y.forwardRef((e,t)=>{var r=e,{label:n,value:a}=r,c=_31(r,["label","value"]);return V.createElement("div",k31({ref:t},c),n||a)});_u.displayName="@mantine/core/DefaultItem";function P31(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function lL(...e){return t=>e.forEach(r=>P31(r,t))}function i0(...e){return y.useCallback(lL(...e),e)}const fL=y.forwardRef((e,t)=>{const{children:r,...n}=e,a=y.Children.toArray(r),c=a.find(O31);if(c){const i=c.props.children,o=a.map(s=>s===c?y.Children.count(i)>1?y.Children.only(null):y.isValidElement(i)?i.props.children:null:s);return y.createElement(cl,f2({},n,{ref:t}),y.isValidElement(i)?y.cloneElement(i,void 0,o):null)}return y.createElement(cl,f2({},n,{ref:t}),r)});fL.displayName="Slot";const cl=y.forwardRef((e,t)=>{const{children:r,...n}=e;return y.isValidElement(r)?y.cloneElement(r,{...A31(n,r.props),ref:lL(t,r.ref)}):y.Children.count(r)>1?y.Children.only(null):null});cl.displayName="SlotClone";const N31=({children:e})=>y.createElement(y.Fragment,null,e);function O31(e){return y.isValidElement(e)&&e.type===N31}function A31(e,t){const r={...t};for(const n in t){const a=e[n],c=t[n];/^on[A-Z]/.test(n)?a&&c?r[n]=(...o)=>{c(...o),a(...o)}:a&&(r[n]=a):n==="style"?r[n]={...a,...c}:n==="className"&&(r[n]=[a,c].filter(Boolean).join(" "))}return{...e,...r}}const E31=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],E7=E31.reduce((e,t)=>{const r=y.forwardRef((n,a)=>{const{asChild:c,...i}=n,o=c?fL:t;return y.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),y.createElement(o,f2({},i,{ref:a}))});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),il=globalThis?.document?y.useLayoutEffect:()=>{};function $31(e,t){return y.useReducer((r,n)=>{const a=t[r][n];return a??r},e)}const $7=e=>{const{present:t,children:r}=e,n=D31(t),a=typeof r=="function"?r({present:n.isPresent}):y.Children.only(r),c=i0(n.ref,a.ref);return typeof r=="function"||n.isPresent?y.cloneElement(a,{ref:c}):null};$7.displayName="Presence";function D31(e){const[t,r]=y.useState(),n=y.useRef({}),a=y.useRef(e),c=y.useRef("none"),i=e?"mounted":"unmounted",[o,s]=$31(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return y.useEffect(()=>{const l=kt(n.current);c.current=o==="mounted"?l:"none"},[o]),il(()=>{const l=n.current,f=a.current;if(f!==e){const d=c.current,p=kt(l);e?s("MOUNT"):p==="none"||l?.display==="none"?s("UNMOUNT"):s(f&&d!==p?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,s]),il(()=>{if(t){const l=u=>{const p=kt(n.current).includes(u.animationName);u.target===t&&p&&Rc.flushSync(()=>s("ANIMATION_END"))},f=u=>{u.target===t&&(c.current=kt(n.current))};return t.addEventListener("animationstart",f),t.addEventListener("animationcancel",l),t.addEventListener("animationend",l),()=>{t.removeEventListener("animationstart",f),t.removeEventListener("animationcancel",l),t.removeEventListener("animationend",l)}}else s("ANIMATION_END")},[t,s]),{isPresent:["mounted","unmountSuspended"].includes(o),ref:y.useCallback(l=>{l&&(n.current=getComputedStyle(l)),r(l)},[])}}function kt(e){return e?.animationName||"none"}function T31(e,t=[]){let r=[];function n(c,i){const o=y.createContext(i),s=r.length;r=[...r,i];function l(u){const{scope:d,children:p,...m}=u,v=d?.[e][s]||o,H=y.useMemo(()=>m,Object.values(m));return y.createElement(v.Provider,{value:H},p)}function f(u,d){const p=d?.[e][s]||o,m=y.useContext(p);if(m)return m;if(i!==void 0)return i;throw new Error(`\`${u}\` must be used within \`${c}\``)}return l.displayName=c+"Provider",[l,f]}const a=()=>{const c=r.map(i=>y.createContext(i));return function(o){const s=o?.[e]||c;return y.useMemo(()=>({[`__scope${e}`]:{...o,[e]:s}}),[o,s])}};return a.scopeName=e,[n,R31(a,...t)]}function R31(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(c){const i=n.reduce((o,{useScope:s,scopeName:l})=>{const u=s(c)[`__scope${l}`];return{...o,...u}},{});return y.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return r.scopeName=t.scopeName,r}function Ne(e){const t=y.useRef(e);return y.useEffect(()=>{t.current=e}),y.useMemo(()=>(...r)=>{var n;return(n=t.current)===null||n===void 0?void 0:n.call(t,...r)},[])}const F31=y.createContext(void 0);function I31(e){const t=y.useContext(F31);return e||t||"ltr"}function j31(e,[t,r]){return Math.min(r,Math.max(t,e))}function We(e,t,{checkForDefaultPrevented:r=!0}={}){return function(a){if(e?.(a),r===!1||!a.defaultPrevented)return t?.(a)}}function B31(e,t){return y.useReducer((r,n)=>{const a=t[r][n];return a??r},e)}const uL="ScrollArea",[dL,N32]=T31(uL),[W31,s4]=dL(uL),U31=y.forwardRef((e,t)=>{const{__scopeScrollArea:r,type:n="hover",dir:a,scrollHideDelay:c=600,...i}=e,[o,s]=y.useState(null),[l,f]=y.useState(null),[u,d]=y.useState(null),[p,m]=y.useState(null),[v,H]=y.useState(null),[h,g]=y.useState(0),[z,b]=y.useState(0),[x,C]=y.useState(!1),[M,S]=y.useState(!1),k=i0(t,P=>s(P)),w=I31(a);return y.createElement(W31,{scope:r,type:n,dir:w,scrollHideDelay:c,scrollArea:o,viewport:l,onViewportChange:f,content:u,onContentChange:d,scrollbarX:p,onScrollbarXChange:m,scrollbarXEnabled:x,onScrollbarXEnabledChange:C,scrollbarY:v,onScrollbarYChange:H,scrollbarYEnabled:M,onScrollbarYEnabledChange:S,onCornerWidthChange:g,onCornerHeightChange:b},y.createElement(E7.div,f2({dir:w},i,{ref:k,style:{position:"relative","--radix-scroll-area-corner-width":h+"px","--radix-scroll-area-corner-height":z+"px",...e.style}})))}),q31="ScrollAreaViewport",G31=y.forwardRef((e,t)=>{const{__scopeScrollArea:r,children:n,...a}=e,c=s4(q31,r),i=y.useRef(null),o=i0(t,i,c.onViewportChange);return y.createElement(y.Fragment,null,y.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),y.createElement(E7.div,f2({"data-radix-scroll-area-viewport":""},a,{ref:o,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...e.style}}),y.createElement("div",{ref:c.onContentChange,style:{minWidth:"100%",display:"table"}},n)))}),w6="ScrollAreaScrollbar",Y31=y.forwardRef((e,t)=>{const{forceMount:r,...n}=e,a=s4(w6,e.__scopeScrollArea),{onScrollbarXEnabledChange:c,onScrollbarYEnabledChange:i}=a,o=e.orientation==="horizontal";return y.useEffect(()=>(o?c(!0):i(!0),()=>{o?c(!1):i(!1)}),[o,c,i]),a.type==="hover"?y.createElement(Z31,f2({},n,{ref:t,forceMount:r})):a.type==="scroll"?y.createElement(K31,f2({},n,{ref:t,forceMount:r})):a.type==="auto"?y.createElement(pL,f2({},n,{ref:t,forceMount:r})):a.type==="always"?y.createElement(Pu,f2({},n,{ref:t})):null}),Z31=y.forwardRef((e,t)=>{const{forceMount:r,...n}=e,a=s4(w6,e.__scopeScrollArea),[c,i]=y.useState(!1);return y.useEffect(()=>{const o=a.scrollArea;let s=0;if(o){const l=()=>{window.clearTimeout(s),i(!0)},f=()=>{s=window.setTimeout(()=>i(!1),a.scrollHideDelay)};return o.addEventListener("pointerenter",l),o.addEventListener("pointerleave",f),()=>{window.clearTimeout(s),o.removeEventListener("pointerenter",l),o.removeEventListener("pointerleave",f)}}},[a.scrollArea,a.scrollHideDelay]),y.createElement($7,{present:r||c},y.createElement(pL,f2({"data-state":c?"visible":"hidden"},n,{ref:t})))}),K31=y.forwardRef((e,t)=>{const{forceMount:r,...n}=e,a=s4(w6,e.__scopeScrollArea),c=e.orientation==="horizontal",i=s9(()=>s("SCROLL_END"),100),[o,s]=B31("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return y.useEffect(()=>{if(o==="idle"){const l=window.setTimeout(()=>s("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(l)}},[o,a.scrollHideDelay,s]),y.useEffect(()=>{const l=a.viewport,f=c?"scrollLeft":"scrollTop";if(l){let u=l[f];const d=()=>{const p=l[f];u!==p&&(s("SCROLL"),i()),u=p};return l.addEventListener("scroll",d),()=>l.removeEventListener("scroll",d)}},[a.viewport,c,s,i]),y.createElement($7,{present:r||o!=="hidden"},y.createElement(Pu,f2({"data-state":o==="hidden"?"hidden":"visible"},n,{ref:t,onPointerEnter:We(e.onPointerEnter,()=>s("POINTER_ENTER")),onPointerLeave:We(e.onPointerLeave,()=>s("POINTER_LEAVE"))})))}),pL=y.forwardRef((e,t)=>{const r=s4(w6,e.__scopeScrollArea),{forceMount:n,...a}=e,[c,i]=y.useState(!1),o=e.orientation==="horizontal",s=s9(()=>{if(r.viewport){const l=r.viewport.offsetWidth{const{orientation:r="vertical",...n}=e,a=s4(w6,e.__scopeScrollArea),c=y.useRef(null),i=y.useRef(0),[o,s]=y.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=gL(o.viewport,o.content),f={...n,sizes:o,onSizesChange:s,hasThumb:l>0&&l<1,onThumbChange:d=>c.current=d,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:d=>i.current=d};function u(d,p){return a41(d,i.current,o,p)}return r==="horizontal"?y.createElement(X31,f2({},f,{ref:t,onThumbPositionChange:()=>{if(a.viewport&&c.current){const d=a.viewport.scrollLeft,p=ng(d,o,a.dir);c.current.style.transform=`translate3d(${p}px, 0, 0)`}},onWheelScroll:d=>{a.viewport&&(a.viewport.scrollLeft=d)},onDragScroll:d=>{a.viewport&&(a.viewport.scrollLeft=u(d,a.dir))}})):r==="vertical"?y.createElement(Q31,f2({},f,{ref:t,onThumbPositionChange:()=>{if(a.viewport&&c.current){const d=a.viewport.scrollTop,p=ng(d,o);c.current.style.transform=`translate3d(0, ${p}px, 0)`}},onWheelScroll:d=>{a.viewport&&(a.viewport.scrollTop=d)},onDragScroll:d=>{a.viewport&&(a.viewport.scrollTop=u(d))}})):null}),X31=y.forwardRef((e,t)=>{const{sizes:r,onSizesChange:n,...a}=e,c=s4(w6,e.__scopeScrollArea),[i,o]=y.useState(),s=y.useRef(null),l=i0(t,s,c.onScrollbarXChange);return y.useEffect(()=>{s.current&&o(getComputedStyle(s.current))},[s]),y.createElement(hL,f2({"data-orientation":"horizontal"},a,{ref:l,sizes:r,style:{bottom:0,left:c.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:c.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":o9(r)+"px",...e.style},onThumbPointerDown:f=>e.onThumbPointerDown(f.x),onDragScroll:f=>e.onDragScroll(f.x),onWheelScroll:(f,u)=>{if(c.viewport){const d=c.viewport.scrollLeft+f.deltaX;e.onWheelScroll(d),yL(d,u)&&f.preventDefault()}},onResize:()=>{s.current&&c.viewport&&i&&n({content:c.viewport.scrollWidth,viewport:c.viewport.offsetWidth,scrollbar:{size:s.current.clientWidth,paddingStart:Ln(i.paddingLeft),paddingEnd:Ln(i.paddingRight)}})}}))}),Q31=y.forwardRef((e,t)=>{const{sizes:r,onSizesChange:n,...a}=e,c=s4(w6,e.__scopeScrollArea),[i,o]=y.useState(),s=y.useRef(null),l=i0(t,s,c.onScrollbarYChange);return y.useEffect(()=>{s.current&&o(getComputedStyle(s.current))},[s]),y.createElement(hL,f2({"data-orientation":"vertical"},a,{ref:l,sizes:r,style:{top:0,right:c.dir==="ltr"?0:void 0,left:c.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":o9(r)+"px",...e.style},onThumbPointerDown:f=>e.onThumbPointerDown(f.y),onDragScroll:f=>e.onDragScroll(f.y),onWheelScroll:(f,u)=>{if(c.viewport){const d=c.viewport.scrollTop+f.deltaY;e.onWheelScroll(d),yL(d,u)&&f.preventDefault()}},onResize:()=>{s.current&&c.viewport&&i&&n({content:c.viewport.scrollHeight,viewport:c.viewport.offsetHeight,scrollbar:{size:s.current.clientHeight,paddingStart:Ln(i.paddingTop),paddingEnd:Ln(i.paddingBottom)}})}}))}),[J31,mL]=dL(w6),hL=y.forwardRef((e,t)=>{const{__scopeScrollArea:r,sizes:n,hasThumb:a,onThumbChange:c,onThumbPointerUp:i,onThumbPointerDown:o,onThumbPositionChange:s,onDragScroll:l,onWheelScroll:f,onResize:u,...d}=e,p=s4(w6,r),[m,v]=y.useState(null),H=i0(t,k=>v(k)),h=y.useRef(null),g=y.useRef(""),z=p.viewport,b=n.content-n.viewport,x=Ne(f),C=Ne(s),M=s9(u,10);function S(k){if(h.current){const w=k.clientX-h.current.left,P=k.clientY-h.current.top;l({x:w,y:P})}}return y.useEffect(()=>{const k=w=>{const P=w.target;m?.contains(P)&&x(w,b)};return document.addEventListener("wheel",k,{passive:!1}),()=>document.removeEventListener("wheel",k,{passive:!1})},[z,m,b,x]),y.useEffect(C,[n,C]),p8(m,M),p8(p.content,M),y.createElement(J31,{scope:r,scrollbar:m,hasThumb:a,onThumbChange:Ne(c),onThumbPointerUp:Ne(i),onThumbPositionChange:C,onThumbPointerDown:Ne(o)},y.createElement(E7.div,f2({},d,{ref:H,style:{position:"absolute",...d.style},onPointerDown:We(e.onPointerDown,k=>{k.button===0&&(k.target.setPointerCapture(k.pointerId),h.current=m.getBoundingClientRect(),g.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",S(k))}),onPointerMove:We(e.onPointerMove,S),onPointerUp:We(e.onPointerUp,k=>{const w=k.target;w.hasPointerCapture(k.pointerId)&&w.releasePointerCapture(k.pointerId),document.body.style.webkitUserSelect=g.current,h.current=null})})))}),ol="ScrollAreaThumb",e41=y.forwardRef((e,t)=>{const{forceMount:r,...n}=e,a=mL(ol,e.__scopeScrollArea);return y.createElement($7,{present:r||a.hasThumb},y.createElement(t41,f2({ref:t},n)))}),t41=y.forwardRef((e,t)=>{const{__scopeScrollArea:r,style:n,...a}=e,c=s4(ol,r),i=mL(ol,r),{onThumbPositionChange:o}=i,s=i0(t,u=>i.onThumbChange(u)),l=y.useRef(),f=s9(()=>{l.current&&(l.current(),l.current=void 0)},100);return y.useEffect(()=>{const u=c.viewport;if(u){const d=()=>{if(f(),!l.current){const p=c41(u,o);l.current=p,o()}};return o(),u.addEventListener("scroll",d),()=>u.removeEventListener("scroll",d)}},[c.viewport,f,o]),y.createElement(E7.div,f2({"data-state":i.hasThumb?"visible":"hidden"},a,{ref:s,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...n},onPointerDownCapture:We(e.onPointerDownCapture,u=>{const p=u.target.getBoundingClientRect(),m=u.clientX-p.left,v=u.clientY-p.top;i.onThumbPointerDown({x:m,y:v})}),onPointerUp:We(e.onPointerUp,i.onThumbPointerUp)}))}),vL="ScrollAreaCorner",r41=y.forwardRef((e,t)=>{const r=s4(vL,e.__scopeScrollArea),n=!!(r.scrollbarX&&r.scrollbarY);return r.type!=="scroll"&&n?y.createElement(n41,f2({},e,{ref:t})):null}),n41=y.forwardRef((e,t)=>{const{__scopeScrollArea:r,...n}=e,a=s4(vL,r),[c,i]=y.useState(0),[o,s]=y.useState(0),l=!!(c&&o);return p8(a.scrollbarX,()=>{var f;const u=((f=a.scrollbarX)===null||f===void 0?void 0:f.offsetHeight)||0;a.onCornerHeightChange(u),s(u)}),p8(a.scrollbarY,()=>{var f;const u=((f=a.scrollbarY)===null||f===void 0?void 0:f.offsetWidth)||0;a.onCornerWidthChange(u),i(u)}),l?y.createElement(E7.div,f2({},n,{ref:t,style:{width:c,height:o,position:"absolute",right:a.dir==="ltr"?0:void 0,left:a.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function Ln(e){return e?parseInt(e,10):0}function gL(e,t){const r=e/t;return isNaN(r)?0:r}function o9(e){const t=gL(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,n=(e.scrollbar.size-r)*t;return Math.max(n,18)}function a41(e,t,r,n="ltr"){const a=o9(r),c=a/2,i=t||c,o=a-i,s=r.scrollbar.paddingStart+i,l=r.scrollbar.size-r.scrollbar.paddingEnd-o,f=r.content-r.viewport,u=n==="ltr"?[0,f]:[f*-1,0];return zL([s,l],u)(e)}function ng(e,t,r="ltr"){const n=o9(t),a=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,c=t.scrollbar.size-a,i=t.content-t.viewport,o=c-n,s=r==="ltr"?[0,i]:[i*-1,0],l=j31(e,s);return zL([0,i],[0,o])(l)}function zL(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const n=(t[1]-t[0])/(e[1]-e[0]);return t[0]+n*(r-e[0])}}function yL(e,t){return e>0&&e{})=>{let r={left:e.scrollLeft,top:e.scrollTop},n=0;return function a(){const c={left:e.scrollLeft,top:e.scrollTop},i=r.left!==c.left,o=r.top!==c.top;(i||o)&&t(),r=c,n=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(n)};function s9(e,t){const r=Ne(e),n=y.useRef(0);return y.useEffect(()=>()=>window.clearTimeout(n.current),[]),y.useCallback(()=>{window.clearTimeout(n.current),n.current=window.setTimeout(r,t)},[r,t])}function p8(e,t){const r=Ne(t);il(()=>{let n=0;if(e){const a=new ResizeObserver(()=>{cancelAnimationFrame(n),n=window.requestAnimationFrame(r)});return a.observe(e),()=>{window.cancelAnimationFrame(n),a.unobserve(e)}}},[e,r])}const i41=U31,o41=G31,ag=Y31,cg=e41,s41=r41;var l41=d1((e,{scrollbarSize:t,offsetScrollbars:r,scrollbarHovered:n,hidden:a},c)=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:r?t:void 0,paddingBottom:r?t:void 0},scrollbar:{display:a?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:t/5,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${c("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:t},'&[data-orientation="horizontal"]':{flexDirection:"column",height:t},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:c("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:t,position:"relative",transition:"background-color 150ms ease",display:a?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:44,minHeight:44}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:n?1:0,display:a?"none":void 0}})),f41=Object.defineProperty,u41=Object.defineProperties,d41=Object.getOwnPropertyDescriptors,Sn=Object.getOwnPropertySymbols,CL=Object.prototype.hasOwnProperty,HL=Object.prototype.propertyIsEnumerable,ig=(e,t,r)=>t in e?f41(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,sl=(e,t)=>{for(var r in t||(t={}))CL.call(t,r)&&ig(e,r,t[r]);if(Sn)for(var r of Sn(t))HL.call(t,r)&&ig(e,r,t[r]);return e},bL=(e,t)=>u41(e,d41(t)),ML=(e,t)=>{var r={};for(var n in e)CL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Sn)for(var n of Sn(e))t.indexOf(n)<0&&HL.call(e,n)&&(r[n]=e[n]);return r};const VL={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},l9=y.forwardRef((e,t)=>{const r=w1("ScrollArea",VL,e),{children:n,className:a,classNames:c,styles:i,scrollbarSize:o,scrollHideDelay:s,type:l,dir:f,offsetScrollbars:u,viewportRef:d,onScrollPositionChange:p,unstyled:m,viewportProps:v}=r,H=ML(r,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","viewportProps"]),[h,g]=y.useState(!1),z=V2(),{classes:b,cx:x}=l41({scrollbarSize:o,offsetScrollbars:u,scrollbarHovered:h,hidden:l==="never"},{name:"ScrollArea",classNames:c,styles:i,unstyled:m});return V.createElement(i41,{type:l==="never"?"always":l,scrollHideDelay:s,dir:f||z.dir,ref:t,asChild:!0},V.createElement(z1,sl({className:x(b.root,a)},H),V.createElement(o41,bL(sl({},v),{className:b.viewport,ref:d,onScroll:typeof p=="function"?({currentTarget:C})=>p({x:C.scrollLeft,y:C.scrollTop}):void 0}),n),V.createElement(ag,{orientation:"horizontal",className:b.scrollbar,forceMount:!0,onMouseEnter:()=>g(!0),onMouseLeave:()=>g(!1)},V.createElement(cg,{className:b.thumb})),V.createElement(ag,{orientation:"vertical",className:b.scrollbar,forceMount:!0,onMouseEnter:()=>g(!0),onMouseLeave:()=>g(!1)},V.createElement(cg,{className:b.thumb})),V.createElement(s41,{className:b.corner})))}),xL=y.forwardRef((e,t)=>{const r=w1("ScrollAreaAutosize",VL,e),{maxHeight:n,children:a,classNames:c,styles:i,scrollbarSize:o,scrollHideDelay:s,type:l,dir:f,offsetScrollbars:u,viewportRef:d,onScrollPositionChange:p,unstyled:m,sx:v}=r,H=ML(r,["maxHeight","children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx"]);return V.createElement(z1,bL(sl({},H),{ref:t,sx:[{display:"flex",maxHeight:n},...f8(v)]}),V.createElement(z1,{sx:{display:"flex",flexDirection:"column",flex:1}},V.createElement(l9,{classNames:c,styles:i,scrollHideDelay:s,scrollbarSize:o,type:l,dir:f,offsetScrollbars:u,viewportRef:d,onScrollPositionChange:p,unstyled:m},a)))});xL.displayName="@mantine/core/ScrollAreaAutosize";l9.displayName="@mantine/core/ScrollArea";l9.Autosize=xL;const p41=l9;var m41=Object.defineProperty,h41=Object.defineProperties,v41=Object.getOwnPropertyDescriptors,kn=Object.getOwnPropertySymbols,wL=Object.prototype.hasOwnProperty,LL=Object.prototype.propertyIsEnumerable,og=(e,t,r)=>t in e?m41(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,sg=(e,t)=>{for(var r in t||(t={}))wL.call(t,r)&&og(e,r,t[r]);if(kn)for(var r of kn(t))LL.call(t,r)&&og(e,r,t[r]);return e},g41=(e,t)=>h41(e,v41(t)),z41=(e,t)=>{var r={};for(var n in e)wL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kn)for(var n of kn(e))t.indexOf(n)<0&&LL.call(e,n)&&(r[n]=e[n]);return r};const f9=y.forwardRef((e,t)=>{var r=e,{style:n}=r,a=z41(r,["style"]);return V.createElement(p41,g41(sg({},a),{style:sg({width:"100%"},n),viewportRef:t}),a.children)});f9.displayName="@mantine/core/SelectScrollArea";var y41=d1(()=>({dropdown:{},itemsWrapper:{padding:4,display:"flex",width:"100%",boxSizing:"border-box"}}));const V4=Math.min,a3=Math.max,_n=Math.round,_t=Math.floor,U4=e=>({x:e,y:e}),C41={left:"right",right:"left",bottom:"top",top:"bottom"},H41={start:"end",end:"start"};function ll(e,t,r){return a3(e,V4(t,r))}function g6(e,t){return typeof e=="function"?e(t):e}function x4(e){return e.split("-")[0]}function S8(e){return e.split("-")[1]}function Nu(e){return e==="x"?"y":"x"}function Ou(e){return e==="y"?"height":"width"}function z6(e){return["top","bottom"].includes(x4(e))?"y":"x"}function Au(e){return Nu(z6(e))}function b41(e,t,r){r===void 0&&(r=!1);const n=S8(e),a=Au(e),c=Ou(a);let i=a==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[c]>t.floating[c]&&(i=Pn(i)),[i,Pn(i)]}function M41(e){const t=Pn(e);return[fl(e),t,fl(t)]}function fl(e){return e.replace(/start|end/g,t=>H41[t])}function V41(e,t,r){const n=["left","right"],a=["right","left"],c=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return r?t?a:n:t?n:a;case"left":case"right":return t?c:i;default:return[]}}function x41(e,t,r,n){const a=S8(e);let c=V41(x4(e),r==="start",n);return a&&(c=c.map(i=>i+"-"+a),t&&(c=c.concat(c.map(fl)))),c}function Pn(e){return e.replace(/left|right|bottom|top/g,t=>C41[t])}function w41(e){return{top:0,right:0,bottom:0,left:0,...e}}function Eu(e){return typeof e!="number"?w41(e):{top:e,right:e,bottom:e,left:e}}function m8(e){const{x:t,y:r,width:n,height:a}=e;return{width:n,height:a,top:r,left:t,right:t+n,bottom:r+a,x:t,y:r}}function lg(e,t,r){let{reference:n,floating:a}=e;const c=z6(t),i=Au(t),o=Ou(i),s=x4(t),l=c==="y",f=n.x+n.width/2-a.width/2,u=n.y+n.height/2-a.height/2,d=n[o]/2-a[o]/2;let p;switch(s){case"top":p={x:f,y:n.y-a.height};break;case"bottom":p={x:f,y:n.y+n.height};break;case"right":p={x:n.x+n.width,y:u};break;case"left":p={x:n.x-a.width,y:u};break;default:p={x:n.x,y:n.y}}switch(S8(t)){case"start":p[i]-=d*(r&&l?-1:1);break;case"end":p[i]+=d*(r&&l?-1:1);break}return p}const L41=async(e,t,r)=>{const{placement:n="bottom",strategy:a="absolute",middleware:c=[],platform:i}=r,o=c.filter(Boolean),s=await(i.isRTL==null?void 0:i.isRTL(t));let l=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:f,y:u}=lg(l,n,s),d=n,p={},m=0;for(let v=0;v({name:"arrow",options:e,async fn(t){const{x:r,y:n,placement:a,rects:c,platform:i,elements:o,middlewareData:s}=t,{element:l,padding:f=0}=g6(e,t)||{};if(l==null)return{};const u=Eu(f),d={x:r,y:n},p=Au(a),m=Ou(p),v=await i.getDimensions(l),H=p==="y",h=H?"top":"left",g=H?"bottom":"right",z=H?"clientHeight":"clientWidth",b=c.reference[m]+c.reference[p]-d[p]-c.floating[m],x=d[p]-c.reference[p],C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let M=C?C[z]:0;(!M||!await(i.isElement==null?void 0:i.isElement(C)))&&(M=o.floating[z]||c.floating[m]);const S=b/2-x/2,k=M/2-v[m]/2-1,w=V4(u[h],k),P=V4(u[g],k),N=w,$=M-v[m]-P,A=M/2-v[m]/2+S,D=ll(N,A,$),j=!s.arrow&&S8(a)!=null&&A!==D&&c.reference[m]/2-(AA<=0)){var P,N;const A=(((P=c.flip)==null?void 0:P.index)||0)+1,D=M[A];if(D)return{data:{index:A,overflows:w},reset:{placement:D}};let j=(N=w.filter(R=>R.overflows[0]<=0).sort((R,T)=>R.overflows[1]-T.overflows[1])[0])==null?void 0:N.placement;if(!j)switch(p){case"bestFit":{var $;const R=($=w.filter(T=>{if(C){const F=z6(T.placement);return F===g||F==="y"}return!0}).map(T=>[T.placement,T.overflows.filter(F=>F>0).reduce((F,L)=>F+L,0)]).sort((T,F)=>T[1]-F[1])[0])==null?void 0:$[0];R&&(j=R);break}case"initialPlacement":j=o;break}if(a!==j)return{reset:{placement:j}}}return{}}}};function SL(e){const t=V4(...e.map(c=>c.left)),r=V4(...e.map(c=>c.top)),n=a3(...e.map(c=>c.right)),a=a3(...e.map(c=>c.bottom));return{x:t,y:r,width:n-t,height:a-r}}function _41(e){const t=e.slice().sort((a,c)=>a.y-c.y),r=[];let n=null;for(let a=0;an.height/2?r.push([c]):r[r.length-1].push(c),n=c}return r.map(a=>m8(SL(a)))}const P41=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:r,elements:n,rects:a,platform:c,strategy:i}=t,{padding:o=2,x:s,y:l}=g6(e,t),f=Array.from(await(c.getClientRects==null?void 0:c.getClientRects(n.reference))||[]),u=_41(f),d=m8(SL(f)),p=Eu(o);function m(){if(u.length===2&&u[0].left>u[1].right&&s!=null&&l!=null)return u.find(H=>s>H.left-p.left&&sH.top-p.top&&l=2){if(z6(r)==="y"){const w=u[0],P=u[u.length-1],N=x4(r)==="top",$=w.top,A=P.bottom,D=N?w.left:P.left,j=N?w.right:P.right,R=j-D,T=A-$;return{top:$,bottom:A,left:D,right:j,width:R,height:T,x:D,y:$}}const H=x4(r)==="left",h=a3(...u.map(w=>w.right)),g=V4(...u.map(w=>w.left)),z=u.filter(w=>H?w.left===g:w.right===h),b=z[0].top,x=z[z.length-1].bottom,C=g,M=h,S=M-C,k=x-b;return{top:b,bottom:x,left:C,right:M,width:S,height:k,x:C,y:b}}return d}const v=await c.getElementRects({reference:{getBoundingClientRect:m},floating:n.floating,strategy:i});return a.reference.x!==v.reference.x||a.reference.y!==v.reference.y||a.reference.width!==v.reference.width||a.reference.height!==v.reference.height?{reset:{rects:v}}:{}}}};async function N41(e,t){const{placement:r,platform:n,elements:a}=e,c=await(n.isRTL==null?void 0:n.isRTL(a.floating)),i=x4(r),o=S8(r),s=z6(r)==="y",l=["left","top"].includes(i)?-1:1,f=c&&s?-1:1,u=g6(t,e);let{mainAxis:d,crossAxis:p,alignmentAxis:m}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return o&&typeof m=="number"&&(p=o==="end"?m*-1:m),s?{x:p*f,y:d*l}:{x:d*l,y:p*f}}const O41=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var r,n;const{x:a,y:c,placement:i,middlewareData:o}=t,s=await N41(t,e);return i===((r=o.offset)==null?void 0:r.placement)&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:a+s.x,y:c+s.y,data:{...s,placement:i}}}}},A41=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:n,placement:a}=t,{mainAxis:c=!0,crossAxis:i=!1,limiter:o={fn:H=>{let{x:h,y:g}=H;return{x:h,y:g}}},...s}=g6(e,t),l={x:r,y:n},f=await $u(t,s),u=z6(x4(a)),d=Nu(u);let p=l[d],m=l[u];if(c){const H=d==="y"?"top":"left",h=d==="y"?"bottom":"right",g=p+f[H],z=p-f[h];p=ll(g,p,z)}if(i){const H=u==="y"?"top":"left",h=u==="y"?"bottom":"right",g=m+f[H],z=m-f[h];m=ll(g,m,z)}const v=o.fn({...t,[d]:p,[u]:m});return{...v,data:{x:v.x-r,y:v.y-n,enabled:{[d]:c,[u]:i}}}}}},E41=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:n,placement:a,rects:c,middlewareData:i}=t,{offset:o=0,mainAxis:s=!0,crossAxis:l=!0}=g6(e,t),f={x:r,y:n},u=z6(a),d=Nu(u);let p=f[d],m=f[u];const v=g6(o,t),H=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:0,crossAxis:0,...v};if(s){const z=d==="y"?"height":"width",b=c.reference[d]-c.floating[z]+H.mainAxis,x=c.reference[d]+c.reference[z]-H.mainAxis;px&&(p=x)}if(l){var h,g;const z=d==="y"?"width":"height",b=["top","left"].includes(x4(a)),x=c.reference[u]-c.floating[z]+(b&&((h=i.offset)==null?void 0:h[u])||0)+(b?0:H.crossAxis),C=c.reference[u]+c.reference[z]+(b?0:((g=i.offset)==null?void 0:g[u])||0)-(b?H.crossAxis:0);mC&&(m=C)}return{[d]:p,[u]:m}}}},$41=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var r,n;const{placement:a,rects:c,platform:i,elements:o}=t,{apply:s=()=>{},...l}=g6(e,t),f=await $u(t,l),u=x4(a),d=S8(a),p=z6(a)==="y",{width:m,height:v}=c.floating;let H,h;u==="top"||u==="bottom"?(H=u,h=d===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(h=u,H=d==="end"?"top":"bottom");const g=v-f.top-f.bottom,z=m-f.left-f.right,b=V4(v-f[H],g),x=V4(m-f[h],z),C=!t.middlewareData.shift;let M=b,S=x;if((r=t.middlewareData.shift)!=null&&r.enabled.x&&(S=z),(n=t.middlewareData.shift)!=null&&n.enabled.y&&(M=g),C&&!d){const w=a3(f.left,0),P=a3(f.right,0),N=a3(f.top,0),$=a3(f.bottom,0);p?S=m-2*(w!==0||P!==0?w+P:a3(f.left,f.right)):M=v-2*(N!==0||$!==0?N+$:a3(f.top,f.bottom))}await s({...t,availableWidth:S,availableHeight:M});const k=await i.getDimensions(o.floating);return m!==k.width||v!==k.height?{reset:{rects:!0}}:{}}}};function u9(){return typeof window<"u"}function k8(e){return kL(e)?(e.nodeName||"").toLowerCase():"#document"}function B3(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Z4(e){var t;return(t=(kL(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function kL(e){return u9()?e instanceof Node||e instanceof B3(e).Node:!1}function w4(e){return u9()?e instanceof Element||e instanceof B3(e).Element:!1}function G4(e){return u9()?e instanceof HTMLElement||e instanceof B3(e).HTMLElement:!1}function fg(e){return!u9()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof B3(e).ShadowRoot}function D7(e){const{overflow:t,overflowX:r,overflowY:n,display:a}=L4(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!["inline","contents"].includes(a)}function D41(e){return["table","td","th"].includes(k8(e))}function d9(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function Du(e){const t=Tu(),r=w4(e)?L4(e):e;return["transform","translate","scale","rotate","perspective"].some(n=>r[n]?r[n]!=="none":!1)||(r.containerType?r.containerType!=="normal":!1)||!t&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!t&&(r.filter?r.filter!=="none":!1)||["transform","translate","scale","rotate","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function T41(e){let t=oe(e);for(;G4(t)&&!h8(t);){if(Du(t))return t;if(d9(t))return null;t=oe(t)}return null}function Tu(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function h8(e){return["html","body","#document"].includes(k8(e))}function L4(e){return B3(e).getComputedStyle(e)}function p9(e){return w4(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function oe(e){if(k8(e)==="html")return e;const t=e.assignedSlot||e.parentNode||fg(e)&&e.host||Z4(e);return fg(t)?t.host:t}function _L(e){const t=oe(e);return h8(t)?e.ownerDocument?e.ownerDocument.body:e.body:G4(t)&&D7(t)?t:_L(t)}function l6(e,t,r){var n;t===void 0&&(t=[]),r===void 0&&(r=!0);const a=_L(e),c=a===((n=e.ownerDocument)==null?void 0:n.body),i=B3(a);if(c){const o=ul(i);return t.concat(i,i.visualViewport||[],D7(a)?a:[],o&&r?l6(o):[])}return t.concat(a,l6(a,[],r))}function ul(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function PL(e){const t=L4(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const a=G4(e),c=a?e.offsetWidth:r,i=a?e.offsetHeight:n,o=_n(r)!==c||_n(n)!==i;return o&&(r=c,n=i),{width:r,height:n,$:o}}function Ru(e){return w4(e)?e:e.contextElement}function K0(e){const t=Ru(e);if(!G4(t))return U4(1);const r=t.getBoundingClientRect(),{width:n,height:a,$:c}=PL(t);let i=(c?_n(r.width):r.width)/n,o=(c?_n(r.height):r.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!o||!Number.isFinite(o))&&(o=1),{x:i,y:o}}const R41=U4(0);function NL(e){const t=B3(e);return!Tu()||!t.visualViewport?R41:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function F41(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==B3(e)?!1:t}function Xe(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);const a=e.getBoundingClientRect(),c=Ru(e);let i=U4(1);t&&(n?w4(n)&&(i=K0(n)):i=K0(e));const o=F41(c,r,n)?NL(c):U4(0);let s=(a.left+o.x)/i.x,l=(a.top+o.y)/i.y,f=a.width/i.x,u=a.height/i.y;if(c){const d=B3(c),p=n&&w4(n)?B3(n):n;let m=d,v=ul(m);for(;v&&n&&p!==m;){const H=K0(v),h=v.getBoundingClientRect(),g=L4(v),z=h.left+(v.clientLeft+parseFloat(g.paddingLeft))*H.x,b=h.top+(v.clientTop+parseFloat(g.paddingTop))*H.y;s*=H.x,l*=H.y,f*=H.x,u*=H.y,s+=z,l+=b,m=B3(v),v=ul(m)}}return m8({width:f,height:u,x:s,y:l})}function Fu(e,t){const r=p9(e).scrollLeft;return t?t.left+r:Xe(Z4(e)).left+r}function OL(e,t,r){r===void 0&&(r=!1);const n=e.getBoundingClientRect(),a=n.left+t.scrollLeft-(r?0:Fu(e,n)),c=n.top+t.scrollTop;return{x:a,y:c}}function I41(e){let{elements:t,rect:r,offsetParent:n,strategy:a}=e;const c=a==="fixed",i=Z4(n),o=t?d9(t.floating):!1;if(n===i||o&&c)return r;let s={scrollLeft:0,scrollTop:0},l=U4(1);const f=U4(0),u=G4(n);if((u||!u&&!c)&&((k8(n)!=="body"||D7(i))&&(s=p9(n)),G4(n))){const p=Xe(n);l=K0(n),f.x=p.x+n.clientLeft,f.y=p.y+n.clientTop}const d=i&&!u&&!c?OL(i,s,!0):U4(0);return{width:r.width*l.x,height:r.height*l.y,x:r.x*l.x-s.scrollLeft*l.x+f.x+d.x,y:r.y*l.y-s.scrollTop*l.y+f.y+d.y}}function j41(e){return Array.from(e.getClientRects())}function B41(e){const t=Z4(e),r=p9(e),n=e.ownerDocument.body,a=a3(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),c=a3(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let i=-r.scrollLeft+Fu(e);const o=-r.scrollTop;return L4(n).direction==="rtl"&&(i+=a3(t.clientWidth,n.clientWidth)-a),{width:a,height:c,x:i,y:o}}function W41(e,t){const r=B3(e),n=Z4(e),a=r.visualViewport;let c=n.clientWidth,i=n.clientHeight,o=0,s=0;if(a){c=a.width,i=a.height;const l=Tu();(!l||l&&t==="fixed")&&(o=a.offsetLeft,s=a.offsetTop)}return{width:c,height:i,x:o,y:s}}function U41(e,t){const r=Xe(e,!0,t==="fixed"),n=r.top+e.clientTop,a=r.left+e.clientLeft,c=G4(e)?K0(e):U4(1),i=e.clientWidth*c.x,o=e.clientHeight*c.y,s=a*c.x,l=n*c.y;return{width:i,height:o,x:s,y:l}}function ug(e,t,r){let n;if(t==="viewport")n=W41(e,r);else if(t==="document")n=B41(Z4(e));else if(w4(t))n=U41(t,r);else{const a=NL(e);n={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return m8(n)}function AL(e,t){const r=oe(e);return r===t||!w4(r)||h8(r)?!1:L4(r).position==="fixed"||AL(r,t)}function q41(e,t){const r=t.get(e);if(r)return r;let n=l6(e,[],!1).filter(o=>w4(o)&&k8(o)!=="body"),a=null;const c=L4(e).position==="fixed";let i=c?oe(e):e;for(;w4(i)&&!h8(i);){const o=L4(i),s=Du(i);!s&&o.position==="fixed"&&(a=null),(c?!s&&!a:!s&&o.position==="static"&&!!a&&["absolute","fixed"].includes(a.position)||D7(i)&&!s&&AL(e,i))?n=n.filter(f=>f!==i):a=o,i=oe(i)}return t.set(e,n),n}function G41(e){let{element:t,boundary:r,rootBoundary:n,strategy:a}=e;const i=[...r==="clippingAncestors"?d9(t)?[]:q41(t,this._c):[].concat(r),n],o=i[0],s=i.reduce((l,f)=>{const u=ug(t,f,a);return l.top=a3(u.top,l.top),l.right=V4(u.right,l.right),l.bottom=V4(u.bottom,l.bottom),l.left=a3(u.left,l.left),l},ug(t,o,a));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}}function Y41(e){const{width:t,height:r}=PL(e);return{width:t,height:r}}function Z41(e,t,r){const n=G4(t),a=Z4(t),c=r==="fixed",i=Xe(e,!0,c,t);let o={scrollLeft:0,scrollTop:0};const s=U4(0);if(n||!n&&!c)if((k8(t)!=="body"||D7(a))&&(o=p9(t)),n){const d=Xe(t,!0,c,t);s.x=d.x+t.clientLeft,s.y=d.y+t.clientTop}else a&&(s.x=Fu(a));const l=a&&!n&&!c?OL(a,o):U4(0),f=i.left+o.scrollLeft-s.x-l.x,u=i.top+o.scrollTop-s.y-l.y;return{x:f,y:u,width:i.width,height:i.height}}function Ii(e){return L4(e).position==="static"}function dg(e,t){if(!G4(e)||L4(e).position==="fixed")return null;if(t)return t(e);let r=e.offsetParent;return Z4(e)===r&&(r=r.ownerDocument.body),r}function EL(e,t){const r=B3(e);if(d9(e))return r;if(!G4(e)){let a=oe(e);for(;a&&!h8(a);){if(w4(a)&&!Ii(a))return a;a=oe(a)}return r}let n=dg(e,t);for(;n&&D41(n)&&Ii(n);)n=dg(n,t);return n&&h8(n)&&Ii(n)&&!Du(n)?r:n||T41(e)||r}const K41=async function(e){const t=this.getOffsetParent||EL,r=this.getDimensions,n=await r(e.floating);return{reference:Z41(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function X41(e){return L4(e).direction==="rtl"}const Q41={convertOffsetParentRelativeRectToViewportRelativeRect:I41,getDocumentElement:Z4,getClippingRect:G41,getOffsetParent:EL,getElementRects:K41,getClientRects:j41,getDimensions:Y41,getScale:K0,isElement:w4,isRTL:X41};function $L(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function J41(e,t){let r=null,n;const a=Z4(e);function c(){var o;clearTimeout(n),(o=r)==null||o.disconnect(),r=null}function i(o,s){o===void 0&&(o=!1),s===void 0&&(s=1),c();const l=e.getBoundingClientRect(),{left:f,top:u,width:d,height:p}=l;if(o||t(),!d||!p)return;const m=_t(u),v=_t(a.clientWidth-(f+d)),H=_t(a.clientHeight-(u+p)),h=_t(f),z={rootMargin:-m+"px "+-v+"px "+-H+"px "+-h+"px",threshold:a3(0,V4(1,s))||1};let b=!0;function x(C){const M=C[0].intersectionRatio;if(M!==s){if(!b)return i();M?i(!1,M):n=setTimeout(()=>{i(!1,1e-7)},1e3)}M===1&&!$L(l,e.getBoundingClientRect())&&i(),b=!1}try{r=new IntersectionObserver(x,{...z,root:a.ownerDocument})}catch{r=new IntersectionObserver(x,z)}r.observe(e)}return i(!0),c}function e61(e,t,r,n){n===void 0&&(n={});const{ancestorScroll:a=!0,ancestorResize:c=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:o=typeof IntersectionObserver=="function",animationFrame:s=!1}=n,l=Ru(e),f=a||c?[...l?l6(l):[],...l6(t)]:[];f.forEach(h=>{a&&h.addEventListener("scroll",r,{passive:!0}),c&&h.addEventListener("resize",r)});const u=l&&o?J41(l,r):null;let d=-1,p=null;i&&(p=new ResizeObserver(h=>{let[g]=h;g&&g.target===l&&p&&(p.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var z;(z=p)==null||z.observe(t)})),r()}),l&&!s&&p.observe(l),p.observe(t));let m,v=s?Xe(e):null;s&&H();function H(){const h=Xe(e);v&&!$L(v,h)&&r(),v=h,m=requestAnimationFrame(H)}return r(),()=>{var h;f.forEach(g=>{a&&g.removeEventListener("scroll",r),c&&g.removeEventListener("resize",r)}),u?.(),(h=p)==null||h.disconnect(),p=null,s&&cancelAnimationFrame(m)}}const DL=O41,Iu=A41,TL=k41,t61=$41,pg=S41,RL=P41,r61=E41,n61=(e,t,r)=>{const n=new Map,a={platform:Q41,...r},c={...a.platform,_c:n};return L41(e,t,{...a,platform:c})},FL=e=>{const{element:t,padding:r}=e;function n(a){return Object.prototype.hasOwnProperty.call(a,"current")}return{name:"arrow",options:e,fn(a){return n(t)?t.current!=null?pg({element:t.current,padding:r}).fn(a):{}:t?pg({element:t,padding:r}).fn(a):{}}}};var br=typeof document<"u"?y.useLayoutEffect:y.useEffect;function Nn(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,n,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!Nn(e[n],t[n]))return!1;return!0}if(a=Object.keys(e),r=a.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,a[n]))return!1;for(n=r;n--!==0;){const c=a[n];if(!(c==="_owner"&&e.$$typeof)&&!Nn(e[c],t[c]))return!1}return!0}return e!==e&&t!==t}function mg(e){const t=y.useRef(e);return br(()=>{t.current=e}),t}function a61(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:n=[],platform:a,whileElementsMounted:c,open:i}=e,[o,s]=y.useState({x:null,y:null,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[l,f]=y.useState(n);Nn(l,n)||f(n);const u=y.useRef(null),d=y.useRef(null),p=y.useRef(o),m=mg(c),v=mg(a),[H,h]=y.useState(null),[g,z]=y.useState(null),b=y.useCallback(w=>{u.current!==w&&(u.current=w,h(w))},[]),x=y.useCallback(w=>{d.current!==w&&(d.current=w,z(w))},[]),C=y.useCallback(()=>{if(!u.current||!d.current)return;const w={placement:t,strategy:r,middleware:l};v.current&&(w.platform=v.current),n61(u.current,d.current,w).then(P=>{const N={...P,isPositioned:!0};M.current&&!Nn(p.current,N)&&(p.current=N,Rc.flushSync(()=>{s(N)}))})},[l,t,r,v]);br(()=>{i===!1&&p.current.isPositioned&&(p.current.isPositioned=!1,s(w=>({...w,isPositioned:!1})))},[i]);const M=y.useRef(!1);br(()=>(M.current=!0,()=>{M.current=!1}),[]),br(()=>{if(H&&g){if(m.current)return m.current(H,g,C);C()}},[H,g,C,m]);const S=y.useMemo(()=>({reference:u,floating:d,setReference:b,setFloating:x}),[b,x]),k=y.useMemo(()=>({reference:H,floating:g}),[H,g]);return y.useMemo(()=>({...o,update:C,refs:S,elements:k,reference:b,floating:x}),[o,C,S,k,b,x])}var v8=typeof document<"u"?y.useLayoutEffect:y.useEffect;function c61(){const e=new Map;return{emit(t,r){var n;(n=e.get(t))==null||n.forEach(a=>a(r))},on(t,r){e.set(t,[...e.get(t)||[],r])},off(t,r){e.set(t,(e.get(t)||[]).filter(n=>n!==r))}}}let ji=!1,i61=0;const hg=()=>"floating-ui-"+i61++;function o61(){const[e,t]=y.useState(()=>ji?hg():void 0);return v8(()=>{e==null&&t(hg())},[]),y.useEffect(()=>{ji||(ji=!0)},[]),e}const vg=$r.useId,gg=vg??o61,s61=y.createContext(null),l61=y.createContext(null),IL=()=>{var e,t;return(e=(t=y.useContext(s61))==null?void 0:t.id)!=null?e:null},ju=()=>y.useContext(l61);function B6(e){var t;return(t=e?.ownerDocument)!=null?t:document}function jL(e){var t;return(t=B6(e).defaultView)!=null?t:window}function De(e){return e?e instanceof jL(e).Element:!1}function f61(e){return e?e instanceof jL(e).HTMLElement:!1}const zg=$r.useInsertionEffect;function u61(e){const t=y.useRef(()=>{});return zg?zg(()=>{t.current=e}):t.current=e,y.useCallback(function(){for(var r=arguments.length,n=new Array(r),a=0;ac61())[0],m=a61({placement:a,middleware:c,strategy:i,whileElementsMounted:n}),v=u61(r),H=y.useMemo(()=>({...m.refs,domReference:u}),[m.refs]),h=y.useMemo(()=>({...m,refs:H,dataRef:d,nodeId:o,events:p,open:t,onOpenChange:v,_:{domReference:s}}),[m,o,p,t,v,H,s]);v8(()=>{const b=f?.nodesRef.current.find(x=>x.id===o);b&&(b.context=h)});const{reference:g}=m,z=y.useCallback(b=>{(De(b)||b===null)&&(h.refs.domReference.current=b,l(b)),g(b)},[g,h.refs]);return y.useMemo(()=>({...m,context:h,refs:H,reference:z}),[m,H,h,z])}function Bi(e,t,r){const n=new Map;return{...r==="floating"&&{tabIndex:-1},...e,...t.map(a=>a?a[r]:null).concat(e).reduce((a,c)=>(c&&Object.entries(c).forEach(i=>{let[o,s]=i;if(o.indexOf("on")===0){if(n.has(o)||n.set(o,[]),typeof s=="function"){var l;(l=n.get(o))==null||l.push(s),a[o]=function(){for(var f,u=arguments.length,d=new Array(u),p=0;pm(...d))}}}else a[o]=s}),a),{})}}const d61=function(e){e===void 0&&(e=[]);const t=e,r=y.useCallback(c=>Bi(c,e,"reference"),t),n=y.useCallback(c=>Bi(c,e,"floating"),t),a=y.useCallback(c=>Bi(c,e,"item"),t);return y.useMemo(()=>({getReferenceProps:r,getFloatingProps:n,getItemProps:a}),[r,n,a])};function Wi(e,t){var r;let n=(r=e.filter(i=>{var o;return i.parentId===t&&((o=i.context)==null?void 0:o.open)}))!=null?r:[],a=n;for(;a.length;){var c;a=(c=e.filter(i=>{var o;return(o=a)==null?void 0:o.some(s=>{var l;return i.parentId===s.id&&((l=i.context)==null?void 0:l.open)})}))!=null?c:[],n=n.concat(a)}return n}function p61(e){return"composedPath"in e?e.composedPath()[0]:e.target}function yg(e){const t=y.useRef(e);return v8(()=>{t.current=e}),t}function m61(e){const t=y.useRef();return v8(()=>{t.current=e},[e]),t.current}function Mr(e,t,r){return r&&r!=="mouse"?0:typeof e=="number"?e:e?.[t]}const h61=function(e,t){let{enabled:r=!0,delay:n=0,handleClose:a=null,mouseOnly:c=!1,restMs:i=0,move:o=!0}=t===void 0?{}:t;const{open:s,onOpenChange:l,dataRef:f,events:u,refs:d,_:p}=e,m=ju(),v=IL(),H=yg(a),h=yg(n),g=m61(s),z=y.useRef(),b=y.useRef(),x=y.useRef(),C=y.useRef(),M=y.useRef(!0),S=y.useRef(!1),k=y.useCallback(()=>{var $;const A=($=f.current.openEvent)==null?void 0:$.type;return A?.includes("mouse")&&A!=="mousedown"},[f]);y.useEffect(()=>{if(!r)return;function $(){clearTimeout(b.current),clearTimeout(C.current),M.current=!0}return u.on("dismiss",$),()=>{u.off("dismiss",$)}},[r,u,d]),y.useEffect(()=>{if(!r||!H.current)return;function $(){k()&&l(!1)}const A=B6(d.floating.current).documentElement;return A.addEventListener("mouseleave",$),()=>{A.removeEventListener("mouseleave",$)}},[d,l,r,H,f,k]);const w=y.useCallback(function($){$===void 0&&($=!0);const A=Mr(h.current,"close",z.current);A&&!x.current?(clearTimeout(b.current),b.current=setTimeout(()=>l(!1),A)):$&&(clearTimeout(b.current),l(!1))},[h,l]),P=y.useCallback(()=>{x.current&&(B6(d.floating.current).removeEventListener("pointermove",x.current),x.current=void 0)},[d]),N=y.useCallback(()=>{B6(d.floating.current).body.style.pointerEvents="",S.current=!1},[d]);return y.useEffect(()=>{if(!r)return;function $(){return f.current.openEvent?["click","mousedown"].includes(f.current.openEvent.type):!1}function A(F){if(clearTimeout(b.current),M.current=!1,c&&z.current!=="mouse"||i>0&&Mr(h.current,"open")===0)return;f.current.openEvent=F;const L=Mr(h.current,"open",z.current);L?b.current=setTimeout(()=>{l(!0)},L):l(!0)}function D(F){if($())return;const L=B6(d.floating.current);if(clearTimeout(C.current),H.current){clearTimeout(b.current),x.current&&L.removeEventListener("pointermove",x.current),x.current=H.current({...e,tree:m,x:F.clientX,y:F.clientY,onClose(){N(),P(),w()}}),L.addEventListener("pointermove",x.current);return}w()}function j(F){$()||H.current==null||H.current({...e,tree:m,x:F.clientX,y:F.clientY,leave:!0,onClose(){N(),P(),w()}})(F)}const R=d.floating.current,T=d.domReference.current;if(De(T))return s&&T.addEventListener("mouseleave",j),R?.addEventListener("mouseleave",j),o&&T.addEventListener("mousemove",A,{once:!0}),T.addEventListener("mouseenter",A),T.addEventListener("mouseleave",D),()=>{s&&T.removeEventListener("mouseleave",j),R?.removeEventListener("mouseleave",j),o&&T.removeEventListener("mousemove",A),T.removeEventListener("mouseenter",A),T.removeEventListener("mouseleave",D)}},[p.domReference,r,e,c,i,o,w,P,N,l,s,m,d,h,H,f]),v8(()=>{if(r&&s&&H.current&&H.current.__options.blockPointerEvents&&k()){B6(d.floating.current).body.style.pointerEvents="none",S.current=!0;const D=d.domReference.current,j=d.floating.current;if(De(D)&&j){var $,A;const R=m==null||($=m.nodesRef.current.find(T=>T.id===v))==null||(A=$.context)==null?void 0:A.refs.floating.current;return R&&(R.style.pointerEvents=""),D.style.pointerEvents="auto",j.style.pointerEvents="auto",()=>{D.style.pointerEvents="",j.style.pointerEvents=""}}}},[r,s,v,d,m,H,f,k]),v8(()=>{g&&!s&&(z.current=void 0,P(),N())}),y.useEffect(()=>()=>{P(),clearTimeout(b.current),clearTimeout(C.current),S.current&&N()},[r,P,N]),y.useMemo(()=>{if(!r)return{};function $(A){z.current=A.pointerType}return{reference:{onPointerDown:$,onPointerEnter:$,onMouseMove(){s||i===0||(clearTimeout(C.current),C.current=setTimeout(()=>{M.current||l(!0)},i))}},floating:{onMouseEnter(){clearTimeout(b.current)},onMouseLeave(){w(!1)}}}},[r,i,s,l,w])},BL=y.createContext({delay:1e3,initialDelay:1e3,currentId:null,setCurrentId:()=>{},setState:()=>{}}),WL=()=>y.useContext(BL),v61=e=>{let{children:t,delay:r}=e;const[n,a]=y.useState({delay:r,initialDelay:r,currentId:null}),c=y.useCallback(i=>{a(o=>({...o,currentId:i}))},[]);return y.createElement(BL.Provider,{value:y.useMemo(()=>({...n,setState:a,setCurrentId:c}),[n,a,c])},t)},g61=(e,t)=>{let{open:r,onOpenChange:n}=e,{id:a}=t;const{currentId:c,initialDelay:i,setState:o}=WL();y.useEffect(()=>{c&&(o(s=>({...s,delay:{open:1,close:Mr(i,"close")}})),c!==a&&n(!1))},[a,n,o,c,i]),y.useEffect(()=>{!r&&c===a&&(n(!1),o(s=>({...s,delay:i,currentId:null})))},[r,o,c,a,n,i])},z61=function(e,t){let{open:r}=e,{enabled:n=!0,role:a="dialog"}=t===void 0?{}:t;const c=gg(),i=gg();return y.useMemo(()=>{const o={id:c,role:a};return n?a==="tooltip"?{reference:{"aria-describedby":r?c:void 0},floating:o}:{reference:{"aria-expanded":r?"true":"false","aria-haspopup":a==="alertdialog"?"dialog":a,"aria-controls":r?c:void 0,...a==="listbox"&&{role:"combobox"},...a==="menu"&&{id:i}},floating:{...o,...a==="menu"&&{"aria-labelledby":i}}}:{}},[n,a,r,c,i])};function Ui(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);const r=e;return r.target!=null&&t.contains(r.target)}const y61={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},C61={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},H61=function(e,t){let{open:r,onOpenChange:n,refs:a,events:c,nodeId:i}=e,{enabled:o=!0,escapeKey:s=!0,outsidePress:l=!0,outsidePressEvent:f="pointerdown",referencePress:u=!1,referencePressEvent:d="pointerdown",ancestorScroll:p=!1,bubbles:m=!0}=t===void 0?{}:t;const v=ju(),H=IL()!=null,h=y.useRef(!1);return y.useEffect(()=>{if(!r||!o)return;function g(M){if(M.key==="Escape"){if(!m&&v&&Wi(v.nodesRef.current,i).length>0)return;c.emit("dismiss",{preventScroll:!1}),n(!1)}}function z(M){const S=h.current;if(h.current=!1,S)return;const k=p61(M);if(De(k)&&a.floating.current){var w;const N=(w=a.floating.current.ownerDocument.defaultView)!=null?w:window,$=k.scrollWidth>k.clientWidth,A=k.scrollHeight>k.clientHeight;let D=A&&M.offsetX>k.clientWidth;if(A&&N.getComputedStyle(k).direction==="rtl"&&(D=M.offsetX<=k.offsetWidth-k.clientWidth),D||$&&M.offsetY>k.clientHeight)return}const P=v&&Wi(v.nodesRef.current,i).some(N=>{var $;return Ui(M,($=N.context)==null?void 0:$.refs.floating.current)});Ui(M,a.floating.current)||Ui(M,a.domReference.current)||P||!m&&v&&Wi(v.nodesRef.current,i).length>0||(c.emit("dismiss",H?{preventScroll:!0}:!1),n(!1))}function b(){n(!1)}const x=B6(a.floating.current);s&&x.addEventListener("keydown",g),l&&x.addEventListener(f,z);let C=[];return p&&(De(a.domReference.current)&&(C=l6(a.domReference.current)),De(a.floating.current)&&(C=C.concat(l6(a.floating.current))),!De(a.reference.current)&&a.reference.current&&a.reference.current.contextElement&&(C=C.concat(l6(a.reference.current.contextElement)))),C=C.filter(M=>{var S;return M!==((S=x.defaultView)==null?void 0:S.visualViewport)}),C.forEach(M=>{M.addEventListener("scroll",b,{passive:!0})}),()=>{s&&x.removeEventListener("keydown",g),l&&x.removeEventListener(f,z),C.forEach(M=>{M.removeEventListener("scroll",b)})}},[s,l,f,c,v,i,r,n,p,o,m,a,H]),y.useEffect(()=>{h.current=!1},[l,f]),y.useMemo(()=>o?{reference:{[y61[d]]:()=>{u&&(c.emit("dismiss"),n(!1))}},floating:{[C61[f]]:()=>{h.current=!0}}}:{},[o,c,u,f,d,n])},b61=function(e,t){let{open:r,onOpenChange:n,dataRef:a,refs:c,events:i}=e,{enabled:o=!0,keyboardOnly:s=!0}=t===void 0?{}:t;const l=y.useRef(""),f=y.useRef(!1),u=y.useRef();return y.useEffect(()=>{var d;if(!o)return;const m=(d=B6(c.floating.current).defaultView)!=null?d:window;function v(){!r&&f61(c.domReference.current)&&c.domReference.current.blur()}return m.addEventListener("blur",v),()=>{m.removeEventListener("blur",v)}},[c,r,o]),y.useEffect(()=>{if(!o)return;function d(){f.current=!0}return i.on("dismiss",d),()=>{i.off("dismiss",d)}},[i,o]),y.useEffect(()=>()=>{clearTimeout(u.current)},[]),y.useMemo(()=>o?{reference:{onPointerDown(d){let{pointerType:p}=d;l.current=p,f.current=!!(p&&s)},onPointerLeave(){f.current=!1},onFocus(d){var p,m,v;f.current||d.type==="focus"&&((p=a.current.openEvent)==null?void 0:p.type)==="mousedown"&&(m=c.domReference.current)!=null&&m.contains((v=a.current.openEvent)==null?void 0:v.target)||(a.current.openEvent=d.nativeEvent,n(!0))},onBlur(d){const p=d.relatedTarget;u.current=setTimeout(()=>{var m,v;(m=c.floating.current)!=null&&m.contains(p)||(v=c.domReference.current)!=null&&v.contains(p)||(f.current=!1,n(!1))})}}}:{},[o,s,c,a,n])};function UL({opened:e,floating:t,positionDependencies:r}){const[n,a]=y.useState(0);y.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return e61(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference,t.refs.floating,e,n]),B2(()=>{t.update()},r),B2(()=>{a(c=>c+1)},[e])}function M61(e){const t=[DL(e.offset)];return e.middlewares.shift&&t.push(Iu({limiter:r61()})),e.middlewares.flip&&t.push(TL()),e.middlewares.inline&&t.push(RL()),t.push(FL({element:e.arrowRef,padding:e.arrowOffset})),t}function V61(e){const[t,r]=U3({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),n=()=>{var i;(i=e.onClose)==null||i.call(e),r(!1)},a=()=>{var i,o;t?((i=e.onClose)==null||i.call(e),r(!1)):((o=e.onOpen)==null||o.call(e),r(!0))},c=Bu({placement:e.position,middleware:[...M61(e),...e.width==="target"?[t61({apply({rects:i}){var o,s;Object.assign((s=(o=c.refs.floating.current)==null?void 0:o.style)!=null?s:{},{width:`${i.reference.width}px`})}})]:[]]});return UL({opened:e.opened,positionDependencies:e.positionDependencies,floating:c}),B2(()=>{var i;(i=e.onPositionChange)==null||i.call(e,c.placement)},[c.placement]),{floating:c,controlled:typeof e.opened=="boolean",opened:t,onClose:n,onToggle:a}}const qL={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported"},[x61,GL]=Kx(qL.context);var w61=Object.defineProperty,L61=Object.defineProperties,S61=Object.getOwnPropertyDescriptors,On=Object.getOwnPropertySymbols,YL=Object.prototype.hasOwnProperty,ZL=Object.prototype.propertyIsEnumerable,Cg=(e,t,r)=>t in e?w61(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Pt=(e,t)=>{for(var r in t||(t={}))YL.call(t,r)&&Cg(e,r,t[r]);if(On)for(var r of On(t))ZL.call(t,r)&&Cg(e,r,t[r]);return e},k61=(e,t)=>L61(e,S61(t)),_61=(e,t)=>{var r={};for(var n in e)YL.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&On)for(var n of On(e))t.indexOf(n)<0&&ZL.call(e,n)&&(r[n]=e[n]);return r};const P61={refProp:"ref",popupType:"dialog"},KL=y.forwardRef((e,t)=>{const r=w1("PopoverTarget",P61,e),{children:n,refProp:a,popupType:c}=r,i=_61(r,["children","refProp","popupType"]);if(!P7(n))throw new Error(qL.children);const o=i,s=GL(),l=o3(s.reference,n.ref,t),f=s.withRoles?{"aria-haspopup":c,"aria-expanded":s.opened,"aria-controls":s.getDropdownId(),id:s.getTargetId()}:{};return y.cloneElement(n,Pt(k61(Pt(Pt(Pt({},o),f),s.targetProps),{className:ew(s.targetProps.className,o.className,n.props.className),[a]:l}),s.controlled?null:{onClick:s.onToggle}))});KL.displayName="@mantine/core/PopoverTarget";var N61=d1((e,{radius:t,shadow:r})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm}px ${e.spacing.md}px`,boxShadow:e.shadows[r]||r||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}})),O61=Object.defineProperty,Hg=Object.getOwnPropertySymbols,A61=Object.prototype.hasOwnProperty,E61=Object.prototype.propertyIsEnumerable,bg=(e,t,r)=>t in e?O61(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,p0=(e,t)=>{for(var r in t||(t={}))A61.call(t,r)&&bg(e,r,t[r]);if(Hg)for(var r of Hg(t))E61.call(t,r)&&bg(e,r,t[r]);return e};const Mg={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function XL({transition:e,state:t,duration:r,timingFunction:n}){const a={transitionDuration:`${r}ms`,transitionTimingFunction:n};return typeof e=="string"?e in wt?p0(p0(p0({transitionProperty:wt[e].transitionProperty},a),wt[e].common),wt[e][Mg[t]]):null:p0(p0(p0({transitionProperty:e.transitionProperty},a),e.common),e[Mg[t]])}function QL({duration:e,exitDuration:t,timingFunction:r,mounted:n,onEnter:a,onExit:c,onEntered:i,onExited:o}){const s=V2(),l=Sw(),f=s.respectReducedMotion?l:!1,[u,d]=y.useState(n?"entered":"exited");let p=f?0:e;const m=y.useRef(-1),v=H=>{const h=H?a:c,g=H?i:o;if(d(H?"pre-entering":"pre-exiting"),window.clearTimeout(m.current),p=f?0:H?e:t,p===0)typeof h=="function"&&h(),typeof g=="function"&&g(),d(H?"entered":"exited");else{const z=window.setTimeout(()=>{typeof h=="function"&&h(),d(H?"entering":"exiting")},10);m.current=window.setTimeout(()=>{window.clearTimeout(z),typeof g=="function"&&g(),d(H?"entered":"exited")},p)}};return B2(()=>{v(n)},[n]),y.useEffect(()=>()=>window.clearTimeout(m.current),[]),{transitionDuration:p,transitionStatus:u,transitionTimingFunction:r||s.transitionTimingFunction}}function m9({transition:e,duration:t=250,exitDuration:r=t,mounted:n,children:a,timingFunction:c,onExit:i,onEntered:o,onEnter:s,onExited:l}){const{transitionDuration:f,transitionStatus:u,transitionTimingFunction:d}=QL({mounted:n,exitDuration:r,duration:t,timingFunction:c,onExit:i,onEntered:o,onEnter:s,onExited:l});return f===0?n?V.createElement(V.Fragment,null,a({})):null:u==="exited"?null:V.createElement(V.Fragment,null,a(XL({transition:e,duration:f,state:u,timingFunction:d})))}m9.displayName="@mantine/core/Transition";function JL({children:e,active:t=!0,refProp:r="ref"}){const n=wu(t),a=o3(n,e?.ref);return P7(e)?y.cloneElement(e,{[r]:a}):e}JL.displayName="@mantine/core/FocusTrap";var $61=Object.defineProperty,D61=Object.defineProperties,T61=Object.getOwnPropertyDescriptors,Vg=Object.getOwnPropertySymbols,R61=Object.prototype.hasOwnProperty,F61=Object.prototype.propertyIsEnumerable,xg=(e,t,r)=>t in e?$61(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,N6=(e,t)=>{for(var r in t||(t={}))R61.call(t,r)&&xg(e,r,t[r]);if(Vg)for(var r of Vg(t))F61.call(t,r)&&xg(e,r,t[r]);return e},Nt=(e,t)=>D61(e,T61(t));function wg(e,t,r,n){return e==="center"||n==="center"?{top:t}:e==="end"?{bottom:r}:e==="start"?{top:r}:{}}function Lg(e,t,r,n,a){return e==="center"||n==="center"?{left:t}:e==="end"?{[a==="ltr"?"right":"left"]:r}:e==="start"?{[a==="ltr"?"left":"right"]:r}:{}}const I61={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function j61({position:e,withBorder:t,arrowSize:r,arrowOffset:n,arrowRadius:a,arrowPosition:c,arrowX:i,arrowY:o,dir:s}){const[l,f="center"]=e.split("-"),u={width:r,height:r,transform:"rotate(45deg)",position:"absolute",[I61[l]]:a},d=t?-r/2-1:-r/2;return l==="left"?Nt(N6(N6({},u),wg(f,o,n,c)),{right:d,borderLeft:0,borderBottom:0}):l==="right"?Nt(N6(N6({},u),wg(f,o,n,c)),{left:d,borderRight:0,borderTop:0}):l==="top"?Nt(N6(N6({},u),Lg(f,i,n,c,s)),{bottom:d,borderTop:0,borderLeft:0}):l==="bottom"?Nt(N6(N6({},u),Lg(f,i,n,c,s)),{top:d,borderBottom:0,borderRight:0}):{}}var B61=Object.defineProperty,W61=Object.defineProperties,U61=Object.getOwnPropertyDescriptors,An=Object.getOwnPropertySymbols,eS=Object.prototype.hasOwnProperty,tS=Object.prototype.propertyIsEnumerable,Sg=(e,t,r)=>t in e?B61(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,q61=(e,t)=>{for(var r in t||(t={}))eS.call(t,r)&&Sg(e,r,t[r]);if(An)for(var r of An(t))tS.call(t,r)&&Sg(e,r,t[r]);return e},G61=(e,t)=>W61(e,U61(t)),Y61=(e,t)=>{var r={};for(var n in e)eS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&An)for(var n of An(e))t.indexOf(n)<0&&tS.call(e,n)&&(r[n]=e[n]);return r};const Wu=y.forwardRef((e,t)=>{var r=e,{withBorder:n,position:a,arrowSize:c,arrowOffset:i,arrowRadius:o,arrowPosition:s,visible:l,arrowX:f,arrowY:u}=r,d=Y61(r,["withBorder","position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const p=V2();return l?V.createElement("div",G61(q61({},d),{ref:t,style:j61({withBorder:n,position:a,arrowSize:c,arrowOffset:i,arrowRadius:o,arrowPosition:s,dir:p.dir,arrowX:f,arrowY:u})})):null});Wu.displayName="@mantine/core/FloatingArrow";var Z61=Object.defineProperty,K61=Object.defineProperties,X61=Object.getOwnPropertyDescriptors,En=Object.getOwnPropertySymbols,rS=Object.prototype.hasOwnProperty,nS=Object.prototype.propertyIsEnumerable,kg=(e,t,r)=>t in e?Z61(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ot=(e,t)=>{for(var r in t||(t={}))rS.call(t,r)&&kg(e,r,t[r]);if(En)for(var r of En(t))nS.call(t,r)&&kg(e,r,t[r]);return e},_g=(e,t)=>K61(e,X61(t)),Q61=(e,t)=>{var r={};for(var n in e)rS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&En)for(var n of En(e))t.indexOf(n)<0&&nS.call(e,n)&&(r[n]=e[n]);return r};const J61={};function aS(e){const t=w1("PopoverDropdown",J61,e),{style:r,className:n,children:a,onKeyDownCapture:c}=t,i=Q61(t,["style","className","children","onKeyDownCapture"]),o=GL(),{classes:s,cx:l}=N61({radius:o.radius,shadow:o.shadow},{name:o.__staticSelector,classNames:o.classNames,styles:o.styles,unstyled:o.unstyled}),f=xu({opened:o.opened,shouldReturnFocus:o.returnFocus}),u=o.withRoles?{"aria-labelledby":o.getTargetId(),id:o.getDropdownId(),role:"dialog"}:{};return o.disabled?null:V.createElement(w8,{withinPortal:o.withinPortal},V.createElement(m9,{mounted:o.opened,transition:o.transition,duration:o.transitionDuration,exitDuration:typeof o.exitTransitionDuration=="number"?o.exitTransitionDuration:o.transitionDuration},d=>{var p,m;return V.createElement(JL,{active:o.trapFocus},V.createElement(z1,Ot(_g(Ot({},u),{tabIndex:-1,key:o.placement,ref:o.floating,style:_g(Ot(Ot({},r),d),{zIndex:o.zIndex,top:(p=o.y)!=null?p:0,left:(m=o.x)!=null?m:0,width:o.width==="target"?void 0:o.width}),className:l(s.dropdown,n),onKeyDownCapture:jX(o.onClose,{active:o.closeOnEscape,onTrigger:f,onKeyDown:c}),"data-position":o.placement}),i),a,V.createElement(Wu,{ref:o.arrowRef,arrowX:o.arrowX,arrowY:o.arrowY,visible:o.withArrow,withBorder:!0,position:o.placement,arrowSize:o.arrowSize,arrowRadius:o.arrowRadius,arrowOffset:o.arrowOffset,arrowPosition:o.arrowPosition,className:s.arrow})))}))}aS.displayName="@mantine/core/PopoverDropdown";function cS(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[r,n]=t.split("-"),a=r==="right"?"left":"right";return n===void 0?a:`${a}-${n}`}return t}var Pg=Object.getOwnPropertySymbols,ee1=Object.prototype.hasOwnProperty,te1=Object.prototype.propertyIsEnumerable,re1=(e,t)=>{var r={};for(var n in e)ee1.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Pg)for(var n of Pg(e))t.indexOf(n)<0&&te1.call(e,n)&&(r[n]=e[n]);return r};const ne1={position:"bottom",offset:8,positionDependencies:[],transition:"fade",transitionDuration:150,middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:V6("popover"),__staticSelector:"Popover",width:"max-content"};function m3(e){var t,r,n,a,c,i;const o=y.useRef(null),s=w1("Popover",ne1,e),{children:l,position:f,offset:u,onPositionChange:d,positionDependencies:p,opened:m,transition:v,transitionDuration:H,width:h,middlewares:g,withArrow:z,arrowSize:b,arrowOffset:x,arrowRadius:C,arrowPosition:M,unstyled:S,classNames:k,styles:w,closeOnClickOutside:P,withinPortal:N,closeOnEscape:$,clickOutsideEvents:A,trapFocus:D,onClose:j,onOpen:R,onChange:T,zIndex:F,radius:L,shadow:q,id:Z,defaultOpened:_,exitTransitionDuration:t1,__staticSelector:v1,withRoles:X,disabled:s1,returnFocus:b1}=s,f1=re1(s,["children","position","offset","onPositionChange","positionDependencies","opened","transition","transitionDuration","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","exitTransitionDuration","__staticSelector","withRoles","disabled","returnFocus"]),[M1,a1]=y.useState(null),[u1,x1]=y.useState(null),E=k4(Z),B=V2(),I=V61({middlewares:g,width:h,position:cS(B.dir,f),offset:u+(z?b/2:0),arrowRef:o,arrowOffset:x,onPositionChange:d,positionDependencies:p,opened:m,defaultOpened:_,onChange:T,onOpen:R,onClose:j});a11(()=>P&&I.onClose(),A,[M1,u1]);const Y=y.useCallback(U=>{a1(U),I.floating.reference(U)},[I.floating.reference]),K=y.useCallback(U=>{x1(U),I.floating.floating(U)},[I.floating.floating]);return V.createElement(x61,{value:{returnFocus:b1,disabled:s1,controlled:I.controlled,reference:Y,floating:K,x:I.floating.x,y:I.floating.y,arrowX:(n=(r=(t=I.floating)==null?void 0:t.middlewareData)==null?void 0:r.arrow)==null?void 0:n.x,arrowY:(i=(c=(a=I.floating)==null?void 0:a.middlewareData)==null?void 0:c.arrow)==null?void 0:i.y,opened:I.opened,arrowRef:o,transition:v,transitionDuration:H,exitTransitionDuration:t1,width:h,withArrow:z,arrowSize:b,arrowOffset:x,arrowRadius:C,arrowPosition:M,placement:I.floating.placement,trapFocus:D,withinPortal:N,zIndex:F,radius:L,shadow:q,closeOnEscape:$,onClose:I.onClose,onToggle:I.onToggle,getTargetId:()=>`${E}-target`,getDropdownId:()=>`${E}-dropdown`,withRoles:X,targetProps:f1,__staticSelector:v1,classNames:k,styles:w,unstyled:S}},l)}m3.Target=KL;m3.Dropdown=aS;m3.displayName="@mantine/core/Popover";var ae1=Object.defineProperty,$n=Object.getOwnPropertySymbols,iS=Object.prototype.hasOwnProperty,oS=Object.prototype.propertyIsEnumerable,Ng=(e,t,r)=>t in e?ae1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ce1=(e,t)=>{for(var r in t||(t={}))iS.call(t,r)&&Ng(e,r,t[r]);if($n)for(var r of $n(t))oS.call(t,r)&&Ng(e,r,t[r]);return e},ie1=(e,t)=>{var r={};for(var n in e)iS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&$n)for(var n of $n(e))t.indexOf(n)<0&&oS.call(e,n)&&(r[n]=e[n]);return r};function oe1(e){var t=e,{children:r,component:n="div",maxHeight:a=220,direction:c="column",id:i,innerRef:o,__staticSelector:s,styles:l,classNames:f,unstyled:u}=t,d=ie1(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:p}=y41(null,{name:s,styles:l,classNames:f,unstyled:u});return V.createElement(m3.Dropdown,ce1({p:0,onMouseDown:m=>m.preventDefault()},d),V.createElement("div",{style:{maxHeight:a,display:"flex"}},V.createElement(z1,{component:n||"div",id:`${i}-items`,"aria-labelledby":`${i}-label`,role:"listbox",onMouseDown:m=>m.preventDefault(),style:{flex:1,overflowY:n!==f9?"auto":void 0},"data-combobox-popover":!0,ref:o},V.createElement("div",{className:p.itemsWrapper,style:{flexDirection:c}},r))))}function ne({opened:e,transition:t="fade",transitionDuration:r=0,shadow:n,withinPortal:a,children:c,__staticSelector:i,onDirectionChange:o,switchDirectionOnFlip:s,zIndex:l,dropdownPosition:f,positionDependencies:u=[],classNames:d,styles:p,unstyled:m,readOnly:v}){return V.createElement(m3,{unstyled:m,classNames:d,styles:p,width:"target",withRoles:!1,opened:e,middlewares:{flip:f==="flip",shift:!1},position:f==="flip"?"bottom":f,positionDependencies:u,zIndex:l,__staticSelector:i,withinPortal:a,transition:t,transitionDuration:r,shadow:n,disabled:v,onPositionChange:H=>s&&o?.(H==="top"?"column-reverse":"column")},c)}ne.Target=m3.Target;ne.Dropdown=oe1;var se1=Object.defineProperty,le1=Object.defineProperties,fe1=Object.getOwnPropertyDescriptors,Dn=Object.getOwnPropertySymbols,sS=Object.prototype.hasOwnProperty,lS=Object.prototype.propertyIsEnumerable,Og=(e,t,r)=>t in e?se1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qi=(e,t)=>{for(var r in t||(t={}))sS.call(t,r)&&Og(e,r,t[r]);if(Dn)for(var r of Dn(t))lS.call(t,r)&&Og(e,r,t[r]);return e},ue1=(e,t)=>le1(e,fe1(t)),de1=(e,t)=>{var r={};for(var n in e)sS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Dn)for(var n of Dn(e))t.indexOf(n)<0&&lS.call(e,n)&&(r[n]=e[n]);return r};function Uu(e,t,r){const n=w1(e,t,r),{label:a,description:c,error:i,required:o,classNames:s,styles:l,className:f,unstyled:u,__staticSelector:d,sx:p,errorProps:m,labelProps:v,descriptionProps:H,wrapperProps:h,id:g,size:z,style:b,inputContainer:x,inputWrapperOrder:C,withAsterisk:M}=n,S=de1(n,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk"]),k=k4(g),{systemStyles:w,rest:P}=x6(S);return ue1(qi({},P),{classNames:s,styles:l,unstyled:u,wrapperProps:qi(qi({label:a,description:c,error:i,required:o,classNames:s,className:f,__staticSelector:d,sx:p,errorProps:m,labelProps:v,descriptionProps:H,unstyled:u,styles:l,id:k,size:z,style:b,inputContainer:x,inputWrapperOrder:C,withAsterisk:M},h),w),inputProps:{required:o,classNames:s,styles:l,unstyled:u,id:k,size:z,__staticSelector:d,invalid:!!i}})}var pe1=d1((e,{size:t})=>({label:{display:"inline-block",fontSize:e.fn.size({size:t,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}})),me1=Object.defineProperty,Tn=Object.getOwnPropertySymbols,fS=Object.prototype.hasOwnProperty,uS=Object.prototype.propertyIsEnumerable,Ag=(e,t,r)=>t in e?me1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,he1=(e,t)=>{for(var r in t||(t={}))fS.call(t,r)&&Ag(e,r,t[r]);if(Tn)for(var r of Tn(t))uS.call(t,r)&&Ag(e,r,t[r]);return e},ve1=(e,t)=>{var r={};for(var n in e)fS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Tn)for(var n of Tn(e))t.indexOf(n)<0&&uS.call(e,n)&&(r[n]=e[n]);return r};const ge1={labelElement:"label",size:"sm"},qu=y.forwardRef((e,t)=>{const r=w1("InputLabel",ge1,e),{labelElement:n,children:a,required:c,size:i,classNames:o,styles:s,unstyled:l,className:f,htmlFor:u,__staticSelector:d}=r,p=ve1(r,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector"]),{classes:m,cx:v}=pe1({size:i},{name:["InputWrapper",d],classNames:o,styles:s,unstyled:l});return V.createElement(z1,he1({component:n,ref:t,className:v(m.label,f),htmlFor:n==="label"?u:void 0},p),a,c&&V.createElement("span",{className:m.required,"aria-hidden":!0}," *"))});qu.displayName="@mantine/core/InputLabel";var ze1=d1((e,{size:t})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:e.fn.size({size:t,sizes:e.fontSizes})-2,lineHeight:1.2,display:"block"}})),ye1=Object.defineProperty,Rn=Object.getOwnPropertySymbols,dS=Object.prototype.hasOwnProperty,pS=Object.prototype.propertyIsEnumerable,Eg=(e,t,r)=>t in e?ye1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ce1=(e,t)=>{for(var r in t||(t={}))dS.call(t,r)&&Eg(e,r,t[r]);if(Rn)for(var r of Rn(t))pS.call(t,r)&&Eg(e,r,t[r]);return e},He1=(e,t)=>{var r={};for(var n in e)dS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Rn)for(var n of Rn(e))t.indexOf(n)<0&&pS.call(e,n)&&(r[n]=e[n]);return r};const be1={size:"sm"},Gu=y.forwardRef((e,t)=>{const r=w1("InputError",be1,e),{children:n,className:a,classNames:c,styles:i,unstyled:o,size:s,__staticSelector:l}=r,f=He1(r,["children","className","classNames","styles","unstyled","size","__staticSelector"]),{classes:u,cx:d}=ze1({size:s},{name:["InputWrapper",l],classNames:c,styles:i,unstyled:o});return V.createElement(Z1,Ce1({className:d(u.error,a),ref:t},f),n)});Gu.displayName="@mantine/core/InputError";var Me1=d1((e,{size:t})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:e.fn.size({size:t,sizes:e.fontSizes})-2,lineHeight:1.2,display:"block"}})),Ve1=Object.defineProperty,Fn=Object.getOwnPropertySymbols,mS=Object.prototype.hasOwnProperty,hS=Object.prototype.propertyIsEnumerable,$g=(e,t,r)=>t in e?Ve1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,xe1=(e,t)=>{for(var r in t||(t={}))mS.call(t,r)&&$g(e,r,t[r]);if(Fn)for(var r of Fn(t))hS.call(t,r)&&$g(e,r,t[r]);return e},we1=(e,t)=>{var r={};for(var n in e)mS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Fn)for(var n of Fn(e))t.indexOf(n)<0&&hS.call(e,n)&&(r[n]=e[n]);return r};const Le1={size:"sm"},Yu=y.forwardRef((e,t)=>{const r=w1("InputDescription",Le1,e),{children:n,className:a,classNames:c,styles:i,unstyled:o,size:s,__staticSelector:l}=r,f=we1(r,["children","className","classNames","styles","unstyled","size","__staticSelector"]),{classes:u,cx:d}=Me1({size:s},{name:["InputWrapper",l],classNames:c,styles:i,unstyled:o});return V.createElement(Z1,xe1({color:"dimmed",className:d(u.description,a),ref:t,unstyled:o},f),n)});Yu.displayName="@mantine/core/InputDescription";const vS=y.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),Se1=vS.Provider,ke1=()=>y.useContext(vS);function _e1(e,{hasDescription:t,hasError:r}){const n=e.findIndex(s=>s==="input"),a=e[n-1],c=e[n+1];return{offsetBottom:t&&c==="description"||r&&c==="error",offsetTop:t&&a==="description"||r&&a==="error"}}var Pe1=Object.defineProperty,Ne1=Object.defineProperties,Oe1=Object.getOwnPropertyDescriptors,Dg=Object.getOwnPropertySymbols,Ae1=Object.prototype.hasOwnProperty,Ee1=Object.prototype.propertyIsEnumerable,Tg=(e,t,r)=>t in e?Pe1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$e1=(e,t)=>{for(var r in t||(t={}))Ae1.call(t,r)&&Tg(e,r,t[r]);if(Dg)for(var r of Dg(t))Ee1.call(t,r)&&Tg(e,r,t[r]);return e},De1=(e,t)=>Ne1(e,Oe1(t)),Te1=d1(e=>({root:De1($e1({},e.fn.fontStyles()),{lineHeight:e.lineHeight})})),Re1=Object.defineProperty,Fe1=Object.defineProperties,Ie1=Object.getOwnPropertyDescriptors,In=Object.getOwnPropertySymbols,gS=Object.prototype.hasOwnProperty,zS=Object.prototype.propertyIsEnumerable,Rg=(e,t,r)=>t in e?Re1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,O6=(e,t)=>{for(var r in t||(t={}))gS.call(t,r)&&Rg(e,r,t[r]);if(In)for(var r of In(t))zS.call(t,r)&&Rg(e,r,t[r]);return e},Fg=(e,t)=>Fe1(e,Ie1(t)),je1=(e,t)=>{var r={};for(var n in e)gS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&In)for(var n of In(e))t.indexOf(n)<0&&zS.call(e,n)&&(r[n]=e[n]);return r};const Be1={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},yS=y.forwardRef((e,t)=>{const r=w1("InputWrapper",Be1,e),{className:n,label:a,children:c,required:i,id:o,error:s,description:l,labelElement:f,labelProps:u,descriptionProps:d,errorProps:p,classNames:m,styles:v,size:H,inputContainer:h,__staticSelector:g,unstyled:z,inputWrapperOrder:b,withAsterisk:x}=r,C=je1(r,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk"]),{classes:M,cx:S}=Te1(null,{classNames:m,styles:v,name:["InputWrapper",g],unstyled:z}),k={classNames:m,styles:v,unstyled:z,size:H,__staticSelector:g},w=typeof x=="boolean"?x:i,P=o?`${o}-error`:p?.id,N=o?`${o}-description`:d?.id,A=`${!!s&&typeof s!="boolean"?P:""} ${l?N:""}`,D=A.trim().length>0?A.trim():void 0,j=a&&V.createElement(qu,O6(O6({key:"label",labelElement:f,id:o?`${o}-label`:void 0,htmlFor:o,required:w},k),u),a),R=l&&V.createElement(Yu,Fg(O6(O6({key:"description"},d),k),{size:d?.size||k.size,id:d?.id||N}),l),T=V.createElement(y.Fragment,{key:"input"},h(c)),F=typeof s!="boolean"&&s&&V.createElement(Gu,Fg(O6(O6({},p),k),{size:p?.size||k.size,key:"error",id:p?.id||P}),s),L=b.map(q=>{switch(q){case"label":return j;case"input":return T;case"description":return R;case"error":return F;default:return null}});return V.createElement(Se1,{value:O6({describedBy:D},_e1(b,{hasDescription:!!R,hasError:!!F}))},V.createElement(z1,O6({className:S(M.root,n),ref:t},C),L))});yS.displayName="@mantine/core/InputWrapper";var We1=Object.defineProperty,jn=Object.getOwnPropertySymbols,CS=Object.prototype.hasOwnProperty,HS=Object.prototype.propertyIsEnumerable,Ig=(e,t,r)=>t in e?We1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ue1=(e,t)=>{for(var r in t||(t={}))CS.call(t,r)&&Ig(e,r,t[r]);if(jn)for(var r of jn(t))HS.call(t,r)&&Ig(e,r,t[r]);return e},qe1=(e,t)=>{var r={};for(var n in e)CS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&jn)for(var n of jn(e))t.indexOf(n)<0&&HS.call(e,n)&&(r[n]=e[n]);return r};const Ge1={},bS=y.forwardRef((e,t)=>{const r=w1("InputPlaceholder",Ge1,e),{sx:n}=r,a=qe1(r,["sx"]);return V.createElement(z1,Ue1({component:"span",sx:[c=>c.fn.placeholderStyles(),...f8(n)],ref:t},a))});bS.displayName="@mantine/core/InputPlaceholder";var Ye1=Object.defineProperty,Ze1=Object.defineProperties,Ke1=Object.getOwnPropertyDescriptors,jg=Object.getOwnPropertySymbols,Xe1=Object.prototype.hasOwnProperty,Qe1=Object.prototype.propertyIsEnumerable,Bg=(e,t,r)=>t in e?Ye1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,At=(e,t)=>{for(var r in t||(t={}))Xe1.call(t,r)&&Bg(e,r,t[r]);if(jg)for(var r of jg(t))Qe1.call(t,r)&&Bg(e,r,t[r]);return e},Gi=(e,t)=>Ze1(e,Ke1(t));const D2={xs:30,sm:36,md:42,lg:50,xl:60};function Je1({theme:e,variant:t}){return t==="default"?{border:`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:"1px solid transparent",backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:28,outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}}var e01=d1((e,{size:t,multiline:r,radius:n,variant:a,invalid:c,rightSectionWidth:i,withRightSection:o,iconWidth:s,offsetBottom:l,offsetTop:f,pointer:u})=>{const d=e.fn.variant({variant:"filled",color:"red"}).background,p=a==="default"||a==="filled"?{minHeight:e.fn.size({size:t,sizes:D2}),paddingLeft:e.fn.size({size:t,sizes:D2})/3,paddingRight:o?i:e.fn.size({size:t,sizes:D2})/3,borderRadius:e.fn.radius(n)}:null;return{wrapper:{position:"relative",marginTop:f?`calc(${e.spacing.xs}px / 2)`:void 0,marginBottom:l?`calc(${e.spacing.xs}px / 2)`:void 0},input:At(Gi(At(Gi(At({},e.fn.fontStyles()),{height:r?a==="unstyled"?void 0:"auto":e.fn.size({size:t,sizes:D2}),WebkitTapHighlightColor:"transparent",lineHeight:r?e.lineHeight:`${e.fn.size({size:t,sizes:D2})-2}px`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:e.fn.size({size:t,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:u?"pointer":void 0}),p),{"&:disabled":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed","&::placeholder":{color:e.colors.dark[2]}},"&::placeholder":Gi(At({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),Je1({theme:e,variant:a})),withIcon:{paddingLeft:typeof s=="number"?s:e.fn.size({size:t,sizes:D2})},invalid:{color:d,borderColor:d,"&::placeholder":{opacity:1,color:d}},disabled:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed","&::placeholder":{color:e.colors.dark[2]}},icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:typeof s=="number"?s:e.fn.size({size:t,sizes:D2}),color:c?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:i}}}),t01=Object.defineProperty,r01=Object.defineProperties,n01=Object.getOwnPropertyDescriptors,Bn=Object.getOwnPropertySymbols,MS=Object.prototype.hasOwnProperty,VS=Object.prototype.propertyIsEnumerable,Wg=(e,t,r)=>t in e?t01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Et=(e,t)=>{for(var r in t||(t={}))MS.call(t,r)&&Wg(e,r,t[r]);if(Bn)for(var r of Bn(t))VS.call(t,r)&&Wg(e,r,t[r]);return e},Ug=(e,t)=>r01(e,n01(t)),a01=(e,t)=>{var r={};for(var n in e)MS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Bn)for(var n of Bn(e))t.indexOf(n)<0&&VS.call(e,n)&&(r[n]=e[n]);return r};const c01={rightSectionWidth:36,size:"sm",variant:"default"},o0=y.forwardRef((e,t)=>{const r=w1("Input",c01,e),{className:n,invalid:a,required:c,disabled:i,variant:o,icon:s,style:l,rightSectionWidth:f,iconWidth:u,rightSection:d,rightSectionProps:p,radius:m,size:v,wrapperProps:H,classNames:h,styles:g,__staticSelector:z,multiline:b,sx:x,unstyled:C,pointer:M}=r,S=a01(r,["className","invalid","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:k,offsetTop:w,describedBy:P}=ke1(),{classes:N,cx:$}=e01({radius:m,size:v,multiline:b,variant:o,invalid:a,rightSectionWidth:f,iconWidth:u,withRightSection:!!d,offsetBottom:k,offsetTop:w,pointer:M},{classNames:h,styles:g,name:["Input",z],unstyled:C}),{systemStyles:A,rest:D}=x6(S);return V.createElement(z1,Et(Et({className:$(N.wrapper,n),sx:x,style:l},A),H),s&&V.createElement("div",{className:N.icon},s),V.createElement(z1,Ug(Et({component:"input"},D),{ref:t,required:c,"aria-invalid":a,"aria-describedby":P,disabled:i,className:$(N[`${o}Variant`],N.input,{[N.withIcon]:s,[N.invalid]:a,[N.disabled]:i})})),d&&V.createElement("div",Ug(Et({},p),{className:N.rightSection}),d))});o0.displayName="@mantine/core/Input";o0.Wrapper=yS;o0.Label=qu;o0.Description=Yu;o0.Error=Gu;o0.Placeholder=bS;const O2=o0;var i01=d1((e,{orientation:t,buttonBorderWidth:r})=>({root:{display:"flex",flexDirection:t==="vertical"?"column":"row","& [data-button]":{"&:first-of-type":{borderBottomRightRadius:0,[t==="vertical"?"borderBottomLeftRadius":"borderTopRightRadius"]:0,[t==="vertical"?"borderBottomWidth":"borderRightWidth"]:r/2},"&:last-of-type":{borderTopLeftRadius:0,[t==="vertical"?"borderTopRightRadius":"borderBottomLeftRadius"]:0,[t==="vertical"?"borderTopWidth":"borderLeftWidth"]:r/2},"&:not(:first-of-type):not(:last-of-type)":{borderRadius:0,[t==="vertical"?"borderTopWidth":"borderLeftWidth"]:r/2,[t==="vertical"?"borderBottomWidth":"borderRightWidth"]:r/2},"& + [data-button]":{[t==="vertical"?"marginTop":"marginLeft"]:-r,"@media (min-resolution: 192dpi)":{[t==="vertical"?"marginTop":"marginLeft"]:0}}}}})),o01=Object.defineProperty,Wn=Object.getOwnPropertySymbols,xS=Object.prototype.hasOwnProperty,wS=Object.prototype.propertyIsEnumerable,qg=(e,t,r)=>t in e?o01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,s01=(e,t)=>{for(var r in t||(t={}))xS.call(t,r)&&qg(e,r,t[r]);if(Wn)for(var r of Wn(t))wS.call(t,r)&&qg(e,r,t[r]);return e},l01=(e,t)=>{var r={};for(var n in e)xS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Wn)for(var n of Wn(e))t.indexOf(n)<0&&wS.call(e,n)&&(r[n]=e[n]);return r};const f01={orientation:"horizontal",buttonBorderWidth:1},LS=y.forwardRef((e,t)=>{const r=w1("ButtonGroup",f01,e),{className:n,orientation:a,buttonBorderWidth:c,unstyled:i}=r,o=l01(r,["className","orientation","buttonBorderWidth","unstyled"]),{classes:s,cx:l}=i01({orientation:a,buttonBorderWidth:c},{name:"ButtonGroup",unstyled:i});return V.createElement(z1,s01({className:l(s.root,n),ref:t},o))});LS.displayName="@mantine/core/ButtonGroup";var u01=Object.defineProperty,d01=Object.defineProperties,p01=Object.getOwnPropertyDescriptors,Gg=Object.getOwnPropertySymbols,m01=Object.prototype.hasOwnProperty,h01=Object.prototype.propertyIsEnumerable,Yg=(e,t,r)=>t in e?u01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Oe=(e,t)=>{for(var r in t||(t={}))m01.call(t,r)&&Yg(e,r,t[r]);if(Gg)for(var r of Gg(t))h01.call(t,r)&&Yg(e,r,t[r]);return e},dl=(e,t)=>d01(e,p01(t));const pl={xs:{height:D2.xs,paddingLeft:14,paddingRight:14},sm:{height:D2.sm,paddingLeft:18,paddingRight:18},md:{height:D2.md,paddingLeft:22,paddingRight:22},lg:{height:D2.lg,paddingLeft:26,paddingRight:26},xl:{height:D2.xl,paddingLeft:32,paddingRight:32},"compact-xs":{height:22,paddingLeft:7,paddingRight:7},"compact-sm":{height:26,paddingLeft:8,paddingRight:8},"compact-md":{height:30,paddingLeft:10,paddingRight:10},"compact-lg":{height:34,paddingLeft:12,paddingRight:12},"compact-xl":{height:40,paddingLeft:14,paddingRight:14}};function v01({compact:e,size:t,withLeftIcon:r,withRightIcon:n}){if(e)return pl[`compact-${t}`];const a=pl[t];return dl(Oe({},a),{paddingLeft:r?a.paddingLeft/1.5:a.paddingLeft,paddingRight:n?a.paddingRight/1.5:a.paddingRight})}const g01=e=>({display:e?"block":"inline-block",width:e?"100%":"auto"});function z01({variant:e,theme:t,color:r,gradient:n}){const a=t.fn.variant({color:r,variant:e,gradient:n});return e==="gradient"?{border:0,backgroundImage:a.background,color:a.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:Oe({border:`1px solid ${a.border}`,backgroundColor:a.background,color:a.color},t.fn.hover({backgroundColor:a.hover}))}var y01=d1((e,{color:t,size:r,radius:n,fullWidth:a,compact:c,gradient:i,variant:o,withLeftIcon:s,withRightIcon:l})=>({root:dl(Oe(dl(Oe(Oe(Oe(Oe({},v01({compact:c,size:r,withLeftIcon:s,withRightIcon:l})),e.fn.fontStyles()),e.fn.focusStyles()),g01(a)),{borderRadius:e.fn.radius(n),fontWeight:600,position:"relative",lineHeight:1,fontSize:e.fn.size({size:r,sizes:e.fontSizes}),userSelect:"none",cursor:"pointer"}),z01({variant:o,theme:e,color:t,gradient:i})),{"&:active":e.activeStyles,"&:disabled, &[data-disabled]":{borderColor:"transparent",backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2],color:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[5],cursor:"not-allowed",backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":{content:'""',position:"absolute",top:-1,left:-1,right:-1,bottom:-1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(n),cursor:"not-allowed"}}}),icon:{display:"flex",alignItems:"center"},leftIcon:{marginRight:10},rightIcon:{marginLeft:10},centerLoader:{position:"absolute",left:"50%",transform:"translateX(-50%)",opacity:.5},inner:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",overflow:"visible"},label:{whiteSpace:"nowrap",height:"100%",overflow:"hidden",display:"flex",alignItems:"center"}})),C01=Object.defineProperty,Un=Object.getOwnPropertySymbols,SS=Object.prototype.hasOwnProperty,kS=Object.prototype.propertyIsEnumerable,Zg=(e,t,r)=>t in e?C01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kg=(e,t)=>{for(var r in t||(t={}))SS.call(t,r)&&Zg(e,r,t[r]);if(Un)for(var r of Un(t))kS.call(t,r)&&Zg(e,r,t[r]);return e},H01=(e,t)=>{var r={};for(var n in e)SS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Un)for(var n of Un(e))t.indexOf(n)<0&&kS.call(e,n)&&(r[n]=e[n]);return r};const b01={size:"sm",type:"button",variant:"filled",loaderPosition:"left"},Zu=y.forwardRef((e,t)=>{const r=w1("Button",b01,e),{className:n,size:a,color:c,type:i,disabled:o,children:s,leftIcon:l,rightIcon:f,fullWidth:u,variant:d,radius:p,uppercase:m,compact:v,loading:H,loaderPosition:h,loaderProps:g,gradient:z,classNames:b,styles:x,unstyled:C}=r,M=H01(r,["className","size","color","type","disabled","children","leftIcon","rightIcon","fullWidth","variant","radius","uppercase","compact","loading","loaderPosition","loaderProps","gradient","classNames","styles","unstyled"]),{classes:S,cx:k,theme:w}=y01({radius:p,color:c,size:a,fullWidth:u,compact:v,gradient:z,variant:d,withLeftIcon:!!l,withRightIcon:!!f},{name:"Button",unstyled:C,classNames:b,styles:x}),P=w.fn.variant({color:c,variant:d}),N=V.createElement(Su,Kg({color:P.color,size:w.fn.size({size:a,sizes:pl}).height/2},g));return V.createElement(A7,Kg({className:k(S.root,n),type:i,disabled:o,"data-button":!0,"data-disabled":o||void 0,"data-loading":H||void 0,ref:t,unstyled:C},M),V.createElement("div",{className:S.inner},(l||H&&h==="left")&&V.createElement("span",{className:k(S.icon,S.leftIcon)},H&&h==="left"?N:l),H&&h==="center"&&V.createElement("span",{className:S.centerLoader},N),V.createElement("span",{className:S.label,style:{textTransform:m?"uppercase":void 0}},s),(f||H&&h==="right")&&V.createElement("span",{className:k(S.icon,S.rightIcon)},H&&h==="right"?N:f)))});Zu.displayName="@mantine/core/Button";Zu.Group=LS;const r3=Zu;var M01=d1((e,{radius:t,shadow:r,withBorder:n})=>({root:{outline:0,WebkitTapHighlightColor:"transparent",display:"block",textDecoration:"none",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.white,boxSizing:"border-box",borderRadius:e.fn.radius(t),boxShadow:e.shadows[r]||r||"none",border:n?`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[3]}`:void 0}})),V01=Object.defineProperty,qn=Object.getOwnPropertySymbols,_S=Object.prototype.hasOwnProperty,PS=Object.prototype.propertyIsEnumerable,Xg=(e,t,r)=>t in e?V01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,x01=(e,t)=>{for(var r in t||(t={}))_S.call(t,r)&&Xg(e,r,t[r]);if(qn)for(var r of qn(t))PS.call(t,r)&&Xg(e,r,t[r]);return e},w01=(e,t)=>{var r={};for(var n in e)_S.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&qn)for(var n of qn(e))t.indexOf(n)<0&&PS.call(e,n)&&(r[n]=e[n]);return r};const L01={},NS=y.forwardRef((e,t)=>{const r=w1("Paper",L01,e),{className:n,children:a,radius:c,withBorder:i,shadow:o,unstyled:s}=r,l=w01(r,["className","children","radius","withBorder","shadow","unstyled"]),{classes:f,cx:u}=M01({radius:c,shadow:o,withBorder:i},{name:"Paper",unstyled:s});return V.createElement(z1,x01({className:u(f.root,n),ref:t},l),a)});NS.displayName="@mantine/core/Paper";const OS=NS;var S01=Object.defineProperty,Gn=Object.getOwnPropertySymbols,AS=Object.prototype.hasOwnProperty,ES=Object.prototype.propertyIsEnumerable,Qg=(e,t,r)=>t in e?S01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k01=(e,t)=>{for(var r in t||(t={}))AS.call(t,r)&&Qg(e,r,t[r]);if(Gn)for(var r of Gn(t))ES.call(t,r)&&Qg(e,r,t[r]);return e},_01=(e,t)=>{var r={};for(var n in e)AS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Gn)for(var n of Gn(e))t.indexOf(n)<0&&ES.call(e,n)&&(r[n]=e[n]);return r};const $S=y.forwardRef((e,t)=>{const r=w1("Center",{},e),{inline:n,sx:a}=r,c=_01(r,["inline","sx"]);return V.createElement(z1,k01({ref:t,sx:[{display:n?"inline-flex":"flex",alignItems:"center",justifyContent:"center"},...f8(a)]},c))});$S.displayName="@mantine/core/Center";const P01=$S,DS=y.createContext(null),N01=DS.Provider,O01=()=>y.useContext(DS);function A01(e){return y.Children.toArray(e).filter(Boolean)}const E01={left:"flex-start",center:"center",right:"flex-end",apart:"space-between"};var $01=d1((e,{spacing:t,position:r,noWrap:n,grow:a,align:c,count:i})=>({root:{boxSizing:"border-box",display:"flex",flexDirection:"row",alignItems:c||"center",flexWrap:n?"nowrap":"wrap",justifyContent:E01[r],gap:e.fn.size({size:t,sizes:e.spacing}),"& > *":{boxSizing:"border-box",maxWidth:a?`calc(${100/i}% - ${e.fn.size({size:t,sizes:e.spacing})-e.fn.size({size:t,sizes:e.spacing})/i}px)`:void 0,flexGrow:a?1:0}}})),D01=Object.defineProperty,Yn=Object.getOwnPropertySymbols,TS=Object.prototype.hasOwnProperty,RS=Object.prototype.propertyIsEnumerable,Jg=(e,t,r)=>t in e?D01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,T01=(e,t)=>{for(var r in t||(t={}))TS.call(t,r)&&Jg(e,r,t[r]);if(Yn)for(var r of Yn(t))RS.call(t,r)&&Jg(e,r,t[r]);return e},R01=(e,t)=>{var r={};for(var n in e)TS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Yn)for(var n of Yn(e))t.indexOf(n)<0&&RS.call(e,n)&&(r[n]=e[n]);return r};const F01={position:"left",spacing:"md"},r4=y.forwardRef((e,t)=>{const r=w1("Group",F01,e),{className:n,position:a,align:c,children:i,noWrap:o,grow:s,spacing:l,unstyled:f}=r,u=R01(r,["className","position","align","children","noWrap","grow","spacing","unstyled"]),d=A01(i),{classes:p,cx:m}=$01({align:c,grow:s,noWrap:o,spacing:l,position:a,count:d.length},{unstyled:f,name:"Group"});return V.createElement(z1,T01({className:m(p.root,n),ref:t},u),d)});r4.displayName="@mantine/core/Group";var I01=d1((e,{spacing:t,align:r,justify:n})=>({root:{display:"flex",flexDirection:"column",alignItems:r,justifyContent:n,gap:e.fn.size({size:t,sizes:e.spacing})}})),j01=Object.defineProperty,Zn=Object.getOwnPropertySymbols,FS=Object.prototype.hasOwnProperty,IS=Object.prototype.propertyIsEnumerable,ez=(e,t,r)=>t in e?j01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,B01=(e,t)=>{for(var r in t||(t={}))FS.call(t,r)&&ez(e,r,t[r]);if(Zn)for(var r of Zn(t))IS.call(t,r)&&ez(e,r,t[r]);return e},W01=(e,t)=>{var r={};for(var n in e)FS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Zn)for(var n of Zn(e))t.indexOf(n)<0&&IS.call(e,n)&&(r[n]=e[n]);return r};const U01={spacing:"md",align:"stretch",justify:"top"},h3=y.forwardRef((e,t)=>{const r=w1("Stack",U01,e),{spacing:n,className:a,align:c,justify:i,unstyled:o}=r,s=W01(r,["spacing","className","align","justify","unstyled"]),{classes:l,cx:f}=I01({spacing:n,align:c,justify:i},{name:"Stack",unstyled:o});return V.createElement(z1,B01({className:f(l.root,a),ref:t},s))});h3.displayName="@mantine/core/Stack";function q01({spacing:e,offset:t,orientation:r,children:n,role:a,unstyled:c}){return r==="horizontal"?V.createElement(r4,{pt:t,spacing:e,role:a,unstyled:c},n):V.createElement(h3,{pt:t,spacing:e,role:a,unstyled:c},n)}var G01=Object.defineProperty,Kn=Object.getOwnPropertySymbols,jS=Object.prototype.hasOwnProperty,BS=Object.prototype.propertyIsEnumerable,tz=(e,t,r)=>t in e?G01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,rz=(e,t)=>{for(var r in t||(t={}))jS.call(t,r)&&tz(e,r,t[r]);if(Kn)for(var r of Kn(t))BS.call(t,r)&&tz(e,r,t[r]);return e},Y01=(e,t)=>{var r={};for(var n in e)jS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Kn)for(var n of Kn(e))t.indexOf(n)<0&&BS.call(e,n)&&(r[n]=e[n]);return r};const Z01={orientation:"horizontal",spacing:"lg",size:"sm",offset:"xs"},WS=y.forwardRef((e,t)=>{const r=w1("CheckboxGroup",Z01,e),{children:n,value:a,defaultValue:c,onChange:i,orientation:o,spacing:s,size:l,wrapperProps:f,offset:u}=r,d=Y01(r,["children","value","defaultValue","onChange","orientation","spacing","size","wrapperProps","offset"]),[p,m]=U3({value:a,defaultValue:c,finalValue:[],onChange:i}),v=H=>{const h=H.currentTarget.value;m(p.includes(h)?p.filter(g=>g!==h):[...p,h])};return V.createElement(N01,{value:{value:p,onChange:v,size:l}},V.createElement(O2.Wrapper,rz(rz({labelElement:"div",size:l,__staticSelector:"CheckboxGroup",ref:t},f),d),V.createElement(q01,{spacing:s,orientation:o,offset:u},n)))});WS.displayName="@mantine/core/CheckboxGroup";var K01=Object.defineProperty,Xn=Object.getOwnPropertySymbols,US=Object.prototype.hasOwnProperty,qS=Object.prototype.propertyIsEnumerable,nz=(e,t,r)=>t in e?K01(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ml=(e,t)=>{for(var r in t||(t={}))US.call(t,r)&&nz(e,r,t[r]);if(Xn)for(var r of Xn(t))qS.call(t,r)&&nz(e,r,t[r]);return e},X01=(e,t)=>{var r={};for(var n in e)US.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Xn)for(var n of Xn(e))t.indexOf(n)<0&&qS.call(e,n)&&(r[n]=e[n]);return r};function Q01(e){return V.createElement("svg",ml({viewBox:"0 0 10 7",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e),V.createElement("path",{d:"M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}function J01(e){var t=e,{indeterminate:r}=t,n=X01(t,["indeterminate"]);return r?V.createElement("svg",ml({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 32 6"},n),V.createElement("rect",{width:"32",height:"6",fill:"currentColor",rx:"3"})):V.createElement(Q01,ml({},n))}var e81=Object.defineProperty,t81=Object.defineProperties,r81=Object.getOwnPropertyDescriptors,az=Object.getOwnPropertySymbols,n81=Object.prototype.hasOwnProperty,a81=Object.prototype.propertyIsEnumerable,cz=(e,t,r)=>t in e?e81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,c81=(e,t)=>{for(var r in t||(t={}))n81.call(t,r)&&cz(e,r,t[r]);if(az)for(var r of az(t))a81.call(t,r)&&cz(e,r,t[r]);return e},i81=(e,t)=>t81(e,r81(t));const o81={xs:16,sm:20,md:24,lg:30,xl:36},s81={xs:8,sm:10,md:14,lg:16,xl:20};var l81=d1((e,{size:t,radius:r,color:n,transitionDuration:a,labelPosition:c,error:i,indeterminate:o},s)=>{const l=e.fn.size({size:t,sizes:o81}),f=e.fn.variant({variant:"filled",color:n}),u=e.fn.variant({variant:"filled",color:"red"}).background;return{icon:{ref:s("icon"),color:o?"inherit":e.white,transform:o?"none":"translateY(5px) scale(0.5)",opacity:o?1:0,transitionProperty:"opacity, transform",transitionTimingFunction:"ease",transitionDuration:`${a}ms`,pointerEvents:"none",width:e.fn.size({size:t,sizes:s81}),position:"absolute",zIndex:1,top:0,bottom:0,left:0,right:0,margin:"auto","@media (prefers-reduced-motion)":{transitionDuration:e.respectReducedMotion?"0ms":void 0}},inner:{position:"relative",width:l,height:l,order:c==="left"?2:1},input:i81(c81({},e.fn.focusStyles()),{appearance:"none",backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`1px solid ${i?u:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,width:l,height:l,borderRadius:e.fn.radius(r),padding:0,display:"block",margin:0,transition:`border-color ${a}ms ease, background-color ${a}ms ease`,cursor:e.cursorType,"&:checked":{backgroundColor:f.background,borderColor:f.background,[`& + .${s("icon")}`]:{opacity:1,color:e.white,transform:"translateY(0) scale(1)"}},"&:disabled":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2],borderColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[3],cursor:"not-allowed",[`& + .${s("icon")}`]:{color:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[5]}}})}}),f81=Object.defineProperty,u81=Object.defineProperties,d81=Object.getOwnPropertyDescriptors,iz=Object.getOwnPropertySymbols,p81=Object.prototype.hasOwnProperty,m81=Object.prototype.propertyIsEnumerable,oz=(e,t,r)=>t in e?f81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,h81=(e,t)=>{for(var r in t||(t={}))p81.call(t,r)&&oz(e,r,t[r]);if(iz)for(var r of iz(t))m81.call(t,r)&&oz(e,r,t[r]);return e},v81=(e,t)=>u81(e,d81(t));const g81={xs:16,sm:20,md:24,lg:30,xl:36};var z81=d1((e,{labelPosition:t,size:r})=>({root:{},body:{display:"inline-flex"},labelWrapper:v81(h81({},e.fn.fontStyles()),{display:"inline-flex",flexDirection:"column",WebkitTapHighlightColor:"transparent",fontSize:e.fn.size({size:r,sizes:e.fontSizes}),lineHeight:`${e.fn.size({size:r,sizes:g81})}px`,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,cursor:e.cursorType,order:t==="left"?1:2}),description:{marginTop:`calc(${e.spacing.xs}px / 2)`,[t==="left"?"paddingRight":"paddingLeft"]:e.spacing.sm},error:{marginTop:`calc(${e.spacing.xs}px / 2)`,[t==="left"?"paddingRight":"paddingLeft"]:e.spacing.sm},label:{cursor:e.cursorType,[t==="left"?"paddingRight":"paddingLeft"]:e.spacing.sm,"&[data-disabled]":{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}})),y81=Object.defineProperty,Qn=Object.getOwnPropertySymbols,GS=Object.prototype.hasOwnProperty,YS=Object.prototype.propertyIsEnumerable,sz=(e,t,r)=>t in e?y81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C81=(e,t)=>{for(var r in t||(t={}))GS.call(t,r)&&sz(e,r,t[r]);if(Qn)for(var r of Qn(t))YS.call(t,r)&&sz(e,r,t[r]);return e},H81=(e,t)=>{var r={};for(var n in e)GS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Qn)for(var n of Qn(e))t.indexOf(n)<0&&YS.call(e,n)&&(r[n]=e[n]);return r};function ZS(e){var t=e,{__staticSelector:r,className:n,classNames:a,styles:c,unstyled:i,children:o,label:s,description:l,id:f,disabled:u,error:d,size:p,labelPosition:m}=t,v=H81(t,["__staticSelector","className","classNames","styles","unstyled","children","label","description","id","disabled","error","size","labelPosition"]);const{classes:H,cx:h}=z81({size:p,labelPosition:m},{name:r,styles:c,classNames:a,unstyled:i});return V.createElement(z1,C81({className:h(H.root,n)},v),V.createElement("div",{className:h(H.body)},o,V.createElement("div",{className:H.labelWrapper},s&&V.createElement("label",{className:H.label,"data-disabled":u||void 0,htmlFor:f},s),l&&V.createElement(O2.Description,{className:H.description},l),d&&d!=="boolean"&&V.createElement(O2.Error,{className:H.error},d))))}ZS.displayName="@mantine/core/InlineInput";var b81=Object.defineProperty,Jn=Object.getOwnPropertySymbols,KS=Object.prototype.hasOwnProperty,XS=Object.prototype.propertyIsEnumerable,lz=(e,t,r)=>t in e?b81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$t=(e,t)=>{for(var r in t||(t={}))KS.call(t,r)&&lz(e,r,t[r]);if(Jn)for(var r of Jn(t))XS.call(t,r)&&lz(e,r,t[r]);return e},M81=(e,t)=>{var r={};for(var n in e)KS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Jn)for(var n of Jn(e))t.indexOf(n)<0&&XS.call(e,n)&&(r[n]=e[n]);return r};const V81={size:"sm",transitionDuration:100,icon:J01,labelPosition:"right"},h9=y.forwardRef((e,t)=>{const r=w1("Checkbox",V81,e),{className:n,style:a,sx:c,checked:i,disabled:o,color:s,label:l,indeterminate:f,id:u,size:d,radius:p,wrapperProps:m,children:v,classNames:H,styles:h,transitionDuration:g,icon:z,unstyled:b,labelPosition:x,description:C,error:M}=r,S=M81(r,["className","style","sx","checked","disabled","color","label","indeterminate","id","size","radius","wrapperProps","children","classNames","styles","transitionDuration","icon","unstyled","labelPosition","description","error"]),k=O01(),w=k4(u),{systemStyles:P,rest:N}=x6(S),{classes:$}=l81({size:k?.size||d,radius:p,color:s,transitionDuration:g,labelPosition:x,error:!!M,indeterminate:f},{name:"Checkbox",classNames:H,styles:h,unstyled:b}),A=k?{checked:k.value.includes(N.value),onChange:k.onChange}:{};return V.createElement(ZS,$t($t({className:n,sx:c,style:a,id:w,size:k?.size||d,labelPosition:x,label:l,description:C,error:M,disabled:o,__staticSelector:"Checkbox",classNames:H,styles:h,unstyled:b,"data-checked":A.checked||void 0},P),m),V.createElement("div",{className:$.inner},V.createElement("input",$t($t({id:w,ref:t,type:"checkbox",className:$.input,checked:i,disabled:o},N),A)),V.createElement(z,{indeterminate:f,className:$.icon})))});h9.displayName="@mantine/core/Checkbox";h9.Group=WS;var x81=Object.defineProperty,w81=Object.defineProperties,L81=Object.getOwnPropertyDescriptors,fz=Object.getOwnPropertySymbols,S81=Object.prototype.hasOwnProperty,k81=Object.prototype.propertyIsEnumerable,uz=(e,t,r)=>t in e?x81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_81=(e,t)=>{for(var r in t||(t={}))S81.call(t,r)&&uz(e,r,t[r]);if(fz)for(var r of fz(t))k81.call(t,r)&&uz(e,r,t[r]);return e},P81=(e,t)=>w81(e,L81(t)),N81=d1((e,{size:t,radius:r})=>{const n=e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[3];return{root:P81(_81({},e.fn.focusStyles()),{width:t,height:t,WebkitTapHighlightColor:"transparent",border:0,borderRadius:e.fn.size({size:r,sizes:e.radius}),appearance:"none",WebkitAppearance:"none",padding:0,position:"relative",overflow:"hidden"}),overlay:{position:"absolute",borderRadius:e.fn.size({size:r,sizes:e.radius}),top:0,left:0,right:0,bottom:0},children:{display:"inline-flex",justifyContent:"center",alignItems:"center"},shadowOverlay:{boxShadow:"rgba(0, 0, 0, .1) 0px 0px 0px 1px inset, rgb(0, 0, 0, .15) 0px 0px 4px inset",zIndex:1},alphaOverlay:{backgroundImage:`linear-gradient(45deg, ${n} 25%, transparent 25%), linear-gradient(-45deg, ${n} 25%, transparent 25%), linear-gradient(45deg, transparent 75%, ${n} 75%), linear-gradient(-45deg, ${e.colorScheme==="dark"?e.colors.dark[7]:e.white} 75%, ${n} 75%)`,backgroundSize:"8px 8px",backgroundPosition:"0 0, 0 4px, 4px -4px, -4px 0px"}}}),O81=Object.defineProperty,ea=Object.getOwnPropertySymbols,QS=Object.prototype.hasOwnProperty,JS=Object.prototype.propertyIsEnumerable,dz=(e,t,r)=>t in e?O81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,A81=(e,t)=>{for(var r in t||(t={}))QS.call(t,r)&&dz(e,r,t[r]);if(ea)for(var r of ea(t))JS.call(t,r)&&dz(e,r,t[r]);return e},E81=(e,t)=>{var r={};for(var n in e)QS.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ea)for(var n of ea(e))t.indexOf(n)<0&&JS.call(e,n)&&(r[n]=e[n]);return r};const $81={size:25,radius:25,withShadow:!0},ek=y.forwardRef((e,t)=>{const r=w1("ColorSwatch",$81,e),{color:n,size:a,radius:c,className:i,children:o,classNames:s,styles:l,unstyled:f,withShadow:u}=r,d=E81(r,["color","size","radius","className","children","classNames","styles","unstyled","withShadow"]),{classes:p,cx:m}=N81({radius:c,size:a},{classNames:s,styles:l,unstyled:f,name:"ColorSwatch"});return V.createElement(z1,A81({className:m(p.root,i),ref:t},d),V.createElement("div",{className:m(p.alphaOverlay,p.overlay)}),u&&V.createElement("div",{className:m(p.shadowOverlay,p.overlay)}),V.createElement("div",{className:p.overlay,style:{backgroundColor:n}}),V.createElement("div",{className:m(p.children,p.overlay)},o))});ek.displayName="@mantine/core/ColorSwatch";const Ku=ek,R4={xs:8,sm:12,md:16,lg:20,xl:22};var D81=d1((e,{size:t})=>{const r=e.fn.size({size:t,sizes:R4});return{thumb:{overflow:"hidden",boxSizing:"border-box",position:"absolute",boxShadow:"0 0 1px rgba(0, 0, 0, .6)",border:`2px solid ${e.white}`,backgroundColor:"transparent",width:r,height:r,borderRadius:r}}}),T81=Object.defineProperty,pz=Object.getOwnPropertySymbols,R81=Object.prototype.hasOwnProperty,F81=Object.prototype.propertyIsEnumerable,mz=(e,t,r)=>t in e?T81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,I81=(e,t)=>{for(var r in t||(t={}))R81.call(t,r)&&mz(e,r,t[r]);if(pz)for(var r of pz(t))F81.call(t,r)&&mz(e,r,t[r]);return e};function Xu({position:e,className:t,styles:r,classNames:n,style:a,size:c,__staticSelector:i,unstyled:o}){const{classes:s,cx:l}=D81({size:c},{classNames:n,styles:r,name:i,unstyled:o});return V.createElement("div",{className:l(s.thumb,t),style:I81({left:`calc(${e.x*100}% - ${R4[c]/2}px)`,top:`calc(${e.y*100}% - ${R4[c]/2}px)`},a)})}Xu.displayName="@mantine/core/Thumb";var j81=Object.defineProperty,hz=Object.getOwnPropertySymbols,B81=Object.prototype.hasOwnProperty,W81=Object.prototype.propertyIsEnumerable,vz=(e,t,r)=>t in e?j81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,gz=(e,t)=>{for(var r in t||(t={}))B81.call(t,r)&&vz(e,r,t[r]);if(hz)for(var r of hz(t))W81.call(t,r)&&vz(e,r,t[r]);return e},U81=d1((e,{size:t},r)=>({sliderThumb:{ref:r("sliderThumb")},slider:{position:"relative",height:e.fn.size({size:t,sizes:R4})+2,boxSizing:"border-box",marginLeft:e.fn.size({size:t,sizes:R4})/2,marginRight:e.fn.size({size:t,sizes:R4})/2,outline:0,[`&:focus .${r("sliderThumb")}`]:gz({},e.focusRing==="always"||e.focusRing==="auto"?e.focusRingStyles.styles(e):e.focusRingStyles.resetStyles(e)),[`&:focus:not(:focus-visible) .${r("sliderThumb")}`]:gz({},e.focusRing==="auto"||e.focusRing==="never"?e.focusRingStyles.resetStyles(e):null)},sliderOverlay:{position:"absolute",boxSizing:"border-box",top:0,bottom:0,left:-e.fn.size({size:t,sizes:R4})/2-1,right:-e.fn.size({size:t,sizes:R4})/2-1,borderRadius:1e3}})),q81=Object.defineProperty,G81=Object.defineProperties,Y81=Object.getOwnPropertyDescriptors,ta=Object.getOwnPropertySymbols,tk=Object.prototype.hasOwnProperty,rk=Object.prototype.propertyIsEnumerable,zz=(e,t,r)=>t in e?q81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Z81=(e,t)=>{for(var r in t||(t={}))tk.call(t,r)&&zz(e,r,t[r]);if(ta)for(var r of ta(t))rk.call(t,r)&&zz(e,r,t[r]);return e},K81=(e,t)=>G81(e,Y81(t)),X81=(e,t)=>{var r={};for(var n in e)tk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ta)for(var n of ta(e))t.indexOf(n)<0&&rk.call(e,n)&&(r[n]=e[n]);return r};const Qu=y.forwardRef((e,t)=>{var r=e,{value:n,onChange:a,onChangeEnd:c,maxValue:i,round:o,size:s="md",thumbColor:l="transparent",__staticSelector:f="ColorSlider",focusable:u=!0,overlays:d,classNames:p,styles:m,className:v,unstyled:H}=r,h=X81(r,["value","onChange","onChangeEnd","maxValue","round","size","thumbColor","__staticSelector","focusable","overlays","classNames","styles","className","unstyled"]);const{classes:g,cx:z}=U81({size:s},{classNames:p,styles:m,name:f,unstyled:H}),[b,x]=y.useState({y:0,x:n/i}),C=y.useRef(b),M=N=>o?Math.round(N*i):N*i,{ref:S}=Lu(({x:N,y:$})=>{C.current={x:N,y:$},a(M(N))},{onScrubEnd:()=>{const{x:N}=C.current;c(M(N))}});B2(()=>{x({y:0,x:n/i})},[n]);const k=(N,$)=>{N.preventDefault();const A=Lw($);a(M(A.x)),c(M(A.x))},w=N=>{switch(N.key){case"ArrowRight":{k(N,{x:b.x+.05,y:b.y});break}case"ArrowLeft":{k(N,{x:b.x-.05,y:b.y});break}}},P=d.map((N,$)=>V.createElement("div",{className:g.sliderOverlay,style:N,key:$}));return V.createElement(z1,K81(Z81({},h),{ref:o3(S,t),className:z(g.slider,v),role:"slider","aria-valuenow":n,"aria-valuemax":i,"aria-valuemin":0,tabIndex:u?0:-1,onKeyDown:w}),P,V.createElement(Xu,{__staticSelector:f,classNames:p,styles:m,position:b,style:{top:1,backgroundColor:l},className:g.sliderThumb,size:s}))});Qu.displayName="@mantine/core/ColorSlider";var Q81=Object.defineProperty,J81=Object.defineProperties,e51=Object.getOwnPropertyDescriptors,ra=Object.getOwnPropertySymbols,nk=Object.prototype.hasOwnProperty,ak=Object.prototype.propertyIsEnumerable,yz=(e,t,r)=>t in e?Q81(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,t51=(e,t)=>{for(var r in t||(t={}))nk.call(t,r)&&yz(e,r,t[r]);if(ra)for(var r of ra(t))ak.call(t,r)&&yz(e,r,t[r]);return e},r51=(e,t)=>J81(e,e51(t)),n51=(e,t)=>{var r={};for(var n in e)nk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ra)for(var n of ra(e))t.indexOf(n)<0&&ak.call(e,n)&&(r[n]=e[n]);return r};const ck=y.forwardRef((e,t)=>{var r=e,{value:n,onChange:a,onChangeEnd:c}=r,i=n51(r,["value","onChange","onChangeEnd"]);return V.createElement(Qu,r51(t51({},i),{ref:t,value:n,onChange:a,onChangeEnd:c,maxValue:360,thumbColor:`hsl(${n}, 100%, 50%)`,round:!0,overlays:[{backgroundImage:"linear-gradient(to right,hsl(0,100%,50%),hsl(60,100%,50%),hsl(120,100%,50%),hsl(170,100%,50%),hsl(240,100%,50%),hsl(300,100%,50%),hsl(360,100%,50%))"},{boxShadow:"rgba(0, 0, 0, .1) 0px 0px 0px 1px inset, rgb(0, 0, 0, .15) 0px 0px 4px inset"}]}))});ck.displayName="@mantine/core/HueSlider";var a51=Object.defineProperty,c51=Object.defineProperties,i51=Object.getOwnPropertyDescriptors,Cz=Object.getOwnPropertySymbols,o51=Object.prototype.hasOwnProperty,s51=Object.prototype.propertyIsEnumerable,Hz=(e,t,r)=>t in e?a51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,bz=(e,t)=>{for(var r in t||(t={}))o51.call(t,r)&&Hz(e,r,t[r]);if(Cz)for(var r of Cz(t))s51.call(t,r)&&Hz(e,r,t[r]);return e},Mz=(e,t)=>c51(e,i51(t));function g4(e,t=0,r=10**t){return Math.round(r*e)/r}function l51({h:e,s:t,l:r,a:n}){const a=t*((r<50?r:100-r)/100);return{h:e,s:a>0?2*a/(r+a)*100:0,v:r+a,a:n}}const f51={grad:360/400,turn:360,rad:360/(Math.PI*2)};function u51(e,t="deg"){return Number(e)*(f51[t]||1)}const d51=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;function Vz(e){const t=d51.exec(e);return t?l51({h:u51(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}}function hl({r:e,g:t,b:r,a:n}){const a=Math.max(e,t,r),c=a-Math.min(e,t,r),i=c?a===e?(t-r)/c:a===t?2+(r-e)/c:4+(e-t)/c:0;return{h:g4(60*(i<0?i+6:i)),s:g4(a?c/a*100:0),v:g4(a/255*100),a:n}}function vl(e){const t=e[0]==="#"?e.slice(1):e;return t.length===3?hl({r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:1}):hl({r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16),a:1})}function p51(e){const t=e[0]==="#"?e.slice(1):e,r=i=>Math.round(parseInt(i,16)/255*100)/100;if(t.length===4){const i=t.slice(0,3),o=r(t[3]+t[3]);return Mz(bz({},vl(i)),{a:o})}const n=t.slice(0,6),a=r(t.slice(6,8));return Mz(bz({},vl(n)),{a})}const m51=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;function xz(e){const t=m51.exec(e);return t?hl({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}}const ik={hex:/^#?([0-9A-F]{3}){1,2}$/i,hexa:/^#?([0-9A-F]{4}){1,2}$/i,rgb:/^rgb\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/i,rgba:/^rgba\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/i,hsl:/hsl\(\s*(\d+)\s*,\s*(\d+(?:\.\d+)?%)\s*,\s*(\d+(?:\.\d+)?%)\)/i,hsla:/^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/i},h51={hex:vl,hexa:p51,rgb:xz,rgba:xz,hsl:Vz,hsla:Vz};function u5(e){for(const[,t]of Object.entries(ik))if(t.test(e))return!0;return!1}function X0(e){if(typeof e!="string")return{h:0,s:0,v:0,a:1};if(e==="transparent")return{h:0,s:0,v:0,a:0};const t=e.trim();for(const[r,n]of Object.entries(ik))if(n.test(t))return h51[r](t);return{h:0,s:0,v:0,a:1}}var v51=Object.defineProperty,g51=Object.defineProperties,z51=Object.getOwnPropertyDescriptors,na=Object.getOwnPropertySymbols,ok=Object.prototype.hasOwnProperty,sk=Object.prototype.propertyIsEnumerable,wz=(e,t,r)=>t in e?v51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y51=(e,t)=>{for(var r in t||(t={}))ok.call(t,r)&&wz(e,r,t[r]);if(na)for(var r of na(t))sk.call(t,r)&&wz(e,r,t[r]);return e},C51=(e,t)=>g51(e,z51(t)),H51=(e,t)=>{var r={};for(var n in e)ok.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&na)for(var n of na(e))t.indexOf(n)<0&&sk.call(e,n)&&(r[n]=e[n]);return r};const lk=y.forwardRef((e,t)=>{var r=e,{value:n,onChange:a,onChangeEnd:c,color:i}=r,o=H51(r,["value","onChange","onChangeEnd","color"]);const s=V2(),l=s.colorScheme==="dark"?s.colors.dark[4]:s.colors.gray[3];return V.createElement(Qu,C51(y51({},o),{ref:t,value:n,onChange:f=>a(g4(f,2)),onChangeEnd:f=>c(g4(f,2)),maxValue:1,round:!1,overlays:[{backgroundImage:`linear-gradient(45deg, ${l} 25%, transparent 25%), linear-gradient(-45deg, ${l} 25%, transparent 25%), linear-gradient(45deg, transparent 75%, ${l} 75%), linear-gradient(-45deg, ${s.colorScheme==="dark"?s.colors.dark[7]:s.white} 75%, ${l} 75%)`,backgroundSize:"8px 8px",backgroundPosition:"0 0, 0 4px, 4px -4px, -4px 0px"},{backgroundImage:`linear-gradient(90deg, transparent, ${i})`},{boxShadow:"rgba(0, 0, 0, .1) 0px 0px 0px 1px inset, rgb(0, 0, 0, .15) 0px 0px 4px inset"}]}))});lk.displayName="@mantine/core/AlphaSlider";var b51=Object.defineProperty,Lz=Object.getOwnPropertySymbols,M51=Object.prototype.hasOwnProperty,V51=Object.prototype.propertyIsEnumerable,Sz=(e,t,r)=>t in e?b51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Yi=(e,t)=>{for(var r in t||(t={}))M51.call(t,r)&&Sz(e,r,t[r]);if(Lz)for(var r of Lz(t))V51.call(t,r)&&Sz(e,r,t[r]);return e};const x51={xs:100,sm:110,md:120,lg:140,xl:160};var w51=d1((e,{size:t},r)=>({saturationThumb:{ref:r("saturationThumb")},saturation:{boxSizing:"border-box",position:"relative",height:e.fn.size({size:t,sizes:x51}),borderRadius:e.radius.sm,margin:e.fn.size({size:t,sizes:R4})/2,WebkitTapHighlightColor:"transparent",[`&:focus .${r("saturationThumb")}`]:Yi({},e.focusRing==="always"||e.focusRing==="auto"?e.focusRingStyles.styles(e):e.focusRingStyles.resetStyles(e)),[`&:focus:not(:focus-visible) .${r("saturationThumb")}`]:Yi({},e.focusRing==="auto"||e.focusRing==="never"?e.focusRingStyles.resetStyles(e):null)},saturationOverlay:Yi({boxSizing:"border-box",borderRadius:e.radius.sm},e.fn.cover(-e.fn.size({size:t,sizes:R4})/2-1))}));function fk({h:e,s:t,v:r,a:n}){const a=e/360*6,c=t/100,i=r/100,o=Math.floor(a),s=i*(1-c),l=i*(1-(a-o)*c),f=i*(1-(1-a+o)*c),u=o%6;return{r:g4([i,l,s,s,f,i][u]*255),g:g4([f,i,i,l,s,s][u]*255),b:g4([s,s,f,i,i,l][u]*255),a:g4(n,2)}}function kz(e,t){const{r,g:n,b:a,a:c}=fk(e);return t?`rgba(${r}, ${n}, ${a}, ${g4(c,2)})`:`rgb(${r}, ${n}, ${a})`}function _z({h:e,s:t,v:r,a:n},a){const c=(200-t)*r/100,i={h:Math.round(e),s:Math.round(c>0&&c<200?t*r/100/(c<=100?c:200-c)*100:0),l:Math.round(c/2)};return a?`hsla(${i.h}, ${i.s}%, ${i.l}%, ${g4(n,2)})`:`hsl(${i.h}, ${i.s}%, ${i.l}%)`}function Vr(e){const t=e.toString(16);return t.length<2?`0${t}`:t}function uk(e){const{r:t,g:r,b:n}=fk(e);return`#${Vr(t)}${Vr(r)}${Vr(n)}`}function L51(e){const t=Math.round(e.a*255);return`${uk(e)}${Vr(t)}`}const Zi={hex:uk,hexa:e=>L51(e),rgb:e=>kz(e,!1),rgba:e=>kz(e,!0),hsl:e=>_z(e,!1),hsla:e=>_z(e,!0)};function h4(e,t){return t?e in Zi?Zi[e](t):Zi.hex(t):"#000000"}function dk({value:e,onChange:t,onChangeEnd:r,focusable:n=!0,__staticSelector:a="saturation",size:c,color:i,saturationLabel:o,classNames:s,styles:l,unstyled:f}){const{classes:u}=w51({size:c},{classNames:s,styles:l,name:a,unstyled:f}),[d,p]=y.useState({x:e.s/100,y:1-e.v/100}),m=y.useRef(d),{ref:v}=Lu(({x:g,y:z})=>{m.current={x:g,y:z},t({s:Math.round(g*100),v:Math.round((1-z)*100)})},{onScrubEnd:()=>{const{x:g,y:z}=m.current;r({s:Math.round(g*100),v:Math.round((1-z)*100)})}});y.useEffect(()=>{p({x:e.s/100,y:1-e.v/100})},[e.s,e.v]);const H=(g,z)=>{g.preventDefault();const b=Lw(z);t({s:Math.round(b.x*100),v:Math.round((1-b.y)*100)}),r({s:Math.round(b.x*100),v:Math.round((1-b.y)*100)})},h=g=>{switch(g.key){case"ArrowUp":{H(g,{y:d.y-.05,x:d.x});break}case"ArrowDown":{H(g,{y:d.y+.05,x:d.x});break}case"ArrowRight":{H(g,{x:d.x+.05,y:d.y});break}case"ArrowLeft":{H(g,{x:d.x-.05,y:d.y});break}}};return V.createElement("div",{className:u.saturation,ref:v,role:"slider","aria-label":o,"aria-valuenow":d.x,"aria-valuetext":h4("rgba",e),tabIndex:n?0:-1,onKeyDown:h},V.createElement("div",{className:u.saturationOverlay,style:{backgroundColor:`hsl(${e.h}, 100%, 50%)`}}),V.createElement("div",{className:u.saturationOverlay,style:{backgroundImage:"linear-gradient(90deg, #fff, transparent)"}}),V.createElement("div",{className:u.saturationOverlay,style:{backgroundImage:"linear-gradient(0deg, #000, transparent)"}}),V.createElement(Xu,{__staticSelector:a,classNames:s,styles:l,position:d,className:u.saturationThumb,style:{backgroundColor:i},size:c}))}dk.displayName="@mantine/core/Saturation";var S51=d1((e,{swatchesPerRow:t})=>({swatch:{width:`calc(${100/t}% - 4px)`,height:0,paddingBottom:`calc(${100/t}% - 4px)`,margin:2,boxSizing:"content-box"},swatches:{boxSizing:"border-box",marginLeft:-2,marginRight:-2,display:"flex",flexWrap:"wrap"}})),k51=Object.defineProperty,aa=Object.getOwnPropertySymbols,pk=Object.prototype.hasOwnProperty,mk=Object.prototype.propertyIsEnumerable,Pz=(e,t,r)=>t in e?k51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_51=(e,t)=>{for(var r in t||(t={}))pk.call(t,r)&&Pz(e,r,t[r]);if(aa)for(var r of aa(t))mk.call(t,r)&&Pz(e,r,t[r]);return e},P51=(e,t)=>{var r={};for(var n in e)pk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&aa)for(var n of aa(e))t.indexOf(n)<0&&mk.call(e,n)&&(r[n]=e[n]);return r};function hk(e){var t=e,{data:r,swatchesPerRow:n=10,focusable:a=!0,classNames:c,styles:i,__staticSelector:o="color-picker",unstyled:s,setValue:l,onChangeEnd:f}=t,u=P51(t,["data","swatchesPerRow","focusable","classNames","styles","__staticSelector","unstyled","setValue","onChangeEnd"]);const{classes:d}=S51({swatchesPerRow:n},{classNames:c,styles:i,name:o,unstyled:s}),p=r.map((m,v)=>V.createElement(Ku,{className:d.swatch,component:"button",type:"button",color:m,key:v,radius:"sm",onClick:()=>{l(m),f?.(m)},style:{cursor:"pointer"},"aria-label":m,tabIndex:a?0:-1}));return V.createElement("div",_51({className:d.swatches},u),p)}hk.displayName="@mantine/core/Swatches";const N51={xs:180,sm:200,md:240,lg:280,xl:320};var O51=d1((e,{size:t,fullWidth:r})=>({preview:{},wrapper:{boxSizing:"border-box",width:r?"100%":e.fn.size({size:t,sizes:N51}),padding:1},body:{display:"flex",boxSizing:"border-box",paddingTop:e.fn.size({size:t,sizes:e.spacing})/2},sliders:{flex:1,boxSizing:"border-box","&:not(:only-child)":{marginRight:e.spacing.xs}},slider:{boxSizing:"border-box","& + &":{marginTop:5}},swatch:{cursor:"pointer"}})),A51=Object.defineProperty,E51=Object.defineProperties,$51=Object.getOwnPropertyDescriptors,ca=Object.getOwnPropertySymbols,vk=Object.prototype.hasOwnProperty,gk=Object.prototype.propertyIsEnumerable,Nz=(e,t,r)=>t in e?A51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,m0=(e,t)=>{for(var r in t||(t={}))vk.call(t,r)&&Nz(e,r,t[r]);if(ca)for(var r of ca(t))gk.call(t,r)&&Nz(e,r,t[r]);return e},Ki=(e,t)=>E51(e,$51(t)),D51=(e,t)=>{var r={};for(var n in e)vk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ca)for(var n of ca(e))t.indexOf(n)<0&&gk.call(e,n)&&(r[n]=e[n]);return r};const T51={xs:26,sm:34,md:42,lg:50,xl:54},R51={swatchesPerRow:10,size:"sm",withPicker:!0,focusable:!0,__staticSelector:"ColorPicker"},zk=y.forwardRef((e,t)=>{const r=w1("ColorPicker",R51,e),{value:n,defaultValue:a,onChange:c,onChangeEnd:i,format:o,swatches:s,swatchesPerRow:l,size:f,withPicker:u,fullWidth:d,focusable:p,__staticSelector:m,saturationLabel:v,hueLabel:H,alphaLabel:h,className:g,styles:z,classNames:b,unstyled:x,onColorSwatchClick:C}=r,M=D51(r,["value","defaultValue","onChange","onChangeEnd","format","swatches","swatchesPerRow","size","withPicker","fullWidth","focusable","__staticSelector","saturationLabel","hueLabel","alphaLabel","className","styles","classNames","unstyled","onColorSwatchClick"]),{classes:S,cx:k,theme:w}=O51({size:f,fullWidth:d},{classNames:b,styles:z,name:m,unstyled:x}),P=y.useRef(o),N=y.useRef(null),$=y.useRef(!0),A=o==="hexa"||o==="rgba"||o==="hsla",[D,j]=U3({value:n,defaultValue:a,finalValue:"#FFFFFF",onChange:c}),[R,T]=y.useState(X0(D)),F=L=>{$.current=!1,T(q=>{const Z=m0(m0({},q),L);return N.current=h4(P.current,Z),Z}),j(N.current),setTimeout(()=>{$.current=!0},0)};return B2(()=>{u5(n)&&$.current&&(T(X0(n)),$.current=!0)},[n]),B2(()=>{P.current=o,j(h4(o,R))},[o]),V.createElement(z1,m0({className:k(S.wrapper,g),ref:t},M),u&&V.createElement(V.Fragment,null,V.createElement(dk,{value:R,onChange:F,onChangeEnd:({s:L,v:q})=>i?.(h4(P.current,Ki(m0({},R),{s:L,v:q}))),color:D,styles:z,classNames:b,size:f,focusable:p,saturationLabel:v,__staticSelector:m}),V.createElement("div",{className:S.body},V.createElement("div",{className:S.sliders},V.createElement(ck,{value:R.h,onChange:L=>F({h:L}),onChangeEnd:L=>i?.(h4(P.current,Ki(m0({},R),{h:L}))),size:f,styles:z,classNames:b,focusable:p,"aria-label":H,__staticSelector:m}),A&&V.createElement(lk,{value:R.a,onChange:L=>F({a:L}),onChangeEnd:L=>{i?.(h4(P.current,Ki(m0({},R),{a:L})))},size:f,color:h4("hex",R),style:{marginTop:6},styles:z,classNames:b,focusable:p,"aria-label":h,__staticSelector:m})),A&&V.createElement(Ku,{color:D,radius:"sm",size:w.fn.size({size:f,sizes:T51}),className:S.preview}))),Array.isArray(s)&&V.createElement(hk,{data:s,style:{marginTop:5},swatchesPerRow:l,focusable:p,classNames:b,styles:z,__staticSelector:m,setValue:j,onChangeEnd:L=>{const q=h4(o,X0(L));C?.(q),i?.(q)}}))});zk.displayName="@mantine/core/ColorPicker";var F51=Object.defineProperty,ia=Object.getOwnPropertySymbols,yk=Object.prototype.hasOwnProperty,Ck=Object.prototype.propertyIsEnumerable,Oz=(e,t,r)=>t in e?F51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,I51=(e,t)=>{for(var r in t||(t={}))yk.call(t,r)&&Oz(e,r,t[r]);if(ia)for(var r of ia(t))Ck.call(t,r)&&Oz(e,r,t[r]);return e},j51=(e,t)=>{var r={};for(var n in e)yk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ia)for(var n of ia(e))t.indexOf(n)<0&&Ck.call(e,n)&&(r[n]=e[n]);return r};function B51(e){var t=e,{size:r}=t,n=j51(t,["size"]);return V.createElement("svg",I51({xmlns:"http://www.w3.org/2000/svg",className:"icon icon-tabler icon-tabler-color-picker",width:r,height:r,viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"},n),V.createElement("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),V.createElement("path",{d:"M11 7l6 6"}),V.createElement("path",{d:"M4 16l11.7 -11.7a1 1 0 0 1 1.4 0l2.6 2.6a1 1 0 0 1 0 1.4l-11.7 11.7h-4v-4z"}))}var W51=Object.defineProperty,U51=Object.defineProperties,q51=Object.getOwnPropertyDescriptors,oa=Object.getOwnPropertySymbols,Hk=Object.prototype.hasOwnProperty,bk=Object.prototype.propertyIsEnumerable,Az=(e,t,r)=>t in e?W51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Xi=(e,t)=>{for(var r in t||(t={}))Hk.call(t,r)&&Az(e,r,t[r]);if(oa)for(var r of oa(t))bk.call(t,r)&&Az(e,r,t[r]);return e},Ez=(e,t)=>U51(e,q51(t)),G51=(e,t)=>{var r={};for(var n in e)Hk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&oa)for(var n of oa(e))t.indexOf(n)<0&&bk.call(e,n)&&(r[n]=e[n]);return r};const Y51={xs:16,sm:18,md:22,lg:28,xl:36},Z51={xs:14,sm:16,md:18,lg:20,xl:22},K51={xs:28,sm:32,md:38,lg:44,xl:58},X51={size:"sm",format:"hex",fixOnBlur:!0,withPreview:!0,swatchesPerRow:10,withPicker:!0,transition:"pop-top-left",dropdownZIndex:V6("popover"),transitionDuration:0,withinPortal:!0,shadow:"md",withEyeDropper:!0},Mk=y.forwardRef((e,t)=>{const r=Uu("ColorInput",X51,e),{wrapperProps:n,inputProps:a,format:c,onChange:i,onChangeEnd:o,onFocus:s,onBlur:l,onClick:f,value:u,defaultValue:d,disallowInput:p,fixOnBlur:m,withPreview:v,swatchesPerRow:H,withPicker:h,icon:g,transition:z,dropdownZIndex:b,transitionDuration:x,transitionTimingFunction:C,withinPortal:M,swatches:S,shadow:k,classNames:w,styles:P,unstyled:N,readOnly:$,withEyeDropper:A,eyeDropperIcon:D,rightSection:j,rightSectionWidth:R,closeOnColorSwatchClick:T,disabled:F}=r,L=G51(r,["wrapperProps","inputProps","format","onChange","onChangeEnd","onFocus","onBlur","onClick","value","defaultValue","disallowInput","fixOnBlur","withPreview","swatchesPerRow","withPicker","icon","transition","dropdownZIndex","transitionDuration","transitionTimingFunction","withinPortal","swatches","shadow","classNames","styles","unstyled","readOnly","withEyeDropper","eyeDropperIcon","rightSection","rightSectionWidth","closeOnColorSwatchClick","disabled"]),q=V2(),[Z,_]=y.useState(!1),[t1,v1]=y.useState(""),[X,s1]=U3({value:u,defaultValue:d,finalValue:"",onChange:i}),{supported:b1,open:f1}=N11(),M1=V.createElement(d8,{sx:{color:q.colorScheme==="dark"?q.colors.dark[0]:q.black},size:a.size,onClick:()=>f1().then(({sRGBHex:E})=>s1(h4(c,X0(E)))).catch(Xx)},D||V.createElement(B51,{size:q.fn.size({size:a.size,sizes:Z51})})),a1=E=>{s?.(E),_(!0)},u1=E=>{l?.(E),_(!1),m&&s1(t1)},x1=E=>{f?.(E),_(!0)};return y.useEffect(()=>{(u5(X)||X.trim()==="")&&v1(X)},[X]),B2(()=>{u5(X)&&s1(h4(c,X0(X)))},[c]),V.createElement(O2.Wrapper,Ez(Xi({},n),{__staticSelector:"ColorInput"}),V.createElement(m3,{__staticSelector:"ColorInput",position:"bottom-start",offset:5,zIndex:b,withinPortal:M,transitionDuration:x,transition:z,opened:Z,shadow:k,classNames:w,styles:P,unstyled:N,disabled:$||h===!1&&(!Array.isArray(S)||S.length===0)},V.createElement(m3.Target,null,V.createElement("div",null,V.createElement(O2,Ez(Xi(Xi({autoComplete:"nope"},L),a),{disabled:F,ref:t,__staticSelector:"ColorInput",onFocus:a1,onBlur:u1,onClick:x1,spellCheck:!1,value:X,onChange:E=>{const B=E.currentTarget.value;s1(B),u5(B)&&o?.(h4(c,X0(B)))},icon:g||(v?V.createElement(Ku,{color:u5(X)?X:"#fff",size:q.fn.size({size:a.size,sizes:Y51})}):null),readOnly:p||$,sx:{cursor:p?"pointer":void 0},unstyled:N,classNames:w,styles:P,rightSection:j||(A&&!F&&!$&&b1?M1:null),rightSectionWidth:R??q.fn.size({size:a.size,sizes:K51})})))),V.createElement(m3.Dropdown,{onMouseDown:E=>E.preventDefault(),p:a.size},V.createElement(zk,{__staticSelector:"ColorInput",value:X,onChange:s1,onChangeEnd:o,format:c,swatches:S,swatchesPerRow:H,withPicker:h,size:a.size,focusable:!1,unstyled:N,styles:P,classNames:w,onColorSwatchClick:()=>T&&_(!1)}))))});Mk.displayName="@mantine/core/ColorInput";var Q51=Object.defineProperty,J51=Object.defineProperties,e71=Object.getOwnPropertyDescriptors,$z=Object.getOwnPropertySymbols,t71=Object.prototype.hasOwnProperty,r71=Object.prototype.propertyIsEnumerable,Dz=(e,t,r)=>t in e?Q51(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,n71=(e,t)=>{for(var r in t||(t={}))t71.call(t,r)&&Dz(e,r,t[r]);if($z)for(var r of $z(t))r71.call(t,r)&&Dz(e,r,t[r]);return e},a71=(e,t)=>J51(e,e71(t));const Dt={xs:180,sm:240,md:320,lg:360,xl:500,full:"100%"};function c71({position:e,size:t,theme:r}){switch(e){case"top":return{top:0,left:0,right:0,height:r.fn.size({size:t,sizes:Dt})};case"bottom":return{bottom:0,left:0,right:0,height:r.fn.size({size:t,sizes:Dt})};case"right":return{bottom:0,top:0,right:0,width:r.fn.size({size:t,sizes:Dt})};case"left":return{bottom:0,top:0,left:0,width:r.fn.size({size:t,sizes:Dt})};default:return null}}var i71=d1((e,{position:t,size:r,zIndex:n,withOverlay:a})=>({closeButton:{},overlay:{},body:{},root:{position:"fixed",zIndex:n,top:0,left:0,right:0,bottom:0,pointerEvents:a===!1?"none":void 0},drawer:a71(n71({},c71({position:t,size:r,theme:e})),{maxWidth:"100%",maxHeight:"100vh",position:"fixed",outline:0,zIndex:1,pointerEvents:a===!1?"auto":void 0}),title:{marginRight:e.spacing.md,textOverflow:"ellipsis",display:"block",wordBreak:"break-word"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:e.spacing.md}}));function Ju({transitions:e,duration:t=250,exitDuration:r=t,mounted:n,children:a,timingFunction:c,onExit:i,onEntered:o,onEnter:s,onExited:l}){const{transitionDuration:f,transitionStatus:u,transitionTimingFunction:d}=QL({mounted:n,duration:t,exitDuration:r,timingFunction:c,onExit:i,onEntered:o,onEnter:s,onExited:l});if(f===0)return n?V.createElement(V.Fragment,null,a({})):null;if(u==="exited")return null;const p=Object.keys(e).reduce((m,v)=>(m[v]=XL({duration:e[v].duration,transition:e[v].transition,timingFunction:e[v].timingFunction||d,state:u}),m),{});return V.createElement(V.Fragment,null,a(p))}Ju.displayName="@mantine/core/GroupedTransition";var o71=d1((e,{zIndex:t})=>({root:{position:"absolute",top:0,bottom:0,left:0,right:0,zIndex:t}})),s71=Object.defineProperty,l71=Object.defineProperties,f71=Object.getOwnPropertyDescriptors,sa=Object.getOwnPropertySymbols,Vk=Object.prototype.hasOwnProperty,xk=Object.prototype.propertyIsEnumerable,Tz=(e,t,r)=>t in e?s71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Qi=(e,t)=>{for(var r in t||(t={}))Vk.call(t,r)&&Tz(e,r,t[r]);if(sa)for(var r of sa(t))xk.call(t,r)&&Tz(e,r,t[r]);return e},u71=(e,t)=>l71(e,f71(t)),d71=(e,t)=>{var r={};for(var n in e)Vk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&sa)for(var n of sa(e))t.indexOf(n)<0&&xk.call(e,n)&&(r[n]=e[n]);return r};const p71={opacity:.6,color:"#fff",zIndex:V6("modal"),radius:0,blur:0},wk=y.forwardRef((e,t)=>{const r=w1("Overlay",p71,e),{opacity:n,blur:a,color:c,gradient:i,zIndex:o,radius:s,sx:l,unstyled:f,className:u}=r,d=d71(r,["opacity","blur","color","gradient","zIndex","radius","sx","unstyled","className"]),{classes:p,cx:m}=o71({zIndex:o},{name:"Overlay",unstyled:f}),v=i?{backgroundImage:i}:{backgroundColor:c},H=h=>V.createElement(z1,Qi({ref:t,className:m(p.root,u),sx:[g=>u71(Qi({},v),{opacity:n,borderRadius:g.fn.size({size:s,sizes:g.radius})}),...f8(l)]},h));return a?V.createElement(z1,Qi({className:m(p.root,u),sx:[{backdropFilter:`blur(${a}px)`},...f8(l)]},d),H()):H(d)});wk.displayName="@mantine/core/Overlay";const Lk=wk;var m71=Object.defineProperty,la=Object.getOwnPropertySymbols,Sk=Object.prototype.hasOwnProperty,kk=Object.prototype.propertyIsEnumerable,Rz=(e,t,r)=>t in e?m71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,h71=(e,t)=>{for(var r in t||(t={}))Sk.call(t,r)&&Rz(e,r,t[r]);if(la)for(var r of la(t))kk.call(t,r)&&Rz(e,r,t[r]);return e},v71=(e,t)=>{var r={};for(var n in e)Sk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&la)for(var n of la(e))t.indexOf(n)<0&&kk.call(e,n)&&(r[n]=e[n]);return r};const g71={top:"slide-down",bottom:"slide-up",left:"slide-right",right:"slide-left"},z71={top:"slide-down",bottom:"slide-up",right:"slide-right",left:"slide-left"},y71={position:"left",size:"md",transitionDuration:250,transitionTimingFunction:"ease",zIndex:V6("modal"),shadow:"md",padding:0,lockScroll:!0,closeOnClickOutside:!0,closeOnEscape:!0,trapFocus:!0,withOverlay:!0,withCloseButton:!0,withinPortal:!0,withFocusReturn:!0,overlayBlur:0};function _k(e){const t=w1("Drawer",y71,e),{className:r,opened:n,onClose:a,position:c,size:i,trapFocus:o,lockScroll:s,closeOnClickOutside:l,closeOnEscape:f,transition:u,transitionDuration:d,transitionTimingFunction:p,zIndex:m,overlayColor:v,overlayOpacity:H,children:h,withOverlay:g,shadow:z,id:b,padding:x,title:C,withCloseButton:M,closeButtonLabel:S,classNames:k,styles:w,target:P,withinPortal:N,overlayBlur:$,unstyled:A,withFocusReturn:D}=t,j=v71(t,["className","opened","onClose","position","size","trapFocus","lockScroll","closeOnClickOutside","closeOnEscape","transition","transitionDuration","transitionTimingFunction","zIndex","overlayColor","overlayOpacity","children","withOverlay","shadow","id","padding","title","withCloseButton","closeButtonLabel","classNames","styles","target","withinPortal","overlayBlur","unstyled","withFocusReturn"]),R=k4(b),T=`${R}-title`,F=`${R}-body`,{classes:L,cx:q,theme:Z}=i71({size:i,position:c,zIndex:m,withOverlay:g},{classNames:k,styles:w,unstyled:A,name:"Drawer"}),_=wu(o&&n),[,t1]=_w(),v1=u||(Z.dir==="rtl"?z71:g71)[c],X=typeof H=="number"?H:Z.colorScheme==="dark"?.85:.75,s1=b1=>{b1.key==="Escape"&&f&&a()};return y.useEffect(()=>{if(!o)return window.addEventListener("keydown",s1),()=>window.removeEventListener("keydown",s1)},[o]),xu({opened:n,shouldReturnFocus:o&&D}),V.createElement(w8,{withinPortal:N,target:P},V.createElement(Ju,{onExited:()=>t1(!1),onEntered:()=>t1(s&&!0),mounted:n,duration:d,timingFunction:p,transitions:{overlay:{duration:d/2,transition:"fade",timingFunction:"ease"},drawer:{duration:d,transition:v1,timingFunction:p}}},b1=>V.createElement(z1,h71({className:q(L.root,r),role:"dialog","aria-modal":!0,"aria-labelledby":T,"aria-describedby":F},j),V.createElement(OS,{className:q(L.drawer,r),ref:_,style:b1.drawer,radius:0,tabIndex:-1,onKeyDownCapture:f1=>{var M1;((M1=f1.target)==null?void 0:M1.getAttribute("data-mantine-stop-propagation"))!=="true"&&f1.key==="Escape"&&f&&a()},shadow:z,p:x,unstyled:A},(C||M)&&V.createElement("div",{className:L.header},V.createElement(Z1,{id:T,className:L.title,unstyled:A},C),M&&V.createElement(L8,{iconSize:16,onClick:a,"aria-label":S,className:L.closeButton,unstyled:A})),V.createElement("div",{id:F,className:L.body},h)),g&&V.createElement("div",{style:b1.overlay},V.createElement(Lk,{unstyled:A,blur:$,onMouseDown:()=>l&&a(),className:L.overlay,opacity:X,zIndex:0,color:v||(Z.colorScheme==="dark"?Z.colors.dark[9]:Z.black)})))))}_k.displayName="@mantine/core/Drawer";const C71={gap:{type:"spacing",property:"gap"},rowGap:{type:"spacing",property:"rowGap"},columnGap:{type:"spacing",property:"columnGap"},align:{type:"default",property:"alignItems"},justify:{type:"default",property:"justifyContent"},wrap:{type:"default",property:"flexWrap"},direction:{type:"default",property:"flexDirection"}};var H71=Object.defineProperty,b71=Object.defineProperties,M71=Object.getOwnPropertyDescriptors,fa=Object.getOwnPropertySymbols,Pk=Object.prototype.hasOwnProperty,Nk=Object.prototype.propertyIsEnumerable,Fz=(e,t,r)=>t in e?H71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,V71=(e,t)=>{for(var r in t||(t={}))Pk.call(t,r)&&Fz(e,r,t[r]);if(fa)for(var r of fa(t))Nk.call(t,r)&&Fz(e,r,t[r]);return e},x71=(e,t)=>b71(e,M71(t)),w71=(e,t)=>{var r={};for(var n in e)Pk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&fa)for(var n of fa(e))t.indexOf(n)<0&&Nk.call(e,n)&&(r[n]=e[n]);return r};const L71={},Ok=y.forwardRef((e,t)=>{const r=w1("Flex",L71,e),{gap:n,rowGap:a,columnGap:c,align:i,justify:o,wrap:s,direction:l,sx:f}=r,u=w71(r,["gap","rowGap","columnGap","align","justify","wrap","direction","sx"]);return V.createElement(z1,x71(V71({},u),{sx:[{display:"flex"},d=>al({gap:n,rowGap:a,columnGap:c,align:i,justify:o,wrap:s,direction:l},d,C71),...f8(f)],ref:t}))});Ok.displayName="@mantine/core/Flex";const Ak={context:"HoverCard component was not found in the tree",children:"HoverCard.Target component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported"},[S71,Ek]=Kx(Ak.context);var k71=Object.defineProperty,ua=Object.getOwnPropertySymbols,$k=Object.prototype.hasOwnProperty,Dk=Object.prototype.propertyIsEnumerable,Iz=(e,t,r)=>t in e?k71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_71=(e,t)=>{for(var r in t||(t={}))$k.call(t,r)&&Iz(e,r,t[r]);if(ua)for(var r of ua(t))Dk.call(t,r)&&Iz(e,r,t[r]);return e},P71=(e,t)=>{var r={};for(var n in e)$k.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ua)for(var n of ua(e))t.indexOf(n)<0&&Dk.call(e,n)&&(r[n]=e[n]);return r};const N71={};function Tk(e){const t=w1("HoverCardDropdown",N71,e),{children:r,onMouseEnter:n,onMouseLeave:a}=t,c=P71(t,["children","onMouseEnter","onMouseLeave"]),i=Ek(),o=dn(n,i.openDropdown),s=dn(a,i.closeDropdown);return V.createElement(m3.Dropdown,_71({onMouseEnter:o,onMouseLeave:s},c),r)}Tk.displayName="@mantine/core/HoverCardDropdown";var O71=Object.defineProperty,da=Object.getOwnPropertySymbols,Rk=Object.prototype.hasOwnProperty,Fk=Object.prototype.propertyIsEnumerable,jz=(e,t,r)=>t in e?O71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,A71=(e,t)=>{for(var r in t||(t={}))Rk.call(t,r)&&jz(e,r,t[r]);if(da)for(var r of da(t))Fk.call(t,r)&&jz(e,r,t[r]);return e},E71=(e,t)=>{var r={};for(var n in e)Rk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&da)for(var n of da(e))t.indexOf(n)<0&&Fk.call(e,n)&&(r[n]=e[n]);return r};const $71={refProp:"ref"},Ik=y.forwardRef((e,t)=>{const r=w1("HoverCardTarget",$71,e),{children:n,refProp:a}=r,c=E71(r,["children","refProp"]);if(!P7(n))throw new Error(Ak.children);const i=Ek(),o=dn(n.props.onMouseEnter,i.openDropdown),s=dn(n.props.onMouseLeave,i.closeDropdown);return V.createElement(m3.Target,A71({refProp:a,ref:t},c),y.cloneElement(n,{onMouseEnter:o,onMouseLeave:s}))});Ik.displayName="@mantine/core/HoverCardTarget";function D71({open:e,close:t,openDelay:r,closeDelay:n}){const a=y.useRef(-1),c=y.useRef(-1),i=()=>{window.clearTimeout(a.current),window.clearTimeout(c.current)},o=()=>{i(),r===0?e():a.current=window.setTimeout(e,r)},s=()=>{i(),n===0?t():c.current=window.setTimeout(t,n)};return y.useEffect(()=>i,[]),{openDropdown:o,closeDropdown:s}}var T71=Object.defineProperty,pa=Object.getOwnPropertySymbols,jk=Object.prototype.hasOwnProperty,Bk=Object.prototype.propertyIsEnumerable,Bz=(e,t,r)=>t in e?T71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R71=(e,t)=>{for(var r in t||(t={}))jk.call(t,r)&&Bz(e,r,t[r]);if(pa)for(var r of pa(t))Bk.call(t,r)&&Bz(e,r,t[r]);return e},F71=(e,t)=>{var r={};for(var n in e)jk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&pa)for(var n of pa(e))t.indexOf(n)<0&&Bk.call(e,n)&&(r[n]=e[n]);return r};const I71={openDelay:0,closeDelay:150,initiallyOpened:!1};function Q0(e){const t=w1("HoverCard",I71,e),{children:r,onOpen:n,onClose:a,openDelay:c,closeDelay:i,initiallyOpened:o}=t,s=F71(t,["children","onOpen","onClose","openDelay","closeDelay","initiallyOpened"]),[l,{open:f,close:u}]=P11(o,{onClose:a,onOpen:n}),{openDropdown:d,closeDropdown:p}=D71({open:f,close:u,openDelay:c,closeDelay:i});return V.createElement(S71,{value:{openDropdown:d,closeDropdown:p}},V.createElement(m3,R71({opened:l,__staticSelector:"HoverCard"},s),r))}Q0.displayName="@mantine/core/HoverCard";Q0.Target=Ik;Q0.Dropdown=Tk;var j71=Object.defineProperty,Wz=Object.getOwnPropertySymbols,B71=Object.prototype.hasOwnProperty,W71=Object.prototype.propertyIsEnumerable,Uz=(e,t,r)=>t in e?j71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,U71=(e,t)=>{for(var r in t||(t={}))B71.call(t,r)&&Uz(e,r,t[r]);if(Wz)for(var r of Wz(t))W71.call(t,r)&&Uz(e,r,t[r]);return e};function q71(e){return V.createElement("svg",U71({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e),V.createElement("path",{d:"M2.5 1H12.5C13.3284 1 14 1.67157 14 2.5V12.5C14 13.3284 13.3284 14 12.5 14H2.5C1.67157 14 1 13.3284 1 12.5V2.5C1 1.67157 1.67157 1 2.5 1ZM2.5 2C2.22386 2 2 2.22386 2 2.5V8.3636L3.6818 6.6818C3.76809 6.59551 3.88572 6.54797 4.00774 6.55007C4.12975 6.55216 4.24568 6.60372 4.32895 6.69293L7.87355 10.4901L10.6818 7.6818C10.8575 7.50607 11.1425 7.50607 11.3182 7.6818L13 9.3636V2.5C13 2.22386 12.7761 2 12.5 2H2.5ZM2 12.5V9.6364L3.98887 7.64753L7.5311 11.4421L8.94113 13H2.5C2.22386 13 2 12.7761 2 12.5ZM12.5 13H10.155L8.48336 11.153L11 8.6364L13 10.6364V12.5C13 12.7761 12.7761 13 12.5 13ZM6.64922 5.5C6.64922 5.03013 7.03013 4.64922 7.5 4.64922C7.96987 4.64922 8.35078 5.03013 8.35078 5.5C8.35078 5.96987 7.96987 6.35078 7.5 6.35078C7.03013 6.35078 6.64922 5.96987 6.64922 5.5ZM7.5 3.74922C6.53307 3.74922 5.74922 4.53307 5.74922 5.5C5.74922 6.46693 6.53307 7.25078 7.5 7.25078C8.46693 7.25078 9.25078 6.46693 9.25078 5.5C9.25078 4.53307 8.46693 3.74922 7.5 3.74922Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var G71=Object.defineProperty,Y71=Object.defineProperties,Z71=Object.getOwnPropertyDescriptors,qz=Object.getOwnPropertySymbols,K71=Object.prototype.hasOwnProperty,X71=Object.prototype.propertyIsEnumerable,Gz=(e,t,r)=>t in e?G71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Yz=(e,t)=>{for(var r in t||(t={}))K71.call(t,r)&&Gz(e,r,t[r]);if(qz)for(var r of qz(t))X71.call(t,r)&&Gz(e,r,t[r]);return e},Zz=(e,t)=>Y71(e,Z71(t)),Q71=d1((e,{radius:t})=>({root:{},imageWrapper:{position:"relative"},figure:{margin:0},image:Zz(Yz({},e.fn.fontStyles()),{display:"block",width:"100%",height:"100%",border:0,borderRadius:e.fn.size({size:t,sizes:e.radius})}),caption:{color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[7],marginTop:e.spacing.xs},placeholder:Zz(Yz({},e.fn.cover()),{display:"flex",alignItems:"center",justifyContent:"center",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],borderRadius:e.fn.size({size:t,sizes:e.radius})})})),J71=Object.defineProperty,ma=Object.getOwnPropertySymbols,Wk=Object.prototype.hasOwnProperty,Uk=Object.prototype.propertyIsEnumerable,Kz=(e,t,r)=>t in e?J71(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ji=(e,t)=>{for(var r in t||(t={}))Wk.call(t,r)&&Kz(e,r,t[r]);if(ma)for(var r of ma(t))Uk.call(t,r)&&Kz(e,r,t[r]);return e},et1=(e,t)=>{var r={};for(var n in e)Wk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ma)for(var n of ma(e))t.indexOf(n)<0&&Uk.call(e,n)&&(r[n]=e[n]);return r};const tt1={fit:"cover",width:"100%",height:"auto",radius:0},qk=y.forwardRef((e,t)=>{const r=w1("Image",tt1,e),{className:n,alt:a,src:c,fit:i,width:o,height:s,radius:l,imageProps:f,withPlaceholder:u,placeholder:d,imageRef:p,classNames:m,styles:v,caption:H,unstyled:h,style:g}=r,z=et1(r,["className","alt","src","fit","width","height","radius","imageProps","withPlaceholder","placeholder","imageRef","classNames","styles","caption","unstyled","style"]),{classes:b,cx:x}=Q71({radius:l},{classNames:m,styles:v,unstyled:h,name:"Image"}),[C,M]=y.useState(!c),S=u&&C;return B2(()=>{M(!c)},[c]),V.createElement(z1,Ji({className:x(b.root,n),ref:t,style:Ji({width:o},g)},z),V.createElement("figure",{className:b.figure},V.createElement("div",{className:b.imageWrapper},V.createElement("img",Ji({className:b.image,src:c,alt:a,style:{objectFit:i,width:o,height:s},ref:p,onError:k=>{M(!0),typeof f?.onError=="function"&&f.onError(k)}},f)),S&&V.createElement("div",{className:b.placeholder,title:a},d||V.createElement("div",null,V.createElement(q71,{style:{width:40,height:40}})))),!!H&&V.createElement(Z1,{component:"figcaption",size:"sm",align:"center",className:b.caption},H)))});qk.displayName="@mantine/core/Image";function rt1(e,t){if(e==null)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)!==-1)continue;r[n]=e[n]}return r}var nt1=y.useLayoutEffect,at1=function(t){var r=V.useRef(t);return nt1(function(){r.current=t}),r},Xz=function(t,r){if(typeof t=="function"){t(r);return}t.current=r},ct1=function(t,r){var n=V.useRef();return V.useCallback(function(a){t.current=a,n.current&&Xz(n.current,null),n.current=r,r&&Xz(r,a)},[r])},Qz={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},Jz=function(t){Object.keys(Qz).forEach(function(r){t.style.setProperty(r,Qz[r],"important")})},_3=null,it1=function(t,r){var n=t.scrollHeight;return r.sizingStyle.boxSizing==="border-box"?n+r.borderSize:n-r.paddingSize};function ot1(e,t,r,n){r===void 0&&(r=1),n===void 0&&(n=1/0),_3||(_3=document.createElement("textarea"),_3.setAttribute("tabindex","-1"),_3.setAttribute("aria-hidden","true"),Jz(_3)),_3.parentNode===null&&document.body.appendChild(_3);var a=e.paddingSize,c=e.borderSize,i=e.sizingStyle,o=i.boxSizing;Object.keys(i).forEach(function(d){var p=d;_3.style[p]=i[p]}),Jz(_3),_3.value=t;var s=it1(_3,e);_3.value="x";var l=_3.scrollHeight-a,f=l*r;o==="border-box"&&(f=f+a+c),s=Math.max(f,s);var u=l*n;return o==="border-box"&&(u=u+a+c),s=Math.min(u,s),[s,l]}var ey=function(){},st1=function(t,r){return t.reduce(function(n,a){return n[a]=r[a],n},{})},lt1=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width","wordBreak"],ft1=!!document.documentElement.currentStyle,ut1=function(t){var r=window.getComputedStyle(t);if(r===null)return null;var n=st1(lt1,r),a=n.boxSizing;if(a==="")return null;ft1&&a==="border-box"&&(n.width=parseFloat(n.width)+parseFloat(n.borderRightWidth)+parseFloat(n.borderLeftWidth)+parseFloat(n.paddingRight)+parseFloat(n.paddingLeft)+"px");var c=parseFloat(n.paddingBottom)+parseFloat(n.paddingTop),i=parseFloat(n.borderBottomWidth)+parseFloat(n.borderTopWidth);return{sizingStyle:n,paddingSize:c,borderSize:i}},dt1=function(t){var r=at1(t);y.useLayoutEffect(function(){var n=function(c){r.current(c)};return window.addEventListener("resize",n),function(){window.removeEventListener("resize",n)}},[])},pt1=function(t,r){var n=t.cacheMeasurements,a=t.maxRows,c=t.minRows,i=t.onChange,o=i===void 0?ey:i,s=t.onHeightChange,l=s===void 0?ey:s,f=rt1(t,["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"]),u=f.value!==void 0,d=y.useRef(null),p=ct1(d,r),m=y.useRef(0),v=y.useRef(),H=function(){var z=d.current,b=n&&v.current?v.current:ut1(z);if(b){v.current=b;var x=ot1(b,z.value||z.placeholder||"x",c,a),C=x[0],M=x[1];m.current!==C&&(m.current=C,z.style.setProperty("height",C+"px","important"),l(C,{rowHeight:M}))}},h=function(z){u||H(),o(z)};return y.useLayoutEffect(H),dt1(H),y.createElement("textarea",f2({},f,{onChange:h,ref:p}))},mt1=y.forwardRef(pt1),ht1=d1(e=>({input:{paddingTop:e.spacing.xs,paddingBottom:e.spacing.xs}})),vt1=Object.defineProperty,gt1=Object.defineProperties,zt1=Object.getOwnPropertyDescriptors,ha=Object.getOwnPropertySymbols,Gk=Object.prototype.hasOwnProperty,Yk=Object.prototype.propertyIsEnumerable,ty=(e,t,r)=>t in e?vt1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,h0=(e,t)=>{for(var r in t||(t={}))Gk.call(t,r)&&ty(e,r,t[r]);if(ha)for(var r of ha(t))Yk.call(t,r)&&ty(e,r,t[r]);return e},eo=(e,t)=>gt1(e,zt1(t)),yt1=(e,t)=>{var r={};for(var n in e)Gk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ha)for(var n of ha(e))t.indexOf(n)<0&&Yk.call(e,n)&&(r[n]=e[n]);return r};const Ct1={autosize:!1,size:"sm",__staticSelector:"Textarea"},Zk=y.forwardRef((e,t)=>{const r=w1("Textarea",Ct1,e),{autosize:n,maxRows:a,minRows:c,label:i,error:o,description:s,id:l,className:f,required:u,style:d,wrapperProps:p,classNames:m,styles:v,size:H,__staticSelector:h,sx:g,errorProps:z,descriptionProps:b,labelProps:x,inputWrapperOrder:C,inputContainer:M,unstyled:S,withAsterisk:k}=r,w=yt1(r,["autosize","maxRows","minRows","label","error","description","id","className","required","style","wrapperProps","classNames","styles","size","__staticSelector","sx","errorProps","descriptionProps","labelProps","inputWrapperOrder","inputContainer","unstyled","withAsterisk"]),P=k4(l),{classes:N,cx:$}=ht1(),{systemStyles:A,rest:D}=x6(w),j=h0({required:u,ref:t,invalid:!!o,id:P,classNames:eo(h0({},m),{input:$(N.input,m?.input)}),styles:v,__staticSelector:h,size:H,multiline:!0,unstyled:S},D);return V.createElement(O2.Wrapper,h0(h0({label:i,error:o,id:P,description:s,required:u,style:d,className:f,classNames:m,styles:v,size:H,__staticSelector:h,sx:g,errorProps:z,labelProps:x,descriptionProps:b,inputContainer:M,inputWrapperOrder:C,unstyled:S,withAsterisk:k},A),p),n?V.createElement(O2,eo(h0({},j),{component:mt1,maxRows:a,minRows:c})):V.createElement(O2,eo(h0({},j),{component:"textarea",rows:c})))});Zk.displayName="@mantine/core/Textarea";var Ht1=Object.defineProperty,ry=Object.getOwnPropertySymbols,bt1=Object.prototype.hasOwnProperty,Mt1=Object.prototype.propertyIsEnumerable,ny=(e,t,r)=>t in e?Ht1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Vt1=(e,t)=>{for(var r in t||(t={}))bt1.call(t,r)&&ny(e,r,t[r]);if(ry)for(var r of ry(t))Mt1.call(t,r)&&ny(e,r,t[r]);return e};const xt1={xs:320,sm:380,md:440,lg:620,xl:780};function wt1(e){return e?{position:"absolute",top:0,left:0,right:0,bottom:0,maxHeight:"100vh",overflowY:"auto"}:{}}var Lt1=d1((e,{overflow:t,size:r,centered:n,zIndex:a,fullScreen:c})=>({close:{},overlay:{display:c?"none":void 0},root:{position:"fixed",zIndex:a,top:0,left:0,right:0,bottom:0},inner:{position:"absolute",top:0,left:0,right:0,bottom:0,overflowY:"auto",padding:c?0:`${e.spacing.xl*2}px ${e.spacing.md}px`,display:"flex",justifyContent:"center",alignItems:n?"center":"flex-start"},title:{marginRight:e.spacing.md,textOverflow:"ellipsis",display:"block",wordBreak:"break-word"},modal:Vt1({position:"relative",width:c?"100vw":e.fn.size({sizes:xt1,size:r}),borderRadius:c?0:void 0,outline:0,backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.white,marginTop:n?"auto":void 0,marginBottom:n?"auto":void 0,zIndex:1},wt1(c)),header:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:e.spacing.md,marginRight:-9},body:{maxHeight:t==="inside"?"calc(100vh - 185px)":null,overflowY:t==="inside"?"auto":null,wordBreak:"break-word"}})),St1=Object.defineProperty,va=Object.getOwnPropertySymbols,Kk=Object.prototype.hasOwnProperty,Xk=Object.prototype.propertyIsEnumerable,ay=(e,t,r)=>t in e?St1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,kt1=(e,t)=>{for(var r in t||(t={}))Kk.call(t,r)&&ay(e,r,t[r]);if(va)for(var r of va(t))Xk.call(t,r)&&ay(e,r,t[r]);return e},_t1=(e,t)=>{var r={};for(var n in e)Kk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&va)for(var n of va(e))t.indexOf(n)<0&&Xk.call(e,n)&&(r[n]=e[n]);return r};const Pt1={size:"md",transitionDuration:250,overflow:"outside",padding:"lg",shadow:"lg",closeOnClickOutside:!0,closeOnEscape:!0,trapFocus:!0,withCloseButton:!0,withinPortal:!0,lockScroll:!0,withFocusReturn:!0,overlayBlur:0,zIndex:V6("modal"),exitTransitionDuration:0};function v9(e){const t=w1("Modal",Pt1,e),{className:r,opened:n,title:a,onClose:c,children:i,withCloseButton:o,overlayOpacity:s,size:l,transitionDuration:f,exitTransitionDuration:u,closeButtonLabel:d,overlayColor:p,overflow:m,transition:v,padding:H,shadow:h,radius:g,id:z,classNames:b,styles:x,closeOnClickOutside:C,trapFocus:M,closeOnEscape:S,centered:k,target:w,withinPortal:P,zIndex:N,overlayBlur:$,transitionTimingFunction:A,fullScreen:D,unstyled:j,lockScroll:R,withFocusReturn:T}=t,F=_t1(t,["className","opened","title","onClose","children","withCloseButton","overlayOpacity","size","transitionDuration","exitTransitionDuration","closeButtonLabel","overlayColor","overflow","transition","padding","shadow","radius","id","classNames","styles","closeOnClickOutside","trapFocus","closeOnEscape","centered","target","withinPortal","zIndex","overlayBlur","transitionTimingFunction","fullScreen","unstyled","lockScroll","withFocusReturn"]),L=k4(z),q=`${L}-title`,Z=`${L}-body`,{classes:_,cx:t1,theme:v1}=Lt1({size:l,overflow:m,centered:k,zIndex:N,fullScreen:D},{unstyled:j,classNames:b,styles:x,name:"Modal"}),X=wu(M&&n),s1=y.useRef(null),b1=o3(X,s1),f1=typeof s=="number"?s:v1.colorScheme==="dark"?.85:.75;_w(R&&n);const M1=x1=>{!M&&x1.key==="Escape"&&S&&c()};y.useEffect(()=>{if(!M)return window.addEventListener("keydown",M1),()=>window.removeEventListener("keydown",M1)},[M]),xu({opened:n,shouldReturnFocus:M&&T});const a1=y.useRef(null);nl("mousedown",x1=>{a1.current=x1.target});const u1=()=>{a1.current===s1.current&&C&&c()};return V.createElement(w8,{withinPortal:P,target:w},V.createElement(Ju,{mounted:n,duration:f,exitDuration:u,timingFunction:A,transitions:{modal:{duration:f,transition:v||(D?"fade":"pop")},overlay:{duration:f/2,transition:"fade",timingFunction:"ease"}}},x1=>V.createElement(V.Fragment,null,V.createElement(z1,kt1({id:L,className:t1(_.root,r)},F),V.createElement("div",{style:x1.overlay},V.createElement(Lk,{className:_.overlay,sx:{position:"fixed"},zIndex:0,blur:$,color:p||(v1.colorScheme==="dark"?v1.colors.dark[9]:v1.black),opacity:f1,unstyled:j})),V.createElement("div",{role:"presentation",className:_.inner,onClick:u1,onKeyDown:E=>{var B;((B=E.target)==null?void 0:B.getAttribute("data-mantine-stop-propagation"))!=="true"&&E.key==="Escape"&&S&&c()},ref:b1},V.createElement(OS,{className:_.modal,shadow:h,p:H,radius:g,role:"dialog","aria-labelledby":q,"aria-describedby":Z,"aria-modal":!0,tabIndex:-1,style:x1.modal,unstyled:j,onClick:E=>E.stopPropagation()},(a||o)&&V.createElement("div",{className:_.header},V.createElement(Z1,{id:q,className:_.title},a),o&&V.createElement(L8,{iconSize:16,onClick:c,"aria-label":d,className:_.close})),V.createElement("div",{id:Z,className:_.body},i)))))))}v9.displayName="@mantine/core/Modal";const Nt1={xs:16,sm:22,md:26,lg:30,xl:36},Ot1={xs:10,sm:12,md:14,lg:16,xl:18};var At1=d1((e,{size:t,disabled:r,radius:n,readOnly:a,variant:c})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:r?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:c==="filled"?e.white:e.colors.gray[1],color:r?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:e.fn.size({size:t,sizes:Nt1}),paddingLeft:e.fn.size({size:t,sizes:e.spacing}),paddingRight:r||a?e.fn.size({size:t,sizes:e.spacing}):0,fontWeight:500,fontSize:e.fn.size({size:t,sizes:Ot1}),borderRadius:e.fn.size({size:n,sizes:e.radius}),cursor:r?"not-allowed":"default",userSelect:"none",maxWidth:"calc(100% - 20px)"},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:e.fn.size({size:t,sizes:e.spacing})/6},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}})),Et1=Object.defineProperty,ga=Object.getOwnPropertySymbols,Qk=Object.prototype.hasOwnProperty,Jk=Object.prototype.propertyIsEnumerable,cy=(e,t,r)=>t in e?Et1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$t1=(e,t)=>{for(var r in t||(t={}))Qk.call(t,r)&&cy(e,r,t[r]);if(ga)for(var r of ga(t))Jk.call(t,r)&&cy(e,r,t[r]);return e},Dt1=(e,t)=>{var r={};for(var n in e)Qk.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ga)for(var n of ga(e))t.indexOf(n)<0&&Jk.call(e,n)&&(r[n]=e[n]);return r};const iy={xs:16,sm:22,md:24,lg:26,xl:30};function e_(e){var t=e,{label:r,classNames:n,styles:a,className:c,onRemove:i,disabled:o,readOnly:s,size:l,radius:f="sm",variant:u}=t,d=Dt1(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant"]);const{classes:p,cx:m}=At1({size:l,disabled:o,readOnly:s,radius:f,variant:u},{classNames:n,styles:a,name:"MultiSelect"});return V.createElement("div",$t1({className:m(p.defaultValue,c)},d),V.createElement("span",{className:p.defaultValueLabel},r),!o&&!s&&V.createElement(L8,{"aria-hidden":!0,onMouseDown:i,size:iy[l],radius:2,color:"blue",variant:"transparent",iconSize:iy[l]/2,className:p.defaultValueRemove,tabIndex:-1}))}e_.displayName="@mantine/core/MultiSelect/DefaultValue";function Tt1({data:e,searchable:t,limit:r,searchValue:n,filter:a,value:c}){if(!t&&c.length===0)return e;if(!t){const o=[];for(let s=0;sl===e[s].value&&!e[s].disabled)||o.push(e[s]);return o}const i=[];for(let o=0;os===e[o].value&&!e[o].disabled),e[o])&&i.push(e[o]),!(i.length>=r));o+=1);return i}var Rt1=Object.defineProperty,za=Object.getOwnPropertySymbols,t_=Object.prototype.hasOwnProperty,r_=Object.prototype.propertyIsEnumerable,oy=(e,t,r)=>t in e?Rt1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,sy=(e,t)=>{for(var r in t||(t={}))t_.call(t,r)&&oy(e,r,t[r]);if(za)for(var r of za(t))r_.call(t,r)&&oy(e,r,t[r]);return e},Ft1=(e,t)=>{var r={};for(var n in e)t_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&za)for(var n of za(e))t.indexOf(n)<0&&r_.call(e,n)&&(r[n]=e[n]);return r};const It1={xs:14,sm:18,md:20,lg:24,xl:28};function n_(e){var t=e,{size:r,error:n,style:a}=t,c=Ft1(t,["size","error","style"]);const i=V2(),o=i.fn.size({size:r,sizes:It1});return V.createElement("svg",sy({width:o,height:o,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:sy({color:n?i.colors.red[6]:i.colors.gray[6]},a),"data-chevron":!0},c),V.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}function a_({shouldClear:e,clearButtonLabel:t,onClear:r,size:n,error:a,clearButtonTabIndex:c}){return e?V.createElement(L8,{variant:"transparent","aria-label":t,onClick:r,size:n,tabIndex:c,onMouseDown:i=>i.preventDefault()}):V.createElement(n_,{error:a,size:n})}a_.displayName="@mantine/core/SelectRightSection";var jt1=Object.defineProperty,Bt1=Object.defineProperties,Wt1=Object.getOwnPropertyDescriptors,ya=Object.getOwnPropertySymbols,c_=Object.prototype.hasOwnProperty,i_=Object.prototype.propertyIsEnumerable,ly=(e,t,r)=>t in e?jt1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,to=(e,t)=>{for(var r in t||(t={}))c_.call(t,r)&&ly(e,r,t[r]);if(ya)for(var r of ya(t))i_.call(t,r)&&ly(e,r,t[r]);return e},fy=(e,t)=>Bt1(e,Wt1(t)),Ut1=(e,t)=>{var r={};for(var n in e)c_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ya)for(var n of ya(e))t.indexOf(n)<0&&i_.call(e,n)&&(r[n]=e[n]);return r};const qt1={xs:24,sm:30,md:34,lg:44,xl:54};function o_(e){var t=e,{styles:r,rightSection:n,rightSectionWidth:a,theme:c}=t,i=Ut1(t,["styles","rightSection","rightSectionWidth","theme"]);if(n)return{rightSection:n,rightSectionWidth:a,styles:r};const o=typeof r=="function"?r(c):r;return{rightSectionWidth:c.fn.size({size:i.size,sizes:qt1}),rightSection:!i.readOnly&&!(i.disabled&&i.shouldClear)&&V.createElement(a_,to({},i)),styles:fy(to({},o),{rightSection:fy(to({},o?.rightSection),{pointerEvents:i.shouldClear?void 0:"none"})})}}var Gt1=Object.defineProperty,Yt1=Object.defineProperties,Zt1=Object.getOwnPropertyDescriptors,uy=Object.getOwnPropertySymbols,Kt1=Object.prototype.hasOwnProperty,Xt1=Object.prototype.propertyIsEnumerable,dy=(e,t,r)=>t in e?Gt1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Qt1=(e,t)=>{for(var r in t||(t={}))Kt1.call(t,r)&&dy(e,r,t[r]);if(uy)for(var r of uy(t))Xt1.call(t,r)&&dy(e,r,t[r]);return e},Jt1=(e,t)=>Yt1(e,Zt1(t)),er1=d1((e,{size:t,invalid:r})=>({wrapper:{position:"relative"},values:{minHeight:e.fn.size({size:t,sizes:D2})-2,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(${-e.spacing.xs}px / 2)`,boxSizing:"border-box"},value:{margin:`calc(${e.spacing.xs}px / 2 - 2px) calc(${e.spacing.xs}px / 2)`},searchInput:Jt1(Qt1({},e.fn.fontStyles()),{flex:1,minWidth:60,backgroundColor:"transparent",border:0,outline:0,fontSize:e.fn.size({size:t,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs}px / 2)`,appearance:"none",color:"inherit",lineHeight:`${e.fn.size({size:t,sizes:D2})-2}px`,"&::placeholder":{opacity:1,color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{width:0,height:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed"}}})),tr1=Object.defineProperty,rr1=Object.defineProperties,nr1=Object.getOwnPropertyDescriptors,Ca=Object.getOwnPropertySymbols,s_=Object.prototype.hasOwnProperty,l_=Object.prototype.propertyIsEnumerable,py=(e,t,r)=>t in e?tr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,v0=(e,t)=>{for(var r in t||(t={}))s_.call(t,r)&&py(e,r,t[r]);if(Ca)for(var r of Ca(t))l_.call(t,r)&&py(e,r,t[r]);return e},my=(e,t)=>rr1(e,nr1(t)),ar1=(e,t)=>{var r={};for(var n in e)s_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ca)for(var n of Ca(e))t.indexOf(n)<0&&l_.call(e,n)&&(r[n]=e[n]);return r};function cr1(e,t,r){return t?!1:r.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function ir1(e,t){return!!e&&!t.some(r=>r.value.toLowerCase()===e.toLowerCase())}function hy(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const r=typeof t[0]=="object"?t.map(n=>n.value):t;return e.filter(n=>r.includes(n))}const or1={size:"sm",valueComponent:e_,itemComponent:_u,transition:"pop-top-left",transitionDuration:0,maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:cr1,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:ir1,switchDirectionOnFlip:!1,zIndex:V6("popover"),selectOnBlur:!1,clearButtonTabIndex:0,positionDependencies:[]},f_=y.forwardRef((e,t)=>{const r=w1("MultiSelect",or1,e),{className:n,style:a,required:c,label:i,description:o,size:s,error:l,classNames:f,styles:u,wrapperProps:d,value:p,defaultValue:m,data:v,onChange:H,valueComponent:h,itemComponent:g,id:z,transition:b,transitionDuration:x,transitionTimingFunction:C,maxDropdownHeight:M,shadow:S,nothingFound:k,onFocus:w,onBlur:P,searchable:N,placeholder:$,filter:A,limit:D,clearSearchOnChange:j,clearable:R,clearSearchOnBlur:T,clearButtonLabel:F,variant:L,onSearchChange:q,searchValue:Z,disabled:_,initiallyOpened:t1,radius:v1,icon:X,rightSection:s1,rightSectionWidth:b1,creatable:f1,getCreateLabel:M1,shouldCreate:a1,onCreate:u1,sx:x1,dropdownComponent:E,onDropdownClose:B,onDropdownOpen:I,maxSelectedValues:Y,withinPortal:K,switchDirectionOnFlip:U,zIndex:r1,selectOnBlur:m1,name:k1,dropdownPosition:D1,errorProps:S1,labelProps:N1,descriptionProps:B1,clearButtonTabIndex:W,form:G,positionDependencies:e1,onKeyDown:c1,unstyled:y1,inputContainer:Q1,inputWrapperOrder:i1,readOnly:n1,withAsterisk:R1}=r,G1=ar1(r,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transition","transitionDuration","transitionTimingFunction","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","clearButtonLabel","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","clearButtonTabIndex","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk"]),{classes:A1,cx:z3,theme:r2}=er1({size:s,invalid:!!l},{classNames:f,styles:u,unstyled:y1,name:"MultiSelect"}),{systemStyles:_4,rest:f0}=x6(G1),X2=y.useRef(),y3=y.useRef({}),P4=k4(z),[d2,L2]=y.useState(t1),[s3,V1]=y.useState(-1),[k3,ye]=y.useState("column"),[S2,Ce]=U3({value:Z,defaultValue:"",finalValue:void 0,onChange:q}),[J7,He]=y.useState(!1),{scrollIntoView:u0,targetRef:et,scrollableRef:ei}=kw({duration:0,offset:5,cancelable:!1,isList:!0}),tt=f1&&typeof M1=="function";let O8=null;const C1=v.map(_1=>typeof _1=="string"?{label:_1,value:_1}:_1),Y1=Qx({data:C1}),[I1,k2]=U3({value:hy(p,v),defaultValue:hy(m,v),finalValue:[],onChange:H}),l4=y.useRef(!!Y&&Y{if(!n1){const J1=I1.filter(X4=>X4!==_1);k2(J1),Y&&J1.length{Ce(_1.currentTarget.value),!_&&!l4.current&&N&&L2(!0)},oW=_1=>{typeof w=="function"&&w(_1),!_&&!l4.current&&N&&L2(!0)},F2=Tt1({data:Y1,searchable:N,searchValue:S2,limit:D,filter:A,value:I1}),Qp=(_1,J1,X4)=>{let k6=_1;for(;X4(k6);)if(k6=J1(k6),!F2[k6].disabled)return k6;return _1};B2(()=>{V1(-1)},[S2]),B2(()=>{!_&&I1.length>v.length&&L2(!1),Y&&I1.length=Y&&(l4.current=!0,L2(!1))},[I1]);const rt=_1=>{if(!n1)if(j&&Ce(""),I1.includes(_1.value))Xp(_1.value);else{if(_1.creatable&&typeof u1=="function"){const J1=u1(_1.value);typeof J1<"u"&&J1!==null&&k2(typeof J1=="string"?[...I1,J1]:[...I1,J1.value])}else k2([...I1,_1.value]);I1.length===Y-1&&(l4.current=!0,L2(!1)),s3===F2.length-1&&V1(F2.length-2),F2.length===1&&L2(!1)}},sW=_1=>{typeof P=="function"&&P(_1),m1&&F2[s3]&&d2&&rt(F2[s3]),T&&Ce(""),L2(!1)},lW=_1=>{if(J7||(c1?.(_1),n1)||_1.key!=="Backspace"&&Y&&l4.current)return;const J1=k3==="column",X4=()=>{V1(be=>{var Q4;const A8=Qp(be,Me=>Me+1,Me=>Me{V1(be=>{var Q4;const A8=Qp(be,Me=>Me-1,Me=>Me>0);return d2&&(et.current=y3.current[(Q4=F2[A8])==null?void 0:Q4.value],u0({alignment:J1?"start":"end"})),A8})};switch(_1.key){case"ArrowUp":{_1.preventDefault(),L2(!0),J1?k6():X4();break}case"ArrowDown":{_1.preventDefault(),L2(!0),J1?X4():k6();break}case"Enter":{_1.preventDefault(),F2[s3]&&d2?rt(F2[s3]):L2(!0);break}case" ":{N||(_1.preventDefault(),F2[s3]&&d2?rt(F2[s3]):L2(!0));break}case"Backspace":{I1.length>0&&S2.length===0&&(k2(I1.slice(0,-1)),L2(!0),Y&&(l4.current=!1));break}case"Home":{if(!N){_1.preventDefault(),d2||L2(!0);const be=F2.findIndex(Q4=>!Q4.disabled);V1(be),u0({alignment:J1?"end":"start"})}break}case"End":{if(!N){_1.preventDefault(),d2||L2(!0);const be=F2.map(Q4=>!!Q4.disabled).lastIndexOf(!1);V1(be),u0({alignment:J1?"end":"start"})}break}case"Escape":L2(!1)}},fW=I1.map(_1=>{let J1=Y1.find(X4=>X4.value===_1&&!X4.disabled);return!J1&&tt&&(J1={value:_1,label:_1}),J1}).filter(_1=>!!_1).map(_1=>V.createElement(h,my(v0({},_1),{variant:L,disabled:_,className:A1.value,readOnly:n1,onRemove:J1=>{J1.preventDefault(),J1.stopPropagation(),Xp(_1.value)},key:_1.value,size:s,styles:u,classNames:f,radius:v1}))),uW=()=>{var _1;Ce(""),k2([]),(_1=X2.current)==null||_1.focus(),Y&&(l4.current=!1)};tt&&a1(S2,Y1)&&(O8=M1(S2),F2.push({label:S2,value:S2,creatable:!0}));const nt=!n1&&(F2.length>0?d2:d2&&!!k);return B2(()=>{const _1=nt?I:B;typeof _1=="function"&&_1()},[nt]),V.createElement(O2.Wrapper,v0(v0({required:c,id:P4,label:i,error:l,description:o,size:s,className:n,style:a,classNames:f,styles:u,__staticSelector:"MultiSelect",sx:x1,errorProps:S1,descriptionProps:B1,labelProps:N1,inputContainer:Q1,inputWrapperOrder:i1,unstyled:y1,withAsterisk:R1},_4),d),V.createElement(ne,{opened:nt,transition:b,transitionDuration:x,shadow:"sm",withinPortal:K,__staticSelector:"MultiSelect",onDirectionChange:ye,switchDirectionOnFlip:U,zIndex:r1,dropdownPosition:D1,positionDependencies:e1,classNames:f,styles:u,unstyled:y1},V.createElement(ne.Target,null,V.createElement("div",{className:A1.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":d2&&nt?`${P4}-items`:null,"aria-controls":P4,"aria-expanded":d2,onMouseLeave:()=>V1(-1),tabIndex:-1},V.createElement("input",{type:"hidden",name:k1,value:I1.join(","),form:G,disabled:_}),V.createElement(O2,v0({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:s,variant:L,disabled:_,invalid:!!l,required:c,radius:v1,icon:X,unstyled:y1,onMouseDown:_1=>{var J1;_1.preventDefault(),!_&&!l4.current&&L2(!d2),(J1=X2.current)==null||J1.focus()},classNames:my(v0({},f),{input:z3({[A1.input]:!N},f?.input)})},o_({theme:r2,rightSection:s1,rightSectionWidth:b1,styles:u,size:s,shouldClear:R&&I1.length>0,clearButtonLabel:F,onClear:uW,error:l,disabled:_,clearButtonTabIndex:W,readOnly:n1})),V.createElement("div",{className:A1.values},fW,V.createElement("input",v0({ref:o3(t,X2),type:"search",id:P4,className:z3(A1.searchInput,{[A1.searchInputPointer]:!N,[A1.searchInputInputHidden]:!d2&&I1.length>0||!N&&I1.length>0,[A1.searchInputEmpty]:I1.length===0}),onKeyDown:lW,value:S2,onChange:iW,onFocus:oW,onBlur:sW,readOnly:!N||l4.current||n1,placeholder:I1.length===0?$:void 0,disabled:_,"data-mantine-stop-propagation":d2,autoComplete:"off",onCompositionStart:()=>He(!0),onCompositionEnd:()=>He(!1)},f0)))))),V.createElement(ne.Dropdown,{component:E||f9,maxHeight:M,direction:k3,id:P4,innerRef:ei,__staticSelector:"MultiSelect",classNames:f,styles:u},V.createElement(ku,{data:F2,hovered:s3,classNames:f,styles:u,uuid:P4,__staticSelector:"MultiSelect",onItemHover:V1,onItemSelect:rt,itemsRefs:y3,itemComponent:g,size:s,nothingFound:k,creatable:f1&&!!O8,createLabel:O8,unstyled:y1}))))});f_.displayName="@mantine/core/MultiSelect";const sr1=(e,t,r)=>Number.isInteger(e)&&e>=0&&t===0?"numeric":!Number.isInteger(e)&&e>=0&&t!==0?"decimal":Number.isInteger(e)&&e<0&&t===0||!Number.isInteger(e)&&e<0&&t!==0?r==="ios"?"text":"decimal":"numeric";function vy({direction:e,size:t}){return V.createElement("svg",{style:{transform:e==="up"?"rotate(180deg)":void 0},width:t,height:t,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},V.createElement("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}const u_={xs:20,sm:24,md:30,lg:34,xl:36};var lr1=d1((e,{radius:t,size:r})=>({rightSection:{display:"flex",flexDirection:"column",height:"calc(100% - 2px)",margin:1,marginRight:1,overflow:"hidden",borderTopRightRadius:e.fn.radius(t),borderBottomRightRadius:e.fn.radius(t)},control:{margin:0,position:"relative",flex:"0 0 50%",display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",width:e.fn.size({size:r,sizes:u_}),padding:0,WebkitTapHighlightColor:"transparent",borderBottom:`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,borderLeft:`1px solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,borderTop:0,borderRight:0,backgroundColor:"transparent",marginRight:1,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,"&:not(:disabled):hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]},"&:disabled":{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[4]}},controlUp:{},controlDown:{borderBottom:0}})),fr1=Object.defineProperty,ur1=Object.defineProperties,dr1=Object.getOwnPropertyDescriptors,Ha=Object.getOwnPropertySymbols,d_=Object.prototype.hasOwnProperty,p_=Object.prototype.propertyIsEnumerable,gy=(e,t,r)=>t in e?fr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ro=(e,t)=>{for(var r in t||(t={}))d_.call(t,r)&&gy(e,r,t[r]);if(Ha)for(var r of Ha(t))p_.call(t,r)&&gy(e,r,t[r]);return e},pr1=(e,t)=>ur1(e,dr1(t)),mr1=(e,t)=>{var r={};for(var n in e)d_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ha)for(var n of Ha(e))t.indexOf(n)<0&&p_.call(e,n)&&(r[n]=e[n]);return r};const hr1={type:"text",size:"sm",__staticSelector:"TextInput"},ed=y.forwardRef((e,t)=>{const r=Uu("TextInput",hr1,e),{inputProps:n,wrapperProps:a}=r,c=mr1(r,["inputProps","wrapperProps"]);return V.createElement(O2.Wrapper,ro({},a),V.createElement(O2,pr1(ro(ro({},n),c),{ref:t})))});ed.displayName="@mantine/core/TextInput";var vr1=Object.defineProperty,gr1=Object.defineProperties,zr1=Object.getOwnPropertyDescriptors,ba=Object.getOwnPropertySymbols,m_=Object.prototype.hasOwnProperty,h_=Object.prototype.propertyIsEnumerable,zy=(e,t,r)=>t in e?vr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,yr1=(e,t)=>{for(var r in t||(t={}))m_.call(t,r)&&zy(e,r,t[r]);if(ba)for(var r of ba(t))h_.call(t,r)&&zy(e,r,t[r]);return e},Cr1=(e,t)=>gr1(e,zr1(t)),Hr1=(e,t)=>{var r={};for(var n in e)m_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ba)for(var n of ba(e))t.indexOf(n)<0&&h_.call(e,n)&&(r[n]=e[n]);return r};const br1=e=>e||"",Mr1=e=>{if(e==="-")return e;let t=e;t[0]==="."&&(t=`0${e}`);const r=parseFloat(t);if(!Number.isNaN(r))return e},yy={xs:10,sm:14,md:16,lg:18,xl:20},Vr1={step:1,hideControls:!1,size:"sm",precision:0,noClampOnBlur:!1,removeTrailingZeros:!1,formatter:br1,parser:Mr1,type:"text"},v_=y.forwardRef((e,t)=>{const r=w1("NumberInput",Vr1,e),{readOnly:n,disabled:a,value:c,onChange:i,decimalSeparator:o,min:s,max:l,startValue:f,step:u,stepHoldInterval:d,stepHoldDelay:p,onBlur:m,onFocus:v,onKeyDown:H,onKeyUp:h,hideControls:g,radius:z,variant:b,precision:x,removeTrailingZeros:C,defaultValue:M,noClampOnBlur:S,handlersRef:k,classNames:w,styles:P,size:N,rightSection:$,rightSectionWidth:A,formatter:D,parser:j,inputMode:R,unstyled:T,type:F}=r,L=Hr1(r,["readOnly","disabled","value","onChange","decimalSeparator","min","max","startValue","step","stepHoldInterval","stepHoldDelay","onBlur","onFocus","onKeyDown","onKeyUp","hideControls","radius","variant","precision","removeTrailingZeros","defaultValue","noClampOnBlur","handlersRef","classNames","styles","size","rightSection","rightSectionWidth","formatter","parser","inputMode","unstyled","type"]),{classes:q,cx:Z,theme:_}=lr1({radius:z,size:N},{classNames:w,styles:P,unstyled:T,name:"NumberInput"}),t1=i1=>{if(i1===void 0)return;let n1=i1.toFixed(x);return C&&x>0&&(n1=n1.replace(new RegExp(`[0]{0,${x}}$`),""),(n1.endsWith(".")||n1.endsWith(o))&&(n1=n1.slice(0,-1))),n1},[v1,X]=y.useState(!1),[s1,b1]=y.useState(typeof c=="number"?c:typeof M=="number"?M:void 0),f1=typeof c=="number"?c:s1,[M1,a1]=y.useState(typeof f1=="number"?t1(f1):""),u1=y.useRef(),x1=i1=>{i1!==s1&&!Number.isNaN(i1)&&(typeof i=="function"&&i(i1),b1(i1))},E=(i1="")=>{let n1=typeof i1=="number"?String(i1):i1;return o&&(n1=n1.replace(/\./g,o)),D(n1)},B=i1=>{let n1=i1;return o&&(n1=n1.replace(new RegExp(`\\${o}`,"g"),".")),j(n1)},I=typeof s=="number"?s:-1/0,Y=typeof l=="number"?l:1/0,K=y.useRef();K.current=()=>{var i1,n1,R1;if(s1===void 0)x1((i1=f??s)!=null?i1:0),a1((R1=(n1=t1(f))!=null?n1:t1(s))!=null?R1:"0");else{const G1=t1(j3(s1+u,I,Y));x1(parseFloat(G1)),a1(G1)}};const U=y.useRef();U.current=()=>{var i1,n1,R1;if(s1===void 0)x1((i1=f??s)!=null?i1:0),a1((R1=(n1=t1(f))!=null?n1:t1(s))!=null?R1:"0");else{const G1=t1(j3(s1-u,I,Y));x1(parseFloat(G1)),a1(G1)}},ww(k,{increment:K.current,decrement:U.current}),y.useEffect(()=>{typeof c=="number"&&!v1&&(b1(c),a1(t1(c))),M===void 0&&c===void 0&&!v1&&(b1(c),a1(""))},[c,x]);const r1=p!==void 0&&d!==void 0,m1=y.useRef(null),k1=y.useRef(0),D1=()=>{m1.current&&window.clearTimeout(m1.current),m1.current=null,k1.current=0},S1=i1=>{i1?K.current():U.current(),k1.current+=1},N1=i1=>{if(S1(i1),r1){const n1=typeof d=="number"?d:d(k1.current);m1.current=window.setTimeout(()=>N1(i1),n1)}},B1=(i1,n1)=>{i1.preventDefault(),u1.current.focus(),S1(n1),r1&&(m1.current=window.setTimeout(()=>N1(n1),p))};y.useEffect(()=>(D1(),D1),[]);const W=V.createElement("div",{className:q.rightSection},V.createElement("button",{type:"button",tabIndex:-1,"aria-hidden":!0,disabled:f1>=l,className:Z(q.control,q.controlUp),onPointerDown:i1=>{B1(i1,!0)},onPointerUp:D1,onPointerLeave:D1},V.createElement(vy,{size:_.fn.size({size:N,sizes:yy}),direction:"up"})),V.createElement("button",{type:"button",tabIndex:-1,"aria-hidden":!0,disabled:f1<=s,className:Z(q.control,q.controlDown),onPointerDown:i1=>{B1(i1,!1)},onPointerUp:D1,onPointerLeave:D1},V.createElement(vy,{size:_.fn.size({size:N,sizes:yy}),direction:"down"}))),G=i1=>{if(i1.nativeEvent.isComposing)return;const R1=i1.target.value,G1=B(R1);a1(G1),R1===""||R1==="-"?x1(void 0):R1.trim()!==""&&!Number.isNaN(G1)&&x1(parseFloat(G1))},e1=i1=>{var n1;if(i1.target.value==="")a1(""),x1(void 0);else{let R1=i1.target.value;(R1[0]===`${o}`||R1[0]===".")&&(R1=`0${R1}`);const G1=B(R1),A1=j3(parseFloat(G1),I,Y);Number.isNaN(A1)?a1((n1=t1(f1))!=null?n1:""):S||(a1(t1(A1)),x1(parseFloat(t1(A1))))}X(!1),typeof m=="function"&&m(i1)},c1=i1=>{X(!0),typeof v=="function"&&v(i1)},y1=i1=>{if(typeof H=="function"&&H(i1),i1.repeat&&r1&&(i1.key==="ArrowUp"||i1.key==="ArrowDown")){i1.preventDefault();return}n||(i1.key==="ArrowUp"?B1(i1,!0):i1.key==="ArrowDown"&&B1(i1,!1))},Q1=i1=>{typeof h=="function"&&h(i1),(i1.key==="ArrowUp"||i1.key==="ArrowDown")&&D1()};return V.createElement(ed,Cr1(yr1({},L),{type:F,variant:b,value:E(M1),disabled:a,readOnly:n,ref:o3(u1,t),onChange:G,onBlur:e1,onFocus:c1,onKeyDown:y1,onKeyUp:Q1,rightSection:$||(a||n||g||b==="unstyled"?null:W),rightSectionWidth:A||_.fn.size({size:N,sizes:u_})+1,radius:z,max:l,min:s,step:u,size:N,styles:P,classNames:w,inputMode:R||sr1(u,x,_11()),__staticSelector:"NumberInput",unstyled:T}))});v_.displayName="@mantine/core/NumberInput";const xr1=({reveal:e,size:t=15})=>V.createElement("svg",{width:t,height:t,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},V.createElement("path",{d:e?"M13.3536 2.35355C13.5488 2.15829 13.5488 1.84171 13.3536 1.64645C13.1583 1.45118 12.8417 1.45118 12.6464 1.64645L10.6828 3.61012C9.70652 3.21671 8.63759 3 7.5 3C4.30786 3 1.65639 4.70638 0.0760002 7.23501C-0.0253338 7.39715 -0.0253334 7.60288 0.0760014 7.76501C0.902945 9.08812 2.02314 10.1861 3.36061 10.9323L1.64645 12.6464C1.45118 12.8417 1.45118 13.1583 1.64645 13.3536C1.84171 13.5488 2.15829 13.5488 2.35355 13.3536L4.31723 11.3899C5.29348 11.7833 6.36241 12 7.5 12C10.6921 12 13.3436 10.2936 14.924 7.76501C15.0253 7.60288 15.0253 7.39715 14.924 7.23501C14.0971 5.9119 12.9769 4.81391 11.6394 4.06771L13.3536 2.35355ZM9.90428 4.38861C9.15332 4.1361 8.34759 4 7.5 4C4.80285 4 2.52952 5.37816 1.09622 7.50001C1.87284 8.6497 2.89609 9.58106 4.09974 10.1931L9.90428 4.38861ZM5.09572 10.6114L10.9003 4.80685C12.1039 5.41894 13.1272 6.35031 13.9038 7.50001C12.4705 9.62183 10.1971 11 7.5 11C6.65241 11 5.84668 10.8639 5.09572 10.6114Z":"M7.5 11C4.80285 11 2.52952 9.62184 1.09622 7.50001C2.52952 5.37816 4.80285 4 7.5 4C10.1971 4 12.4705 5.37816 13.9038 7.50001C12.4705 9.62183 10.1971 11 7.5 11ZM7.5 3C4.30786 3 1.65639 4.70638 0.0760002 7.23501C-0.0253338 7.39715 -0.0253334 7.60288 0.0760014 7.76501C1.65639 10.2936 4.30786 12 7.5 12C10.6921 12 13.3436 10.2936 14.924 7.76501C15.0253 7.60288 15.0253 7.39715 14.924 7.23501C13.3436 4.70638 10.6921 3 7.5 3ZM7.5 9.5C8.60457 9.5 9.5 8.60457 9.5 7.5C9.5 6.39543 8.60457 5.5 7.5 5.5C6.39543 5.5 5.5 6.39543 5.5 7.5C5.5 8.60457 6.39543 9.5 7.5 9.5Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}));var wr1=Object.defineProperty,Lr1=Object.defineProperties,Sr1=Object.getOwnPropertyDescriptors,Cy=Object.getOwnPropertySymbols,kr1=Object.prototype.hasOwnProperty,_r1=Object.prototype.propertyIsEnumerable,Hy=(e,t,r)=>t in e?wr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,by=(e,t)=>{for(var r in t||(t={}))kr1.call(t,r)&&Hy(e,r,t[r]);if(Cy)for(var r of Cy(t))_r1.call(t,r)&&Hy(e,r,t[r]);return e},My=(e,t)=>Lr1(e,Sr1(t)),Pr1=d1((e,{size:t,rightSectionWidth:r})=>({visibilityToggle:{},input:{position:"relative",overflow:"hidden"},innerInput:My(by({},e.fn.fontStyles()),{backgroundColor:"transparent",border:"1px solid transparent",borderLeftWidth:0,borderRightWidth:0,boxSizing:"border-box",position:"absolute",display:"block",width:`calc(100% - ${r}px)`,paddingLeft:e.fn.size({size:t,sizes:D2})/3,fontSize:e.fn.size({size:t,sizes:e.fontSizes}),height:e.fn.size({size:t,sizes:D2})-2,lineHeight:`${e.fn.size({size:t,sizes:D2})-4}px`,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,top:0,bottom:0,left:0,right:0,"&:focus":{outline:0},"&:disabled":{cursor:"not-allowed"},"&::placeholder":My(by({},e.fn.placeholderStyles()),{opacity:1})}),invalid:{color:e.fn.variant({variant:"filled",color:"red"}).background,"&::placeholder":{opacity:1,color:e.fn.variant({variant:"filled",color:"red"}).background}},withIcon:{paddingLeft:`${e.fn.size({size:t,sizes:D2})}px !important`}})),Nr1=Object.defineProperty,Or1=Object.defineProperties,Ar1=Object.getOwnPropertyDescriptors,Ma=Object.getOwnPropertySymbols,g_=Object.prototype.hasOwnProperty,z_=Object.prototype.propertyIsEnumerable,Vy=(e,t,r)=>t in e?Nr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Tt=(e,t)=>{for(var r in t||(t={}))g_.call(t,r)&&Vy(e,r,t[r]);if(Ma)for(var r of Ma(t))z_.call(t,r)&&Vy(e,r,t[r]);return e},Er1=(e,t)=>Or1(e,Ar1(t)),$r1=(e,t)=>{var r={};for(var n in e)g_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ma)for(var n of Ma(e))t.indexOf(n)<0&&z_.call(e,n)&&(r[n]=e[n]);return r};const Dr1={xs:22,sm:26,md:28,lg:32,xl:40},Tr1={xs:12,sm:15,md:17,lg:19,xl:21},Rr1={xs:28,sm:32,md:34,lg:44,xl:54},Fr1={size:"sm",toggleTabIndex:-1,visibilityToggleIcon:xr1,__staticSelector:"PasswordInput"},y_=y.forwardRef((e,t)=>{const r=w1("PasswordInput",Fr1,e),{radius:n,disabled:a,size:c,toggleTabIndex:i,className:o,id:s,label:l,error:f,required:u,style:d,icon:p,description:m,wrapperProps:v,classNames:H,styles:h,variant:g,visibilityToggleIcon:z,__staticSelector:b,rightSection:x,rightSectionWidth:C,rightSectionProps:M,sx:S,labelProps:k,descriptionProps:w,errorProps:P,unstyled:N,visibilityToggleLabel:$,withAsterisk:A,inputContainer:D,iconWidth:j,inputWrapperOrder:R,visible:T,defaultVisible:F,onVisibilityChange:L}=r,q=$r1(r,["radius","disabled","size","toggleTabIndex","className","id","label","error","required","style","icon","description","wrapperProps","classNames","styles","variant","visibilityToggleIcon","__staticSelector","rightSection","rightSectionWidth","rightSectionProps","sx","labelProps","descriptionProps","errorProps","unstyled","visibilityToggleLabel","withAsterisk","inputContainer","iconWidth","inputWrapperOrder","visible","defaultVisible","onVisibilityChange"]),Z=V2(),_=Z.fn.size({size:c,sizes:Rr1}),{classes:t1,cx:v1}=Pr1({size:c,rightSectionWidth:_},{name:"PasswordInput",classNames:H,styles:h,unstyled:N}),X=k4(s),{systemStyles:s1,rest:b1}=x6(q),[f1,M1]=U3({value:T,defaultValue:F,finalValue:!1,onChange:L}),a1=()=>M1(!f1),u1=V.createElement(d8,{className:t1.visibilityToggle,tabIndex:i,radius:n,size:Z.fn.size({size:c,sizes:Dr1}),"aria-hidden":!$,"aria-label":$,unstyled:N,onMouseDown:x1=>{x1.preventDefault(),a1()},onKeyDown:x1=>{x1.key===" "&&(x1.preventDefault(),a1())}},V.createElement(z,{reveal:f1,size:Z.fn.size({size:c,sizes:Tr1})}));return V.createElement(O2.Wrapper,Tt(Tt({required:u,id:X,label:l,error:f,description:m,size:c,className:o,style:d,classNames:H,styles:h,__staticSelector:b,sx:S,errorProps:P,descriptionProps:w,labelProps:k,unstyled:N,withAsterisk:A,inputWrapperOrder:R,inputContainer:D},s1),v),V.createElement(O2,{component:"div",invalid:!!f,icon:p,size:c,classNames:Er1(Tt({},H),{input:t1.input}),styles:h,radius:n,disabled:a,__staticSelector:b,rightSectionWidth:_,rightSection:!a&&u1,variant:g,unstyled:N,iconWidth:j},V.createElement("input",Tt({type:f1?"text":"password",required:u,className:v1(t1.innerInput,{[t1.withIcon]:p,[t1.invalid]:!!f}),disabled:a,id:X,ref:t},b1))))});y_.displayName="@mantine/core/PasswordInput";const xy={xs:3,sm:5,md:8,lg:12,xl:16},Ir1=i9({from:{backgroundPosition:"0 0"},to:{backgroundPosition:"40px 0"}});var jr1=d1((e,{color:t,radius:r,size:n,striped:a,animate:c})=>({root:{position:"relative",height:e.fn.size({size:n,sizes:xy}),backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2],borderRadius:e.fn.size({size:r,sizes:e.radius}),overflow:"hidden"},bar:{position:"absolute",top:0,bottom:0,left:0,height:"100%",display:"flex",justifyContent:"center",alignItems:"center",backgroundColor:e.fn.variant({variant:"filled",primaryFallback:!1,color:t||e.primaryColor}).background,transition:"width 100ms linear",animation:c?`${Ir1} 1000ms linear infinite`:"none",backgroundSize:"20px 20px",backgroundImage:a?"linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)":"none","&:last-of-type":{borderTopRightRadius:e.fn.size({size:r,sizes:e.radius}),borderBottomRightRadius:e.fn.size({size:r,sizes:e.radius})},"&:first-of-type":{borderTopLeftRadius:e.fn.size({size:r,sizes:e.radius}),borderBottomLeftRadius:e.fn.size({size:r,sizes:e.radius})},"@media (prefers-reduced-motion)":{transitionDuration:e.respectReducedMotion?"0ms":void 0}},label:{color:e.white,fontSize:e.fn.size({size:n,sizes:xy})*.65,fontWeight:700,userSelect:"none",overflow:"hidden",whiteSpace:"nowrap"}}));const C_=y.createContext(!1),Br1=C_.Provider,Wr1=()=>y.useContext(C_);function H_({children:e,openDelay:t=0,closeDelay:r=0}){return V.createElement(Br1,{value:!0},V.createElement(v61,{delay:{open:t,close:r}},e))}H_.displayName="@mantine/core/TooltipGroup";var Ur1=Object.defineProperty,qr1=Object.defineProperties,Gr1=Object.getOwnPropertyDescriptors,wy=Object.getOwnPropertySymbols,Yr1=Object.prototype.hasOwnProperty,Zr1=Object.prototype.propertyIsEnumerable,Ly=(e,t,r)=>t in e?Ur1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Sy=(e,t)=>{for(var r in t||(t={}))Yr1.call(t,r)&&Ly(e,r,t[r]);if(wy)for(var r of wy(t))Zr1.call(t,r)&&Ly(e,r,t[r]);return e},Kr1=(e,t)=>qr1(e,Gr1(t));function Xr1(e,t){if(!t)return{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[9],color:e.white};const r=e.fn.variant({variant:"filled",color:t,primaryFallback:!1});return{backgroundColor:r.background,color:r.color}}var b_=d1((e,{color:t,radius:r,width:n,multiline:a})=>({tooltip:Kr1(Sy(Sy({},e.fn.fontStyles()),Xr1(e,t)),{lineHeight:e.lineHeight,fontSize:e.fontSizes.sm,borderRadius:e.fn.radius(r),padding:`calc(${e.spacing.xs}px / 2) ${e.spacing.xs}px`,position:"absolute",whiteSpace:a?"unset":"nowrap",pointerEvents:"none",width:n}),arrow:{backgroundColor:"inherit",border:0,zIndex:1}}));const M_={children:"Tooltip component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported"};function Qr1({offset:e,position:t}){const[r,n]=y.useState(!1),a=y.useRef(),{x:c,y:i,reference:o,floating:s,refs:l,update:f,placement:u}=Bu({placement:t,middleware:[Iu({crossAxis:!0,padding:5,rootBoundary:"document"})]}),d=u.includes("right")?e:t.includes("left")?e*-1:0,p=u.includes("bottom")?e:t.includes("top")?e*-1:0,m=y.useCallback(({clientX:v,clientY:H})=>{o({getBoundingClientRect(){return{width:0,height:0,x:v,y:H,left:v+d,top:H+p,right:v,bottom:H}}})},[o]);return y.useEffect(()=>{if(l.floating.current){const v=a.current;v.addEventListener("mousemove",m);const H=l6(l.floating.current);return H.forEach(h=>{h.addEventListener("scroll",f)}),()=>{v.removeEventListener("mousemove",m),H.forEach(h=>{h.removeEventListener("scroll",f)})}}},[o,l.floating,f,m,r]),{handleMouseMove:m,x:c,y:i,opened:r,setOpened:n,boundaryRef:a,floating:s}}var Jr1=Object.defineProperty,en1=Object.defineProperties,tn1=Object.getOwnPropertyDescriptors,Va=Object.getOwnPropertySymbols,V_=Object.prototype.hasOwnProperty,x_=Object.prototype.propertyIsEnumerable,ky=(e,t,r)=>t in e?Jr1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,no=(e,t)=>{for(var r in t||(t={}))V_.call(t,r)&&ky(e,r,t[r]);if(Va)for(var r of Va(t))x_.call(t,r)&&ky(e,r,t[r]);return e},ao=(e,t)=>en1(e,tn1(t)),rn1=(e,t)=>{var r={};for(var n in e)V_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Va)for(var n of Va(e))t.indexOf(n)<0&&x_.call(e,n)&&(r[n]=e[n]);return r};const nn1={refProp:"ref",withinPortal:!0,offset:10,position:"right",zIndex:V6("popover")};function w_(e){var t;const r=w1("TooltipFloating",nn1,e),{children:n,refProp:a,withinPortal:c,style:i,className:o,classNames:s,styles:l,unstyled:f,radius:u,color:d,label:p,offset:m,position:v,multiline:H,width:h,zIndex:g,disabled:z}=r,b=rn1(r,["children","refProp","withinPortal","style","className","classNames","styles","unstyled","radius","color","label","offset","position","multiline","width","zIndex","disabled"]),{handleMouseMove:x,x:C,y:M,opened:S,boundaryRef:k,floating:w,setOpened:P}=Qr1({offset:m,position:v}),{classes:N,cx:$}=b_({radius:u,color:d,multiline:H,width:h},{name:"TooltipFloating",classNames:s,styles:l,unstyled:f});if(!P7(n))throw new Error(M_.children);const A=o3(k,n.ref),D=R=>{var T,F;(F=(T=n.props).onMouseEnter)==null||F.call(T,R),x(R),P(!0)},j=R=>{var T,F;(F=(T=n.props).onMouseLeave)==null||F.call(T,R),P(!1)};return z?V.createElement(V.Fragment,null,n):V.createElement(V.Fragment,null,V.createElement(w8,{withinPortal:c},V.createElement(z1,ao(no({},b),{ref:w,className:$(N.tooltip,o),style:ao(no({},i),{zIndex:g,display:S?"block":"none",top:M??"",left:(t=Math.round(C))!=null?t:""})}),p)),y.cloneElement(n,ao(no({},n.props),{[a]:A,onMouseEnter:D,onMouseLeave:j})))}w_.displayName="@mantine/core/TooltipFloating";function an1(e){const[t,r]=y.useState(!1),a=typeof e.opened=="boolean"?e.opened:t,c=Wr1(),i=k4(),{delay:o,currentId:s,setCurrentId:l}=WL(),f=y.useCallback(S=>{r(S),S&&l(i)},[l,i]),{x:u,y:d,reference:p,floating:m,context:v,refs:H,update:h,placement:g,middlewareData:{arrow:{x:z,y:b}={}}}=Bu({placement:e.position,open:a,onOpenChange:f,middleware:[DL(e.offset),Iu({padding:8}),TL(),FL({element:e.arrowRef,padding:e.arrowOffset}),...e.inline?[RL()]:[]]}),{getReferenceProps:x,getFloatingProps:C}=d61([h61(v,{enabled:e.events.hover,delay:c?o:{open:e.openDelay,close:e.closeDelay},mouseOnly:!e.events.touch}),b61(v,{enabled:e.events.focus,keyboardOnly:!0}),z61(v,{role:"tooltip"}),H61(v,{enabled:typeof e.opened===void 0}),g61(v,{id:i})]);return UL({opened:a,positionDependencies:e.positionDependencies,floating:{refs:H,update:h}}),B2(()=>{var S;(S=e.onPositionChange)==null||S.call(e,g)},[g]),{x:u,y:d,arrowX:z,arrowY:b,reference:p,floating:m,getFloatingProps:C,getReferenceProps:x,isGroupPhase:a&&s&&s!==i,opened:a,placement:g}}var cn1=Object.defineProperty,in1=Object.defineProperties,on1=Object.getOwnPropertyDescriptors,xa=Object.getOwnPropertySymbols,L_=Object.prototype.hasOwnProperty,S_=Object.prototype.propertyIsEnumerable,_y=(e,t,r)=>t in e?cn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Z8=(e,t)=>{for(var r in t||(t={}))L_.call(t,r)&&_y(e,r,t[r]);if(xa)for(var r of xa(t))S_.call(t,r)&&_y(e,r,t[r]);return e},sn1=(e,t)=>in1(e,on1(t)),ln1=(e,t)=>{var r={};for(var n in e)L_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&xa)for(var n of xa(e))t.indexOf(n)<0&&S_.call(e,n)&&(r[n]=e[n]);return r};const fn1={position:"top",refProp:"ref",withinPortal:!1,inline:!1,arrowSize:4,arrowOffset:5,arrowRadius:0,arrowPosition:"side",offset:5,transition:"fade",transitionDuration:100,width:"auto",events:{hover:!0,focus:!1,touch:!1},zIndex:V6("popover"),positionDependencies:[]},g9=y.forwardRef((e,t)=>{const r=y.useRef(null),n=w1("Tooltip",fn1,e),{children:a,position:c,refProp:i,label:o,openDelay:s,closeDelay:l,onPositionChange:f,opened:u,withinPortal:d,radius:p,color:m,classNames:v,styles:H,unstyled:h,style:g,className:z,withArrow:b,arrowSize:x,arrowOffset:C,arrowRadius:M,arrowPosition:S,offset:k,transition:w,transitionDuration:P,multiline:N,width:$,events:A,zIndex:D,disabled:j,positionDependencies:R,onClick:T,onMouseEnter:F,onMouseLeave:L,inline:q}=n,Z=ln1(n,["children","position","refProp","label","openDelay","closeDelay","onPositionChange","opened","withinPortal","radius","color","classNames","styles","unstyled","style","className","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","offset","transition","transitionDuration","multiline","width","events","zIndex","disabled","positionDependencies","onClick","onMouseEnter","onMouseLeave","inline"]),{classes:_,cx:t1,theme:v1}=b_({radius:p,color:m,width:$,multiline:N},{name:"Tooltip",classNames:v,styles:H,unstyled:h}),X=an1({position:cS(v1.dir,c),closeDelay:l,openDelay:s,onPositionChange:f,opened:u,events:A,arrowRef:r,arrowOffset:C,offset:k+(b?x/2:0),positionDependencies:[...R,a],inline:q});if(!P7(a))throw new Error(M_.children);const s1=o3(X.reference,a.ref,t);return V.createElement(V.Fragment,null,V.createElement(w8,{withinPortal:d},V.createElement(m9,{mounted:!j&&X.opened,transition:w,duration:X.isGroupPhase?10:P},b1=>{var f1,M1;return V.createElement(z1,Z8(Z8({},Z),X.getFloatingProps({ref:X.floating,className:_.tooltip,style:sn1(Z8(Z8({},g),b1),{zIndex:D,top:(f1=X.y)!=null?f1:0,left:(M1=X.x)!=null?M1:0})})),o,V.createElement(Wu,{ref:r,arrowX:X.arrowX,arrowY:X.arrowY,visible:b,withBorder:!1,position:X.placement,arrowSize:x,arrowOffset:C,arrowRadius:M,arrowPosition:S,className:_.arrow}))})),y.cloneElement(a,X.getReferenceProps(Z8({onClick:T,onMouseEnter:F,onMouseLeave:L,onMouseMove:e.onMouseMove,onPointerDown:e.onPointerDown,onPointerEnter:e.onPointerEnter,[i]:s1,className:t1(z,a.props.className)},a.props))))});g9.Group=H_;g9.Floating=w_;g9.displayName="@mantine/core/Tooltip";const z9=g9;var un1=Object.defineProperty,dn1=Object.defineProperties,pn1=Object.getOwnPropertyDescriptors,wa=Object.getOwnPropertySymbols,k_=Object.prototype.hasOwnProperty,__=Object.prototype.propertyIsEnumerable,Py=(e,t,r)=>t in e?un1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,gl=(e,t)=>{for(var r in t||(t={}))k_.call(t,r)&&Py(e,r,t[r]);if(wa)for(var r of wa(t))__.call(t,r)&&Py(e,r,t[r]);return e},P_=(e,t)=>dn1(e,pn1(t)),Ny=(e,t)=>{var r={};for(var n in e)k_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&wa)for(var n of wa(e))t.indexOf(n)<0&&__.call(e,n)&&(r[n]=e[n]);return r};function mn1(e){return e.reduce((t,r)=>(t.sections.push(P_(gl({},r),{accumulated:t.accumulated})),t.accumulated+=r.value,t),{accumulated:0,sections:[]}).sections}const hn1={size:"md",radius:"sm",striped:!1,animate:!1,label:""},La=y.forwardRef((e,t)=>{const r=w1("Progress",hn1,e),{className:n,value:a,color:c,size:i,radius:o,striped:s,animate:l,label:f,"aria-label":u,classNames:d,styles:p,sections:m,unstyled:v}=r,H=Ny(r,["className","value","color","size","radius","striped","animate","label","aria-label","classNames","styles","sections","unstyled"]),{classes:h,cx:g,theme:z}=jr1({color:c,size:i,radius:o,striped:s||l,animate:l},{classNames:d,styles:p,unstyled:v,name:"Progress"}),b=Array.isArray(m)?mn1(m).map((x,C)=>{var M=x,{tooltip:S,accumulated:k,value:w,label:P,color:N}=M,$=Ny(M,["tooltip","accumulated","value","label","color"]);return V.createElement(z9.Floating,{label:S,disabled:!S,key:C},V.createElement(z1,P_(gl({},$),{className:g(h.bar,$.className),sx:{width:`${w}%`,left:`${k}%`,backgroundColor:z.fn.variant({variant:"filled",primaryFallback:!1,color:N||z.primaryColor}).background}}),P&&V.createElement(Z1,{className:h.label},P)))}):null;return V.createElement(z1,gl({className:g(h.root,n),ref:t},H),b||V.createElement("div",{role:"progressbar","aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":a,"aria-label":u,className:h.bar,style:{width:`${a}%`}},f?V.createElement(Z1,{className:h.label},f):""))});La.displayName="@mantine/core/Progress";function vn1({size:e,thickness:t,sum:r,value:n,root:a,offset:c}){const i=(e*.9-t*2)/2,o=Math.PI*i*2/100,s=a?`${(100-r)*o}, ${r*o}`:`${n*o}, ${(100-n)*o}`;return{strokeWidth:t,cx:e/2,cy:e/2,r:i,transform:a?`scale(1, -1) translate(0, -${e})`:null,strokeDasharray:s,strokeDashoffset:a?0:c}}var gn1=Object.defineProperty,zn1=Object.defineProperties,yn1=Object.getOwnPropertyDescriptors,Sa=Object.getOwnPropertySymbols,N_=Object.prototype.hasOwnProperty,O_=Object.prototype.propertyIsEnumerable,Oy=(e,t,r)=>t in e?gn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ay=(e,t)=>{for(var r in t||(t={}))N_.call(t,r)&&Oy(e,r,t[r]);if(Sa)for(var r of Sa(t))O_.call(t,r)&&Oy(e,r,t[r]);return e},Cn1=(e,t)=>zn1(e,yn1(t)),Hn1=(e,t)=>{var r={};for(var n in e)N_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Sa)for(var n of Sa(e))t.indexOf(n)<0&&O_.call(e,n)&&(r[n]=e[n]);return r};function A_(e){var t=e,{size:r,value:n,offset:a,sum:c,thickness:i,root:o,color:s,lineRoundCaps:l,tooltip:f}=t,u=Hn1(t,["size","value","offset","sum","thickness","root","color","lineRoundCaps","tooltip"]);const d=V2(),p=d.fn.themeColor(s||(d.colorScheme==="dark"?"dark":"gray"),s?d.fn.primaryShade():d.colorScheme==="dark"?4:1,!1);return V.createElement(z9.Floating,{disabled:!f,label:f},V.createElement("circle",Ay(Cn1(Ay({},u),{fill:"none",strokeLinecap:l?"round":"butt",stroke:p}),vn1({sum:c,size:r,thickness:i,value:n,offset:a,root:o}))))}A_.displayName="@mantine/core/Curve";var bn1=Object.defineProperty,Mn1=Object.defineProperties,Vn1=Object.getOwnPropertyDescriptors,Ey=Object.getOwnPropertySymbols,xn1=Object.prototype.hasOwnProperty,wn1=Object.prototype.propertyIsEnumerable,$y=(e,t,r)=>t in e?bn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,K8=(e,t)=>{for(var r in t||(t={}))xn1.call(t,r)&&$y(e,r,t[r]);if(Ey)for(var r of Ey(t))wn1.call(t,r)&&$y(e,r,t[r]);return e},X8=(e,t)=>Mn1(e,Vn1(t));function Ln1({size:e,thickness:t,sections:r,renderRoundedLineCaps:n,rootColor:a}){const c=r.reduce((f,u)=>f+u.value,0),i=Math.PI*((e*.9-t*2)/2)*2;let o=i;const s=[],l=[];for(let f=0;f2){l.push(X8(K8({},s[0]),{lineRoundCaps:n})),l.push(X8(K8({},s[s.length-2]),{lineRoundCaps:n}));for(let f=1;f<=s.length-3;f+=1)l.push(X8(K8({},s[f]),{lineRoundCaps:!1}))}else l.push(X8(K8({},s[0]),{lineRoundCaps:n}));return l}var Sn1=d1({root:{position:"relative"},label:{position:"absolute",top:"50%",transform:"translateY(-50%)"}}),kn1=Object.defineProperty,_n1=Object.defineProperties,Pn1=Object.getOwnPropertyDescriptors,ka=Object.getOwnPropertySymbols,E_=Object.prototype.hasOwnProperty,$_=Object.prototype.propertyIsEnumerable,Dy=(e,t,r)=>t in e?kn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,co=(e,t)=>{for(var r in t||(t={}))E_.call(t,r)&&Dy(e,r,t[r]);if(ka)for(var r of ka(t))$_.call(t,r)&&Dy(e,r,t[r]);return e},Nn1=(e,t)=>_n1(e,Pn1(t)),On1=(e,t)=>{var r={};for(var n in e)E_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ka)for(var n of ka(e))t.indexOf(n)<0&&$_.call(e,n)&&(r[n]=e[n]);return r};const An1={size:120,thickness:12},td=y.forwardRef((e,t)=>{const r=w1("RingProgress",An1,e),{className:n,style:a,label:c,sections:i,size:o,thickness:s,classNames:l,styles:f,roundCaps:u,rootColor:d,unstyled:p}=r,m=On1(r,["className","style","label","sections","size","thickness","classNames","styles","roundCaps","rootColor","unstyled"]),{classes:v,cx:H}=Sn1(null,{classNames:l,styles:f,unstyled:p,name:"RingProgress"}),h=Ln1({size:o,thickness:s,sections:i,renderRoundedLineCaps:u,rootColor:d}).map(({data:g,sum:z,root:b,lineRoundCaps:x,offset:C},M)=>V.createElement(A_,Nn1(co({},g),{key:M,size:o,thickness:s,sum:z,offset:C,color:g?.color,root:b,lineRoundCaps:x})));return V.createElement(z1,co({style:co({width:o,height:o},a),className:H(v.root,n),ref:t},m),V.createElement("svg",{width:o,height:o,style:{transform:"rotate(-90deg)"}},h),c&&V.createElement("div",{className:v.label,style:{right:s*2,left:s*2}},c))});td.displayName="@mantine/core/RingProgress";function En1({data:e,searchable:t,limit:r,searchValue:n,filter:a,value:c,filterDataOnExactSearchMatch:i}){if(!t)return e;const o=c!=null&&e.find(l=>l.value===c)||null;if(o&&!i&&o?.label===n){if(r){if(r>=e.length)return e;const l=e.indexOf(o),f=l+r,u=f-e.length;return u>0?e.slice(l-u):e.slice(l,f)}return e}const s=[];for(let l=0;l=r));l+=1);return s}var $n1=d1(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}})),Dn1=Object.defineProperty,Tn1=Object.defineProperties,Rn1=Object.getOwnPropertyDescriptors,_a=Object.getOwnPropertySymbols,D_=Object.prototype.hasOwnProperty,T_=Object.prototype.propertyIsEnumerable,Ty=(e,t,r)=>t in e?Dn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Q8=(e,t)=>{for(var r in t||(t={}))D_.call(t,r)&&Ty(e,r,t[r]);if(_a)for(var r of _a(t))T_.call(t,r)&&Ty(e,r,t[r]);return e},io=(e,t)=>Tn1(e,Rn1(t)),Fn1=(e,t)=>{var r={};for(var n in e)D_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&_a)for(var n of _a(e))t.indexOf(n)<0&&T_.call(e,n)&&(r[n]=e[n]);return r};function In1(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function jn1(e,t){return!!e&&!t.some(r=>r.label.toLowerCase()===e.toLowerCase())}const Bn1={required:!1,size:"sm",shadow:"sm",itemComponent:_u,transition:"fade",transitionDuration:0,initiallyOpened:!1,filter:In1,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:jn1,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:V6("popover"),clearButtonTabIndex:0,positionDependencies:[],dropdownPosition:"flip"},R_=y.forwardRef((e,t)=>{const r=Uu("Select",Bn1,e),{inputProps:n,wrapperProps:a,shadow:c,data:i,value:o,defaultValue:s,onChange:l,itemComponent:f,onKeyDown:u,onBlur:d,onFocus:p,transition:m,transitionDuration:v,initiallyOpened:H,transitionTimingFunction:h,unstyled:g,classNames:z,styles:b,filter:x,maxDropdownHeight:C,searchable:M,clearable:S,nothingFound:k,clearButtonLabel:w,limit:P,disabled:N,onSearchChange:$,searchValue:A,rightSection:D,rightSectionWidth:j,creatable:R,getCreateLabel:T,shouldCreate:F,selectOnBlur:L,onCreate:q,dropdownComponent:Z,onDropdownClose:_,onDropdownOpen:t1,withinPortal:v1,switchDirectionOnFlip:X,zIndex:s1,name:b1,dropdownPosition:f1,allowDeselect:M1,placeholder:a1,filterDataOnExactSearchMatch:u1,clearButtonTabIndex:x1,form:E,positionDependencies:B,readOnly:I}=r,Y=Fn1(r,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transition","transitionDuration","initiallyOpened","transitionTimingFunction","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","clearButtonLabel","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","clearButtonTabIndex","form","positionDependencies","readOnly"]),{classes:K,cx:U,theme:r1}=$n1(),[m1,k1]=y.useState(H),[D1,S1]=y.useState(-1),N1=y.useRef(),B1=y.useRef({}),[W,G]=y.useState("column"),e1=W==="column",{scrollIntoView:c1,targetRef:y1,scrollableRef:Q1}=kw({duration:0,offset:5,cancelable:!1,isList:!0}),i1=M1===void 0?S:M1,n1=C1=>{if(m1!==C1){k1(C1);const Y1=C1?t1:_;typeof Y1=="function"&&Y1()}},R1=R&&typeof T=="function";let G1=null;const A1=i.map(C1=>typeof C1=="string"?{label:C1,value:C1}:C1),z3=Qx({data:A1}),[r2,_4,f0]=U3({value:o,defaultValue:s,finalValue:null,onChange:l}),X2=z3.find(C1=>C1.value===r2),[y3,P4]=U3({value:A,defaultValue:X2?.label||"",finalValue:void 0,onChange:$}),d2=C1=>{P4(C1),M&&typeof $=="function"&&$(C1)},L2=()=>{var C1;I||(_4(null),f0||d2(""),(C1=N1.current)==null||C1.focus())};y.useEffect(()=>{const C1=z3.find(Y1=>Y1.value===r2);C1?d2(C1.label):(!R1||!r2)&&d2("")},[r2]),y.useEffect(()=>{X2&&(!M||!m1)&&d2(X2.label)},[X2?.label]);const s3=C1=>{if(!I)if(i1&&X2?.value===C1.value)_4(null),n1(!1);else{if(C1.creatable&&typeof q=="function"){const Y1=q(C1.value);typeof Y1<"u"&&Y1!==null&&_4(typeof Y1=="string"?Y1:Y1.value)}else _4(C1.value);f0||d2(C1.label),S1(-1),n1(!1),N1.current.focus()}},V1=En1({data:z3,searchable:M,limit:P,searchValue:y3,filter:x,filterDataOnExactSearchMatch:u1,value:r2});R1&&F(y3,V1)&&(G1=T(y3),V1.push({label:y3,value:y3,creatable:!0}));const k3=(C1,Y1,I1)=>{let k2=C1;for(;I1(k2);)if(k2=Y1(k2),!V1[k2].disabled)return k2;return C1};B2(()=>{S1(-1)},[y3]);const ye=r2?V1.findIndex(C1=>C1.value===r2):0,S2=!I&&(V1.length>0?m1:m1&&!!k),Ce=()=>{S1(C1=>{var Y1;const I1=k3(C1,k2=>k2-1,k2=>k2>0);return y1.current=B1.current[(Y1=V1[I1])==null?void 0:Y1.value],S2&&c1({alignment:e1?"start":"end"}),I1})},J7=()=>{S1(C1=>{var Y1;const I1=k3(C1,k2=>k2+1,k2=>k2window.setTimeout(()=>{var C1;y1.current=B1.current[(C1=V1[ye])==null?void 0:C1.value],c1({alignment:e1?"end":"start"})},0);B2(()=>{S2&&He()},[S2]);const u0=C1=>{switch(typeof u=="function"&&u(C1),C1.key){case"ArrowUp":{C1.preventDefault(),m1?e1?Ce():J7():(S1(ye),n1(!0),He());break}case"ArrowDown":{C1.preventDefault(),m1?e1?J7():Ce():(S1(ye),n1(!0),He());break}case"Home":{if(!M){C1.preventDefault(),m1||n1(!0);const Y1=V1.findIndex(I1=>!I1.disabled);S1(Y1),S2&&c1({alignment:e1?"end":"start"})}break}case"End":{if(!M){C1.preventDefault(),m1||n1(!0);const Y1=V1.map(I1=>!!I1.disabled).lastIndexOf(!1);S1(Y1),S2&&c1({alignment:e1?"end":"start"})}break}case"Escape":{C1.preventDefault(),n1(!1),S1(-1);break}case" ":{M||(C1.preventDefault(),V1[D1]&&m1?s3(V1[D1]):(n1(!0),S1(ye),He()));break}case"Enter":M||C1.preventDefault(),V1[D1]&&m1&&(C1.preventDefault(),s3(V1[D1]))}},et=C1=>{typeof d=="function"&&d(C1);const Y1=z3.find(I1=>I1.value===r2);L&&V1[D1]&&m1&&s3(V1[D1]),d2(Y1?.label||""),n1(!1)},ei=C1=>{typeof p=="function"&&p(C1),M&&n1(!0)},tt=C1=>{I||(d2(C1.currentTarget.value),S&&C1.currentTarget.value===""&&_4(null),S1(-1),n1(!0))},O8=()=>{I||(n1(!m1),r2&&!m1&&S1(ye))};return V.createElement(O2.Wrapper,io(Q8({},a),{__staticSelector:"Select"}),V.createElement(ne,{opened:S2,transition:m,transitionDuration:v,shadow:"sm",withinPortal:v1,__staticSelector:"Select",onDirectionChange:G,switchDirectionOnFlip:X,zIndex:s1,dropdownPosition:f1,positionDependencies:B,classNames:z,styles:b,unstyled:g},V.createElement(ne.Target,null,V.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":S2?`${n.id}-items`:null,"aria-controls":n.id,"aria-expanded":S2,onMouseLeave:()=>S1(-1),tabIndex:-1},V.createElement("input",{type:"hidden",name:b1,value:r2||"",form:E,disabled:N}),V.createElement(O2,Q8(io(Q8(Q8({autoComplete:"off",type:"search"},n),Y),{ref:o3(t,N1),onKeyDown:u0,__staticSelector:"Select",value:y3,placeholder:a1,onChange:tt,"aria-autocomplete":"list","aria-controls":S2?`${n.id}-items`:null,"aria-activedescendant":D1>=0?`${n.id}-${D1}`:null,onMouseDown:O8,onBlur:et,onFocus:ei,readOnly:!M||I,disabled:N,"data-mantine-stop-propagation":S2,name:null,classNames:io(Q8({},z),{input:U({[K.input]:!M},z?.input)})}),o_({theme:r1,rightSection:D,rightSectionWidth:j,styles:b,size:n.size,shouldClear:S&&!!X2,clearButtonLabel:w,onClear:L2,error:a.error,clearButtonTabIndex:x1,disabled:N,readOnly:I}))))),V.createElement(ne.Dropdown,{component:Z||f9,maxHeight:C,direction:W,id:n.id,innerRef:Q1,__staticSelector:"Select",classNames:z,styles:b},V.createElement(ku,{data:V1,hovered:D1,classNames:z,styles:b,isItemSelected:C1=>C1===r2,uuid:n.id,__staticSelector:"Select",onItemHover:S1,onItemSelect:s3,itemsRefs:B1,itemComponent:f,size:n.size,nothingFound:k,creatable:R1&&!!G1,createLabel:G1,"aria-label":a.label,unstyled:g}))))});R_.displayName="@mantine/core/Select";function F_({value:e,min:t,max:r}){const n=(e-t)/(r-t)*100;return Math.min(Math.max(n,0),100)}function Wn1({value:e,containerWidth:t,min:r,max:n,step:a,precision:c}){const o=(t?Math.min(Math.max(e,0),t)/t:e)*(n-r),s=(o!==0?Math.round(o/a)*a:0)+r,l=Math.max(s,r);return c!==void 0?Number(l.toFixed(c)):l}var Un1=Object.defineProperty,qn1=Object.defineProperties,Gn1=Object.getOwnPropertyDescriptors,Ry=Object.getOwnPropertySymbols,Yn1=Object.prototype.hasOwnProperty,Zn1=Object.prototype.propertyIsEnumerable,Fy=(e,t,r)=>t in e?Un1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kn1=(e,t)=>{for(var r in t||(t={}))Yn1.call(t,r)&&Fy(e,r,t[r]);if(Ry)for(var r of Ry(t))Zn1.call(t,r)&&Fy(e,r,t[r]);return e},Xn1=(e,t)=>qn1(e,Gn1(t));const b3={xs:4,sm:6,md:8,lg:10,xl:12};var Qn1=d1((e,{size:t,disabled:r})=>({root:Xn1(Kn1({},e.fn.fontStyles()),{WebkitTapHighlightColor:"transparent",outline:0,height:e.fn.size({sizes:b3,size:t})*2,display:"flex",alignItems:"center",cursor:r?"not-allowed":"pointer",touchAction:"none"})})),Jn1=Object.defineProperty,ea1=Object.defineProperties,ta1=Object.getOwnPropertyDescriptors,Iy=Object.getOwnPropertySymbols,ra1=Object.prototype.hasOwnProperty,na1=Object.prototype.propertyIsEnumerable,jy=(e,t,r)=>t in e?Jn1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,aa1=(e,t)=>{for(var r in t||(t={}))ra1.call(t,r)&&jy(e,r,t[r]);if(Iy)for(var r of Iy(t))na1.call(t,r)&&jy(e,r,t[r]);return e},ca1=(e,t)=>ea1(e,ta1(t)),ia1=d1((e,{color:t,size:r,disabled:n,thumbSize:a})=>({label:{position:"absolute",top:-36,backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[9],fontSize:e.fontSizes.xs,color:e.white,padding:`calc(${e.spacing.xs}px / 2)`,borderRadius:e.radius.sm,whiteSpace:"nowrap",pointerEvents:"none",userSelect:"none",touchAction:"none"},thumb:ca1(aa1({},e.fn.focusStyles()),{boxSizing:"border-box",position:"absolute",display:n?"none":"flex",height:a||e.fn.size({sizes:b3,size:r})*2,width:a||e.fn.size({sizes:b3,size:r})*2,backgroundColor:e.colorScheme==="dark"?e.fn.themeColor(t,e.fn.primaryShade()):e.white,border:`4px solid ${e.colorScheme==="dark"?e.white:e.fn.themeColor(t,e.fn.primaryShade())}`,color:e.colorScheme==="dark"?e.white:e.fn.themeColor(t,e.fn.primaryShade()),transform:"translate(-50%, -50%)",top:"50%",cursor:"pointer",borderRadius:1e3,alignItems:"center",justifyContent:"center",transitionDuration:"100ms",transitionProperty:"box-shadow, transform",transitionTimingFunction:e.transitionTimingFunction,zIndex:3,userSelect:"none",touchAction:"none"}),dragging:{transform:"translate(-50%, -50%) scale(1.05)",boxShadow:e.shadows.sm}}));const I_=y.forwardRef(({max:e,min:t,value:r,position:n,label:a,dragging:c,onMouseDown:i,color:o,classNames:s,styles:l,size:f,labelTransition:u,labelTransitionDuration:d,labelTransitionTimingFunction:p,labelAlwaysOn:m,thumbLabel:v,onFocus:H,onBlur:h,showLabelOnHover:g,children:z=null,disabled:b,unstyled:x,thumbSize:C},M)=>{const{classes:S,cx:k,theme:w}=ia1({color:o,size:f,disabled:b,thumbSize:C},{classNames:s,styles:l,unstyled:x,name:"Slider"}),[P,N]=y.useState(!1),$=m||c||P||g;return V.createElement(z1,{tabIndex:0,role:"slider","aria-label":v,"aria-valuemax":e,"aria-valuemin":t,"aria-valuenow":r,ref:M,className:k(S.thumb,{[S.dragging]:c}),onFocus:()=>{N(!0),typeof H=="function"&&H()},onBlur:()=>{N(!1),typeof h=="function"&&h()},onTouchStart:i,onMouseDown:i,onClick:A=>A.stopPropagation(),style:{[w.dir==="rtl"?"right":"left"]:`${n}%`}},z,V.createElement(m9,{mounted:a!=null&&$,duration:d,transition:u,timingFunction:p||w.transitionTimingFunction},A=>V.createElement("div",{style:A,className:S.label},a)))});I_.displayName="@mantine/core/SliderThumb";function oa1({mark:e,offset:t,value:r,inverted:n=!1}){return n?typeof t=="number"&&e.value<=t||e.value>=r:typeof t=="number"?e.value>=t&&e.value<=r:e.value<=r}var sa1=d1((e,{size:t,color:r,disabled:n})=>({markWrapper:{position:"absolute",top:0,zIndex:2},mark:{boxSizing:"border-box",border:`${e.fn.size({size:t,sizes:b3})>=8?"2px":"1px"} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,height:e.fn.size({sizes:b3,size:t}),width:e.fn.size({sizes:b3,size:t}),borderRadius:1e3,transform:`translateX(-${e.fn.size({sizes:b3,size:t})/2}px)`,backgroundColor:e.white},markFilled:{borderColor:n?e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[4]:e.fn.variant({variant:"filled",color:r}).background},markLabel:{transform:"translate(-50%, 0)",fontSize:e.fontSizes.sm,color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],marginTop:`calc(${e.spacing.xs}px / 2)`,whiteSpace:"nowrap"}}));function j_({marks:e,color:t,size:r,min:n,max:a,value:c,classNames:i,styles:o,offset:s,onChange:l,disabled:f,unstyled:u,inverted:d}){const{classes:p,cx:m}=sa1({size:r,color:t,disabled:f},{classNames:i,styles:o,unstyled:u,name:"Slider"}),v=e.map((H,h)=>V.createElement(z1,{className:p.markWrapper,sx:{left:`${F_({value:H.value,min:n,max:a})}%`},key:h},V.createElement("div",{className:m(p.mark,{[p.markFilled]:oa1({mark:H,value:c,offset:s,inverted:d})})}),H.label&&V.createElement("div",{className:p.markLabel,onMouseDown:g=>{g.stopPropagation(),l(H.value)},onTouchStart:g=>{g.stopPropagation(),l(H.value)}},H.label)));return V.createElement("div",null,v)}j_.displayName="@mantine/core/SliderMarks";var la1=d1((e,{radius:t,size:r,color:n,disabled:a,inverted:c})=>({track:{position:"relative",height:e.fn.size({sizes:b3,size:r}),width:"100%",marginRight:e.fn.size({size:r,sizes:b3}),marginLeft:e.fn.size({size:r,sizes:b3}),"&::before":{content:'""',position:"absolute",top:0,bottom:0,borderRadius:e.fn.size({size:t,sizes:e.radius}),right:-e.fn.size({size:r,sizes:b3}),left:-e.fn.size({size:r,sizes:b3}),backgroundColor:c?a?e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[4]:e.fn.variant({variant:"filled",color:n}).background:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2],zIndex:0}},bar:{position:"absolute",zIndex:1,top:0,bottom:0,backgroundColor:c?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]:a?e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[4]:e.fn.variant({variant:"filled",color:n}).background,borderRadius:e.fn.size({size:t,sizes:e.radius})}})),fa1=Object.defineProperty,ua1=Object.defineProperties,da1=Object.getOwnPropertyDescriptors,Pa=Object.getOwnPropertySymbols,B_=Object.prototype.hasOwnProperty,W_=Object.prototype.propertyIsEnumerable,By=(e,t,r)=>t in e?fa1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,pa1=(e,t)=>{for(var r in t||(t={}))B_.call(t,r)&&By(e,r,t[r]);if(Pa)for(var r of Pa(t))W_.call(t,r)&&By(e,r,t[r]);return e},ma1=(e,t)=>ua1(e,da1(t)),ha1=(e,t)=>{var r={};for(var n in e)B_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Pa)for(var n of Pa(e))t.indexOf(n)<0&&W_.call(e,n)&&(r[n]=e[n]);return r};function U_(e){var t=e,{filled:r,size:n,color:a,classNames:c,styles:i,radius:o,children:s,offset:l,onMouseLeave:f,onMouseEnter:u,disabled:d,marksOffset:p,unstyled:m,inverted:v}=t,H=ha1(t,["filled","size","color","classNames","styles","radius","children","offset","onMouseLeave","onMouseEnter","disabled","marksOffset","unstyled","inverted"]);const{classes:h}=la1({color:a,size:n,radius:o,disabled:d,inverted:v},{classNames:c,styles:i,unstyled:m,name:"Slider"});return V.createElement("div",{className:h.track,onMouseLeave:f,onMouseEnter:u},V.createElement(z1,{className:h.bar,sx:g=>({left:`calc(${l}% - ${g.fn.size({size:n,sizes:b3})}px)`,width:`calc(${r}% + ${g.fn.size({size:n,sizes:b3})}px)`})}),s,V.createElement(j_,ma1(pa1({},H),{size:n,color:a,offset:p,classNames:c,styles:i,disabled:d,unstyled:m,inverted:v})))}U_.displayName="@mantine/core/SliderTrack";var va1=Object.defineProperty,ga1=Object.defineProperties,za1=Object.getOwnPropertyDescriptors,Na=Object.getOwnPropertySymbols,q_=Object.prototype.hasOwnProperty,G_=Object.prototype.propertyIsEnumerable,Wy=(e,t,r)=>t in e?va1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ya1=(e,t)=>{for(var r in t||(t={}))q_.call(t,r)&&Wy(e,r,t[r]);if(Na)for(var r of Na(t))G_.call(t,r)&&Wy(e,r,t[r]);return e},Ca1=(e,t)=>ga1(e,za1(t)),Ha1=(e,t)=>{var r={};for(var n in e)q_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Na)for(var n of Na(e))t.indexOf(n)<0&&G_.call(e,n)&&(r[n]=e[n]);return r};const Y_=y.forwardRef((e,t)=>{var r=e,{className:n,size:a,classNames:c,styles:i,disabled:o,unstyled:s}=r,l=Ha1(r,["className","size","classNames","styles","disabled","unstyled"]);const{classes:f,cx:u}=Qn1({size:a,disabled:o},{classNames:c,styles:i,unstyled:s,name:"Slider"});return V.createElement(z1,Ca1(ya1({},l),{tabIndex:-1,className:u(f.root,n),ref:t}))});Y_.displayName="@mantine/core/SliderRoot";var ba1=Object.defineProperty,Ma1=Object.defineProperties,Va1=Object.getOwnPropertyDescriptors,Oa=Object.getOwnPropertySymbols,Z_=Object.prototype.hasOwnProperty,K_=Object.prototype.propertyIsEnumerable,Uy=(e,t,r)=>t in e?ba1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,xa1=(e,t)=>{for(var r in t||(t={}))Z_.call(t,r)&&Uy(e,r,t[r]);if(Oa)for(var r of Oa(t))K_.call(t,r)&&Uy(e,r,t[r]);return e},wa1=(e,t)=>Ma1(e,Va1(t)),La1=(e,t)=>{var r={};for(var n in e)Z_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Oa)for(var n of Oa(e))t.indexOf(n)<0&&K_.call(e,n)&&(r[n]=e[n]);return r};const Sa1={size:"md",radius:"xl",min:0,max:100,step:1,marks:[],label:e=>e,labelTransition:"skew-down",labelTransitionDuration:0,labelAlwaysOn:!1,thumbLabel:"",showLabelOnHover:!0,disabled:!1,scale:e=>e},X_=y.forwardRef((e,t)=>{const r=w1("Slider",Sa1,e),{classNames:n,styles:a,color:c,value:i,onChange:o,onChangeEnd:s,size:l,radius:f,min:u,max:d,step:p,precision:m,defaultValue:v,name:H,marks:h,label:g,labelTransition:z,labelTransitionDuration:b,labelTransitionTimingFunction:x,labelAlwaysOn:C,thumbLabel:M,showLabelOnHover:S,thumbChildren:k,disabled:w,unstyled:P,thumbSize:N,scale:$,inverted:A}=r,D=La1(r,["classNames","styles","color","value","onChange","onChangeEnd","size","radius","min","max","step","precision","defaultValue","name","marks","label","labelTransition","labelTransitionDuration","labelTransitionTimingFunction","labelAlwaysOn","thumbLabel","showLabelOnHover","thumbChildren","disabled","unstyled","thumbSize","scale","inverted"]),j=V2(),[R,T]=y.useState(!1),[F,L]=U3({value:typeof i=="number"?j3(i,u,d):i,defaultValue:typeof v=="number"?j3(v,u,d):v,finalValue:j3(0,u,d),onChange:o}),q=y.useRef(F),Z=y.useRef(),_=F_({value:F,min:u,max:d}),t1=$(F),v1=typeof g=="function"?g(t1):g,X=y.useCallback(({x:a1})=>{if(!w){const u1=Wn1({value:a1,min:u,max:d,step:p,precision:m});L(u1),q.current=u1}},[w,u,d,p,m]),{ref:s1,active:b1}=Lu(X,{onScrubEnd:()=>s?.(q.current)},j.dir),f1=a1=>{a1.stopPropagation()},M1=a1=>{if(!w)switch(a1.key){case"ArrowUp":{a1.preventDefault(),Z.current.focus();const u1=Math.min(Math.max(F+p,u),d);s?.(u1),L(u1);break}case"ArrowRight":{a1.preventDefault(),Z.current.focus();const u1=Math.min(Math.max(j.dir==="rtl"?F-p:F+p,u),d);s?.(u1),L(u1);break}case"ArrowDown":{a1.preventDefault(),Z.current.focus();const u1=Math.min(Math.max(F-p,u),d);s?.(u1),L(u1);break}case"ArrowLeft":{a1.preventDefault(),Z.current.focus();const u1=Math.min(Math.max(j.dir==="rtl"?F+p:F-p,u),d);s?.(u1),L(u1);break}case"Home":{a1.preventDefault(),Z.current.focus(),s?.(u),L(u);break}case"End":{a1.preventDefault(),Z.current.focus(),s?.(d),L(d);break}}};return V.createElement(Y_,wa1(xa1({},D),{size:l,ref:o3(s1,t),onKeyDownCapture:M1,onMouseDownCapture:()=>{var a1;return(a1=s1.current)==null?void 0:a1.focus()},classNames:n,styles:a,disabled:w,unstyled:P}),V.createElement(U_,{inverted:A,offset:0,filled:_,marks:h,size:l,radius:f,color:c,min:u,max:d,value:t1,onChange:L,onMouseEnter:S?()=>T(!0):void 0,onMouseLeave:S?()=>T(!1):void 0,classNames:n,styles:a,disabled:w,unstyled:P},V.createElement(I_,{max:d,min:u,value:t1,position:_,dragging:b1,color:c,size:l,label:v1,ref:Z,onMouseDown:f1,labelTransition:z,labelTransitionDuration:b,labelTransitionTimingFunction:x,labelAlwaysOn:C,classNames:n,styles:a,thumbLabel:M,showLabelOnHover:S&&R,disabled:w,unstyled:P,thumbSize:N},k)),V.createElement("input",{type:"hidden",name:H,value:t1}))});X_.displayName="@mantine/core/Slider";var ka1=Object.defineProperty,_a1=Object.defineProperties,Pa1=Object.getOwnPropertyDescriptors,qy=Object.getOwnPropertySymbols,Na1=Object.prototype.hasOwnProperty,Oa1=Object.prototype.propertyIsEnumerable,Gy=(e,t,r)=>t in e?ka1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Aa1=(e,t)=>{for(var r in t||(t={}))Na1.call(t,r)&&Gy(e,r,t[r]);if(qy)for(var r of qy(t))Oa1.call(t,r)&&Gy(e,r,t[r]);return e},Ea1=(e,t)=>_a1(e,Pa1(t));const $a1={xs:16,sm:20,md:26,lg:32,xl:40};var Da1=d1((e,{color:t,size:r,radius:n,gradient:a,variant:c})=>{const i=e.fn.variant({variant:c,color:t||e.primaryColor,gradient:a,primaryFallback:!1}),o=e.fn.size({size:r,sizes:$a1});return{root:Ea1(Aa1({},e.fn.fontStyles()),{display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",width:o,height:o,minWidth:o,minHeight:o,borderRadius:e.fn.radius(n),backgroundColor:i.background,color:i.color,backgroundImage:c==="gradient"?i.background:void 0,border:`${c==="gradient"?0:1}px solid ${i.border}`})}}),Ta1=Object.defineProperty,Aa=Object.getOwnPropertySymbols,Q_=Object.prototype.hasOwnProperty,J_=Object.prototype.propertyIsEnumerable,Yy=(e,t,r)=>t in e?Ta1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ra1=(e,t)=>{for(var r in t||(t={}))Q_.call(t,r)&&Yy(e,r,t[r]);if(Aa)for(var r of Aa(t))J_.call(t,r)&&Yy(e,r,t[r]);return e},Fa1=(e,t)=>{var r={};for(var n in e)Q_.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Aa)for(var n of Aa(e))t.indexOf(n)<0&&J_.call(e,n)&&(r[n]=e[n]);return r};const Ia1={size:"md",variant:"filled"},zl=y.forwardRef((e,t)=>{const r=w1("ThemeIcon",Ia1,e),{className:n,size:a,radius:c,variant:i,color:o,children:s,gradient:l,unstyled:f}=r,u=Fa1(r,["className","size","radius","variant","color","children","gradient","unstyled"]),{classes:d,cx:p}=Da1({variant:i,radius:c,color:o,size:a,gradient:l},{name:"ThemeIcon",unstyled:f});return V.createElement(z1,Ra1({className:p(d.root,n),ref:t},u),s)});zl.displayName="@mantine/core/ThemeIcon";var ja1=Object.defineProperty,Ba1=Object.defineProperties,Wa1=Object.getOwnPropertyDescriptors,Zy=Object.getOwnPropertySymbols,Ua1=Object.prototype.hasOwnProperty,qa1=Object.prototype.propertyIsEnumerable,Ky=(e,t,r)=>t in e?ja1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ga1=(e,t)=>{for(var r in t||(t={}))Ua1.call(t,r)&&Ky(e,r,t[r]);if(Zy)for(var r of Zy(t))qa1.call(t,r)&&Ky(e,r,t[r]);return e},Ya1=(e,t)=>Ba1(e,Wa1(t));function Za1(e,t,r){return typeof e<"u"?e in r.headings.sizes?r.headings.sizes[e].fontSize:e:r.headings.sizes[t].fontSize}function Ka1(e,t,r){return typeof e<"u"&&e in r.headings.sizes?r.headings.sizes[e].lineHeight:r.headings.sizes[t].lineHeight}var Xa1=d1((e,{element:t,weight:r,size:n,inline:a})=>({root:Ya1(Ga1({},e.fn.fontStyles()),{fontFamily:e.headings.fontFamily,fontWeight:r||e.headings.sizes[t].fontWeight||e.headings.fontWeight,fontSize:Za1(n,t,e),lineHeight:a?1:Ka1(n,t,e),margin:0})})),Qa1=Object.defineProperty,Ea=Object.getOwnPropertySymbols,eP=Object.prototype.hasOwnProperty,tP=Object.prototype.propertyIsEnumerable,Xy=(e,t,r)=>t in e?Qa1(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ja1=(e,t)=>{for(var r in t||(t={}))eP.call(t,r)&&Xy(e,r,t[r]);if(Ea)for(var r of Ea(t))tP.call(t,r)&&Xy(e,r,t[r]);return e},ec1=(e,t)=>{var r={};for(var n in e)eP.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ea)for(var n of Ea(e))t.indexOf(n)<0&&tP.call(e,n)&&(r[n]=e[n]);return r};const tc1={order:1},xr=y.forwardRef((e,t)=>{const r=w1("Title",tc1,e),{className:n,order:a,children:c,unstyled:i,size:o,weight:s,inline:l}=r,f=ec1(r,["className","order","children","unstyled","size","weight","inline"]),{classes:u,cx:d}=Xa1({element:`h${a}`,weight:s,size:o,inline:l},{name:"Title",unstyled:i});return[1,2,3,4,5,6].includes(a)?V.createElement(Z1,Ja1({component:`h${a}`,ref:t,className:d(u.root,n)},f),c):null});xr.displayName="@mantine/core/Title";function $a(e){"@babel/helpers - typeof";return $a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$a(e)}var rc1=/^\s+/,nc1=/\s+$/;function H1(e,t){if(e=e||"",t=t||{},e instanceof H1)return e;if(!(this instanceof H1))return new H1(e,t);var r=ac1(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||r.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}H1.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},getLuminance:function(){var t=this.toRgb(),r,n,a,c,i,o;return r=t.r/255,n=t.g/255,a=t.b/255,r<=.03928?c=r/12.92:c=Math.pow((r+.055)/1.055,2.4),n<=.03928?i=n/12.92:i=Math.pow((n+.055)/1.055,2.4),a<=.03928?o=a/12.92:o=Math.pow((a+.055)/1.055,2.4),.2126*c+.7152*i+.0722*o},setAlpha:function(t){return this._a=rP(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=Jy(this._r,this._g,this._b);return{h:t.h*360,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=Jy(this._r,this._g,this._b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.v*100);return this._a==1?"hsv("+r+", "+n+"%, "+a+"%)":"hsva("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var t=Qy(this._r,this._g,this._b);return{h:t.h*360,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=Qy(this._r,this._g,this._b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.l*100);return this._a==1?"hsl("+r+", "+n+"%, "+a+"%)":"hsla("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return eC(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return sc1(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(p2(this._r,255)*100)+"%",g:Math.round(p2(this._g,255)*100)+"%",b:Math.round(p2(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(p2(this._r,255)*100)+"%, "+Math.round(p2(this._g,255)*100)+"%, "+Math.round(p2(this._b,255)*100)+"%)":"rgba("+Math.round(p2(this._r,255)*100)+"%, "+Math.round(p2(this._g,255)*100)+"%, "+Math.round(p2(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Cc1[eC(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var r="#"+tC(this._r,this._g,this._b,this._a),n=r,a=this._gradientType?"GradientType = 1, ":"";if(t){var c=H1(t);n="#"+tC(c._r,c._g,c._b,c._a)}return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+r+",endColorstr="+n+")"},toString:function(t){var r=!!t;t=t||this._format;var n=!1,a=this._a<1&&this._a>=0,c=!r&&a&&(t==="hex"||t==="hex6"||t==="hex3"||t==="hex4"||t==="hex8"||t==="name");return c?t==="name"&&this._a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return H1(this.toString())},_applyModification:function(t,r){var n=t.apply(null,[this].concat([].slice.call(r)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(dc1,arguments)},brighten:function(){return this._applyModification(pc1,arguments)},darken:function(){return this._applyModification(mc1,arguments)},desaturate:function(){return this._applyModification(lc1,arguments)},saturate:function(){return this._applyModification(fc1,arguments)},greyscale:function(){return this._applyModification(uc1,arguments)},spin:function(){return this._applyModification(hc1,arguments)},_applyCombination:function(t,r){return t.apply(null,[this].concat([].slice.call(r)))},analogous:function(){return this._applyCombination(zc1,arguments)},complement:function(){return this._applyCombination(vc1,arguments)},monochromatic:function(){return this._applyCombination(yc1,arguments)},splitcomplement:function(){return this._applyCombination(gc1,arguments)},triad:function(){return this._applyCombination(rC,[3])},tetrad:function(){return this._applyCombination(rC,[4])}};H1.fromRatio=function(e,t){if($a(e)=="object"){var r={};for(var n in e)e.hasOwnProperty(n)&&(n==="a"?r[n]=e[n]:r[n]=d5(e[n]));e=r}return H1(e,t)};function ac1(e){var t={r:0,g:0,b:0},r=1,n=null,a=null,c=null,i=!1,o=!1;return typeof e=="string"&&(e=Vc1(e)),$a(e)=="object"&&(e6(e.r)&&e6(e.g)&&e6(e.b)?(t=cc1(e.r,e.g,e.b),i=!0,o=String(e.r).substr(-1)==="%"?"prgb":"rgb"):e6(e.h)&&e6(e.s)&&e6(e.v)?(n=d5(e.s),a=d5(e.v),t=oc1(e.h,n,a),i=!0,o="hsv"):e6(e.h)&&e6(e.s)&&e6(e.l)&&(n=d5(e.s),c=d5(e.l),t=ic1(e.h,n,c),i=!0,o="hsl"),e.hasOwnProperty("a")&&(r=e.a)),r=rP(r),{ok:i,format:e.format||o,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}function cc1(e,t,r){return{r:p2(e,255)*255,g:p2(t,255)*255,b:p2(r,255)*255}}function Qy(e,t,r){e=p2(e,255),t=p2(t,255),r=p2(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),c,i,o=(n+a)/2;if(n==a)c=i=0;else{var s=n-a;switch(i=o>.5?s/(2-n-a):s/(n+a),n){case e:c=(t-r)/s+(t1&&(u-=1),u<1/6?l+(f-l)*6*u:u<1/2?f:u<2/3?l+(f-l)*(2/3-u)*6:l}if(t===0)n=a=c=r;else{var o=r<.5?r*(1+t):r+t-r*t,s=2*r-o;n=i(s,o,e+1/3),a=i(s,o,e),c=i(s,o,e-1/3)}return{r:n*255,g:a*255,b:c*255}}function Jy(e,t,r){e=p2(e,255),t=p2(t,255),r=p2(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),c,i,o=n,s=n-a;if(i=n===0?0:s/n,n==a)c=0;else{switch(n){case e:c=(t-r)/s+(t>1)+720)%360;--t;)n.h=(n.h+a)%360,c.push(H1(n));return c}function yc1(e,t){t=t||6;for(var r=H1(e).toHsv(),n=r.h,a=r.s,c=r.v,i=[],o=1/t;t--;)i.push(H1({h:n,s:a,v:c})),c=(c+o)%1;return i}H1.mix=function(e,t,r){r=r===0?0:r||50;var n=H1(e).toRgb(),a=H1(t).toRgb(),c=r/100,i={r:(a.r-n.r)*c+n.r,g:(a.g-n.g)*c+n.g,b:(a.b-n.b)*c+n.b,a:(a.a-n.a)*c+n.a};return H1(i)};H1.readability=function(e,t){var r=H1(e),n=H1(t);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)};H1.isReadable=function(e,t,r){var n=H1.readability(e,t),a,c;switch(c=!1,a=xc1(r),a.level+a.size){case"AAsmall":case"AAAlarge":c=n>=4.5;break;case"AAlarge":c=n>=3;break;case"AAAsmall":c=n>=7;break}return c};H1.mostReadable=function(e,t,r){var n=null,a=0,c,i,o,s;r=r||{},i=r.includeFallbackColors,o=r.level,s=r.size;for(var l=0;la&&(a=c,n=H1(t[l]));return H1.isReadable(e,n,{level:o,size:s})||!i?n:(r.includeFallbackColors=!1,H1.mostReadable(e,["#fff","#000"],r))};var yl=H1.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Cc1=H1.hexNames=Hc1(yl);function Hc1(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}function rP(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function p2(e,t){bc1(e)&&(e="100%");var r=Mc1(e);return e=Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function y9(e){return Math.min(1,Math.max(0,e))}function N3(e){return parseInt(e,16)}function bc1(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function Mc1(e){return typeof e=="string"&&e.indexOf("%")!=-1}function z4(e){return e.length==1?"0"+e:""+e}function d5(e){return e<=1&&(e=e*100+"%"),e}function nP(e){return Math.round(parseFloat(e)*255).toString(16)}function nC(e){return N3(e)/255}var d4=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",r="(?:"+t+")|(?:"+e+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{CSS_UNIT:new RegExp(r),rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function e6(e){return!!d4.CSS_UNIT.exec(e)}function Vc1(e){e=e.replace(rc1,"").replace(nc1,"").toLowerCase();var t=!1;if(yl[e])e=yl[e],t=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=d4.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=d4.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=d4.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=d4.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=d4.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=d4.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=d4.hex8.exec(e))?{r:N3(r[1]),g:N3(r[2]),b:N3(r[3]),a:nC(r[4]),format:t?"name":"hex8"}:(r=d4.hex6.exec(e))?{r:N3(r[1]),g:N3(r[2]),b:N3(r[3]),format:t?"name":"hex"}:(r=d4.hex4.exec(e))?{r:N3(r[1]+""+r[1]),g:N3(r[2]+""+r[2]),b:N3(r[3]+""+r[3]),a:nC(r[4]+""+r[4]),format:t?"name":"hex8"}:(r=d4.hex3.exec(e))?{r:N3(r[1]+""+r[1]),g:N3(r[2]+""+r[2]),b:N3(r[3]+""+r[3]),format:t?"name":"hex"}:!1}function xc1(e){var t,r;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),t!=="AA"&&t!=="AAA"&&(t="AA"),r!=="small"&&r!=="large"&&(r="small"),{level:t,size:r}}const Qe={h1:({node:e,...t})=>O.jsx(xr,{...t}),h2:({node:e,...t})=>O.jsx(xr,{order:2,...t}),h3:({node:e,...t})=>O.jsx(xr,{order:3,...t})};function aC(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function p1(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r