From 4a7ea9eb29bb4e3ec4a4c682ffe0bf17d14206da Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Sun, 15 Mar 2026 16:27:43 -0700 Subject: [PATCH] Always valodate fanout configs on save --- app/routers/fanout.py | 59 +++++++----------- ...-C20Gx7-Q.js => BotCodeEditor-D8HqJbrh.js} | Bin 467083 -> 467083 bytes ...Q.js.map => BotCodeEditor-D8HqJbrh.js.map} | Bin 1956915 -> 1956915 bytes ...l-D45MeFE8.js => CrackerPanel-CQP9hluh.js} | Bin 129410 -> 129410 bytes ...E8.js.map => CrackerPanel-CQP9hluh.js.map} | Bin 396562 -> 396562 bytes ...apView-D0gphXtL.js => MapView-ClQphI6P.js} | Bin 4086 -> 4086 bytes ...0gphXtL.js.map => MapView-ClQphI6P.js.map} | Bin 14879 -> 14879 bytes ...anKONo.js => NeighborsMiniMap-Bi17OsoB.js} | Bin 1670 -> 1670 bytes ...s.map => NeighborsMiniMap-Bi17OsoB.js.map} | Bin 5886 -> 5886 bytes ...p-kT7xfoMb.js => PathRouteMap-C6PZ0wFI.js} | Bin 3868 -> 3868 bytes ...Mb.js.map => PathRouteMap-C6PZ0wFI.js.map} | Bin 14070 -> 14070 bytes .../{Popup-C-Q9ygBf.js => Popup-A7yuH1dp.js} | Bin 920 -> 920 bytes ...-C-Q9ygBf.js.map => Popup-A7yuH1dp.js.map} | Bin 4181 -> 4181 bytes ...KwbsT.js => RepeaterDashboard-Dj09PNsp.js} | Bin 28491 -> 28491 bytes ....map => RepeaterDashboard-Dj09PNsp.js.map} | Bin 89840 -> 89840 bytes ...iew-DBqP6hD6.js => SearchView-Dcvv4c8P.js} | Bin 5106 -> 5106 bytes ...6hD6.js.map => SearchView-Dcvv4c8P.js.map} | Bin 16886 -> 16886 bytes ...-BPGiDC12.js => SettingsModal-kexfpcq5.js} | Bin 77263 -> 77263 bytes ...2.js.map => SettingsModal-kexfpcq5.js.map} | Bin 196690 -> 196690 bytes ...Cv9KCsSr.js => VisualizerView-BLZNJTl2.js} | Bin 590321 -> 590321 bytes ....js.map => VisualizerView-BLZNJTl2.js.map} | Bin 3112795 -> 3112795 bytes frontend/prebuilt/assets/hooks-BwtZ3ZXP.js | Bin 0 -> 157 bytes ...-LL30L9PN.js.map => hooks-BwtZ3ZXP.js.map} | Bin 1128 -> 1128 bytes frontend/prebuilt/assets/hooks-LL30L9PN.js | Bin 157 -> 0 bytes .../{index-Fnq3QmNw.js => index-CyRLXsJ_.js} | Bin 583431 -> 583431 bytes ...-Fnq3QmNw.js.map => index-CyRLXsJ_.js.map} | Bin 2116437 -> 2116437 bytes ...eaflet-ENrCR1B4.js => leaflet-IXizDMbG.js} | Bin 153764 -> 153764 bytes ...NrCR1B4.js.map => leaflet-IXizDMbG.js.map} | Bin 700833 -> 700833 bytes ...ator-BwjFWJb_.js => separator-CrdYjM_C.js} | Bin 1068 -> 1068 bytes ...FWJb_.js.map => separator-CrdYjM_C.js.map} | Bin 5058 -> 5058 bytes frontend/prebuilt/index.html | Bin 2761 -> 2761 bytes tests/test_fanout_hitlist.py | 51 +++++++++++++++ 32 files changed, 75 insertions(+), 35 deletions(-) rename frontend/prebuilt/assets/{BotCodeEditor-C20Gx7-Q.js => BotCodeEditor-D8HqJbrh.js} (99%) rename frontend/prebuilt/assets/{BotCodeEditor-C20Gx7-Q.js.map => BotCodeEditor-D8HqJbrh.js.map} (99%) rename frontend/prebuilt/assets/{CrackerPanel-D45MeFE8.js => CrackerPanel-CQP9hluh.js} (99%) rename frontend/prebuilt/assets/{CrackerPanel-D45MeFE8.js.map => CrackerPanel-CQP9hluh.js.map} (99%) rename frontend/prebuilt/assets/{MapView-D0gphXtL.js => MapView-ClQphI6P.js} (92%) rename frontend/prebuilt/assets/{MapView-D0gphXtL.js.map => MapView-ClQphI6P.js.map} (99%) rename frontend/prebuilt/assets/{NeighborsMiniMap-zqanKONo.js => NeighborsMiniMap-Bi17OsoB.js} (85%) rename frontend/prebuilt/assets/{NeighborsMiniMap-zqanKONo.js.map => NeighborsMiniMap-Bi17OsoB.js.map} (97%) rename frontend/prebuilt/assets/{PathRouteMap-kT7xfoMb.js => PathRouteMap-C6PZ0wFI.js} (95%) rename frontend/prebuilt/assets/{PathRouteMap-kT7xfoMb.js.map => PathRouteMap-C6PZ0wFI.js.map} (99%) rename frontend/prebuilt/assets/{Popup-C-Q9ygBf.js => Popup-A7yuH1dp.js} (81%) rename frontend/prebuilt/assets/{Popup-C-Q9ygBf.js.map => Popup-A7yuH1dp.js.map} (97%) rename frontend/prebuilt/assets/{RepeaterDashboard-DtQKwbsT.js => RepeaterDashboard-Dj09PNsp.js} (98%) rename frontend/prebuilt/assets/{RepeaterDashboard-DtQKwbsT.js.map => RepeaterDashboard-Dj09PNsp.js.map} (99%) rename frontend/prebuilt/assets/{SearchView-DBqP6hD6.js => SearchView-Dcvv4c8P.js} (97%) rename frontend/prebuilt/assets/{SearchView-DBqP6hD6.js.map => SearchView-Dcvv4c8P.js.map} (99%) rename frontend/prebuilt/assets/{SettingsModal-BPGiDC12.js => SettingsModal-kexfpcq5.js} (99%) rename frontend/prebuilt/assets/{SettingsModal-BPGiDC12.js.map => SettingsModal-kexfpcq5.js.map} (99%) rename frontend/prebuilt/assets/{VisualizerView-Cv9KCsSr.js => VisualizerView-BLZNJTl2.js} (99%) rename frontend/prebuilt/assets/{VisualizerView-Cv9KCsSr.js.map => VisualizerView-BLZNJTl2.js.map} (99%) create mode 100644 frontend/prebuilt/assets/hooks-BwtZ3ZXP.js rename frontend/prebuilt/assets/{hooks-LL30L9PN.js.map => hooks-BwtZ3ZXP.js.map} (90%) delete mode 100644 frontend/prebuilt/assets/hooks-LL30L9PN.js rename frontend/prebuilt/assets/{index-Fnq3QmNw.js => index-CyRLXsJ_.js} (99%) rename frontend/prebuilt/assets/{index-Fnq3QmNw.js.map => index-CyRLXsJ_.js.map} (99%) rename frontend/prebuilt/assets/{leaflet-ENrCR1B4.js => leaflet-IXizDMbG.js} (99%) rename frontend/prebuilt/assets/{leaflet-ENrCR1B4.js.map => leaflet-IXizDMbG.js.map} (99%) rename frontend/prebuilt/assets/{separator-BwjFWJb_.js => separator-CrdYjM_C.js} (89%) rename frontend/prebuilt/assets/{separator-BwjFWJb_.js.map => separator-CrdYjM_C.js.map} (98%) diff --git a/app/routers/fanout.py b/app/routers/fanout.py index 676f52b1..36c7d400 100644 --- a/app/routers/fanout.py +++ b/app/routers/fanout.py @@ -78,6 +78,26 @@ class FanoutConfigUpdate(BaseModel): enabled: bool | None = Field(default=None, description="Enable/disable toggle") +def _validate_and_normalize_config(config_type: str, config: dict) -> dict: + """Validate a config blob and return the canonical persisted form.""" + normalized = dict(config) + + if config_type == "mqtt_private": + _validate_mqtt_private_config(normalized) + elif config_type == "mqtt_community": + _validate_mqtt_community_config(normalized) + elif config_type == "bot": + _validate_bot_config(normalized) + elif config_type == "webhook": + _validate_webhook_config(normalized) + elif config_type == "apprise": + _validate_apprise_config(normalized) + elif config_type == "sqs": + _validate_sqs_config(normalized) + + return normalized + + def _validate_mqtt_private_config(config: dict) -> None: """Validate mqtt_private config blob.""" if not config.get("broker_host"): @@ -323,28 +343,13 @@ async def create_fanout_config(body: FanoutConfigCreate) -> dict: if body.type == "bot" and server_settings.disable_bots: raise HTTPException(status_code=403, detail="Bot system disabled by server configuration") - # Only validate config when creating as enabled — disabled configs - # are drafts the user hasn't finished configuring yet. - if body.enabled: - if body.type == "mqtt_private": - _validate_mqtt_private_config(body.config) - elif body.type == "mqtt_community": - _validate_mqtt_community_config(body.config) - elif body.type == "bot": - _validate_bot_config(body.config) - elif body.type == "webhook": - _validate_webhook_config(body.config) - elif body.type == "apprise": - _validate_apprise_config(body.config) - elif body.type == "sqs": - _validate_sqs_config(body.config) - + normalized_config = _validate_and_normalize_config(body.type, body.config) scope = _enforce_scope(body.type, body.scope) cfg = await FanoutConfigRepository.create( config_type=body.type, name=body.name, - config=body.config, + config=normalized_config, scope=scope, enabled=body.enabled, ) @@ -374,27 +379,11 @@ async def update_fanout_config(config_id: str, body: FanoutConfigUpdate) -> dict kwargs["name"] = body.name if body.enabled is not None: kwargs["enabled"] = body.enabled - if body.config is not None: - kwargs["config"] = body.config if body.scope is not None: kwargs["scope"] = _enforce_scope(existing["type"], body.scope) - # Validate config when the result will be enabled - will_be_enabled = body.enabled if body.enabled is not None else existing["enabled"] - if will_be_enabled: - config_to_validate = body.config if body.config is not None else existing["config"] - if existing["type"] == "mqtt_private": - _validate_mqtt_private_config(config_to_validate) - elif existing["type"] == "mqtt_community": - _validate_mqtt_community_config(config_to_validate) - elif existing["type"] == "bot": - _validate_bot_config(config_to_validate) - elif existing["type"] == "webhook": - _validate_webhook_config(config_to_validate) - elif existing["type"] == "apprise": - _validate_apprise_config(config_to_validate) - elif existing["type"] == "sqs": - _validate_sqs_config(config_to_validate) + config_to_validate = body.config if body.config is not None else existing["config"] + kwargs["config"] = _validate_and_normalize_config(existing["type"], config_to_validate) updated = await FanoutConfigRepository.update(config_id, **kwargs) if updated is None: diff --git a/frontend/prebuilt/assets/BotCodeEditor-C20Gx7-Q.js b/frontend/prebuilt/assets/BotCodeEditor-D8HqJbrh.js similarity index 99% rename from frontend/prebuilt/assets/BotCodeEditor-C20Gx7-Q.js rename to frontend/prebuilt/assets/BotCodeEditor-D8HqJbrh.js index ccf0394869ba4467dfcc7872051c23ab658afc6c..7e9d5f42c5d057ecde6860da0e8b1c644e0b5278 100644 GIT binary patch delta 59 zcmeA^DARpVW`YWbb7hcEM6p+VqfV<1W2+8Rs}6Ik4oj;JYpV|1RvmVK1pyZek3z4c Oq71#PV!hnN0xkeH{1N5= delta 59 zcmeA^DARpVW`YWbTVA1YV6I_e*BB?B7DJ#ijEx8o3k*(}xFQpvhD3zS#{N)mUf4Gtz`~Uy| diff --git a/frontend/prebuilt/assets/CrackerPanel-D45MeFE8.js b/frontend/prebuilt/assets/CrackerPanel-CQP9hluh.js similarity index 99% rename from frontend/prebuilt/assets/CrackerPanel-D45MeFE8.js rename to frontend/prebuilt/assets/CrackerPanel-CQP9hluh.js index 7666fea336d85ae333fe49fbca9d9b2e7aa3f150..6a72552b85196a3c76724e7b48533151c29f1fad 100644 GIT binary patch delta 41 xcmZqr%--~weL@$9b7hcEM6p+VF7M2#)Eo`j3yv~6EmKiyv8G2d8O0@va2MYZF delta 35 qcmbOF7M2#)Eo`j3ye=lDzNv1m7J6C5O0@vUoC;9@ diff --git a/frontend/prebuilt/assets/MapView-D0gphXtL.js b/frontend/prebuilt/assets/MapView-ClQphI6P.js similarity index 92% rename from frontend/prebuilt/assets/MapView-D0gphXtL.js rename to frontend/prebuilt/assets/MapView-ClQphI6P.js index f8256f164c4bd61dc27fd4252174525a9dff41ca..476282a091ada550d10c004a4d32fb602a6d8c70 100644 GIT binary patch delta 72 zcmew+|4n{^Ifrv)kWWOhSNueKO%Bh9%qkb(B=?C0>Ku;dm8BkrDFqYfD{wfKmqZyy cMFea-F3&IEoD*1(;b|72msPBnn^?dF0GHVqTmS$7 delta 72 zcmew+|4n{^Ifq+bp>bfYU-?9PO%7MTBIh7OCzFW<>Kx9xftHo&PH7Y8D{%Pu7#sLl c2Ka3}F3&IEVvt^t5mDl!msPBnn^?dF0BiFXK>z>% diff --git a/frontend/prebuilt/assets/MapView-D0gphXtL.js.map b/frontend/prebuilt/assets/MapView-ClQphI6P.js.map similarity index 99% rename from frontend/prebuilt/assets/MapView-D0gphXtL.js.map rename to frontend/prebuilt/assets/MapView-ClQphI6P.js.map index b51ff89c0ab1f2007d4352ffc7c6d9444387ca03..2c79d604752af0bf687ac5cc754ad4e2cc3d4866 100644 GIT binary patch delta 19 acmbPVGQVVkEQfPWU_pkbS-?isUzPw&ng@&k delta 19 acmbPVGQVVkEQgChdO=1+iO)vWUzPw&w+FBQ diff --git a/frontend/prebuilt/assets/NeighborsMiniMap-zqanKONo.js b/frontend/prebuilt/assets/NeighborsMiniMap-Bi17OsoB.js similarity index 85% rename from frontend/prebuilt/assets/NeighborsMiniMap-zqanKONo.js rename to frontend/prebuilt/assets/NeighborsMiniMap-Bi17OsoB.js index be611bc771050977925734ffdc1d5e492ca9f06a..c1e901fb13beb1c9d4d7d56594ccd66efed8b395 100644 GIT binary patch delta 60 zcmZqUZR4FF&EZ@bh($ delta 60 zcmbOuH%D%QCWl*Ip>bfYU-?ACU=CNmBIh7OCzFXi3LHK@#s)r?0e%~|MDPh@hnQES Q<@+Y-Wfkk?CKhl307sP*AOHXW diff --git a/frontend/prebuilt/assets/PathRouteMap-kT7xfoMb.js.map b/frontend/prebuilt/assets/PathRouteMap-C6PZ0wFI.js.map similarity index 99% rename from frontend/prebuilt/assets/PathRouteMap-kT7xfoMb.js.map rename to frontend/prebuilt/assets/PathRouteMap-C6PZ0wFI.js.map index c2c527701458e9a937094805443738d4a7e3b64c..acb0c693de7d3da20fe8a2b7cc5c1d0f5c3d9d06 100644 GIT binary patch delta 19 acmeyC`z?2Z5{I){K$Jnbo99NYGiCr(dk41w delta 19 acmeyC`z?2Z5=VB3c|}^jZ_-AsGiCr;*a%Pn diff --git a/frontend/prebuilt/assets/Popup-C-Q9ygBf.js b/frontend/prebuilt/assets/Popup-A7yuH1dp.js similarity index 81% rename from frontend/prebuilt/assets/Popup-C-Q9ygBf.js rename to frontend/prebuilt/assets/Popup-A7yuH1dp.js index a6b954ed4e154ce4b7b368d4c27dc3e7d35a6576..b4fea0e313c6c9be9ea438d2df80f608e5d2ba52 100644 GIT binary patch delta 48 zcmbQiK7)ON35RDyW|fO?lKVs(1rF!RAfJe0ulS8AD$D|o=9Q%$hA9PlS;cy}i3MB$ Daq15Y delta 48 zcmbQiK7)ON35Tm+k#mrtlgUII1rE2oLgT<(zw(VKD$D}Tx`CFJ=}u{SS;cy}i3MB$ DUStky diff --git a/frontend/prebuilt/assets/Popup-C-Q9ygBf.js.map b/frontend/prebuilt/assets/Popup-A7yuH1dp.js.map similarity index 97% rename from frontend/prebuilt/assets/Popup-C-Q9ygBf.js.map rename to frontend/prebuilt/assets/Popup-A7yuH1dp.js.map index 5f4d19a0b27a446af774fb934a8ea654996c267f..077cc1fce31a787f6776e84ddff58322f7b2ac1b 100644 GIT binary patch delta 19 acmcbra8+S~G>4;kWvPc@O2I~DBLM(LnFeP7 delta 19 acmcbra8+S~G>5Zppk-ycQ`$ylBLM(Jn+7%j diff --git a/frontend/prebuilt/assets/RepeaterDashboard-DtQKwbsT.js b/frontend/prebuilt/assets/RepeaterDashboard-Dj09PNsp.js similarity index 98% rename from frontend/prebuilt/assets/RepeaterDashboard-DtQKwbsT.js rename to frontend/prebuilt/assets/RepeaterDashboard-Dj09PNsp.js index 0bed4bde5228e97e6a06d761bb16b308b1977770..173f1bf87e01a92f779ae9d35bed4a9f598ce9bb 100644 GIT binary patch delta 128 zcmX?okMZ<9#tA{nPML=0{>AxDdRfIvI!cMf#i=F5`k8qtsTI1;l|eoc#a{6fOAR?Z zBQmR8e3RTKt~2CtG_Nf6Fia_!`1}|LOwHu2j4B+?MJbV4zVXhRA2Pb?bHGgAtY^q) U$Dd_j8Q@o30JKIgH?e>V0JJ(Rg#Z8m delta 128 zcmX?okMZ<9#tA{nRfUOp-u{01dRfIvI!cMf#i=F5`k8qtsTI0zd4V0Nmj%V*mgE diff --git a/frontend/prebuilt/assets/RepeaterDashboard-DtQKwbsT.js.map b/frontend/prebuilt/assets/RepeaterDashboard-Dj09PNsp.js.map similarity index 99% rename from frontend/prebuilt/assets/RepeaterDashboard-DtQKwbsT.js.map rename to frontend/prebuilt/assets/RepeaterDashboard-Dj09PNsp.js.map index 3208dbf45e8a6e9a12a40a627034c944d5b6e035..7c9e703ff26c7aaed53c410a938358f2c982b513 100644 GIT binary patch delta 24 fcmeycm-WM5)`l&NPvUs83@iiuiVO6zij`^si{lCA delta 24 fcmeycm-WM5)`l&NPvUq=0=>(VibM3Wij`^skI@Q3 diff --git a/frontend/prebuilt/assets/SearchView-DBqP6hD6.js b/frontend/prebuilt/assets/SearchView-Dcvv4c8P.js similarity index 97% rename from frontend/prebuilt/assets/SearchView-DBqP6hD6.js rename to frontend/prebuilt/assets/SearchView-Dcvv4c8P.js index f28b3310ac2ce1817667a6a9468aec35ba3592e7..8d83519c487f95c9b506605089872e7cd8dcc5e8 100644 GIT binary patch delta 35 qcmeyQ{z-j;JBM>+kWWOhSNul*DZ>28Wo0JG76E!$#d^7k1zZ60p$vrp delta 35 qcmeyQ{z-j;JBM3dp>bfYU-?G=DZ>0tg#l(6E@paJ#d^7k1zZ5|Sqwh_ diff --git a/frontend/prebuilt/assets/SearchView-DBqP6hD6.js.map b/frontend/prebuilt/assets/SearchView-Dcvv4c8P.js.map similarity index 99% rename from frontend/prebuilt/assets/SearchView-DBqP6hD6.js.map rename to frontend/prebuilt/assets/SearchView-Dcvv4c8P.js.map index 126eb76813d652d0010d7a41d379e16f4d65554f..fdda9aae38d7d0722b018ff4f7a98d92129fafdb 100644 GIT binary patch delta 20 bcmey?%=oRDae^Xya#@*4vPHl~jdP9wSl$Q& delta 20 bcmey?%=oRDae^YdQ(=HvhKt!ojdP9wRpbY- diff --git a/frontend/prebuilt/assets/SettingsModal-BPGiDC12.js b/frontend/prebuilt/assets/SettingsModal-kexfpcq5.js similarity index 99% rename from frontend/prebuilt/assets/SettingsModal-BPGiDC12.js rename to frontend/prebuilt/assets/SettingsModal-kexfpcq5.js index 6b64f27702a8ded6bfbfe63496c72c6170e10142..516f998fff06613b723eb7d27ec14f016fd63b36 100644 GIT binary patch delta 133 zcmX?qo8|m%mI?mKE*2hzUP(n6dRfIvI!cMf#i=F5`k8qtsTI1;l|eoc#a{6ninK~M(N4^dqpPmoA7S` ZEx~w1L?Ao0BCQ~~&=hEwUT$Im7XT)QEXDu; delta 133 zcmX?qo8|m%mI?mK&PE3A73R8udRfIvI!cMf#i=F5`k8qtsTI0zd4_E&h Z-ItMbihz?(l%H2fjuB9!UT$Im7XUSE7r_7k delta 82 zcmey^tn#s0WkMg1TVA1YV6I=eURJTvWJadV&AyE7zKkHu1jNih%mT!$K+Fcj>_E&h Z-ItMbihy&OrMGi&a1l_WUT$Im7XUkp7!&{i diff --git a/frontend/prebuilt/assets/VisualizerView-Cv9KCsSr.js.map b/frontend/prebuilt/assets/VisualizerView-BLZNJTl2.js.map similarity index 99% rename from frontend/prebuilt/assets/VisualizerView-Cv9KCsSr.js.map rename to frontend/prebuilt/assets/VisualizerView-BLZNJTl2.js.map index 1fa57bf596465c9fffdcffb2d2457761a52cdaad..11853c7f6a3ec1da5651558ecd0d616702b7321a 100644 GIT binary patch delta 164 zcmWO0Hx7XT0D#fxzutTA?L*=SMiGDW&-=WXna}pd**Yojm z+dq(yge4+TiAh`%5=c@~l9r5QB`0|)NKr~smWouRCUt2@Q(DrNj&!9beHqA5MlzO( WOl2l>S;$gWvX=j0Bik3d-Teo^F9gK+`F!7z&);*N4sXX(cs*Yp zNJOF%lei=#DJe-yMzWHVycDD;B`Hfqs#24>G^8mlX-h}C(v!XnWGEvU%S5I!lesKp UDJxmaMz*q(|6wnO7eR3U0ptTO6#xJL diff --git a/frontend/prebuilt/assets/hooks-BwtZ3ZXP.js b/frontend/prebuilt/assets/hooks-BwtZ3ZXP.js new file mode 100644 index 0000000000000000000000000000000000000000..594681c988dc1a13037520908160797aa38a9dbc GIT binary patch literal 157 zcmW-aK?{N~7>4iuieVQ$sE3ZyrGh9FLI{SJST<{=+xYg4tg-)|^ZY*V^N3L^z&J02 zyz?pBeVdA!(=~sYxD?CgEMbPA??H_-H*nSu9J3=8zkPi>EM#wGheAmLN$P;31xYYT t^O0%Kr%-SZEY_D%QLKnj7CK%tt%ZDCnrib@>TR;^2itW^&$BaJqdz#NH&Flp literal 0 HcmV?d00001 diff --git a/frontend/prebuilt/assets/hooks-LL30L9PN.js.map b/frontend/prebuilt/assets/hooks-BwtZ3ZXP.js.map similarity index 90% rename from frontend/prebuilt/assets/hooks-LL30L9PN.js.map rename to frontend/prebuilt/assets/hooks-BwtZ3ZXP.js.map index 91ed0a436269d64fb4f9f51e7475a66f9b6c3509..727a56645379ed77d212d007b88bfa66fe4625d0 100644 GIT binary patch delta 19 acmaFC@q%N5G>21pNtAI^M8HO6R~7(AWd>~k delta 19 acmaFC@q%N5G>4Cmv4M|efZs-CR~7(4rv=Xd diff --git a/frontend/prebuilt/assets/hooks-LL30L9PN.js b/frontend/prebuilt/assets/hooks-LL30L9PN.js deleted file mode 100644 index 7860626ab883e5e9e7d98c5771e4d8ec7b106acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmW-ay$*sf6h?QRqQM0Qs0J59Tr@gWq9i^*gST3xKi;;Hq~YBK=I?yxNM#NBw4_o$ zU?|S|TisOiE8i}y<+8;%nD2N!Ow)X#g%_Ag^Tu3)TMv)#3sobxsL0|=TnLjV8( diff --git a/frontend/prebuilt/assets/index-Fnq3QmNw.js b/frontend/prebuilt/assets/index-CyRLXsJ_.js similarity index 99% rename from frontend/prebuilt/assets/index-Fnq3QmNw.js rename to frontend/prebuilt/assets/index-CyRLXsJ_.js index 83ebf8ea02db44ed09f2bd2a8fd66a6a8e785af5..00abf741d8fad15978223f59cd3c313c2d894489 100644 GIT binary patch delta 328 zcmZoar`&!{d4iv+vspltLAjf!URJS^j#6TAacW7ieoks)T25+-u4hDMm5XnZ`@~{H z4yW>xDC4MzfQf4q;<5}Z1N@2$Q1le179#O_GN7MWdva+AZ7+)mhHZb ztm$POFqgOQDQ5*@w(Wb$+5MZ?p>CTl^ou>817_Rw&R^_B98Nw_eqJFtM$->&V08>bC98v$;4tq z4j&(510Tx(zlm!U;z|O&%ae*jQ1le179CTl^ou>817_Rw&R^_B9L{By-p<9rMbi&%V0LD#kh5!Hn diff --git a/frontend/prebuilt/assets/index-Fnq3QmNw.js.map b/frontend/prebuilt/assets/index-CyRLXsJ_.js.map similarity index 99% rename from frontend/prebuilt/assets/index-Fnq3QmNw.js.map rename to frontend/prebuilt/assets/index-CyRLXsJ_.js.map index 8b8f914ce47fc5b030eecc208910bf052db16798..b4040969ccd3a88cf4786f0f245b07b1f0a8597c 100644 GIT binary patch delta 89 zcmcaQt&#C65I3|iwlK9Yx3ILZwy?FZw{Wy@ws5s@xA3&^w(zy^w+OTdwg|Ndw}`Ze rwurTew@9=|wn()|x5%`}w#c=}Z&C2@=5?+N@`)(+ir333R;mR67g!uK delta 89 zcmcaQt&#C65I3|iwlK9Yx3ILZwy?FZw{Wy@ws5s@xA3&^w(zy^w+OTdwg|Ndw}`Ze rwurTew@9=|wn()|x5%`}w#c=}Z&C2@=5@;}G!D%5E7!{^R;mR67n2-7 diff --git a/frontend/prebuilt/assets/leaflet-ENrCR1B4.js b/frontend/prebuilt/assets/leaflet-IXizDMbG.js similarity index 99% rename from frontend/prebuilt/assets/leaflet-ENrCR1B4.js rename to frontend/prebuilt/assets/leaflet-IXizDMbG.js index e2a609ddec32c430cc28d8c625e4f5d45314ec42..a1073b135a0dcd0e997f8e3cb0319bf7deb0ffe7 100644 GIT binary patch delta 44 zcmZ3ok#osL&IzU*&Xqwv5yf8djkc|}j9YD)!XpGcBQmR8e3RVuvWoR`6AQQiV0RA7 delta 44 zcmZ3ok#osL&IzU*Zh3{qfw_L=jkc|}j9YD)!XpG+{feA}44q8$vWoR`6AQQiTs96{ diff --git a/frontend/prebuilt/assets/leaflet-ENrCR1B4.js.map b/frontend/prebuilt/assets/leaflet-IXizDMbG.js.map similarity index 99% rename from frontend/prebuilt/assets/leaflet-ENrCR1B4.js.map rename to frontend/prebuilt/assets/leaflet-IXizDMbG.js.map index e9e2b2a604e22f79093e3968232498aa2ed301a5..909995ded01ade0bf1e1d8cf5a480fd6ca508733 100644 GIT binary patch delta 51 zcmZ4ZSZm>9tqHOmo)MW9tqHOmu6{+%L55ByjjFAxjIF9nt*Xqesw}OltgWhSt*Y#;svNDVoLg17 HYBmA@uec8} diff --git a/frontend/prebuilt/assets/separator-BwjFWJb_.js b/frontend/prebuilt/assets/separator-CrdYjM_C.js similarity index 89% rename from frontend/prebuilt/assets/separator-BwjFWJb_.js rename to frontend/prebuilt/assets/separator-CrdYjM_C.js index f6c4312498ff613c281f9be9762fc2b25c717596..214a5d8d6692283dbd22c26208af2618d0070893 100644 GIT binary patch delta 36 rcmZ3(v4&%U0f%#CkWWOhSNukcC(HuQMJbV4zVXg_S;cy}i3MB$&p>bfYU-?FhC(Hs)pdQxpdQx