Compare commits

...

5 Commits

Author SHA1 Message Date
Rostislav Dugin
408675023a FEATURE (s3): Add support of virtual-styled-domains and S3 prefix 2025-11-16 11:22:03 +03:00
Rostislav Dugin
0bc93389cc FEATURE (backups): Include workspace name in notification about success or fail 2025-11-15 11:40:42 +03:00
Rostislav Dugin
c8e6aea6e1 FEATURE (hints): Add hints about localhost connection 2025-11-15 00:25:51 +03:00
Rostislav Dugin
981ad21471 FEATURE (email): Add "to" header to email 2025-11-14 20:39:02 +03:00
Rostislav Dugin
177a9c782c Revert "FIX (notifiers): Improve email validation"
This reverts commit 02c735bc5a.
2025-11-14 20:35:22 +03:00
30 changed files with 437 additions and 180 deletions

View File

@@ -15,12 +15,12 @@
<g filter="url(#filter1_d_204_373)">
<path d="M76.5003 116.158H21.2503C17.3383 116.158 14.167 119.329 14.167 123.241V1055.34C14.167 1059.25 17.3383 1062.42 21.2503 1062.42H76.5003C80.4123 1062.42 83.5837 1059.25 83.5837 1055.34V123.241C83.5837 119.329 80.4123 116.158 76.5003 116.158Z" fill="#D9D9D9"/>
</g>
<path d="M76.5003 116.158H21.2503C17.3383 116.158 14.167 119.329 14.167 123.241V1055.34C14.167 1059.25 17.3383 1062.42 21.2503 1062.42H76.5003C80.4123 1062.42 83.5837 1059.25 83.5837 1055.34V123.241C83.5837 119.329 80.4123 116.158 76.5003 116.158Z" fill="white"/>
<path d="M70.8333 124.657H28.3333C24.4213 124.657 21.25 127.828 21.25 131.74V174.236C21.25 178.148 24.4213 181.319 28.3333 181.319H70.8333C74.7454 181.319 77.9167 178.148 77.9167 174.236V131.74C77.9167 127.828 74.7454 124.657 70.8333 124.657Z" fill="#1677FF"/>
<path d="M45.3333 159.275C45.0881 159.275 44.8486 159.347 44.6447 159.483C44.4408 159.619 44.2819 159.813 44.1881 160.04C44.0943 160.265 44.0698 160.514 44.1176 160.755C44.1654 160.996 44.2834 161.217 44.4568 161.39C44.6302 161.564 44.8511 161.682 45.0915 161.73C45.3319 161.776 45.5813 161.752 45.8076 161.659C46.0342 161.565 46.2278 161.405 46.364 161.203C46.5002 160.999 46.5729 160.759 46.5729 160.513C46.5729 160.184 46.4423 159.87 46.2098 159.637C45.9773 159.405 45.6621 159.275 45.3333 159.275ZM50.2917 141.302C45.3333 141.302 40.375 143 40.375 146.259V161.133C40.375 164.393 45.3333 166.091 50.2917 166.091C55.25 166.091 60.2083 164.393 60.2083 161.133V146.259C60.2083 143 55.25 141.302 50.2917 141.302ZM57.7292 161.133C57.7292 162.013 54.9029 163.612 50.2917 163.612C45.6804 163.612 42.8542 162.013 42.8542 161.133V157.081C45.1748 158.183 47.7231 158.722 50.2917 158.654C52.8602 158.722 55.4085 158.183 57.7292 157.081V161.133ZM57.7292 153.696C57.7292 154.576 54.9029 156.175 50.2917 156.175C45.6804 156.175 42.8542 154.576 42.8542 153.696V149.644C45.1748 150.746 47.7231 151.285 50.2917 151.217C52.8602 151.285 55.4085 150.746 57.7292 149.644V153.696ZM50.2917 148.738C45.6804 148.738 42.8542 147.139 42.8542 146.259C42.8542 145.38 45.6804 143.78 50.2917 143.78C54.9029 143.78 57.7292 145.38 57.7292 146.259C57.7292 147.139 54.9029 148.738 50.2917 148.738ZM45.3333 151.838C45.0881 151.838 44.8486 151.91 44.6447 152.046C44.4408 152.182 44.2819 152.376 44.1881 152.603C44.0943 152.828 44.0698 153.077 44.1176 153.318C44.1654 153.559 44.2834 153.78 44.4568 153.953C44.6302 154.127 44.8511 154.245 45.0915 154.293C45.3319 154.34 45.5813 154.315 45.8076 154.222C46.0342 154.128 46.2278 153.97 46.364 153.766C46.5002 153.562 46.5729 153.322 46.5729 153.076C46.5729 152.747 46.4423 152.433 46.2098 152.201C45.9773 151.968 45.6621 151.838 45.3333 151.838Z" fill="white"/>
<path d="M62.6875 212.819C62.6931 212.763 62.6931 212.706 62.6875 212.649C62.6827 212.598 62.6827 212.546 62.6875 212.494L62.6254 212.338L55.1879 198.977C55.0692 198.764 54.8955 198.593 54.6871 198.48C54.4787 198.368 54.244 198.319 54.0104 198.341H46.5729C46.3557 198.339 46.1421 198.397 45.9531 198.509L45.8168 198.613C45.7769 198.644 45.7396 198.679 45.7052 198.718C45.6573 198.763 45.6157 198.815 45.5812 198.873C45.5812 198.873 45.5812 198.873 45.5069 198.977L38.0694 212.39C37.9606 212.587 37.9033 212.812 37.9033 213.039C37.9033 213.267 37.9606 213.491 38.0694 213.689L41.7881 220.285C41.8265 220.355 41.8723 220.421 41.9245 220.48V220.558C42.0784 220.714 42.2652 220.83 42.4699 220.895C42.5603 220.908 42.6521 220.908 42.7427 220.895H57.7291C57.9443 220.895 58.1557 220.837 58.3426 220.725C58.5296 220.613 58.6854 220.453 58.7952 220.259L62.5139 213.584L62.5758 213.428C62.571 213.377 62.571 213.325 62.5758 213.273C62.5826 213.217 62.5826 213.161 62.5758 213.104C62.5828 213.049 62.5828 212.992 62.5758 212.935C62.6171 212.901 62.6545 212.862 62.6875 212.819ZM42.8541 217.09L40.6354 213.066L46.5729 202.209L47.6514 204.157L48.8908 206.313L44.0937 214.727L42.8541 217.09ZM50.2916 208.884L51.8535 211.689H48.705L50.2916 208.884ZM57.0225 218.364H44.9614L47.2423 214.285H59.291L57.0225 218.364ZM54.7169 211.689L48.7298 200.937H53.3038L59.291 211.689H54.7169Z" fill="#CDCFD6"/>
<path d="M58.9684 255.689H41.6143C40.628 255.689 39.6821 256.081 38.9846 256.778C38.2874 257.475 37.8955 258.421 37.8955 259.407V271.802C37.8955 272.788 38.2874 273.734 38.9846 274.431C39.6821 275.128 40.628 275.52 41.6143 275.52H58.9684C59.9546 275.52 60.9006 275.128 61.5979 274.431C62.2953 273.734 62.6872 272.788 62.6872 271.802V259.407C62.6872 258.421 62.2953 257.475 61.5979 256.778C60.9006 256.081 59.9546 255.689 58.9684 255.689ZM41.6143 258.168H58.9684C59.2971 258.168 59.6124 258.298 59.8449 258.53C60.0774 258.763 60.208 259.078 60.208 259.407L50.2913 265.456L40.3747 259.407C40.3747 259.078 40.5053 258.763 40.7378 258.53C40.9702 258.298 41.2854 258.168 41.6143 258.168ZM60.208 271.802C60.208 272.131 60.0774 272.446 59.8449 272.679C59.6124 272.911 59.2971 273.041 58.9684 273.041H41.6143C41.2854 273.041 40.9702 272.911 40.7378 272.679C40.5053 272.446 40.3747 272.131 40.3747 271.802V262.233L49.6468 267.898C49.8352 268.007 50.0489 268.064 50.2665 268.064C50.4841 268.064 50.6979 268.007 50.8863 267.898L60.208 262.233V271.802Z" fill="#CDCFD6"/>
<path d="M76.3333 116.158H21.0833C17.1713 116.158 14 119.329 14 123.241V1055.34C14 1059.25 17.1713 1062.42 21.0833 1062.42H76.3333C80.2453 1062.42 83.4167 1059.25 83.4167 1055.34V123.241C83.4167 119.329 80.2453 116.158 76.3333 116.158Z" fill="white"/>
<path d="M70.5833 124.657H28.0833C24.1713 124.657 21 127.828 21 131.74V174.236C21 178.148 24.1713 181.319 28.0833 181.319H70.5833C74.4954 181.319 77.6667 178.148 77.6667 174.236V131.74C77.6667 127.828 74.4954 124.657 70.5833 124.657Z" fill="#1677FF"/>
<path d="M44.9583 159.275C44.7131 159.275 44.4736 159.347 44.2697 159.483C44.0658 159.619 43.9069 159.813 43.8131 160.04C43.7193 160.265 43.6948 160.514 43.7426 160.755C43.7904 160.996 43.9084 161.217 44.0818 161.39C44.2552 161.564 44.4761 161.682 44.7165 161.73C44.9569 161.776 45.2063 161.752 45.4326 161.659C45.6592 161.565 45.8528 161.405 45.989 161.203C46.1252 160.999 46.1979 160.759 46.1979 160.513C46.1979 160.184 46.0673 159.87 45.8348 159.637C45.6023 159.405 45.2871 159.275 44.9583 159.275ZM49.9167 141.302C44.9583 141.302 40 143 40 146.259V161.133C40 164.393 44.9583 166.091 49.9167 166.091C54.875 166.091 59.8333 164.393 59.8333 161.133V146.259C59.8333 143 54.875 141.302 49.9167 141.302ZM57.3542 161.133C57.3542 162.013 54.5279 163.612 49.9167 163.612C45.3054 163.612 42.4792 162.013 42.4792 161.133V157.081C44.7998 158.183 47.3481 158.722 49.9167 158.654C52.4852 158.722 55.0335 158.183 57.3542 157.081V161.133ZM57.3542 153.696C57.3542 154.576 54.5279 156.175 49.9167 156.175C45.3054 156.175 42.4792 154.576 42.4792 153.696V149.644C44.7998 150.746 47.3481 151.285 49.9167 151.217C52.4852 151.285 55.0335 150.746 57.3542 149.644V153.696ZM49.9167 148.738C45.3054 148.738 42.4792 147.139 42.4792 146.259C42.4792 145.38 45.3054 143.78 49.9167 143.78C54.5279 143.78 57.3542 145.38 57.3542 146.259C57.3542 147.139 54.5279 148.738 49.9167 148.738ZM44.9583 151.838C44.7131 151.838 44.4736 151.91 44.2697 152.046C44.0658 152.182 43.9069 152.376 43.8131 152.603C43.7193 152.828 43.6948 153.077 43.7426 153.318C43.7904 153.559 43.9084 153.78 44.0818 153.953C44.2552 154.127 44.4761 154.245 44.7165 154.293C44.9569 154.34 45.2063 154.315 45.4326 154.222C45.6592 154.128 45.8528 153.97 45.989 153.766C46.1252 153.562 46.1979 153.322 46.1979 153.076C46.1979 152.747 46.0673 152.433 45.8348 152.201C45.6023 151.968 45.2871 151.838 44.9583 151.838Z" fill="white"/>
<path d="M62.7842 212.819C62.7898 212.763 62.7898 212.706 62.7842 212.649C62.7793 212.598 62.7793 212.546 62.7842 212.494L62.7221 212.338L55.2846 198.977C55.1659 198.764 54.9922 198.593 54.7838 198.48C54.5754 198.368 54.3407 198.319 54.1071 198.341H46.6696C46.4524 198.339 46.2388 198.397 46.0498 198.509L45.9135 198.613C45.8736 198.644 45.8363 198.679 45.8019 198.718C45.754 198.763 45.7123 198.815 45.6779 198.873C45.6779 198.873 45.6779 198.873 45.6035 198.977L38.166 212.39C38.0572 212.587 38 212.812 38 213.039C38 213.267 38.0572 213.491 38.166 213.689L41.8848 220.285C41.9232 220.355 41.9689 220.421 42.0212 220.48V220.558C42.1751 220.714 42.3619 220.83 42.5666 220.895C42.657 220.908 42.7488 220.908 42.8393 220.895H57.8258C58.041 220.895 58.2524 220.837 58.4392 220.725C58.6262 220.613 58.7821 220.453 58.8919 220.259L62.6106 213.584L62.6725 213.428C62.6677 213.377 62.6677 213.325 62.6725 213.273C62.6793 213.217 62.6793 213.161 62.6725 213.104C62.6795 213.049 62.6795 212.992 62.6725 212.935C62.7137 212.901 62.7511 212.862 62.7842 212.819ZM42.9508 217.09L40.732 213.066L46.6696 202.209L47.7481 204.157L48.9875 206.313L44.1904 214.727L42.9508 217.09ZM50.3883 208.884L51.9502 211.689H48.8017L50.3883 208.884ZM57.1192 218.364H45.0581L47.3389 214.285H59.3877L57.1192 218.364ZM54.8136 211.689L48.8264 200.937H53.4004L59.3877 211.689H54.8136Z" fill="#CDCFD6"/>
<path d="M58.9684 255.689H41.6143C40.628 255.689 39.6821 256.081 38.9846 256.778C38.2874 257.475 37.8955 258.421 37.8955 259.407V271.802C37.8955 272.788 38.2874 273.734 38.9846 274.431C39.6821 275.128 40.628 275.52 41.6143 275.52H58.9684C59.9546 275.52 60.9006 275.128 61.5979 274.431C62.2953 273.734 62.6872 272.788 62.6872 271.802V259.407C62.6872 258.421 62.2953 257.475 61.5979 256.778C60.9006 256.081 59.9546 255.689 58.9684 255.689ZM41.6143 258.168H58.9684C59.2971 258.168 59.6124 258.298 59.8449 258.53C60.0774 258.763 60.208 259.078 60.208 259.407L50.2913 265.456L40.3747 259.407C40.3747 259.078 40.5053 258.763 40.7378 258.53C40.9702 258.298 41.2854 258.168 41.6143 258.168ZM60.208 271.802C60.208 272.131 60.0774 272.446 59.8449 272.679C59.6124 272.911 59.2971 273.041 58.9684 273.041H41.6143C41.2854 273.041 40.9702 272.911 40.7378 272.679C40.5053 272.446 40.3747 272.131 40.3747 271.802V262.233L49.6468 267.898C49.8352 268.007 50.0489 268.064 50.2665 268.064C50.4841 268.064 50.6979 268.007 50.8863 267.898L60.208 262.233V271.802Z" fill="#CDCFD6"/>
<path d="M59.0729 255.689H41.7188C40.7325 255.689 39.7866 256.081 39.0891 256.778C38.3919 257.475 38 258.421 38 259.407V271.802C38 272.788 38.3919 273.734 39.0891 274.431C39.7866 275.128 40.7325 275.52 41.7188 275.52H59.0729C60.0591 275.52 61.0051 275.128 61.7024 274.431C62.3998 273.734 62.7917 272.788 62.7917 271.802V259.407C62.7917 258.421 62.3998 257.475 61.7024 256.778C61.0051 256.081 60.0591 255.689 59.0729 255.689ZM41.7188 258.168H59.0729C59.4016 258.168 59.7169 258.298 59.9494 258.53C60.1819 258.763 60.3125 259.078 60.3125 259.407L50.3958 265.456L40.4792 259.407C40.4792 259.078 40.6098 258.763 40.8423 258.53C41.0747 258.298 41.3899 258.168 41.7188 258.168ZM60.3125 271.802C60.3125 272.131 60.1819 272.446 59.9494 272.679C59.7169 272.911 59.4016 273.041 59.0729 273.041H41.7188C41.3899 273.041 41.0747 272.911 40.8423 272.679C40.6098 272.446 40.4792 272.131 40.4792 271.802V262.233L49.7512 267.898C49.9397 268.007 50.1534 268.064 50.371 268.064C50.5886 268.064 50.8024 268.007 50.9908 267.898L60.3125 262.233V271.802Z" fill="#CDCFD6"/>
<g filter="url(#filter2_d_204_373)">
<path d="M446.25 116.158H106.25C102.338 116.158 99.167 119.329 99.167 123.241V307.393C99.167 311.305 102.338 314.476 106.25 314.476H446.25C450.162 314.476 453.334 311.305 453.334 307.393V123.241C453.334 119.329 450.162 116.158 446.25 116.158Z" fill="#D9D9D9"/>
</g>
@@ -786,21 +786,23 @@
<path d="M1613.58 301.727H1605.08C1603.52 301.727 1602.25 302.995 1602.25 304.56V313.059C1602.25 314.624 1603.52 315.892 1605.08 315.892H1613.58C1615.15 315.892 1616.42 314.624 1616.42 313.059V304.56C1616.42 302.995 1615.15 301.727 1613.58 301.727Z" fill="#00C951"/>
<path d="M1632 301.727H1623.5C1621.94 301.727 1620.67 302.995 1620.67 304.56V313.059C1620.67 314.624 1621.94 315.892 1623.5 315.892H1632C1633.57 315.892 1634.83 314.624 1634.83 313.059V304.56C1634.83 302.995 1633.57 301.727 1632 301.727Z" fill="#00C951"/>
<path d="M1650.42 301.727H1641.92C1640.35 301.727 1639.08 302.995 1639.08 304.56V313.059C1639.08 314.624 1640.35 315.892 1641.92 315.892H1650.42C1651.98 315.892 1653.25 314.624 1653.25 313.059V304.56C1653.25 302.995 1651.98 301.727 1650.42 301.727Z" fill="#00C951"/>
<path d="M28.6002 44.5499L33.0527 38.5699L56.9727 39.0249L68.8677 43.8999L73.8727 52.5774L76.3752 59.7274L76.8952 64.7649V68.4374L71.8252 69.1524L61.5552 64.7649L47.8727 59.0449L36.5627 61.1574L28.6002 55.6649L26.0977 51.9599V51.2449L28.6002 44.5499Z" fill="#155DFC"/>
<path d="M29.6496 56.6411C40.0902 63.7014 42.0494 67.1362 44.7817 65.8852C45.5038 65.5542 47.4468 64.3622 48.0521 59.0898C47.8797 59.0817 47.5394 59.0829 47.1656 59.2275C44.8234 60.1394 44.8905 65.3065 43.7228 65.3123C43.7043 65.3123 43.6638 65.3123 43.6117 65.2973C43.4972 65.2765 43.356 65.2325 43.1442 65.1341C42.5251 64.8448 42.2149 64.699 41.7451 64.4155C41.7451 64.4155 41.2648 64.1296 40.8274 63.8241C40.1817 63.3728 39.8125 62.8289 39.0881 62.1785C38.4817 61.6346 38.4736 61.7769 37.0582 60.7377C36.571 60.3802 36.2135 60.0978 35.518 59.5469C34.3758 58.6431 33.5865 58.0182 32.913 57.4361C32.0705 56.7082 30.9306 55.6331 29.6681 54.1414C28.5201 51.9832 27.1522 49.7393 26.4579 49.9649C26.0147 50.1096 25.9464 51.202 26.032 51.9346C26.3178 54.4053 28.7076 56.0058 29.6496 56.6422V56.6411Z" fill="#003A86"/>
<path d="M30.8616 55.9884C36.4777 57.0809 42.0927 58.1745 47.7088 59.2669C48.3615 60.2772 49.0535 60.9056 49.5268 61.2747C49.5268 61.2747 52.3193 63.4515 56.5594 63.2895C56.7631 63.2814 57.2688 63.2421 57.9562 63.3161C58.6621 63.3925 58.7848 63.4677 59.9062 63.6702C61.0588 63.8785 61.1884 63.8461 61.649 64.0244C62.1848 64.2315 62.5644 64.4907 62.8305 64.6747C63.2714 64.9791 63.3756 65.1272 64.2192 65.8563C64.6868 66.2602 64.9205 66.4627 65.1346 66.6247C65.5281 66.9221 66.1588 67.3954 67.0556 67.7773C67.566 67.9937 68.0682 68.1418 68.545 68.2819C68.8066 68.3582 69.0264 68.4173 69.1827 68.4566C69.2614 69.2111 69.3169 70.2851 69.1827 71.5592C69.0426 72.8912 68.9454 73.8193 68.3853 74.8689C68.1365 75.3353 67.2327 76.9647 65.2827 77.6764C64.8893 77.8199 63.6823 78.2411 62.2392 77.8535C61.7543 77.7238 60.854 77.4681 60.1411 76.6129C59.4097 75.7345 59.3322 74.7729 59.3137 74.4859C59.2778 73.9339 59.228 73.1712 59.7569 72.5359C60.1747 72.0348 60.8713 71.7108 61.5298 71.7675C62.3179 71.8358 62.5354 72.4074 63.0851 72.264C63.3478 72.1957 63.3455 72.0533 64.0699 71.2953C64.7226 70.6126 64.8742 70.5709 64.8974 70.3325C64.9518 69.7608 64.1533 69.2528 63.8339 69.0491C63.5955 68.8975 63.0122 68.5631 61.9719 68.4288C61.3782 68.3525 60.2267 68.2171 58.8994 68.754C57.2804 69.4079 56.4692 70.6276 56.2111 71.0292C55.5329 72.0799 55.3686 73.0648 55.2656 73.7175C55.2089 74.0797 55.0538 75.2265 55.3547 76.6719C55.776 78.6994 56.8221 80.0256 57.1566 80.4249C58.6077 82.1561 60.3552 82.796 61.1745 83.0842C65.0062 84.4324 68.4571 83.0182 69.1225 82.7301C72.7794 81.1481 74.4088 78.0675 75.2096 76.555C76.7314 73.6793 76.9246 71.0928 77.1306 68.3409C77.2001 67.4197 77.3563 64.7095 76.7765 61.2493C76.3634 58.789 75.7616 57.0462 75.1216 55.1923C73.7862 51.3236 72.3153 48.5578 71.842 47.6875C71.842 47.6875 69.9464 44.2054 66.7895 40.4779C66.1738 39.7511 65.5535 39.0672 64.5444 38.4978C63.901 38.1356 62.7437 37.6183 59.758 37.5524C58.2478 37.5188 56.1093 37.5963 53.5529 38.1136C53.6814 38.3104 53.8086 38.5071 53.9371 38.705C53.2335 38.3358 52.2093 37.8475 50.9236 37.4054C49.6553 36.9691 48.6948 36.7701 47.1707 36.4599C44.7879 35.975 42.9942 35.769 42.5614 35.7216C40.6265 35.5063 39.21 35.4635 37.775 35.5735C36.8677 35.6429 36.038 35.7667 35.1747 36.2528C34.6261 36.5618 34.2443 36.9159 33.786 37.3464C32.8995 38.1784 32.3383 38.9341 32.0721 39.2963C30.1869 41.8608 29.2449 43.1442 28.3492 44.644C28.3492 44.644 27.6977 45.7352 26.6064 48.1307C26.4305 48.5161 26.1262 49.2 26.0521 50.1409C26.0405 50.2855 26.0035 50.7554 26.0753 51.2044C26.2569 52.3454 27.1017 53.1219 27.9662 53.8637C29.8768 55.5036 31.2169 56.434 31.2169 56.434C31.4333 56.5786 33.5268 58.0437 35.324 59.4475C38.2576 61.74 39.7238 62.8868 40.6218 63.6957C40.6218 63.6957 41.3706 64.3704 42.8866 65.0543C43.3379 65.258 43.6874 65.3783 44.0982 65.3124C44.693 65.2163 45.0668 64.7824 45.429 64.3519C45.5598 64.1956 45.8294 63.8543 46.6916 61.9263C46.9057 61.4483 47.0121 61.2088 47.1418 60.8848C47.2494 60.6163 47.5132 59.9404 47.8025 58.9579C48.0305 58.1861 48.4818 56.6562 48.7376 54.955C48.9702 53.4101 49.307 51.172 48.7075 48.3657C48.6531 48.1134 48.0571 45.4251 46.3838 42.8896C45.5124 41.5692 44.6629 40.7649 44.4824 40.5948C43.9362 40.0844 43.4258 39.706 43.0347 39.4421C43.4154 39.4607 43.9373 39.5116 44.5414 39.6493C44.987 39.75 46.1847 40.059 47.4959 40.9199C48.7781 41.7613 49.5465 42.7229 49.8891 43.1951C51.0995 44.8627 51.4201 46.5175 51.618 47.5382C51.8494 48.7337 51.9096 49.9696 51.9582 50.9359C52.0149 52.0978 51.9744 52.4507 52.1063 53.3002C52.1966 53.8834 52.354 54.8567 52.8643 55.9884C53.6316 57.6896 54.7333 58.7253 55.1487 59.091C55.8882 59.7402 56.5478 60.0747 57.8671 60.7459C58.9711 61.3072 59.6909 61.5467 60.4964 61.6323C60.8493 61.6694 61.1467 61.6694 61.3527 61.6624C61.1491 61.1799 61.0218 60.7482 60.9396 60.4068C60.869 60.1152 60.7602 59.6523 60.7324 59.0332C60.7105 58.5448 60.7475 58.1305 60.7915 57.8215C60.8783 58.1976 61.0079 58.6848 61.2046 59.2403C61.2995 59.5076 61.642 60.4473 62.3572 61.6636C62.8884 62.5685 63.5318 63.3636 64.6023 64.4711C65.623 65.5253 67.1262 66.9418 69.1815 68.4601C62.6674 64.89 56.1544 61.3199 49.6402 57.7498" fill="#155DFC"/>
<path d="M65.5498 64.1829C65.691 63.6309 65.9386 63.2524 66.1018 63.0407C66.265 62.8289 66.81 62.1785 67.6977 61.9771C67.9175 61.9274 68.3376 61.8464 68.7415 62.0362C68.8098 62.0686 68.8364 62.0894 69.0482 62.2271C69.3178 62.403 69.5932 62.5708 69.864 62.7456C70.4484 63.1217 71.3858 63.6181 71.5582 63.7107C73.1529 64.5671 76.1548 64.7407 76.7392 64.7742C78.2274 64.8598 79.8383 64.9536 81.9596 64.5381C81.9596 64.5381 85.1605 63.9109 87.9078 62.1739C88.3661 61.8834 89.2247 61.3349 90.1725 60.4056C90.5255 60.0596 90.8032 59.7483 91 59.5145C90.9814 59.6846 90.9456 59.9416 90.8623 60.2436C90.6979 60.8419 90.4179 61.3765 89.5627 62.469C88.9019 63.3126 88.5709 63.7338 88.0062 64.2812C87.7342 64.5439 86.8061 65.4188 85.3665 66.2509C82.3669 67.9833 79.4391 68.2043 78.2749 68.2795C77.5481 68.327 76.2266 68.3675 74.6307 68.1418C70.5329 67.5632 67.4164 65.6248 65.5498 64.1829Z" fill="#8BC7FE"/>
<path d="M59.0693 49.222C59.6931 48.8332 60.2208 48.5543 60.6062 48.3656C60.958 48.192 61.1396 48.1249 61.3549 48.0705C61.5042 48.0323 61.9844 47.9236 62.6059 48.008C62.8639 48.0439 63.2273 48.0972 63.6405 48.3263C64.1346 48.6006 64.4019 48.9628 64.4679 49.0554C64.5466 49.1664 64.7179 49.4106 64.822 49.7647C64.8868 49.9811 64.8729 50.0622 64.9597 50.2577C65.0511 50.4626 65.1518 50.5713 65.3138 50.7704C65.4446 50.9301 65.6228 51.1615 65.8265 51.4601C65.7189 51.3999 65.1738 51.1048 64.6056 51.1152C64.3487 51.1199 64.0929 51.1847 64.0929 51.1847C63.887 51.2368 63.7492 51.3016 63.6995 51.3224C63.2401 51.5133 62.1904 51.2599 61.7692 50.5737C61.503 50.1408 61.6893 49.8608 61.3734 49.5784C61.2565 49.4743 61.1026 49.3967 60.4106 49.3134C60.0831 49.2741 59.626 49.2324 59.0717 49.2243L59.0693 49.222Z" fill="#003C8D"/>
<path d="M74.3768 53.1682C73.7993 53.1242 72.8747 53.1277 71.8135 53.4667C70.9988 53.7271 70.3785 54.0963 69.9619 54.3925C70.316 54.315 70.7766 54.2247 71.3205 54.146C71.4501 54.1275 71.8679 54.0685 72.4535 54.0176C73.0194 53.969 73.7693 53.9239 74.6684 53.9285C74.5712 53.675 74.474 53.4216 74.3768 53.167V53.1682Z" fill="#0052C9"/>
<path d="M75.622 56.6632C74.9774 56.6412 74.0701 56.6852 73.0378 56.9837C72.3238 57.1897 71.7371 57.4651 71.2881 57.7174C71.6029 57.6711 71.9986 57.6202 72.4557 57.5774C72.6085 57.5635 73.0575 57.5218 73.6674 57.4964C74.2379 57.4721 74.989 57.4582 75.8858 57.4918C75.7979 57.2163 75.7099 56.9397 75.6231 56.6643L75.622 56.6632Z" fill="#0052C9"/>
<path d="M76.4554 59.6141C75.8652 59.5805 74.9197 59.6106 73.8898 60.0446C73.4813 60.217 73.1399 60.4184 72.8633 60.6128C73.0496 60.5758 73.3065 60.5306 73.6132 60.489C74.2589 60.4033 74.7531 60.3883 75.2484 60.3755C75.606 60.3663 76.0712 60.3628 76.6185 60.3813L76.4554 59.6129V59.6141Z" fill="#0052C9"/>
<path d="M65.2773 64.9409C65.7055 65.4177 66.2078 65.9234 66.7899 66.4326C67.6242 67.1617 68.4389 67.7345 69.1645 68.1812C69.1553 67.9845 69.1171 67.7322 69.006 67.4626C68.9736 67.3839 68.9389 67.3121 68.903 67.2461C69.2548 67.4244 69.6402 67.5945 70.0591 67.7438C72.0576 68.4555 73.9092 68.3872 75.1811 68.1997C73.4706 67.9879 71.2406 67.4903 68.8775 66.3076C68.0524 65.8945 67.3187 65.4513 66.6718 65.0104C66.6417 64.9895 66.4091 64.8182 66.0816 64.5822C65.8629 64.4248 65.6835 64.2952 65.5643 64.2107C65.4683 64.4549 65.3734 64.6979 65.2773 64.9421V64.9409Z" fill="#00398B"/>
<path d="M65.5643 63.499C66.217 63.933 67.1462 64.5 68.315 65.0509C69.934 65.8146 73.459 67.4255 78.1493 67.1362C83.2667 66.8214 86.9178 64.4202 88.0831 63.3543C88.8932 62.6137 89.5609 61.7677 89.5609 61.7677C90.2275 60.923 90.6881 60.1291 90.9994 59.5134C90.9519 59.9312 90.8466 60.3733 90.6534 60.8176C90.4856 61.203 90.209 61.5861 89.6651 62.3359C89.2901 62.8521 89.1027 63.1101 88.8238 63.433C88.3817 63.9457 88.0033 64.2905 87.7325 64.5359C87.3506 64.883 86.7824 65.3934 85.9573 65.9246C85.7536 66.0553 85.5592 66.1722 85.374 66.2764C84.9701 66.5032 84.5477 66.7138 83.9923 66.9464C83.0109 67.3584 82.3108 67.6535 81.3283 67.893C81.3283 67.893 80.0414 68.2067 77.7825 68.3166C77.4538 68.3328 77.1321 68.3363 77.1321 68.3363C76.9296 68.3386 76.6588 68.3409 76.329 68.3259C76.329 68.3259 75.932 68.3143 75.4934 68.2553C71.8331 67.7657 69.3288 66.6421 69.3288 66.6421C68.2572 66.1595 66.8234 65.3922 65.3027 64.1864C65.3907 63.9561 65.4786 63.7258 65.5654 63.4955L65.5643 63.499Z" fill="#0087F7"/>
<path d="M64.29 64.0336C64.3849 63.8357 64.525 63.5696 64.7217 63.2722C64.8617 63.0592 65.1001 62.7005 65.416 62.4008C65.6267 62.2006 66.4043 61.4634 67.469 61.5444C67.6935 61.5618 68.1657 61.6323 68.6841 62.0096C68.5429 61.9622 68.3254 61.9078 68.0615 61.917C67.5083 61.9355 67.1172 62.2121 66.8985 62.3718C66.2597 62.8382 65.9576 63.4689 65.5491 64.3218C65.4253 64.5799 65.335 64.7963 65.2772 64.9421C65.099 64.8333 64.8872 64.6817 64.6731 64.4745C64.5157 64.3218 64.3896 64.1702 64.29 64.0348V64.0336Z" fill="#0051CB"/>
<path d="M59.5213 65.3447C61.2479 65.8758 63.0682 66.4707 64.6919 66.9995C65.6975 67.327 66.5191 67.599 67.0561 67.7772C65.1548 65.7381 63.2546 63.7002 61.3532 61.6611C61.0743 61.6577 60.6369 61.6368 60.1126 61.5373C59.74 61.4667 58.8894 61.2746 57.1188 60.3118C56.3041 59.8686 55.8968 59.6475 55.5033 59.3559C53.573 57.9255 52.8289 55.8633 52.616 55.25C52.4274 54.7049 52.2978 53.4898 52.0466 51.0828C51.7203 47.9617 51.7689 47.7626 51.5444 46.8576C51.2412 45.6368 50.916 44.3233 49.8895 42.9577C48.5263 41.1432 46.7418 40.3204 45.7535 39.9732C44.6565 39.5878 43.689 39.4906 43.0352 39.4709C43.5038 39.7822 44.1415 40.2544 44.8081 40.9187C46.5277 42.6314 47.2637 44.4483 47.8516 45.9411C48.2705 47.0046 48.8306 48.4616 48.9741 50.4613C49.0864 52.0201 48.8989 53.2399 48.8561 53.5049C48.5737 55.2523 48.0159 56.3193 47.7544 58.7842C47.7324 58.9902 47.7174 59.1592 47.7093 59.2656C48.0784 59.8292 48.4372 60.2493 48.7103 60.5409C48.9753 60.8233 49.1917 61.0096 49.2588 61.0756C49.2588 61.0756 49.6372 61.41 50.0712 61.7005C52.0582 63.0336 59.5213 65.3423 59.5213 65.3423V65.3447Z" fill="#0051C8"/>
<path d="M60.777 57.7462C60.7133 58.3746 60.6891 59.3131 60.939 60.4056C61.0628 60.9472 61.211 61.3348 61.3359 61.6612C61.6449 62.4643 62.1576 63.7604 63.301 65.0415C64.096 65.9326 64.9014 66.4718 65.5483 66.9081C65.8237 67.0933 66.1929 67.3409 66.7079 67.6059C67.6985 68.1174 68.5919 68.3674 69.2156 68.4993C69.1196 68.0966 69.0224 67.6951 68.9263 67.2923C66.8664 66.3295 65.4442 65.1491 64.5832 64.3182C63.9479 63.7049 62.9202 62.6969 62.0257 61.0663C61.3151 59.7714 60.9633 58.5841 60.777 57.7439V57.7462Z" fill="#003C8D"/>
<path d="M66.0316 77.3338C66.6195 77.1301 67.4689 76.7505 68.3114 76.0354C69.0775 75.385 69.5207 74.7265 69.7001 74.4395C70.2266 73.6005 70.4303 72.8645 70.5715 72.3414C70.73 71.7547 70.899 70.8868 70.8816 69.8152C71.1015 69.939 71.4128 70.0999 71.797 70.2584C72.6406 70.6056 73.3315 70.7306 73.762 70.8046C74.6207 70.9539 75.2942 70.9632 75.815 70.9666C76.2547 70.9701 76.6239 70.9539 76.8924 70.9365C76.9236 70.6588 76.9537 70.3776 76.9815 70.0941C77.0405 69.4969 77.0891 68.9102 77.1296 68.3362C76.7685 68.3316 76.389 68.3165 75.992 68.2888C75.6888 68.2668 75.396 68.2379 75.116 68.2054C74.7353 68.2575 74.2249 68.3084 73.6208 68.3119C71.8734 68.32 70.6039 67.9231 70.2891 67.8201C69.6989 67.6268 69.2268 67.4104 68.9004 67.2438C68.9583 67.459 69.0335 67.7657 69.0995 68.1372C69.1782 68.5781 69.3622 69.7585 69.1805 71.5568C69.059 72.7592 68.9976 73.3737 68.7176 74.1109C68.4769 74.7462 67.8253 76.1291 66.0293 77.3303L66.0316 77.3338Z" fill="#0050C8"/>
<path d="M54.9944 63.83C54.712 63.5661 53.8198 62.7248 53.0548 61.8222C52.872 61.6069 52.5676 61.2435 52.2042 60.7286C52.0839 60.5573 51.9578 60.371 51.8281 60.1673C51.5226 59.687 51.1245 59.0529 50.775 58.1456C50.5586 57.5832 50.4279 57.0913 50.3469 56.7268C50.1281 57.766 50.1629 58.6293 50.2288 59.1941C50.3041 59.8444 50.4464 60.3177 50.5691 60.7158C50.701 61.1452 50.8977 61.696 51.1986 62.314C51.6141 62.5258 51.9716 62.6913 52.2436 62.8116C53.0085 63.1507 53.6196 63.3671 54.0165 63.506C54.4134 63.646 54.7502 63.7536 54.9955 63.83H54.9944Z" fill="#003C8D"/>
<g clip-path="url(#clip1_204_373)">
<path d="M39 40H45L59 39.5L70 45L76.5 61.5L71.5 69.5L70 68L60 64.5L52.5 62L49 59L40.5 59.5L30.5 49.5L39 46V40Z" fill="#155DFC"/>
<path d="M31.7931 56.6646C41.8288 63.451 43.712 66.7525 46.3383 65.5501C47.0324 65.2319 48.9 64.0862 49.4818 59.0183C49.316 59.0105 48.989 59.0116 48.6297 59.1507C46.3783 60.0272 46.4428 64.9939 45.3205 64.9994C45.3027 64.9994 45.2637 64.9994 45.2137 64.985C45.1036 64.965 44.9679 64.9227 44.7643 64.8281C44.1692 64.55 43.8711 64.4099 43.4195 64.1374C43.4195 64.1374 42.9578 63.8626 42.5374 63.569C41.9167 63.1351 41.5618 62.6123 40.8655 61.9872C40.2826 61.4644 40.2748 61.6012 38.9144 60.6023C38.4461 60.2586 38.1024 59.9872 37.4339 59.4577C36.336 58.5889 35.5774 57.9883 34.93 57.4288C34.1202 56.7291 33.0245 55.6957 31.8109 54.2619C30.7075 52.1874 29.3927 50.0305 28.7253 50.2474C28.2992 50.3865 28.2336 51.4365 28.3159 52.1406C28.5907 54.5155 30.8877 56.0539 31.7931 56.6657V56.6646Z" fill="#003A86"/>
<path d="M32.9575 56.0372C38.3557 57.0873 43.7529 58.1385 49.1511 59.1885C49.7785 60.1596 50.4437 60.7636 50.8986 61.1185C50.8986 61.1185 53.5827 63.2108 57.6584 63.0551C57.8542 63.0473 58.3403 63.0095 59.001 63.0807C59.6795 63.1541 59.7975 63.2264 60.8753 63.421C61.9832 63.6213 62.1078 63.5901 62.5505 63.7614C63.0655 63.9605 63.4304 64.2097 63.6862 64.3866C64.11 64.6791 64.2102 64.8215 65.0211 65.5223C65.4705 65.9105 65.6952 66.1052 65.9009 66.2609C66.2791 66.5468 66.8854 67.0017 67.7474 67.3688C68.238 67.5768 68.7207 67.7192 69.179 67.8538C69.4304 67.9272 69.6418 67.9839 69.7919 68.0217C69.8676 68.747 69.921 69.7793 69.7919 71.004C69.6574 72.2843 69.5639 73.1764 69.0255 74.1853C68.7864 74.6336 67.9176 76.1998 66.0433 76.8839C65.6651 77.0218 64.5049 77.4267 63.1178 77.0541C62.6517 76.9295 61.7863 76.6836 61.1011 75.8616C60.3981 75.0173 60.3236 74.093 60.3058 73.8171C60.2713 73.2865 60.2235 72.5535 60.7318 71.9428C61.1334 71.4611 61.803 71.1497 62.436 71.2042C63.1935 71.2698 63.4026 71.8193 63.931 71.6814C64.1835 71.6157 64.1812 71.4789 64.8776 70.7503C65.5049 70.0941 65.6507 70.054 65.6729 69.8249C65.7252 69.2754 64.9577 68.787 64.6507 68.5913C64.4215 68.4455 63.8609 68.1241 62.8609 67.995C62.2902 67.9216 61.1834 67.7915 59.9076 68.3076C58.3514 68.9361 57.5716 70.1085 57.3236 70.4945C56.6717 71.5045 56.5138 72.4511 56.4148 73.0785C56.3603 73.4267 56.2112 74.529 56.5004 75.9183C56.9053 77.8672 57.9109 79.1419 58.2324 79.5257C59.6273 81.1898 61.3069 81.8049 62.0945 82.0819C65.7775 83.3778 69.0945 82.0185 69.7341 81.7415C73.2491 80.2209 74.8153 77.2598 75.5851 75.806C77.0478 73.0418 77.2336 70.5557 77.4316 67.9105C77.4983 67.0251 77.6485 64.4199 77.0912 61.094C76.6941 58.7291 76.1157 57.0539 75.5005 55.2719C74.2169 51.5534 72.8031 48.8948 72.3481 48.0583C72.3481 48.0583 70.5261 44.7113 67.4916 41.1284C66.8998 40.4298 66.3036 39.7724 65.3336 39.2251C64.7152 38.877 63.6028 38.3797 60.7329 38.3163C59.2813 38.2841 57.2257 38.3586 54.7685 38.8558C54.892 39.0449 55.0143 39.234 55.1378 39.4242C54.4615 39.0694 53.4771 38.6 52.2412 38.1751C51.0221 37.7557 50.0988 37.5644 48.6339 37.2663C46.3435 36.8002 44.6194 36.6022 44.2034 36.5566C42.3435 36.3497 40.982 36.3085 39.6027 36.4142C38.7306 36.481 37.933 36.6 37.1032 37.0672C36.576 37.3642 36.2089 37.7046 35.7684 38.1183C34.9163 38.9181 34.3768 39.6445 34.121 39.9927C32.309 42.4576 31.4035 43.6912 30.5426 45.1328C30.5426 45.1328 29.9163 46.1818 28.8674 48.4844C28.6983 48.8548 28.4057 49.5122 28.3345 50.4165C28.3234 50.5556 28.2878 51.0072 28.3568 51.4388C28.5314 52.5356 29.3434 53.2819 30.1744 53.995C32.0109 55.5712 33.299 56.4655 33.299 56.4655C33.507 56.6045 35.5192 58.0128 37.2467 59.3621C40.0665 61.5656 41.4759 62.668 42.3391 63.4455C42.3391 63.4455 43.0588 64.094 44.5159 64.7514C44.9498 64.9472 45.2857 65.0629 45.6806 64.9995C46.2523 64.9071 46.6116 64.49 46.9598 64.0762C47.0855 63.9261 47.3447 63.5979 48.1734 61.7447C48.3791 61.2853 48.4815 61.0551 48.6061 60.7436C48.7095 60.4855 48.9631 59.8359 49.2412 58.8915C49.4604 58.1496 49.8942 56.6791 50.14 55.0439C50.3636 53.5589 50.6873 51.4076 50.1111 48.7102C50.0588 48.4677 49.4859 45.8837 47.8775 43.4465C47.0399 42.1773 46.2234 41.4042 46.0499 41.2407C45.5248 40.7502 45.0343 40.3864 44.6583 40.1328C45.0243 40.1506 45.526 40.1996 46.1066 40.3319C46.5349 40.4287 47.6861 40.7257 48.9464 41.5533C50.1789 42.362 50.9175 43.2863 51.2468 43.7402C52.4103 45.3431 52.7184 46.9337 52.9086 47.9148C53.1311 49.0639 53.189 50.2519 53.2357 51.1807C53.2902 52.2975 53.2513 52.6368 53.3781 53.4532C53.4648 54.0139 53.6161 54.9494 54.1067 56.0372C54.8441 57.6724 55.9031 58.668 56.3024 59.0195C57.0132 59.6435 57.6473 59.965 58.9154 60.6101C59.9765 61.1496 60.6684 61.3799 61.4426 61.4622C61.7819 61.4978 62.0678 61.4978 62.2658 61.4911C62.07 61.0273 61.9476 60.6124 61.8687 60.2842C61.8008 60.0039 61.6962 59.559 61.6695 58.9639C61.6484 58.4944 61.684 58.0962 61.7263 57.7992C61.8097 58.1607 61.9343 58.629 62.1234 59.163C62.2146 59.4199 62.5439 60.3231 63.2313 61.4922C63.7419 62.3621 64.3603 63.1263 65.3893 64.1908C66.3703 65.2042 67.8153 66.5657 69.7908 68.0251C63.5294 64.5935 57.2691 61.1619 51.0076 57.7302" fill="#155DFC"/>
<path d="M60.0713 49.5333C60.6708 49.1596 61.1781 48.8915 61.5485 48.7102C61.8867 48.5433 62.0613 48.4788 62.2682 48.4265C62.4117 48.3898 62.8733 48.2852 63.4706 48.3664C63.7187 48.4009 64.068 48.4521 64.4651 48.6723C64.9401 48.936 65.197 49.2841 65.2604 49.3731C65.3361 49.4799 65.5007 49.7146 65.6008 50.055C65.6631 50.263 65.6497 50.3409 65.7332 50.5289C65.821 50.7257 65.9178 50.8303 66.0735 51.0216C66.1992 51.1751 66.3705 51.3976 66.5663 51.6846C66.4629 51.6268 65.939 51.3431 65.3928 51.3531C65.1458 51.3576 64.9 51.4199 64.9 51.4199C64.702 51.4699 64.5696 51.5322 64.5218 51.5522C64.0802 51.7358 63.0713 51.4922 62.6664 50.8325C62.4106 50.4165 62.5897 50.1473 62.286 49.8759C62.1736 49.7758 62.0257 49.7013 61.3605 49.6212C61.0457 49.5834 60.6063 49.5433 60.0735 49.5355L60.0713 49.5333Z" fill="#003C8D"/>
<path d="M74.7856 53.3265C74.2306 53.2842 73.3418 53.2875 72.3218 53.6135C71.5387 53.8637 70.9424 54.2186 70.542 54.5033C70.8824 54.4288 71.3251 54.3421 71.8479 54.2664C71.9725 54.2486 72.374 54.1919 72.9369 54.1429C73.4808 54.0962 74.2016 54.0528 75.0659 54.0573C74.9725 53.8137 74.8791 53.5701 74.7856 53.3254V53.3265Z" fill="#0052C9"/>
<path d="M75.9822 56.6858C75.3626 56.6647 74.4905 56.7069 73.4983 56.9939C72.812 57.1919 72.248 57.4567 71.8164 57.6992C72.119 57.6547 72.4994 57.6057 72.9388 57.5646C73.0856 57.5512 73.5172 57.5112 74.1034 57.4867C74.6518 57.4633 75.3737 57.45 76.2358 57.4822C76.1512 57.2175 76.0667 56.9517 75.9833 56.6869L75.9822 56.6858Z" fill="#0052C9"/>
<path d="M76.7838 59.5223C76.2165 59.49 75.3077 59.5189 74.3177 59.9361C73.9251 60.1018 73.5969 60.2953 73.3311 60.4822C73.5101 60.4466 73.7571 60.4032 74.0519 60.3632C74.6726 60.2809 75.1475 60.2664 75.6236 60.2542C75.9673 60.2453 76.4145 60.242 76.9406 60.2598L76.7838 59.5211V59.5223Z" fill="#0052C9"/>
<path d="M60.5063 65.0307C62.1659 65.5412 63.9156 66.113 65.4763 66.6213C66.4429 66.9361 67.2327 67.1975 67.7488 67.3688C65.9212 65.4089 64.0947 63.45 62.2671 61.49C61.999 61.4867 61.5786 61.4667 61.0747 61.371C60.7165 61.3032 59.8989 61.1185 58.197 60.193C57.4139 59.767 57.0224 59.5545 56.6442 59.2742C54.7888 57.8994 54.0735 55.9172 53.8688 55.3276C53.6875 54.8037 53.5629 53.6357 53.3216 51.322C53.0079 48.322 53.0546 48.1307 52.8388 47.2608C52.6708 46.5834 52.2938 44.9838 51.2481 43.5122C50.9033 43.0261 49.5518 41.1807 47.0301 40.4009C45.9767 40.075 45.0512 40.0383 44.4316 40.0606C44.9311 40.4221 45.6141 40.9671 46.3349 41.7224C46.6919 42.0962 48.2014 43.7202 49.2893 46.3821C49.6297 47.2141 50.2226 48.698 50.3683 50.7269C50.4762 52.2252 50.296 53.3977 50.2548 53.6524C49.9834 55.3321 49.4472 56.3576 49.1958 58.727C49.1747 58.925 49.1603 59.0874 49.1525 59.1897C49.5073 59.7314 49.8521 60.1352 50.1147 60.4155C50.3694 60.6869 50.5774 60.866 50.6419 60.9294C50.6419 60.9294 51.0056 61.2509 51.4228 61.5301C53.3327 62.8115 60.5063 65.0307 60.5063 65.0307Z" fill="#0051C8"/>
<path d="M61.7128 57.727C61.636 58.3076 61.5893 59.1919 61.8251 60.2197C61.943 60.7314 62.0865 61.0896 62.25 61.49C62.6305 62.4244 63.1065 63.5824 64.1388 64.7392C64.903 65.5957 65.6772 66.1141 66.299 66.5335C66.5637 66.7114 66.9186 66.9495 67.4136 67.2042C68.3657 67.6959 69.2245 67.9361 69.824 68.0629C69.7317 67.6758 69.6383 67.2899 69.546 66.9028C68.5893 66.4523 67.4358 65.7949 66.2556 64.8282C65.8262 64.4756 65.5159 64.1831 65.3713 64.044C64.8229 63.5156 63.784 62.5056 62.913 60.9183C62.23 59.6736 61.8919 58.5323 61.7128 57.7247V57.727Z" fill="#00398B"/>
<path d="M66.7639 76.5546C67.329 76.3588 68.1455 75.9939 68.9553 75.3065C69.6917 74.6814 70.1177 74.0484 70.2901 73.7726C70.7962 72.9661 70.992 72.2587 71.1277 71.7559C71.2801 71.1919 71.4425 70.3576 71.4258 69.3276C71.6372 69.4466 71.9364 69.6012 72.3057 69.7536C73.1166 70.0873 73.7807 70.2075 74.1945 70.2787C75.0198 70.4222 75.6672 70.4311 76.1678 70.4344C76.5905 70.4377 76.9453 70.4222 77.2034 70.4055C77.2334 70.1385 77.2623 69.8682 77.289 69.5957C77.3458 69.0217 77.3925 68.4577 77.4314 67.906C77.0844 67.9016 76.7195 67.8871 76.338 67.8604C76.0465 67.8393 75.7651 67.8115 75.4959 67.7803C75.13 67.8304 74.6394 67.8793 74.0588 67.8827C72.3791 67.8904 71.1589 67.5089 70.8563 67.4099C70.289 67.2241 69.8352 67.0161 69.5215 66.856C69.5771 67.0629 69.6494 67.3576 69.7128 67.7147C69.7884 68.1385 69.9653 69.2731 69.7907 71.0017C69.6739 72.1574 69.6149 72.7481 69.3457 73.4567C69.1143 74.0673 68.4881 75.3966 66.7617 76.5512L66.7639 76.5546Z" fill="#0050C8"/>
<path d="M56.1552 63.5746C55.8838 63.321 55.0262 62.5123 54.2909 61.6446C54.1152 61.4377 53.8226 61.0885 53.4733 60.5935C53.3576 60.4288 53.2364 60.2498 53.1118 60.054C52.8182 59.5923 52.4355 58.9828 52.0996 58.1107C51.8916 57.5701 51.7659 57.0973 51.688 56.7469C51.4778 57.7458 51.5111 58.5757 51.5745 59.1185C51.6468 59.7436 51.7837 60.1986 51.9016 60.5812C52.0284 60.9939 52.2175 61.5234 52.5067 62.1174C52.906 62.321 53.2497 62.48 53.5111 62.5957C54.2464 62.9216 54.8337 63.1296 55.2153 63.2631C55.5968 63.3977 55.9205 63.5012 56.1563 63.5746H56.1552Z" fill="#003C8D"/>
<path d="M66.1094 63.9739C66.234 63.4433 66.452 63.0796 66.5966 62.876C66.9959 62.312 67.4731 62.0985 68.0059 61.8537C68.4364 61.6557 68.7801 61.5045 69.0972 61.6535C69.155 61.6802 69.1817 61.7036 69.5154 61.9183C69.6311 61.995 69.8002 62.1051 70.0082 62.2308C70.5521 62.5601 72.7234 63.8237 75.8903 64.1908C78.036 64.44 79.6856 64.1663 80.6378 64.0006C82.5833 63.6624 84.1606 63.0651 85.2852 62.5434C84.6668 64.1741 83.818 65.143 83.3008 65.6446C81.3164 67.5701 78.8859 67.7637 77.353 67.9127C77.0082 67.9461 75.7957 68.0362 74.1328 67.7804C70.5121 67.2242 67.7579 65.361 66.1094 63.975V63.9739Z" fill="#8BC7FE"/>
<path d="M65.8694 64.7025C66.2476 65.1608 66.6914 65.6469 67.2065 66.1363C67.9439 66.8371 68.6636 67.3877 69.3044 67.8171C69.2955 67.628 69.2621 67.3855 69.1642 67.1263C69.1353 67.0507 69.1041 66.9817 69.073 66.9183C69.3833 67.0896 69.7248 67.2531 70.0941 67.3966C71.8605 68.0807 73.4968 68.0151 74.6192 67.8349C73.1075 67.6313 71.1375 67.153 69.0485 66.0162C68.3199 65.6191 67.6703 65.1931 67.0997 64.7692C67.073 64.7492 66.8672 64.5846 66.578 64.3577C66.3844 64.2064 66.2254 64.0818 66.1208 64.0006C66.0363 64.2353 65.9517 64.4689 65.8672 64.7036L65.8694 64.7025Z" fill="#00398B"/>
<path d="M84.588 63.9995C83.5992 65.638 82.3255 66.4578 81.8161 66.7525C81.3656 67.0128 80.6892 67.341 79.8083 67.5423C79.7971 67.5457 78.6625 67.8449 76.6759 67.9494C76.3855 67.965 76.1019 67.9683 76.1019 67.9683C76.1019 67.9683 75.7526 67.9728 75.3922 67.9583C72.2632 67.8382 69.232 66.5612 69.232 66.5612C68.7637 66.3766 67.994 66.0473 67.202 65.5668C66.5045 65.1441 66.1185 64.8048 65.9139 64.6135C65.816 64.5212 65.737 64.4422 65.6836 64.3866C66.1018 63.648 66.5201 62.9105 66.9394 62.1719C67.331 62.5634 67.9116 63.104 68.668 63.6624C69.7248 64.4422 72.7515 66.6791 76.8527 66.5445C81.4378 66.3955 84.4913 63.3777 85.2855 62.5401C85.1487 62.9116 84.9306 63.4288 84.5869 63.9972L84.588 63.9995Z" fill="#0087F7"/>
<path d="M65.0449 63.7247C65.1206 63.5623 65.2296 63.3432 65.3786 63.0973C65.4476 62.9839 65.6957 62.5779 65.9926 62.2597C66.2285 62.0072 66.877 61.312 67.828 61.2831C68.3631 61.2664 68.8036 61.4666 69.0983 61.6524C68.9037 61.6702 68.6378 61.708 68.3297 61.7937C68.0027 61.886 67.6311 61.9694 67.3019 62.2308C66.8436 62.5945 66.59 63.0851 66.1094 64.1051C66.0127 64.312 65.9381 64.4833 65.8914 64.5934C65.7112 64.4188 65.5299 64.2364 65.3464 64.0451C65.2429 63.9372 65.1428 63.8304 65.0449 63.7236V63.7247Z" fill="#0051CB"/>
</g>
</g>
<defs>
<filter id="filter0_d_204_373" x="10.167" y="16.9987" width="1679.67" height="92.9934" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
@@ -866,5 +868,8 @@
<clipPath id="clip0_204_373">
<rect width="1700" height="1078" fill="white"/>
</clipPath>
<clipPath id="clip1_204_373">
<rect width="57" height="57" fill="white" transform="translate(28 33)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 914 KiB

After

Width:  |  Height:  |  Size: 913 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -366,6 +366,11 @@ func (s *BackupService) SendBackupNotification(
return
}
workspace, err := s.workspaceService.GetWorkspaceByID(*database.WorkspaceID)
if err != nil {
return
}
for _, notifier := range database.Notifiers {
if !slices.Contains(
backupConfig.SendNotificationsOn,
@@ -377,9 +382,17 @@ func (s *BackupService) SendBackupNotification(
title := ""
switch notificationType {
case backups_config.NotificationBackupFailed:
title = fmt.Sprintf("❌ Backup failed for database \"%s\"", database.Name)
title = fmt.Sprintf(
"❌ Backup failed for database \"%s\" (workspace \"%s\")",
database.Name,
workspace.Name,
)
case backups_config.NotificationBackupSuccess:
title = fmt.Sprintf("✅ Backup completed for database \"%s\"", database.Name)
title = fmt.Sprintf(
"✅ Backup completed for database \"%s\" (workspace \"%s\")",
database.Name,
workspace.Name,
)
}
message := ""

View File

@@ -9,6 +9,7 @@ import (
"postgresus-backend/internal/features/storages"
users_enums "postgresus-backend/internal/features/users/enums"
users_testing "postgresus-backend/internal/features/users/testing"
workspaces_services "postgresus-backend/internal/features/workspaces/services"
workspaces_testing "postgresus-backend/internal/features/workspaces/testing"
"postgresus-backend/internal/util/logger"
"strings"
@@ -55,7 +56,7 @@ func Test_BackupExecuted_NotificationSent(t *testing.T) {
&CreateFailedBackupUsecase{},
logger.GetLogger(),
[]BackupRemoveListener{},
nil, // workspaceService
workspaces_services.GetWorkspaceService(),
nil, // auditLogService
NewBackupContextManager(),
}
@@ -101,7 +102,7 @@ func Test_BackupExecuted_NotificationSent(t *testing.T) {
&CreateSuccessBackupUsecase{},
logger.GetLogger(),
[]BackupRemoveListener{},
nil, // workspaceService
workspaces_services.GetWorkspaceService(),
nil, // auditLogService
NewBackupContextManager(),
}
@@ -124,7 +125,7 @@ func Test_BackupExecuted_NotificationSent(t *testing.T) {
&CreateSuccessBackupUsecase{},
logger.GetLogger(),
[]BackupRemoveListener{},
nil, // workspaceService
workspaces_services.GetWorkspaceService(),
nil, // auditLogService
NewBackupContextManager(),
}

View File

@@ -76,9 +76,10 @@ func (e *EmailNotifier) Send(logger *slog.Logger, heading string, message string
)
body := message
fromHeader := fmt.Sprintf("From: %s\r\n", from)
toHeader := fmt.Sprintf("To: %s\r\n", e.TargetEmail)
// Combine all parts of the email
emailContent := []byte(fromHeader + subject + mime + body)
emailContent := []byte(fromHeader + toHeader + subject + mime + body)
addr := net.JoinHostPort(e.SMTPHost, fmt.Sprintf("%d", e.SMTPPort))
timeout := DefaultTimeout

View File

@@ -22,6 +22,9 @@ type S3Storage struct {
S3AccessKey string `json:"s3AccessKey" gorm:"not null;type:text;column:s3_access_key"`
S3SecretKey string `json:"s3SecretKey" gorm:"not null;type:text;column:s3_secret_key"`
S3Endpoint string `json:"s3Endpoint" gorm:"type:text;column:s3_endpoint"`
S3Prefix string `json:"s3Prefix" gorm:"type:text;column:s3_prefix"`
S3UseVirtualHostedStyle bool `json:"s3UseVirtualHostedStyle" gorm:"default:false;column:s3_use_virtual_hosted_style"`
}
func (s *S3Storage) TableName() string {
@@ -34,11 +37,13 @@ func (s *S3Storage) SaveFile(logger *slog.Logger, fileID uuid.UUID, file io.Read
return err
}
objectKey := s.buildObjectKey(fileID.String())
// Upload the file using MinIO client with streaming (size = -1 for unknown size)
_, err = client.PutObject(
context.TODO(),
s.S3Bucket,
fileID.String(),
objectKey,
file,
-1,
minio.PutObjectOptions{},
@@ -56,10 +61,12 @@ func (s *S3Storage) GetFile(fileID uuid.UUID) (io.ReadCloser, error) {
return nil, err
}
objectKey := s.buildObjectKey(fileID.String())
object, err := client.GetObject(
context.TODO(),
s.S3Bucket,
fileID.String(),
objectKey,
minio.GetObjectOptions{},
)
if err != nil {
@@ -90,11 +97,13 @@ func (s *S3Storage) DeleteFile(fileID uuid.UUID) error {
return err
}
objectKey := s.buildObjectKey(fileID.String())
// Delete the object using MinIO client
err = client.RemoveObject(
context.TODO(),
s.S3Bucket,
fileID.String(),
objectKey,
minio.RemoveObjectOptions{},
)
if err != nil {
@@ -150,6 +159,7 @@ func (s *S3Storage) TestConnection() error {
// Test write and delete permissions by uploading and removing a small test file
testFileID := uuid.New().String() + "-test"
testObjectKey := s.buildObjectKey(testFileID)
testData := []byte("test connection")
testReader := bytes.NewReader(testData)
@@ -157,7 +167,7 @@ func (s *S3Storage) TestConnection() error {
_, err = client.PutObject(
ctx,
s.S3Bucket,
testFileID,
testObjectKey,
testReader,
int64(len(testData)),
minio.PutObjectOptions{},
@@ -170,7 +180,7 @@ func (s *S3Storage) TestConnection() error {
err = client.RemoveObject(
ctx,
s.S3Bucket,
testFileID,
testObjectKey,
minio.RemoveObjectOptions{},
)
if err != nil {
@@ -189,6 +199,7 @@ func (s *S3Storage) Update(incoming *S3Storage) {
s.S3Bucket = incoming.S3Bucket
s.S3Region = incoming.S3Region
s.S3Endpoint = incoming.S3Endpoint
s.S3UseVirtualHostedStyle = incoming.S3UseVirtualHostedStyle
if incoming.S3AccessKey != "" {
s.S3AccessKey = incoming.S3AccessKey
@@ -197,6 +208,24 @@ func (s *S3Storage) Update(incoming *S3Storage) {
if incoming.S3SecretKey != "" {
s.S3SecretKey = incoming.S3SecretKey
}
// we do not allow to change the prefix after creation,
// otherwise we will have to migrate all the data to the new prefix
}
func (s *S3Storage) buildObjectKey(fileName string) string {
if s.S3Prefix == "" {
return fileName
}
prefix := s.S3Prefix
prefix = strings.TrimPrefix(prefix, "/")
if !strings.HasSuffix(prefix, "/") {
prefix = prefix + "/"
}
return prefix + fileName
}
func (s *S3Storage) getClient() (*minio.Client, error) {
@@ -215,11 +244,18 @@ func (s *S3Storage) getClient() (*minio.Client, error) {
endpoint = fmt.Sprintf("s3.%s.amazonaws.com", s.S3Region)
}
// Configure bucket lookup strategy
bucketLookup := minio.BucketLookupAuto
if s.S3UseVirtualHostedStyle {
bucketLookup = minio.BucketLookupDNS
}
// Initialize the MinIO client
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(s.S3AccessKey, s.S3SecretKey, ""),
Secure: useSSL,
Region: s.S3Region,
Creds: credentials.NewStaticV4(s.S3AccessKey, s.S3SecretKey, ""),
Secure: useSSL,
Region: s.S3Region,
BucketLookup: bucketLookup,
})
if err != nil {
return nil, fmt.Errorf("failed to initialize MinIO client: %w", err)

View File

@@ -309,7 +309,7 @@ func (s *WorkspaceService) GetAllWorkspaces() ([]*workspaces_models.Workspace, e
return s.workspaceRepository.GetAllWorkspaces()
}
func (s *WorkspaceService) GetWorkspaceByIDInternal(
func (s *WorkspaceService) GetWorkspaceByID(
workspaceID uuid.UUID,
) (*workspaces_models.Workspace, error) {
return s.workspaceRepository.GetWorkspaceByID(workspaceID)

View File

@@ -0,0 +1,17 @@
-- +goose Up
-- +goose StatementBegin
ALTER TABLE s3_storages
ADD COLUMN s3_prefix TEXT;
ALTER TABLE s3_storages
ADD COLUMN s3_use_virtual_hosted_style BOOLEAN NOT NULL DEFAULT FALSE;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
ALTER TABLE s3_storages
DROP COLUMN s3_use_virtual_hosted_style;
ALTER TABLE s3_storages
DROP COLUMN s3_prefix;
-- +goose StatementEnd

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,17 +1,24 @@
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M40 270L108.5 178L476.5 185L659.5 260L736.5 393.5L775 503.5L783 581V637.5L705 648.5L547 581L336.5 493L162.5 525.5L40 441L1.5 384V373L40 270Z" fill="#155DFC"/>
<path d="M56.1471 456.017C216.773 564.638 246.915 617.48 288.949 598.234C300.059 593.142 329.951 574.804 339.263 493.69C336.61 493.565 331.376 493.583 325.625 495.809C289.59 509.838 290.623 589.332 272.659 589.421C272.374 589.421 271.751 589.421 270.95 589.19C269.187 588.869 267.015 588.193 263.757 586.679C254.232 582.228 249.461 579.985 242.232 575.623C242.232 575.623 234.844 571.226 228.114 566.525C218.179 559.582 212.5 551.214 201.355 541.208C192.026 532.841 191.901 535.03 170.127 519.043C162.632 513.541 157.13 509.197 146.43 500.723C128.858 486.818 116.716 477.204 106.354 468.248C93.3926 457.05 75.8558 440.51 56.4319 417.561C38.7706 384.357 17.7265 349.836 7.04424 353.307C0.225388 355.533 -0.825022 372.339 0.492458 383.609C4.88999 421.62 41.6548 446.243 56.1471 456.035V456.017Z" fill="#003A86"/>
<path d="M74.7886 445.976C161.19 462.783 247.574 479.607 333.976 496.414C344.017 511.957 354.664 521.624 361.946 527.304C361.946 527.304 404.906 560.792 470.139 558.3C473.273 558.175 481.053 557.57 491.629 558.709C502.489 559.884 504.376 561.042 521.628 564.157C539.361 567.362 541.355 566.864 548.44 569.605C556.684 572.792 562.523 576.78 566.618 579.611C573.401 584.293 575.004 586.572 587.983 597.789C595.175 604.002 598.772 607.118 602.065 609.61C608.119 614.186 617.822 621.468 631.62 627.343C639.471 630.672 647.198 632.951 654.533 635.105C658.557 636.28 661.94 637.188 664.343 637.794C665.554 649.402 666.408 665.924 664.343 685.526C662.189 706.018 660.693 720.296 652.076 736.445C648.248 743.619 634.344 768.687 604.344 779.637C598.291 781.844 579.722 788.325 557.52 782.361C550.061 780.367 536.209 776.432 525.242 763.275C513.99 749.762 512.797 734.967 512.512 730.551C511.96 722.059 511.195 710.326 519.331 700.552C525.758 692.843 536.476 687.858 546.607 688.73C558.731 689.781 562.078 698.576 570.535 696.368C574.576 695.318 574.541 693.128 585.686 681.466C595.727 670.962 598.06 670.321 598.416 666.654C599.252 657.859 586.968 650.043 582.054 646.909C578.386 644.577 569.413 639.432 553.408 637.367C544.274 636.191 526.56 634.108 506.139 642.369C481.231 652.429 468.751 671.194 464.78 677.372C454.347 693.537 451.819 708.689 450.235 718.73C449.362 724.302 446.977 741.946 451.606 764.183C458.086 795.375 474.181 815.778 479.326 821.921C501.652 848.555 528.536 858.4 541.141 862.834C600.089 883.575 653.18 861.819 663.417 857.386C719.677 833.048 744.745 785.654 757.065 762.385C780.477 718.142 783.45 678.351 786.619 636.013C787.688 621.842 790.091 580.145 781.171 526.912C774.816 489.061 765.558 462.249 755.712 433.727C735.167 374.209 712.538 331.658 705.256 318.269C705.256 318.269 676.094 264.698 627.525 207.352C618.053 196.171 608.51 185.649 592.985 176.889C583.087 171.317 565.283 163.359 519.349 162.344C496.115 161.827 463.214 163.02 423.885 170.979C425.861 174.005 427.82 177.032 429.796 180.076C418.971 174.397 403.215 166.884 383.435 160.083C363.922 153.371 349.145 150.308 325.697 145.537C289.039 138.077 261.443 134.908 254.785 134.178C225.017 130.867 203.225 130.208 181.148 131.899C167.19 132.968 154.425 134.873 141.143 142.35C132.704 147.104 126.829 152.552 119.779 159.175C106.141 171.976 97.5063 183.602 93.4114 189.174C64.409 228.627 49.9167 248.372 36.1366 271.445C36.1366 271.445 26.1131 288.234 9.3241 325.088C6.61793 331.017 1.93555 341.539 0.796104 356.013C0.618066 358.239 0.0483395 365.467 1.15217 372.375C3.94737 389.93 16.9441 401.876 30.2435 413.288C59.6376 438.516 80.2544 452.83 80.2544 452.83C83.5837 455.056 115.791 477.595 143.44 499.191C188.573 534.461 211.13 552.104 224.946 564.549C224.946 564.549 236.465 574.929 259.788 585.451C266.731 588.584 272.108 590.436 278.428 589.421C287.579 587.943 293.33 581.267 298.903 574.644C300.914 572.24 305.063 566.988 318.327 537.327C321.62 529.974 323.258 526.289 325.252 521.304C326.908 517.173 330.967 506.776 335.418 491.66C338.926 479.785 345.869 456.249 349.804 430.077C353.382 406.309 358.563 371.877 349.341 328.702C348.504 324.821 339.335 283.463 313.591 244.455C300.184 224.141 287.117 211.767 284.339 209.15C275.936 201.298 268.084 195.477 262.067 191.417C267.924 191.702 275.954 192.486 285.247 194.604C292.102 196.153 310.529 200.907 330.7 214.153C350.427 227.096 362.248 241.891 367.518 249.155C386.141 274.81 391.073 300.27 394.117 315.973C397.678 334.364 398.604 353.378 399.352 368.245C400.224 386.12 399.601 391.55 401.63 404.618C403.019 413.591 405.44 428.564 413.292 445.976C425.096 472.147 442.045 488.082 448.437 493.708C459.813 503.696 469.961 508.841 490.258 519.167C507.242 527.802 518.316 531.487 530.708 532.805C536.138 533.375 540.714 533.375 543.883 533.268C540.749 525.844 538.791 519.203 537.527 513.951C536.441 509.464 534.767 502.343 534.34 492.818C534.002 485.304 534.571 478.931 535.248 474.177C536.583 479.963 538.577 487.459 541.604 496.004C543.064 500.117 548.334 514.574 559.336 533.286C567.508 547.208 577.407 559.439 593.876 576.478C609.579 592.697 632.706 614.489 664.325 637.847C564.108 582.922 463.908 527.998 363.691 473.073" fill="#155DFC"/>
<path d="M608.459 572.045C610.631 563.552 614.441 557.73 616.951 554.472C619.462 551.214 627.847 541.208 641.503 538.111C644.886 537.345 651.348 536.099 657.562 539.019C658.612 539.517 659.022 539.838 662.28 541.956C666.428 544.662 670.665 547.244 674.832 549.932C683.822 555.719 698.244 563.356 700.896 564.781C725.43 577.955 771.613 580.626 780.604 581.142C803.499 582.46 828.282 583.902 860.917 577.51C860.917 577.51 910.162 567.861 952.428 541.137C959.478 536.668 972.689 528.229 987.27 513.933C992.7 508.61 996.973 503.82 1000 500.224C999.715 502.841 999.163 506.794 997.881 511.441C995.353 520.645 991.044 528.87 977.887 545.677C967.722 558.656 962.63 565.137 953.941 573.558C949.757 577.599 935.479 591.059 913.331 603.86C867.184 630.512 822.14 633.913 804.229 635.07C793.049 635.8 772.717 636.423 748.165 632.951C685.122 624.049 637.176 594.228 608.459 572.045Z" fill="#8BC7FE"/>
<path d="M508.758 341.877C518.354 335.895 526.473 331.605 532.401 328.703C537.814 326.032 540.609 324.999 543.92 324.163C546.217 323.575 553.606 321.902 563.166 323.201C567.136 323.753 572.727 324.572 579.083 328.097C586.685 332.317 590.798 337.889 591.813 339.314C593.023 341.023 595.658 344.779 597.26 350.227C598.257 353.557 598.044 354.803 599.379 357.812C600.786 360.963 602.335 362.637 604.827 365.699C606.839 368.156 609.581 371.717 612.714 376.31C611.058 375.384 602.673 370.844 593.931 371.004C589.979 371.076 586.044 372.073 586.044 372.073C582.875 372.874 580.756 373.871 579.991 374.191C572.923 377.129 556.775 373.23 550.294 362.672C546.199 356.014 549.066 351.705 544.205 347.361C542.407 345.759 540.039 344.566 529.392 343.284C524.354 342.679 517.321 342.038 508.793 341.913L508.758 341.877Z" fill="#003C8D"/>
<path d="M744.263 402.588C735.379 401.912 721.154 401.965 704.828 407.182C692.294 411.187 682.751 416.867 676.342 421.425C681.79 420.232 688.876 418.843 697.243 417.632C699.237 417.347 705.665 416.439 714.673 415.656C723.379 414.908 734.916 414.214 748.75 414.285C747.254 410.386 745.759 406.487 744.263 402.57V402.588Z" fill="#0052C9"/>
<path d="M763.423 456.356C753.507 456.018 739.548 456.694 723.667 461.288C712.682 464.457 703.656 468.694 696.748 472.575C701.591 471.863 707.68 471.08 714.712 470.421C717.062 470.208 723.97 469.567 733.353 469.175C742.13 468.801 753.685 468.587 767.482 469.104C766.129 464.866 764.776 460.611 763.441 456.374L763.423 456.356Z" fill="#0052C9"/>
<path d="M776.241 501.755C767.161 501.239 752.616 501.702 736.77 508.378C730.486 511.031 725.234 514.129 720.979 517.12C723.845 516.55 727.797 515.856 732.515 515.215C742.45 513.897 750.052 513.666 757.672 513.47C763.173 513.328 770.331 513.274 778.752 513.559L776.241 501.737V501.755Z" fill="#0052C9"/>
<path d="M604.271 583.707C610.859 591.042 618.586 598.822 627.541 606.656C640.378 617.872 652.911 626.685 664.074 633.557C663.932 630.531 663.344 626.649 661.635 622.501C661.137 621.29 660.603 620.187 660.051 619.172C665.463 621.913 671.392 624.531 677.837 626.827C708.584 637.777 737.07 636.726 756.636 633.842C730.322 630.584 696.014 622.928 659.659 604.733C646.965 598.377 635.677 591.558 625.725 584.775C625.262 584.454 621.684 581.819 616.645 578.187C613.28 575.766 610.521 573.772 608.687 572.472C607.209 576.229 605.749 579.968 604.271 583.724V583.707Z" fill="#00398B"/>
<path d="M608.686 561.523C618.727 568.199 633.024 576.923 651.005 585.398C675.913 597.148 730.143 621.931 802.302 617.48C881.03 612.637 937.201 575.695 955.13 559.297C967.592 547.903 977.865 534.888 977.865 534.888C988.12 521.892 995.206 509.678 999.995 500.207C999.265 506.634 997.645 513.435 994.672 520.271C992.09 526.2 987.835 532.093 979.467 543.63C973.699 551.57 970.815 555.541 966.524 560.508C959.723 568.395 953.901 573.701 949.735 577.475C943.86 582.816 935.118 590.668 922.424 598.839C919.291 600.851 916.3 602.65 913.451 604.252C907.237 607.741 900.739 610.982 892.193 614.56C877.096 620.898 866.324 625.438 851.209 629.124C851.209 629.124 831.411 633.949 796.658 635.64C791.602 635.889 786.652 635.943 786.652 635.943C783.537 635.978 779.371 636.014 774.297 635.782C774.297 635.782 768.19 635.604 761.442 634.696C705.129 627.165 666.602 609.878 666.602 609.878C650.115 602.454 628.056 590.65 604.662 572.098C606.015 568.555 607.368 565.012 608.704 561.469L608.686 561.523Z" fill="#0087F7"/>
<path d="M589.088 569.748C590.548 566.703 592.702 562.609 595.729 558.033C597.883 554.757 601.551 549.238 606.411 544.627C609.651 541.547 621.615 530.206 637.995 531.452C641.449 531.719 648.713 532.805 656.689 538.609C654.517 537.879 651.17 537.042 647.11 537.185C638.6 537.47 632.583 541.725 629.218 544.182C619.39 551.357 614.743 561.06 608.458 574.181C606.553 578.151 605.165 581.481 604.275 583.724C601.533 582.05 598.275 579.718 594.981 576.531C592.56 574.181 590.619 571.849 589.088 569.766V569.748Z" fill="#0051CB"/>
<path d="M515.717 589.92C542.28 598.092 570.285 607.243 595.264 615.379C610.735 620.418 623.376 624.602 631.637 627.344C602.385 595.973 573.152 564.621 543.9 533.251C539.609 533.197 532.88 532.877 524.814 531.346C519.082 530.26 505.996 527.304 478.756 512.491C466.222 505.673 459.955 502.272 453.902 497.785C424.205 475.78 412.757 444.054 409.482 434.618C406.579 426.232 404.585 407.538 400.722 370.506C395.701 322.489 396.449 319.427 392.995 305.505C388.331 286.722 383.328 266.514 367.536 245.506C346.563 217.59 319.109 204.931 303.905 199.59C287.027 193.661 272.143 192.166 262.084 191.863C269.295 196.652 279.104 203.916 289.359 214.136C315.816 240.485 327.139 268.437 336.183 291.404C342.628 307.766 351.245 330.181 353.453 360.946C355.18 384.927 352.296 403.692 351.637 407.769C347.293 434.653 338.711 451.068 334.688 488.99C334.35 492.159 334.118 494.759 333.993 496.397C339.673 505.067 345.192 511.53 349.394 516.017C353.471 520.361 356.8 523.227 357.833 524.242C357.833 524.242 363.655 529.387 370.331 533.856C400.9 554.366 515.717 589.884 515.717 589.884V589.92Z" fill="#0051C8"/>
<path d="M535.035 473.02C534.055 482.687 533.682 497.126 537.527 513.933C539.432 522.265 541.711 528.23 543.634 533.25C548.388 545.606 556.275 565.546 573.865 585.255C586.096 598.964 598.487 607.261 608.44 613.973C612.677 616.821 618.356 620.631 626.279 624.708C641.519 632.577 655.264 636.423 664.86 638.453C663.382 632.257 661.887 626.079 660.409 619.883C628.718 605.071 606.837 586.911 593.591 574.128C583.817 564.692 568.007 549.185 554.245 524.099C543.313 504.177 537.901 485.91 535.035 472.984V473.02Z" fill="#003C8D"/>
<path d="M615.879 774.367C624.924 771.234 637.992 765.394 650.953 754.391C662.739 744.385 669.558 734.255 672.317 729.84C680.418 716.932 683.552 705.609 685.724 697.561C688.163 688.535 690.762 675.182 690.495 658.696C693.878 660.601 698.667 663.076 704.578 665.515C717.557 670.856 728.186 672.779 734.809 673.918C748.019 676.215 758.381 676.357 766.393 676.411C773.158 676.464 778.837 676.215 782.968 675.948C783.449 671.675 783.911 667.348 784.339 662.986C785.247 653.8 785.994 644.773 786.618 635.943C781.063 635.871 775.223 635.64 769.116 635.213C764.452 634.874 759.948 634.429 755.639 633.931C749.782 634.732 741.93 635.515 732.637 635.569C705.753 635.693 686.222 629.587 681.379 628.002C672.3 625.029 665.036 621.699 660.015 619.136C660.905 622.447 662.062 627.165 663.077 632.88C664.288 639.664 667.119 657.823 664.323 685.49C662.454 703.989 661.51 713.442 657.202 724.783C653.499 734.558 643.475 755.833 615.844 774.314L615.879 774.367Z" fill="#0050C8"/>
<path d="M446.067 566.615C441.723 562.556 427.997 549.612 416.228 535.725C413.415 532.414 408.733 526.823 403.143 518.901C401.291 516.266 399.35 513.399 397.356 510.266C392.656 502.877 386.532 493.121 381.155 479.163C377.826 470.51 375.814 462.943 374.567 457.335C371.203 473.323 371.737 486.605 372.752 495.293C373.909 505.299 376.099 512.58 377.986 518.705C380.015 525.31 383.042 533.785 387.671 543.292C394.063 546.55 399.564 549.096 403.748 550.948C415.516 556.164 424.917 559.493 431.023 561.63C437.13 563.784 442.311 565.44 446.085 566.615H446.067Z" fill="#003C8D"/>
<g clip-path="url(#clip0_221_160)">
<path d="M213 149H388L725.5 233.5L856.5 602.5L811.5 685L733 650L679.5 631.5L581 591.5L492.5 570.5L430.5 545.5L371.5 494.5L166.5 386.5L213 149Z" fill="#155DFC"/>
<path d="M66.5436 450.256C242.608 569.316 275.646 627.237 321.721 606.141C333.899 600.56 366.664 580.46 376.871 491.549C373.963 491.413 368.225 491.432 361.922 493.872C322.424 509.249 323.556 596.384 303.865 596.481C303.553 596.481 302.87 596.481 301.992 596.228C300.06 595.876 297.679 595.135 294.108 593.476C283.667 588.597 278.437 586.138 270.514 581.357C270.514 581.357 262.415 576.537 255.039 571.385C244.149 563.774 237.924 554.602 225.708 543.635C215.482 534.463 215.345 536.863 191.478 519.339C183.263 513.308 177.233 508.547 165.504 499.258C146.243 484.016 132.934 473.478 121.576 463.662C107.369 451.387 88.1466 433.258 66.8558 408.103C47.4969 371.708 24.4303 333.868 12.7213 337.674C5.24705 340.113 4.09568 358.535 5.53979 370.888C10.36 412.553 50.6584 439.542 66.5436 450.275V450.256Z" fill="#003A86"/>
<path d="M86.9766 439.249C181.683 457.672 276.369 476.113 371.076 494.535C382.082 511.572 393.752 522.169 401.734 528.394C401.734 528.394 448.823 565.101 520.326 562.369C523.761 562.233 532.289 561.569 543.881 562.818C555.785 564.106 557.853 565.375 576.763 568.79C596.2 572.302 598.386 571.756 606.153 574.761C615.188 578.255 621.589 582.626 626.078 585.729C633.513 590.861 635.269 593.359 649.496 605.654C657.38 612.464 661.322 615.879 664.932 618.611C671.567 623.627 682.203 631.608 697.327 638.048C705.933 641.698 714.402 644.196 722.443 646.557C726.853 647.845 730.561 648.84 733.195 649.504C734.522 662.227 735.459 680.337 733.195 701.823C730.834 724.285 729.195 739.936 719.75 757.636C715.554 765.501 700.313 792.978 667.43 804.979C660.795 807.399 640.441 814.503 616.106 807.965C607.929 805.78 592.746 801.467 580.725 787.045C568.391 772.233 567.084 756.016 566.772 751.177C566.167 741.868 565.328 729.008 574.246 718.294C581.291 709.844 593.039 704.38 604.143 705.336C617.433 706.487 621.101 716.128 630.371 713.708C634.801 712.557 634.762 710.156 646.978 697.374C657.985 685.86 660.541 685.158 660.931 681.138C661.849 671.497 648.383 662.93 642.997 659.495C638.977 656.939 629.142 651.299 611.598 649.035C601.586 647.747 582.169 645.464 559.785 654.519C532.484 665.545 518.804 686.114 514.452 692.885C503.016 710.605 500.245 727.212 498.508 738.219C497.552 744.327 494.937 763.666 500.011 788.04C507.114 822.231 524.756 844.595 530.396 851.328C554.868 880.522 584.335 891.314 598.152 896.173C662.766 918.908 720.959 895.061 732.181 890.201C793.848 863.524 821.325 811.575 834.829 786.069C860.492 737.575 863.75 693.959 867.224 647.552C868.395 632.018 871.03 586.314 861.253 527.964C854.286 486.476 844.138 457.086 833.346 425.823C810.826 360.585 786.022 313.944 778.041 299.269C778.041 299.269 746.075 240.548 692.838 177.69C682.456 165.435 671.996 153.901 654.979 144.3C644.129 138.192 624.614 129.469 574.265 128.356C548.798 127.79 512.735 129.098 469.626 137.821C471.792 141.139 473.939 144.456 476.105 147.793C464.24 141.568 446.969 133.333 425.288 125.878C403.9 118.521 387.702 115.164 362.001 109.934C321.82 101.757 291.572 98.2838 284.273 97.4837C251.644 93.8539 227.758 93.1318 203.559 94.9858C188.259 96.1567 174.267 98.2447 159.709 106.441C150.459 111.652 144.019 117.623 136.291 124.883C121.342 138.914 111.878 151.657 107.389 157.765C75.5994 201.011 59.7142 222.653 44.6096 247.944C44.6096 247.944 33.6227 266.347 15.22 306.743C12.2538 313.241 7.12134 324.775 5.87238 340.64C5.67723 343.08 5.05274 351.003 6.26267 358.574C9.32652 377.816 23.5724 390.911 38.1501 403.42C70.3693 431.073 92.9677 446.763 92.9677 446.763C96.617 449.202 131.92 473.908 162.226 497.58C211.697 536.239 236.422 555.578 251.566 569.219C251.566 569.219 264.192 580.596 289.757 592.13C297.367 595.564 303.261 597.594 310.189 596.482C320.22 594.862 326.523 587.544 332.631 580.284C334.836 577.65 339.383 571.893 353.922 539.381C357.532 531.321 359.328 527.281 361.513 521.817C363.328 517.29 367.778 505.893 372.656 489.325C376.501 476.308 384.112 450.51 388.424 421.823C392.347 395.77 398.026 358.028 387.917 310.704C387 306.45 376.95 261.117 348.731 218.359C334.036 196.093 319.712 182.53 316.668 179.661C307.457 171.055 298.851 164.674 292.255 160.224C298.675 160.537 307.476 161.395 317.663 163.718C325.176 165.415 345.374 170.626 367.485 185.145C389.107 199.332 402.065 215.549 407.842 223.511C428.254 251.632 433.66 279.539 436.997 296.751C440.9 316.91 441.915 337.752 442.735 354.047C443.691 373.64 443.008 379.592 445.232 393.916C446.755 403.752 449.409 420.164 458.015 439.249C470.953 467.936 489.531 485.402 496.537 491.569C509.007 502.517 520.131 508.157 542.378 519.475C560.995 528.94 573.134 532.98 586.716 534.424C592.668 535.048 597.683 535.048 601.157 534.931C597.722 526.794 595.576 519.515 594.19 513.758C593 508.84 591.165 501.034 590.697 490.593C590.326 482.358 590.951 475.372 591.692 470.161C593.156 476.504 595.342 484.719 598.659 494.086C600.259 498.594 606.036 514.441 618.096 534.951C627.053 550.212 637.904 563.618 655.955 582.294C673.167 600.072 698.517 623.959 733.176 649.562C623.326 589.359 513.496 529.155 403.646 468.951" fill="#155DFC"/>
<path d="M562.652 325.145C573.171 318.588 582.07 313.885 588.568 310.704C594.501 307.777 597.565 306.645 601.194 305.728C603.712 305.084 611.811 303.249 622.29 304.674C626.642 305.279 632.77 306.177 639.736 310.041C648.069 314.666 652.577 320.774 653.69 322.335C655.017 324.209 657.905 328.326 659.661 334.298C660.754 337.947 660.52 339.313 661.984 342.611C663.525 346.065 665.223 347.9 667.955 351.256C670.16 353.949 673.166 357.852 676.6 362.887C674.785 361.872 665.594 356.896 656.012 357.072C651.68 357.15 647.367 358.243 647.367 358.243C643.893 359.121 641.571 360.214 640.732 360.565C632.984 363.785 615.284 359.511 608.181 347.939C603.692 340.64 606.834 335.918 601.507 331.156C599.536 329.4 596.94 328.092 585.27 326.687C579.748 326.023 572.039 325.321 562.691 325.184L562.652 325.145Z" fill="#003C8D"/>
<path d="M820.797 391.692C811.059 390.95 795.467 391.009 777.572 396.726C763.833 401.117 753.373 407.343 746.348 412.338C752.319 411.031 760.086 409.509 769.258 408.182C771.444 407.87 778.489 406.874 788.363 406.016C797.906 405.196 810.552 404.435 825.715 404.513C824.076 400.239 822.437 395.965 820.797 391.672V391.692Z" fill="#0052C9"/>
<path d="M841.795 450.627C830.925 450.256 815.625 450.997 798.218 456.032C786.177 459.506 776.283 464.15 768.711 468.405C774.019 467.624 780.693 466.765 788.401 466.043C790.977 465.809 798.549 465.107 808.834 464.677C818.455 464.267 831.12 464.033 846.244 464.599C844.761 459.955 843.278 455.291 841.814 450.646L841.795 450.627Z" fill="#0052C9"/>
<path d="M855.848 500.39C845.895 499.824 829.952 500.331 812.583 507.65C805.694 510.557 799.938 513.953 795.273 517.231C798.415 516.607 802.748 515.846 807.919 515.143C818.808 513.699 827.141 513.445 835.494 513.231C841.524 513.075 849.369 513.016 858.6 513.328L855.848 500.37V500.39Z" fill="#0052C9"/>
<path d="M570.282 597.028C599.399 605.985 630.096 616.016 657.475 624.934C674.434 630.457 688.289 635.043 697.344 638.048C665.281 603.663 633.238 569.297 601.174 534.912C596.471 534.853 589.095 534.502 580.254 532.824C573.971 531.633 559.627 528.394 529.769 512.157C516.031 504.683 509.161 500.956 502.526 496.038C469.975 471.917 457.427 437.142 453.836 426.799C450.656 417.607 448.47 397.116 444.235 356.525C438.732 303.893 439.552 300.537 435.766 285.276C432.819 273.392 426.203 245.329 407.859 219.511C401.81 210.983 378.099 178.607 333.858 164.927C315.378 159.209 299.141 158.565 288.271 158.956C297.034 165.298 309.016 174.86 321.662 188.111C327.926 194.668 354.408 223.16 373.493 269.859C379.465 284.457 389.866 310.489 392.423 346.085C394.316 372.371 391.154 392.94 390.432 397.409C385.671 426.877 376.264 444.87 371.854 486.436C371.483 489.91 371.23 492.759 371.093 494.555C377.318 504.059 383.368 511.142 387.973 516.06C392.442 520.822 396.092 523.964 397.224 525.076C397.224 525.076 403.605 530.716 410.923 535.614C444.43 558.095 570.282 597.028 570.282 597.028Z" fill="#0051C8"/>
<path d="M591.456 468.893C590.109 479.079 589.289 494.594 593.427 512.626C595.495 521.602 598.013 527.886 600.881 534.912C607.555 551.304 615.908 571.619 634.018 591.915C647.424 606.941 661.007 616.035 671.916 623.393C676.56 626.515 682.786 630.691 691.47 635.16C708.175 643.786 723.24 648.001 733.759 650.226C732.139 643.434 730.5 636.663 728.88 629.872C712.097 621.968 691.86 610.435 671.155 593.476C663.622 587.29 658.177 582.157 655.64 579.718C646.019 570.448 627.792 552.729 612.512 524.881C600.53 503.044 594.597 483.021 591.456 468.854V468.893Z" fill="#00398B"/>
<path d="M680.074 799.203C689.988 795.768 704.312 789.367 718.519 777.307C731.438 766.34 738.912 755.236 741.937 750.396C750.816 736.248 754.251 723.836 756.631 715.015C759.305 705.121 762.154 690.485 761.861 672.414C765.569 674.502 770.819 677.215 777.298 679.888C791.524 685.743 803.175 687.85 810.434 689.099C824.914 691.617 836.272 691.773 845.054 691.831C852.469 691.89 858.695 691.617 863.222 691.324C863.749 686.64 864.257 681.898 864.725 677.117C865.72 667.047 866.54 657.153 867.223 647.474C861.134 647.396 854.733 647.142 848.039 646.674C842.927 646.303 837.989 645.815 833.267 645.269C826.846 646.147 818.24 647.006 808.053 647.064C778.586 647.201 757.178 640.507 751.87 638.77C741.917 635.511 733.955 631.862 728.452 629.052C729.428 632.682 730.696 637.853 731.808 644.117C733.135 651.553 736.238 671.458 733.174 701.784C731.125 722.06 730.091 732.423 725.368 744.854C721.309 755.567 710.322 778.888 680.035 799.144L680.074 799.203Z" fill="#0050C8"/>
<path d="M493.94 571.483C489.179 567.034 474.133 552.846 461.233 537.625C458.15 533.995 453.017 527.867 446.89 519.183C444.86 516.295 442.733 513.153 440.547 509.718C435.395 501.62 428.682 490.925 422.789 475.626C419.139 466.141 416.934 457.847 415.568 451.7C411.88 469.225 412.465 483.783 413.578 493.306C414.846 504.274 417.246 512.255 419.315 518.968C421.54 526.208 424.857 535.497 429.931 545.918C436.937 549.49 442.967 552.28 447.553 554.31C460.453 560.028 470.756 563.677 477.45 566.019C484.144 568.38 489.823 570.195 493.96 571.483H493.94Z" fill="#003C8D"/>
<path d="M668.582 578.488C670.768 569.18 674.593 562.798 677.13 559.227C684.135 549.333 692.507 545.586 701.855 541.293C709.407 537.819 715.437 535.165 720.999 537.78C722.014 538.248 722.482 538.658 728.337 542.425C730.366 543.771 733.333 545.703 736.982 547.908C746.525 553.685 784.618 575.854 840.177 582.294C877.822 586.665 906.762 581.864 923.467 578.957C957.599 573.024 985.271 562.545 1005 553.392C994.15 582.001 979.26 598.999 970.186 607.8C935.371 641.58 892.731 644.976 865.839 647.591C859.79 648.176 838.518 649.757 809.344 645.269C745.822 635.511 697.503 602.824 668.582 578.508V578.488Z" fill="#8BC7FE"/>
<path d="M664.369 591.27C671.004 599.311 678.791 607.839 687.826 616.425C700.764 628.72 713.391 638.38 724.631 645.912C724.475 642.595 723.89 638.341 722.172 633.794C721.665 632.467 721.119 631.257 720.572 630.144C726.017 633.15 732.008 636.018 738.487 638.536C769.477 650.537 798.183 649.386 817.874 646.225C791.353 642.653 756.792 634.262 720.143 614.318C707.361 607.351 695.964 599.877 685.953 592.441C685.484 592.09 681.874 589.202 676.8 585.221C673.404 582.567 670.614 580.381 668.779 578.957C667.296 583.074 665.813 587.172 664.33 591.29L664.369 591.27Z" fill="#00398B"/>
<path d="M992.766 578.937C975.417 607.683 953.073 622.065 944.135 627.237C936.231 631.803 924.366 637.56 908.91 641.092C908.715 641.151 888.81 646.4 853.956 648.235C848.863 648.508 843.887 648.567 843.887 648.567C843.887 648.567 837.759 648.645 831.436 648.391C776.54 646.283 723.362 623.88 723.362 623.88C715.146 620.641 701.642 614.864 687.747 606.434C675.511 599.018 668.74 593.066 665.149 589.709C663.432 588.09 662.046 586.704 661.109 585.728C668.447 572.77 675.785 559.832 683.142 546.874C690.011 553.743 700.198 563.228 713.468 573.024C732.007 586.704 785.107 625.949 857.059 623.587C937.5 620.972 991.069 568.028 1005 553.333C1002.6 559.851 998.777 568.926 992.747 578.898L992.766 578.937Z" fill="#0087F7"/>
<path d="M649.906 574.117C651.233 571.268 653.146 567.423 655.761 563.111C656.971 561.12 661.323 553.997 666.533 548.416C670.67 543.986 682.047 531.789 698.733 531.282C708.119 530.989 715.847 534.502 721.019 537.761C717.604 538.073 712.94 538.736 707.534 540.239C701.796 541.859 695.279 543.323 689.502 547.909C681.462 554.29 677.013 562.896 668.582 580.791C666.884 584.421 665.577 587.426 664.757 589.358C661.596 586.294 658.415 583.094 655.195 579.737C653.38 577.845 651.624 575.971 649.906 574.098V574.117Z" fill="#0051CB"/>
</g>
<defs>
<clipPath id="clip0_221_160">
<rect width="1000" height="1000" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,17 +1,24 @@
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M40 270L108.5 178L476.5 185L659.5 260L736.5 393.5L775 503.5L783 581V637.5L705 648.5L547 581L336.5 493L162.5 525.5L40 441L1.5 384V373L40 270Z" fill="#155DFC"/>
<path d="M56.1471 456.017C216.773 564.638 246.915 617.48 288.949 598.234C300.059 593.142 329.951 574.804 339.263 493.69C336.61 493.565 331.376 493.583 325.625 495.809C289.59 509.838 290.623 589.332 272.659 589.421C272.374 589.421 271.751 589.421 270.95 589.19C269.187 588.869 267.015 588.193 263.757 586.679C254.232 582.228 249.461 579.985 242.232 575.623C242.232 575.623 234.844 571.226 228.114 566.525C218.179 559.582 212.5 551.214 201.355 541.208C192.026 532.841 191.901 535.03 170.127 519.043C162.632 513.541 157.13 509.197 146.43 500.723C128.858 486.818 116.716 477.204 106.354 468.248C93.3926 457.05 75.8558 440.51 56.4319 417.561C38.7706 384.357 17.7265 349.836 7.04424 353.307C0.225388 355.533 -0.825022 372.339 0.492458 383.609C4.88999 421.62 41.6548 446.243 56.1471 456.035V456.017Z" fill="#003A86"/>
<path d="M74.7886 445.976C161.19 462.783 247.574 479.607 333.976 496.414C344.017 511.957 354.664 521.624 361.946 527.304C361.946 527.304 404.906 560.792 470.139 558.3C473.273 558.175 481.053 557.57 491.629 558.709C502.489 559.884 504.376 561.042 521.628 564.157C539.361 567.362 541.355 566.864 548.44 569.605C556.684 572.792 562.523 576.78 566.618 579.611C573.401 584.293 575.004 586.572 587.983 597.789C595.175 604.002 598.772 607.118 602.065 609.61C608.119 614.186 617.822 621.468 631.62 627.343C639.471 630.672 647.198 632.951 654.533 635.105C658.557 636.28 661.94 637.188 664.343 637.794C665.554 649.402 666.408 665.924 664.343 685.526C662.189 706.018 660.693 720.296 652.076 736.445C648.248 743.619 634.344 768.687 604.344 779.637C598.291 781.844 579.722 788.325 557.52 782.361C550.061 780.367 536.209 776.432 525.242 763.275C513.99 749.762 512.797 734.967 512.512 730.551C511.96 722.059 511.195 710.326 519.331 700.552C525.758 692.843 536.476 687.858 546.607 688.73C558.731 689.781 562.078 698.576 570.535 696.368C574.576 695.318 574.541 693.128 585.686 681.466C595.727 670.962 598.06 670.321 598.416 666.654C599.252 657.859 586.968 650.043 582.054 646.909C578.386 644.577 569.413 639.432 553.408 637.367C544.274 636.191 526.56 634.108 506.139 642.369C481.231 652.429 468.751 671.194 464.78 677.372C454.347 693.537 451.819 708.689 450.235 718.73C449.362 724.302 446.977 741.946 451.606 764.183C458.086 795.375 474.181 815.778 479.326 821.921C501.652 848.555 528.536 858.4 541.141 862.834C600.089 883.575 653.18 861.819 663.417 857.386C719.677 833.048 744.745 785.654 757.065 762.385C780.477 718.142 783.45 678.351 786.619 636.013C787.688 621.842 790.091 580.145 781.171 526.912C774.816 489.061 765.558 462.249 755.712 433.727C735.167 374.209 712.538 331.658 705.256 318.269C705.256 318.269 676.094 264.698 627.525 207.352C618.053 196.171 608.51 185.649 592.985 176.889C583.087 171.317 565.283 163.359 519.349 162.344C496.115 161.827 463.214 163.02 423.885 170.979C425.861 174.005 427.82 177.032 429.796 180.076C418.971 174.397 403.215 166.884 383.435 160.083C363.922 153.371 349.145 150.308 325.697 145.537C289.039 138.077 261.443 134.908 254.785 134.178C225.017 130.867 203.225 130.208 181.148 131.899C167.19 132.968 154.425 134.873 141.143 142.35C132.704 147.104 126.829 152.552 119.779 159.175C106.141 171.976 97.5063 183.602 93.4114 189.174C64.409 228.627 49.9167 248.372 36.1366 271.445C36.1366 271.445 26.1131 288.234 9.3241 325.088C6.61793 331.017 1.93555 341.539 0.796104 356.013C0.618066 358.239 0.0483395 365.467 1.15217 372.375C3.94737 389.93 16.9441 401.876 30.2435 413.288C59.6376 438.516 80.2544 452.83 80.2544 452.83C83.5837 455.056 115.791 477.595 143.44 499.191C188.573 534.461 211.13 552.104 224.946 564.549C224.946 564.549 236.465 574.929 259.788 585.451C266.731 588.584 272.108 590.436 278.428 589.421C287.579 587.943 293.33 581.267 298.903 574.644C300.914 572.24 305.063 566.988 318.327 537.327C321.62 529.974 323.258 526.289 325.252 521.304C326.908 517.173 330.967 506.776 335.418 491.66C338.926 479.785 345.869 456.249 349.804 430.077C353.382 406.309 358.563 371.877 349.341 328.702C348.504 324.821 339.335 283.463 313.591 244.455C300.184 224.141 287.117 211.767 284.339 209.15C275.936 201.298 268.084 195.477 262.067 191.417C267.924 191.702 275.954 192.486 285.247 194.604C292.102 196.153 310.529 200.907 330.7 214.153C350.427 227.096 362.248 241.891 367.518 249.155C386.141 274.81 391.073 300.27 394.117 315.973C397.678 334.364 398.604 353.378 399.352 368.245C400.224 386.12 399.601 391.55 401.63 404.618C403.019 413.591 405.44 428.564 413.292 445.976C425.096 472.147 442.045 488.082 448.437 493.708C459.813 503.696 469.961 508.841 490.258 519.167C507.242 527.802 518.316 531.487 530.708 532.805C536.138 533.375 540.714 533.375 543.883 533.268C540.749 525.844 538.791 519.203 537.527 513.951C536.441 509.464 534.767 502.343 534.34 492.818C534.002 485.304 534.571 478.931 535.248 474.177C536.583 479.963 538.577 487.459 541.604 496.004C543.064 500.117 548.334 514.574 559.336 533.286C567.508 547.208 577.407 559.439 593.876 576.478C609.579 592.697 632.706 614.489 664.325 637.847C564.108 582.922 463.908 527.998 363.691 473.073" fill="#155DFC"/>
<path d="M608.459 572.045C610.631 563.552 614.441 557.73 616.951 554.472C619.462 551.214 627.847 541.208 641.503 538.111C644.886 537.345 651.348 536.099 657.562 539.019C658.612 539.517 659.022 539.838 662.28 541.956C666.428 544.662 670.665 547.244 674.832 549.932C683.822 555.719 698.244 563.356 700.896 564.781C725.43 577.955 771.613 580.626 780.604 581.142C803.499 582.46 828.282 583.902 860.917 577.51C860.917 577.51 910.162 567.861 952.428 541.137C959.478 536.668 972.689 528.229 987.27 513.933C992.7 508.61 996.973 503.82 1000 500.224C999.715 502.841 999.163 506.794 997.881 511.441C995.353 520.645 991.044 528.87 977.887 545.677C967.722 558.656 962.63 565.137 953.941 573.558C949.757 577.599 935.479 591.059 913.331 603.86C867.184 630.512 822.14 633.913 804.229 635.07C793.049 635.8 772.717 636.423 748.165 632.951C685.122 624.049 637.176 594.228 608.459 572.045Z" fill="#8BC7FE"/>
<path d="M508.758 341.877C518.354 335.895 526.473 331.605 532.401 328.703C537.814 326.032 540.609 324.999 543.92 324.163C546.217 323.575 553.606 321.902 563.166 323.201C567.136 323.753 572.727 324.572 579.083 328.097C586.685 332.317 590.798 337.889 591.813 339.314C593.023 341.023 595.658 344.779 597.26 350.227C598.257 353.557 598.044 354.803 599.379 357.812C600.786 360.963 602.335 362.637 604.827 365.699C606.839 368.156 609.581 371.717 612.714 376.31C611.058 375.384 602.673 370.844 593.931 371.004C589.979 371.076 586.044 372.073 586.044 372.073C582.875 372.874 580.756 373.871 579.991 374.191C572.923 377.129 556.775 373.23 550.294 362.672C546.199 356.014 549.066 351.705 544.205 347.361C542.407 345.759 540.039 344.566 529.392 343.284C524.354 342.679 517.321 342.038 508.793 341.913L508.758 341.877Z" fill="#003C8D"/>
<path d="M744.263 402.588C735.379 401.912 721.154 401.965 704.828 407.182C692.294 411.187 682.751 416.867 676.342 421.425C681.79 420.232 688.876 418.843 697.243 417.632C699.237 417.347 705.665 416.439 714.673 415.656C723.379 414.908 734.916 414.214 748.75 414.285C747.254 410.386 745.759 406.487 744.263 402.57V402.588Z" fill="#0052C9"/>
<path d="M763.423 456.356C753.507 456.018 739.548 456.694 723.667 461.288C712.682 464.457 703.656 468.694 696.748 472.575C701.591 471.863 707.68 471.08 714.712 470.421C717.062 470.208 723.97 469.567 733.353 469.175C742.13 468.801 753.685 468.587 767.482 469.104C766.129 464.866 764.776 460.611 763.441 456.374L763.423 456.356Z" fill="#0052C9"/>
<path d="M776.241 501.755C767.161 501.239 752.616 501.702 736.77 508.378C730.486 511.031 725.234 514.129 720.979 517.12C723.845 516.55 727.797 515.856 732.515 515.215C742.45 513.897 750.052 513.666 757.672 513.47C763.173 513.328 770.331 513.274 778.752 513.559L776.241 501.737V501.755Z" fill="#0052C9"/>
<path d="M604.271 583.707C610.859 591.042 618.586 598.822 627.541 606.656C640.378 617.872 652.911 626.685 664.074 633.557C663.932 630.531 663.344 626.649 661.635 622.501C661.137 621.29 660.603 620.187 660.051 619.172C665.463 621.913 671.392 624.531 677.837 626.827C708.584 637.777 737.07 636.726 756.636 633.842C730.322 630.584 696.014 622.928 659.659 604.733C646.965 598.377 635.677 591.558 625.725 584.775C625.262 584.454 621.684 581.819 616.645 578.187C613.28 575.766 610.521 573.772 608.687 572.472C607.209 576.229 605.749 579.968 604.271 583.724V583.707Z" fill="#00398B"/>
<path d="M608.686 561.523C618.727 568.199 633.024 576.923 651.005 585.398C675.913 597.148 730.143 621.931 802.302 617.48C881.03 612.637 937.201 575.695 955.13 559.297C967.592 547.903 977.865 534.888 977.865 534.888C988.12 521.892 995.206 509.678 999.995 500.207C999.265 506.634 997.645 513.435 994.672 520.271C992.09 526.2 987.835 532.093 979.467 543.63C973.699 551.57 970.815 555.541 966.524 560.508C959.723 568.395 953.901 573.701 949.735 577.475C943.86 582.816 935.118 590.668 922.424 598.839C919.291 600.851 916.3 602.65 913.451 604.252C907.237 607.741 900.739 610.982 892.193 614.56C877.096 620.898 866.324 625.438 851.209 629.124C851.209 629.124 831.411 633.949 796.658 635.64C791.602 635.889 786.652 635.943 786.652 635.943C783.537 635.978 779.371 636.014 774.297 635.782C774.297 635.782 768.19 635.604 761.442 634.696C705.129 627.165 666.602 609.878 666.602 609.878C650.115 602.454 628.056 590.65 604.662 572.098C606.015 568.555 607.368 565.012 608.704 561.469L608.686 561.523Z" fill="#0087F7"/>
<path d="M589.088 569.748C590.548 566.703 592.702 562.609 595.729 558.033C597.883 554.757 601.551 549.238 606.411 544.627C609.651 541.547 621.615 530.206 637.995 531.452C641.449 531.719 648.713 532.805 656.689 538.609C654.517 537.879 651.17 537.042 647.11 537.185C638.6 537.47 632.583 541.725 629.218 544.182C619.39 551.357 614.743 561.06 608.458 574.181C606.553 578.151 605.165 581.481 604.275 583.724C601.533 582.05 598.275 579.718 594.981 576.531C592.56 574.181 590.619 571.849 589.088 569.766V569.748Z" fill="#0051CB"/>
<path d="M515.717 589.92C542.28 598.092 570.285 607.243 595.264 615.379C610.735 620.418 623.376 624.602 631.637 627.344C602.385 595.973 573.152 564.621 543.9 533.251C539.609 533.197 532.88 532.877 524.814 531.346C519.082 530.26 505.996 527.304 478.756 512.491C466.222 505.673 459.955 502.272 453.902 497.785C424.205 475.78 412.757 444.054 409.482 434.618C406.579 426.232 404.585 407.538 400.722 370.506C395.701 322.489 396.449 319.427 392.995 305.505C388.331 286.722 383.328 266.514 367.536 245.506C346.563 217.59 319.109 204.931 303.905 199.59C287.027 193.661 272.143 192.166 262.084 191.863C269.295 196.652 279.104 203.916 289.359 214.136C315.816 240.485 327.139 268.437 336.183 291.404C342.628 307.766 351.245 330.181 353.453 360.946C355.18 384.927 352.296 403.692 351.637 407.769C347.293 434.653 338.711 451.068 334.688 488.99C334.35 492.159 334.118 494.759 333.993 496.397C339.673 505.067 345.192 511.53 349.394 516.017C353.471 520.361 356.8 523.227 357.833 524.242C357.833 524.242 363.655 529.387 370.331 533.856C400.9 554.366 515.717 589.884 515.717 589.884V589.92Z" fill="#0051C8"/>
<path d="M535.035 473.02C534.055 482.687 533.682 497.126 537.527 513.933C539.432 522.265 541.711 528.23 543.634 533.25C548.388 545.606 556.275 565.546 573.865 585.255C586.096 598.964 598.487 607.261 608.44 613.973C612.677 616.821 618.356 620.631 626.279 624.708C641.519 632.577 655.264 636.423 664.86 638.453C663.382 632.257 661.887 626.079 660.409 619.883C628.718 605.071 606.837 586.911 593.591 574.128C583.817 564.692 568.007 549.185 554.245 524.099C543.313 504.177 537.901 485.91 535.035 472.984V473.02Z" fill="#003C8D"/>
<path d="M615.879 774.367C624.924 771.234 637.992 765.394 650.953 754.391C662.739 744.385 669.558 734.255 672.317 729.84C680.418 716.932 683.552 705.609 685.724 697.561C688.163 688.535 690.762 675.182 690.495 658.696C693.878 660.601 698.667 663.076 704.578 665.515C717.557 670.856 728.186 672.779 734.809 673.918C748.019 676.215 758.381 676.357 766.393 676.411C773.158 676.464 778.837 676.215 782.968 675.948C783.449 671.675 783.911 667.348 784.339 662.986C785.247 653.8 785.994 644.773 786.618 635.943C781.063 635.871 775.223 635.64 769.116 635.213C764.452 634.874 759.948 634.429 755.639 633.931C749.782 634.732 741.93 635.515 732.637 635.569C705.753 635.693 686.222 629.587 681.379 628.002C672.3 625.029 665.036 621.699 660.015 619.136C660.905 622.447 662.062 627.165 663.077 632.88C664.288 639.664 667.119 657.823 664.323 685.49C662.454 703.989 661.51 713.442 657.202 724.783C653.499 734.558 643.475 755.833 615.844 774.314L615.879 774.367Z" fill="#0050C8"/>
<path d="M446.067 566.615C441.723 562.556 427.997 549.612 416.228 535.725C413.415 532.414 408.733 526.823 403.143 518.901C401.291 516.266 399.35 513.399 397.356 510.266C392.656 502.877 386.532 493.121 381.155 479.163C377.826 470.51 375.814 462.943 374.567 457.335C371.203 473.323 371.737 486.605 372.752 495.293C373.909 505.299 376.099 512.58 377.986 518.705C380.015 525.31 383.042 533.785 387.671 543.292C394.063 546.55 399.564 549.096 403.748 550.948C415.516 556.164 424.917 559.493 431.023 561.63C437.13 563.784 442.311 565.44 446.085 566.615H446.067Z" fill="#003C8D"/>
<g clip-path="url(#clip0_221_160)">
<path d="M213 149H388L725.5 233.5L856.5 602.5L811.5 685L733 650L679.5 631.5L581 591.5L492.5 570.5L430.5 545.5L371.5 494.5L166.5 386.5L213 149Z" fill="#155DFC"/>
<path d="M66.5436 450.256C242.608 569.316 275.646 627.237 321.721 606.141C333.899 600.56 366.664 580.46 376.871 491.549C373.963 491.413 368.225 491.432 361.922 493.872C322.424 509.249 323.556 596.384 303.865 596.481C303.553 596.481 302.87 596.481 301.992 596.228C300.06 595.876 297.679 595.135 294.108 593.476C283.667 588.597 278.437 586.138 270.514 581.357C270.514 581.357 262.415 576.537 255.039 571.385C244.149 563.774 237.924 554.602 225.708 543.635C215.482 534.463 215.345 536.863 191.478 519.339C183.263 513.308 177.233 508.547 165.504 499.258C146.243 484.016 132.934 473.478 121.576 463.662C107.369 451.387 88.1466 433.258 66.8558 408.103C47.4969 371.708 24.4303 333.868 12.7213 337.674C5.24705 340.113 4.09568 358.535 5.53979 370.888C10.36 412.553 50.6584 439.542 66.5436 450.275V450.256Z" fill="#003A86"/>
<path d="M86.9766 439.249C181.683 457.672 276.369 476.113 371.076 494.535C382.082 511.572 393.752 522.169 401.734 528.394C401.734 528.394 448.823 565.101 520.326 562.369C523.761 562.233 532.289 561.569 543.881 562.818C555.785 564.106 557.853 565.375 576.763 568.79C596.2 572.302 598.386 571.756 606.153 574.761C615.188 578.255 621.589 582.626 626.078 585.729C633.513 590.861 635.269 593.359 649.496 605.654C657.38 612.464 661.322 615.879 664.932 618.611C671.567 623.627 682.203 631.608 697.327 638.048C705.933 641.698 714.402 644.196 722.443 646.557C726.853 647.845 730.561 648.84 733.195 649.504C734.522 662.227 735.459 680.337 733.195 701.823C730.834 724.285 729.195 739.936 719.75 757.636C715.554 765.501 700.313 792.978 667.43 804.979C660.795 807.399 640.441 814.503 616.106 807.965C607.929 805.78 592.746 801.467 580.725 787.045C568.391 772.233 567.084 756.016 566.772 751.177C566.167 741.868 565.328 729.008 574.246 718.294C581.291 709.844 593.039 704.38 604.143 705.336C617.433 706.487 621.101 716.128 630.371 713.708C634.801 712.557 634.762 710.156 646.978 697.374C657.985 685.86 660.541 685.158 660.931 681.138C661.849 671.497 648.383 662.93 642.997 659.495C638.977 656.939 629.142 651.299 611.598 649.035C601.586 647.747 582.169 645.464 559.785 654.519C532.484 665.545 518.804 686.114 514.452 692.885C503.016 710.605 500.245 727.212 498.508 738.219C497.552 744.327 494.937 763.666 500.011 788.04C507.114 822.231 524.756 844.595 530.396 851.328C554.868 880.522 584.335 891.314 598.152 896.173C662.766 918.908 720.959 895.061 732.181 890.201C793.848 863.524 821.325 811.575 834.829 786.069C860.492 737.575 863.75 693.959 867.224 647.552C868.395 632.018 871.03 586.314 861.253 527.964C854.286 486.476 844.138 457.086 833.346 425.823C810.826 360.585 786.022 313.944 778.041 299.269C778.041 299.269 746.075 240.548 692.838 177.69C682.456 165.435 671.996 153.901 654.979 144.3C644.129 138.192 624.614 129.469 574.265 128.356C548.798 127.79 512.735 129.098 469.626 137.821C471.792 141.139 473.939 144.456 476.105 147.793C464.24 141.568 446.969 133.333 425.288 125.878C403.9 118.521 387.702 115.164 362.001 109.934C321.82 101.757 291.572 98.2838 284.273 97.4837C251.644 93.8539 227.758 93.1318 203.559 94.9858C188.259 96.1567 174.267 98.2447 159.709 106.441C150.459 111.652 144.019 117.623 136.291 124.883C121.342 138.914 111.878 151.657 107.389 157.765C75.5994 201.011 59.7142 222.653 44.6096 247.944C44.6096 247.944 33.6227 266.347 15.22 306.743C12.2538 313.241 7.12134 324.775 5.87238 340.64C5.67723 343.08 5.05274 351.003 6.26267 358.574C9.32652 377.816 23.5724 390.911 38.1501 403.42C70.3693 431.073 92.9677 446.763 92.9677 446.763C96.617 449.202 131.92 473.908 162.226 497.58C211.697 536.239 236.422 555.578 251.566 569.219C251.566 569.219 264.192 580.596 289.757 592.13C297.367 595.564 303.261 597.594 310.189 596.482C320.22 594.862 326.523 587.544 332.631 580.284C334.836 577.65 339.383 571.893 353.922 539.381C357.532 531.321 359.328 527.281 361.513 521.817C363.328 517.29 367.778 505.893 372.656 489.325C376.501 476.308 384.112 450.51 388.424 421.823C392.347 395.77 398.026 358.028 387.917 310.704C387 306.45 376.95 261.117 348.731 218.359C334.036 196.093 319.712 182.53 316.668 179.661C307.457 171.055 298.851 164.674 292.255 160.224C298.675 160.537 307.476 161.395 317.663 163.718C325.176 165.415 345.374 170.626 367.485 185.145C389.107 199.332 402.065 215.549 407.842 223.511C428.254 251.632 433.66 279.539 436.997 296.751C440.9 316.91 441.915 337.752 442.735 354.047C443.691 373.64 443.008 379.592 445.232 393.916C446.755 403.752 449.409 420.164 458.015 439.249C470.953 467.936 489.531 485.402 496.537 491.569C509.007 502.517 520.131 508.157 542.378 519.475C560.995 528.94 573.134 532.98 586.716 534.424C592.668 535.048 597.683 535.048 601.157 534.931C597.722 526.794 595.576 519.515 594.19 513.758C593 508.84 591.165 501.034 590.697 490.593C590.326 482.358 590.951 475.372 591.692 470.161C593.156 476.504 595.342 484.719 598.659 494.086C600.259 498.594 606.036 514.441 618.096 534.951C627.053 550.212 637.904 563.618 655.955 582.294C673.167 600.072 698.517 623.959 733.176 649.562C623.326 589.359 513.496 529.155 403.646 468.951" fill="#155DFC"/>
<path d="M562.652 325.145C573.171 318.588 582.07 313.885 588.568 310.704C594.501 307.777 597.565 306.645 601.194 305.728C603.712 305.084 611.811 303.249 622.29 304.674C626.642 305.279 632.77 306.177 639.736 310.041C648.069 314.666 652.577 320.774 653.69 322.335C655.017 324.209 657.905 328.326 659.661 334.298C660.754 337.947 660.52 339.313 661.984 342.611C663.525 346.065 665.223 347.9 667.955 351.256C670.16 353.949 673.166 357.852 676.6 362.887C674.785 361.872 665.594 356.896 656.012 357.072C651.68 357.15 647.367 358.243 647.367 358.243C643.893 359.121 641.571 360.214 640.732 360.565C632.984 363.785 615.284 359.511 608.181 347.939C603.692 340.64 606.834 335.918 601.507 331.156C599.536 329.4 596.94 328.092 585.27 326.687C579.748 326.023 572.039 325.321 562.691 325.184L562.652 325.145Z" fill="#003C8D"/>
<path d="M820.797 391.692C811.059 390.95 795.467 391.009 777.572 396.726C763.833 401.117 753.373 407.343 746.348 412.338C752.319 411.031 760.086 409.509 769.258 408.182C771.444 407.87 778.489 406.874 788.363 406.016C797.906 405.196 810.552 404.435 825.715 404.513C824.076 400.239 822.437 395.965 820.797 391.672V391.692Z" fill="#0052C9"/>
<path d="M841.795 450.627C830.925 450.256 815.625 450.997 798.218 456.032C786.177 459.506 776.283 464.15 768.711 468.405C774.019 467.624 780.693 466.765 788.401 466.043C790.977 465.809 798.549 465.107 808.834 464.677C818.455 464.267 831.12 464.033 846.244 464.599C844.761 459.955 843.278 455.291 841.814 450.646L841.795 450.627Z" fill="#0052C9"/>
<path d="M855.848 500.39C845.895 499.824 829.952 500.331 812.583 507.65C805.694 510.557 799.938 513.953 795.273 517.231C798.415 516.607 802.748 515.846 807.919 515.143C818.808 513.699 827.141 513.445 835.494 513.231C841.524 513.075 849.369 513.016 858.6 513.328L855.848 500.37V500.39Z" fill="#0052C9"/>
<path d="M570.282 597.028C599.399 605.985 630.096 616.016 657.475 624.934C674.434 630.457 688.289 635.043 697.344 638.048C665.281 603.663 633.238 569.297 601.174 534.912C596.471 534.853 589.095 534.502 580.254 532.824C573.971 531.633 559.627 528.394 529.769 512.157C516.031 504.683 509.161 500.956 502.526 496.038C469.975 471.917 457.427 437.142 453.836 426.799C450.656 417.607 448.47 397.116 444.235 356.525C438.732 303.893 439.552 300.537 435.766 285.276C432.819 273.392 426.203 245.329 407.859 219.511C401.81 210.983 378.099 178.607 333.858 164.927C315.378 159.209 299.141 158.565 288.271 158.956C297.034 165.298 309.016 174.86 321.662 188.111C327.926 194.668 354.408 223.16 373.493 269.859C379.465 284.457 389.866 310.489 392.423 346.085C394.316 372.371 391.154 392.94 390.432 397.409C385.671 426.877 376.264 444.87 371.854 486.436C371.483 489.91 371.23 492.759 371.093 494.555C377.318 504.059 383.368 511.142 387.973 516.06C392.442 520.822 396.092 523.964 397.224 525.076C397.224 525.076 403.605 530.716 410.923 535.614C444.43 558.095 570.282 597.028 570.282 597.028Z" fill="#0051C8"/>
<path d="M591.456 468.893C590.109 479.079 589.289 494.594 593.427 512.626C595.495 521.602 598.013 527.886 600.881 534.912C607.555 551.304 615.908 571.619 634.018 591.915C647.424 606.941 661.007 616.035 671.916 623.393C676.56 626.515 682.786 630.691 691.47 635.16C708.175 643.786 723.24 648.001 733.759 650.226C732.139 643.434 730.5 636.663 728.88 629.872C712.097 621.968 691.86 610.435 671.155 593.476C663.622 587.29 658.177 582.157 655.64 579.718C646.019 570.448 627.792 552.729 612.512 524.881C600.53 503.044 594.597 483.021 591.456 468.854V468.893Z" fill="#00398B"/>
<path d="M680.074 799.203C689.988 795.768 704.312 789.367 718.519 777.307C731.438 766.34 738.912 755.236 741.937 750.396C750.816 736.248 754.251 723.836 756.631 715.015C759.305 705.121 762.154 690.485 761.861 672.414C765.569 674.502 770.819 677.215 777.298 679.888C791.524 685.743 803.175 687.85 810.434 689.099C824.914 691.617 836.272 691.773 845.054 691.831C852.469 691.89 858.695 691.617 863.222 691.324C863.749 686.64 864.257 681.898 864.725 677.117C865.72 667.047 866.54 657.153 867.223 647.474C861.134 647.396 854.733 647.142 848.039 646.674C842.927 646.303 837.989 645.815 833.267 645.269C826.846 646.147 818.24 647.006 808.053 647.064C778.586 647.201 757.178 640.507 751.87 638.77C741.917 635.511 733.955 631.862 728.452 629.052C729.428 632.682 730.696 637.853 731.808 644.117C733.135 651.553 736.238 671.458 733.174 701.784C731.125 722.06 730.091 732.423 725.368 744.854C721.309 755.567 710.322 778.888 680.035 799.144L680.074 799.203Z" fill="#0050C8"/>
<path d="M493.94 571.483C489.179 567.034 474.133 552.846 461.233 537.625C458.15 533.995 453.017 527.867 446.89 519.183C444.86 516.295 442.733 513.153 440.547 509.718C435.395 501.62 428.682 490.925 422.789 475.626C419.139 466.141 416.934 457.847 415.568 451.7C411.88 469.225 412.465 483.783 413.578 493.306C414.846 504.274 417.246 512.255 419.315 518.968C421.54 526.208 424.857 535.497 429.931 545.918C436.937 549.49 442.967 552.28 447.553 554.31C460.453 560.028 470.756 563.677 477.45 566.019C484.144 568.38 489.823 570.195 493.96 571.483H493.94Z" fill="#003C8D"/>
<path d="M668.582 578.488C670.768 569.18 674.593 562.798 677.13 559.227C684.135 549.333 692.507 545.586 701.855 541.293C709.407 537.819 715.437 535.165 720.999 537.78C722.014 538.248 722.482 538.658 728.337 542.425C730.366 543.771 733.333 545.703 736.982 547.908C746.525 553.685 784.618 575.854 840.177 582.294C877.822 586.665 906.762 581.864 923.467 578.957C957.599 573.024 985.271 562.545 1005 553.392C994.15 582.001 979.26 598.999 970.186 607.8C935.371 641.58 892.731 644.976 865.839 647.591C859.79 648.176 838.518 649.757 809.344 645.269C745.822 635.511 697.503 602.824 668.582 578.508V578.488Z" fill="#8BC7FE"/>
<path d="M664.369 591.27C671.004 599.311 678.791 607.839 687.826 616.425C700.764 628.72 713.391 638.38 724.631 645.912C724.475 642.595 723.89 638.341 722.172 633.794C721.665 632.467 721.119 631.257 720.572 630.144C726.017 633.15 732.008 636.018 738.487 638.536C769.477 650.537 798.183 649.386 817.874 646.225C791.353 642.653 756.792 634.262 720.143 614.318C707.361 607.351 695.964 599.877 685.953 592.441C685.484 592.09 681.874 589.202 676.8 585.221C673.404 582.567 670.614 580.381 668.779 578.957C667.296 583.074 665.813 587.172 664.33 591.29L664.369 591.27Z" fill="#00398B"/>
<path d="M992.766 578.937C975.417 607.683 953.073 622.065 944.135 627.237C936.231 631.803 924.366 637.56 908.91 641.092C908.715 641.151 888.81 646.4 853.956 648.235C848.863 648.508 843.887 648.567 843.887 648.567C843.887 648.567 837.759 648.645 831.436 648.391C776.54 646.283 723.362 623.88 723.362 623.88C715.146 620.641 701.642 614.864 687.747 606.434C675.511 599.018 668.74 593.066 665.149 589.709C663.432 588.09 662.046 586.704 661.109 585.728C668.447 572.77 675.785 559.832 683.142 546.874C690.011 553.743 700.198 563.228 713.468 573.024C732.007 586.704 785.107 625.949 857.059 623.587C937.5 620.972 991.069 568.028 1005 553.333C1002.6 559.851 998.777 568.926 992.747 578.898L992.766 578.937Z" fill="#0087F7"/>
<path d="M649.906 574.117C651.233 571.268 653.146 567.423 655.761 563.111C656.971 561.12 661.323 553.997 666.533 548.416C670.67 543.986 682.047 531.789 698.733 531.282C708.119 530.989 715.847 534.502 721.019 537.761C717.604 538.073 712.94 538.736 707.534 540.239C701.796 541.859 695.279 543.323 689.502 547.909C681.462 554.29 677.013 562.896 668.582 580.791C666.884 584.421 665.577 587.426 664.757 589.358C661.596 586.294 658.415 583.094 655.195 579.737C653.38 577.845 651.624 575.971 649.906 574.098V574.117Z" fill="#0051CB"/>
</g>
<defs>
<clipPath id="clip0_221_160">
<rect width="1000" height="1000" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,8 +1,7 @@
import { FormValidator } from '../../../../shared/lib';
import type { EmailNotifier } from './EmailNotifier';
export const validateEmailNotifier = (isCreate: boolean, notifier: EmailNotifier): boolean => {
if (!notifier.targetEmail || !FormValidator.isValidEmail(notifier.targetEmail)) {
if (!notifier.targetEmail) {
return false;
}
@@ -18,9 +17,5 @@ export const validateEmailNotifier = (isCreate: boolean, notifier: EmailNotifier
return false;
}
if (notifier.smtpUser && !FormValidator.isValidEmail(notifier.smtpUser)) {
return false;
}
return true;
};

View File

@@ -4,4 +4,6 @@ export interface S3Storage {
s3AccessKey: string;
s3SecretKey: string;
s3Endpoint?: string;
s3Prefix?: string;
s3UseVirtualHostedStyle?: boolean;
}

View File

@@ -16,7 +16,7 @@ import { EditDatabaseSpecificDataComponent } from './edit/EditDatabaseSpecificDa
interface Props {
workspaceId: string;
onCreated: () => void;
onCreated: (databaseId: string) => void;
onClose: () => void;
}
@@ -58,7 +58,7 @@ export const CreateDatabaseComponent = ({ workspaceId, onCreated, onClose }: Pro
await backupsApi.makeBackup(createdDatabase.id);
}
onCreated();
onCreated(createdDatabase.id);
onClose();
} catch (error) {
alert(error);

View File

@@ -14,6 +14,8 @@ interface Props {
isCanManageDBs: boolean;
}
const SELECTED_DATABASE_STORAGE_KEY = 'selectedDatabaseId';
export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }: Props) => {
const [isLoading, setIsLoading] = useState(true);
const [databases, setDatabases] = useState<Database[]>([]);
@@ -22,7 +24,16 @@ export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }:
const [isShowAddDatabase, setIsShowAddDatabase] = useState(false);
const [selectedDatabaseId, setSelectedDatabaseId] = useState<string | undefined>(undefined);
const loadDatabases = (isSilent = false) => {
const updateSelectedDatabaseId = (databaseId: string | undefined) => {
setSelectedDatabaseId(databaseId);
if (databaseId) {
localStorage.setItem(`${SELECTED_DATABASE_STORAGE_KEY}_${workspace.id}`, databaseId);
} else {
localStorage.removeItem(`${SELECTED_DATABASE_STORAGE_KEY}_${workspace.id}`);
}
};
const loadDatabases = (isSilent = false, selectDatabaseId?: string) => {
if (!isSilent) {
setIsLoading(true);
}
@@ -31,8 +42,17 @@ export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }:
.getDatabases(workspace.id)
.then((databases) => {
setDatabases(databases);
if (!selectedDatabaseId && !isSilent) {
setSelectedDatabaseId(databases[0]?.id);
if (selectDatabaseId) {
updateSelectedDatabaseId(selectDatabaseId);
} else if (!selectedDatabaseId && !isSilent) {
const savedDatabaseId = localStorage.getItem(
`${SELECTED_DATABASE_STORAGE_KEY}_${workspace.id}`,
);
const databaseToSelect =
savedDatabaseId && databases.some((db) => db.id === savedDatabaseId)
? savedDatabaseId
: databases[0]?.id;
updateSelectedDatabaseId(databaseToSelect);
}
})
.catch((e) => alert(e.message))
@@ -95,7 +115,7 @@ export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }:
key={database.id}
database={database}
selectedDatabaseId={selectedDatabaseId}
setSelectedDatabaseId={setSelectedDatabaseId}
setSelectedDatabaseId={updateSelectedDatabaseId}
/>
))
: searchQuery && (
@@ -119,10 +139,11 @@ export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }:
loadDatabases();
}}
onDatabaseDeleted={() => {
loadDatabases();
setSelectedDatabaseId(
databases.filter((database) => database.id !== selectedDatabaseId)[0]?.id,
const remainingDatabases = databases.filter(
(database) => database.id !== selectedDatabaseId,
);
updateSelectedDatabaseId(remainingDatabases[0]?.id);
loadDatabases();
}}
isCanManageDBs={isCanManageDBs}
/>
@@ -141,8 +162,8 @@ export const DatabasesComponent = ({ contentHeight, workspace, isCanManageDBs }:
<CreateDatabaseComponent
workspaceId={workspace.id}
onCreated={() => {
loadDatabases();
onCreated={(databaseId) => {
loadDatabases(false, databaseId);
setIsShowAddDatabase(false);
}}
onClose={() => setIsShowAddDatabase(false)}

View File

@@ -103,6 +103,10 @@ export const EditDatabaseSpecificDataComponent = ({
if (!editingDatabase.id && !editingDatabase.postgresql?.password) isAllFieldsFilled = false;
if (!editingDatabase.postgresql?.database) isAllFieldsFilled = false;
const isLocalhostDb =
editingDatabase.postgresql?.host?.includes('localhost') ||
editingDatabase.postgresql?.host?.includes('127.0.0.1');
return (
<div>
{editingDatabase.type === DatabaseType.POSTGRES && (
@@ -170,6 +174,23 @@ export const EditDatabaseSpecificDataComponent = ({
/>
</div>
{isLocalhostDb && (
<div className="mb-1 flex">
<div className="min-w-[150px]" />
<div className="max-w-[200px] text-xs text-gray-500">
Please{' '}
<a
href="https://postgresus.com/faq#how-to-backup-localhost"
target="_blank"
rel="noreferrer"
>
read this document
</a>{' '}
to study how to backup local database
</div>
</div>
)}
<div className="mb-1 flex w-full items-center">
<div className="min-w-[150px]">Port</div>
<InputNumber

View File

@@ -255,7 +255,10 @@ export function EditNotifierComponent({
<EditTelegramNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
@@ -263,7 +266,10 @@ export function EditNotifierComponent({
<EditEmailNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
@@ -271,7 +277,10 @@ export function EditNotifierComponent({
<EditWebhookNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
@@ -279,7 +288,10 @@ export function EditNotifierComponent({
<EditSlackNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
@@ -287,14 +299,20 @@ export function EditNotifierComponent({
<EditDiscordNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
{notifier?.notifierType === NotifierType.TEAMS && (
<EditTeamsNotifierComponent
notifier={notifier}
setNotifier={setNotifier}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestNotificationSuccess(false);
}}
/>
)}
</div>

View File

@@ -5,10 +5,10 @@ import type { Notifier } from '../../../../../entity/notifiers';
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditDiscordNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditDiscordNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
return (
<>
<div className="flex">
@@ -26,7 +26,7 @@ export function EditDiscordNotifierComponent({ notifier, setNotifier, setIsUnsav
channelWebhookUrl: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"

View File

@@ -2,15 +2,14 @@ import { InfoCircleOutlined } from '@ant-design/icons';
import { Input, Tooltip } from 'antd';
import type { Notifier } from '../../../../../entity/notifiers';
import { FormValidator } from '../../../../../shared/lib';
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditEmailNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
return (
<>
<div className="mb-1 flex items-center">
@@ -27,17 +26,11 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
targetEmail: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
placeholder="example@gmail.com"
status={
notifier?.emailNotifier?.targetEmail &&
!FormValidator.isValidEmail(notifier.emailNotifier.targetEmail)
? 'error'
: undefined
}
/>
<Tooltip className="cursor-pointer" title="The email where you want to receive the message">
@@ -59,7 +52,7 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
smtpHost: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -82,7 +75,7 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
smtpPort: Number(e.target.value),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -104,17 +97,11 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
smtpUser: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
placeholder="user@gmail.com"
status={
notifier?.emailNotifier?.smtpUser &&
!FormValidator.isValidEmail(notifier.emailNotifier.smtpUser)
? 'error'
: undefined
}
/>
</div>
@@ -133,7 +120,7 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
smtpPassword: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -155,7 +142,7 @@ export function EditEmailNotifierComponent({ notifier, setNotifier, setIsUnsaved
from: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"

View File

@@ -5,10 +5,10 @@ import type { Notifier } from '../../../../../entity/notifiers';
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditSlackNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditSlackNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
return (
<>
<div className="mb-1 ml-[130px] max-w-[200px]" style={{ lineHeight: 1 }}>
@@ -38,7 +38,7 @@ export function EditSlackNotifierComponent({ notifier, setNotifier, setIsUnsaved
botToken: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"
@@ -63,7 +63,7 @@ export function EditSlackNotifierComponent({ notifier, setNotifier, setIsUnsaved
targetChatId: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"

View File

@@ -7,10 +7,10 @@ import type { Notifier } from '../../../../../entity/notifiers';
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditTeamsNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditTeamsNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
const value = notifier?.teamsNotifier?.powerAutomateUrl || '';
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
@@ -22,7 +22,7 @@ export function EditTeamsNotifierComponent({ notifier, setNotifier, setIsUnsaved
powerAutomateUrl,
},
});
setIsUnsaved(true);
setUnsaved();
};
return (

View File

@@ -7,10 +7,10 @@ import type { Notifier } from '../../../../../entity/notifiers';
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditTelegramNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditTelegramNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
const [isShowHowToGetChatId, setIsShowHowToGetChatId] = useState(false);
useEffect(() => {
@@ -42,7 +42,7 @@ export function EditTelegramNotifierComponent({ notifier, setNotifier, setIsUnsa
botToken: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"
@@ -78,7 +78,7 @@ export function EditTelegramNotifierComponent({ notifier, setNotifier, setIsUnsa
targetChatId: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"
@@ -137,7 +137,7 @@ export function EditTelegramNotifierComponent({ notifier, setNotifier, setIsUnsa
threadId: checked ? notifier.telegramNotifier.threadId : undefined,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
/>
@@ -171,7 +171,7 @@ export function EditTelegramNotifierComponent({ notifier, setNotifier, setIsUnsa
threadId: !isNaN(threadId!) ? threadId : undefined,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"

View File

@@ -7,10 +7,10 @@ import { WebhookMethod } from '../../../../../entity/notifiers/models/webhook/We
interface Props {
notifier: Notifier;
setNotifier: (notifier: Notifier) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditWebhookNotifierComponent({ notifier, setNotifier, setIsUnsaved }: Props) {
export function EditWebhookNotifierComponent({ notifier, setNotifier, setUnsaved }: Props) {
return (
<>
<div className="flex items-center">
@@ -27,7 +27,7 @@ export function EditWebhookNotifierComponent({ notifier, setNotifier, setIsUnsav
webhookUrl: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"
@@ -50,7 +50,7 @@ export function EditWebhookNotifierComponent({ notifier, setNotifier, setIsUnsav
webhookMethod: value,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full"

View File

@@ -250,7 +250,10 @@ export function EditStorageComponent({
<EditS3StorageComponent
storage={storage}
setStorage={setStorage}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestConnectionSuccess(false);
}}
/>
)}
@@ -258,7 +261,10 @@ export function EditStorageComponent({
<EditGoogleDriveStorageComponent
storage={storage}
setStorage={setStorage}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestConnectionSuccess(false);
}}
/>
)}
@@ -266,7 +272,10 @@ export function EditStorageComponent({
<EditNASStorageComponent
storage={storage}
setStorage={setStorage}
setIsUnsaved={setIsUnsaved}
setUnsaved={() => {
setIsUnsaved(true);
setIsTestConnectionSuccess(false);
}}
/>
)}
</div>

View File

@@ -7,10 +7,10 @@ import type { StorageOauthDto } from '../../../../../entity/storages/models/Stor
interface Props {
storage: Storage;
setStorage: (storage: Storage) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditGoogleDriveStorageComponent({ storage, setStorage, setIsUnsaved }: Props) {
export function EditGoogleDriveStorageComponent({ storage, setStorage, setUnsaved }: Props) {
const goToAuthUrl = () => {
if (!storage?.googleDriveStorage?.clientId || !storage?.googleDriveStorage?.clientSecret) {
return;
@@ -60,7 +60,7 @@ export function EditGoogleDriveStorageComponent({ storage, setStorage, setIsUnsa
clientId: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -83,7 +83,7 @@ export function EditGoogleDriveStorageComponent({ storage, setStorage, setIsUnsa
clientSecret: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"

View File

@@ -6,10 +6,10 @@ import type { Storage } from '../../../../../entity/storages';
interface Props {
storage: Storage;
setStorage: (storage: Storage) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: Props) {
export function EditNASStorageComponent({ storage, setStorage, setUnsaved }: Props) {
return (
<>
<div className="mb-1 flex items-center">
@@ -26,7 +26,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
host: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -48,7 +48,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
port: value,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -72,7 +72,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
share: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -94,7 +94,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
username: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -116,7 +116,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
password: e.target.value,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -138,7 +138,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
useSsl: checked,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
/>
@@ -162,7 +162,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
domain: e.target.value.trim() || undefined,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -197,7 +197,7 @@ export function EditNASStorageComponent({ storage, setStorage, setIsUnsaved }: P
path: pathValue || undefined,
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"

View File

@@ -1,15 +1,20 @@
import { InfoCircleOutlined } from '@ant-design/icons';
import { Input, Tooltip } from 'antd';
import { DownOutlined, InfoCircleOutlined, UpOutlined } from '@ant-design/icons';
import { Checkbox, Input, Tooltip } from 'antd';
import { useState } from 'react';
import type { Storage } from '../../../../../entity/storages';
interface Props {
storage: Storage;
setStorage: (storage: Storage) => void;
setIsUnsaved: (isUnsaved: boolean) => void;
setUnsaved: () => void;
}
export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Props) {
export function EditS3StorageComponent({ storage, setStorage, setUnsaved }: Props) {
const hasAdvancedValues =
!!storage?.s3Storage?.s3Prefix || !!storage?.s3Storage?.s3UseVirtualHostedStyle;
const [showAdvanced, setShowAdvanced] = useState(hasAdvancedValues);
return (
<>
<div className="mb-2 flex items-center">
@@ -36,7 +41,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
s3Bucket: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -58,7 +63,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
s3Region: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -67,7 +72,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
</div>
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Access Key</div>
<div className="min-w-[110px]">Access key</div>
<Input.Password
value={storage?.s3Storage?.s3AccessKey || ''}
onChange={(e) => {
@@ -80,7 +85,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
s3AccessKey: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -89,7 +94,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
</div>
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Secret Key</div>
<div className="min-w-[110px]">Secret key</div>
<Input.Password
value={storage?.s3Storage?.s3SecretKey || ''}
onChange={(e) => {
@@ -102,7 +107,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
s3SecretKey: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -124,7 +129,7 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
s3Endpoint: e.target.value.trim(),
},
});
setIsUnsaved(true);
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
@@ -138,6 +143,85 @@ export function EditS3StorageComponent({ storage, setStorage, setIsUnsaved }: Pr
<InfoCircleOutlined className="ml-2" style={{ color: 'gray' }} />
</Tooltip>
</div>
<div className="mt-4 mb-3 flex items-center">
<div
className="flex cursor-pointer items-center text-sm text-blue-600 hover:text-blue-800"
onClick={() => setShowAdvanced(!showAdvanced)}
>
<span className="mr-2">Advanced settings</span>
{showAdvanced ? (
<UpOutlined style={{ fontSize: '12px' }} />
) : (
<DownOutlined style={{ fontSize: '12px' }} />
)}
</div>
</div>
{showAdvanced && (
<>
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Folder prefix</div>
<Input
value={storage?.s3Storage?.s3Prefix || ''}
onChange={(e) => {
if (!storage?.s3Storage) return;
setStorage({
...storage,
s3Storage: {
...storage.s3Storage,
s3Prefix: e.target.value.trim(),
},
});
setUnsaved();
}}
size="small"
className="w-full max-w-[250px]"
placeholder="my-prefix/ (optional)"
/>
<Tooltip
className="cursor-pointer"
title="Optional prefix for all object keys (e.g., 'backups/' or 'my_team/'). May not work with some S3-compatible storages."
>
<InfoCircleOutlined className="ml-2" style={{ color: 'gray' }} />
</Tooltip>
</div>
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Virtual host</div>
<Checkbox
checked={storage?.s3Storage?.s3UseVirtualHostedStyle || false}
onChange={(e) => {
if (!storage?.s3Storage) return;
setStorage({
...storage,
s3Storage: {
...storage.s3Storage,
s3UseVirtualHostedStyle: e.target.checked,
},
});
setUnsaved();
}}
>
Use virtual-styled domains
</Checkbox>
<Tooltip
className="cursor-pointer"
title="Use virtual-hosted-style URLs (bucket.s3.region.amazonaws.com) instead of path-style (s3.region.amazonaws.com/bucket). May be required if you see COS errors."
>
<InfoCircleOutlined className="ml-2" style={{ color: 'gray' }} />
</Tooltip>
</div>
</>
)}
<div className="mb-5" />
</>
);
}

View File

@@ -31,6 +31,20 @@ export function ShowS3StorageComponent({ storage }: Props) {
<div className="min-w-[110px]">Endpoint</div>
{storage?.s3Storage?.s3Endpoint || '-'}
</div>
{storage?.s3Storage?.s3Prefix && (
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Prefix</div>
{storage.s3Storage.s3Prefix}
</div>
)}
{storage?.s3Storage?.s3UseVirtualHostedStyle && (
<div className="mb-1 flex items-center">
<div className="min-w-[110px]">Virtual Host</div>
Enabled
</div>
)}
</>
);
}

View File

@@ -5,7 +5,7 @@ export function AuthNavbarComponent() {
<div className="m-3 flex h-[65px] items-center justify-center p-3 sm:justify-start">
<div className="flex items-center gap-3 hover:opacity-80">
<a href="https://postgresus.com" target="_blank" rel="noreferrer">
<img className="h-[35px] w-[35px]" src="/logo.svg" />
<img className="h-[45px] w-[45px]" src="/logo.svg" />
</a>
<div className="text-xl font-bold">

View File

@@ -124,11 +124,11 @@ export const MainScreenComponent = () => {
<div className="mb-3 flex h-[60px] items-center rounded bg-white p-3 shadow">
<div className="flex items-center gap-3 hover:opacity-80">
<a href="https://postgresus.com" target="_blank" rel="noreferrer">
<img className="h-[45px] w-[45px]" src="/logo.svg" />
<img className="h-[40px] w-[40px]" src="/logo.svg" />
</a>
</div>
<div className="ml-4">
<div className="ml-5">
{!isLoading && (
<WorkspaceSelectionComponent
workspaces={workspaces}